Алгоритм Кузнечик
Кузнечик — это российский симметричный блочный шифр, принятый в качестве национального стандарта шифрования ГОСТ Р 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), что обеспечивает высокую диффузию.
Структура раунда
Процедура шифрования одного блока состоит из последовательного выполнения преобразований:
- XOR с раундовым ключом (AddRoundKey). На каждом раунде (включая нулевой) блок данных складывается по модулю 2 (XOR) с соответствующим раундовым ключом.
- Нелинейное преобразование (SubBytes). Каждый байт блока заменяется по таблице замены (S-блок). S-блок «Кузнечика» является нелинейной биективной функцией, специально сконструированной для устойчивости к алгебраическим и дифференциальным атакам.
- Линейное преобразование (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 бит |
| Число раундов | 9 | 14 | 32 |
| Тип сети | SP-сеть | SP-сеть | Сеть Фейстеля |
| S-блок | Фиксированный, 8×8 | Фиксированный, 8×8 | Зависит от реализации |
| Скорость (программная) | Средняя (высокая на AES-NI) | Высокая (аппаратное ускорение) | Низкая |
| Сертификация ФСБ | Да (все грифы) | Нет (запрещён для гос.тайны) | Да (устаревший) |
Критика
Основные замечания в адрес «Кузнечика» связаны с:
- Сложностью S-блока. Обнаруженная алгебраическая структура вызывает вопросы о прозрачности процесса разработки. Критики утверждают, что стандарт мог быть спроектирован с учётом неизвестных широкой общественности уязвимостей. Разработчики настаивают на том, что структура является результатом математической оптимизации и не создаёт бэкдоров.
- Отсутствием аппаратного ускорения. В отличие от AES, который имеет инструкции AES-NI на процессорах Intel/AMD, «Кузнечик» не имеет массовой аппаратной поддержки, что снижает его производительность на обычных компьютерах. Однако существуют реализации, использующие векторные расширения (SSE, AVX).
- Необходимостью сертификации. Для использования в государственных информационных системах требуется дорогостоящая сертификация ФСБ, что ограничивает его применение в свободном ПО и малом бизнесе.
Интересные факты
- Название «Кузнечик» было выбрано в честь одноимённого насекомого, известного своей прыгучестью, что символизирует быстроту преобразований.
- Алгоритм лёг в основу российского стандарта криптографической хеш-функции «Стрибог» (ГОСТ Р 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 →