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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline churkin_metasharks  
#1 Оставлено : 23 апреля 2024 г. 15:47:10(UTC)
churkin_metasharks

Статус: Участник

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

Сказал(а) «Спасибо»: 6 раз
Добрый день, подскажите, есть ли разница при подписании документа, который представлен в виде строки в формате base64 и хэша? В текущий момент в коде при использовании JCSP они подписываются одинаково. Например:
Цитата:
CAdESSignature cadesSignature = new CAdESSignature(true);
cadesSignature.addSigner(
JCSP.PROVIDER_NAME, // Криптопровайдер для хеширования и подписи.
null, // Идентификатор алгоритма хэширования. Может быть null. Если задан, то используется при создании запроса к TSP службе и в архивной подписи.
null, // Идентификатор алгоритма шифрования. Не используется, может быть null.
privateKey, // Закрытый ключ для подписи.
certs, // Цепочка сертификатов подписанта. Должна содержать как минимум один сертификат (сертификат подписи).
CAdESType.CAdES_BES, // Тип создаваемой подписи.
null, // Адрес TSA службы (для CAdES-T или CAdES-X Long Type 1). Может быть null.
false, // True, если подпись заверяющая.
null, // Таблица подписанных аттрибутов для добавления в подпись. Может быть null.
null, // Таблица неподписанных аттрибутов для добавления в подпись. Может быть null.
null, // Список CRL для проверки цепочки сертификатов подписанта или цепочки сертификатов штампа времени при создании подписи формата CAdES-BES или CAdES-T. Может быть null.
true // True, если следует добавить всю цепочку сертификатов в подпись. Игнорируется в случае CAdES-X Long Type 1 и CAdES-A.
);

// Поток для получения сформированной подписи.
final ByteArrayOutputStream outSignatureStream = new ByteArrayOutputStream();
cadesSignature.open(outSignatureStream); // подготовка контекста
// Создаём поток с данными для подписи
byte[] dataStream = Base64.getDecoder().decode(data);
cadesSignature.update(dataStream);
// Завершаем создание подписи
cadesSignature.close();
outSignatureStream.close();
// CAdES-BES подпись.
byte[] cadesByteSignature = outSignatureStream.toByteArray();
return new String(Base64.getEncoder().encode(cadesByteSignature));

где data - данные в виде base64 строки.
Также интересует правильно ли вообще формируется сама подпись. Верные ли параметры переданы в addSigner?
Offline Евгений Афанасьев  
#2 Оставлено : 24 апреля 2024 г. 21:34:24(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Здравствуйте.
Не совсем понятно, что имеется в виду под "представлен в виде ... хэша"?
В приведенном примере подписываются данные dataStream (декодированный data). В ходе создания подписи считается хэш от dataStream, помещается в подписанные атрибуты (message-digest), затем подписанные атрибуты хэшируется и вычисляется подпись.
Подпись формируется верно, создается отделенная CAdES-BES подпись с вложенной цепочкой сертификатов.

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

Offline churkin_metasharks  
#3 Оставлено : 6 мая 2024 г. 14:13:45(UTC)
churkin_metasharks

Статус: Участник

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

Сказал(а) «Спасибо»: 6 раз
Автор: Евгений Афанасьев Перейти к цитате
Здравствуйте.
Не совсем понятно, что имеется в виду под "представлен в виде ... хэша"?
В приведенном примере подписываются данные dataStream (декодированный data). В ходе создания подписи считается хэш от dataStream, помещается в подписанные атрибуты (message-digest), затем подписанные атрибуты хэшируется и вычисляется подпись.
Подпись формируется верно, создается отделенная CAdES-BES подпись с вложенной цепочкой сертификатов.


Подскажите, пожалуйста еще один момент. Если мы хотим подписывать уже готовый хэш, а не обычные данные, можем ли мы как-то сказать Крипто Про, что данные хэшировать не нужно?
Если мы будем использовать такой подход:
Цитата:
CAdESSignature cadesSignature = new CAdESSignature(true, true);

где, если судить по документации, первый параметр указывает на то, что подпись отделенная, а второй - используем ли мы в качестве данных хэш, будет ли подпись хэша проходить корректно?
Также интересует момент, если в методе addSigner указать во втором параметре(digestAlgorithm - Идентификатор алгоритма хэширования. Может быть null. Если задан, то используется при создании запроса к TSP службе и в архивной подписи.) null - это означает, что для подписи не будет использоваться хэширование или то, что будет использоваться какой-то алгоритм хэширования по-умолчанию?
Offline Евгений Афанасьев  
#4 Оставлено : 30 мая 2024 г. 9:49:59(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
"Если мы хотим подписывать уже готовый хэш, а не обычные данные, можем ли мы как-то сказать Крипто Про, что данные хэшировать не нужно?" - да, с помощью конструктора new CAdESSignature(true, true), как вы написали. В этом случае в update надо будет подавать не подписываемые данные, а готовый хэш от них.

"будет ли подпись хэша проходить корректно?" - да, но надо учитывать, что хэш с данных должен быть посчитан верно, иначе при проверке по подписанным данным хэш из сообщения (который указали при создании - в атрибуте message-digest) и хэш данных (который будет посчитан при проверке подписи) не сойдутся.

"если в методе addSigner указать во втором параметре(digestAlgorithm - Идентификатор алгоритма хэширования. Может быть null. Если задан, то используется при создании запроса к TSP службе и в архивной подписи.) null - это означает, что для подписи не будет использоваться хэширование или то, что будет использоваться какой-то алгоритм хэширования по-умолчанию?" - null вместо OID'а алгоритма хэширования или null вместо OID'а алгоритма ключа подписи означают, что они будут вычислены по ключу подписи, который также подается в addSigner.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.