Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Недопустимый тип криптографического сообщения. #9

Open
frantic0589 opened this issue Dec 14, 2018 · 19 comments

Comments

@frantic0589
Copy link

Добрый день. Для работы требуется установленное КриптоПРО CSP на ПК, или вся информация об OID и ключах шифрования тут имеется?
Пытаюсь декодировать зашифрованный файл с подписью:
GostSignedCms gostSignedCms = new GostSignedCms();
gostSignedCms.Decode(fileName);

Получаю ошибку: "System.Security.Cryptography.CryptographicException: Недопустимый тип криптографического сообщения."

С установленным криптопро csp и стандартным классом .net EnvelopedCms все удается сделать. Но имеется необходимость сделать реализацию без установленного криптопро, чтобы можно было опубликовать приложение в вэб, без установленного криптопро, в котором имеется вся информация по алгоритмам шифрования: https://cpdn.cryptopro.ru/content/csp40/html/group___pro_c_s_p_ex_DP8.html

@AlexMAS
Copy link
Owner

AlexMAS commented Dec 14, 2018

Здравствуйте. Библиотека представляет собой обёртку над криптопровайдером - CryptoPro или VipNet. Т.е. реализует часть абстракций из System.Security.Cryptography на базе этих криптопровайдеров. Соответственно, в большинстве случаев нужно наличие установленного CryptoPro или VipNet. Можете привести пример кода, который возвращает исключение?

@frantic0589
Copy link
Author

Сам метод Decode(fileName) возвращает ошибку.

@AlexMAS
Copy link
Owner

AlexMAS commented Dec 14, 2018

В случае, если криптопровайдер не установлен?

@frantic0589
Copy link
Author

Нет, даже когда установлен.

@AlexMAS
Copy link
Owner

AlexMAS commented Dec 14, 2018

Я постараюсь воспроизвести ошибку. Пока могу предложить посмотреть примеры, может что-то удастся найти https://github.com/AlexMAS/GostCryptography/tree/master/Source/GostCryptography.Tests/Pkcs

@AlexMAS
Copy link
Owner

AlexMAS commented Dec 14, 2018

Проверил на своей машине, все должно работать. Сертификат установлен нормально? Может проблема с поиском самого сертификата.

Сам метод Decode(fileName) возвращает ошибку.

Не могу найти такую перегрузку.

@frantic0589
Copy link
Author

Сертификат в данном случае не нужен. Метод декодирует зашифрованное сообщение.

@AlexMAS
Copy link
Owner

AlexMAS commented Dec 17, 2018

Видимо, мы говорим про разные вещи. Можете всё-таки привести пример кода.

@frantic0589
Copy link
Author

Ну в принципе я уже выше писал:
GostSignedCms gostSignedCms = new GostSignedCms();
gostSignedCms.Decode(fileName);
В fileName массив байтов файла bin или p7s

@AlexMAS
Copy link
Owner

AlexMAS commented Dec 17, 2018

Я попробовал возможные варианты, но не могу получить подобного исключения. На основе этого есть предположение, что проблема с данными. Вы уверены, что с ними все нормально? Как вы получаете быйты для декодирования? Согласно примеру, который вы привели, содержимое сообщения должно быть включено (detached=false).

В этой версии также есть одна особенность, нужно явно установить тип криптопровайдера. В вашем случае это не должно играть роли, тем не менее:

// ViPNet CSP (by default)
GostCryptoConfig.ProviderType = ProviderTypes.VipNet;

// CryptoPro CSP
GostCryptoConfig.ProviderType = ProviderTypes.CryptoPro;

@AlexMAS
Copy link
Owner

AlexMAS commented Dec 19, 2018

Для информации.

Выпустил v2.0.0, которая включает поддержку алгоритмов 2012 года, а также исправление известных ошибок совместимости с ViPNet CSP 4.2. Версия была протестирована на конфигурациях:

  • Windows 10 x64, CryptoPro CSP 4.0.9963
  • Windows 10 x64, ViPNet CSP 4.2.8.51670

В случае с CryptoPro CSP важно установить версию не ниже 4.0.9963 (на момент тестирования последний private-релиз), поскольку она содержит исправление критической ошибки при работе с сертификатами ГОСТ Р 34.10-2012/1024.

Также нужно отметить, что ViPNet CSP до последней на данный момент версии 4.2.8.51670 (включительно) не поддерживает создание производных симметричных ключей на основе хэш-функций ГОСТ Р 34.11-2012. Ничего критичного в этом нет, это оказывает влияние только на возможность генереции случайных симметричных ключей с использованием методов Gost_R3411_2012_256_PRF.DeriveKey() и Gost_R3411_2012_512_PRF.DeriveKey().

Наконец, в ходе добавления поддержки алгоритмов 2012 года были произведены крупные изменения, включающие перенос/переименование существующих классов. Для перехода с v1.0 на v2.0 нужно воспользоваться следующей иструкцией.

@AlexMAS
Copy link
Owner

AlexMAS commented Dec 27, 2018

@frantic0589 Здравствуйте. Получилось решить проблему?

@frantic0589
Copy link
Author

@AlexMAS Добрый день. К сожалению пока нет.

@Bykiev
Copy link

Bykiev commented Dec 29, 2018

@frantic0589, а вы пробовали проверять подпись с помощью утилиты cryptcp от Крипто-Про? Скорее всего, что-то не так с подписью в файле.

@avragov
Copy link

avragov commented May 15, 2019

А причем здесь вообще КриптоПро или любой другой криптопровайдер?
Сообщение в формате Pkcs7 декодируется из структуры ASN.1. Вы же не подпись у сообщения проверяете и не расшифровываете его.
Вангую, что формат сообщения не соответствует указываемому формату при декодировании.
Лучше воспользоваться Certenroll API.

@AlexMAS
Copy link
Owner

AlexMAS commented Sep 2, 2019

@frantic0589 Получилось решить проблему? :)

@frantic0589
Copy link
Author

К сожалению нет. Вы спрашивали при чем здесь криптопровайдер, сообщение закодировано по РФ ГОСТу. Windows без криптопро не знает про наш ГОСТ. И только после установки криптопровайдер в реест записывается значения типа хэш и ключ, после чего он может по нашему ГОСТу шифровать и читать эти сообщения.

@AlexMAS
Copy link
Owner

AlexMAS commented Sep 4, 2019

@frantic0589 Правильно ли я понимаю, что указанная вами ошибка возникает только когда не установлен криптопровайдер?

@avragov
Copy link

avragov commented Sep 6, 2019

Идет подмена понятий. Сообщение м.б.зашифровано по ГОСТу, а не закодировано. По ГОСТу также может быть вычислена эцп или хэш. ASN.1 это формат кодирования сообщения

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants