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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline HtmlMan  
#1 Оставлено : 6 июля 2023 г. 14:59:39(UTC)
HtmlMan

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

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

Здравствуйте, мне нужно подписать строку в формате CAdES-BES (PKCS#7) согласно GOST R 34.10-2001. Я нашел похожие примеры на этом форуме и они отлично работают, но результат всегда получается в GOST R 34.11-2012 256. Я пробовал изменить изменить второй и третий параметры в CAdESSignature.addSigner(), с null на JCP.GOST_DIGEST_NAME и JCP.GOST_EL_SIGN_NAME соответственно, но это не помогло, результат всегда в GOST R 34.11-2012 256. Что нужно сделать, что получить результат в GOST R 34.10-2001?

Версия ОС:
DISTRIB_ID=LinuxMint
DISTRIB_RELEASE=21.1

Версия Крипто CSP:
Крипто Про CSP 5.0.12800

Версия КриптоПро JCP:
Сертифицированная версия КриптоПро JCP и JTLS R4 (2.0.41789)

Версия JDK:
1.8

Ключ обмена:
длина открытого ключа 512
экспорт ключа разрешен
ключ действителен по 05/04/2024 09:52:55 UTC
использование ключа разрешено до окончания срока действия закрытого ключа
алгоритм ГОСТ Р 34.10-2012 DH 256 бит
ГОСТ Р 34.10 256 бит, параметры обмена по умолчанию
ГОСТ Р 34.11-2012 256 бит
экспорт открытого ключа успешно
вычисление открытого ключа успешно
импорт открытого ключа успешно
подпись успешно
проверка успешно
создание ключа обмена разрешено


Цитата:

import org.bouncycastle.cert.X509CertificateHolder;
import org.bouncycastle.util.CollectionStore;
import ru.CryptoPro.CAdES.CAdESSignature;
import ru.CryptoPro.CAdES.CAdESType;
import ru.CryptoPro.CAdES.exception.CAdESException;
import ru.CryptoPro.JCP.JCP;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.security.*;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Base64;
import java.util.Collections;
import java.util.List;

public class StringSigner {
private static final String ALIAS = "TEST";
private static final String TEXT_FOR_SIGNING = "TEST";

public static void main(String[] args) throws KeyStoreException, CertificateException, IOException, UnrecoverableKeyException, NoSuchAlgorithmException, CAdESException {
// Включить системное свойство проверки отзыва серитифкатов CRLDP для библиотеки безопасности Java, от Oracle и IBM.
System.setProperty("com.sun.security.enableCRLDP", "true");
System.setProperty("com.ibm.security.enableCRLDP", "true");

// Иницилизация объекта хранилища ключей. Константа JCP.HD_STORE_NAME указывает, что хранилище находится на диске.
final KeyStore keyStore = KeyStore.getInstance(JCP.HD_STORE_NAME);
// Загрузка контента из хранилища ключей.
keyStore.load(null, null);

// Получение приватного ключа подписи.
final PrivateKey signerPrivateKey = (PrivateKey) keyStore.getKey(ALIAS, null);

// Получение сертификата подписи.
final X509Certificate signerCert = (X509Certificate) keyStore.getCertificate(ALIAS);
// Создание цепочки сертификатов подписанта из одного сертификата.
final List<X509Certificate> signerCertificateChain = Collections.singletonList(signerCert);

// Создание подписи отделенного типа, о чем говорит параметр true.
final CAdESSignature cadesSignature = new CAdESSignature(true);

// Добавление сертификата подписи в подпись отделенного типа.
final List<X509CertificateHolder> certHolderList = new ArrayList<>();
certHolderList.add(new X509CertificateHolder(signerCert.getEncoded()));
final CollectionStore certStore = new CollectionStore(certHolderList);
cadesSignature.setCertificateStore(certStore);

// Добавление подписанта CAdES-BES.
cadesSignature.addSigner(
JCP.PROVIDER_NAME, // Имя провайдера, который будет использоваться для создания подписи.
JCP.GOST_DIGEST_NAME, // Идентификатор алгоритма хэширования, который будет использоваться для вычисления дайджеста (хэша) подписываемых данных.
JCP.GOST_EL_SIGN_NAME, // Идентификатор алгоритма подписи, который будет использоваться для создания электронной подписи.
signerPrivateKey, // Приватный ключ подписанта.
signerCertificateChain, // Цепочка сертификатов подписанта.
CAdESType.CAdES_BES, // Тип CAdES подписи.
null, // Адрес TSA службы.
false, // Заверяющая ли подпись.
null, // Таблица подписанных аттрибутов для добавления в подпись.
null, // Таблица неподписанных аттрибутов для добавления в подпись.
null, // CRL (списков отзыва сертификатов), связанных с подписью.
false // Добавить ли цепочку подписанта в подпись.
);

// Поток для получения сформированной подписи.
final ByteArrayOutputStream outSignatureStream = new ByteArrayOutputStream();
cadesSignature.open(outSignatureStream);
// Подпись данных.
cadesSignature.update(TEXT_FOR_SIGNING.getBytes(StandardCharsets.UTF_8));
cadesSignature.close();
outSignatureStream.close();

// CAdES-BES подпись.
byte[] signature = outSignatureStream.toByteArray();
String encodedString = new String(Base64.getEncoder().encode(signature));
System.out.println(encodedString);
}
}

Отредактировано пользователем 6 июля 2023 г. 15:03:07(UTC)  | Причина: Не указана

Offline Андрей *  
#2 Оставлено : 6 июля 2023 г. 15:05:39(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,320
Мужчина
Российская Федерация

Сказал «Спасибо»: 549 раз
Поблагодарили: 2207 раз в 1722 постах
Здравствуйте.

Какая ИС требует 2001?
Может это недостоверная (старое ТЗ) информация?
2001 уже запрещен для подписания же...
Техническую поддержку оказываем тут
Наша база знаний
Offline HtmlMan  
#3 Оставлено : 6 июля 2023 г. 15:10:07(UTC)
HtmlMan

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

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

Автор: Андрей * Перейти к цитате
Здравствуйте.

Какая ИС требует 2001?
Может это недостоверная (старое ТЗ) информация?
2001 уже запрещен для подписания же...


Здравствуйте, благодарю за быстрый ответ. API ФНС - https://service.nalog.ru...%20Developer%20guide.pdf , на последней странице руководства подпись (она же токен) в GOST R 34.10-2001, судя по ASN.1 вьюверу.
Offline HtmlMan  
#4 Оставлено : 6 июля 2023 г. 15:20:55(UTC)
HtmlMan

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

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

Автор: HtmlMan Перейти к цитате
Автор: Андрей * Перейти к цитате
Здравствуйте.

Какая ИС требует 2001?
Может это недостоверная (старое ТЗ) информация?
2001 уже запрещен для подписания же...


Здравствуйте, благодарю за быстрый ответ. API ФНС - https://service.nalog.ru...%20Developer%20guide.pdf , на последней странице руководства подпись (она же токен) в GOST R 34.10-2001, судя по ASN.1 вьюверу.


.

Отредактировано пользователем 6 июля 2023 г. 15:29:02(UTC)  | Причина: Не указана

Offline Андрей *  
#5 Оставлено : 6 июля 2023 г. 17:16:31(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,320
Мужчина
Российская Федерация

Сказал «Спасибо»: 549 раз
Поблагодарили: 2207 раз в 1722 постах
Автор: HtmlMan Перейти к цитате
Автор: Андрей * Перейти к цитате
Здравствуйте.

Какая ИС требует 2001?
Может это недостоверная (старое ТЗ) информация?
2001 уже запрещен для подписания же...


Здравствуйте, благодарю за быстрый ответ. API ФНС - https://service.nalog.ru...%20Developer%20guide.pdf , на последней странице руководства подпись (она же токен) в GOST R 34.10-2001, судя по ASN.1 вьюверу.


это старая документация, 2019 в примерах, уточните у ФНС.

Сейчас сертификаты с ГОСТ 2012 выдаются только.
Техническую поддержку оказываем тут
Наша база знаний
Offline HtmlMan  
#6 Оставлено : 6 июля 2023 г. 17:44:26(UTC)
HtmlMan

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

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

Автор: Андрей * Перейти к цитате
Автор: HtmlMan Перейти к цитате
Автор: Андрей * Перейти к цитате
Здравствуйте.

Какая ИС требует 2001?
Может это недостоверная (старое ТЗ) информация?
2001 уже запрещен для подписания же...


Здравствуйте, благодарю за быстрый ответ. API ФНС - https://service.nalog.ru...%20Developer%20guide.pdf , на последней странице руководства подпись (она же токен) в GOST R 34.10-2001, судя по ASN.1 вьюверу.


это старая документация, 2019 в примерах, уточните у ФНС.

Сейчас сертификаты с ГОСТ 2012 выдаются только.


Поясните, пожалуйста, значит ли это то, что в принципе, даже теоретически нельзя подписать в 34.10-2001?
Offline Андрей *  
#7 Оставлено : 6 июля 2023 г. 18:42:54(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,320
Мужчина
Российская Федерация

Сказал «Спасибо»: 549 раз
Поблагодарили: 2207 раз в 1722 постах
Автор: HtmlMan Перейти к цитате
Автор: Андрей * Перейти к цитате
Автор: HtmlMan Перейти к цитате
Автор: Андрей * Перейти к цитате
Здравствуйте.

Какая ИС требует 2001?
Может это недостоверная (старое ТЗ) информация?
2001 уже запрещен для подписания же...


Здравствуйте, благодарю за быстрый ответ. API ФНС - https://service.nalog.ru...%20Developer%20guide.pdf , на последней странице руководства подпись (она же токен) в GOST R 34.10-2001, судя по ASN.1 вьюверу.


это старая документация, 2019 в примерах, уточните у ФНС.

Сейчас сертификаты с ГОСТ 2012 выдаются только.


Поясните, пожалуйста, значит ли это то, что в принципе, даже теоретически нельзя подписать в 34.10-2001?


Вы должны для API использовать ГОСТ-2012 и всё.
Игнорируйте старые сведения о ГОСТ-2001.
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.