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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline YeTi  
#1 Оставлено : 8 июля 2009 г. 16:19:28(UTC)
YeTi

Статус: Новичок

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

подписываю файлы CryptMsg функциями. подпись хранится отдельно от файла.
файлы хранятся на отдельном сервере.
теперь для проверки мне нужно скачать эти файлы и проверить. файлы очень большие.
стандартными средствами это происходит очень медленно.

если посчитать хеш CryptCreateHash,CryptHashData,CryptGetHashParam(..HP_HASHVAL..) при записи файла на сервер, возможно его будет проверить используя detached pkcs7 подпись?

или возможно как то другими функциями процесс разделить?
Offline Юрий  
#2 Оставлено : 8 июля 2009 г. 16:32:49(UTC)
Юрий

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

Группы: Участники
Зарегистрирован: 22.01.2008(UTC)
Сообщений: 671
Мужчина
Российская Федерация
Откуда: Йошкар-Ола

Сказал «Спасибо»: 3 раз
Поблагодарили: 95 раз в 68 постах
Цитата:
если посчитать хеш CryptCreateHash,CryptHashData,CryptGetHashParam(..HP_HASHVAL..) при записи файла на сервер, возможно его будет проверить используя detached pkcs7 подпись?

Конечно можно. Только вот рекомендую в этом случае не использовать PKCS и сохранять подпись просто в бинарном виде.
С уважением,
Юрий Строжевский
Offline YeTi  
#3 Оставлено : 9 июля 2009 г. 20:33:08(UTC)
YeTi

Статус: Новичок

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

PKCS нужна в любом случае. а 2 подписи хранить не хочется, если можно обойтись.

получаю хеш
CryptAcquireContext( &hProv, NULL, CP_GR3410_2001_PROV_A, PROV_GOST_2001_DH, CRYPT_VERIFYCONTEXT );
CryptCreateHash(hProv,CALG_GR3411,NULL,0,&hHash);
CryptHashData(hHash,pBuffer,cbBuffer,0);
CryptGetHashParam(hHash,HP_HASHVAL,pbData,&dwDataLen,0);
// pbData - ab 67 17 c7 1c 5a 80 d0 5b bb c5 53 f6 ff 32 32 f9 e6 a4 d3 04 39 2b 86 98 34 6e b4 a1 f4 8e ef
// "cpverify.exe -mk testfile.dmp" - BA76717CC1A5080DB5BB5C356FFF23239F6E4A3D4093B2688943E64B1A4FE8FE
// полубайты поменяны... это нормально?
...
//скопировали в pDerP7S содержимое файла detached подписи в der кодировке, dwDerP7S - размер файла
...
HCRYPTMSG hMsg = CryptMsgOpenToDecode(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,CMSG_DETACHED_FLAG,0,0,NULL,NULL);
CryptMsgUpdate(hMsg,pDerP7S,dwDerP7S,true);
CryptMsgGetParam(hMsg, CMSG_ENCRYPTED_DIGEST, 0, pSign, &cbSign);
...
HCERTSTORE hStoreHandle = CertOpenSystemStore(NULL,"MY");
PCCERT_CONTEXT pSignerCert = CertFindCertificateInStore(hStoreHandle,X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,0,CERT_FIND_SUBJECT_STR,L"Тестовый",NULL);
CryptImportPublicKeyInfoEx( hProv, X509_ASN_ENCODING,&(pSignerCert->pCertInfo->SubjectPublicKeyInfo), CALG_GR3410EL, 0, NULL,&hPubKey);

CryptVerifySignature(hHash, pSign, cbSign, hPubKey, NULL, 0);

---
GetLastError() == NTE_BAD_SIGNATURE

что-то пропустил? CryptMsg что-то дополнительно делает? :)
Offline Kirill Sobolev  
#4 Оставлено : 9 июля 2009 г. 21:34:46(UTC)
Кирилл Соболев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Нет, так не получится - Вы с сервера берете неподписанный хэш и подсовывате в CryptMsgUpdate.
Вам же надо проделать обратную операцию - создать хеш, туда положить полученное с сервера значение и проверить его CrypVerifySignature.
А вот PKCS#7 напрямую использовать не получится, нужно оттуда саму бинарную подпись вытащить будет.

Отредактировано пользователем 9 июля 2009 г. 21:52:31(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
Offline YeTi  
#5 Оставлено : 10 июля 2009 г. 12:00:01(UTC)
YeTi

Статус: Новичок

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

Цитата:
оттуда саму бинарную подпись вытащить будет

- CryptMsgGetParam(hMsg, CMSG_ENCRYPTED_DIGEST, 0, pSign, &cbSign);
это не она разве?
Offline Kirill Sobolev  
#6 Оставлено : 10 июля 2009 г. 17:01:17(UTC)
Кирилл Соболев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
она самая
Техническую поддержку оказываем тут
Наша база знаний
Offline YeTi  
#7 Оставлено : 10 июля 2009 г. 20:21:06(UTC)
YeTi

Статус: Новичок

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

Kirill Sobolev написал:
Нет, так не получится - Вы с сервера берете неподписанный хэш и подсовывате в CryptMsgUpdate.
Вам же надо проделать обратную операцию - создать хеш, туда положить полученное с сервера значение и проверить его CrypVerifySignature.
А вот PKCS#7 напрямую использовать не получится, нужно оттуда саму бинарную подпись вытащить будет.

CryptMsgUpdate я использую только, чтобы получить эту бинарную подпись.
в CryptVerifySignature передаю
- неподписанный хеш
- бинарную подпись
- хэндл открытого ключа

и вот что-то не сходится.
Offline Kirill Sobolev  
#8 Оставлено : 10 июля 2009 г. 21:06:24(UTC)
Кирилл Соболев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
http://www.cryptopro.ru/....aspx?g=posts&t=1462
вот тут недавно обсуждались особенности хранения подписи в PKCS#7, возможно в этом причина?
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.