Алгоритм шифрования DES – описание
Данные шифруются 64-битными блоками на основе 56-битного ключа (ключ 64-битный, но используются в нем только 56 бит). Для расшифровки используется тот же ключ. Зашифровка состоит из предварительного перемешивания, 16 одинаковых по структуре итераций и заключительного перемешивания посредством перестановки, обратной начальной.
На каждой итерации используется , строго говоря, не 56-битный ключ , а выбранные из него подключи по 48 битов каждый.
Рассмотрим алгоритм порождения подключей:
1. В цикле от 1 до 16 выполнить:
2. Ключ разделить на две части: и ; в первый поместить левые 28 битов, а во второй – правые 28 битов.
3. Прокрутить циклически влево каждый подключ на число битов, заданное в таблице и оставить из 28 битов первые 24, получив укороченные подключи и ;
4. Конкатенировать с и запомнить укороченный 48-битовый ключ ; конкатенировать и , чтобы получить полный 56-битный ключ для начала следующей итерации.
5. end
После начального перемешивания 64-битный блок делится на две половины. Правая часть без изменений переносится в левую часть следующей итерации, а левая часть предыдущей итерации подвергается четырем преобразованиям, прежде чем стать правой частью следующей итерации.
Преобразование Р2. 32 бита входного слова делятся на 8 четверок, а потом каждая четверка преобразуется в шестерку. Таким образом, входное 32-битное слово преобразуется в 48-битное.
Схема алгоритма:
где:
Text | исходный текст (блок 64 бита) |
Crypt | зашифрованный блок |
Key | 64-х разрядный ключ |
Числа | разрядность на данной ветке алгоритма |
P, Pk | перестановки |
S | подстановка 6 бит 4 бита |
L(i) | сдвиг (i - номер итерации) |
xor | сложение по модулю 2 (поразрядное сложение двоичных чисел, без переноса лишней единицы в старший разряд) |
конкатенация битовых строк, причем верхняя - спереди | |
разбиение строки на две, причем первая - наверху | |
ограниченный точками участок повторяется 16 раз |
Перестановки выполняются по обычной формуле D[i]=S[P[i]], где
S | исходная строка (массив символов, нумерация с единицы) |
D | результат перестановки (массив символов, нумерация с единицы) |
P | таблица перестановок (массив индексов в строке S) |
S - подстановка 6 4. 48-битный результат предыдущей операции делится на 8 шестерок, и каждая шестерка преобразуется в четверку по своей таблице. Каждая из таблиц S1, S2, …, S8 состоит из 16-тиричных (то есть 4-битовых) чисел, содержит 4 строки с номерами 0, 1, 2, 3 и 16 столбцов с номерами 0, 1, 2, …, 15. Подстановка производится по следующему правилу: пусть исходная битовая строка - /abcdef/, тогда /af/ - номер строки, а /bcde/ - номер столбца. Строка и столбец определяют местонахождение результата в S-таблице. Например, при использовании таблицы S6, число 58 (111010) переводится в 13 (1101).
Помимо обычного его применения, этот алгоритм можно использовать для создания "односторонних" функций. Для этого ключ и исходный текст меняются местами: в формуле Crypt=DES(Text,Key) исходный текст может быть несекретным и фиксированным. А Crypt рассматривается как функция ключа - Key.