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

Уведомление

Icon
Error

4 Страницы123>»
Опции
К последнему сообщению К первому непрочитанному
Offline s_Vace  
#1 Оставлено : 19 марта 2014 г. 16:29:31(UTC)
s_Vace

Статус: Участник

Группы: Участники
Зарегистрирован: 05.03.2014(UTC)
Сообщений: 16

Поставил в этот образец свои сертификаты отправителя и получателя, ошибка при компиляции следующая:

19.03.2014 15:45:37 ru.CryptoPro.JCP.tools.Starter check
INFO: Loading JCP 1.0.54 36641
19.03.2014 15:45:38 ru.CryptoPro.JCP.tools.Starter check
INFO: JCP loaded.
Exception in thread "main" java.security.InvalidKeyException: Несоответствие параметров
at ru.CryptoPro.JCP.Key.PrivateKeySpec.doDHPhase(Unknown Source)
at ru.CryptoPro.Crypto.Key.KeyAgreement.engineDoPhase(Unknown Source)
at javax.crypto.KeyAgreement.doPhase(DashoA13*..)
at CMS_samples.CMSSignAndEncrypt.main(CMSSignAndEncrypt.java:189)

Вылетает на этой строчке:
senderKeyAgree.doPhase(responderPublic, true);

в чем проблема?

в документации написано:
Следует помнить, что параметры хеширования и ЭП этого ключа должны совпадать с соответствующими параметрами поданного на инициализацию закрытого ключа.

Как мне узнать какие именно параметры не совпадают?
Offline Евгений Афанасьев  
#2 Оставлено : 19 марта 2014 г. 17:57:49(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Например:
1) можно открыть свой сертификат ключа подписи и получателя, посмотреть "Состав" (алгоритм открытого ключа, использование ключа)
2) выбрать контейнер в панели CSP и выполнить "Протестировать..."
3) в Java-коде привести к GostPublicKey и GostExchPrivateKey переменные типов PublicKey и PrivateKey, посмотреть параметры подписи, хеширования и шифрования

Отредактировано пользователем 19 марта 2014 г. 17:58:30(UTC)  | Причина: Не указана

Offline s_Vace  
#3 Оставлено : 20 марта 2014 г. 14:30:59(UTC)
s_Vace

Статус: Участник

Группы: Участники
Зарегистрирован: 05.03.2014(UTC)
Сообщений: 16

Спасибо за ответ.

по первому пункту:
Сверил. Алгоритм открытого ключа одинаковый.
Использование у моего сертификата:
Digital Signature
Non Repudiation
Key Encipherment

у сертификата получателя:
Digital Signature
Non Repudiation
Key Encipherment
Data Encipherment
Key Agreement

по второму пункту - я не нашел в JCP control pane такой функции...

По третьему пункту:
System.out.println(recipientPublic.getAlgorithm());
System.out.println(senderKey.getAlgorithm());
System.out.println(recipientPublic.toString());
System.out.println(senderKey.toString());
дало
GOST3410
GOST3410DH
ru.CryptoPro.JCP.Key.GostPublicKey
CryptoPro Gost Exchange PrivateKey with parameters:1.2.643.2.2.98

как посмотреть посмотреть параметры подписи, хеширования и шифрования?
таких методов у GostPublicKey и GostExchPrivateKey я не нашел.

Похоже и в самом деле параметры разнятся.
Что я делаю не так? в cryptcp всё работало..

П.с. я сейчас разбираюсь с образцом PKCS7Env
П.п.с. Сертификат получателя я загружаю не из контейнера, а из хранилища сертификатов.
Offline s_Vace  
#4 Оставлено : 20 марта 2014 г. 14:39:36(UTC)
s_Vace

Статус: Участник

Группы: Участники
Зарегистрирован: 05.03.2014(UTC)
Сообщений: 16

Попробую запросить сертификат для себя с возможностью Data Encipherment, но странно, почему вылетает на строке, где я подставляю открытый ключ получателя:
senderKeyAgree.doPhase(recipientPublic, true);
Offline Евгений Афанасьев  
#5 Оставлено : 20 марта 2014 г. 14:56:38(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Автор: s_Vace Перейти к цитате

по второму пункту - я не нашел в JCP control pane такой функции...


Панель CSP, а не JCP.
Полагаю, в JCP более жесткая проверка параметров.

По поводу параметров в java-коде - примерно так можно посмотреть:

Код:

GostPrivateKey g_prk = (GostPrivateKey)privateKey;
GostPublicKey g_pbk = (GostPublicKey)publicKeyFromCert;

PrivateKeySpec prk_spec = (PrivateKeySpec) g_prk.getSpec();
PublicKeySpec  pbk_spec = (PublicKeySpec) g_pbk.getSpec();

