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

Выбор предпочитаемого криптопровайдера для алгоритма #13

Closed
a13xg0 opened this issue Feb 4, 2019 · 1 comment

Comments

@a13xg0
Copy link

a13xg0 commented Feb 4, 2019

Ситуация следующая: на одном сервере установлены КриптоПРО 4 и VipNet. При шифровании по ГОСТ 34.10 - 2012 (ЭЛН и ФСС :)) выдавалось сообщение "Плохой ключ" при попытке шифрования сессионного ключа.

Даже при использовании в коде

 using (var sessionKey = new Gost_28147_89_SymmetricAlgorithm(ProviderType.CryptoPro_2012_512))

Сама ошибка:

System.Security.Cryptography.CryptographicException: Плохой ключ.

   в GostCryptography.Native.CryptoApiHelper.ExportCspBlob(SafeKeyHandleImpl symKeyHandle, SafeKeyHandleImpl keyExchangeHandle, Int32 blobType)
   в GostCryptography.Gost_R3410.Gost_R3410_KeyExchangeAlgorithm.EncodeKeyExchangeInternal(Gost_28147_89_SymmetricAlgorithm keyExchangeAlgorithm, Int32 keyExchangeExportAlgId)
   в GostCryptography.Gost_R3410.Gost_R3410_KeyExchangeAlgorithm.EncodeKeyExchangeInternal(Gost_28147_89_SymmetricAlgorithm keyExchangeAlgorithm, GostKeyExchangeExportMethod keyExchangeExportMethod)
   в GostCryptography.Gost_R3410.Gost_R3410_KeyExchangeAlgorithm.EncodeKeyExchange(SymmetricAlgorithm keyExchangeAlgorithm, GostKeyExchangeExportMethod keyExchangeExportMethod)
   в GostCryptography.Gost_R3410.Gost_R3410_KeyExchangeFormatter`3.CreateKeyExchangeInfo(SymmetricAlgorithm keyExchangeAlgorithm)
   в GostCryptography.Gost_R3410.Gost_R3410_KeyExchangeFormatter`3.CreateKeyExchangeData(SymmetricAlgorithm keyExchangeAlgorithm)
   в GostCryptography.Xml.GostEncryptedXmlImpl.EncryptKey(Gost_28147_89_SymmetricAlgorithmBase sessionKey, GostAsymmetricAlgorithm publicKey)
   в GostCryptography.Xml.GostEncryptedXml.EncryptKey(Gost_28147_89_SymmetricAlgorithmBase sessionKey, GostAsymmetricAlgorithm publicKey)

Для себя решил проблему, изменив в Native\CryptoAPIHelper.cs в методе public static ProviderType GetAvailableProviderType_2012_512()
Сначала проверку на установленный криптопро, затем на випнет.

Собственно вопрос: а как можно в новой версии установить предпочитаемый тип криптопровайдера? В классе GostCryptoConfig они все readonly.

@AlexMAS
Copy link
Owner

AlexMAS commented Feb 4, 2019

@a13xg0 Спасибо, как-то сразу об этом не подумал.

Выпустил v2.0.3, в ней есть возможность установить желаемый тип криптопровайдера явно:

GostCryptoConfig.ProviderType = <VipNet или CryptoPro>;
GostCryptoConfig.ProviderType_2012_512= <VipNet_2012_512 или CryptoPro_2012_512>;
GostCryptoConfig.ProviderType_2012_1024= <VipNet_2012_1024 или CryptoPro_2012_1024>;

По умолчанию остается старая логика - автоматическое определение предустановленного криптопровайдера, ViPNet в приоритете.

Если вопрос решен, предлагаю закрыть задачу. :)

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

2 participants