А.Винокуров. Серия "Энциклопедия блочных шифров".


Rijndael. Выработка ключевых элементов.

На домашнюю страничку Список алгоритмов Основные параметры Основные параметры


Размер ключа в шифре Rijndael равен 128, 192 или 256 бит. Размер ключевого элемента, используемого на раунде, совпадает с размером блока и также равен 128, 192 или 256 бит независимо от размера ключа. Число раундов шифрования находится в пределах от 10 до 14. Массив ключевых элементов вырабатывается из ключа шифрования с использованием описанной ниже процедуры "развертывания" ключа.

Как и блок данных, ключ может быть представлен в виде массива байтов:

K = (b1b2, ... , <i><b>b<sub>Nk</sub></b></i>), nK - размер ключа в байтах, nK[in]{16, 24, 32}.

Алгоритм развертывания ключа оперирует 32-битовыми ключевыми словами Wi, интерпретируя их как четырехбайтовые массивы:

Wi = (wi1wi2wi3wi4), | wij | = 8.

Первые q = n/4 ключевых слов получаются простым разделением ключа K на 4-байтовые фрагменты аналогично тому, как байтами шифруемого блока заполняются столбцы матрицы данных:

W0 = (b1b2b3b4),
W1 = (b5b6b7b8),
...................................
[трехэтажная формула].

Необходимое число ключевых элементов на 1 больше числа раундов R, каждый ключевой элемент по размеру равен блоку данных (nB байт) и содержит qB = n/4 ключевых слов. Таким образом, всего необходимо Q = (R+1)*qB ключевых слов. Первые q ключевых слов составлены из байтов ключа как показано выше, остальные Q - q вырабатываются по следующему алгоритму:

При размере ключа 16 или 24 байта (q[in]{4,6}) используется следующая итерационная формула:

[формула]i = q..Q-1,

а при размере ключа 32 байта (q = 8) следующая:

[формула]i = q..Q-1.

В приведенных выше формулах использованы следующие обозначения:

Таким образом, все усложняющее преобразование может быть представлено в следующей форме:

S(<i><b>R</b></i><sub>--></sub>(W)) (+) Pj = (S[w2] (+) 02 j-1S[w3], S[w4], S[w1]).

Как видно из приведенных выше соотношений, ключевые слова вырабатываются порциями, по размеру равными ключу, причем первое слово каждой порции вырабатывается по усложненной схеме с использованием приведенного выше нелинейного преобразования, а остальные - простым побитовым суммированием непосредственно предшествующего элемента с элементом, имеющим тот же порядковый номер в предыдущей порции ключевых слов. При размере ключа 256 бит (32 байта) усложнение используется также и при выработке каждого пятого элемента порции - при нумерации с нуля он имеет индекс 4 в группе из q слов.

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

Каждые последовательно выработанные qB ключевых слов, - включая те, что получены непосредственно из ключа, - объединяются в раундовые ключевые элементы:

[формула],
[формула],
................................................
[формула].

Ключевые элементы, как и блок данных, к которому они прибавляются в процессе шифрования, может быть представлен в виде матрицы байтов размера 4*qB. В этом случае столбцы матрицы-ключевого элемента образуются ключевыми словами:

[формула] .

Описанная схема используется для выработки ключевых элементов для зашифрования. При расшифровании необходимо выработать ту же самую последовательность элементов, переставить их в обратном порядке, и все элементы, кроме крайних, умножить слева на матрицу M -1, как это указано в соответсвующем разделе.

На домашнюю страничку Список алгоритмов Основные параметры Основные параметры


[Список алгоритмов] [Основные характеристики] [Общая схема] [Нелинейное преобразование] [Расшифрование] [Эквивалентность за- и расшифрования] [Выработка ключевых элементов]
 
[Начало осмотра] [Что нового] [Статьи] [Выпуски в "Байтах"] [Что скачать] [Криптоалгоритмы] [Глоссарий] [Ссылки] [Гостевая книга] [Форум] [Напиши мне]

Подготовлено 08.06.01. (c) 2001 Андрей Винокуров.