В прошлой части я разбирался с транспортным ключевым контейнером от КриптоПро (он же PFX, PKCS12, P12). В этой статье пойдёт речь о собственном формате ключевого контейнера КриптоПро (те самые 6 файлов .key)
Вообще, тема данной статьи не нова. Ещё в далёком 2016 году @shukan написал статью, в которой он предоставил программу на C, которая вытаскивала ключ для ГОСТ 34.10-2001. Чуть позже, благодаря сообществу, появилась версия и для ГОСТ 34.10-2012. Однако, пробуя запустить все эти утилиты для контейнера ГОСТ 34.10-2012 512 бит, сгенерированного в КриптоПро CSP 5.0, утилиты выдавали ошибку.
Как там всё устроено?
Файл masks.key
Содержит в себе три Octet String, которые в свою очередь являются маской ключа (32 байта для 256 бит, 64 для 512), солью для деривации пароля и контрольной суммой маски соответственно.
Файл primary.key
Содержит зашифрованный приватный ключ (32 байта для 256 бит, 64 для 512), который после расшифровки надо разделить по модулю на поле Q эллиптической кривой ключа.
Файл header.key
Содержит всю информацию о контейнере: Сертификат, свойства ключа, параметры эллиптической кривой и алгоритма хэширования, первые 8 байт публичного ключа, а также контрольные суммы.
Получаем приватный ключ
Для получения приватного ключа необходимо выполнить следующие шаги:
Получение ключа хранения с помощью CPKDF (CryptoPro Key Derivation Function) в которую передаётся пароль и соль из файла masks.key.
Расшифровка основного ключа с помощью ГОСТ 28147-89 (Магма) в ECB режиме с параметрами набора Z от ТК-26
Деление по модулю расшифрованного ключа на маску
Подстановка результата в ASN.1 конструкцию приватного ключа
Также хочу выразить особую благодарность @L11R за его код для ГОСТ 34.10-2001, который лёг в основу моей программы.
Всем спасибо за внимание!
Комментарии (10)
Igornord
23.06.2024 19:33+1Записать потом можно даже на жёсткий диск (любой раздел отличный от С). Но при перевыпуске сертификата обязательно вернуть его на токен, причём не обязательно на тот же с которого копировали. Название утилитки легко гуглится и называется незамысловато - Tokens.
makapohmgn
23.06.2024 19:33Только с контура её убрали, а качать с других источников на свой страх и риск)
Ну и стоит понимать, что раздавать свою ЭЦП налево и направо не всегда хорошая идея
Kilmez
23.06.2024 19:33Для бюджетных организаций ЭП выпускает Федеральное казначейство и в лк при генерации можно указать экспортируемая или нет будет ЭП.
kovserg
Это всё конечно здорово, но теперь налоговая выдают ключи сразу на усб свистке, который не позволяет приватному ключу покидать usb token. И создать новый сертификат можно, только отозвав старый. И тут возникает куча заморочек которые раньше решались созданием копий ключа.
ps: Кстати по rdp ключи можно использовать удалённо.
li0ard Автор
Смотря какой свисток, если ФКН то да, нельзя. Если не ФКН то в теории можно, наверное... :)
elvisghost
Налоговая выдает ключи на сертифицированном токене. И туда можно прийти со своим Рутокен Лайт, с которым заморочки все еще не возникают
Sap_ru
А как лайта ключ вытащить?
heiheshang
Вполне себе можно. Утилитка есть, все копируется.
Sap_ru
А что за утилитка? А на другой носитель потом записать можно?
sergeyc
Чтобы использовать Ключи через RDP - нужно включить службу смарт-карт. По-умолчанию она выключена