RU EN ES 中文

AES: шифр без секретов?

AES открыт и за двадцать лет не взломан. Почему же Россия, Китай и другие державы делают собственные шифры вместо того, чтобы взять готовый?

Если AES так открыт, почему не все им пользуются?

Полное описание AES опубликовано и доступно любому: оно записано в открытом стандарте, встроено в каждый браузер и телефон, разобрано в учебниках. Его публично пытаются сломать больше двадцати лет — и не могут. Казалось бы, идеальный общий стандарт для всех. Но нет: Россия приняла свой шифр — «Кузнечик», Китай — SM4, собственные стандарты есть и у других стран.

Если алгоритм открыт и за двадцать лет в нём не нашли ни одной практической дыры, что заставляет целые государства годами разрабатывать свой шифр вместо готового? Может, «прозрачность» AES не такая уж и полная?

Ключевая мысль: Математически AES действительно открыт — и это его сила. Но доверие государства к шифру — это не только про математику. Вопрос не столько «есть ли тайна в самом алгоритме», сколько «кто написал стандарт и кто его контролирует». Именно здесь и проходит граница, из-за которой появляются национальные шифры.

Как устроен AES

Сначала разберёмся, почему к математике AES почти нет претензий, — а потом вернёмся к тому, почему это убеждает не всех. AES — это подстановочно-перестановочная сеть (SP-сеть): он не делит блок пополам, как сеть Фейстеля, а держит его в матрице байт и каждый раунд меняет её целиком четырьмя слоями операций. Поэтому каждая операция обязана быть обратимой.

1

Блок — это матрица

Блок данных раскладывается по ячейкам квадратной матрицы. В настоящем AES это матрица 4×4 из 16 байт (128 бит); в игре Ludus Lab — матрица 2×2 из четырёх полубайтов (16 бит). Все дальнейшие шаги работают со строками и столбцами этой матрицы.

2

SubBytes — замена по S-блоку

Каждый байт заменяется другим по фиксированной таблице — S-блоку. Это «запутывание» (confusion): единственная нелинейная операция AES. Без неё весь шифр свёлся бы к системе линейных уравнений и решался бы напрямую.

3

ShiftRows и MixColumns — перемешивание

Строки матрицы циклически сдвигаются, а столбцы перемешиваются между собой. Это «рассеивание» (diffusion): один изменённый бит входа за пару раундов расходится по всему блоку. Обе операции линейны и обратимы.

4

AddRoundKey — сложение с ключом

Состояние складывается по модулю 2 (XOR) с ключом этого раунда. Ключи раундов заранее выводятся из общего ключа отдельной процедурой — расписанием ключей. Именно этот шаг и нельзя отменить, не зная ключа.

5

Повтор раундов и расшифровка

Слои повторяются много раз: 10, 12 или 14 раундов в зависимости от длины ключа. В последнем раунде MixColumns нет — он ничего не добавил бы к стойкости. Чтобы расшифровать, Боб выполняет обратные операции в обратном порядке — но только зная ключ.

Один раунд AES
SubBytes
Замена по S-блоку (confusion)
→
ShiftRows
Сдвиг строк
→
MixColumns
Перемешивание столбцов (diffusion)
→
AddRoundKey
Сложение с ключом раунда

Каждый шаг обратим — но все вместе они переплетают блок с ключом так, что прокрутить назад без ключа невозможно.

Почему нельзя прокрутить назад: Отменить сложение с ключом нельзя, не зная ключа. А нелинейный S-блок и десяток раундов делают так, что любая попытка «распутать» шифр без ключа упирается в чудовищно сложную систему уравнений. Confusion прячет связь между ключом и шифротекстом, diffusion размазывает каждый бит по всему блоку — а повторение обоих слоёв не оставляет короткого пути, кроме перебора ключей.

Сами понятия confusion и diffusion ввёл Клод Шеннон ещё в 1949 году: он предложил собирать стойкий шифр из многократно повторённых простых замен и перестановок. По этому рецепту в начале 1970-х был устроен и ранний вариант шифра Lucifer в IBM; поздний Lucifer стал сетью Фейстеля и превратился в DES, а AES вернулся к исходной идее.

Открытый — но чей?

Выбирали AES невиданно открыто: в 1997–2000 годах институт стандартов США (NIST) провёл международный конкурс — 15 шифров со всего мира и три года публичного анализа, где слабости искал кто угодно. Победил Rijndael бельгийцев Йоана Дамена и Винсента Рэймена, и в 2001 году он стал стандартом. Это честный процесс и реальная сила AES. И всё же открытость алгоритма — не то же самое, что доверие к тому, кто его выбрал и кто держит стандарт в руках.

У недоверия есть причины в истории. Когда-то АНБ тайно переправило S-блоки шифра DES — позже выяснилось, что ради защиты от атаки, но секретность на двадцать лет породила подозрения. А в 2013 году всплыла история Dual_EC_DRBG — стандартного генератора случайных чисел NIST, в который, судя по всему, АНБ заложило лазейку. В самом AES ничего подобного не нашли — больше того, его S-блок построен по открытому алгебраическому правилу, а не на «магических» числах. Но для государства «скорее всего, чисто» — недостаточное основание, чтобы доверить шифру свои тайны.

Отсюда — криптографический суверенитет: свой шифр, свой регулятор, аудит силами своих экспертов и независимость от чужого стандарта. Это не обязательно значит, что в AES есть закладка, — это значит, что национальную безопасность не строят на доверии к чужому ведомству.

