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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline est412  
#1 Оставлено : 17 сентября 2020 г. 19:23:19(UTC)
est412

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

Группы: Участники
Зарегистрирован: 14.10.2014(UTC)
Сообщений: 38
Российская Федерация
Откуда: Казань

Сказал(а) «Спасибо»: 12 раз
Поблагодарили: 1 раз в 1 постах
jdk1.8.0_261 + JCSP5.0.39267

Если сертификат получателя не был первым в процессе выработки ключа согласования:
Код:
senderKeyAgree.doPhase(...)

то при попытке расшифрования данным получателем возникает ошибка:
Код:
Exception in thread "main" java.lang.IllegalArgumentException: ru.CryptoPro.JCSP.MSCAPI.MSException: MSCAPI ERROR: 0x80090005
	at ru.CryptoPro.JCSP.MSCAPI.cl_5.importSessionSecretKey(Unknown Source)
	at ru.CryptoPro.JCSP.Key.cl_8.unwrap(Unknown Source)
	at ru.CryptoPro.JCSP.Cipher.GostCipher.engineUnwrap(Unknown Source)
	at javax.crypto.Cipher.unwrap(Cipher.java:2553)

В примерах не нашел за/расшифрования в пользу нескольких получателей.

Отредактировано пользователем 17 сентября 2020 г. 19:28:08(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#2 Оставлено : 17 сентября 2020 г. 22:26:28(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Здравствуйте. Напишите, какой пример и как используете. Для вашей задачи подходит EnvelopedSignature из CAdES.jar.
Offline est412  
#3 Оставлено : 18 сентября 2020 г. 8:03:46(UTC)
est412

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

Группы: Участники
Зарегистрирован: 14.10.2014(UTC)
Сообщений: 38
Российская Федерация
Откуда: Казань

Сказал(а) «Спасибо»: 12 раз
Поблагодарили: 1 раз в 1 постах
Добрый день!

В качестве основы взят пример CMSSignAndEncrypt и адаптирован под несколько получателей (Certificate - наш класс):
Код:
Iterator<Certificate> iter = recipientsCertificates.iterator();
while (iter.hasNext()) {
    Certificate cert = iter.next();
    boolean isLast = !iter.hasNext();
    senderKeyAgree.doPhase(cert.getX509Certificate().getPublicKey(), isLast);
}

и (addRecipientInfo - наш метод с кодом из вашего примера)
Код:
List<RecipientInfo> recipientInfos = new ArrayList<>();
recipientsCertificates.forEach(certificate -> addRecipientInfo(recipientInfos, certificate, wrap, svBytes));
cms.recipientInfos.elements = recipientInfos.toArray(cms.recipientInfos.elements);


Цитата:
Для вашей задачи подходит EnvelopedSignature из CAdES.jar

на данном этапе хотелось бы обойтись без CAdES.
Offline Евгений Афанасьев  
#4 Оставлено : 18 сентября 2020 г. 9:05:11(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Для Госта doPhase так не работает, его нужно звать только 1 раз. Об этом должно быть в руководстве разработчика.

Отредактировано пользователем 18 сентября 2020 г. 9:05:57(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
est412 оставлено 18.09.2020(UTC)
Offline est412  
#5 Оставлено : 18 сентября 2020 г. 10:34:50(UTC)
est412

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

Группы: Участники
Зарегистрирован: 14.10.2014(UTC)
Сообщений: 38
Российская Федерация
Откуда: Казань

Сказал(а) «Спасибо»: 12 раз
Поблагодарили: 1 раз в 1 постах
Вон в чём дело...
Правильно ли я понимаю, что сформировать таким образом CMS по ГОСТ для нескольких получателей невозможно?

Отредактировано пользователем 18 сентября 2020 г. 19:54:23(UTC)  | Причина: Была написана глупость. См. ниже решение

Offline Евгений Афанасьев  
#6 Оставлено : 18 сентября 2020 г. 10:39:20(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Посмотрите пример PKCS7EnvEphTransport в CMS_samples в samples-sources.jar, лучше в последнем дистрибутиве JCP. Он формирует KeyTransRecipientInfo и кладет в подпись.
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
est412 оставлено 18.09.2020(UTC)
Offline est412  
#7 Оставлено : 18 сентября 2020 г. 20:01:37(UTC)
est412

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

Группы: Участники
Зарегистрирован: 14.10.2014(UTC)
Сообщений: 38
Российская Федерация
Откуда: Казань

Сказал(а) «Спасибо»: 12 раз
Поблагодарили: 1 раз в 1 постах
Спасибо за наводку! Всё заработало.

Для интересующихся:
При зашифровании - добавлять в recipientInfos ключ согласования и issuerAndSerialNumber для каждого получателя.
При расшифровании - найти свой ключ согласования в recipientInfos по своему issuerAndSerialNumber, после чего на нем расшифровать.

Отредактировано пользователем 18 сентября 2020 г. 20:20:50(UTC)  | Причина: Не указана

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.