Блочный шифр AES: теоретическая основа

Блочные шифры работают с данными фиксированного размера, преобразуя открытый текст в зашифрованный блок одинаковой длины при помощи секретного ключа. В случае AES (Advanced Encryption Standard) размер блока строго фиксирован и составляет 128 бит, что эквивалентно 16 байтам. Любое сообщение перед обработкой разбивается на такие блоки, после чего каждый блок проходит серию преобразований, называемых раундами.

Основная модель AES основана на сети подстановок и перестановок (Substitution-Permutation Network, SPN). Эта структура обеспечивает сочетание двух ключевых криптографических принципов: запутывания (confusion) и рассеивания (diffusion). Запутывание достигается нелинейными заменами байтов, а рассеивание — перемешиванием данных внутри блока.


В AES входной 128-битный блок рассматривается не как одномерная последовательность, а как матрица размером 4×4 байта:

[ ]

Эта структура называется state (состояние). Все операции AES применяются именно к этой матрице, а не к линейному массиву байтов.


Алгебраическая основа: поле GF(2⁸)

Все байтовые операции AES выполняются в конечном поле Галуа ( GF(2^8) ). Каждый байт интерпретируется как многочлен степени не выше 7 с коэффициентами в ( {0,1} ).

Например, байт 0x57 соответствует многочлену:

[ x^6 + x^4 + x^2 + x + 1]

Умножение в этом поле производится по модулю неприводимого многочлена:

[ x^8 + x^4 + x^3 + x + 1]

Эта алгебраическая структура обеспечивает устойчивость к линейному анализу и является основой операции MixColumns.


Основные преобразования раунда

Каждый раунд AES (кроме последнего) состоит из четырёх ключевых этапов:

SubBytes

Каждый байт состояния заменяется через нелинейную таблицу подстановок S-box. S-box построен на основе:

  1. Обратного элемента в ( GF(2^8) )
  2. Афинного преобразования

Эта комбинация обеспечивает сильную нелинейность и устойчивость к линейному и дифференциальному криптоанализу.


ShiftRows

Строки матрицы состояния циклически сдвигаются:

  • 0-я строка не сдвигается
  • 1-я строка сдвигается на 1 байт влево
  • 2-я строка на 2 байта
  • 3-я строка на 3 байта

Это создаёт межколоночное рассеивание данных.


MixColumns

Каждый столбец матрицы рассматривается как вектор и умножается на фиксированную матрицу в ( GF(2^8) ):

[ ]

Эта операция обеспечивает сильное перемешивание байтов внутри столбца. Умножение на числа 2 и 3 выполняется через сдвиги и XOR в поле Галуа, а не как обычная арифметика.


AddRoundKey

На каждом раунде состояние XOR-ится с раундовым ключом:

[ state = state roundKey]

Это единственный этап, зависящий от секретного ключа, и он вводит криптографическую зависимость между ключом и состоянием.


Расписание ключей (Key Schedule)

Исходный ключ AES расширяется в набор раундовых ключей. Количество раундов зависит от длины ключа:

  • 128 бит → 10 раундов
  • 192 бит → 12 раундов
  • 256 бит → 14 раундов

Процесс расширения включает:

  • циклический сдвиг слов (RotWord)
  • замену байтов через S-box (SubWord)
  • XOR с константами раундов (Rcon)

Каждый новый 32-битный блок ключа зависит от предыдущих, что создаёт цепную зависимость и предотвращает простую структуру ключей.


Обратные преобразования

Для расшифрования используются обратные операции:

  • InvSubBytes — обратная S-box
  • InvShiftRows — циклический сдвиг вправо
  • InvMixColumns — умножение на обратную матрицу в ( GF(2^8) )
  • AddRoundKey — XOR (самоинверсная операция)

Структура AES симметрична: расшифрование выполняет обратные преобразования в обратном порядке раундов.


Математическая устойчивость структуры

Сильные стороны AES как блочного шифра:

  • высокая нелинейность S-box
  • равномерное распространение влияния одного байта на весь блок
  • отсутствие простых линейных зависимостей между входом и выходом
  • устойчивость к дифференциальному криптоанализу за счёт MixColumns

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


Связь с реализацией в JavaScript (контекст SJCL)

В реализациях криптографии на JavaScript, включая Stanford JavaScript Crypto Library, AES обычно реализуется максимально близко к спецификации FIPS-197. Основные особенности практической реализации:

  • использование таблиц предварительных вычислений для S-box и MixColumns
  • представление состояния как массивов чисел 0–255
  • оптимизация операций GF(2⁸) через lookup-таблицы
  • минимизация побитовых операций ради производительности в JS-движках

В таких библиотеках, как SJCL, AES интегрирован как базовый примитив для режимов шифрования (CBC, CTR), где сам блочный шифр выступает ядром, а режимы обеспечивают обработку сообщений произвольной длины.


Роль нелинейности и диффузии в безопасности

Без SubBytes шифр превращался бы в линейную систему, поддающуюся решению через линейную алгебру. Без MixColumns и ShiftRows влияние одного байта оставалось бы локальным, что делало бы анализ структуры тривиальным.

Совместное действие всех четырёх операций формирует эффект лавины: изменение одного бита входа приводит к изменению значительной части выходного блока после нескольких раундов.