Расписание ключей AES
Стандарт расширенного шифрования использует расписание ключей для расширения короткого ключа на несколько отдельных раундовых ключей. Три варианта AES имеют разное количество раундов. Для каждого варианта требуется отдельный 128-битный раундовый ключ для каждого раунда плюс еще один. [примечание 1] Расписание ключей производит необходимые раундовые ключи из исходного ключа.
Круглые константы
[ редактировать ]я | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
RC я | 01 | 02 | 04 | 08 | 10 | 20 | 40 | 80 | 1Б | 36 |
Константа раунда rcon i для раунда i расширения ключа представляет собой 32-битное слово: [примечание 2]
где rc i — восьмибитное значение, определяемое как:
где — это побитовый оператор XOR , а константы, такие как 00 16 и 11B 16, задаются в шестнадцатеричном формате . Эквивалентно:
где биты rc i рассматриваются как коэффициенты элемента конечного поля , так что, например, представляет полином .
AES использует до rcon 10 для AES-128 (поскольку требуется 11 раундовых ключей), до для 256 AES - 8 для AES-192 и до 7 . [примечание 3]
Ключевой график
[ редактировать ]
Определять:
- N — длина ключа в 32-битных словах: 4 слова для AES-128, 6 слов для AES-192 и 8 слов для AES-256.
- K 0 , K 1 , ... K N -1 как 32-битные слова исходного ключа.
- R — необходимое количество раундовых ключей: 11 раундовых ключей для AES-128, 13 ключей для AES-192 и 15 ключей для AES-256. [примечание 4]
- W 0 , W 1 , ... W 4 R -1 как 32-битные слова расширенного ключа. [примечание 5]
Также определите RotWord как однобайтовый круговой сдвиг влево : [примечание 6]
и SubWord как применение S-блока AES к каждому из четырех байтов слова:
Тогда для :
Примечания
[ редактировать ]- ^ Варианты Rijndael без AES требуют до 256 бит расширенного ключа за раунд.
- ^ В FIPS-197 значение — это младший значащий байт с индексом 0
- ^ Варианты Rijndael с большими размерами блоков используют больше этих констант, вплоть до rcon 29 для Rijndael со 128-битными ключами и 256-битными блоками (требуется 15 раундовых ключей на каждые 256 бит, что означает 30 полных раундов расширения ключа, что означает 29 вызовы ядра расписания ключей с использованием констант раунда). Остальные константы для i ≥ 11 : 6C, D8, AB, 4D, 9A, 2F, 5E, BC, 63, C6, 97, 35, 6A, D4, B3, 7D, FA, EF и C5.
- ^ Для других вариантов Rijndael требуется максимум ( N , B ) + 7 раундовых ключей, где B — размер блока в словах.
- ^ Для других вариантов Rijndael требуются слова BR расширенного ключа, где B — размер блока в словах.
- ^ Вращение противоположно направлению порядка байтов. Адреса байтов FIPS-197 в массивах увеличиваются слева направо. [ссылка 1] с прямым порядком байтов, но вращение происходит справа налево. В AES-NI [ссылка 2] и в lib/crypto/aes.c ядра Linux. [ссылка 3] , порядок байтов увеличивается справа налево с прямым порядком байтов, но вращение происходит слева направо.
Ссылки
[ редактировать ]- ^ «Публикация федеральных стандартов обработки информации № 197 от 26 ноября 2001 г., анонсирующая РАСШИРЕННЫЙ СТАНДАРТ ШИФРОВАНИЯ (AES)» (PDF) . п. 8 . Проверено 16 июня 2020 г.
- ^ «Новый набор инструкций Intel® Advanced Encryption Standard (AES)» (PDF) . п. 13.
- ^ "aes.c" . Гитхаб . Проверено 15 июня 2020 г.
Внешние ссылки
[ редактировать ]- Описание ключевого расписания Рейндала
- Схематическое изображение расписания ключей для 128- и 256-битных ключей для 160-битных ключей на Cryptography Stack Exchange