ключа Кi и затем разбивается на восемь 6-битовых блоков В1, В2,..., В8:
Е (Ri–1) Кi = В1 В2... В8.
Далее каждый из этих блоков используется как номер элемента в функциях-матрицах S1, S2,..., S8, содержащих 4-битовые значения (табл. 3.5).
Таблица 3.5
Функции преобразования S1, S2,..., S8
Номер столбца | ||||||||||||||||||
S1 | ||||||||||||||||||
S2 | ||||||||||||||||||
S3 | ||||||||||||||||||
Н | ||||||||||||||||||
о | ||||||||||||||||||
м | S4 | |||||||||||||||||
е | ||||||||||||||||||
р | ||||||||||||||||||
S5 | ||||||||||||||||||
с | ||||||||||||||||||
т | ||||||||||||||||||
р | ||||||||||||||||||
о | S6 | |||||||||||||||||
к | ||||||||||||||||||
и | ||||||||||||||||||
S7 | ||||||||||||||||||
S8 | ||||||||||||||||||
Следует отметить, что выбор элемента в матрице Sj осуществляется достаточно оригинальным образом. Пусть на вxод матрицы Sj поступает 6-битовый блок Bj = b1 b2 b3 b4 b5 b6, тогда двухбитовое число b1 b6 указывает номер строки матрицы, а четырехбитовое число b2 b3 b4 b5 – номер столбца. Например, если на вход матрицы S1 поступает 6-битовый блок В1= b1 b2 b3 b4 b5 b6 = 100110, то 2-битовое число b1 b6 = 10(2) = 2(10) указывает строку с номером 2 матрицы S1, а 4‑битовое число b2 b3 b4 b5=0011(2)=3(10) указывает столбец с номером 3 матрицы S1. Это означает, что в матрице S1 блок В1 = 100110 выбирает элемент на пересечении строки с номером 2 и столбца с номером 3, т.е. элемент 8(10) =
|
|
|
|
=1000(2). Совокупность 6-битовых блоков В1, В2,..., В8 обеспечивает выбор четырехбитового элемента в каждой из матриц S1, S2,..., S8.
В результате получаем S1(В1) S2(В2) S3(В3)... S8(В8), т.е. 32‑битовый блок (поскольку матрицы Sj содержат 4-битовые элементы). Этот 32-битовый блок преобразуется с помощью функции перестановки битов Р (табл.3.6).
Таким образом, функция шифрования
f (Ri–1, Ki) = P(S1(B1),..., S8(B8)).
Как нетрудно заметить, на каждой итерации используется новое значение ключа Кi (длиной 48 бит). Новое значение ключа Кiвычисляется из начального ключа К (рис.3.5). Ключ К представляет собой 64‑битовый блок с 8 битами контроля по четности, расположенными в позициях 8, 16, 24, 32, 40, 48, 56, 64. Для удаления контрольных битов и подготовки ключа к работе используется функция G первоначальной подготовки ключа (табл. 3.7).
Рисунок 3.5 – Схема алгоритма вычисления ключей Ki Табл. 3.7 разделена на две части. Результат преобразования G(K) разбивается на две половины С0 и D0 по 28 бит каждая. Первые четыре строки матрицы G определяют, как выбираются биты последовательности С0 (первым битом С0 будет бит 57 ключа шифра, затем бит 49 и т.д., а последними битами – биты 44 и 36 ключа).
Таблица 3.6 | Таблица 3.7 | ||||||||||
Функция P перестановки битов | Функция G первоначальной подготовки ключа (переставленная выборка 1) | ||||||||||
Следующие четыре строки матрицы G определяют, как выбираются биты последовательности D0 (т.е. последовательность D0 будет состоять из битов 63, 55, 47,...,12, 4 ключа шифра).
Как видно из табл. 3.7, для генерации последовательностей С0 и D0 не используются биты 8, 16, 24, 32, 40, 48, 56 и 64 ключа шифра. Эти биты не влияют на шифрование и могут служить для других целей (например, для контроля по четности). Таким образом, в действительности ключ шифра является 56-битовым.
После определения С0 и D0 рекурсивно определяются Сi и Di, I = 1, 2,..., 16. Для этого применяются операции циклического сдвига влево на один или два бита в зависимости от номера шага итерации, как показано в табл. 3.8.
|
|
Операции сдвига выполняются для последовательностей Сi и Diнезависимо. Например, последовательность С3 получается посредством циклического сдвига влево на две позиции последовательности С2, а последовательность D3 – посредством сдвига влево на две позиции последовательности D2, С16 и D16 получаются из С15 и D15 посредством сдвига влево на одну позицию.
Таблица 3.8
Таблица сдвигов s i для вычисления ключа
Номер итерации | Количество si сдвигов влево, бит | Номер итерации | Количество si сдвигов влево, бит |
Ключ Кi, определяемый на каждом шаге итерации, есть результат выбора конкретных битов из 56-битовой последовательности СiDi и их перестановки. Другими словами, ключ Кi=H(Сi Di), где функция H определяется матрицей, завершающей обработку ключа (табл. 3.9).
Таблица 3.9