Atom Лента - Форум КриптоПро - Тема:Выгрузить ключ по "Transport-GOST2001" - 10Форум КриптоПро - Atom Лентаurn:https:--www-cryptopro-ru:AtomLenta:ForumKriptoPro:Tema:Vygruzit'kljuchpo"Transport-GOST2001"-10:1Copyright 2024 Форум КриптоПро2024-03-29T17:43:51Zhttps://www.cryptopro.ru/forum2/Images/YAFLogo.pngForum Adminhttps://www.cryptopro.ruforum@cryptopro.rubeerbisGhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=46529&name=beerbisGbeerbisGhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=46529&name=beerbisGbeerbisGhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=46529&name=beerbisGbeerbisGhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=46529&name=beerbisGbeerbisGhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=46529&name=beerbisGYetAnotherForum.NETurn:https:--www-cryptopro-ru:ftPosts:st1:meid84234:1Выгрузить ключ по "Transport-GOST2001"<table class="content postContainer_Alt" width="100%"><tr><td>Дальнейшие исследования показали, что `GostR3410-KeyTransport` не имеет ничего общего со структурой SimpleBlob генерируемой CryptExportKey c алгоритмом ключа шифрования `CALG_PRO_EXPORT`.<br /><br />Однако, имеется вот такой пост на форуме <a rel="nofollow" href="https://www.cryptopro.ru/forum2/default.aspx?g=posts&m=78996#post78996" title="https://www.cryptopro.ru/forum2/default.aspx?g=posts&m=78996#post78996">https://www.cryptopro.ru...ts&m=78996#post78996</a><br />где предлагается генерировать/парсить транспортную структуру самостоятельно, используя SimpleBlob с выгруженным сессионным ключом<br />и PublicKeyBlob эфемерного ключа на котором был построен парный ключ для выгрузки сессионного. В посте говорится, что в этих блобах достаточно информации для построения,<br />но вот незадача: export PUBLICKEYBLOB-а ключа сгенерированного по алгоритму `CALG_DH_EL_EPHEM` не возможен - <br />возвращается "System Error Code: -2146893813"(Ключ не может быть использован в указанном состоянии).<br /><br />Ситуация мне видится патовой. Но ведь как-то же люди генерируют эти транспортные структуры.<br /><br />ПС: если разрешится ситуация с выгрузкой публичного ключа - останется чисто техническая деталь - как понять какого размера эти <br /> `encryptionParamSet OBJECT IDENTIFIER` и прочие OID-ы(ASN-структуры).</td></tr></table>2017-10-05T14:56:41+03:002017-10-05T14:56:41+03:00beerbisG<table class="content postContainer_Alt" width="100%"><tr><td>Дальнейшие исследования показали, что `GostR3410-KeyTransport` не имеет ничего общего со структурой SimpleBlob генерируемой CryptExportKey c алгоритмом ключа шифрования `CALG_PRO_EXPORT`.<br /><br />Однако, имеется вот такой пост на форуме <a rel="nofollow" href="https://www.cryptopro.ru/forum2/default.aspx?g=posts&m=78996#post78996" title="https://www.cryptopro.ru/forum2/default.aspx?g=posts&m=78996#post78996">https://www.cryptopro.ru...ts&m=78996#post78996</a><br />где предлагается генерировать/парсить транспортную структуру самостоятельно, используя SimpleBlob с выгруженным сессионным ключом<br />и PublicKeyBlob эфемерного ключа на котором был построен парный ключ для выгрузки сессионного. В посте говорится, что в этих блобах достаточно информации для построения,<br />но вот незадача: export PUBLICKEYBLOB-а ключа сгенерированного по алгоритму `CALG_DH_EL_EPHEM` не возможен - <br />возвращается "System Error Code: -2146893813"(Ключ не может быть использован в указанном состоянии).<br /><br />Ситуация мне видится патовой. Но ведь как-то же люди генерируют эти транспортные структуры.<br /><br />ПС: если разрешится ситуация с выгрузкой публичного ключа - останется чисто техническая деталь - как понять какого размера эти <br /> `encryptionParamSet OBJECT IDENTIFIER` и прочие OID-ы(ASN-структуры).</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid84202:1Выгрузить ключ по "Transport-GOST2001"<table class="content postContainer" width="100%"><tr><td>В ходе прочтения ветки форума <a rel="nofollow" href="https://www.cryptopro.ru/forum2/default.aspx?g=posts&t=12370" title="https://www.cryptopro.ru/forum2/default.aspx?g=posts&t=12370">https://www.cryptopro.ru...aspx?g=posts&t=12370</a><br />пришёл к выводу, что `CALG_PRO_EXPORT` формирует структуру данных описанную постом выше (GostR3410-KeyTransport).<br /><br />Алгоритм действий следующий:<br />1) Генерируем ключ `CALG_DH_EL_EPHEM`<br />2) На нём импортируем публичный ключ получателя<br />3) Получившемуся в результате ключу согласования указываем алгорим `CALG_PRO_EXPORT` (CryptoPro Key Wrap)<br />4) На ключе согласования экспортируем сессионный ключ<br /><br />И в результате получившийся блоб должен содержать структуру `GostR3410-KeyTransport`, где указаны:<br />* зашифрованный сессионный ключ<br />* открытый ключ сгенерированной пары `CALG_DH_EL_EPHEM`<br />* и UKM эфемерного ключа<br /><br />Верно ли это?<br />И, если верно, возникает вопрос: как из экспортированного блоба восстановить сессионный ключ?<br />логика подсказывает, что для этого следует извлечь из блоба открытый ключ эфемерного ключа, смешать его с закрытым <br />ключом получателя, получившемуся миксу установить UKM из блоба и на этом миксе импортировать зашифрованный ключ из блоба.<br />Но так же логика подсказывает, что если блоб был сгенерирован целиком CryptExportKey-ем, то и на принимающей стороне <br />руками его разбирать не нужно, тоже должен быть какой-то алгоритм... Но без какого-лиюбо ключа согласования он не импортируется,<br />хотя всё необходимое лежит уже внутри..</td></tr></table>2017-10-04T17:40:16+03:002017-10-04T17:40:16+03:00beerbisG<table class="content postContainer" width="100%"><tr><td>В ходе прочтения ветки форума <a rel="nofollow" href="https://www.cryptopro.ru/forum2/default.aspx?g=posts&t=12370" title="https://www.cryptopro.ru/forum2/default.aspx?g=posts&t=12370">https://www.cryptopro.ru...aspx?g=posts&t=12370</a><br />пришёл к выводу, что `CALG_PRO_EXPORT` формирует структуру данных описанную постом выше (GostR3410-KeyTransport).<br /><br />Алгоритм действий следующий:<br />1) Генерируем ключ `CALG_DH_EL_EPHEM`<br />2) На нём импортируем публичный ключ получателя<br />3) Получившемуся в результате ключу согласования указываем алгорим `CALG_PRO_EXPORT` (CryptoPro Key Wrap)<br />4) На ключе согласования экспортируем сессионный ключ<br /><br />И в результате получившийся блоб должен содержать структуру `GostR3410-KeyTransport`, где указаны:<br />* зашифрованный сессионный ключ<br />* открытый ключ сгенерированной пары `CALG_DH_EL_EPHEM`<br />* и UKM эфемерного ключа<br /><br />Верно ли это?<br />И, если верно, возникает вопрос: как из экспортированного блоба восстановить сессионный ключ?<br />логика подсказывает, что для этого следует извлечь из блоба открытый ключ эфемерного ключа, смешать его с закрытым <br />ключом получателя, получившемуся миксу установить UKM из блоба и на этом миксе импортировать зашифрованный ключ из блоба.<br />Но так же логика подсказывает, что если блоб был сгенерирован целиком CryptExportKey-ем, то и на принимающей стороне <br />руками его разбирать не нужно, тоже должен быть какой-то алгоритм... Но без какого-лиюбо ключа согласования он не импортируется,<br />хотя всё необходимое лежит уже внутри..</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid84137:1Выгрузить ключ по "Transport-GOST2001"<table class="content postContainer_Alt" width="100%"><tr><td>Нашёл структуру блоба передаваемого как <CyperValue> в <KeyInfo> для алгоритма шифрования ключа "Transport-GOST2001":<br />[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)<br />```<br /> GostR3410-KeyTransport ::= SEQUENCE {<br /> sessionEncryptedKey Gost28147-89-EncryptedKey,<br /> transportParameters<br /> [0] IMPLICIT GostR3410-TransportParameters OPTIONAL<br /> }<br /><br /> GostR3410-TransportParameters ::= SEQUENCE {<br /> encryptionParamSet OBJECT IDENTIFIER,<br /> ephemeralPublicKey [0] IMPLICIT SubjectPublicKeyInfo OPTIONAL,<br /> ukm OCTET STRING<br /> }<br />```<br />Из структуры следует, что сессионный ключ шифруется не одним только открытым ключом получателя, а в процессе так же участвует и эфемерный ключь, т.е., <br />судя по всему: из ключа получателя и эфемерного ключа генерируется пара `Диффи-Хелмана` и уже на ней-то и выгружается сессионный ключ.<br /><br />Отсюда возникает следующий вопрос: должен ли я этот блоб формировать вручную, или же он всё-таки является результатом вызова `CryptExportKey`?</td></tr></table>2017-10-04T10:02:03+03:002017-10-04T10:02:03+03:00beerbisG<table class="content postContainer_Alt" width="100%"><tr><td>Нашёл структуру блоба передаваемого как <CyperValue> в <KeyInfo> для алгоритма шифрования ключа "Transport-GOST2001":<br />[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)<br />```<br /> GostR3410-KeyTransport ::= SEQUENCE {<br /> sessionEncryptedKey Gost28147-89-EncryptedKey,<br /> transportParameters<br /> [0] IMPLICIT GostR3410-TransportParameters OPTIONAL<br /> }<br /><br /> GostR3410-TransportParameters ::= SEQUENCE {<br /> encryptionParamSet OBJECT IDENTIFIER,<br /> ephemeralPublicKey [0] IMPLICIT SubjectPublicKeyInfo OPTIONAL,<br /> ukm OCTET STRING<br /> }<br />```<br />Из структуры следует, что сессионный ключ шифруется не одним только открытым ключом получателя, а в процессе так же участвует и эфемерный ключь, т.е., <br />судя по всему: из ключа получателя и эфемерного ключа генерируется пара `Диффи-Хелмана` и уже на ней-то и выгружается сессионный ключ.<br /><br />Отсюда возникает следующий вопрос: должен ли я этот блоб формировать вручную, или же он всё-таки является результатом вызова `CryptExportKey`?</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid84031:1Выгрузить ключ по "Transport-GOST2001"<table class="content postContainer" width="100%"><tr><td>Добрый день.<br /><br />Есть такой вопрос: "Transport-GOST2001" - выгрузить ключ. <br />В чём заключается проблема, как я понимаю: "Transport-GOST2001" - алгоритм обмена ключами с шифрованием сессионного ключа открытым ключом принимающей стороны. Но "CSP CryptoPRO" по предписанию ФСБ такой функционал не поддерживает (выгрузку ключа из CSP на открытом ключе гостовского сертификата). Однако же, необходимость такая есть и никуда от неё не деться.<br /><br />Возможно я что-то не так понимаю относительно алгоритма выгрузки "Transport-GOST2001", разъясните, пожалуйста. <br />Реализую на CryptoAPI. В ветке про JCP ответ был, там есть специальный класс реализующий этот транспорт и всё работает, но что внутри написано - загадка.</td></tr></table>2017-10-02T10:31:52+03:002017-10-02T10:31:52+03:00beerbisG<table class="content postContainer" width="100%"><tr><td>Добрый день.<br /><br />Есть такой вопрос: "Transport-GOST2001" - выгрузить ключ. <br />В чём заключается проблема, как я понимаю: "Transport-GOST2001" - алгоритм обмена ключами с шифрованием сессионного ключа открытым ключом принимающей стороны. Но "CSP CryptoPRO" по предписанию ФСБ такой функционал не поддерживает (выгрузку ключа из CSP на открытом ключе гостовского сертификата). Однако же, необходимость такая есть и никуда от неё не деться.<br /><br />Возможно я что-то не так понимаю относительно алгоритма выгрузки "Transport-GOST2001", разъясните, пожалуйста. <br />Реализую на CryptoAPI. В ветке про JCP ответ был, там есть специальный класс реализующий этот транспорт и всё работает, но что внутри написано - загадка.</td></tr></table>