Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Tone  
#1 Оставлено : 20 октября 2008 г. 19:10:03(UTC)
Tone

Статус: Участник

Группы: Участники
Зарегистрирован: 20.10.2008(UTC)
Сообщений: 15

Здраствуйте!
Вопрос такой:
1) Есть исходное сообщение (byte [] DataToSign)
2) Есть подпись сообщения. (byte [] SignedData)
3) Есть сертификат пользователя, который подписал это сообщение. (X509Certificate2 Cert)

Как проверить верна ли подпись сердствами .NET разумется? (Verify) ???????????????????????

Сразу оговорюсь, что контейнера связанного с сертификатом НЕТ!

Отредактировано пользователем 20 октября 2008 г. 19:11:54(UTC)  | Причина: Не указана

Offline Челпанов А.  
#2 Оставлено : 21 октября 2008 г. 0:09:34(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 );
С уважением, Александр.
Offline Tone  
#3 Оставлено : 21 октября 2008 г. 8:57:29(UTC)
Tone

Статус: Участник

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline Челпанов А.  
#4 Оставлено : 21 октября 2008 г. 16:11:54(UTC)
Челпанов А.

Статус: Активный участник

Группы: Участники
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 390
Мужчина
Откуда: КриптоПро

Поблагодарили: 2 раз в 2 постах
Скорее всего не установлен или некорректно установился КриптоПро Шарпей.
Установилась ли утилита alarm? (C:\Program Files\Crypto Pro\Sharpei\alarm.exe).
Если утилита установилась, то запустите
Код:
alarm info

В текущем каталоге будет создан файл osinfo.txt
Вышлите его пожалуйста на адрес support@cryptopro.ru
Если утилита не устаовилась, то сообщите номер версии КриптоПро Шарпей: Start/Settings/Control Pannel/Add Remove Programs/CryptoPro Sharpei/Click Here for support information
С уважением, Александр.
Offline Tone  
#5 Оставлено : 21 октября 2008 г. 17:36:53(UTC)
Tone

Статус: Участник

Группы: Участники
Зарегистрирован: 20.10.2008(UTC)
Сообщений: 15

Выслал!
Как корректно переустановить?
Offline Челпанов А.  
#6 Оставлено : 21 октября 2008 г. 17:49:58(UTC)
Челпанов А.

Статус: Активный участник

Группы: Участники
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 390
Мужчина
Откуда: КриптоПро

Поблагодарили: 2 раз в 2 постах
Машина перезагружалась после установки?
С уважением, Александр.
Offline Tone  
#7 Оставлено : 22 октября 2008 г. 9:54:43(UTC)
Tone

Статус: Участник

Группы: Участники
Зарегистрирован: 20.10.2008(UTC)
Сообщений: 15

Перезагрузил машину, ошибка The certificate key algorithm is not supported ушла. Теперь не работает проверка подписи, точнее она всегда выдает false
bool ver = deformater.VerifySignature( rgbHash, SignedData );
Offline Челпанов А.  
#8 Оставлено : 22 октября 2008 г. 17:33:45(UTC)
Челпанов А.

Статус: Активный участник

Группы: Участники
Зарегистрирован: 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" и связан с соответствующим секретным ключем. При проверке подписи, этого не требуется.
С уважением, Александр.
Offline Tone  
#9 Оставлено : 23 октября 2008 г. 15:30:26(UTC)
Tone

Статус: Участник

Группы: Участники
Зарегистрирован: 20.10.2008(UTC)
Сообщений: 15

Большое спасибо за разъяснения особенно за этот кусочек:
GostSignatureFormatter formatter = new GostSignatureFormatter(Cert.PrivateKey);
byte[] SignedData = formatter.CreateSignature(rgbHash);
Все заработало.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.