logo Обзор КриптоПро NGate для защищённого доступа к корпоративным ресурсам
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

4 Страницы<1234>
Опции
К последнему сообщению К первому непрочитанному
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)
Сообщений: 657
Мужчина
Российская Федерация
Откуда: Йошкар-Ола

Сказал «Спасибо»: 2 раз
Поблагодарили: 83 раз в 65 постах
Автор: 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)
Сообщений: 657
Мужчина
Российская Федерация
Откуда: Йошкар-Ола

Сказал «Спасибо»: 2 раз
Поблагодарили: 83 раз в 65 постах
Автор: 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)
Сообщений: 657
Мужчина
Российская Федерация
Откуда: Йошкар-Ола

Сказал «Спасибо»: 2 раз
Поблагодарили: 83 раз в 65 постах
Два момента:
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";

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

Ваш алгоритм оказался оптимальнее из того что попадалось ;)
Offline Юрий  
#31 Оставлено : 11 ноября 2013 г. 8:48:28(UTC)
Юрий

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

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

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

Ок. Убрал флаг за ненадобностью.

Подпись присоединённая и подпись отсоединённая - это как говориться "две большие разницы" и флаг CMSG_DETACHED_FLAG очень важен для работы с подписями.
Так что проверьте перед верификацией подписи что подпись у вас действительно отсоединённая.

С уважением,
Юрий Строжевский
Offline dmishin  
#32 Оставлено : 11 ноября 2013 г. 9:33:31(UTC)
dmishin

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

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

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

Ок. Убрал флаг за ненадобностью.

Подпись присоединённая и подпись отсоединённая - это как говориться "две большие разницы" и флаг CMSG_DETACHED_FLAG очень важен для работы с подписями.
Так что проверьте перед верификацией подписи что подпись у вас действительно отсоединённая.


Из той информации, что мне попадалась я понял, что отличие только в наличии самих данных в одном из атрибутов CMS?
Offline Юрий  
#33 Оставлено : 11 ноября 2013 г. 9:45:16(UTC)
Юрий

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

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

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

Ок. Убрал флаг за ненадобностью.

Подпись присоединённая и подпись отсоединённая - это как говориться "две большие разницы" и флаг CMSG_DETACHED_FLAG очень важен для работы с подписями.
Так что проверьте перед верификацией подписи что подпись у вас действительно отсоединённая.


Из той информации, что мне попадалась я понял, что отличие только в наличии самих данных в одном из атрибутов CMS?

Отличается как структура подписи, так и процессы создания и проверки подписи. Почитайте лучше стандарт RFC5652.
С уважением,
Юрий Строжевский
Offline dmishin  
#34 Оставлено : 11 ноября 2013 г. 10:19:40(UTC)
dmishin

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
Автор: Юрий Перейти к цитате

Отличается как структура подписи, так и процессы создания и проверки подписи. Почитайте лучше стандарт RFC5652.


Раз отправляете в RFC дали бы ссылку на конкретный пункт. При беглом осмотре нашел только то, что при наличии подписанных атрибутов для подписи берется хеш от этих атрибутов.
Поиск по слову detached тоже ничего не дал.
Offline Юрий  
#35 Оставлено : 11 ноября 2013 г. 10:51:13(UTC)
Юрий

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

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

Сказал «Спасибо»: 2 раз
Поблагодарили: 83 раз в 65 постах
Автор: dmishin Перейти к цитате
Автор: Юрий Перейти к цитате

Отличается как структура подписи, так и процессы создания и проверки подписи. Почитайте лучше стандарт RFC5652.


Раз отправляете в RFC дали бы ссылку на конкретный пункт. При беглом осмотре нашел только то, что при наличии подписанных атрибутов для подписи берется хеш от этих атрибутов.
Поиск по слову detached тоже ничего не дал.

5.2. EncapsulatedContentInfo Type
5.4. Message Digest Calculation Process
5.6. Signature Verification Process
С уважением,
Юрий Строжевский
Offline dmishin  
#36 Оставлено : 11 ноября 2013 г. 11:18:44(UTC)
dmishin

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
Автор: Юрий Перейти к цитате

