Открыть сервис

Алгоритм Кузнечик

Кузнечик — это российский симметричный блочный шифр, принятый в качестве национального стандарта шифрования ГОСТ Р 34.12-2015 (и его международный аналог ISO/IEC 18033-3:2010/Amd 1:2021). Разработан в 2010-х годах как замена устаревшему стандарту ГОСТ 28147-89 («Магма») и предназначен для обеспечения криптографической защиты информации, содержащей сведения, составляющие государственную тайну, а также для коммерческого использования. Шифр использует длину блока 128 бит и длину ключа 256 бит, что соответствует современным требованиям криптостойкости.

История создания

Разработка нового стандарта шифрования была инициирована в 2010-х годах в связи с необходимостью повышения уровня безопасности государственных информационных систем и перехода на более длинные ключи. Предыдущий стандарт, ГОСТ 28147-89, имел длину блока 64 бита, что делало его уязвимым для атак, основанных на парадоксе дней рождения, при обработке больших объёмов данных (более 2^32 блоков). Кроме того, международные стандарты (AES) уже перешли на 128-битный блок.

Работы велись под руководством Центра защиты информации и специальной связи ФСБ России при участии специалистов ОАО «ИнфоТеКС» и Академии ФСБ. Результатом стал алгоритм, названный «Кузнечик» (англ. Kuznyechik). В 2015 году он был утверждён как часть ГОСТ Р 34.12-2015 «Информационная технология. Криптографическая защита информации. Блочные шифры». В 2021 году алгоритм был включён в международный стандарт ISO/IEC 18033-3.

Общее описание алгоритма

«Кузнечик» является SP-сетью (Substitution-Permutation Network) — типом блочного шифра, в котором раунды состоят из последовательного применения слоёв подстановки (S-блоки) и перестановки (линейное преобразование). Ключевые особенности:

  • Длина блока: 128 бит (16 байт).
  • Длина ключа: 256 бит (32 байта).
  • Количество раундов: 9 полных раундов и одно финальное преобразование (XOR с ключом).
  • Размер S-блока: 8×8 бит (один S-блок на 8 бит, применяется параллельно ко всем 16 байтам блока).
  • Линейное преобразование: основано на умножении в поле Галуа GF(2^8) с использованием матрицы МДР (MDS — Maximum Distance Separable), что обеспечивает высокую диффузию.

Структура раунда

Процедура шифрования одного блока состоит из последовательного выполнения преобразований:

  1. XOR с раундовым ключом (AddRoundKey). На каждом раунде (включая нулевой) блок данных складывается по модулю 2 (XOR) с соответствующим раундовым ключом.
  2. Нелинейное преобразование (SubBytes). Каждый байт блока заменяется по таблице замены (S-блок). S-блок «Кузнечика» является нелинейной биективной функцией, специально сконструированной для устойчивости к алгебраическим и дифференциальным атакам.
  3. Линейное преобразование (MixColumns). Преобразование, выполняемое над 16-байтным вектором. Оно представляет собой умножение этого вектора на фиксированную матрицу 16×16 над полем GF(2^8). Это обеспечивает перемешивание битов внутри блока — изменение одного байта на входе влияет на все байты на выходе.

После 9 раундов выполняется финальное сложение с 10-м раундовым ключом (без последующего SubBytes и MixColumns).

Развёртывание ключей (Key Schedule)

Для генерации 10 раундовых ключей (по 128 бит каждый) из исходного 256-битного ключа используется итеративная процедура, основанная на том же самом шифре «Кузнечик» (режим «Feistel-подобной сети»). Процесс включает:

  • Разделение исходного ключа на две 128-битные половины (K1 и K2).
  • Применение к ним 32 раундов преобразования, в каждом из которых используется константа (итерационный номер) и линейное преобразование.
  • На выходе получаются 10 раундовых ключей, которые используются в прямом порядке для шифрования и в обратном — для расшифрования.

Криптоанализ и стойкость

На момент принятия стандарта «Кузнечик» был заявлен как устойчивый ко всем известным видам криптоаналитических атак, включая:

В 2015 году группа исследователей (А. Бирюков, Л. Перрен и др.) обнаружила необычную алгебраическую структуру S-блока «Кузнечика», которая оказалась более сложной, чем случайная перестановка. Было показано, что S-блок может быть представлен как результат применения специального преобразования (так называемый «потомок» бабочки Тураева). Это открытие породило дискуссии о возможной скрытой уязвимости (бэкдоре), однако авторы алгоритма и независимые эксперты (включая НИИ «Квант») заявили, что эта структура не снижает практическую стойкость шифра, а является следствием математической оптимизации. На сегодняшний день (2024 год) не опубликовано ни одной атаки, которая позволяла бы взломать «Кузнечик» быстрее, чем полным перебором ключа (2^256 операций).

