Статус: Новичок
Группы: Участники
Зарегистрирован: 14.02.2020(UTC) Сообщений: 6  Откуда: Санкт-Петербург Сказал(а) «Спасибо»: 2 раз
|
Доброго дня Столкнулись с такой проблемой. Шифруем данные через jcp-2.0.40502 на сертификат получателя. Алгоритм в сертификате 2012-256, но в нем указаны нестандартные параметры шифрования 1.2.643.2.2.35.1 Ключевая пара на нашей стороне создана с параметрами 1.2.643.2.2.36.0 (настройка по умолчанию в панели управления jcp) В результате вылетает исключение Код:Caused by: java.security.InvalidKeyException: Parameters mismatch
at ru.CryptoPro.JCP.Key.PrivateKeySpec.doDHPhase(Unknown Source)
at ru.CryptoPro.Crypto.Key.KeyAgreement.engineDoPhase(Unknown Source)
at javax.crypto.KeyAgreement.doPhase(KeyAgreement.java:567)
Если мы создаем нашу ключевую пару с параметрами такими же как в сертификате, то шифрует нормально. Но тогда, как и следовало ожидать, перестает шифровать на все остальные сертификаты. В связи с этим есть 2 вопроса 1) это был сертификат выпущен некорректно или это проблема в jcp при проверке на совпадение параметров? 2) если все же проверка работает как и задумано, то в принципе мы могли бы генерировать контейнер и с нужными параметрами, но в таком случае непонятно как этот oid получить из сертификата. В примерах от jcp ничего похожего нет.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Здравствуйте. Как шифруете в адрес получателя? С помощью эфемерного ключа? |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 14.02.2020(UTC) Сообщений: 6  Откуда: Санкт-Петербург Сказал(а) «Спасибо»: 2 раз
|
Доброго дня. Автор: Евгений Афанасьев  Как шифруете в адрес получателя? С помощью эфемерного ключа? да, именно так Собственно вот кусок кода Код:
@Override
public byte[] encrypt(byte[] data, X509Certificate recipientCert)
throws EncryptionException {
Log.info("Шифрование данных начато");
try {
PublicKey recipientPublicKey = recipientCert.getPublicKey();
далее мы читаем из HDImageStore заранее сгенерированную ключевую пару с нужным алгоритмом, но эта пара сгенерирована с параметрами по умолчанию в панели управления jcp и они не такие же как в сертификате получателя Код:
KeyPair senderKeyPair = getEncryptSenderKeyPair(recipientPublicKey.getAlgorithm());
Log.info("Загружена ключевая пара отправителя");
// выработка ключа согласования отправителем
KeyAgreement senderKeyAgreement = KeyAgreement.getInstance(senderKeyPair.getPublic().getAlgorithm(), CryptoProvider.PROVIDER_NAME);
senderKeyAgreement.init(senderKeyPair.getPrivate(), new IvParameterSpec(sv), null);
senderKeyAgreement.doPhase(recipientPublicKey, true);
вот на предыдущей строке и вылетает исключение о несовпадении параметров Код:
Log.info("Выработан ключ согласования");
SecretKey senderSecret = senderKeyAgreement.generateSecret(CryptoProvider.GOST_CIPHER_NAME);
KeyGenerator kg = KeyGenerator.getInstance(CryptoProvider.GOST_CIPHER_NAME, CryptoProvider.PROVIDER_NAME);
SecretKey symmKey = kg.generateKey();
Log.info("Выработан симметричный ключ");
// Зашифрование текста на симметричном ключе.
Cipher cipher = Cipher.getInstance(CIPHER_MODE);
cipher.init(Cipher.ENCRYPT_MODE, symmKey, (SecureRandom) null);
final byte[] iv = cipher.getIV();
final byte[] encryptedData = cipher.doFinal(data, 0, data.length);
...
}
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
getEncryptSenderKeyPair(recipientPublicKey.getAlgorithm()) принимает всего лишь алгоритм, а надо ещё и параметры ключа получателя. То есть нужны все параметры ключа, чтобы сделать подобную пару, так как параметры сторон должны совпадать. В samples есть примеры, поищите по словам recipient или wrap unwrap в пакете cms_samples. Отредактировано пользователем 11 марта 2020 г. 18:20:38(UTC)
| Причина: Не указана |
|
 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
idzol оставлено 12.03.2020(UTC)
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 14.02.2020(UTC) Сообщений: 6  Откуда: Санкт-Петербург Сказал(а) «Спасибо»: 2 раз
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close