Исходные данные: БАНАНАПИ
Переводим полученные 8 символов в двоичный вид с помощью таблицы ASCII:
ASC II: C1 C0 CD С0 CD С0 CD С0 E8
В двоичном коде:
11101111 0000001 01010101 1010100 10101001 1111100 11101011 11111100
Над 64-битным блоком данных выполняется начальная перестановка согласно таблице:
Получаем последовательность после начальной перестановки:
11111111 00000000 01001001 01010001 11111111 00000000 00011111 10011100
Разбиваем ее на две последовательности по 32 бита:
L0=11111111 00000000 01001001 01010001
R0=11111111 00000000 00011111 10011100
Далее осуществляется 16 итераций шифрования. Пусть 1<=n<=16, тогда производятся следующие вычисления:
Ln = Rn-1
Rn = Ln-1 f(Rn-1,Kn)
Функция f() работает с 2 блоками данных: Rn-1 and Kn. В результате ее работы получается 32-битный блок данных. Процесс вычисления функции f состоит из 4х шагов:
1. Над 32-битным входом выполняется расширяющая перестановка EP. Данная операция расширяет входное значение до 48 битов для последующего сложения с ключом раунда и обеспечивает влияние «размножаемых» битов на 2 таблицы замен (описаны ниже) вместо одной, что ускоряет возникновение зависимости каждого бита шифротекста от каждого входного бита, что называется лавинным эффектом.
2. Результат предыдущего шага складывается с ключом раунда Ki операцией XOR.
3. Результат сложения разбивается на 8 фрагментов по 6 битов, каждый из которых прогоняется через соответствующую таблицу замен (S1…S8). Таблицы замен являются фиксированными и описаны в стандарте. Каждая таблица содержит по 4 строки, содержащих по 16 значений от 0 до 15. Входное значение интерпретируется следующим образом: два крайних бита формируют номер строки (от 0 до 3), из которой выбирается число, расположенное в столбце, номер которого соответствует значению четырех остальных битов входа. Например, при двоичном входе 101100 (десятичное число 44) выбирается значение шестой ячейки второй строки.
Функции преобразования S(i)
S(1)
S(2)
S(3)
S(4)
S(5)
S(6)
S(7)
S(8)
4. 4-битные значения, полученные после выполнения замен, объединяются, после чего над ними выполняется операция P, представляющая собой простую перестановку согласно следующей таблице:
В качестве ключа используем слово из 8 букв, также переведенных в двоичную форму при помощи таблицы ASCII.
Ключ шифрования: ПРИЕЗЖАЮ
Переводим полученные 8 символов в двоичный вид с помощью таблицы ASCII:
ASC II: CF D0 C8 C5 C7 C6 C0 DE
В двоичном коде:
11001111 11010000 11001000 11000101 11000111 11000110 11000000 11011110
64-х битный ключ:
Проведем процедуру извлечения 56 значащих битов из 64-битного ключа.
Выполним перестановку битов ключа согласно следующим таблицам:
56-ти битный ключ:
В результате перестановки за таблицей получаем последовательность из 56-ти бит:
1111111 1111111 1100000 0001000 1011000 1101110 0110000 1010010
Разбиваем ее на две последовательности по 28-м бит:
C0=1111111111111111000000001000
D0=1011000110111001100001010010
Выполняем 16 раундов шифрования над двумя последовательностями. Для 1, 2, 9 и 16 делаем сдвиг влево на 1 шаг, во всех остальных раундах делаем сдвиг на 2 шага.
Все последовательности, полученные при сдвиге Cn, Dn описаны в следующей таблице:
Номер итерации | Количество сдвигов | Созданные пары |
1. | C1 = 1111111111111110000000010001 D1 = 0110001101110011000010100101 | |
2. | C2 = 1111111111111100000000100011 D2 = 1100011011100110000101001010 | |
3. | C3 = 1111111111110000000010001111 D3 = 0001101110011000010100101011 | |
4. | C4 = 1111111111000000001000111111 D4 = 0110111001100001010010101100 | |
5. | C5 = 1111111100000000100011111111 D5 = 1011100110000101001010110001 | |
6. | C6 = 1111110000000010001111111111 D6 = 1110011000010100101011000110 | |
7. | C7 = 1111000000001000111111111111 D7 = 1001100001010010101100011011 | |
8. | C8 = 1100000000100011111111111111 D8 = 0110000101001010110001101110 | |
9. | C9 = 1000000001000111111111111111 D9 = 1100001010010101100011011100 | |
10. | C10 = 0000000100011111111111111110 D10 = 0000101001010110001101110011 | |
11. | C11 = 0000010001111111111111111000 D11 = 0010100101011000110111001100 | |
12. | C12 = 0001000111111111111111100000 D12 = 1010010101100011011100110000 | |
13. | C13 = 0100011111111111111110000000 D13 = 1001010110001101110011000010 | |
14. | C14 = 0001111111111111111000000001 D14 = 0101011000110111001100001010 | |
15. | C15 = 0111111111111111100000000100 D15 = 0101100011011100110000101001 | |
16. | C16 = 1111111111111111000000001000 D16 = 1011000110111001100001010010 |
До финальной перестановки битов ключей, необходимо слияние каждой пары данных. После того, как для каждого битового блока CnDn, где 1<=n<=16 осуществиться соответствующая перестановка по таблице CP, формируя ключи Kn. Только 48 бит каждой объединенной пары сохраняется в перестановленном ключе.
Объединяем в 56-битное значение последовательности, к которому применяется сжимающая перестановка, результатом которой является 48-битный ключ раунда. Сжимающая перестановка выполняется согласно следующей таблице: