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

Уведомление

Icon
Error

3 Страницы<123
Опции
К последнему сообщению К первому непрочитанному
Offline Dmitrii  
#21 Оставлено : 26 декабря 2018 г. 9:57:20(UTC)
Dmitrii

Статус: Новичок

Группы: Участники
Зарегистрирован: 21.12.2017(UTC)
Сообщений: 8
Российская Федерация

Сказал(а) «Спасибо»: 3 раз
Доброго времени суток.
Аналогичная проблема. Имеется отсоединенная подпись CADES-BES, алгоритм хэша документа 34.11-2012 (512), алгоритм подписи 34.10-2012 (512). Версия JCP 2.0.40035.

Код:

        //sig - набор байт из файла подписи
        PKCS7 pkcs7 = new PKCS7(sig);
        SignerInfo signerInfo = pkcs7.getSignerInfos()[0];
        X509Certificate certificate = signerInfo.getCertificate(pkcs7);

        PublicKey publicKey = certificate.getPublicKey();

        //Получение хэша документа
        byte[] messageDigest = (byte[]) signerInfo.getAuthenticatedAttributes().getAttribute("MessageDigest").getValue();

        Signature signature = Signature.getInstance(JCP.RAW_GOST_SIGN_2012_512_NAME);
        signature.initVerify(publicKey);
        signature.update(messageDigest);

        //Проверка подписи - результат false
        System.out.println(signature.verify(signerInfo.getEncryptedDigest()));


SVS показывает, что подпись валидна.

Не дает прикрепить файл, поэтому вот файл подписи в формате base64:
Код:
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

Отредактировано пользователем 26 декабря 2018 г. 10:14:37(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#22 Оставлено : 26 декабря 2018 г. 10:17:48(UTC)
Евгений Афанасьев

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

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 4,005
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 715 раз в 675 постах
Здравствуйте.
Есть подписи на данные (хеш данных), есть - на подписанные атрибуты (хеш подписанных атрибутов, в числе которых - хеш данных). Если это CADES-BES, то нужно проверять по хешу всех атрибутов, а не только хешу данных. См. примеры CAdES.jar в пакете CAdES в samples-sources.jar или CMSVerify в пакете CMS_samples того же архива.
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
Dmitrii оставлено 26.12.2018(UTC)
Offline Dmitrii  
#23 Оставлено : 26 декабря 2018 г. 16:19:22(UTC)
Dmitrii

Статус: Новичок

Группы: Участники
Зарегистрирован: 21.12.2017(UTC)
Сообщений: 8
Российская Федерация

Сказал(а) «Спасибо»: 3 раз
Все так и оказалось.
Заменил
Цитата:
byte[] messageDigest = (byte[]) signerInfo.getAuthenticatedAttributes().getAttribute("MessageDigest").getValue();

на вызов метода
Цитата:
private static byte[] getSignData(byte[] sigBytes) throws Asn1Exception, IOException {
Asn1BerDecodeBuffer buffer = new Asn1BerDecodeBuffer(sigBytes);
ContentInfo contentInfo = new ContentInfo();
contentInfo.decode(buffer);

SignedData signedData = (SignedData) contentInfo.content;
ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.SignerInfo signerInfo = signedData.signerInfos.elements[0];
Asn1BerEncodeBuffer sigBuffer = new Asn1BerEncodeBuffer();
signerInfo.signedAttrs.encode(sigBuffer);
return sigBuffer.getMsgCopy();
}


И соответственно поменял алгоритм с JCP.RAW_GOST_SIGN_2012_512_NAME на JCP.GOST_SIGN_2012_512_NAME.
Подпись стала проходить проверку.
Спасибо.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
3 Страницы<123
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.