AddRoundKey
AddRoundKey — это одна из четырёх основных операций, выполняемых в каждом раунде (кроме, возможно, последнего) алгоритма симметричного блочного шифрования AES (Advanced Encryption Standard, принят в США в 2001 году, в России — ГОСТ Р 34.11—2012 не является прямым аналогом, но AES используется в ряде российских криптографических протоколов и продуктов). Операция заключается в поразрядном сложении по модулю 2 (XOR, исключающее «ИЛИ») текущего состояния шифруемого блока (представленного в виде матрицы байтов размером 4×4) с соответствующим раундовым ключом, получаемым из исходного ключа шифрования с помощью процедуры расширения ключа (Key Expansion). AddRoundKey является единственной операцией в AES, которая непосредственно использует секретный ключ, и, таким образом, играет ключевую роль в обеспечении стойкости шифра.
Математическая основа и обозначения
Операция AddRoundKey выполняется над двумя массивами данных одинакового размера — состоянием (State) и раундовым ключом (Round Key). Состояние в AES-128, AES-192 и AES-256 представляет собой прямоугольную матрицу байтов размером 4 строки на 4 столбца (итого 16 байт, или 128 бит). Раундовый ключ для каждого раунда имеет точно такой же размер — 128 бит (16 байт).
Математически операция описывается как:
`` State_new[i][j] = State_old[i][j] XOR RoundKey[i][j] ``
где i — номер строки (0…3), j — номер столбца (0…3). Операция XOR выполняется побайтово: каждый байт состояния складывается с соответствующим байтом раундового ключа по модулю 2. Результат — новое состояние, которое передаётся на следующий этап раунда (обычно SubBytes, ShiftRows, MixColumns, и снова AddRoundKey).
Роль в структуре AES
Алгоритм AES представляет собой итеративный блочный шифр, работающий по схеме подстановочно-перестановочной сети. Каждый раунд состоит из четырёх последовательных операций:
- SubBytes — нелинейная замена каждого байта состояния с помощью S-блока (таблицы замен).
- ShiftRows — циклический сдвиг строк состояния.
- MixColumns — умножение каждого столбца состояния на фиксированную матрицу в поле Галуа GF(2⁸).
- AddRoundKey — наложение раундового ключа.
AddRoundKey выполняется на каждом раунде, включая нулевой раунд (перед первой итерацией) и последний раунд (в котором операция MixColumns опускается). В нулевом раунде AddRoundKey накладывает исходный (нерасширенный) ключ на открытый текст. В последнем раунде AddRoundKey завершает шифрование.
Процедура расширения ключа
Раундовые ключи для каждого раунда (включая нулевой) генерируются из исходного секретного ключа с помощью алгоритма расширения ключа (Key Expansion). Для AES-128 исходный ключ длиной 128 бит даёт 10 раундовых ключей (по одному на каждый из 10 раундов, плюс нулевой). Для AES-192 — 12 раундовых ключей, для AES-256 — 14 раундовых ключей.
Процедура расширения использует операции RotWord (циклический сдвиг слова), SubWord (замена байтов слова через S-блок) и XOR с константами раунда (Rcon). Результатом является массив слов (каждое слово — 4 байта), из которых формируются раундовые ключи. AddRoundKey использует эти ключи последовательно: первый раундовый ключ — для нулевого раунда, второй — для первого раунда и т. д.
Криптографическое значение
AddRoundKey является единственной операцией в AES, которая вносит в процесс шифрования секретный ключ. Без неё шифр превратился бы в чисто перестановочно-подстановочную сеть, не зависящую от ключа, и был бы тривиально взламываем. Именно наложение ключа через XOR обеспечивает свойство «лавинного эффекта»: изменение одного бита ключа или одного бита открытого текста приводит к непредсказуемому изменению значительной части шифротекста.
Операция XOR, используемая в AddRoundKey, является обратимой: повторное наложение того же самого раундового ключа восстанавливает исходное состояние. Это свойство используется при расшифровании, которое в AES выполняется путём применения обратных операций в обратном порядке, включая обратную AddRoundKey (которая идентична прямой операции, так как XOR обратен сам себе).
Устойчивость к атакам
AddRoundKey, благодаря своей простоте и линейности, не добавляет нелинейности в шифр — эту функцию выполняет SubBytes. Однако её роль в рассеивании ключа по состоянию критична. Атаки, направленные на восстановление раундовых ключей (например, атаки по сторонним каналам, такие как анализ мощности или электромагнитное излучение), часто нацелены именно на момент выполнения AddRoundKey, так как в этот момент ключ непосредственно взаимодействует с данными. Для защиты от таких атак применяются методы маскирования (blinding) и скремблирования операций.
Реализация
В программных реализациях AES операция AddRoundKey обычно выполняется как цикл по 16 байтам с операцией XOR между байтами состояния и байтами раундового ключа. В аппаратных реализациях (например, на FPGA или ASIC) AddRoundKey может быть реализована в виде массива вентилей XOR, работающих параллельно, что обеспечивает высокую производительность. В современных процессорах (например, Intel с набором инструкций AES-NI) операция AddRoundKey выполняется аппаратно за один такт.
Пример
Для наглядности рассмотрим упрощённый пример на одном байте. Пусть байт состояния равен 0x57 (01010111 в двоичной системе), а байт раундового ключа равен 0xA3 (10100011). Результат AddRoundKey:
`` 01010111 XOR 10100011 = 11110100 = 0xF4 ``
Для полного блока из 16 байт операция выполняется аналогично для каждой пары байт.
Связь с другими операциями
AddRoundKey завершает каждый раунд AES, подготавливая состояние для следующего раунда (или для выхода в случае последнего раунда). В отличие от SubBytes, ShiftRows и MixColumns, которые являются фиксированными и не зависят от ключа, AddRoundKey является ключезависимой операцией. Это различие используется в некоторых криптоаналитических атаках, например, в атаках на основе связанных ключей.
Использование в других шифрах
Операция XOR с ключом (аналог AddRoundKey) используется во многих других блочных шифрах, включая DES (Data Encryption Standard), ГОСТ 28147—89 («Магма»), а также в поточных шифрах (например, RC4). В современных шифрах, таких как ChaCha20, также применяется XOR с ключевым потоком, хотя структура иная. В российском стандарте ГОСТ Р 34.12—2015 («Кузнечик») также используется операция XOR с раундовыми ключами, но алгоритм построен на основе сети Фейстеля с иной архитектурой.
Источники
- Joan Daemen, Vincent Rijmen. The Design of Rijndael: AES — The Advanced Encryption Standard. Springer, 2002.
- William Stallings. Cryptography and Network Security: Principles and Practice. 7th edition, Pearson, 2017.
- NIST FIPS PUB 197: Advanced Encryption Standard (AES). National Institute of Standards and Technology, 2001.
- Christof Paar, Jan Pelzl. Understanding Cryptography: A Textbook for Students and Practitioners. Springer, 2010.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →