logo Обзор КриптоПро NGate для защищённого доступа к корпоративным ресурсам
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline ReFLeXive  
#1 Оставлено : 7 августа 2019 г. 22:17:04(UTC)
ReFLeXive

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

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

Сказал(а) «Спасибо»: 2 раз
Здравствуйте.
Прошу сильно не пинать, т.к. являюсь новичком в теме КриптоПро. Досталось в наследство приложение - мессенджер, который работает с использованием КриптоПро.
В приложение можно добавлять сертификаты ЭЦП, выданные удостоверяющим центром - это является аккаунтом. Соответственно после ввода пароля существует возможность общаться с другими людьми, шифруя сообщения с помощью ЭЦП.
При входе в аккаунт происходит проверка пароля ЭЦП. Здесь ошибок не возникает. Таким образом Криптопро в этом приложении в каком то виде работает,т.к. пароль от ключа подходит. При создании чата должно происходить создание сессионных ключей, которые в дальнейшем используются для шифрования/дешифрования сообщений. Это я пока проверить не могу, т.к. сперва отображается список чатов.
Однако при попытке получить список чатов с зашифрованными сообщениями, падает при попытке дешифрования сессионного ключа:



На всякий случай вот код расшифровки

Вот так создаются сессионные ключи

Прошу прощения, если где то что то было не точно описано, т.к. пока не очень понимаю с какой стороны подходить к решению. Подскажите, пожалуйста, с чего вообще начать?
Offline Евгений Афанасьев  
#2 Оставлено : 8 августа 2019 г. 11:53:40(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 13 раз
Поблагодарили: 385 раз в 380 постах
Здравствуйте.
Возможно, проблема в unwrap() при расшифровании сессионного ключа.
Если используются закрытые/открытые ключи пользователей на алгоритме ГОСТ 2012, то нужны параметры шифрования с идентификатором CryptParamsSpec.OID_Gost28147_89_Rosstandart_TC26_Z_ParamSet, а не Verba0, который задается по умолчанию, если генерировать сессионный ключ с помощью:
Код:

final KeyGenerator keyGen = KeyGenerator.getInstance(CIPHER_ALG, JCSP.PROVIDER_NAME);
final SecretKey simm = keyGen.generateKey();

Чтобы был получен ключ с параметрами шифрования OID_Gost28147_89_Rosstandart_TC26_Z_ParamSet, нужно передать их в keyGen.init(...) (см. рук-ва программиста модуля шифрования и примеры).
Также эти параметры можно задать для cipher при расширфровании ключа:
Код:

Cipher cipher = Cipher.getInstance(CIPHER_ALG + CIPHER_KEY_ALG_PARAMS);
cipher.init(Cipher.UNWRAP_MODE, responderAgree);
key_ = (SecretKey) cipher.unwrap(wrap, null, Cipher.SECRET_KEY);

Если нужен низкоуровневый код, посмотрите пример PKCS7EnvEphTransport в пакете CMS_samples в samples-sources.jar в последнем дистрибутиве JCP.

Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
ReFLeXive оставлено 08.08.2019(UTC)
Offline ReFLeXive  
#3 Оставлено : 8 августа 2019 г. 22:18:20(UTC)
ReFLeXive

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

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

Сказал(а) «Спасибо»: 2 раз
Большое спасибо за ответ!
Автор: Евгений Афанасьев Перейти к цитате

Если используются закрытые/открытые ключи пользователей на алгоритме ГОСТ 2012, то нужны параметры шифрования с идентификатором CryptParamsSpec.OID_Gost28147_89_Rosstandart_TC26_Z_ParamSet, а не Verba0, который задается по умолчанию, если генерировать сессионный ключ с помощью:
Код:

final KeyGenerator keyGen = KeyGenerator.getInstance(CIPHER_ALG, JCSP.PROVIDER_NAME);
final SecretKey simm = keyGen.generateKey();


Чтобы был получен ключ с параметрами шифрования OID_Gost28147_89_Rosstandart_TC26_Z_ParamSet, нужно передать их в keyGen.init(...) (см. рук-ва программиста модуля шифрования и примеры).


Я посмотрел, приватный ключ сертификата пользователя закодирован с помощью алгоритма GOST3410DHEL. К тому же при создании сессионных ключей никаких доп параметров инициализации не задавалось... Фактически создание и дешифровка обратны друг другу с т.з. кода. Может ли быть проблема с самими ключами? Могли они измениться и поэтому не происходит дешифровка? Как то возможно проверить корректность ключей, которые у меня фигурируют при работе?

Автор: Евгений Афанасьев Перейти к цитате

Если нужен низкоуровневый код, посмотрите пример PKCS7EnvEphTransport в пакете CMS_samples в samples-sources.jar в последнем дистрибутиве JCP.


За пример спасибо, он очень похож на код из моего приложения. Видимо, руководствовались при разработке этим примером.
Offline Евгений Афанасьев  
#4 Оставлено : 9 августа 2019 г. 16:22:53(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 13 раз
Поблагодарили: 385 раз в 380 постах
Срок действия закрытого ключа не вышел (15 месяцев)? Проверить можно с помощью тестовых ключей, сертификаты можно выпустить в тестовом УЦ.

Отредактировано пользователем 9 августа 2019 г. 16:23:48(UTC)  | Причина: Не указана

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