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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline cryptoProUser  
#1 Оставлено : 28 декабря 2012 г. 10:15:15(UTC)
cryptoProUser

Статус: Новичок

Группы: Участники
Зарегистрирован: 28.12.2012(UTC)
Сообщений: 6
Российская Федерация

Добрый день.
Я пытаюсь зашифровать сообщение используя библиотеку JCP.
Проблема у меня возникает на этапе шифрования сессионного ключа публичным ключом(согласно http://tools.ietf.org/html/rfc4490, раздел 4.2.1).
Порядок моих действий таков :
1)Генерирую симметричный ключ
KeyGenerator keyGen = KeyGenerator.getInstance("GOST28147");
SecretKey symmetricKey = keyGen.generateKey();
2)создаю шифратор для шифрования сессионного ключа
Cipher cipher = Cipher.getInstance("GOST28147/PRO_EXPORT/NoPadding");
3)Получаю сертификат X509Certificate remoteCert
на вызове
cipher.init(Cipher.WRAP_MODE, remoteCert);
у меня возникает исключение java.security.InvalidKeyException: ru.CryptoPro.JCP.Key.a cannot be cast to ru.CryptoPro.Crypto.Key.b
Если вместо открытого ключа передавать закрытый то такого исключения не возникает.
Просьба помочь.
Offline Евгений Афанасьев  
#2 Оставлено : 28 декабря 2012 г. 12:10:48(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 710 раз в 671 постах
Здравствуйте.
Сессионный ключ надо шифровать на ключе согласования. Посмотрите пример SessionEncrypt в пакете userSamples в samples.jar.
Offline cryptoProUser  
#3 Оставлено : 28 декабря 2012 г. 12:15:07(UTC)
cryptoProUser

Статус: Новичок

Группы: Участники
Зарегистрирован: 28.12.2012(UTC)
Сообщений: 6
Российская Федерация

Я видел этот пример.
Но мне нужно использовать схему шифрования ключа транспорта, которая описана в RFC 4490 - http://tools.ietf.org/html/rfc4490, раздел 4.2.1
Структура называется GostR3410-KeyTransport, содержит сессионный ключ и шифруется открытым ключом ГОСТ Р 34.10-2001.
Я пишу клиент к уже существующей системе которая не использует ключ согласования.
С помощью библиотеки JCP возможно зашифровать сессионный ключ открытым ключом ?
Offline Евгений Афанасьев  
#4 Оставлено : 28 декабря 2012 г. 13:25:34(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 710 раз в 671 постах
Можно, но все равно скрыто произойдет выработка ключей согласования (шифрование возможно на секретном ключе или ключе согласования). При этом передать сертификат для зашифрования и закрытый ключ для расшифрования ключа можно. Попробуйте использовать Cipher.getInstance("GostTransport").
Например:

final KeyGenerator kg = KeyGenerator.getInstance("GOST28147");
final SecretKey key = kg.generateKey();

// Зашифровали секретный ключ.
Cipher cipher = Cipher.getInstance("GostTransport");
cipher.init(Cipher.WRAP_MODE, responderCert);
final byte[] wrap = cipher.wrap(key);

// Зашифровали данные на симметричном ключе
cipher = Cipher.getInstance("GOST28147");
cipher.init(Cipher.ENCRYPT_MODE, key, iv);
final byte[] encryptedData = cipher.doFinal(TEXT);

// ... Передали зашифрованный секретный ключ ...

cipher = Cipher.getInstance("GostTransport");

// Расшифруем симметричный ключ
cipher.init(Cipher.UNWRAP_MODE, responderPrivateKey);
final SecretKey key_ = (SecretKey)cipher.unwrap(wrap, null, Cipher.SECRET_KEY);

// Расшифруем данные на с помощью расшифрованного симм. ключа
cipher = Cipher.getInstance("GOST28147");
cipher.init(Cipher.DECRYPT_MODE, key_, iv);
final byte[] decr_ = cipher.doFinal(encr);

// Сравним результат и исходные данные
if (Arrays.equals(TEXT, decr_)) System.out.println("OK");

Похожий код в примере Encrypt в Crypt_samples, CMSSignAndEncrypt в CMS_samples (samples.jar).

Отредактировано пользователем 28 декабря 2012 г. 14:41:11(UTC)  | Причина: Не указана

