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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline beerbisG  
#1 Оставлено : 2 октября 2017 г. 10:31:52(UTC)
beerbisG

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

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

Добрый день.

Есть такой вопрос: "Transport-GOST2001" - выгрузить ключ.
В чём заключается проблема, как я понимаю: "Transport-GOST2001" - алгоритм обмена ключами с шифрованием сессионного ключа открытым ключом принимающей стороны. Но "CSP CryptoPRO" по предписанию ФСБ такой функционал не поддерживает (выгрузку ключа из CSP на открытом ключе гостовского сертификата). Однако же, необходимость такая есть и никуда от неё не деться.

Возможно я что-то не так понимаю относительно алгоритма выгрузки "Transport-GOST2001", разъясните, пожалуйста.
Реализую на CryptoAPI. В ветке про JCP ответ был, там есть специальный класс реализующий этот транспорт и всё работает, но что внутри написано - загадка.
Offline beerbisG  
#2 Оставлено : 4 октября 2017 г. 10:02:03(UTC)
beerbisG

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

Группы: Участники
Зарегистрирован: 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`?
Offline beerbisG  
#3 Оставлено : 4 октября 2017 г. 17:40:16(UTC)
beerbisG

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

Группы: Участники
Зарегистрирован: 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-ем, то и на принимающей стороне
руками его разбирать не нужно, тоже должен быть какой-то алгоритм... Но без какого-лиюбо ключа согласования он не импортируется,
хотя всё необходимое лежит уже внутри..
Offline beerbisG  
#4 Оставлено : 5 октября 2017 г. 14:56:41(UTC)
beerbisG

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

Группы: Участники
Зарегистрирован: 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-структуры).
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.