Генерация ключевой последовательности

Ключ шифрования выбирается из случайной последовательности бит и его размер равен 128, 192 или 256 бит. Размеры блока данных и ключа шифрования могут быть выбраны независимо. Их соотношение определяется в соответствии с таблицей «число раундов шифрования». В каждом раунде используется свой раундовый ключ Кr и их массив генерируется из ключа шифрования пользователя с использованием описанной ниже процедуры "развертывания" ключа.

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

K = (k1, k 2, ... , k nk ), nk - размер ключа в байтах, nkÎ {16, 24, 32}.

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

Ki = (ki0, ki1, ki2, ki3), | kij | = 8 бит.

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

K 0 = (k 0, k 1, k 2, k 3),
K 1 = (k 4, k 5, k 6, k 7),

..................................

K q-1 = (k nk -4, k nk -3, k nk -2, k nk -1),

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

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

Генерация ключевой последовательности - student2.ru

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

Генерация ключевой последовательности - student2.ru

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

· S(K) - побайтовая замена 32-битового слова, т.е. замена всех четырех входящих в него байтов с использованием штатного узла замен S шифра:
если K = (k0, k1, k2, k3), то S(K) = (S[k0], S[k1], S[k2], S[k3]);

· R - циклический сдвиг 4-байтового вектора на один элемент влево:
если K = (k0, k1, k2, k3), то Rß (K) = (k1, k2, k3, k0);

· Pj - 4-байтовый вектор (раундовая константа), задаваемый следующей формулой:
Pj = (02 j-1, 00, 00, 00), где возведение в степень выполняется в ранее описанном конечном поле GF(28).

Pj-1 = (00, 02 j-2, 00, 00), j = i/q.

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

S(Rß (K)) Å Pj = (S[k1] Å 02 j-1, S[k2], S[k3], S[k0]).

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

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

Kr0 = (K0, K1,…, Kqb-1),

Kr1 = (K qb, K qb+1,…, K2qb-1),

..........................................

Krr = (K rqb, K rqb+1,…, KQ).

Алгоритм выработки ключей и выбор раундовых ключей показан
на рис. 3.5.

 
  Генерация ключевой последовательности - student2.ru

Рис.3.5. Развертывание ключа и выбор раундовых ключей для Nb = 6 и Nk = 4.

Дешифрование

Дешифрование в Rijndael алгоритмически эквивалентно шифрованию, однако между этими двумя процедурами имеются определенные различия, гораздо более существенные, чем в стандарте DES, где все сводится к порядку использования ключевых элементов. Дешифрование отличается от шифрования по следующим четырем пунктам:

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

Kr0, Kr1, Kr2, ... , Krr-1, Krr,

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

Krr, M -1× Krr-1, ... , M -1× Krr-2, M -1× Krr-1, Kr0.

2. На шаге побайтовой замены используется узел замен S-1 обратный тому, что применяется в процедуре шифрования S. Таблица узла замен S-1 приведена в приложении 5, таблица 2. Это означает, что каково бы ни было байтовое значение b, всегда справедливо следующее соотношение:

S -1[S[b]] = b.

3. На шаге построчного вращения матрицы данных осуществляется циклический сдвиг строк на то же самое количество элементов, что и при шифровании, но в обратную сторону - вправо. Либо, в силу свойств операции циклического сдвига, можно осуществить вращение строк матрицы в ту же сторону, что и при шифровании, т.е. влево, но на другое количество элементов, вычисляемое по следующей формуле:

Сi' = n - Ci,i = 2¸4.

Константы циклического сдвига влево строк матрицы в процедуре дешифрования в зависимости от числа столбцов матрицы данных приведены

в следующей ниже таблице:

Nb
С2'
С3'
С4'

4. На шаге умножения слева на постоянную матрицу используется матрица M -1, обратная используемой при шифровании матрице M:

М -1 = 0E 0B 0D
0E 0B 0D
0D 0E 0B
0B 0D 0E

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

Процесс дешифрования по стандарту AES показан в приложении 6.

Ключевая последовательность K длиной 128 (192, 256) бит данных поступает на блок расширения ключа БРК, где формируется ключевая последовательность из 4-х байтовых слов, из которой в дальнейшем берутся раундовые ключи. Исходный массив зашифрованного блока данных С длиной 128 (192, 256) бит, поступает на схему сложения по модулю 2, где производится сложение по модулю 2 с раундовым ключом блока Krr . Над данными в блоке S -1 осуществляется преобразование нелинейной замены байт, результат которого поступает на блок циклического сдвига вправо, где осуществляется построчное вращение матрицы данных (сдвиг строк вправо). Результат данной операции заносится в блок памяти БП. С выхода блока БП массив данных складывается по модулю 2 в соответствующем блоке с последующим раундовым ключом Krr-1 блока БРК. В блоке *M -1 производится умножение массива данных предшествующего блока на постоянную матрицу М-1. После преобразований в блоках S -1 и циклического сдвига вправо результат заносится опять в БП. Данное преобразование повторяется (r-1) раз, где r – число раундов. Результат дешифрования блока C формируется на входе схемы сложения по модулю 2, где производится сложение результата (r -1) – числа преобразований с последним раундовым ключом блока БРК. После схемы сложения по модулю 2 будет получен открытый текст М.

Наши рекомендации