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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline mxt  
#1 Оставлено : 22 августа 2012 г. 23:32:10(UTC)
mxt

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

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

Добрый день!
Хотел бы узнать как создать сессионный ключ на основе значения хеш функции, иными словами нужен аналог CryptDeriveKey (CSP). В JCA это вроде называется password based encryption. Как такое сделать в JCP? Спасибо.
Offline Евгений Афанасьев  
#2 Оставлено : 23 августа 2012 г. 1:03:42(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Здравствуйте.
Посмотрите примеры в samples_src.jar (/Crypt_samples, /userSamples/ClassicEncrypt), в них показано, как вырабатывается сессионный ключ.
Offline mxt  
#3 Оставлено : 24 августа 2012 г. 14:32:17(UTC)
mxt

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

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

Добрый день! Спасибо. Но примеры я конечно смотрел. Это немного не то. Есть серверное приложение (на СИ++ написанное), там ключ создает вызовом CryptDeriveKey на основе хеша пароля пользователя, на клиенте аналогично. Сейчас хочется иметь и джава клиент и использовать для выработки сессионого ключа хеш пароля без выработки дополнительных ключей согласования.
Offline Евгений Афанасьев  
#4 Оставлено : 24 августа 2012 г. 21:31:34(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Попробуйте следующую схему, хотя мы не рекомендуем ее использовать, т.к. она небезопасна:
Код:

// Вектор инициализации и исходное сообщение.
final byte[] iv = {1, 1, 1, 1, 1, 1, 1, 1};
final byte[] data = "Simple Text!".getBytes();
// 1. Получаете клиентский пароль и хешируете его - получаете 32 байта
byte[] clientPassword = "password".getBytes();
byte[] hashedPassword = MessageDigest.getInstance("GOST3411").digest(clientPassword);
// 2. Создаете сессионный ключ
CryptParamsSpec params = CryptParamsSpec.getInstance();
ru.CryptoPro.JCP.Key.SecretKeySpec spec = new ru.CryptoPro.JCP.Key.SecretKeySpec(hashedPassword, params);
SecretKey skey = new GostSecretKey(spec);
// 3. Шифруете сообщение.
Cipher cipher = Cipher.getInstance("GOST28147");
cipher.init(Cipher.ENCRYPT_MODE, skey, new IvParameterSpec(iv));
final byte[] encryptedtext = cipher.doFinal(data, 0, data.length);
// 4. Или расшифровываете.
cipher = Cipher.getInstance("GOST28147");
cipher.init(Cipher.DECRYPT_MODE, skey, new IvParameterSpec(iv));
final byte[] decryptedtext = cipher.doFinal(encryptedtext, 0, encryptedtext.length);
Offline mxt  
#5 Оставлено : 24 августа 2012 г. 23:22:38(UTC)
mxt

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

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

Спасибо. Попробую Ваш пример. Это просто у нас одна из политик (самая простая), которую надо реализовать на java клиенте, а так есть и другие в том числе с использованием сертификата :-).
Offline Kcrrrr  
#6 Оставлено : 30 декабря 2021 г. 10:06:45(UTC)
Kcrrrr

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

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

Здравствуйте! Имею примерно ту же задачу: необходимо повторить на клиенте ключ, сгенерированный на серверной стороне вызовом CryptDeriveKey из хэша. Пробую предложенный код, при вызове doFinal бросает исключение: java.lang.ClassCastException: ru.CryptoPro.Crypto.Key.GostSecretKey cannot be cast to ru.CryptoPro.JCSP.Key.GostSecretKey. При этом JCSP.KeyGostSecretKey, не имеет конструктора, принимающего ru.CryptoPro.JCP.Key.SecretKeySpec. Не подскажите, куда копать?
Offline Anocean  
#7 Оставлено : 15 июня 2023 г. 11:47:31(UTC)
Anocean

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

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

Сказал(а) «Спасибо»: 3 раз
Автор: Kcrrrr Перейти к цитате
Здравствуйте! Имею примерно ту же задачу: необходимо повторить на клиенте ключ, сгенерированный на серверной стороне вызовом CryptDeriveKey из хэша. Пробую предложенный код, при вызове doFinal бросает исключение: java.lang.ClassCastException: ru.CryptoPro.Crypto.Key.GostSecretKey cannot be cast to ru.CryptoPro.JCSP.Key.GostSecretKey. При этом JCSP.KeyGostSecretKey, не имеет конструктора, принимающего ru.CryptoPro.JCP.Key.SecretKeySpec. Не подскажите, куда копать?


Та же проблема. Удалось найти решение?

Offline Евгений Афанасьев  
#8 Оставлено : 16 июня 2023 г. 12:38:33(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Здравствуйте.
Смешаны провайдеры - Crypto из JCP-дистрибутива и JCSP из JCSP-дистрибутива. Ошибка где-то в передаче в getInstance() не того имени провайдера.
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
Anocean оставлено 26.07.2023(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.