Статус: Участник
Группы: Участники
Зарегистрирован: 28.11.2016(UTC) Сообщений: 19 Сказал(а) «Спасибо»: 7 раз
|
добрый день. пытаюсь по документу TK26TLS по приложению А.1 по приведенным там шестнадцатиричным значениям получить такой же client key exchange, чтобы убедиться, что я правильно использую CryptoAPI. получить ukm удалось, сходится. создать эфемерный ключ клиента вроде тоже (через CryptGenKey(... CALG_DH_GR3410_12_512_EPHEM, CRYPT_EXPORTABLE | CRYPT_PREGEN, ... ) и CryptSetKeyParam( ...KP_X...) ) вроде удалось получить ключ согласования. вопрос. можно ли получить ключ согласования в чистом виде, чтобы сравнить с приведенным листинге? насколько я понял нет, ключ согласования не экспортируется?
и второй вопрос. в листинге приведен в шестнадцатиричном виде premaster secret. как из него получить HCRYPTKEY, чтобы в дальнейшем выполнить экспорт на ключе согласования?
и правильно ли я понимаю, что premaster_secret создается алгоритмом CALG_TLS1_MASTER?
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,377 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 32 раз Поблагодарили: 706 раз в 614 постах
|
Работа с ключами в "чистом" виде крипторовайдером официально не поддерживается, но на форуме была тема с примером подобного использования. Только это оне очень просто. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 28.11.2016(UTC) Сообщений: 19 Сказал(а) «Спасибо»: 7 раз
|
добрый день. почитал эту ветку https://www.cryptopro.ru...t.aspx?g=posts&t=135ну и плюс cpdn. подскажите пожалуйста, правильно ли я понял последовательность создания master secret? //создаем контекст CryptAcquireContext(...PROV_GOST_2012_256, CRYPT_NEWKEYSET) //генерим premaster secret CryptGenKey(...CALG_TLS1_MASTER, CRYPT_EXPORTABLE, &key_session) //где-то здесь экспортировали premaster secret на ключе согласования и отправили серверу //подставляем client random CryptSetKeyParam( key_session, KP_CLIENT_RANDOM ... ) //подставляем server random CryptSetKeyParam( key_session, KP_SERVER_RANDOM ... ) //преобразуем premaster secret в master secret CryptSetKeyParam( key_session, KP_PREHASH, NULL, 0) после CryptSetKeyParam(key_session, KP_PREHASH...) в дескрипторе key_session мы уже имеем master secret? в этой последовательности вызовов ни каких важных шагов не пропущено?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 28.11.2016(UTC) Сообщений: 19 Сказал(а) «Спасибо»: 7 раз
|
есть еще вопрос вдогонку. подскажите, пожалуйста, как правильно из master secret получить комплект ключей для соединения? нашел на форуме и в cpdn два способа. первый через CryptDeriveKey c CALG_TLS1_ENC_KEY и CALG_TLS1_MAC_KEY в https://www.cryptopro.ru...t.aspx?g=posts&t=135и второй в http://cpdn.cryptopro.ru...ples_rfcconnections.html пункт 4 через PRF с последующим получением 144 байт ключевого материала. какой из них правильный? какой, например, используется внутри SSPI? судя по TK26TLS п.5.2 правильно делать вторым способом, в каких случаях тогда применяется первый? или внутри CryptDeriveKey CALG_TLS1_ENC_KEY/CALG_TLS1_MAC_KEY реализован второй способ?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 28.11.2016(UTC) Сообщений: 19 Сказал(а) «Спасибо»: 7 раз
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,377 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 32 раз Поблагодарили: 706 раз в 614 постах
|
Сейчас специалист в отпуске, ответить сможем не раньше чем через неделю. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 28.11.2016(UTC) Сообщений: 19 Сказал(а) «Спасибо»: 7 раз
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.11.2014(UTC) Сообщений: 27 Сказал(а) «Спасибо»: 1 раз Поблагодарили: 19 раз в 17 постах
|
Доброе утро! Рекомендуем использовать способ, описанный в https://www.cryptopro.ru/forum2/default.aspx?g=posts&t=135. Вы совершенно правы, внутри CryptDeriveKey уже реализована выработка значения PRF нужной длины (144 байта) и нарезание результата на соответствующие ключи. Поэтому при использовании данного варианта Вы сразу получите ключи шифрования и имитовставки, которые можно применять для защиты вложений, не связываясь в ключами в "чистом" виде. Отредактировано модератором 10 апреля 2017 г. 17:41:24(UTC)
| Причина: Не указана |
|
1 пользователь поблагодарил Сонина Лолита за этот пост.
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.11.2014(UTC) Сообщений: 27 Сказал(а) «Спасибо»: 1 раз Поблагодарили: 19 раз в 17 постах
|
Дополнительно хочется отметить, что в приведенном сообщении с форума описан алгоритм для работы в рамках сюит 2001 года. Для работы в сюитах 2012 года необходимо немного модифицировать пример: 1. Вызов CPSetKeyParam (hProv, hSessionKey, KP_PREHASH, NULL, 0); нужно заменить на DWORD prfAlgid = CALG_TLS1PRF_2012_256; CPSetKeyParam (hProv, hSessionKey, KP_PREHASH, (BYTE*)&prfAlgid, 0); 2. CALG_TLS1_MASTER_HASH требуется заменить на CALG_TLS1_MASTER_HASH_2012_256. |
|
1 пользователь поблагодарил Сонина Лолита за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 28.11.2016(UTC) Сообщений: 19 Сказал(а) «Спасибо»: 7 раз
|
вот за это уточнение отдельное спасибо) минус одна ошибка)
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close