MixColumns
MixColumns — это одна из четырёх основных операций (наряду с SubBytes, ShiftRows и AddRoundKey), выполняемых на каждом раунде алгоритма симметричного шифрования AES (Advanced Encryption Standard). Операция MixColumns предназначена для перемешивания (диффузии) данных внутри столбцов текущего состояния шифрования, обеспечивая зависимость каждого байта выходного столбца от всех четырёх байтов входного столбца. Она реализует матричное умножение в конечном поле Галуа GF(2⁸) и является ключевым элементом, гарантирующим криптостойкость AES.
Математическая основа
Операция MixColumns выполняется над состоянием шифрования — двумерным массивом байтов размером 4×4 (для AES-128, AES-192 и AES-256). Состояние представляется как матрица, где каждый элемент — это байт (значение от 0 до 255). В каждом раунде MixColumns применяется к каждому из четырёх столбцов состояния независимо.
Поле Галуа GF(2⁸)
Все вычисления в MixColumns проводятся в конечном поле Галуа GF(2⁸), образованном многочленами степени не выше 7 с коэффициентами из GF(2) (то есть 0 или 1). Умножение выполняется по модулю неприводимого многочлена:
- \( m(x) = x^8 + x^4 + x^3 + x + 1 \) (в шестнадцатеричной записи — 0x11B).
Каждый байт интерпретируется как многочлен: например, байт 0x57 (двоичное 01010111) соответствует многочлену \( x^6 + x^4 + x^2 + x + 1 \). Сложение в GF(2⁸) — это побитовое XOR, а умножение — это умножение многочленов с последующим взятием остатка от деления на \( m(x) \).
Матричное преобразование
Для каждого столбца состояния \( [a_0, a_1, a_2, a_3]^T \) (где \( a_0 \) — верхний байт, \( a_3 \) — нижний) вычисляется новый столбец \( [b_0, b_1, b_2, b_3]^T \) по формуле:
\[ \begin{bmatrix} b_0 \\ b_1 \\ b_2 \\ b_3 \end{bmatrix} = \begin{bmatrix} 02 & 03 & 01 & 01 \\ 01 & 02 & 03 & 01 \\ 01 & 01 & 02 & 03 \\ 03 & 01 & 01 & 02 \end{bmatrix} \cdot \begin{bmatrix} a_0 \\ a_1 \\ a_2 \\ a_3 \end{bmatrix} \]
Здесь числа 01, 02, 03 — это шестнадцатеричные значения, обозначающие многочлены:
- 01 = 1 (многочлен \( 1 \));
- 02 = \( x \) (многочлен \( x \));
- 03 = \( x + 1 \) (многочлен \( x + 1 \)).
Умножение на 01 — это просто копирование байта. Умножение на 02 — это сдвиг байта влево на один бит с последующим XOR с 0x1B (если старший бит был 1). Умножение на 03 — это умножение на 02 с последующим XOR с исходным байтом.
Пример вычисления
Пусть столбец состояния равен \( [0x87, 0x6E, 0x46, 0xA6]^T \). Вычислим первый байт нового столбца: \[ b_0 = (02 \cdot 0x87) \oplus (03 \cdot 0x6E) \oplus (01 \cdot 0x46) \oplus (01 \cdot 0xA6) \]
- \( 02 \cdot 0x87 \): 0x87 в двоичном — 10000111. Сдвиг влево даёт 00001110 (0x0E), старший бит был 1, поэтому XOR с 0x1B: 0x0E ⊕ 0x1B = 0x15.
- \( 03 \cdot 0x6E \): сначала \( 02 \cdot 0x6E \): 0x6E = 01101110, сдвиг — 11011100 (0xDC), старший бит 0, XOR не требуется. Затем XOR с 0x6E: 0xDC ⊕ 0x6E = 0xB2.
- \( 01 \cdot 0x46 = 0x46 \).
- \( 01 \cdot 0xA6 = 0xA6 \).
- Итог: \( 0x15 \oplus 0xB2 \oplus 0x46 \oplus 0xA6 = 0x47 \).
Аналогично вычисляются остальные три байта.
Роль в шифровании AES
Операция MixColumns является частью раундового преобразования AES. Каждый раунд (кроме последнего) состоит из последовательности:
- SubBytes — нелинейная замена байтов с помощью S-блока;
- ShiftRows — циклический сдвиг строк состояния;
- MixColumns — перемешивание столбцов;
- AddRoundKey — XOR с раундовым ключом.
В последнем раунде MixColumns не выполняется, что упрощает дешифрование и сохраняет симметрию алгоритма.
Диффузия
MixColumns обеспечивает диффузию — свойство, при котором изменение одного байта входного столбца влияет на все четыре байта выходного столбца. Это предотвращает статистические атаки, такие как дифференциальный криптоанализ. В сочетании с ShiftRows, который перемешивает байты между столбцами, MixColumns гарантирует, что после двух раундов каждый байт выходного состояния зависит от всех 16 байтов входного состояния.
Обратная операция InvMixColumns
Для дешифрования AES используется обратное преобразование — InvMixColumns. Оно выполняется умножением на обратную матрицу:
\[ \begin{bmatrix} 0E & 0B & 0D & 09 \\ 09 & 0E & 0B & 0D \\ 0D & 09 & 0E & 0B \\ 0B & 0D & 09 & 0E \end{bmatrix} \]
Числа 0E, 0B, 0D, 09 — это многочлены в GF(2⁸), обратные к 02, 03, 01, 01 соответственно. Умножение на эти константы выполняется аналогично, но требует больше операций, что делает дешифрование несколько медленнее шифрования. Однако в современных реализациях AES (например, с использованием таблиц замен) разница нивелируется.
Реализация
Программная реализация
В программных реализациях AES операция MixColumns часто реализуется через предвычисленные таблицы (T-tables), которые объединяют SubBytes, ShiftRows и MixColumns в один шаг. Это ускоряет выполнение за счёт замены вычислений в GF(2⁸) на операции с памятью. Однако для встраиваемых систем с ограниченными ресурсами может использоваться прямой алгоритм с циклическими сдвигами и XOR.
Пример псевдокода для одного столбца: `` b0 = (mul2(a0)) ^ (mul3(a1)) ^ a2 ^ a3; b1 = a0 ^ (mul2(a1)) ^ (mul3(a2)) ^ a3; b2 = a0 ^ a1 ^ (mul2(a2)) ^ (mul3(a3)); b3 = (mul3(a0)) ^ a1 ^ a2 ^ (mul2(a3)); ` где mul2(x) — умножение на 02, mul3(x)` — умножение на 03.
Аппаратная реализация
В аппаратных реализациях (FPGA, ASIC) MixColumns реализуется комбинационными схемами, состоящими из XOR-гейтов и сдвиговых регистров. Для умножения на 02 используется сдвиг с условным XOR. Типичная реализация для одного столбца требует около 16 XOR-гейтов и 4 сдвиговых операций, что делает её очень компактной.
Криптоанализ
MixColumns является критически важным элементом для устойчивости AES к линейному и дифференциальному криптоанализу. Матрица преобразования выбрана так, чтобы максимизировать ветвление (branch number) — минимальное количество активных S-блоков в двух последовательных раундах. Для MixColumns ветвление равно 5, что означает, что любые два различных входных столбца дают выходные столбцы, отличающиеся не менее чем в 5 байтах. Это свойство гарантирует, что дифференциальные характеристики быстро затухают.
Атаки, направленные на ослабление MixColumns (например, замена матрицы на единичную), приводят к катастрофическому снижению стойкости AES. Однако сам алгоритм AES считается устойчивым к известным криптоаналитическим методам при условии правильной реализации.
Исторический контекст
Операция MixColumns была разработана Винсентом Рэйменом и Джоан Деймен в рамках конкурса AES (1997–2000). Она основана на более ранних работах по шифру Rijndael, который стал победителем конкурса. Выбор матрицы с коэффициентами 01, 02, 03 был обусловлен компромиссом между скоростью вычислений и криптостойкостью: эти константы допускают эффективную реализацию как в программном, так и в аппаратном обеспечении.
Источники
- Joan Daemen, Vincent Rijmen. «The Design of Rijndael: AES — The Advanced Encryption Standard». Springer, 2002.
- National Institute of Standards and Technology (NIST). «FIPS PUB 197: Advanced Encryption Standard (AES)». 2001.
- William Stallings. «Cryptography and Network Security: Principles and Practice». 6th edition, Pearson, 2013.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →