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

Уведомление

Icon
Error

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

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

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

Добрый вечер. Подписи созданные в программе КриптоПро и программе 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 раз(а).
Offline Евгений Афанасьев  
#2 Оставлено : 29 июля 2025 г. 10:10:35(UTC)
Евгений Афанасьев

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

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

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

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

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

Версия 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 раз
Поблагодарили: 730 раз в 688 постах
Проверьте в используемой 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
Российская Федерация

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

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

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

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