Статус: Участник
Группы: Участники
Зарегистрирован: 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?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Здравствуйте. Не совсем понятно, что имеется в виду под "представлен в виде ... хэша"? В приведенном примере подписываются данные dataStream (декодированный data). В ходе создания подписи считается хэш от dataStream, помещается в подписанные атрибуты (message-digest), затем подписанные атрибуты хэшируется и вычисляется подпись. Подпись формируется верно, создается отделенная CAdES-BES подпись с вложенной цепочкой сертификатов. Отредактировано пользователем 24 апреля 2024 г. 21:35:43(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 27.11.2023(UTC) Сообщений: 18
Сказал(а) «Спасибо»: 6 раз
|
Автор: Евгений Афанасьев Здравствуйте. Не совсем понятно, что имеется в виду под "представлен в виде ... хэша"? В приведенном примере подписываются данные dataStream (декодированный data). В ходе создания подписи считается хэш от dataStream, помещается в подписанные атрибуты (message-digest), затем подписанные атрибуты хэшируется и вычисляется подпись. Подпись формируется верно, создается отделенная CAdES-BES подпись с вложенной цепочкой сертификатов. Подскажите, пожалуйста еще один момент. Если мы хотим подписывать уже готовый хэш, а не обычные данные, можем ли мы как-то сказать Крипто Про, что данные хэшировать не нужно? Если мы будем использовать такой подход: Цитата:CAdESSignature cadesSignature = new CAdESSignature(true, true); где, если судить по документации, первый параметр указывает на то, что подпись отделенная, а второй - используем ли мы в качестве данных хэш, будет ли подпись хэша проходить корректно? Также интересует момент, если в методе addSigner указать во втором параметре(digestAlgorithm - Идентификатор алгоритма хэширования. Может быть null. Если задан, то используется при создании запроса к TSP службе и в архивной подписи.) null - это означает, что для подписи не будет использоваться хэширование или то, что будет использоваться какой-то алгоритм хэширования по-умолчанию?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 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. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close