5.2. EncapsulatedContentInfo Type
5.4. Message Digest Calculation Process
5.6. Signature Verification Process


Сравнение хеша с вычисленным хешом от вложенных данных? Или что-то еще?
Offline dmishin  
#37 Оставлено : 20 ноября 2013 г. 13:40:38(UTC)
dmishin

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
Вернулся к задаче и сейчас застрял на получении хеша сообщения:

CryptMsgGetParam(cmsObject, CMSG_COMPUTED_HASH_PARAM, 0, attrHashData, &cmsParamLen);

Под win работает, а под linux выдает ошибку: 0x80091004

В чем может быть причина такого поведения и есть ли способ вытащить хеш под linux другими способами?
Offline Юрий  
#38 Оставлено : 20 ноября 2013 г. 13:45:58(UTC)
Юрий

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

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

Сказал «Спасибо»: 2 раз
Поблагодарили: 83 раз в 65 постах
Автор: dmishin Перейти к цитате
Вернулся к задаче и сейчас застрял на получении хеша сообщения:

CryptMsgGetParam(cmsObject, CMSG_COMPUTED_HASH_PARAM, 0, attrHashData, &cmsParamLen);

Под win работает, а под linux выдает ошибку: 0x80091004

В чем может быть причина такого поведения и есть ли способ вытащить хеш под linux другими способами?

Предположения:
1) Используется совместный тип сообщения. То есть указывается "CryptMsgOpenToDecode(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING)". А надо только "PKCS_7_ASN_ENCODING";
2) Отсутствует вызов "CryptMsgUpdate";
С уважением,
Юрий Строжевский
Offline dmishin  
#39 Оставлено : 20 ноября 2013 г. 13:56:08(UTC)
dmishin

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
Автор: Юрий Перейти к цитате
Автор: dmishin Перейти к цитате
Вернулся к задаче и сейчас застрял на получении хеша сообщения:

CryptMsgGetParam(cmsObject, CMSG_COMPUTED_HASH_PARAM, 0, attrHashData, &cmsParamLen);

Под win работает, а под linux выдает ошибку: 0x80091004

В чем может быть причина такого поведения и есть ли способ вытащить хеш под linux другими способами?

Предположения:
1) Используется совместный тип сообщения. То есть указывается "CryptMsgOpenToDecode(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING)". А надо только "PKCS_7_ASN_ENCODING";
2) Отсутствует вызов "CryptMsgUpdate";



1 - не помогло
2 - исключаю, т.к. под win не повторяется

П.С.
Подстановка произвольного значения вместо типа сообщения никак не влияет на работу программы под linux, а вот под win выдает ошибку.

Отредактировано пользователем 20 ноября 2013 г. 14:05:47(UTC)  | Причина: Не указана

Offline Юрий  
#40 Оставлено : 20 ноября 2013 г. 14:06:35(UTC)
Юрий

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

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

Сказал «Спасибо»: 2 раз
Поблагодарили: 83 раз в 65 постах
Автор: dmishin Перейти к цитате
Автор: Юрий Перейти к цитате
Автор: dmishin Перейти к цитате
Вернулся к задаче и сейчас застрял на получении хеша сообщения:

CryptMsgGetParam(cmsObject, CMSG_COMPUTED_HASH_PARAM, 0, attrHashData, &cmsParamLen);

Под win работает, а под linux выдает ошибку: 0x80091004

В чем может быть причина такого поведения и есть ли способ вытащить хеш под linux другими способами?

Предположения:
1) Используется совместный тип сообщения. То есть указывается "CryptMsgOpenToDecode(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING)". А надо только "PKCS_7_ASN_ENCODING";
2) Отсутствует вызов "CryptMsgUpdate";



1 - не помогло
2 - исключаю, т.к. под win не повторяется

П.С.
Подстановка произвольного значения вместо типа сообщения никак не влияет на работу программы под linux, а вот под win выдает ошибку.

Тогда как вариант можно вытащить хэш раскодированием ASN.1 сообщения (CryptDecodeObject).
С уважением,
Юрий Строжевский
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
4 Страницы<1234>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.