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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline alevigo1995  
#1 Оставлено : 28 июля 2025 г. 20:57:10(UTC)
alevigo1995

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

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

Сказал(а) «Спасибо»: 1 раз
Добрый вечер. Подписи созданные в программе КриптоПро и программе java 8 отличаются на AstraLinux. Внимательно посмотрел их структуру, подпись на java 8 использует старый алгоритм хеширования в одном из атрибутов (signingCertificateV2) - гост р 34.11-94. С чем это связано? По умолчанию в сертификате гост р 34.11-2012. Использую версию R4 для AstraLinux.
Функция подписи:
Код:
public static byte[] output_signature(String file_name,
                                        PrivateKey private_key,
                                        Certificate[] chain) throws Exception {
    // Конструктор с true означает отсоединенную подпись.
    CAdESSignature signature = new CAdESSignature(true);
    List<X509Certificate> list_chain = new ArrayList<X509Certificate>();
    // Поток для формировния сигнатуры.
    ByteArrayOutputStream byte_stream = new ByteArrayOutputStream();
    byte[] data = Files.readAllBytes(Paths.get(file_name));
    for (Certificate cert : chain)
      list_chain.add((X509Certificate)cert);
    // 2, 3 параметр для автоопределения алгоритмов хеширования и подписывания,
    // далее ключ, цепочка, формат.
    signature.addSigner(JCSP.PROVIDER_NAME, null, null, private_key, list_chain,
                        CAdESType.CAdES_BES, null, false);
    // Связываем с потоком байтов на вывод.
    signature.open(byte_stream);
    // Вычисляем подпись разом.
    signature.update(data);
    byte_stream.close();
    signature.close();
    return byte_stream.toByteArray();
  }

Прикладываю подпись из программы КриптоПро и кода. sig.zip (3kb) загружен 3 раз(а).

Отредактировано пользователем 31 июля 2025 г. 12:51:30(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#2 Оставлено : 29 июля 2025 г. 10:10:35(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 731 раз в 689 постах
Добрый день.
Исправлено в JCP 2.0.41752 (2020-11-16), signingCertificateV2 стал содержать алгоритм хэширования по алгоритму ключа.
Offline alevigo1995  
#3 Оставлено : 29 июля 2025 г. 13:19:18(UTC)
alevigo1995

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

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

Сказал(а) «Спасибо»: 1 раз
Версия JCP v.2.0, rel.2.0.47526 из панели, в логе та же самая версия. Провайдер по умолчанию поменял на JCP в панели, подписывает с неправильным дайджестом. Записал лог и сигнатуру в архив. log+sig.zip (9kb) загружен 1 раз(а).
Offline Евгений Афанасьев  
#4 Оставлено : 29 июля 2025 г. 16:18:14(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 731 раз в 689 постах
Проверьте в используемой JVM версию установленного CAdES.jar, что она 2.0.47526, это можно узнать, распаковав CAdES.jar, как архив, внутри есть META-INF\MANIFEST.MF с Implementation-Version или Release-Version.

"подписывает с неправильным дайджестом." - хэш посчитан верно, просто на старом алгоритме.

Отредактировано пользователем 29 июля 2025 г. 16:57:17(UTC)  | Причина: Не указана

Offline alevigo1995  
#5 Оставлено : 29 июля 2025 г. 16:28:18(UTC)
alevigo1995

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

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

Сказал(а) «Спасибо»: 1 раз
Версия совпадает. Текстовик: MANIFEST.txt (18kb) загружен 2 раз(а).
Offline Евгений Афанасьев  
#6 Оставлено : 29 июля 2025 г. 17:04:46(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 731 раз в 689 постах
Проверьте, что bouncycastle в списке провайдеров находится ниже JCP и JCSP. Если используется Java 8, то обычно это список провайдеров в java.security. В коде тоже нужно проверить, что нет вызовов вроде Security.insertProviderAt. Bouncycastle должен быть ниже JCP или JCSP по приоритету.
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
alevigo1995 оставлено 31.07.2025(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.