Статус:: Активный участник
Группы: Участники
Зарегистрирован: 23.05.2018(UTC) Сообщений: 71  Откуда: London Сказал(а) «Спасибо»: 5 раз Поблагодарили: 1 раз в 1 постах
|
Здравствуйте! У меня встала задача передать файл в файловое хранилище СМЕВ3 по ftp И у меня есть такие инстукции
1) вычислить отпечаток файла по алгоритму вычисления хэш-функции, соответствующему ГОСТ 34.11; 2) подписать полученный отпечаток ЭП по стандарту PKCS #7;
Каким образом это можно сделать через КриптоПРо JCP? И еще вопрос касательно пункта 2) разве подпись отпечатка не будет автоматически считать хеш? Иными словами могу я крипто jcp дать файл сразу и она посчитает хеш и вернет мне ЭП? Или подпись PKCS #7 не считает хеши сама и ей нужно этот самый хеш передать? Если нужно передавать то в каком формате это нужно сделать? В формате массива байтов base64 итд?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Здравствуйте. Вероятно, подойдут примеры подписи CMS.java из CMS_samples архива samples-sources.jar (в дистрибутиве JCP), в них подписывается хеш. Да, хеш будет считаться, если подать данные. Да, можете дать файл. Файл передавать, как есть, в виде массива байтов. |
|
|
|
|
Статус:: Активный участник
Группы: Участники
Зарегистрирован: 23.05.2018(UTC) Сообщений: 71  Откуда: London Сказал(а) «Спасибо»: 5 раз Поблагодарили: 1 раз в 1 постах
|
Я вас правильно понял?
public static byte[] CMSSign(byte[] data, PrivateKey key, Certificate cert, boolean detached) throws Exception { return CMSSignEx(data, key, cert, detached, CMStools.DIGEST_OID, CMStools.SIGN_OID, JCP.GOST_DHEL_SIGN_NAME, JCP.PROVIDER_NAME); }
data => сырое содержимое файла key => (PrivateKey)keyStore.getKey(<ALIAS>, keyPassword); cert => (Certificate) keyStore.getCertificate(<ALIAS>); boolean = true?
Эта функция мне вернет массив байт который я должен буду перегнать в Base64? Причем в этой подписи будет хеш файла посчитан а только потом подписан?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Автор: doubleside  Я вас правильно понял?
public static byte[] CMSSign(byte[] data, PrivateKey key, Certificate cert, boolean detached) throws Exception { return CMSSignEx(data, key, cert, detached, CMStools.DIGEST_OID, CMStools.SIGN_OID, JCP.GOST_DHEL_SIGN_NAME, JCP.PROVIDER_NAME); }
data => сырое содержимое файла key => (PrivateKey)keyStore.getKey(<ALIAS>, keyPassword); cert => (Certificate) keyStore.getCertificate(<ALIAS>); boolean = true?
Эта функция мне вернет массив байт который я должен буду перегнать в Base64? Причем в этой подписи будет хеш файла посчитан а только потом подписан? Если подпись отделенная, то detached=true, иначе - false. Да, эта функция создаст PKCS7 по хешу данных (сначала хеш, потом подпись). Это не будет подпись по подписанным атрибутам, поэтому внутри подписи не будет хеша данных (message-digest) (для сравнения можно посмотреть CMSSign пример, в нем есть подпись атрибутов). |
|
|
|
|
Статус:: Активный участник
Группы: Участники
Зарегистрирован: 23.05.2018(UTC) Сообщений: 71  Откуда: London Сказал(а) «Спасибо»: 5 раз Поблагодарили: 1 раз в 1 постах
|
@Это не будет подпись по подписанным атрибутам, поэтому внутри подписи не будет хеша данных (message-digest) (для сравнения можно посмотреть CMSSign пример, в нем есть подпись атрибутов).@
А какие аттрибуты могут быть у png файла или wav ? Мне нужна подпись имеено такого рода файлов
Т.о. я правильно понимаю что я верно использую данную функцию(аттрибуты не нужны и detached = true)?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Автор: doubleside  @Это не будет подпись по подписанным атрибутам, поэтому внутри подписи не будет хеша данных (message-digest) (для сравнения можно посмотреть CMSSign пример, в нем есть подпись атрибутов).@
А какие аттрибуты могут быть у png файла или wav ? Мне нужна подпись имеено такого рода файлов
Т.о. я правильно понимаю что я верно использую данную функцию(аттрибуты не нужны и detached = true)? Атрибуты у подписи. Используете ли верно, зависит от требований. Есть форматы: PKCS7, CMS, CADES. Подпись может быть отделенная (detached=true) или совмещенная (detached=false). Если подпись по хешу данных, то, видимо, выбрана верная версия функции. Если нужна подпись отделенная, то detached=true. |
|
|
|
|
Статус:: Активный участник
Группы: Участники
Зарегистрирован: 23.05.2018(UTC) Сообщений: 71  Откуда: London Сказал(а) «Спасибо»: 5 раз Поблагодарили: 1 раз в 1 постах
|
Да я с мамого начала упомянул что нужно PKCS #7
|
|
|
|
Статус:: Активный участник
Группы: Участники
Зарегистрирован: 23.05.2018(UTC) Сообщений: 71  Откуда: London Сказал(а) «Спасибо»: 5 раз Поблагодарили: 1 раз в 1 постах
|
У меня есть описание данной подписи Формат PKCS#7 используется для подписания файлов, вложенных в сообщения. Используется версия 1.5 спецификации PKCS#7 (RFC-2315). На формат подписи накладываются следующие ограничения: • Для корневого элемента ContentInfo единственный допустимый contentType - SignedData. • Подпись должна быть detached (т.е. для элемента SignedData/contentInfo/contentType единственное допустимое значение - 1.2.840.113549.1.7.1, а элемент SignedData/contentInfo/content должен отсутствовать). • Для вычисления message digest разрешён только алгоритм ГОСТ Р 34.11-94 (планируется переход на ГОСТ Р 34.11-2012 до конца 2018г., при этом ГОСТ Р 34.11-94 также будет поддерживаться). • Для генерации ЭП разрешён только алгоритм ГОСТ 34.10-2001 (планируется переход на ГОСТ Р 34.10-2012 до конца 2018г., при этом ГОСТ Р 34.10-2001 также будет поддерживаться). • Разрешено применять только X-509 сертификаты. Сертификаты PKCS#6 запрещены. • Запрещено размещать более одной ЭП в PKCS#7-криптосообщении. • В элементе SignerInfo должны присутствовать следующие authenticated attributes: ◦ contentType (1.2.840.113549.1.9.3), всегда имеет значение 1.2.840.113549.1.7.1. ◦ messageDigest (1.2.840.113549.1.9.4), содержит ГОСТ-digest подписываемого файла.
12.3. Приложение 3: Профиль формата PKCS#7, которому должны удовлетворять подписи вложенных файлов pkcs-7 OBJECT IDENTIFIER ::= {iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 7} pkcs-9 OBJECT IDENTIFIER ::= {iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 9} gost-r OBJECT IDENTIFIER ::= {iso(1) member-body(2) rus(643) khz(2) 2}
SignatureContentType OBJECT IDENTIFIER ::= {pkcs-7 2} -- PKCS#7 SignedData SignedFileContentType OBJECT IDENTIFIER ::= {pkcs-7 1} -- PKCS#7 data DigestAlgorithmIdentifier OBJECT IDENTIFIER ::= {gost-r 9} -- GOST R 34.11-2012 DigestEncryptionAlgorithmIdentifier OBJECT IDENTIFIER ::= {gost-r 19} -- GOST R 34.10-2001
Version INTEGER ::= 1 -- PKCS#7 standard version. Refers to version 1.5. ContentInfo ::= SEQUENCE { contentType SignatureContentType, content SignedData }
SignedData ::= SEQUENCE { version Version, digestAlgorithms DigestAlgorithmIdentifiers, contentInfo ExternalContentInfo, certificates ExtendedCertificatesAndCertificates, signerInfos SignerInfos }
DigestAlgorithmIdentifiers ::= SET OF DigestAlgorithmIdentifier
ExternalContentInfo ::= SEQUENCE { contentType SignedFileContentType }
ExtendedCertificatesAndCertificates ::= SET OF ExtendedCertificateOrCertificate
ExtendedCertificateOrCertificate ::= CHOICE { certificate Certificate -- X.509 }
SignerInfos ::= SET OF SignerInfo
SignerInfo ::= SEQUENCE { version Version, issuerAndSerialNumber IssuerAndSerialNumber, digestAlgorithm DigestAlgorithmIdentifier, authenticatedAttributes [0] IMPLICIT Attributes, digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier, encryptedDigest EncryptedDigest unauthenticatedAttributes [1] IMPLICIT Attributes OPTIONAL } }
EncryptedDigest ::= OCTET STRING
Каким кодом можно c jcp можно реализоват данную подпись?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Если есть подписанные атрибуты (content-type, message-digest), то нужна подпись по атрибутам - CMS или CAdES, смотрите примеры класса CMSSign с добавлением атрибутов. Отредактировано пользователем 30 января 2019 г. 20:38:37(UTC)
| Причина: Не указана |
|
|
|
|
Статус:: Активный участник
Группы: Участники
Зарегистрирован: 23.05.2018(UTC) Сообщений: 71  Откуда: London Сказал(а) «Спасибо»: 5 раз Поблагодарили: 1 раз в 1 постах
|
Проблема решена с помощью вашей поддержки
Кому нужно для смев3 нужно использовать CMSSign.createHashCMS
public static byte[] createHashCMS(byte[] data, PrivateKey[] keys, Certificate[] certs, String path, boolean detached) throws Exception { return createHashCMSEx(data, false, keys, certs, path, detached, false); }
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close