AES (США, NIST)

Де-факто мировой стандарт гражданского интернета: им зашифрован почти весь веб-трафик, Wi-Fi и диски. Регулятор — американский NIST.

Открытый, но под чужим контролем

«Кузнечик» (Россия)

Российский стандарт ГОСТ Р 34.12-2015 — тоже SP-сеть, как AES: блок 128 бит, ключ 256 бит, 9 раундов и финальное сложение с ключом. Регулятор — ФСБ (ТК 26).

Свой шифр, свой регулятор

SM4 (Китай)

Национальный шифр КНР (стандарт GB/T 32907): блок и ключ по 128 бит, 32 раунда. Обязателен во многих применениях внутри страны, например в китайском Wi-Fi (WAPI).

Криптографический суверенитет Китая

И это не всё: почти у каждой крупной державы есть свой блочный шифр, а общая у них — сама схема SP-сети, на которой построено большинство современных алгоритмов:

AES-128 AES-192 AES-256 КУЗНЕЧИК (ГОСТ) SM4 Serpent Twofish Camellia
А что в России? У России два современных шифра. «Кузнечик» — это SP-сеть, прямой родственник AES. А вот «Магма» (бывший ГОСТ 28147-89) устроена иначе — это сеть Фейстеля. Оба закреплены действующими ГОСТами; режимы их работы описаны в ГОСТ Р 34.13-2015.

Соберите AES своими руками

В интерактивной демонстрации Ludus Lab работают те же операции, что и в настоящем AES, но на крошечном блоке 16 бит (матрица 2×2, 2 раунда) — чтобы каждый шаг был виден целиком. Вы сможете:

Главный урок игры: В AES каждый шаг обратим, а перемешивание столбцов и вовсе линейно — и всё же без ключа шифр остаётся глухой стеной. Стойкость собирается из открытости, повторения, одного нелинейного S-блока и ключа. Разберите это на 16 битах — и принцип AES, «Кузнечика» и десятков других шифров станет понятен.
Для любознательных

AES и «Кузнечик» рядом

Оба шифра — подстановочно-перестановочные сети, но с разной историей и разными параметрами:

ПараметрAESКузнечик (ГОСТ Р 34.12-2015)
Страна разработкиБельгия / США (стандарт)Россия
Год принятия20012015
АрхитектураSP-сетьSP-сеть
Размер блока128 бит128 бит
Длина ключа128 / 192 / 256 бит256 бит
Число раундов10 / 12 / 149 + финальное сложение с ключом
Как выбиралиОткрытый международный конкурсРазработка под эгидой регулятора
РегуляторNIST (США)ФСБ России (ТК 26)

Почему AES до сих пор не взломан

За двадцать лет публичного анализа лучшие атаки на AES-128 (например, «biclique») сокращают перебор лишь примерно до 2126 вместо 2128 — то есть почти не дают выигрыша. На практике это означает: короткого пути нет, остаётся только перебор ключей, а он невозможен.

Даже квантовый компьютер не спасает атакующего: алгоритм Гровера лишь «ополовинивает» стойкость, превращая 256-битный ключ в эквивалент 128-битного. Поэтому AES-256 считается устойчивым и к квантовой угрозе — и именно его рекомендуют для долгосрочной защиты.

Где вы пользуетесь AES каждый день

HTTPS и интернет

Замочек в адресной строке — это чаще всего AES-GCM: он шифрует почти весь веб-трафик в TLS

Wi-Fi и мессенджеры

WPA2/WPA3 защищают сеть режимом AES-CCM; на AES построено и шифрование в популярных мессенджерах

Диски и телефоны

BitLocker, FileVault и шифрование памяти смартфонов используют AES; процессоры ускоряют его командами AES-NI

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

  • Название «Rijndael» составлено из фамилий авторов — Rijmen и Daemen; произносят его примерно как «рейндал»
  • В последнем раунде AES нет MixColumns: он линеен и не зависит от ключа, поэтому его можно было бы просто снять с шифротекста — стойкости он там не добавляет
  • S-блок — единственная нелинейная часть AES, и его значения не «магические»: они получены по открытому правилу (обратный элемент в поле GF(2⁸) плюс аффинное преобразование). Именно поэтому в прозрачности самого AES сомневаться трудно.
  • Константы Rcon в расписании ключей разные для каждого раунда — чтобы раунды не стали одинаковыми и не открыли дорогу «слайд-атакам»
  • «Магма» (ГОСТ) — сеть Фейстеля, а «Кузнечик» — SP-сеть; любопытно, что ключи раундов «Кузнечика» вырабатываются как раз сетью Фейстеля
Неожиданный вывод: Открытость и несломанность — условие необходимое, но не достаточное. Государство, доверяющее шифру свои тайны, не станет опираться на стандарт, который написан и контролируется другой державой. Доверие в криптографии — это не только математика, но и власть. Поэтому и появились «Кузнечик», SM4 и другие: главный вопрос не «есть ли в AES секрет», а «в чьих руках перо, которым пишется стандарт».

Теперь вы понимаете, и как устроен AES, и почему его открытость не делает его единым шифром для всех: там, где кончается математика, начинается вопрос доверия и контроля

В демонстрации вы на 16 битах пройдёте весь путь от открытого текста до шифротекста и обратно — и увидите, почему эту стену невозможно пройти без ключа