(2014-10-09 13:56:19 отредактировано sergeymosh)

Проверка подписи по ГОСТ Р 34.10-2001 C#

Добрый день!

Провозился пару дней с проверкой подписи, сгенерированной плагином РУТОКЕН Web (ГОСТ Р 34.10-2001), результат отрицательный, проверка не проходит. Проверяю подпись методом RutokenWeb.CheckSignature из библиотеки Rutoken.dll, взятой из примера для ASP.NET. Посмотрел пример token_test на php, на тех данных все работает.
Делаю примерно следующее:

(JS)
var sign = plugin.rtwHashSign(containerName, message);
(C#)
RutokenWeb.CheckSignature(sign, RutokenWeb.GetHash(message), publicKey);

Наверное, все очень просто, помогите разобраться.

Re: Проверка подписи по ГОСТ Р 34.10-2001 C#

Добрый день. В коде вы используете функцию rtwHashSign, которая работает в кодировке  win1251, она разрабатывалась для устройства PinPAD, в документации это не отражено, исправим. Для Рутокен Web рекомендуется использовать связку  Sha256.hash + rtwSign на клиенте, они работают в кодировке utf8. Реализация хеширования представлена в файле hash256.js на демонстрационной площадке. Код площадки можно взять здесь https://download.rutoken.ru/Rutoken_Web … TW_ASP.zip.


т.е. код должен выглядеть примерно следующим образом

var hash = Sha256.hash(text);
g.token.rtwSign(name,hash);

С уважением, Алексей Лазарев

С уважением, Алексей Лазарев, Компания "Актив"

Re: Проверка подписи по ГОСТ Р 34.10-2001 C#

Да, спасибо, все получилось

Re: Проверка подписи по ГОСТ Р 34.10-2001 C#

В качестве альтернативного варианта можно использовать rtwHashSign, предварительно преобразовав текст:

var ctext = Win1251ToHEX(text);


    var Win1251ToHEX = function (str) {
        var Win1251 =
        {
            0x402: 0x80,
            0x403: 0x81,
            0x201A: 0x82,
            0x453: 0x83,
            0x201E: 0x84,
            0x2026: 0x85,
            0x2020: 0x86,
            0x2021: 0x87,
            0x20AC: 0x88,
            0x2030: 0x89,
            0x409: 0x8A,
            0x2039: 0x8B,
            0x40A: 0x8C,
            0x40C: 0x8D,
            0x40B: 0x8E,
            0x40F: 0x8F,
            0x452: 0x90,
            0x2018: 0x91,
            0x2019: 0x92,
            0x201C: 0x93,
            0x201D: 0x94,
            0x2022: 0x95,
            0x2013: 0x96,
            0x2014: 0x97,
            0x2122: 0x99,
            0x459: 0x9A,
            0x203A: 0x9B,
            0x45A: 0x9C,
            0x45C: 0x9D,
            0x45B: 0x9E,
            0x45F: 0x9F,
            0xA0: 0xA0,
            0x40E: 0xA1,
            0x45E: 0xA2,
            0x408: 0xA3,
            0xA4: 0xA4,
            0x490: 0xA5,
            0xA6: 0xA6,
            0xA7: 0xA7,
            0x401: 0xA8,
            0xA9: 0xA9,
            0x404: 0xAA,
            0xAB: 0xAB,
            0xAC: 0xAC,
            0xAD: 0xAD,
            0xAE: 0xAE,
            0x407: 0xAF,
            0xB0: 0xB0,
            0xB1: 0xB1,
            0x406: 0xB2,
            0x456: 0xB3,
            0x491: 0xB4,
            0xB5: 0xB5,
            0xB6: 0xB6,
            0xB7: 0xB7,
            0x451: 0xB8,
            0x2116: 0xB9,
            0x454: 0xBA,
            0xBB: 0xBB,
            0x458: 0xBC,
            0x405: 0xBD,
            0x455: 0xBE,
            0x457: 0xBF,
            0x410: 0xC0,
            0x411: 0xC1,
            0x412: 0xC2,
            0x413: 0xC3,
            0x414: 0xC4,
            0x415: 0xC5,
            0x416: 0xC6,
            0x417: 0xC7,
            0x418: 0xC8,
            0x419: 0xC9,
            0x41A: 0xCA,
            0x41B: 0xCB,
            0x41C: 0xCC,
            0x41D: 0xCD,
            0x41E: 0xCE,
            0x41F: 0xCF,
            0x420: 0xD0,
            0x421: 0xD1,
            0x422: 0xD2,
            0x423: 0xD3,
            0x424: 0xD4,
            0x425: 0xD5,
            0x426: 0xD6,
            0x427: 0xD7,
            0x428: 0xD8,
            0x429: 0xD9,
            0x42A: 0xDA,
            0x42B: 0xDB,
            0x42C: 0xDC,
            0x42D: 0xDD,
            0x42E: 0xDE,
            0x42F: 0xDF,
            0x430: 0xE0,
            0x431: 0xE1,
            0x432: 0xE2,
            0x433: 0xE3,
            0x434: 0xE4,
            0x435: 0xE5,
            0x436: 0xE6,
            0x437: 0xE7,
            0x438: 0xE8,
            0x439: 0xE9,
            0x43A: 0xEA,
            0x43B: 0xEB,
            0x43C: 0xEC,
            0x43D: 0xED,
            0x43E: 0xEE,
            0x43F: 0xEF,
            0x440: 0xF0,
            0x441: 0xF1,
            0x442: 0xF2,
            0x443: 0xF3,
            0x444: 0xF4,
            0x445: 0xF5,
            0x446: 0xF6,
            0x447: 0xF7,
            0x448: 0xF8,
            0x449: 0xF9,
            0x44A: 0xFA,
            0x44B: 0xFB,
            0x44C: 0xFC,
            0x44D: 0xFD,
            0x44E: 0xFE,
            0x44F: 0xFF
        };
        var o1, o2, c, coded;
        coded = '';
        for (c = 0; c < str.length; c++) {
            o2 = str.charCodeAt(c);
            o1 = o2 < 128 ? o2 : Win1251[o2];
            if (o1 == null && o2 > 0)
                o1 = 63; // if can't be decoded, put '?'
            coded += ((o1 & 0xf0) >> 4).toString(16);
            o1 = o1 & 0x0f;
            coded += o1.toString(16);
        }
        return coded;
    };

С уважением, Алексей Лазарев, Компания "Актив"