А.Винокуров. Серия "Энциклопедия блочных шифров".
В алгоритме 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 |
|
470 | 4631 | 4530 | 4429 | 4328 | 4227 |
74 | 85 | 96 | 107 | 118 | 129 |
|
4128 | 4027 | 3926 | 3825 | 3724 | 3623 |
138 | 149 | 1510 | 1611 | 1712 | 1813 |
|
3524 | 3423 | 3322 | 3221 | 3120 | 3019 |
1912 | 2013 | 2114 | 2215 | 2316 | 2417 |
|
2920 | 2819 | 2718 | 2617 | 2516 | 2415 |
2516 | 2617 | 2718 | 2819 | 2920 | 3021 |
|
2316 | 2215 | 2114 | 2013 | 1912 | 1811 |
3120 | 3221 | 3322 | 3423 | 3524 | 3625 |
|
1712 | 1611 | 1510 | 149 | 138 | 127 |
3724 | 3825 | 3926 | 4027 | 4128 | 4229 |
|
118 | 107 | 96 | 85 | 74 | 63 |
4328 | 4429 | 4530 | 4631 | 4732 | 481 |
|
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 Андрей Винокуров.