Режимы работы

Стандарт ГОСТ Р 34.13-2015 определяет несколько режимов работы для «Кузнечика»:

  • ECB (Electronic Codebook) — простой режим, не рекомендуется для использования в современных системах из-за уязвимости к статистическим атакам.
  • CBC (Cipher Block Chaining) — режим сцепления блоков, требует вектор инициализации.
  • CTR (Counter)режим счётчика, позволяет параллельное шифрование.
  • OMAC (One-key MAC)режим выработки имитовставки (аутентификации).
  • GCM (Galois/Counter Mode) — режим, обеспечивающий одновременно шифрование и аутентификацию данных (рекомендован для сетевых протоколов).

Применение

«Кузнечик» широко применяется в российских государственных и корпоративных информационных системах:

  • Государственная тайна. Используется для шифрования данных, содержащих сведения высшей степени секретности.
  • Криптографические шлюзы. Входит в состав программно-аппаратных комплексов защиты информации (например, «Континент», «ViPNet»).
  • Электронная подпись. Применяется в алгоритмах выработки имитовставки для обеспечения целостности данных.
  • Банковская сфера. Используется в системах ДБО (дистанционное банковское обслуживание) и процессинга, где требуется сертифицированная криптография.
  • Мобильные устройства. Реализован в некоторых моделях смартфонов (например, на базе процессоров «Эльбрус») и в операционных системах (Astra Linux, «Аврора»).

Реализации

Существует несколько официальных и открытых реализаций алгоритма:

  • Аппаратные реализации. Встроены в микросхемы и криптопроцессоры, сертифицированные ФСБ России (например, «КриптоПро HSM»).
  • Программные реализации. Включены в библиотеки OpenSSL (с версии 1.1.1), Crypto++ (с версии 8.0), а также в специализированные российские продукты (КриптоПро CSP, VipNet CSP).
  • Реализации на языках высокого уровня. Существуют порты на Python, Go, Java, C# (например, библиотека pycryptodome).

Сравнение с другими стандартами

ХарактеристикаКузнечик (ГОСТ Р 34.12-2015)AES-256 (FIPS 197)Магма (ГОСТ 28147-89)
Длина блока128 бит128 бит64 бита
Длина ключа256 бит256 бит256 бит
Число раундов91432
Тип сетиSP-сетьSP-сетьСеть Фейстеля
S-блокФиксированный, 8×8Фиксированный, 8×8Зависит от реализации
Скорость (программная)Средняя (высокая на AES-NI)Высокая (аппаратное ускорение)Низкая
Сертификация ФСБДа (все грифы)Нет (запрещён для гос.тайны)Да (устаревший)

Критика

Основные замечания в адрес «Кузнечика» связаны с:

  1. Сложностью S-блока. Обнаруженная алгебраическая структура вызывает вопросы о прозрачности процесса разработки. Критики утверждают, что стандарт мог быть спроектирован с учётом неизвестных широкой общественности уязвимостей. Разработчики настаивают на том, что структура является результатом математической оптимизации и не создаёт бэкдоров.
  2. Отсутствием аппаратного ускорения. В отличие от AES, который имеет инструкции AES-NI на процессорах Intel/AMD, «Кузнечик» не имеет массовой аппаратной поддержки, что снижает его производительность на обычных компьютерах. Однако существуют реализации, использующие векторные расширения (SSE, AVX).
  3. Необходимостью сертификации. Для использования в государственных информационных системах требуется дорогостоящая сертификация ФСБ, что ограничивает его применение в свободном ПО и малом бизнесе.

Интересные факты

  • Название «Кузнечик» было выбрано в честь одноимённого насекомого, известного своей прыгучестью, что символизирует быстроту преобразований.
  • Алгоритм лёг в основу российского стандарта криптографической хеш-функции «Стрибог» (ГОСТ Р 34.11-2012), который использует его в качестве базового блока.
  • В 2020 году группа исследователей из Франции и Люксембурга опубликовала работу, в которой показала, что S-блок «Кузнечика» является частным случаем так называемой «бабочки Тураева» — класса перестановок, обладающих определённой алгебраической структурой.

Источники

  • ГОСТ Р 34.12-2015 «Информационная технология. Криптографическая защита информации. Блочные шифры».
  • ГОСТ Р 34.13-2015 «Информационная технология. Криптографическая защита информации. Режимы работы блочных шифров».
  • Biryukov A., Perrin L., Udovenko A. «Reverse-Engineering the S-Box of Streebog, Kuznyechik, and STB.4.1» (2016).
  • ISO/IEC 18033-3:2010/Amd 1:2021 «Information technology — Security techniques — Encryption algorithms — Part 3: Block ciphers».
  • Материалы Центра защиты информации и специальной связи ФСБ России.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →