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

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline Хемуль Хемулевский  
#11 Оставлено : 13 октября 2025 г. 17:05:49(UTC)
Хемуль Хемулевский

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

Группы: Участники
Зарегистрирован: 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().

Евгений, подскажите пожалуйста. Сможете что то посоветовать, по комментарию выше?
Offline Евгений Афанасьев  
#12 Оставлено : 14 октября 2025 г. 12:44:59(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 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 затрудняюсь сказать, возможно, этот кусок был просто скопирован, плюс он может не касаться ГОСТа.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
2 Страницы<12
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.