Побег из КриптоПро ч.2
В прошлой части я снял траснпортную кодировку и смог добится UNWRAP ключа, но как позже выяснилось это все работает только для ГОСТ 2001, а он между прочим уже не используется.
Если вкратце то для ГОСТ 2001 для unwrap используется тот же ключ что и для снятия кодировки.
А в ГОСТ 2012 ключ для снятия транспортной кодировки дополнительно прогоняется через KDF_GOSTR3411_2012_256
.
При снятии транспортной кодировки мы видем ту же структуру что и в ГОСТ 2001
Соответственно порядок действий теперь такой:
- Переводим пароль в UCS-2LE (UTF-16)
- Хэшируем по ГОСТ 34.11-94 со стартовыми параметрами КриптоПро комбинацию ПАРОЛЬ+СОЛЬ+СЧЕТЧИК РАУНДОВ
- Снимаем транспортную кодировку и убираем заголовки блоба КриптоПро
- Прогоняем получившийся хэш через
KDF_GOSTR3411_2012_256
- Получившимся ключем делаем 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