В июне этого года в России был принят новый стандарт блочного шифрования — ГОСТ Р 34.12-2015. Этот стандарт помимо старого доброго ГОСТ 28147-89, который теперь называется «Магма» и имеет фиксированный набор подстановок, содержит описание блочного шифра «Кузнечик». О нем я и расскажу в этом посте.

В отличие от ГОСТ 28147-89 новый шифр представляет собой не сеть Фейстеля, а т.н. SP-сеть: преобразование, состоящее из нескольких одинаковых раундов, при этом каждый раунд состоит из нелинейного и линейного преобразований, а также операции наложения ключа. В отличие от сети Фейстеля, при использовании SP-сети преобразуется весь входной блок, а не его половина. Такая структура иногда также называется AES-like (похожей на AES), однако, в отличие от последнего у «Кузнечика» есть ряд своих «фишек»:
  • линейное преобразование может быть реализовано в с помощью регистра сдвига;
  • ключевая развертка реализована с помощью сети Фейстеля, в которой в качестве функции используется раундовое преобразование исходного алгоритма.

Длина входного блока «Кузнечика» — 128 бит, ключа — 256 бит.

Преобразования


Шифрование основано на последовательном применении нескольких однотипных раундов, каждый из которых содержит три преобразования: сложение с раундовым ключом, преобразование блоком подстановок и линейное преобразование.

128-битный входной вектор очередного раунда складывается побитно с раундовым ключом:



Нелинейное преобразование представляет собой применение к каждому 8-битному подвектору 128-битного входного вектора фиксированной подстановки:



В «Кузнечике» используется та же подстановка, что и в хэш-функции «Стрибог».

Линейное преобразование, как я уже сказал, может быть реализовано не только как обычно в блочных шифрах — матрицей, но и с помощью РСЛОС — линейного регистра сдвига с обратной связью, который движется 16 раз.



Сам регистр реализуется над полем Галуа по модулю неприводимого многочлена степени 8: :



Раундовое преобразование можно изобразить следующим образом:



Выработка раундовых ключей


Рассмотрим теперь процедуру генерации раундовых ключей из мастер-ключа. Первые два получаются разбиением мастер-ключа пополам. Далее для выработки очередной пары раундовых ключей используется 8 итераций сети Фейстеля, где, в свою очередь, в качестве раундовых ключей используется счетчиковая последовательность, прошедшая через линейное преобразование алгоритма:





Раунд ключевой развертки можно представить следующим образом:



А всю процедуру выработки раундовых ключей так:



Шифрование и расшифрование


В результате, шифрование одного 128-битного входного блока описывается следующим уравнением:



А в виде блок-схемы может быть представлено так:



Расшифрование реализуется обращением базовых преобразований и применением их в обратном порядке:



Ссылки


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


  1. Londoner
    07.09.2015 16:54
    +3

    А что со старым симметричным ГОСТом было не так? И как новый защищён от DPA/DFA?


    1. PavelMSTU
      07.09.2015 17:39
      +4

      Начал серьезную работу турк Orhun Kara, который свел задачу поиска ключа от 2^256 к 2^224.

      Последняя серьезная работа была выполнена очень эмоциональным французом Куртуа… Он свел к 2^190…
      По сути «поцарапал» шифр.

      Не знаю в чем причины замены ГОСТа от 89 года… Может быть мы их еще не скоро узнаем, а может быть причины просты и банальны.

      P.S> В Википедии не все верно.


    1. ru_crypt
      07.09.2015 19:59

      На Рускрипто было сказано, что длина входного блока (64-бита) уже маловата для современных объемов данных. Но он все равно остался в стандарте (только теперь называется Магма)


  1. PavelMSTU
    07.09.2015 17:42

    Кстати, ГОСТ 28147-89 оказался очень хорош для легковесной криптографии,
    а что на счет нового ГОСТа?


  1. Disen
    08.09.2015 10:54
    +1

    Кто знает, как у нового алгоритма с производительностью? Она сравнима с AES'ом (даже без AES-NI)?
    У ГОСТа 28147-89 с этим были и есть некоторые проблемы.


    1. ru_crypt
      08.09.2015 12:25
      +3

      У ГОСТ 28147-89 по сравнению с AES (без AES-NI) всё вполне здорово. Можно посмотреть здесь и в этой презентации (здесь более актуальные данные об AES).


      1. Disen
        10.09.2015 15:57

        Спасибо, как выяснилось, в некоторых вопросах я заблуждался. :)


  1. urock
    08.09.2015 11:55
    +1

    Есть ли в алгоритме обратная связь, т.е. надо ли результат шифрования первого 128 битного блока открытого текста так или иначе подавать на вход шифрования следующего 128 битного блока?


    1. Yaruson
      08.09.2015 12:16

      В этом ГОСТе описан только алгоритм шифрования одного блока, режимы работы есть в другом — 34.13-2015


  1. gotch
    07.10.2015 09:10

    Прикладной вопрос — а как вырабатывается ключ шифрования?


    1. ru_crypt
      07.10.2015 11:31

      Можно ответить просто, но без раскрытия сути: вырабатывается так, чтобы представлять реализацию равномерно распределенной на соответствующем множестве случайной величины.

      Но суть здесь все же другая. Шифр не может использоваться «в вакууме» – процедура выработки ключа шифрования решается на более высоком уровне – уровне криптографических протоколов.

      Довольно много на эту тему было сказано на недавней конференции в Яндексе по вопросам использования российской криптографии.