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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Alexey 2001  
#1 Оставлено : 2 мая 2024 г. 15:48:19(UTC)
Alexey 2001

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

Группы: Участники
Зарегистрирован: 02.05.2024(UTC)
Сообщений: 2

Сказал(а) «Спасибо»: 1 раз
Добрый день, при попытке использовать для подписания текста его хэш при проверке возникает ошибка
message-digest attribute value does not match calculated value В случае если не использовать хэш, проверка проходит. В чем может быть причина?
Код:
Код:

        byte[] source = DATA_TO_SIGN.getBytes(StandardCharsets.UTF_8);
        CAdESSignature cadesSig = new CAdESSignature(true, true);
        cadesSig.addSigner(JCP.PROVIDER_NAME, JCP.GOST_DIGEST_OID,
                         JCP.GOST_EL_KEY_OID, privateKey, chain, CAdESType.CAdES_BES, null, false);
        final var signDataStream = new ByteArrayOutputStream();
        cadesSig.open(signDataStream);
        cadesSig.update(source);
        cadesSig.close();
        signDataStream.close();
        final var byteSign = signDataStream.toByteArray();

        MessageDigest md = MessageDigest.getInstance(JCP.GOST_DIGEST_OID, jcpProvider);
        byte[] hash = md.digest(source);

       CAdESSignature cadesSignature = new CAdESSignature(byteSign, hash,
            CAdESType.CAdES_BES, true);
       cadesSignature.verify(chain); // message-digest attribute value does not match
Offline Евгений Афанасьев  
#2 Оставлено : 3 мая 2024 г. 17:33:39(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Здравствуйте.
Вы используете new CAdESSignature(true, true), где второй параметр - useRawDigest.
Предполагается, что в cadesSig.update вы передадите не данные source, а хэш hash, который сами посчитали, он попадет в атрибут message-digest.
Или используйте CAdESSignature(true) для создания подписи.

Отредактировано пользователем 3 мая 2024 г. 18:18:11(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
Alexey 2001 оставлено 03.05.2024(UTC)
Offline Alexey 2001  
#3 Оставлено : 3 мая 2024 г. 19:30:08(UTC)
Alexey 2001

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

Группы: Участники
Зарегистрирован: 02.05.2024(UTC)
Сообщений: 2

Сказал(а) «Спасибо»: 1 раз
Спасибо, так работает, но подскажите еще пожалуйста - для чего нужен дополнительный API? В обоих случаях мы передаем в cadesSig.update массив байт и тот же массив в new CAdESSignature(...) В обоих методах при этом должны соответствовать флажки useRawDigest На первый взгляд разница в том, что при передаче массива с хэшом можно дополнительно отметить этот факт, но ведь можно этого и не делать? Возможно, это просто оптимизация, чтобы библиотеке самой не с читать хэш на хэш?
Offline Евгений Афанасьев  
#4 Оставлено : 30 мая 2024 г. 9:44:50(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
"В обоих случаях мы передаем в cadesSig.update массив байт и тот же массив в new CAdESSignature(...)" - нет, в конструктор CAdESSignature вы передаете массив только при проверке. При создании вы передаете его в update. Наличие useRawDigest означает использование готового хэша (32/64 байта), который не нужно считать (например, когда нет подписанных данных).
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.