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

Уведомление

Icon
Error

8 Страницы<12345>»
Опции
К последнему сообщению К первому непрочитанному
Offline dmishin  
#21 Оставлено : 6 ноября 2013 г. 7:41:25(UTC)
dmishin

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
Ошибка была из-за просроченной лицензии на криптопро csp.
Offline dmishin  
#22 Оставлено : 6 ноября 2013 г. 13:12:52(UTC)
dmishin

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
Я правильно понял, что проверка подписи не включает в себя проверку валидности сертификата и его цепочки?
Offline Юрий  
#23 Оставлено : 6 ноября 2013 г. 13:22:44(UTC)
Юрий

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

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

Сказал «Спасибо»: 3 раз
Поблагодарили: 93 раз в 67 постах
Автор: dmishin Перейти к цитате
Я правильно понял, что проверка подписи не включает в себя проверку валидности сертификата и его цепочки?

Правильно.
С уважением,
Юрий Строжевский
Offline dmishin  
#24 Оставлено : 6 ноября 2013 г. 14:43:15(UTC)
dmishin

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
Остается найти примеры по проверке сертификата, а так же разбору CMS сообщения, для вытаскивания подписи и проверки хеша по ней...
Offline dmishin  
#25 Оставлено : 7 ноября 2013 г. 8:54:20(UTC)
dmishin

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
Столкнулся с проблемой. Пытаюсь вызвать в своем проекте:

hMsg = CryptMsgOpenToDecode(
TYPE_DER,
CMSG_DETACHED_FLAG,
0,
hProv,
NULL,
NULL
);

Получаю:
Error 1 error LNK2019: unresolved external symbol __imp__CryptMsgOpenToDecode@24 referenced in function _main


Копирую весь код в файл примера из SDK - там отрабатывает.
В VC++ и в проекте примера и в моем проекте есть путь до sdk\samples\include.

Не подскажете в чем проблема?
Offline Юрий  
#26 Оставлено : 7 ноября 2013 г. 9:00:58(UTC)
Юрий

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

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

Сказал «Спасибо»: 3 раз
Поблагодарили: 93 раз в 67 постах
Автор: dmishin Перейти к цитате
Столкнулся с проблемой. Пытаюсь вызвать в своем проекте:

hMsg = CryptMsgOpenToDecode(
TYPE_DER,
CMSG_DETACHED_FLAG,
0,
hProv,
NULL,
NULL
);

Получаю:
Error 1 error LNK2019: unresolved external symbol __imp__CryptMsgOpenToDecode@24 referenced in function _main


Копирую весь код в файл примера из SDK - там отрабатывает.
В VC++ и в проекте примера и в моем проекте есть путь до sdk\samples\include.

Не подскажете в чем проблема?

Мда... Вас в Гугле забанили?
Эта ошибка означает, что отсутствует библиотека (*.lib), в которой декларируется искомая функция.
В вашем случае достаточно в начале программы написать:
Код:
#pragma comment(lib,"crypt32.lib")

Отредактировано пользователем 7 ноября 2013 г. 9:03:35(UTC)  | Причина: Не указана

С уважением,
Юрий Строжевский
thanks 1 пользователь поблагодарил Юрий за этот пост.
dmishin оставлено 07.11.2013(UTC)
Offline dmishin  
#27 Оставлено : 7 ноября 2013 г. 10:01:10(UTC)
dmishin

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
Автор: Юрий Перейти к цитате
Автор: dmishin Перейти к цитате
Столкнулся с проблемой. Пытаюсь вызвать в своем проекте:

hMsg = CryptMsgOpenToDecode(
TYPE_DER,
CMSG_DETACHED_FLAG,
0,
hProv,
NULL,
NULL
);

Получаю:
Error 1 error LNK2019: unresolved external symbol __imp__CryptMsgOpenToDecode@24 referenced in function _main


Копирую весь код в файл примера из SDK - там отрабатывает.
В VC++ и в проекте примера и в моем проекте есть путь до sdk\samples\include.

Не подскажете в чем проблема?

Мда... Вас в Гугле забанили?
Эта ошибка означает, что отсутствует библиотека (*.lib), в которой декларируется искомая функция.
В вашем случае достаточно в начале программы написать:
Код:
#pragma comment(lib,"crypt32.lib")


Спасибо.
Скажу только, что прямого ответа для себя не нашел по запросам в гугле, поэтому и задал тут вопрос.
Offline dmishin  
#28 Оставлено : 11 ноября 2013 г. 7:39:20(UTC)
dmishin

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
Итого алгоритм проверки подписи по хешу:

