Статус: Участник
Группы: Участники
Зарегистрирован: 20.10.2008(UTC) Сообщений: 15
|
Здраствуйте! Вопрос такой: 1) Есть исходное сообщение (byte [] DataToSign) 2) Есть подпись сообщения. (byte [] SignedData) 3) Есть сертификат пользователя, который подписал это сообщение. (X509Certificate2 Cert) Как проверить верна ли подпись сердствами .NET разумется? (Verify) ??????????????????????? Сразу оговорюсь, что контейнера связанного с сертификатом НЕТ! Отредактировано пользователем 20 октября 2008 г. 19:11:54(UTC)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.12.2007(UTC) Сообщений: 390 Откуда: КриптоПро Поблагодарили: 2 раз в 2 постах
|
SignedData это 64 байта подписи без дополнительных форматов? Тогда проще всего так Код:Gost3411CryptoServiceProvider GostHash = new Gost3411CryptoServiceProvider();
byte[] rgbHash = GostHash.ComputeHash( DataToSign );
GostSignatureDeformatter deformater = new GostSignatureDeformatter(cert.PublicKey.Key);
deformater.VerifySignature( rgbHash, SignedData );
|
С уважением, Александр. |
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 20.10.2008(UTC) Сообщений: 15
|
В строчке : GostSignatureDeformatter deformater = new GostSignatureDeformatter(cert.PublicKey.Key); Вываливается ошибка The certificate key algorithm is not supported. а именно на свойстве Key В чём может быть дело? Крипто-Про CSP КС1 3.0.3300.1 Отредактировано пользователем 21 октября 2008 г. 8:58:46(UTC)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.12.2007(UTC) Сообщений: 390 Откуда: КриптоПро Поблагодарили: 2 раз в 2 постах
|
Скорее всего не установлен или некорректно установился КриптоПро Шарпей. Установилась ли утилита alarm? (C:\Program Files\Crypto Pro\Sharpei\alarm.exe). Если утилита установилась, то запустите В текущем каталоге будет создан файл osinfo.txt Вышлите его пожалуйста на адрес support@cryptopro.ruЕсли утилита не устаовилась, то сообщите номер версии КриптоПро Шарпей: Start/Settings/Control Pannel/Add Remove Programs/CryptoPro Sharpei/Click Here for support information |
С уважением, Александр. |
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 20.10.2008(UTC) Сообщений: 15
|
Выслал! Как корректно переустановить?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.12.2007(UTC) Сообщений: 390 Откуда: КриптоПро Поблагодарили: 2 раз в 2 постах
|
Машина перезагружалась после установки? |
С уважением, Александр. |
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 20.10.2008(UTC) Сообщений: 15
|
Перезагрузил машину, ошибка The certificate key algorithm is not supported ушла. Теперь не работает проверка подписи, точнее она всегда выдает false bool ver = deformater.VerifySignature( rgbHash, SignedData );
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.12.2007(UTC) Сообщений: 390 Откуда: КриптоПро Поблагодарили: 2 раз в 2 постах
|
Скорее всего подпись сформирована с помощью класса Gost3410CryptoServiceProvider и его метода Sign. Формат подписи у провайдера (Gost3410CryptoServiceProvider) и у форматера (GostSignatureFormatter) различный - перевернутый. 1. Можно формировать подпись при помощи класса GostSignatureFormatter Код:GostSignatureFormatter formatter = new GostSignatureFormatter(Cert.PrivateKey);
byte[] SignedData = formatter.CreateSignature(rgbHash);
и проверять его при помощи класса GostSignatureDeformatter Код:GostSignatureDeformatter deformater = new GostSignatureDeformatter(Cert.PublicKey.Key);
bool ret = deformater.VerifySignature(rgbHash, SignedData);
2. Можно формировать подпись при помощи метода Sign класса Gost3410CryptoServiceProvider Код:Gost3410CryptoServiceProvider prov = (Gost3410CryptoServiceProvider)cert.PrivateKey;
byte[] SignedData = prov.SignData(DataToSign, hash);
переворачивать ее перед проверкой Код:Array.Reverse(SignedData);
и проверять при помощи класса GostSignatureDeformatter (см. 1). 3. Можно формировать подпись при помощи метода Sign класса Gost3410CryptoServiceProvider (см. 2), и проверять ее при помощи метода Verify. При этом пользуясь явным приведением от AsymmetricAlgorithm к Gost3410: Код:Gost3410 publicProv = (Gost3410)(cert.PublicKey.Key);
bool ret = publicProv.VerifySignature(rgbHash, SignedData);
Во всех примерах, предполагалось: что при формировании подписи сертификат находится в store "MY" и связан с соответствующим секретным ключем. При проверке подписи, этого не требуется. |
С уважением, Александр. |
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 20.10.2008(UTC) Сообщений: 15
|
Большое спасибо за разъяснения особенно за этот кусочек: GostSignatureFormatter formatter = new GostSignatureFormatter(Cert.PrivateKey); byte[] SignedData = formatter.CreateSignature(rgbHash); Все заработало.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close