В прошлой части я разбирался с транспортным ключевым контейнером от КриптоПро (он же 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 байт публичного ключа, а также контрольные суммы.

Получаем приватный ключ

Программа на Github

Для получения приватного ключа необходимо выполнить следующие шаги:

  1. Получение ключа хранения с помощью CPKDF (CryptoPro Key Derivation Function) в которую передаётся пароль и соль из файла masks.key.

  2. Расшифровка основного ключа с помощью ГОСТ 28147-89 (Магма) в ECB режиме с параметрами набора Z от ТК-26

  3. Деление по модулю расшифрованного ключа на маску

  4. Подстановка результата в ASN.1 конструкцию приватного ключа

Также хочу выразить особую благодарность @L11R за его код для ГОСТ 34.10-2001, который лёг в основу моей программы.

Всем спасибо за внимание!

Комментарии (10)


  1. kovserg
    23.06.2024 19:33
    +1

    Это всё конечно здорово, но теперь налоговая выдают ключи сразу на усб свистке, который не позволяет приватному ключу покидать usb token. И создать новый сертификат можно, только отозвав старый. И тут возникает куча заморочек которые раньше решались созданием копий ключа.

    ps: Кстати по rdp ключи можно использовать удалённо.


    1. li0ard Автор
      23.06.2024 19:33
      +1

      Смотря какой свисток, если ФКН то да, нельзя. Если не ФКН то в теории можно, наверное... :)


    1. elvisghost
      23.06.2024 19:33
      +2

      Налоговая выдает ключи на сертифицированном токене. И туда можно прийти со своим Рутокен Лайт, с которым заморочки все еще не возникают


      1. Sap_ru
        23.06.2024 19:33
        +1

        А как лайта ключ вытащить?


    1. heiheshang
      23.06.2024 19:33

      Вполне себе можно. Утилитка есть, все копируется.


      1. Sap_ru
        23.06.2024 19:33

        А что за утилитка? А на другой носитель потом записать можно?


    1. sergeyc
      23.06.2024 19:33

      Чтобы использовать Ключи через RDP - нужно включить службу смарт-карт. По-умолчанию она выключена


  1. Igornord
    23.06.2024 19:33
    +1

    Записать потом можно даже на жёсткий диск (любой раздел отличный от С). Но при перевыпуске сертификата обязательно вернуть его на токен, причём не обязательно на тот же с которого копировали. Название утилитки легко гуглится и называется незамысловато - Tokens.


    1. makapohmgn
      23.06.2024 19:33

      Только с контура её убрали, а качать с других источников на свой страх и риск)

      Ну и стоит понимать, что раздавать свою ЭЦП налево и направо не всегда хорошая идея


  1. Kilmez
    23.06.2024 19:33

    Для бюджетных организаций ЭП выпускает Федеральное казначейство и в лк при генерации можно указать экспортируемая или нет будет ЭП.