1. Создаю объект для сообщения с отсоединенной подписью
Код:
CryptMsgOpenToDecode(MY_ENCODING_TYPE, 0, 0, 0, NULL, NULL);

2. Заполняю данными
Код:
CryptMsgUpdate(cmsObject, cmsData, fileDataRead, TRUE);

2. Беру из сообщение значение подписи
Код:
CryptMsgGetParam(cmsObject, CMSG_ENCRYPTED_DIGEST, 0, NULL, &signatureLen);

3. Переворачиваю подпись
Код:
for (i = 0; i<=(signatureLen/2 - 1); i++) {
    BYTE b = signatureData[i];
    signatureData[i] = signatureData[signatureLen - 1 - i];
    signatureData[signatureLen - 1 - i] = b;
}

4. Беру сертификат из сообщения
Код:
CryptMsgGetParam(cmsObject, CMSG_CERT_PARAM, 0, certificateData, &certificateLen);

5. Создаю контекст сертификата
Код:
certificateContext = CertCreateCertificateContext(MY_ENCODING_TYPE, certificateData, certificateLen);

6. Импортирую публичный ключ из сертификата
Код:
CryptImportPublicKeyInfoEx(providerObject, MY_ENCODING_TYPE, &(certificateContext->pCertInfo->SubjectPublicKeyInfo), CALG_GR3410EL, 0, NULL, &certificateObject);

8. Создаю объект для хеша
Код:
CryptCreateHash(prov, CALG_GR3411, 0, 0, &hashObject);

9. Задаю алгоритм хеширования
Код:
CryptSetHashParam(hashObject, HP_OID, (BYTE*)szOID_GostR3411_94_CryptoProParamSet, 0);

7. Получение хеша от подписанных атрибутов
Код:
CryptMsgGetParam(cmsObject, CMSG_COMPUTED_HASH_PARAM, 0, attrHashData,  &cmsParamLen);

10. Устанавливаю значение хеша в объект
Код:
CryptSetHashParam(hashObject, HP_HASHVAL, attrHashData, 0);

11. Проверяю подпись
Код:
CryptVerifySignature(hashObject, signatureData, signatureLen, certificateObject, 0, 0);

Отредактировано пользователем 11 ноября 2013 г. 8:39:53(UTC)  | Причина: Не указана

Offline Юрий  
#29 Оставлено : 11 ноября 2013 г. 8:26:42(UTC)
Юрий

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

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

Сказал «Спасибо»: 3 раз
Поблагодарили: 93 раз в 67 постах
Два момента:
1) CMSG_DETACHED_FLAG - это значит, что подпись отделённая и для проверки нужно загружать данные, для которых делалась подпись. Это делается с помощью отдельного вызова CryptMsgUpdate;
2) Подпись лучше получать из структуры "CMSG_SIGNER_INFO". То есть получаете информацию о подписанте и оттуда берете поле "EncryptedHash";

Ну и "плюсик" вам за то, что где-то нашли информацию, что подпись перед проверкой надо перевернуть. И ещё "плюсик" за то, что использовали мой же алгоритм переворота подписи.
С уважением,
Юрий Строжевский
Offline dmishin  
#30 Оставлено : 11 ноября 2013 г. 8:39:40(UTC)
dmishin

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
Автор: Юрий Перейти к цитате
Два момента:
1) CMSG_DETACHED_FLAG - это значит, что подпись отделённая и для проверки нужно загружать данные, для которых делалась подпись. Это делается с помощью отдельного вызова CryptMsgUpdate;

Ок. Убрал флаг за ненадобностью.
Автор: Юрий Перейти к цитате

2) Подпись лучше получать из структуры "CMSG_SIGNER_INFO". То есть получаете информацию о подписанте и оттуда берете поле "EncryptedHash";

Сейчас посмотрю, может сразу сделаю проверку всех подписей, хотя задача подразумевает наличие только одной подписи, но на будущее пусть будет уже готовый алгоритм.
Автор: Юрий Перейти к цитате
Ну и "плюсик" вам за то, что где-то нашли информацию, что подпись перед проверкой надо перевернуть. И ещё "плюсик" за то, что использовали мой же алгоритм переворота подписи.

Ваш алгоритм оказался оптимальнее из того что попадалось ;)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
8 Страницы<12345>»
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.