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

Уведомление

Icon
Error

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

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
Сейчас проверил: CryptMsgControl(msgObject, 0, CMSG_CTRL_VERIFY_SIGNATURE, certificateContext->pCertInfo)

Возвращает false, и код ошибки как под win так и под linux: 0x80091007

Возможно сообщение некорректное?
На входе отсоединенная подпись, которая валидируется утилитами.

П.С. Или скорее тут причина в том что не идет "разворот" подписи при проверке через CryptMsgControl

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

Offline Юрий  
#42 Оставлено : 21 ноября 2013 г. 9:24:56(UTC)
Юрий

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

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

Сказал «Спасибо»: 2 раз
Поблагодарили: 83 раз в 65 постах
Автор: dmishin Перейти к цитате
Сейчас проверил: CryptMsgControl(msgObject, 0, CMSG_CTRL_VERIFY_SIGNATURE, certificateContext->pCertInfo)

Возвращает false, и код ошибки как под win так и под linux: 0x80091007

Возможно сообщение некорректное?
На входе отсоединенная подпись, которая валидируется утилитами.

П.С. Или скорее тут причина в том что не идет "разворот" подписи при проверке через CryptMsgControl

Ошибка то звучит как "Неправильное значение хэша". Значит или не для этого сертификата подпись, или например подпись не перевернули перед проверкой.
С уважением,
Юрий Строжевский
Offline dmishin  
#43 Оставлено : 21 ноября 2013 г. 9:51:43(UTC)
dmishin

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

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

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

Автор: Юрий Перейти к цитате

Тогда как вариант можно вытащить хэш раскодированием ASN.1 сообщения (CryptDecodeObject).


Это из CMSG_ENCRYPTED_DIGEST надо декодировать?

П.С. Разве сам хеш по которому идет проверка подписи присутствует в CMS?

Отредактировано пользователем 21 ноября 2013 г. 10:15:54(UTC)  | Причина: Не указана

Offline Юрий  
#44 Оставлено : 21 ноября 2013 г. 10:18:09(UTC)
Юрий

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

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

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

Автор: Юрий Перейти к цитате

Тогда как вариант можно вытащить хэш раскодированием ASN.1 сообщения (CryptDecodeObject).


Это из CMSG_ENCRYPTED_DIGEST надо декодировать?

П.С. Разве сам хеш по которому идет проверка подписи присутствует в CMS?

Там только подпись. То есть можно декодировать подпись, потом на существующий проверяемый хэш сделать подпись и сверить её с декодированной.
С уважением,
Юрий Строжевский
Offline dmishin  
#45 Оставлено : 21 ноября 2013 г. 10:32:11(UTC)
dmishin

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
Ок. Если я правильно вас понял:

1. CryptMsgOpenToDecode
2. CryptMsgGetParam(CMSG_ENCRYPTED_DIGEST)
3. CryptDecodeObject(<тип>)

Какой тип использовать на третьем шаге?
Offline Юрий  
#46 Оставлено : 21 ноября 2013 г. 10:38:52(UTC)
Юрий

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

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

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

1. CryptMsgOpenToDecode
2. CryptMsgGetParam(CMSG_ENCRYPTED_DIGEST)
3. CryptDecodeObject(<тип>)

Какой тип использовать на третьем шаге?

Здесь нужна только "CryptDecodeObject", остальные функции без надобности.
В этом варианте только ASN.1, только хардкор :) Смотрите как описывается ASN.1 структура в соответствующем RFC и соответственно декодируйте данные. В основном, конечно, будут декодироваться структуры типа "SEQUENCE".
С уважением,
Юрий Строжевский
Offline dmishin  
#47 Оставлено : 21 ноября 2013 г. 10:45:21(UTC)
dmishin

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

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

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

1. CryptMsgOpenToDecode
2. CryptMsgGetParam(CMSG_ENCRYPTED_DIGEST)
3. CryptDecodeObject(<тип>)

Какой тип использовать на третьем шаге?

Здесь нужна только "CryptDecodeObject", остальные функции без надобности.
В этом варианте только ASN.1, только хардкор :) Смотрите как описывается ASN.1 структура в соответствующем RFC и соответственно декодируйте данные. В основном, конечно, будут декодироваться структуры типа "SEQUENCE".


Да но раз самого хеша в структуре нет, то потом еще предполагается его вычисление по подписываемым атрибутам?
Offline Юрий  
#48 Оставлено : 21 ноября 2013 г. 10:54:09(UTC)
Юрий

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

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

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

1. CryptMsgOpenToDecode
2. CryptMsgGetParam(CMSG_ENCRYPTED_DIGEST)
3. CryptDecodeObject(<тип>)

Какой тип использовать на третьем шаге?

Здесь нужна только "CryptDecodeObject", остальные функции без надобности.
В этом варианте только ASN.1, только хардкор :) Смотрите как описывается ASN.1 структура в соответствующем RFC и соответственно декодируйте данные. В основном, конечно, будут декодироваться структуры типа "SEQUENCE".


Да но раз самого хеша в структуре нет, то потом еще предполагается его вычисление по подписываемым атрибутам?

