Что такое алгоритм DES?

Стандарт шифрования данных (DES) — это алгоритм блочного шифрования, который принимает простой текст блоками по 64 бита и преобразует их в зашифрованный текст с использованием ключей из 48 бит. Это алгоритм с симметричным ключом, что означает, что для шифрования и дешифрования данных используется один и тот же ключ.

Шифрование и дешифрование с использованием алгоритма DES.

Этапы генерации ключей

В алгоритме 16 этапов шифрования, и для каждого используется свой ключ. круглый. Как генерируются ключи, указано ниже.

Биты помечены от 1 до 64, начиная с самого значащего бита и идя до наименьший значащий бит.

  1. Сжать и транспонировать данный 64-битный ключ в 48-битный ключ, используя следующую таблицу:
//Элементы массива обозначают номера битов int pc1 [56] = {57,49,41,33,25,17,9, 1,58,50,42,34,26,18, 10,2,  59,51,43,35,27, 19,11,3,60,52,44,36, 63,55,47,39,31,23,15, 7,62,54,46,38,30,  22, 14,6,61,53,45,37,29, 21,13,5,28,20,12,4}; 
Таблица PC-1

  1. Разделите результат на две равные части: C и D.

  2. C и D смещены влево ci обычно. Для раундов шифрования 1, 2, 9 и 16 они циклически сдвинуты влево на 1 бит; для всех остальных раундов они циклически сдвинуты влево на 2.

  3. Результат сжимается до 48 бит в соответствии со следующим правилом:

 int pc2 [48] = {14,17,11,24,1,5, 3,28,15,6,21,10, 23,19,12,4,26,8, 16,  7,27,20,13,2, 41,52,31,37,47,55, 30,40,51,45,33,48, 44,49,39,56,34,53, 46,42,  50,36,29,32}; 

Таблица PC-2
  1. Результат шага 3 — это входные данные для следующего раунда генерации ключа..

Шаги для шифрования

  1. Переставьте биты в 64-блоке в соответствии со следующим:
//58 означает, что 58-й бит следует считать//первым битом, 50-й бит вторым битом и  так далее. int initial_permutation_table [64] = {58,50,42,34,26,18,10,2, 60,52,44,36,28,20,12,4, 62,54,46,38,  30,22,14,6, 64,56,48,40,32,24,16,8, 57,49,41,33,25,17,9,1, 59,51,43,35,27,  19,11,3, 61,53,45,37,29,21,13,5, 63,55,47,39,31,23,15,7};  
начальная таблица перестановок

  1. Разделить результат на равные части: левый простой текст (1-32 бита) и правый простой текст (33-64 бита)

  2. Полученные части проходят 16 раундов шифрование в каждом раунде.

Правый простой текст раскрывается с помощью следующей таблицы расширения:

//Элементы массива обозначают номера битов int extension_table [48] = {32,  1,2,3,4,5,4,5, 6,7,8,9,8,9,10,11, 12,13,12,13,14,15,16,17, 16,17,  18,19,20,21,20,21, 22,23,24,25,24,25,26,27, 28,29,28,29,30,31,32,1};  
таблица расширения

  1. Расширенный правый простой текст теперь состоит из 48 бит и подвергается операции XOR с 48-битным ключом.

  2. Результат предыдущего шага разделен на 8 блоков. Каждая коробка содержит 6 бит. После прохождения восьми блоков подстановки каждый блок уменьшается с 6 до 4 бит. Первый и последний бит каждого блока обеспечивает индекс строки, а остальные биты предоставляют индекс столбца. Эти индексы используются для поиска значений в поле подстановки. Поле подстановки состоит из 4 строк, 16 столбцов и чисел от 0 до 15..

  3. Результат транспонируется в соответствии со следующим правилом:

//Элементы массива обозначают номера битов int permutation_table [32]  = {16,7,20,21,29,12,28,17, 1,15,23,26,5,18,31,10, 2,8,24,14,32,27,3,9,  19,13,30,6,22,11,4,25}; 

Таблица перестановок
  1. Выполните операцию XOR левой половины с результатом из предыдущего шага. Сохраните это в правом простом тексте.

  2. Сохраните исходный правый простой текст в левом простом тексте.

  3. Эти половинки являются исходными данными для следующего раунда. Помните, что для каждого раунда существуют разные ключи.

  4. После 16 раундов шифрования поменяйте местами левый простой текст и правый простой текст.

  5. Наконец, примените обратную перестановку (обратную исходной перестановке), и зашифрованный текст будет сгенерирован.

Шаги для расшифровки

Порядок 16 48-битных ключей меняются местами, так что ключ 16 становится ключом 1 и так далее. Затем шаги для шифрования применяются к зашифрованному тексту.

Оцените статью
nanomode.ru
Добавить комментарий