Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро .NET
»
CryptographicUnexpectedOperationException при использовании GostSignatureFormatter
Статус: Участник
Группы: Участники
Зарегистрирован: 18.05.2011(UTC) Сообщений: 24 Откуда: Moscow
|
Пытаюсь создать ЭЦП для данных. Примерный код: Код:
CspParameters cp = new CspParameters();
cp.KeyContainerName = "MyContainer";
cp.ProviderType = 75;
var gost = new Gost3410CryptoServiceProvider(cp) {PersistKeyInCsp = true};
var data = File.ReadAllBytes("c:\myfile.dat");
var gostHash = new Gost3411CryptoServiceProvider();
byte[] hashValue = gostHash.ComputeHash(data);
var signFormatter = new GostSignatureFormatter(csp);
byte[] signature = signFormatter.CreateSignature(hashValue);
При вызове CreateSignature я получаю: CryptographicUnexpectedOperationException: "Required object identifier (OID) cannot be found." Очевидно срабатывает проверка в начале метода GostSignatureFormatter.CreateSignature на то, что "oid_ == null". Идентификатор инициализируется в конструкторе GostSignatureFormatter как: oid_ = CryptoConfig.MapNameToOID("GOST3410") Выполнив это, я действительно получаю null. Что я делаю не так? Вложение(я): osinfo.xml (57kb) загружен 21 раз(а). osinfo.xml (56kb) загружен 9 раз(а).У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
Проверьте, работает ли Sharpei вообще. См. вопрос Почему не работает КриптоПро Sharpei в данной теме. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 18.05.2011(UTC) Сообщений: 24 Откуда: Moscow
|
Смирнов написал:Проверьте, работает ли Sharpei вообще. См. вопрос Почему не работает КриптоПро Sharpei в данной теме. Работает. Я могу подписывать/зашифровывать, т.е. это работает: Код:
var sign = csp.SignHash(hashValue)
csp.VerifyHash(hashValue,sign )
Заодно вопрос - зачем нужны GostSignatureFormatter/GostSignatureDeformatter? Ведь подписывать/проверять хэш можно методами Gost3410CryptoServiceProvider. В реализации GostSignatureFormatter.CreateSignature я увидел только то, что хэшу делает реверс. UPDATE: хотя возможно я поторопился говорить, что "работает". При попытке получить Gost3410CryptoServiceProvider из сертификата, сгенерированного с помощью csptest.exe (с параметрами: "-keyset -newkeyset -makecert -container test -keytype exchange -exportable"), я получаю исключение: Код:
var csp = X509Certificate2PrivateKey;
Исключение: Can't get PrivateKey from the certificate: System.NotSupportedException: The certificate key algorithm is not supported. at System.Security.Cryptography.X509Certificates.X509Certificate2.get_PrivateKey() Отредактировано пользователем 4 августа 2011 г. 17:13:49(UTC)
| Причина: Не указана
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
Shrike написал:Работает. Я могу подписывать/зашифровывать, т.е. это работает: Код:
var sign = csp.SignHash(hashValue)
csp.VerifyHash(hashValue,sign )
Этого мало. Работает ли код и пример по ссылке, приведённой мной выше? Shrike написал:Заодно вопрос - зачем нужны GostSignatureFormatter/GostSignatureDeformatter? Ведь подписывать/проверять хэш можно методами Gost3410CryptoServiceProvider. В реализации GostSignatureFormatter.CreateSignature я увидел только то, что хэшу делает реверс. В "обычной жизни" они не нужны. Зато, например, класс SignedXml по названию метода подписи автоматически получает правильный объект SignatureDescription и делает (и проверяет) правильную подпись XMLDSIG по ГОСТ Р 34.10-2001. |
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
Shrike написал:Исключение: Can't get PrivateKey from the certificate: System.NotSupportedException: The certificate key algorithm is not supported. at System.Security.Cryptography.X509Certificates.X509Certificate2.get_PrivateKey()
Значит, есть проблемы. Продолжайте по той же инструкции. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 18.05.2011(UTC) Сообщений: 24 Откуда: Moscow
|
Смирнов написал:Shrike написал:Исключение: Can't get PrivateKey from the certificate: System.NotSupportedException: The certificate key algorithm is not supported. at System.Security.Cryptography.X509Certificates.X509Certificate2.get_PrivateKey()
Значит, есть проблемы. Продолжайте по той же инструкции. Да, есть. Я приложил osinfo.xml к первому сообщению.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 18.05.2011(UTC) Сообщений: 24 Откуда: Moscow
|
Цитата:Shrike написал:Заодно вопрос - зачем нужны GostSignatureFormatter/GostSignatureDeformatter? Ведь подписывать/проверять хэш можно методами Gost3410CryptoServiceProvider. В реализации GostSignatureFormatter.CreateSignature я увидел только то, что хэшу делает реверс. В "обычной жизни" они не нужны. Зато, например, класс SignedXml по названию метода подписи автоматически получает правильный объект SignatureDescription и делает (и проверяет) правильную подпись XMLDSIG по ГОСТ Р 34.10-2001. А разве подпись создаваемая методами Gost3410CryptoServiceProvider SignHash/CreateSignature не по ГОСТ Р 34.10-2001? Кстати, неплохо бы отразить в документации, что CreateSignature просто вызывает SignHash.
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
Shrike написал:Да, есть. Я приложил osinfo.xml к первому сообщению. В журнале много ошибок. Sharpei установлен некорректно. Попробуйте переустановить. |
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
Shrike написал:А разве подпись создаваемая методами Gost3410CryptoServiceProvider SignHash/CreateSignature не по ГОСТ Р 34.10-2001? По ГОСТ, но для XMLDSIG требуется специальная обработка. Для этого и придуманы Formatter/Deformatter. Для ГОСТ в XMLDSIG необходимо перевернуть подпись, возвращаемую из SignHash. Shrike написал:Кстати, неплохо бы отразить в документации, что CreateSignature просто вызывает SignHash. Зачем? Метод форматирования не должен быть прозрачен и документирован для пользователя. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 18.05.2011(UTC) Сообщений: 24 Откуда: Moscow
|
Смирнов написал:Shrike написал:Да, есть. Я приложил osinfo.xml к первому сообщению. В журнале много ошибок. Sharpei установлен некорректно. Попробуйте переустановить. Удалил, перегрузился, скачал последние RTE&SDK, поставил, перегрузился. Результат тот же. Куда бежать?
|
|
|
|
Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро .NET
»
CryptographicUnexpectedOperationException при использовании GostSignatureFormatter
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close