Данная тема называется "Проверка подписи не по данным, а по хешу данных". Так что предполагается, что хэш для проверки есть априори (то есть до проверки).
Но если его нет, то его, конечно, надо вычислить перед проверкой :)
С уважением,
Юрий Строжевский
Offline dmishin  
#49 Оставлено : 21 ноября 2013 г. 10:56:46(UTC)
dmishin

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
Хеш есть только от самого документа. Если бы был хеш по которому проверяется подпись, то вопросов бы уже не осталось. точнее если бы под линуксом все отработало так же как и под win...
Offline Юрий  
#50 Оставлено : 21 ноября 2013 г. 11:07:00(UTC)
Юрий

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

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

Сказал «Спасибо»: 2 раз
Поблагодарили: 83 раз в 65 постах
Автор: dmishin Перейти к цитате
Хеш есть только от самого документа. Если бы был хеш по которому проверяется подпись, то вопросов бы уже не осталось. точнее если бы под линуксом все отработало так же как и под win...

Linux - постоянный поставщик "умственного секса" на рынке разработки софта (с) Юрий Строжевский :)
С уважением,
Юрий Строжевский
Offline dmishin  
#51 Оставлено : 21 ноября 2013 г. 12:28:04(UTC)
dmishin

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
А нельзя через вызов CryptMsgGetParam(CMSG_SIGNER_AUTH_ATTR_PARAM) получить массив данных, по которому рассчитывается хеш?
Offline Юрий  
#52 Оставлено : 21 ноября 2013 г. 12:34:16(UTC)
Юрий

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

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

Сказал «Спасибо»: 2 раз
Поблагодарили: 83 раз в 65 постах
Автор: dmishin Перейти к цитате
А нельзя через вызов CryptMsgGetParam(CMSG_SIGNER_AUTH_ATTR_PARAM) получить массив данных, по которому рассчитывается хеш?

Пробуйте :)
С уважением,
Юрий Строжевский
Offline dmishin  
#53 Оставлено : 21 ноября 2013 г. 12:38:32(UTC)
dmishin

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
Уже пробую, пока не получается. Не совпадает хеш
Offline dmishin  
#54 Оставлено : 21 ноября 2013 г. 15:17:01(UTC)
dmishin

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
Набросал утилитку, которая пробежалась по CMS и из всех возможных ее частей данных создала хеш - ни один не совпал с нужным, видимо ASN.1 данные надо как-то преобразовать к тому виду от которых потом берется хеш...
Offline Юрий  
#55 Оставлено : 21 ноября 2013 г. 15:28:19(UTC)
Юрий

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

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

Сказал «Спасибо»: 2 раз
Поблагодарили: 83 раз в 65 постах
Автор: dmishin Перейти к цитате
Набросал утилитку, которая пробежалась по CMS и из всех возможных ее частей данных создала хеш - ни один не совпал с нужным, видимо ASN.1 данные надо как-то преобразовать к тому виду от которых потом берется хеш...

Видимо так :) Почитайте лучше RFCS5652 чем гадать что от чего там берется.
С уважением,
Юрий Строжевский
Offline dmishin  
#56 Оставлено : 22 ноября 2013 г. 6:10:52(UTC)
dmishin

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
Несколько раз уже там был:
When the field is present, however, the result is the message
digest of the complete DER encoding of the SignedAttrs value
contained in the signedAttrs field. Since the SignedAttrs value,
when present, must contain the content-type and the message-digest
attributes, those values are indirectly included in the result.

A separate encoding
of the signedAttrs field is performed for message digest calculation.
The IMPLICIT [0] tag in the signedAttrs is not used for the DER
encoding, rather an EXPLICIT SET OF tag is used. That is, the DER
encoding of the EXPLICIT SET OF tag, rather than of the IMPLICIT [0]
tag, MUST be included in the message digest calculation along with
the length and content octets of the SignedAttributes value.

Что пока не внесло ясности в дальнейшие действия.
Как и результаты поиска в гугле:
http://stackoverflow.com...icit-tag-to-explicit-tag

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

Offline Юрий  
#57 Оставлено : 22 ноября 2013 г. 7:52:50(UTC)
Юрий

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

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

Сказал «Спасибо»: 2 раз
Поблагодарили: 83 раз в 65 постах
Автор: dmishin Перейти к цитате
Несколько раз уже там был:
When the field is present, however, the result is the message
digest of the complete DER encoding of the SignedAttrs value
contained in the signedAttrs field. Since the SignedAttrs value,
when present, must contain the content-type and the message-digest
attributes, those values are indirectly included in the result.

Ключевые слова я выделил.

С уважением,
Юрий Строжевский
Offline dmishin  
#58 Оставлено : 22 ноября 2013 г. 7:55:07(UTC)
dmishin

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
Автор: Юрий Перейти к цитате
Автор: dmishin Перейти к цитате
Несколько раз уже там был:
When the field is present, however, the result is the message
digest of the complete DER encoding of the SignedAttrs value
contained in the signedAttrs field. Since the SignedAttrs value,
when present, must contain the content-type and the message-digest
attributes, those values are indirectly included in the result.

Ключевые слова я выделил.



От этого и отталкиваюсь в своих поисках.
Offline dmishin  
#59 Оставлено : 22 ноября 2013 г. 8:12:30(UTC)
dmishin

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
Хеш получил. заменил A0 на 31. В начале не обратил внимание на это, да и собственно суть не понял.
Осталось разобраться как теперь на с++ это реализовать

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

Offline dmishin  
#60 Оставлено : 22 ноября 2013 г. 10:46:00(UTC)
dmishin

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

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

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