Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Защ_инф_3гл.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
299.52 Кб
Скачать

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

Ключ шифрования выбирается из случайной последовательности бит и его размер равен 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}) используется следующая итерационная формула:

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

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

  • 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.

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