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

Уведомление

Icon
Error

3 Страницы123>
Опции
К последнему сообщению К первому непрочитанному
Offline doubleside  
#1 Оставлено : 24 января 2019 г. 10:30:09(UTC)
doubleside

Статус: Активный участник

Группы: Участники
Зарегистрирован: 23.05.2018(UTC)
Сообщений: 71
Великобритания
Откуда: London

Сказал(а) «Спасибо»: 5 раз
Поблагодарили: 1 раз в 1 постах
Здравствуйте!
У меня встала задача передать файл в файловое хранилище СМЕВ3 по ftp
И у меня есть такие инстукции

1) вычислить отпечаток файла по алгоритму вычисления хэш-функции, соответствующему ГОСТ 34.11;
2) подписать полученный отпечаток ЭП по стандарту PKCS #7;

Каким образом это можно сделать через КриптоПРо JCP?
И еще вопрос касательно пункта 2) разве подпись отпечатка не будет автоматически считать хеш?
Иными словами могу я крипто jcp дать файл сразу и она посчитает хеш и вернет мне ЭП? Или подпись PKCS #7 не считает хеши сама и ей нужно этот самый хеш передать? Если нужно передавать то в каком формате это нужно сделать? В формате массива байтов base64 итд?
Offline Евгений Афанасьев  
#2 Оставлено : 24 января 2019 г. 14:03:46(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Здравствуйте.
Вероятно, подойдут примеры подписи CMS.java из CMS_samples архива samples-sources.jar (в дистрибутиве JCP), в них подписывается хеш.
Да, хеш будет считаться, если подать данные. Да, можете дать файл. Файл передавать, как есть, в виде массива байтов.
Offline doubleside  
#3 Оставлено : 24 января 2019 г. 14:39:44(UTC)
doubleside

Статус: Активный участник

Группы: Участники
Зарегистрирован: 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? Причем в этой подписи будет хеш файла посчитан а только потом подписан?
Offline Евгений Афанасьев  
#4 Оставлено : 24 января 2019 г. 15:20:28(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Автор: 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 пример, в нем есть подпись атрибутов).


Offline doubleside  
#5 Оставлено : 24 января 2019 г. 15:25:45(UTC)
doubleside

Статус: Активный участник

Группы: Участники
Зарегистрирован: 23.05.2018(UTC)
Сообщений: 71
Великобритания
Откуда: London

Сказал(а) «Спасибо»: 5 раз
Поблагодарили: 1 раз в 1 постах
@Это не будет подпись по подписанным атрибутам, поэтому внутри подписи не будет хеша данных (message-digest) (для сравнения можно посмотреть CMSSign пример, в нем есть подпись атрибутов).@

А какие аттрибуты могут быть у png файла или wav ? Мне нужна подпись имеено такого рода файлов

Т.о. я правильно понимаю что я верно использую данную функцию(аттрибуты не нужны и detached = true)?
Offline Евгений Афанасьев  
#6 Оставлено : 24 января 2019 г. 16:25:53(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Автор: doubleside Перейти к цитате
@Это не будет подпись по подписанным атрибутам, поэтому внутри подписи не будет хеша данных (message-digest) (для сравнения можно посмотреть CMSSign пример, в нем есть подпись атрибутов).@

А какие аттрибуты могут быть у png файла или wav ? Мне нужна подпись имеено такого рода файлов

Т.о. я правильно понимаю что я верно использую данную функцию(аттрибуты не нужны и detached = true)?

Атрибуты у подписи.
Используете ли верно, зависит от требований. Есть форматы: PKCS7, CMS, CADES. Подпись может быть отделенная (detached=true) или совмещенная (detached=false). Если подпись по хешу данных, то, видимо, выбрана верная версия функции. Если нужна подпись отделенная, то detached=true.

Offline doubleside  
#7 Оставлено : 29 января 2019 г. 14:55:26(UTC)
doubleside

Статус: Активный участник

Группы: Участники
Зарегистрирован: 23.05.2018(UTC)
Сообщений: 71
Великобритания
Откуда: London

Сказал(а) «Спасибо»: 5 раз
Поблагодарили: 1 раз в 1 постах
Да я с мамого начала упомянул что нужно PKCS #7
Offline doubleside  
#8 Оставлено : 30 января 2019 г. 14:26:14(UTC)
doubleside

Статус: Активный участник

Группы: Участники
Зарегистрирован: 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 можно реализоват данную подпись?
Offline Евгений Афанасьев  
#9 Оставлено : 30 января 2019 г. 20:37:46(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Если есть подписанные атрибуты (content-type, message-digest), то нужна подпись по атрибутам - CMS или CAdES, смотрите примеры класса CMSSign с добавлением атрибутов.

Отредактировано пользователем 30 января 2019 г. 20:38:37(UTC)  | Причина: Не указана

Offline doubleside  
#10 Оставлено : 1 февраля 2019 г. 14:24:09(UTC)
doubleside

Статус: Активный участник

Группы: Участники
Зарегистрирован: 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);
}
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
3 Страницы123>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.