AlgIdInterface prk_alg = (AlgIdInterface) prk_spec.getParams();
AlgIdInterface pbk_alg = (AlgIdInterface) pbk_spec.getParams();


В prk_alg и pbk_alg можно увидеть параметры с помощью getSignParams(), getDigestParams() и getCryptParams().

Отредактировано пользователем 20 марта 2014 г. 15:00:26(UTC)  | Причина: Не указана

Offline s_Vace  
#6 Оставлено : 20 марта 2014 г. 15:24:22(UTC)
s_Vace

Статус: Участник

Группы: Участники
Зарегистрирован: 05.03.2014(UTC)
Сообщений: 16

private------------
ru.CryptoPro.JCP.params.AlgIdSpec: 1.2.643.2.2.98
ru.CryptoPro.JCP.params.h: 1.2.643.2.2.36.0
ru.CryptoPro.JCP.params.DigestParamsSpec: 1.2.643.2.2.30.1
ru.CryptoPro.JCP.params.CryptParamsSpec: 1.2.643.2.2.31.1
public--------------
ru.CryptoPro.JCP.params.AlgIdSpec: 1.2.643.2.2.19
ru.CryptoPro.JCP.params.EllipticParamsSpec: 1.2.643.2.2.35.1
ru.CryptoPro.JCP.params.DigestParamsSpec: 1.2.643.2.2.30.1
ru.CryptoPro.JCP.params.CryptParamsSpec: 1.2.643.2.2.31.1

Вы были правы. AlgIdSpec разнится.
запрос на свой сертификат я создавал из JCP control pane с настройками по умолчанию. Правильно ли я понимаю, что мне надо изменить параметр AlgIdSpec так, чтобы он был равен параметру публичного ключа?
Offline Евгений Афанасьев  
#7 Оставлено : 20 марта 2014 г. 16:01:11(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Автор: s_Vace Перейти к цитате

private------------
ru.CryptoPro.JCP.params.AlgIdSpec: 1.2.643.2.2.98
ru.CryptoPro.JCP.params.h: 1.2.643.2.2.36.0
ru.CryptoPro.JCP.params.DigestParamsSpec: 1.2.643.2.2.30.1
ru.CryptoPro.JCP.params.CryptParamsSpec: 1.2.643.2.2.31.1
public--------------
ru.CryptoPro.JCP.params.AlgIdSpec: 1.2.643.2.2.19
ru.CryptoPro.JCP.params.EllipticParamsSpec: 1.2.643.2.2.35.1
ru.CryptoPro.JCP.params.DigestParamsSpec: 1.2.643.2.2.30.1
ru.CryptoPro.JCP.params.CryptParamsSpec: 1.2.643.2.2.31.1

Вы были правы. AlgIdSpec разнится.
запрос на свой сертификат я создавал из JCP control pane с настройками по умолчанию. Правильно ли я понимаю, что мне надо изменить параметр AlgIdSpec так, чтобы он был равен параметру публичного ключа?


Нужно, чтобы открытый ключ содержал идентичный закрытому ключу параметр - 1.2.643.2.2.36.0. Если public - из вашего сертификата, то нужно создать контейнер с ключом обмена (exchange).

Отредактировано пользователем 20 марта 2014 г. 16:01:41(UTC)  | Причина: Не указана

Offline s_Vace  
#8 Оставлено : 20 марта 2014 г. 16:18:23(UTC)
s_Vace

Статус: Участник

Группы: Участники
Зарегистрирован: 05.03.2014(UTC)
Сообщений: 16

Немного уточню - открытый ключ, параметры которого я смотрел - это ключ получателя.
А мои закрытый и открытый ключ как раз содержат имеют этот параметр 1.2.643.2.2.36.0
Получается, мне необходимо, чтобы у моего закрытого ключа был параметр ru.CryptoPro.JCP.params.h: 1.2.643.2.2.35.1

Как это сделать?

Попробую создать контейнер как Signature.
И запросить из него сертификат.
Offline Евгений Афанасьев  
#9 Оставлено : 20 марта 2014 г. 17:17:18(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
ключ должен быть AT_EXCHANGE. Вы уверены, что у вас правильный сертификат получателя?
Offline s_Vace  
#10 Оставлено : 20 марта 2014 г. 17:40:22(UTC)
s_Vace

Статус: Участник

Группы: Участники
Зарегистрирован: 05.03.2014(UTC)
Сообщений: 16

Да... Других нет (кроме CA-сертификатов).
Да и cryptcp с этими сертификатами работал.

Программа компилируется, если я подставляю свой публичный и свой приватный ключи в инициализацию согласования. Но расшифровать на удаленной стороне, понятно, не могут.
Тем не менее, в техподдержке там мне ответили:
"При подписывании файла, как уже говорилось ранее, используется только Ваш сертификат, а именно его закрытая часть, которая осталась у Вас при генерации запроса."
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (5)
4 Страницы123>»
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.