Тепер розглянемо функцію шифрування f (R (i - 1), K (i)). Схематично вона показана на малюнку 6.
Малюнок 6 - Обчислення функції f (R (i - 1), K (i))
Для обчислення значення функції f використовуються наступні функції-матриці:
· Е - розширення 32-бітової послідовності до 48-бітової,
· S1, S2, ..., S8 - перетворення 6-бітового блоку в 4-бітовий,
· Р - перестановка біт в 32-бітової послідовності.
Функція розширення Е визначається таблицею 1.3. Відповідно з цією таблицею перші 3 біта Е (R (i - 1)) - це біти 32, 1 і 2, а останні - 31, 32 і 1.
Таблиця 1.3 - Функція розширення E
Результат функції Е (R (i - 1)) є 48-бітова послідовність, яка складається по модулю 2 (операція xor) з 48-бітовим ключем К (i). Виходить 48-бітова послідовність, яка розбивається на вісім 6-бітових блоків B (1) B (2) B (3) B (4) B (5) B (6) B (7) B (8). Тобто: E (R (i - 1)) xor K (i)=B (1) B (2) ... B (8).
Функції S1, S2, ..., S8 визначаються таблиці 1.4.
Таблиця 1.4 - Функції перетворення S1, S2, ..., S8
До таблиці 1.4. потрібні додаткові пояснення. Нехай на вхід функції-матриці Sj надходить 6-бітовий блок B (j)=b1b2b3b4b5b6, тоді двухбітовий число b1b6 вказує номер рядка матриці, а b2b3b4b5 - номер стовпця. Результатом Sj (B (j)) буде 4-бітовий елемент, розташований на перетині зазначених рядка і стовпчика. Наприклад, В (1)=011011. Тоді S1 (В (1)) розташований на перетині рядка 1 і шпальти 13. У стовпці 13 рядка 1 задано значення 5. Значить, S1 (011011)=0101. Застосувавши операцію вибору до кожного з 6-бітових блоків B (1), B (2), ..., B (8), отримуємо 32-бітову послідовність S1 (B (1)) S2 (B (2)) S3 ( B (3)) ... S8 (B (8)). Нарешті, для отримання результату функції шифрування треба переставити біти цієї послідовності. Для цього застосовується функція перестановки P (таблиця 1.5). У вхідній послідовності біти переставляється так, щоб біт 16 став бітом 1, а біт 7 - бітом 2 і т.д.
Таблиця 1.5 - Функція перестановки P
Таким чином,
(R (i - 1), K (i))=P (S1 (B (1)), ... S8 (B (8)))
Щоб завершити опис алгоритму шифрування даних, залишилося привести алгоритм отримання 48-бітових ключів К (i), i=1 ... 16. На кожній ітерації використовується нове значення ключа K (i), яке обчислюється з початкового ключа K. K являє собою 64-бітову блок з вісьмома бітами контролю по парності, розташованими в позиціях 8,16,24,32,40,48,56, 64. Для видалення контрольних бітів і перестановки інших використовується функція G початкової підготовки ключа.
Таблиця 1.6 - Матриця G початкової підготовки ключа
Результат перетворення G (K) розбивається на два 28-бітових блоку C (0) і D (0), причому C (0) складатиметься з бітів 57, 49, ..., 44, 36 ключа K, а D (0) складатиметься з бітів 63, 55, ..., 12, 4 ключа K. Після визначення C (0) і D (0) рекурсивно визначаються C (i) і D (i), i=1 ... 16.
Для цього застосовують циклічний зсув вліво на один або два біти в залежності від номера ітерації, як показано в таблиці 1.7.
<...