Криптография
October 14, 2022

Побег из КриптоПро ч.2

В прошлой части я снял траснпортную кодировку и смог добится UNWRAP ключа, но как позже выяснилось это все работает только для ГОСТ 2001, а он между прочим уже не используется.

Если вкратце то для ГОСТ 2001 для unwrap используется тот же ключ что и для снятия кодировки.

А в ГОСТ 2012 ключ для снятия транспортной кодировки дополнительно прогоняется через KDF_GOSTR3411_2012_256.

Скриншот рекомендаций ТК-26

При снятии транспортной кодировки мы видем ту же структуру что и в ГОСТ 2001

Свои данные поменял на нули

Соответственно порядок действий теперь такой:

  1. Переводим пароль в UCS-2LE (UTF-16)
  2. Хэшируем по ГОСТ 34.11-94 со стартовыми параметрами КриптоПро комбинацию ПАРОЛЬ+СОЛЬ+СЧЕТЧИК РАУНДОВ
  3. Снимаем транспортную кодировку и убираем заголовки блоба КриптоПро
  4. Прогоняем получившийся хэш через KDF_GOSTR3411_2012_256
  5. Получившимся ключем делаем unwrap

По итогу получаем значение приватного ключа, остается подставить его в ASN.1 структуру и экспортировать в PEM. На этот раз я думаю дело точно можно считать закрытым. :)

Огромное спасибо хочу выразить vGimly и Дмитрию Белявскому (создатель движка для OpenSSL) за то что терпели меня и давали действительно полезные советы :)

Ссылки:

Код - https://github.com/li0ard/anticryptopro/tree/gost2012

Cтатья vGimly - https://vgimly.blogspot.com/2019/03/2.html

Рекомендации ТК-26 - https://www.s-terra.ru/upload/medialibrary/9bb/rekomendacii-po-standartizacii-kriptografia.pdf

Гостовский движок - https://github.com/gost-engine/engine