Схема устройства функции шифрования f показана на рис.3. Для вычисления значения функции f используются функция расширения Е, восьмиблоковое преобразование S, функция Р перестановки битов и цикловые ключи Кi. Опишем эти вспомогательные функции, а также метод генерирования цикловых ключей.
| Рис. 3. Схема вычисления функции шифрования f |
Функция E, выполняющая расширение 32 бит ключа до 48 бит, определена в таблице 4. В соответствии с таблицей 4 первые три бита E(Ri-1) это биты 32, 1 и 2, а последние – 31, 32 и 1. Полученный результат (обозначим его E(Ri?1)) складывается по модулю 2 (операция XOR) с текущим значением ключа Кi и затем разбивается на восемь 6-битовых блоков B1, B2,... B8:
E(Ri-1) + Кi = B1, B2,..., B8.
| Рис. 4. Схема вычисления ключей Кi |
Далее каждый из этих блоков используется как номер элемента в функциях-матрицах S1, S2,..., S8, содержащих 4-битовые значения (таблица 5). Эти блоки составляют восьмиблоковое преобразование S. Опишем способ выбора элемента в матрице Sj. Пусть на вход матрицы Sj поступает 6-ти битовый блок Bj=b1b2b3b4b5b6, тогда 2-битовый блок b1b6 указывает номер строки матрицы, а 4-битовое число b2b3b4b5 – номер столбца. Совокупность 6-битовых блоков B1, B2,... B8 обеспечивает выбор 4-битового элемента в каждой из матриц S1, S2,..., S8. В результате получаем 32-битовый блок: S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8). Этот блок преобразуется с помощью функции перестановки битов Р (табл.6). Таким образом, функция шифрования f по следующей формуле: f(Ri-1, Ki)=Р(S1(B1), ..., S8(B8)).
На каждой итерации алгоритма используется новое значение 48-битового ключа Ki. Текущее значение ключа Ki вычисляется по начальному ключу К (рис. 4). Ключ К представляет собой 64-битовый блок с 8 битами контроля по четности, расположенными в позициях 8, 16, 24, 32, 40, 56, 64. Для удаления контрольных битов и подготовки ключа к работе используется функция G первоначальной подготовки ключа (табл. 7).
Таблица 5
Функции преобразования S1, S2,..., S8.
Номер столбца | Номер строки | | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | | 0 | 14 | 4 | 13 | 1 | 2 | 15 | 11 | 8 | 3 | 10 | 6 | 12 | 5 | 9 | 0 | 7 | S1 | 1 | 0 | 15 | 7 | 4 | 14 | 2 | 13 | 1 | 10 | 6 | 12 | 11 | 9 | 5 | 3 | 8 | 2 | 4 | 1 | 4 | 8 | 13 | 6 | 2 | 11 | 15 | 12 | 9 | 7 | 3 | 10 | 5 | 0 | 3 | 15 | 12 | 8 | 2 | 4 | 9 | 1 | 7 | 5 | 11 | 3 | 14 | 10 | 0 | 6 | 13 | 0 | 15 | 1 | 8 | 14 | 6 | 11 | 3 | 4 | 9 | 7 | 2 | 13 | 12 | 0 | 5 | 10 | S2 | 1 | 3 | 13 | 4 | 7 | 15 | 2 | 8 | 14 | 12 | 0 | 1 | 10 | 6 | 9 | 11 | 5 | 2 | 0 | 14 | 7 | 11 | 10 | 4 | 13 | 1 | 5 | 8 | 12 | 6 | 9 | 3 | 2 | 15 | 3 | 13 | 8 | 10 | 1 | 3 | 15 | 4 | 2 | 11 | 6 | 7 | 12 | 0 | 5 | 14 | 9 | 0 | 10 | 0 | 9 | 14 | 6 | 3 | 15 | 5 | 1 | 13 | 12 | 7 | 11 | 4 | 2 | 8 | S3 | 1 | 13 | 7 | 0 | 9 | 3 | 4 | 6 | 10 | 2 | 8 | 5 | 14 | 12 | 11 | 15 | 1 | 2 | 13 | 6 | 4 | 9 | 8 | 15 | 3 | 0 | 11 | 1 | 2 | 12 | 5 | 10 | 14 | 7 | 3 | 1 | 10 | 13 | 0 | 6 | 9 | 8 | 7 | 4 | 15 | 14 | 3 | 11 | 5 | 2 | 12 | 0 | 7 | 13 | 14 | 3 | 0 | 6 | 9 | 10 | 1 | 2 | 8 | 5 | 11 | 12 | 4 | 15 | S4 | 1 | 13 | 8 | 11 | 5 | 6 | 15 | 0 | 3 | 4 | 7 | 2 | 12 | 1 | 10 | 14 | 9 | 2 | 10 | 6 | 9 | 0 | 12 | 11 | 7 | 13 | 15 | 1 | 3 | 14 | 5 | 2 | 8 | 4 | 3 | 3 | 15 | 0 | 6 | 10 | 1 | 13 | 8 | 9 | 4 | 5 | 11 | 12 | 7 | 2 | 14 | 0 | 2 | 12 | 4 | 1 | 7 | 10 | 11 | 6 | 8 | 5 | 3 | 15 | 13 | 0 | 14 | 9 | S5 | 1 | 14 | 11 | 2 | 12 | 4 | 7 | 13 | 1 | 5 | 0 | 15 | 10 | 3 | 9 | 8 | 6 | 2 | 4 | 2 | 1 | 11 | 10 | 13 | 7 | 8 | 15 | 9 | 12 | 5 | 6 | 3 | 0 | 14 | 3 | 11 | 8 | 12 | 7 | 1 | 14 | 2 | 13 | 6 | 15 | 0 | 9 | 10 | 4 | 5 | 3 | 0 | 12 | 1 | 10 | 15 | 9 | 2 | 6 | 8 | 0 | 13 | 3 | 4 | 14 | 7 | 5 | 11 | S6 | 1 | 10 | 15 | 4 | 2 | 7 | 12 | 9 | 5 | 6 | 1 | 13 | 14 | 0 | 11 | 3 | 8 | 2 | 9 | 14 | 15 | 5 | 2 | 8 | 12 | 3 | 7 | 0 | 4 | 10 | 1 | 13 | 11 | 6 | 3 | 4 | 3 | 2 | 12 | 9 | 5 | 15 | 10 | 11 | 14 | 1 | 7 | 6 | 0 | 8 | 13 | 0 | 4 | 11 | 2 | 14 | 15 | 0 | 8 | 13 | 3 | 12 | 9 | 7 | 5 | 10 | 6 | 1 | S7 | 1 | 13 | 0 | 11 | 7 | 4 | 9 | 1 | 10 | 14 | 3 | 5 | 12 | 2 | 15 | 8 | 6 | 2 | 1 | 4 | 11 | 13 | 12 | 3 | 7 | 14 | 10 | 15 | 6 | 8 | 0 | 5 | 9 | 2 | 3 | 6 | 11 | 13 | 8 | 1 | 4 | 10 | 7 | 9 | 5 | 0 | 15 | 14 | 2 | 3 | 12 | 0 | 13 | 2 | 8 | 4 | 6 | 15 | 11 | 1 | 10 | 9 | 3 | 14 | 5 | 0 | 12 | 7 | S8 | 1 | 1 | 15 | 13 | 8 | 10 | 3 | 7 | 4 | 12 | 5 | 6 | 11 | 0 | 14 | 9 | 2 | 2 | 7 | 11 | 4 | 1 | 9 | 12 | 14 | 2 | 0 | 6 | 10 | 13 | 15 | 3 | 5 | 8 | 3 | 2 | 1 | 14 | 7 | 4 | 10 | 8 | 13 | 15 | 12 | 9 | 0 | 3 | 5 | 6 | 11 |
Таблица 7 разделена на две части. Результат преобразования G(K) разбивается на две половины C0 и D0 по 28 бит каждая. Первые четыре строки матрицы G определяют, как выбираются биты последовательности C0 (первым битом C0 будет бит 57 ключа шифра, затем бит 49 и так далее, а последними битами – бит 44 и 36 ключа).
Следующие четыре строки матрицы G определяют, как выбираются биты последовательности D0 (т.е. последовательность D0 будет состоять из битов 63, 55, 47, …, 12, 4 ключа шифра). Из таблицы 7 видно, что для генерации последовательностей C0 и D0 не используются биты 8, 16, 24, 32, 40, 48, 56 и 64 ключа шифра. Эти биты не влияют на шифрование и могут служить для других целей, например, для контроля по четности. Таким образом, в действительности ключ шифра является 56-битовым.
После определения C0 и D0 рекурсивно определяются Ci и Di, i = 1, 2, …, 16. Для этого применяются операции циклического сдвига влево на один или два бита в зависимости от номера шага итерации, как показано в табл. 8.
Таблица 8.
Таблица сдвигов si для вычисления ключа. Номер итерации | Количество si сдвигов влево, бит | Номер итерации | Количество si, сдвигов влево, бит | 1 | 1 | 9 | 1 | 2 | 1 | 10 | 2 | 3 | 2 | 11 | 2 | 4 | 2 | 12 | 2 | 5 | 2 | 13 | 2 | 6 | 2 | 14 | 2 | 7 | 2 | 15 | 2 | 8 | 2 | 16 | 1 |
Цикловый ключ Кi определяется по формуле Кi=H(CiDi), где функция Н задается матрицей (табл. 9). |