Статус: Участник
Группы: Участники
Зарегистрирован: 11.12.2024(UTC) Сообщений: 10  Откуда: Москва
|
Автор: Евгений Афанасьев  OID алгоритма подписи с хэшом 1.2.643.7.1.1.3.2 или 1.2.643.7.1.1.3.2 указывается в сертификате. В CMS подписи задается OID открытого ключа, т.е. для CMS надо digestOid.toString() + "WITH" + sigOid.toString(), а не просто sigOid.toString(). Евгений, подскажите пожалуйста. Сможете что то посоветовать, по комментарию выше?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,061  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 738 раз в 696 постах
|
Автор: Хемуль Хемулевский  Автор: Евгений Афанасьев  OID алгоритма подписи с хэшом 1.2.643.7.1.1.3.2 или 1.2.643.7.1.1.3.2 указывается в сертификате. В CMS подписи задается OID открытого ключа, т.е. для CMS надо digestOid.toString() + "WITH" + sigOid.toString(), а не просто sigOid.toString(). Евгений, понял вас. Но может есть вариант задать алгоритм подписи, как например в java? Очень будет тяжело менять уже реализованную валидацию в другой системе, я бы даже сказал не возможно) В заголовочном файле csp_wincrypt сказано: Цитата:If HashEncryptionAlgorithm is present and not NULL its used instead of the SigningCert's PublicKeyInfo.Algorithm. Но я правильно понимаю что это осталось от Windows CryptoAPI но не реализовано? Вот как в java задавали алгоритм подписи в CMS, до перехода на С++: Код:
digestOidValue = JCP.GOST_DIGEST_2012_512_OID;
signOidValue = JCP.GOST_SIGN_2012_512_OID;
final SignedData cms = new SignedData();
cms.signerInfos.elements[0].digestAlgorithm = new DigestAlgorithmIdentifier(new OID(digestOidValue).value);
cms.signerInfos.elements[0].digestAlgorithm.parameters = new Asn1Null();
cms.signerInfos.elements[0].signatureAlgorithm = new SignatureAlgorithmIdentifier(new OID(signOidValue).value);
cms.signerInfos.elements[0].signatureAlgorithm.parameters = new Asn1Null();
final Asn1Type messageDigest = new Asn1OctetString(messageDigestBlob);
cms.signerInfos.elements[0].signedAttrs.elements[1].values.elements[0] = messageDigest;
// signature
Asn1BerEncodeBuffer encBufSignedAttr = new Asn1BerEncodeBuffer();
cms.signerInfos.elements[0].signedAttrs.encode(encBufSignedAttr);
final java.security.Signature signature = java.security.Signature.getInstance(signAlg, providerName);
byte[] sign;
final byte[] hSign = encBufSignedAttr.getMsgCopy();
signature.initSign(pk);
signature.update(hSign);
sign = signature.sign();
cms.signerInfos.elements[0].signature = new SignatureValue(sign);
// encode
final Asn1BerEncodeBuffer asn1Buf = new Asn1BerEncodeBuffer();
all.encode(asn1Buf, true);
Согласно TK26, в CMS в OID алгоритма подписи должен быть OID открытого ключа. В сертификате - OID алгоритма подписи с хэшом. В приведенном примере подпись создается верно, но в заполняемую структуру нужно передавать OID ключа, а не подписи. Более того, в некоторых сторонних системах уже могут быть строгие проверки корректности сообщения, мы тоже опционально ужесточаем проверки OID'ов. На счет формулировки из csp_wincrypt затрудняюсь сказать, возможно, этот кусок был просто скопирован, плюс он может не касаться ГОСТа. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close