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

Уведомление

Icon
Error

4 Страницы123>»
Опции
К последнему сообщению К первому непрочитанному
Offline Konstantin  
#1 Оставлено : 19 июня 2009 г. 17:38:12(UTC)
Konstantin

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

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

Сказал «Спасибо»: 1 раз
Здравствуйте. Подскажите, пожалуйста.

Нужно из подписи извлечь 32 байта хэша данных. Подпись обычная detached.

Вызываю CryptMsgGetParam(CMSG_HASH_DATA_PARAM), получаю FALSE;
Вызываю CryptMsgGetParam(CMSG_COMPUTED_HASH_PARAM), получаю 32 байта, но отличается от хэша данных.
А что здесь лежит CryptMsgGetParam(CMSG_SIGNER_INFO_PARAM, pSignerInfo).
pSignerInfo->AuthAttrs == szOID_RSA_messageDigest ??? Вообще 34 байта возвращает.
Offline Павел Смирнов  
#2 Оставлено : 19 июня 2009 г. 18:00:05(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
Попробуйте декодировать содержимое атрибута szOID_RSA_messageDigest как OCTET STRING.
Техническую поддержку оказываем тут.
Наша база знаний.
Offline Konstantin  
#3 Оставлено : 19 июня 2009 г. 18:45:29(UTC)
Konstantin

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

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

Сказал «Спасибо»: 1 раз
Я правильно понимаю, что атрибут szOID_RSA_messageDigest совсем не обязательно должен присутствовать?
Offline Павел Смирнов  
#4 Оставлено : 19 июня 2009 г. 18:48:42(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
Да. Но если его нет, то вас должен устроить CryptMsgGetParam(CMSG_COMPUTED_HASH_PARAM).
Техническую поддержку оказываем тут.
Наша база знаний.
Offline Konstantin  
#5 Оставлено : 23 июня 2009 г. 19:53:18(UTC)
Konstantin

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

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

Сказал «Спасибо»: 1 раз
Но CryptMsgGetParam(CMSG_COMPUTED_HASH_PARAM) возвращает неверный хэш. 32 байта, но они отличаются от того, что возвращает отдельно вычисленный хэш с помощью CryptHashData() и то, что лежит в атрибуте подписи szOID_RSA_messageDigest.

CryptHashData() == szOID_RSA_messageDigest
но
CryptMsgGetParam(CMSG_COMPUTED_HASH_PARAM) != CryptHashData()

что я не правильно делаю?
Offline Павел Смирнов  
#6 Оставлено : 23 июня 2009 г. 20:04:31(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
Вы все делаете правильно.

CryptMsgGetParam(CMSG_COMPUTED_HASH_PARAM) и содержимое szOID_RSA_messageDigest - это разные хэш-значения. В CMS-сообщении без подписанных атрибутов нет атрибута szOID_RSA_messageDigest и подпись считается непосредтвенно на данные. В этом случае результат CryptHashData должен совпадать с CryptMsgGetParam(CMSG_COMPUTED_HASH_PARAM) (пока это предположение, которое вам предстоит проверить). Если же создатель сообщения вкладывает в него хотя бы один подписанный атрибут, то в него автоматом добавляются атрибуты szOID_RSA_messageDigest и content-type. В этом случае хэш-значение данных попадает в атрибут szOID_RSA_messageDigest, а подпись считается на DER-закодированное представление всех подписанных атрибутов. По моему предположению CryptMsgGetParam(CMSG_COMPUTED_HASH_PARAM) в этом случае возвращает хэш-значение от подписанных атрибутов.

Подробнее о подписи CMS см. RFC3852.
Техническую поддержку оказываем тут.
Наша база знаний.
Offline Konstantin  
#7 Оставлено : 23 июня 2009 г. 21:40:35(UTC)
Konstantin

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

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

Сказал «Спасибо»: 1 раз
Большое спасибо. Интуитивно догадывался.

Чтоб полностью раскрыть тему:
Почему CryptMsgGetParam(CMSG_HASH_DATA_PARAM) всегда FALSE и как нужно построить CMS, чтоб было TRUE?
Offline Павел Смирнов  
#8 Оставлено : 24 июня 2009 г. 15:34:50(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
Не могу ответить на последний вопрос. Могу только догадываться, что CMSG_HASH_DATA_PARAM относится к типу сообщения Digested-data, а не Signed-data.

Скажите пожалуйста, моё предположение, высказанное в предыдущем сообщении оказалось верным?
Техническую поддержку оказываем тут.
Наша база знаний.
Offline Konstantin  
#9 Оставлено : 24 июня 2009 г. 22:14:52(UTC)
Konstantin

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

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

Сказал «Спасибо»: 1 раз
Смирнов написал:
В CMS-сообщении без подписанных атрибутов нет атрибута szOID_RSA_messageDigest и подпись считается непосредтвенно на данные. В этом случае результат CryptHashData должен совпадать с CryptMsgGetParam(CMSG_COMPUTED_HASH_PARAM) (пока это предположение, которое вам предстоит проверить).

Это предположение не верно :( При pSignerInfo->AuthAttrs.cAttr==0 хэш не совпадает. Думал, что в хэш включены еще какие-то данные из CMSG_SIGNER_INFO, но как оказалось даже для разных сертификатов и данных эти значения равны константе, а собственно хэш функция от нулевых данных: 981E5F3CA30C841487830F84FB433E13AC1101569B9C13584AC483234CD656C0

Смирнов написал:
По моему предположению CryptMsgGetParam(CMSG_COMPUTED_HASH_PARAM) в этом случае возвращает хэш-значение от подписанных атрибутов.

Похоже на правду.
Мое предположение, что это хэш ТОЛЬКО от атрибутов.
При pSignerInfo->AuthAttrs.cAttr==0 это хэш значение константа и равно хэш от NULL.
При наличии только атрибута szOID_RSA_messageDigest == константа, значение хэша тоже константа, независимо от сертификата.
При включении в подпись атрибута szOID_RSA_signingTime, этот хэш меняется для каждой созданной подписи.

И все-таки неясно как вытащить значение хэш из detached CMS-подписи, в которой нет атрибутов (а их присутствие необязательно?) ?

Отредактировано пользователем 24 июня 2009 г. 22:20:11(UTC)  | Причина: Не указана

Offline Павел Смирнов  
#10 Оставлено : 24 июня 2009 г. 22:32:56(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
Судя по результатам ваших экспериментов, никак. :)
Техническую поддержку оказываем тут.
Наша база знаний.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
4 Страницы123>»
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.