А.Винокуров. Серия "Энциклопедия блочных шифров".
В алгоритме DES используется сравнительно простая функция шифрования. Соответствующая схема преобразования данных приведена на рисунке 3, а схема алгоритма – на рисунке 4.
Рис. 3. Функция шифрования – схема преобразования данных.
Рис. 4. Функция шифрования – схема алгоритма.
На вход функции шифрования поступает 32-битовая половина шифруемого блока X, и 48-битовый ключевой элемент k (рис. 4, шаг 0). Сначала 32-битовый блок данных расширяется до 48 битов дублированием некоторых двоичных разрядов согласно приведенной ниже таблице (E, шаг 1). Затем полученный расширенный блок побитово суммируется по модулю 2 с ключевым элементом (операция "", шаг 2). Полученный в результате суммирования 48-битовый блок данных разделяется на восемь 6-битовых элементов данных, обозначенных h1,h2,…,h8 соответственно, причем h1 содержит шесть самых старших битов 48-битового блока, h2 – шесть следующих по старшинству битов и т.д., наконец, h8 – шесть самых младших битов блока. Далее каждое из значений hi преобразуется в новое 4-битовое значение ti с помощью соответствующего узла замен (Si, шаг 3). После этого полученные восемь 4-битовых элементов данных вновь объединяются в 32-битовый блок T' в том же самом порядке их старшинства (шаг 4). Наконец, в полученном 32-битовом блоке выполняется перестановка битов (P, шаг 5), заданная в приведенной ниже таблице. Результат последней операции и является выходным значением функции шифрования.
132 | 21 | 32 | 43 | 54 | 65 | h1 |
470 | 4631 | 4530 | 4429 | 4328 | 4227 |
74 | 85 | 96 | 107 | 118 | 129 | h2 |
4128 | 4027 | 3926 | 3825 | 3724 | 3623 |
138 | 149 | 1510 | 1611 | 1712 | 1813 | h3 |
3524 | 3423 | 3322 | 3221 | 3120 | 3019 |
1912 | 2013 | 2114 | 2215 | 2316 | 2417 | h4 |
2920 | 2819 | 2718 | 2617 | 2516 | 2415 |
2516 | 2617 | 2718 | 2819 | 2920 | 3021 | h5 |
2316 | 2215 | 2114 | 2013 | 1912 | 1811 |
3120 | 3221 | 3322 | 3423 | 3524 | 3625 | h6 |
1712 | 1611 | 1510 | 149 | 138 | 127 |
3724 | 3825 | 3926 | 4027 | 4128 | 4229 | h7 |
118 | 107 | 96 | 85 | 74 | 63 |
4328 | 4429 | 4530 | 4631 | 4732 | 481 | h8 |
54 | 43 | 32 | 21 | 10 | 031 |
Нумерация битов в оригинале DES |
Нумерация битов в Intel x86 |
Данная схема расширения просто дублирует пары битов (32-1, 4-5, 8-9,…,28-29) и может быть представлена следующим выражением:
xi = Lo6(4i+1(X)),
где Lon(X) определено выше, а n(X) обозначает функцию, возвращающую в качестве результата свой аргумент X, циклически сдвинутый на n битов влево (в сторону старших разрядов).
Замена 6-битовых блоков на 4-битовые выполняется следующим образом: каждый узел замен представляется таблицей (матрицей) размера 416, содержащей 4-битовые элементы, все элементы в каждой из строк – различные. Заменяемое 6-битовое значение разделяется на две части: из старшего и младшего битов блока составляется двухбитовое целое, принимающее значение от 0 до 3, оно используется в качестве номера строки, средние четыре бита интерпретируются как целое число в диапазоне 0..15, они задают номер столбца. Из найденной таким образом ячейки таблицы выбирается 4-битовый элемент, который и является результатом операции замены. Узлы замен алгоритма определяются следующими таблицами, в которых 4-битовые заменяющие коды для краткости приведены в десятичной системе.
Указанный способ представления процедуры подстановки раскрывает некоторые достаточно тонкие свойства узлов замен, однако для программной реализации операция может быть описана более просто: каждый узел замены представляется в виде линейного массива (вектора) из 64 4-битовых элементов:
Si = (si,0,si,1,si,2,…,si,63),
|si,j| = 4,
si,j{0,1,2,…,15},.
Замена состоит в простой выборке элемента массива по его индексу, в качестве которого выступает заменяемый 6-битовый элемент данных, интерпретируемый как целое от 0 до 63:
Si(x) = si,x.
В этом случае нет необходимости проводить дополнительные манипуляции с битами, конструируя номер строки и номер столбца узла замены. Узлы замен алгоритма, представленные в форме, удобной для программной реализации, определяются следующими таблицами.
116 | 27 | 320 | 421 | 529 | 612 | 728 | 817 | старший байт | 3116 | 3025 | 2912 | 2811 | 273 | 2620 | 254 | 2415 |
91 | 1015 | 1123 | 1226 | 135 | 1418 | 1531 | 1610 | 2331 | 2217 | 219 | 206 | 1927 | 1814 | 171 | 1622 | |
172 | 188 | 1924 | 2014 | 2132 | 2227 | 233 | 249 | 1530 | 1424 | 138 | 1218 | 110 | 105 | 929 | 823 | |
2519 | 2613 | 2730 | 286 | 2922 | 3011 | 314 | 3225 | младший байт | 713 | 619 | 52 | 426 | 310 | 221 | 128 | 07 |
Нумерация битов в оригинале DES |
Нумерация битов в Intel x86 |
[Список алгоритмов] [Основные характеристики] [Структура алгоритма] [Битовые перестановки] [Функция шифрования] [Узлы замен] [Ключевые элементы] [Историческая справка]
[Начало осмотра] [Что нового] [Статьи] [Выпуски в "Байтах"] [Что скачать] [Криптоалгоритмы] [Глоссарий] [Ссылки] [Гостевая книга] [Форум] [Напиши мне]
Подготовлено 24.02.01. (c) 2001 Андрей Винокуров.