Читаем ключевой контейнер КриптоПро (ч.2)

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

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

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

Источник: https://habr.com/ru/articles/823772/


Интересные статьи

Интересные статьи

При создании приложения на основе фреймворка Core Data мы проектируем модель данных, в которую потом снова и снова вносим изменения. Неужели при этом каждый раз нужно удалять все данные и загружать их...
Всем привет! Я Максим, бэкенд-разработчик команды MSB (корпоративная сервисная шина), занимаюсь интеграциями систем для внутренних нужд компании Tele2, и в этом посте хочу поделиться опытом интеграции...
Добрый день, уважаемые читатели. Я - Владимир, меня зовут девопс. Говорят, что девопс - это болезнь и я это вам сегодня докажу. Ответа на вопрос "зачем?" вы тут не найдете, это кликбейт, я и сам не зн...
Содержимое веб-страниц должно быть размещено в некоем элементе, ширина которого, ограничивающая ширину содержимого, позволяет пользователям удобно работать с материалами сайта. Такие ...
За последнее десятилетие помимо методов извлечения секретов или выполнения других несанкционированных действий атакующими стали применяться неумышленная утечка данных и манипулирование процессом ...