Форум КриптоПро
»
Общие вопросы
»
Общие вопросы
»
Выгрузить ключ по "Transport-GOST2001"
Статус: Новичок
Группы: Участники
Зарегистрирован: 29.09.2017(UTC) Сообщений: 4 Откуда: Санкт-Петербург
|
Добрый день.
Есть такой вопрос: "Transport-GOST2001" - выгрузить ключ. В чём заключается проблема, как я понимаю: "Transport-GOST2001" - алгоритм обмена ключами с шифрованием сессионного ключа открытым ключом принимающей стороны. Но "CSP CryptoPRO" по предписанию ФСБ такой функционал не поддерживает (выгрузку ключа из CSP на открытом ключе гостовского сертификата). Однако же, необходимость такая есть и никуда от неё не деться.
Возможно я что-то не так понимаю относительно алгоритма выгрузки "Transport-GOST2001", разъясните, пожалуйста. Реализую на CryptoAPI. В ветке про JCP ответ был, там есть специальный класс реализующий этот транспорт и всё работает, но что внутри написано - загадка.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 29.09.2017(UTC) Сообщений: 4 Откуда: Санкт-Петербург
|
Нашёл структуру блоба передаваемого как <CyperValue> в <KeyInfo> для алгоритма шифрования ключа "Transport-GOST2001": [4.2.1. Key Transport Algorithm Based on GOST R 34.10-94/2001 Public Keys](https://tools.ietf.org/html/rfc4490#section-4.2) ``` GostR3410-KeyTransport ::= SEQUENCE { sessionEncryptedKey Gost28147-89-EncryptedKey, transportParameters [0] IMPLICIT GostR3410-TransportParameters OPTIONAL }
GostR3410-TransportParameters ::= SEQUENCE { encryptionParamSet OBJECT IDENTIFIER, ephemeralPublicKey [0] IMPLICIT SubjectPublicKeyInfo OPTIONAL, ukm OCTET STRING } ``` Из структуры следует, что сессионный ключ шифруется не одним только открытым ключом получателя, а в процессе так же участвует и эфемерный ключь, т.е., судя по всему: из ключа получателя и эфемерного ключа генерируется пара `Диффи-Хелмана` и уже на ней-то и выгружается сессионный ключ.
Отсюда возникает следующий вопрос: должен ли я этот блоб формировать вручную, или же он всё-таки является результатом вызова `CryptExportKey`?
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 29.09.2017(UTC) Сообщений: 4 Откуда: Санкт-Петербург
|
В ходе прочтения ветки форума https://www.cryptopro.ru...aspx?g=posts&t=12370пришёл к выводу, что `CALG_PRO_EXPORT` формирует структуру данных описанную постом выше (GostR3410-KeyTransport). Алгоритм действий следующий: 1) Генерируем ключ `CALG_DH_EL_EPHEM` 2) На нём импортируем публичный ключ получателя 3) Получившемуся в результате ключу согласования указываем алгорим `CALG_PRO_EXPORT` (CryptoPro Key Wrap) 4) На ключе согласования экспортируем сессионный ключ И в результате получившийся блоб должен содержать структуру `GostR3410-KeyTransport`, где указаны: * зашифрованный сессионный ключ * открытый ключ сгенерированной пары `CALG_DH_EL_EPHEM` * и UKM эфемерного ключа Верно ли это? И, если верно, возникает вопрос: как из экспортированного блоба восстановить сессионный ключ? логика подсказывает, что для этого следует извлечь из блоба открытый ключ эфемерного ключа, смешать его с закрытым ключом получателя, получившемуся миксу установить UKM из блоба и на этом миксе импортировать зашифрованный ключ из блоба. Но так же логика подсказывает, что если блоб был сгенерирован целиком CryptExportKey-ем, то и на принимающей стороне руками его разбирать не нужно, тоже должен быть какой-то алгоритм... Но без какого-лиюбо ключа согласования он не импортируется, хотя всё необходимое лежит уже внутри..
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 29.09.2017(UTC) Сообщений: 4 Откуда: Санкт-Петербург
|
Дальнейшие исследования показали, что `GostR3410-KeyTransport` не имеет ничего общего со структурой SimpleBlob генерируемой CryptExportKey c алгоритмом ключа шифрования `CALG_PRO_EXPORT`. Однако, имеется вот такой пост на форуме https://www.cryptopro.ru...ts&m=78996#post78996где предлагается генерировать/парсить транспортную структуру самостоятельно, используя SimpleBlob с выгруженным сессионным ключом и PublicKeyBlob эфемерного ключа на котором был построен парный ключ для выгрузки сессионного. В посте говорится, что в этих блобах достаточно информации для построения, но вот незадача: export PUBLICKEYBLOB-а ключа сгенерированного по алгоритму `CALG_DH_EL_EPHEM` не возможен - возвращается "System Error Code: -2146893813"(Ключ не может быть использован в указанном состоянии). Ситуация мне видится патовой. Но ведь как-то же люди генерируют эти транспортные структуры. ПС: если разрешится ситуация с выгрузкой публичного ключа - останется чисто техническая деталь - как понять какого размера эти `encryptionParamSet OBJECT IDENTIFIER` и прочие OID-ы(ASN-структуры).
|
|
|
|
Форум КриптоПро
»
Общие вопросы
»
Общие вопросы
»
Выгрузить ключ по "Transport-GOST2001"
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close