Offline o.kozlyuk  
#5 Оставлено : 28 декабря 2012 г. 13:50:50(UTC)
o.kozlyuk

Статус: Новичок

Группы: Участники
Зарегистрирован: 28.12.2012(UTC)
Сообщений: 2
Мужчина
Российская Федерация
Откуда: Москва

<Удалено>
Все, прошу прощения, неправильно понял ответ avef.

Отредактировано пользователем 28 декабря 2012 г. 14:33:50(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#6 Оставлено : 28 декабря 2012 г. 14:37:38(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 710 раз в 671 постах
Раз речь про xml (сначала было ссылка на cms подпись), то jcpxml реализует алгоритм, который вы привели - urn:ietf:params:xml:ns:cpxmlsec:algorithms:transport-gost2001 как раз с помощью GostTransport. В таком случае рекомендую посмотреть пример CryptXML в xmlSign (samples.jar).
Offline cryptoProUser  
#7 Оставлено : 28 декабря 2012 г. 16:18:53(UTC)
cryptoProUser

Статус: Новичок

Группы: Участники
Зарегистрирован: 28.12.2012(UTC)
Сообщений: 6
Российская Федерация

Cipher.getInstance("GostTransport") решил проблему, спасибо.
Что касается CryptXML в xmlSign (samples.jar) то там GostTransport явно не используется поэтому вопрос и возник.

Подскажите еще пожалуйста насчет Key Derivation Algorithm urn:ietf:params:xml:ns:cpxmlsec:algorithms:dk-p-gostr3411.
Мне нужно его использовать согласно http://tools.ietf.org/ht...pxmldsig-04#section-7.2.
Однако при попытке создать SignatureMethod
signatureFactory.newSignatureMethod("urn:ietf:params:xml:ns:cpxmlsec:algorithms:dk-p-gostr3411", null);
возникает ошибка
Caused by: java.security.NoSuchAlgorithmException: unsupported algorithm
at ru.CryptoPro.JCPxml.dsig.internal.dom.DOMXMLSignatureFactory.newSignatureMethod(DOMXMLSignatureFactory.java:245)

Примеров для urn:ietf:params:xml:ns:cpxmlsec:algorithms:dk-p-gostr3411. я не нашел.
Offline Евгений Афанасьев  
#8 Оставлено : 28 декабря 2012 г. 16:27:03(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 710 раз в 671 постах
А что вы хотите сделать? Подписать?
Offline cryptoProUser  
#9 Оставлено : 28 декабря 2012 г. 16:31:19(UTC)
cryptoProUser

Статус: Новичок

Группы: Участники
Зарегистрирован: 28.12.2012(UTC)
Сообщений: 6
Российская Федерация

Да, я хочу сформировать для ws-security тэг DerivedKeyToken с использованием алгоритма urn:ietf:params:xml:ns:cpxmlsec:algorithms:dk-p-gostr3411
Offline cryptoProUser  
#10 Оставлено : 28 декабря 2012 г. 17:03:02(UTC)
cryptoProUser

Статус: Новичок

Группы: Участники
Зарегистрирован: 28.12.2012(UTC)
Сообщений: 6
Российская Федерация

Хотя, скорее всего я ошибаюсь.
С помощью urn:ietf:params:xml:ns:cpxmlsec:algorithms:dk-p-gostr3411 мне надо сгенерировать ключ на основе моего симметричного ключа.

Есть ли какой нибудь пример как на основе алгоритма urn:ietf:params:xml:ns:cpxmlsec:algorithms:dk-p-gostr3411 получить ключ из симметричного ключа для подписи и для шифрования ?

Используется следующий алгоритм только вместо P_SHA1 как я понимаю должен использоваться urn:ietf:params:xml:ns:cpxmlsec:algorithms:dk-p-gostr3411
You generate a symmetric key for temporary use.
You encrypt the symmetric key with the public key of the entity to whom you are sending the message. This creates an <EncryptedKey> element.
You can obtain the public key from an X.509 certificate contained in a request message from that entity. Or you can obtain it ahead of time.
You compute a new symmetric key from the original symmetric key, via the P_SHA1 algorithm.
This creates an <DerivedKeyToken> element that refers to the <EncryptedKey> element.
You use the new symmetric key to encrypt, sign, or both.
Notice that in contrast to the previous chapters, a single key can be used for both encryption and signing.
You include the <EncryptedKey> element and the <DerivedKeyToken> in the message.

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

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