На шифрацию сообщений для ФСС библиотека не работает. Сейчас разобрался почему
Дело оказалось вот в чем:
Для генерации случайный ключ для использования в алгоритме симметричного шифрования используется функция GenerateKey
https://docs.cryptopro.r...tricalgorithmgeneratekeyРассмотрим поподробнее что она генерирует, для этого получим этот случайный ключ методом ExportKey
https://docs.cryptopro.r...metricalgorithmexportkeyИ увидим следующую картину:
"31 2E 32 2E 36 34 33 2E 37 2E 31 2E 32 2E 35 2E 31 2E 31 00:0A 20 00 00 49 2E 00 00 4D 41 47 31 00 02 00 00 30 13 06 07 2A 85 03 02 02 24 00 06 08 2A 85 03 07 01 01 02 02 C4 52 56 D2 CB 5C A6 ED 81 75 73 B3 48 DC E7 52 44 46 3C E6 72 47 A5 EC 90 81 01 3B C6 F1 27 5E BF BF D8 B6 70 DC 4C 8A A0 41 23 C4 E8 CE 01 BB 5A 43 24 CF EF 16 32 7A 91 CB DA B4 90 E0 49 34:01 20 00 00 1E 66 00 00 FD 51 4A 37 1E 66 00 00 9D 61 3F 79 98 32 74 FD 6C 33 C1 B5 09 E5 BE FC 57 80 EF 66 7D 94 61 41 A3 6E CA DD 75 F3 DD 75 80 C8 6C 4C 54 CA AF DC 95 47 4E CC 30 09 06 07 2A 85 03 02 02 1F 01"
В первом блоке перед двоеточием стоит “31 2E 32 2E 36 34 33 2E 37 2E 31 2E 32 2E 35 2E 31 2E 31 00” это '1.2.643.7.1.2.5.1.1' - Параметры шифрования ключа обмена. Тут все правильно
Теперь нас интересует 3-й блок (после 2-го двоеточия) в нем находится, симметричный ключ, зашифрованный на ключе обмена.
Обратим внимание на конец этого блока “30 09 06 07 2A 85 03 02 02 1F 01” смотря формат симетричного ключа тут находятся “параметры алгоритма шифрования ГОСТ 28147-89 Содержит ASN1 структуру в DER кодировке, определяющую параметры алгоритма шифрования ГОСТ 28147-89”
А теперь посмотрим с каким же параметром был сгенерирован симетричный ключ.
“06 07 2A 85 03 02 02 1F 01” соответсвует '1.2.643.2.2.31.1'
И мы увидели страшное вместо '1.2.643.7.1.2.5.1.1' используется '1.2.643.2.2.31.1'
Обратимся к статье
https://ru.wikipedia.org...%9E%D0%A1%D0%A2_28147-89Идентификатор: id-Gost28147-89-CryptoPro-A-ParamSet
OID: 1.2.643.2.2.31.1
Данный узел замен используется криптопровайдером CryptoPRO CSP по умолчанию. Также данный узел замен используется в ПО «Верба-О»[14].
Идентификатор: id-tc26-gost-28147-param-Z
OID: 1.2.643.7.1.2.5.1.1
Данный узел зафиксирован как рекомендуемый в методических рекомендациях ТК26[16], и как единственный в новой ревизии стандарта ГОСТ Р 34.12-2015[17] и ГОСТ 34.12-2018[18], а также RFC 7836 и RFC 8891.
То есть программисты Криптопро сгенерировали случайный ключ для использования в алгоритме симметричного шифрования вместо ТК26 который рекомендуется росстандартом в своем любимом OID: 1.2.643.2.2.31.1 при этом нам показывают что ключ сгенерировался в OID: 1.2.643.7.1.2.5.1.1 ( я не даром начал описание ошибки с описания первого блока перед двоеточием)
Остальное просто.
Почему мы НЕ можем зашифровать сообщение ФСС? Потому что ФСС как и все органы власти Российской Федерации ожидают узел замены на основании ТК26 как рекомендованного в методических рекомендациях. Соответственно не могут расшифровать наше сообщение на id-Gost28147-89-CryptoPro-A-ParamSet.
Почему мы можем расшифровать сообщение ФСС? Тут тоже все просто. Слава богу в этом случае программисты просто загружают Ключ обмена полученный из ФСС и дешефруют сообщение на нем.
Теперь обращение к программистам КриптоПро. Обратите на это внимание и исправьте в будущей версии