Статус: Участник
Группы: Участники
Зарегистрирован: 24.09.2008(UTC) Сообщений: 27 Откуда: Москва Сказал «Спасибо»: 1 раз
|
А можно поподробней про нерешаемую задачу? То бишь почему нельзя из CMS вытащить хэш, подпись, информацию об открытом ключе и завернуть это всё в определенные тэги?
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
Посмотрите на приложенный файл с примером XMLDSIG. Значение в SignatureValue - это подпись, вычисленная на представленный в канонической форме узел SingedInfo. Узел SignedInfo содержит хэш-значение от исходных данных. В отличие от CMS-подписи без подписанных атрибутов здесь подпись охватывает не исходный текст, а хэш-значение от этого текста, обрамлённое ещё и XML-тегами. Вложение(я): XmlDocSigned2001.xml (2kb) загружен 58 раз(а).У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 24.09.2008(UTC) Сообщений: 27 Откуда: Москва Сказал «Спасибо»: 1 раз
|
Спасибо. А может есть какой-нибудь стандарт для такого отображения CMS-подписи в XML? Или с коленки писать нечто похожее на XMLDSIG с тэгом CMSSignatureValue вместо SignatureValue.
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
Такого стандарта нет, так что именно "с коленки". |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 24.09.2008(UTC) Сообщений: 27 Откуда: Москва Сказал «Спасибо»: 1 раз
|
И еще обратная задача. Подписать хэш (CryptSignHash) и закодировать в CMS-сообщение тоже нельзя с помощью CryptoAPI?
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
Можно, только это не просто. Всё, кроме SignerInfo вам придётся кодировать почти руками - на уровне отдельных OID и SEQUENCE, но всё это сделает CryptEncodeObject(). Эта же функция закодирует SignerInfo за один вызов.
P.S. Не понимаю чем CryptMsg-функции не устраивают? Если задача стоит "сделать CMS с помощью CryptoAPI", то надо именно ими и пользоваться. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 24.09.2008(UTC) Сообщений: 27 Откуда: Москва Сказал «Спасибо»: 1 раз
|
Задача в общем такая: на входе есть хэш и сертификат, на выходе получить cms-подпись. Какими CryptMsg-функциями это можно сделать?
Я так понимаю, закодировать отдельно каждый атрибут с помощью CryptEncodeObject
SignedData ::= SEQUENCE { version Version, digestAlgorithms DigestAlgorithmIdentifiers, contentInfo ContentInfo, certificates [0] CertificateSet OPTIONAL, crls [1] CertificateRevocationLists OPTIONAL, signerInfos SignerInfos }
а потом всё это закодировать в CryptEncodeObject(szOID_RSA_signedData)? И это будет искомая cms-подпись?
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
CryptEncodeObject(szOID_RSA_signedData) - такой возможности нет. Вам придётся кодировать отдельно все поля, а потом SEQUENCE из них. |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,732 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
А с помощью CryptMsgControl(.., CMSG_CTRL_ADD_CMS_SIGNER_INFO, ..) не получится обойтись без кодирования? |
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
Можно подумать в этом направлении... Для того, чтобы что-то добавить, надо сначала иметь то, к чему добавить. Т.е. для начала с помощью CryptoAPI подписываем произвольную фигню с использованием целевого алгоритма хэширования - это важно, т.к. алгоритмы хэширования перечисляются в заголовке CMS, а не только в SingerInfo. После этого мы ручками стряпаем интересующую подпись, добавляем её с помощью CryptMsgControl(CMSG_CTRL_ADD_CMS_SIGNER_INFO), а "левую" подпись удаляем с помощью CryptMsgControl(CMSG_CTRL_DEL_SIGNER).
Наверно возможен такой путь. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close