Data Encryption Standard
![]() | |
Розробники | IBM |
---|---|
Уперше оприлюднений | 1975 р. |
Раундів | 16 |
Тип | Мережа Фейстеля |
DES (англ. Data Encryption Standard) — це симетричний алгоритм шифрування даних, стандарт шифрування прийнятий урядом США із 1976 до кінця 1990-х, з часом набув міжнародного застосування. Ще з часу свого розроблення алгоритм викликав неоднозначні відгуки. Оскільки DES містив засекречені елементи своєї структури, породжувались побоювання щодо можливості контролю з боку Національного Агенства Безпеки США (англ. National Security Agency). Алгоритм піддавався критиці за малу довжину ключа, що, врешті, після бурних обговорень та контролю академічної громадськості, не завадило йому стати загальноприйнятим стандартом. DES дав поштовх сучасним уявленням про блочні алгоритми шифрування та криптоаналіз.
Зараз DES вважається ненадійним в основному через малу довжину ключа (56 біт) та розмір блоку (64 біти). У 1999 ключ DES було публічно дешифровано за 22 години 15 хвилин. Вважається, що алгоритм достатньо надійний для застосування у модифікації 3-DES, хоча існують розроблені теоретичні атаки. DES поступово витісняється алгоритмом AES, що з 2002 року є стандартом США.
Строго кажучи, існує різниця між стандартом DES (Data Encryption Standard) та алгоритмом DEA (Data Encryption Algorithm).
Історія DES
Історія розробки DES сягає початку 1970-х і почалась за ініціативи Національного Бюро Стандартів США (англ. National Bureau of Standards) — тепер, Національний Інститут Стандартів і Технологій (англ. National Institute of Standards and Technology) — для забезпечення безпеки урядових засекречених даних. 15 травня 1973, після консультування із Національним Бюром Безпеки США, НБС оголосило конкурс на розробку алгоритму шифрування який би відповідав поставленим строгим архітектурним вимогам, однак, таких пропозицій не надійшло. Лише на другий конкурс 27 серпня 1974 IBM подала розробку яка задовільняла поставленим вимогам — алгоритм, розроблений в період 1973–1974, в основу якого був покладений шифр Хорста Фейстеля Люцифер.
Хронологія
Дата | Рік | Подія |
---|---|---|
15 травня | 1973 | Національне Бюро Стандартів (НБС) США опублікувало перший запит на стандарт алгоритму шифрування. Ніхто не відреагував |
27 серпня | 1974 | НБС опублікувало другий запит на алгоритм шифрування. IBM подала заявку |
17 березня | 1975 | DES опубліковано у Federal Register для коментарів |
Серпень | 1976 | Перший робоча зустріч по DES |
Вересень | 1976 | Друга робоча група, обговорення математичного підгрунтя DES |
Листопад | 1976 | DES погоджено як стандарт |
15 січня | 1977 | DES опубліковано як стандарт FIPS PUB 46 |
1983 | DES знову підтверджується як стандарт | |
22 січня | 1988 | DES вдруге підтверджується як стандарт (FIPS 46-1) |
Липень | 1990 | Біхем і Шамір заново відкривають диференціальний криптоаналіз, і застосовують його до 15-раундової DES-подібної криптосистеми. |
1992 | Біхем і Шамір описують теоретичну атаку із меншою часовою складністю ніж повний перебір: диференціальний криптоаналіз. Однак, для її успішності необхідно 247 незашифрованих даних. | |
30 грудня | 1993 | DES втретє підтверджується як стандарт (FIPS 46-2) |
1994 | Вперше проведено експериментальний криптоаналіз DES використовуючи лінійний криптоаналіз (Matsui, 1994). | |
червень | 1997 | Вперше публічно зломано зашифроване повідомлення DES. Проект DESCHALL |
липень | 1998 | EFF's DES cracker (Deep Crack) дешифрує ключ DES за 56 годин. |
січень | 1999 | Разом Deep Crack та distributed.net дешифрують ключ DES за 22 години 15 хвилин. |
25 жовтня | 1999 | DES вчетверте підтверджується як стандарт (FIPS 46-3), в якому зазначено, що надавати перевагу слід 3-DES. |
26 листопада | 2001 | AES опубліковано як стандарт (FIPS 197) |
26 травня | 2002 | AES вступає в силу |
Опис алгоритму
DES є блочним шифром - дані шифруються блоками по 64 біти - 64 бітний блок явного тексту подається на вход алгоритму, а 64-бітний блок шифрограми отримується в результаті роботи алгоритму. Крім того, як під час шифрування, так і під час дешифрування використовується один і той самий алгоритм (за винятком дещо іншого шляху утворення робочих ключів).
Ключ має довжину 56 біт (як правило, в джерельному вигляді ключ має довжину 64 біти, де кожний 8-й біт є бітом паритету, крім того, ці контрольні біти можуть бути винесені в останній байт ключа). Ключем може бути довільна 64-бітна комбінація, яка може бути змінена у будь-який момент часу. Частина цих комбінацій вважається слабкими ключами, оскільки може бути легко визначена. Безпечність алгоритму базується на безпечності ключа.
На найнижчому рівні алгоритм є ніщо інше, ніж поєднання двох базовних технік шифрування: перемішування і підстановки. Цикл алгоритму, з яких і складається DES є комбінацією цих технік, коли в якості об'єктів перемішування виступають біти тексту, ключа і блоків підстановок.
Початкова перестановка
На вході подаються 64-бітний блок даних, які переставляються згідно таблиці:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 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 |
16 раундів
Далі 16 разів повтроюються наступні операції:
Функція розширення блоку
Функция Е расширює 32-бітовий вектор до 48-бітового вектора шляхом повторення деяких біт з згідно таблиці:
_ | 1 | 2 | 3 | 4 | _ | _ | 5 | 6 | 7 | 8 | _ | _ | 9 | 10 | 11 | 12 | _ | _ | 13 | 14 | 15 | 16 | _ | _ | 17 | 18 | 19 | 20 | _ | _ | 21 | 22 | 23 | 24 | _ | _ | 25 | 26 | 27 | 28 | _ | _ | 29 | 30 | 31 | 32 | _ |
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 |
Перший рядок - номери вхідних біт, другий рядок - вихідні біти. Повторення номерів, одначає повторення біт.
Додавання раундового ключа
Блок 48 біт XOR'иться з раундовим ключем .
Таблиці підстановки
S-бокси мають вигляд:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 14 | 4 | 13 | 1 | 2 | 15 | 11 | 8 | 3 | 10 | 6 | 12 | 5 | 9 | 0 | 7 | |
1 | 0 | 15 | 7 | 4 | 14 | 2 | 13 | 1 | 10 | 6 | 12 | 11 | 9 | 5 | 3 | 8 | |
2 | 4 | 1 | 14 | 8 | 13 | 6 | 2 | 11 | 15 | 12 | 9 | 7 | 3 | 10 | 5 | 0 | |
3 | 15 | 12 | 8 | 2 | 4 | 9 | 1 | 7 | 5 | 11 | 3 | 14 | 10 | 0 | 6 | 13 | |
0 | 15 | 1 | 8 | 14 | 6 | 11 | 3 | 4 | 9 | 7 | 2 | 13 | 12 | 0 | 5 | 10 | |
1 | 3 | 13 | 4 | 7 | 15 | 2 | 8 | 14 | 12 | 0 | 1 | 10 | 6 | 9 | 11 | 5 | |
2 | 0 | 14 | 7 | 11 | 10 | 4 | 13 | 1 | 5 | 8 | 12 | 6 | 9 | 3 | 2 | 15 | |
3 | 13 | 8 | 10 | 1 | 3 | 15 | 4 | 2 | 11 | 6 | 7 | 12 | 0 | 5 | 14 | 9 | |
0 | 10 | 0 | 9 | 14 | 6 | 3 | 15 | 5 | 1 | 13 | 12 | 7 | 11 | 4 | 2 | 8 | |
1 | 13 | 7 | 0 | 9 | 3 | 4 | 6 | 10 | 2 | 8 | 5 | 14 | 12 | 11 | 15 | 1 | |
2 | 13 | 6 | 4 | 9 | 8 | 15 | 3 | 0 | 11 | 1 | 2 | 12 | 5 | 10 | 14 | 7 | |
3 | 1 | 10 | 13 | 0 | 6 | 9 | 8 | 7 | 4 | 15 | 14 | 3 | 11 | 5 | 2 | 12 | |
0 | 7 | 13 | 14 | 3 | 0 | 6 | 9 | 10 | 1 | 2 | 8 | 5 | 11 | 12 | 4 | 15 | |
1 | 13 | 8 | 11 | 5 | 6 | 15 | 0 | 3 | 4 | 7 | 2 | 12 | 1 | 10 | 14 | 9 | |
2 | 10 | 6 | 9 | 0 | 12 | 11 | 7 | 13 | 15 | 1 | 3 | 14 | 5 | 2 | 8 | 4 | |
3 | 3 | 15 | 0 | 6 | 10 | 1 | 13 | 8 | 9 | 4 | 5 | 11 | 12 | 7 | 2 | 14 | |
0 | 2 | 12 | 4 | 1 | 7 | 10 | 11 | 6 | 8 | 5 | 3 | 15 | 13 | 0 | 14 | 9 | |
1 | 14 | 11 | 2 | 12 | 4 | 7 | 13 | 1 | 5 | 0 | 15 | 10 | 3 | 9 | 8 | 6 | |
2 | 4 | 2 | 1 | 11 | 10 | 13 | 7 | 8 | 15 | 9 | 12 | 5 | 6 | 3 | 0 | 14 | |
3 | 11 | 8 | 12 | 7 | 1 | 14 | 2 | 13 | 6 | 15 | 0 | 9 | 10 | 4 | 5 | 3 | |
0 | 12 | 1 | 10 | 15 | 9 | 2 | 6 | 8 | 0 | 13 | 3 | 4 | 14 | 7 | 5 | 11 | |
1 | 10 | 15 | 4 | 2 | 7 | 12 | 9 | 5 | 6 | 1 | 13 | 14 | 0 | 11 | 3 | 8 | |
2 | 9 | 14 | 15 | 5 | 2 | 8 | 12 | 3 | 7 | 0 | 4 | 10 | 1 | 13 | 11 | 6 | |
3 | 4 | 3 | 2 | 12 | 9 | 5 | 15 | 10 | 11 | 14 | 1 | 7 | 6 | 0 | 8 | 13 | |
0 | 4 | 11 | 2 | 14 | 15 | 0 | 8 | 13 | 3 | 12 | 9 | 7 | 5 | 10 | 6 | 1 | |
1 | 13 | 0 | 11 | 7 | 4 | 9 | 1 | 10 | 14 | 3 | 5 | 12 | 2 | 15 | 8 | 6 | |
2 | 1 | 4 | 11 | 13 | 12 | 3 | 7 | 14 | 10 | 15 | 6 | 8 | 0 | 5 | 9 | 2 | |
3 | 6 | 11 | 13 | 8 | 1 | 4 | 10 | 7 | 9 | 5 | 0 | 15 | 14 | 2 | 3 | 12 | |
0 | 13 | 2 | 8 | 4 | 6 | 15 | 11 | 1 | 10 | 9 | 3 | 14 | 5 | 0 | 12 | 7 | |
1 | 1 | 15 | 13 | 8 | 10 | 3 | 7 | 4 | 12 | 5 | 6 | 11 | 0 | 14 | 9 | 2 | |
2 | 7 | 11 | 4 | 1 | 9 | 12 | 14 | 2 | 0 | 6 | 10 | 13 | 15 | 3 | 5 | 8 | |
3 | 2 | 1 | 14 | 7 | 4 | 10 | 8 | 13 | 15 | 12 | 9 | 0 | 3 | 5 | 6 | 11 |
"Розширені" біти використовуються для визначення номера 0-1-2-3 таблиці (ліва колонка).
Перестановка
Далі виконується перестановка
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 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 |
XOR лівої і правої частин
За формулою отримуємо значення .
Кінцева перестановка
Після 16-ти раундів застосовуюєть перестановка біт:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 |
40 | 8 | 48 | 16 | 56 | 24 | 64 | 32 | 39 | 7 | 47 | 15 | 55 | 23 | 63 | 31 | 38 | 6 | 46 | 14 | 54 | 22 | 62 | 30 | 37 | 5 | 45 | 13 | 53 | 21 | 61 | 29 | 36 | 4 | 44 | 12 | 52 | 20 | 60 | 28 | 35 | 3 | 43 | 11 | 51 | 19 | 59 | 27 | 34 | 2 | 42 | 10 | 50 | 18 | 58 | 26 | 33 | 1 | 41 | 9 | 49 | 17 | 57 | 25 |
Вхідний перший біт ставить на місце номер 40, другий біт на місце номер 8 і т.д.
В DES використовується 16 циклів, вихідними даними для кожного з них 64 є біти відкритого тексту (на вході першого раунду) чи 64 біти з результату роботи попереднього раунду (у всіх наступних), ключ і блоки підстановок.
Алгоритм використовує лише стандартні елементарні логічні операції (зсув, сума по модулю два(XOR)) на числах довжиною 64 біти, що значно полегшує програмування алгоритму і прискорює його роботу у інтегральних мікросхемах. Циклічний характер алгоритму в сумі з ідеальною здатністю до запрограмовування робить алгоритм швидким і легким до розуміння.
Розширення ключа (генерація раундових ключів )
Ключі отримують з початкового ключа k (64 біт = 8 байтів або 8 символів в ASCII) наступним чином. Вісім бітів, що знаходять в позиціях 8, 16, 24, 32, 40, 48, 56, 64 додаються в ключ k таким чином щоб кожен байт містив непарне число одиниць. Це використовується для виявлення помилок при обміні і зберіганні ключів. Потім роблять перестановку для розширеного ключа (крім доданих бітів номер 8, 16, 24, 32, 40, 48, 56, 64). Така перестановка визначена в таблиці 5.
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 |
Ця перестановка визначається двома блоками і по 28 біт кожен. Перші 3 біта є біти 57, 49, 41 розширеного ключа. А перші три біта є біти 63, 55, 47 розширеного ключа.
Для раундів i = 1,2,3 ... отримують з одним або двома лівими циклічними зрушеннями згідно з таблицею:
i-й раунд | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Число зсувів | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 2 | 1 | 2 | 2 | 2 | 2 | 2 | 2 | 1 |
Ключ , i = 1, ... 16 складається з 48 біт, вибраних з бітів вектора (56 біт) згідно з приведеною нижче таблицею. Перший і другий біти є біти 14, 17 вектора
i-й біт раундового ключа | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |
номери біт 3 векторів | 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 |
Біти номер 1-48 використовують для раундового XORу.
Приклад роботи алгоритму
Для ключа 00 00 00 00 00 00 00 00 (НЕХ)
та тексту 00 00 00 00 00 00 00 00 (НЕХ)
Результати шифрування вiдкритого тексту ключем
8C A6 4D E9 C1 B1 23 A7 (НЕХ)
(test vector 8ca64de9c1b123a7)
Детальний приклад
Key = FEDCBA9876543210
111101001111110110011000011001001011011001011010 < Key i =1
100101100101100110100110110110101001010111011001 < Key i =2
101110100010101101110101010010111101011100101101 < Key i =3
100011010111011000101101010110100111110110101000 < Key i =4
110000110001011111111100111010000101100100111101 < Key i =5
110111001101101011100001110000110111101010111010 < Key i =6
100100111111101101101010111101010001101100111001 < Key i =7
101010000111011111000111100100110001101001111110 < Key i =8
001111110011011000010110110110010100011111000110 < Key i =9
011011100001110011111000100111001110001010001101 < Key i =10
110111101110000001111100111100100111011011000101 < Key i =11
100011101100111100011010101110101010001110101011 < Key i =12
011011100011101100101111101101100111111100000011 < Key i =13
101010111011110001001001011111100010001101110010 < Key i =14
010010010110111011111010111101011110100101001010 < Key i =15
001101011100001011111100010001111000111111001101 < Key i =16
InData = 0123456789ABCDEF
des===============
0000000100100011010001010110011110001001101010111100110111101111 crypt InData
1100110000000000110011001111111111110000101010101111000010101010 crypt IP InData
des-------------------
round =1
11001100000000001100110011111111 r=1 Li0
11110000101010101111000010101010 r=1 Ri0
11110000101010101111000010101010 r=1 Li1
0-1111-01-0000-10-10101010101011110100001010101010101 r=1 R1expand
100011101110100011001101000111101010001100001111 r=1 = R1 хоr K
Si=1 n=3 вхід =1 вихід =12
Si=2 n=2 вхід =7 вихід =1
Si=3 n=3 вхід =1 вихід =10
Si=4 n=1 вхід =6 вихід =0
Si=5 n=1 вхід =3 вихід =12
Si=6 n=2 вхід =5 вихід =8
Si=7 n=0 вхід =6 вихід =8
Si=8 n=1 вхід =7 вихід =4
11000001101000001100100010000100 r=1 = R1 після S-box
00010001100001001100000100100101 r=1 = R0 після P
11011101100001000000110111011010 r=1 = L0 xor R0
11110000101010101111000010101010 r=1 = L
11011101100001000000110111011010 r=1 = R
des===============
round =2
11110000101010101111000010101010 r=2 Li0
11011101100001000000110111011010 r=2 Ri0
11011101100001000000110111011010 r=2 Li1
0-1101-11-1101-11-10000001000000001011011111011110101 r=2 R1expand
111110011110010110101110110111110010101100101100 r=2 = R1 хоr K
Si=1 n=2 вхід =15 вихід =0
Si=2 n=0 вхід =15 вихід =10
Si=3 n=0 вхід =11 вихід =7
Si=4 n=2 вхід =7 вихід =13
Si=5 n=3 вхід =11 вихід =9
Si=6 n=2 вхід =9 вихід =0
Si=7 n=2 вхід =6 вихід =7
Si=8 n=2 вхід =6 вихід =14
00001010011111011001000001111110 r=2 = R1 після S-box
11101111000110110001010001100100 r=2 = R0 після P
00011111101100011110010011001110 r=2 = L0 xor R0
11011101100001000000110111011010 r=2 = L
00011111101100011110010011001110 r=2 = R
des===============
round =3
11011101100001000000110111011010 r=3 Li0
00011111101100011110010011001110 r=3 Ri0
00011111101100011110010011001110 r=3 Li1
0-0001-11-1111-11-10110100011111100001001011001011100 r=3 R1expand
101101011101011011010110101110110100000101110001 r=3 = R1 хоr K
Si=1 n=3 вхід =6 вихід =1
Si=2 n=1 вхід =14 вихід =11
Si=3 n=1 вхід =13 вихід =11
Si=4 n=0 вхід =11 вихід =5
Si=5 n=2 вхід =7 вихід =8
Si=6 n=2 вхід =10 вихід =4
Si=7 n=1 вхід =2 вихід =11
Si=8 n=3 вхід =8 вихід =15
00011011101101011000010010111111 r=3 = R1 після S-box
11001111000010100101110100101111 r=3 = R0 після P
00010010100011100101000011110101 r=3 = L0 xor R0
00011111101100011110010011001110 r=3 = L
00010010100011100101000011110101 r=3 = R
des===============
round =4
00011111101100011110010011001110 r=4 Li0
00010010100011100101000011110101 r=4 Ri0
00010010100011100101000011110101 r=4 Li1
1-0001-01-0010-10-10001011100001010100001011110101010 r=4 R1expand
000001110010001001110001011100000110101000000010 r=4 = R1 хоr K
Si=1 n=1 вхід =0 вихід =0
Si=2 n=2 вхід =9 вихід =8
Si=3 n=1 вхід =4 вихід =3
Si=4 n=3 вхід =8 вихід =9
Si=5 n=0 вхід =14 вихід =14
Si=6 n=0 вхід =3 вихід =15
Si=7 n=2 вхід =4 вихід =12
Si=8 n=0 вхід =1 вихід =2
00001000001110011110111111000010 r=4 = R1 після S-box
10010101001111100010000011001101 r=4 = R0 після P
10001010100011111100010000000011 r=4 = L0 xor R0
00010010100011100101000011110101 r=4 = L
10001010100011111100010000000011 r=4 = R
des===============
round =5
00010010100011100101000011110101 r=5 Li0
10001010100011111100010000000011 r=5 Ri0
10001010100011111100010000000011 r=5 Li1
1-1000-10-1010-10-10001011111111000001000000000000111 r=5 R1expand
000001100100001110100011000010001101100100111010 r=5 = R1 хоr K
Si=1 n=1 вхід =0 вихід =0
Si=2 n=2 вхід =2 вихід =7
Si=3 n=0 вхід =7 вихід =5
Si=4 n=3 вхід =1 вихід =15
Si=5 n=0 вхід =1 вихід =12
Si=6 n=1 вхід =6 вихід =9
Si=7 n=2 вхід =2 вихід =11
Si=8 n=2 вхід =13 вихід =3
00000111010111111100100110110011 r=5 = R1 після S-box
11010111010001110111110001010001 r=5 = R0 після P
11000101110010010010110010100100 r=5 = L0 xor R0
10001010100011111100010000000011 r=5 = L
11000101110010010010110010100100 r=5 = R
des===============
round =6
10001010100011111100010000000011 r=6 Li0
11000101110010010010110010100100 r=6 Ri0
11000101110010010010110010100100 r=6 Li1
0-1100-00-0101-11-11001010010100101011001010100001001 r=6 R1expand
101111000110010010110011010101101110111110110011 r=6 = R1 хоr K
Si=1 n=3 вхід =7 вихід =7
Si=2 n=0 вхід =3 вихід =14
Si=3 n=0 вхід =9 вихід =13
Si=4 n=3 вхід =9 вихід =4
Si=5 n=1 вхід =10 вихід =15
Si=6 n=2 вхід =7 вихід =3
Si=7 n=2 вхід =15 вихід =2
Si=8 n=3 вхід =9 вихід =12
01111110110101001111001100101100 r=6 = R1 після S-box
01101101001011011011011110110010 r=6 = R0 після P
11100111101000100111001110110001 r=6 = L0 xor R0
11000101110010010010110010100100 r=6 = L
11100111101000100111001110110001 r=6 = R
des===============
round =7
11000101110010010010110010100100 r=7 Li0
11100111101000100111001110110001 r=7 Ri0
11100111101000100111001110110001 r=7 Li1
1-1110-00-0111-11-10100000100001110100111110110100011 r=7 R1expand
011000110000011001101110110011110110011010011010 r=7 = R1 хоr K
Si=1 n=0 вхід =12 вихід =5
Si=2 n=2 вхід =8 вихід =5
Si=3 n=1 вхід =12 вихід =12
Si=4 n=2 вхід =7 вихід =13
Si=5 n=3 вхід =9 вихід =15
Si=6 n=2 вхід =11 вихід =10
Si=7 n=0 вхід =13 вихід =10
Si=8 n=0 вхід =13 вихід =0
01010101110011011111101010100000 r=7 = R1 після S-box
10110001001001011101010111010011 r=7 = R0 після P
01110100111011001111100101110111 r=7 = L0 xor R0
11100111101000100111001110110001 r=7 = L
01110100111011001111100101110111 r=7 = R
des===============
round =8
11100111101000100111001110110001 r=8 Li0
01110100111011001111100101110111 r=8 Ri0
01110100111011001111100101110111 r=8 Li1
1-0111-01-0100-10-11101011001011111110010101110101110 r=8 R1expand
000100101110000010011110111011000011000111010000 r=8 = R1 хоr K
Si=1 n=0 вхід =2 вихід =13
Si=2 n=2 вхід =7 вихід =1
Si=3 n=0 вхід =1 вихід =0
Si=4 n=0 вхід =15 вихід =15
Si=5 n=3 вхід =13 вихід =4
Si=6 n=1 вхід =1 вихід =15
Si=7 n=1 вхід =3 вихід =7
Si=8 n=0 вхід =8 вихід =10
11010001000011110100111101111010 r=8 = R1 після S-box
10011010111101101111010001001010 r=8 = R0 після P
01111101010101001000011111111011 r=8 = L0 xor R0
01110100111011001111100101110111 r=8 = L
01111101010101001000011111111011 r=8 = R
des===============
round =9
01110100111011001111100101110111 r=9 Li0
01111101010101001000011111111011 r=9 Ri0
01111101010101001000011111111011 r=9 Li1
1-0111-11-1101-01-01010101001010000001111111111110110 r=9 R1expand
100000001001110010111111100110011011100000110000 r=9 = R1 хоr K
Si=1 n=2 вхід =0 вихід =4
Si=2 n=1 вхід =4 вихід =15
Si=3 n=2 вхід =9 вихід =1
Si=4 n=3 вхід =15 вихід =14
Si=5 n=2 вхід =3 вихід =11
Si=6 n=1 вхід =13 вихід =11
Si=7 n=2 вхід =0 вихід =1
Si=8 n=2 вхід =8 вихід =0
01001111000111101011101100010000 r=9 = R1 після S-box
01110111011010001111000011010000 r=9 = R0 після P
00000011100001000000100110100111 r=9 = L0 xor R0
01111101010101001000011111111011 r=9 = L
00000011100001000000100110100111 r=9 = R
des===============
round =10
01111101010101001000011111111011 r=10 Li0
00000011100001000000100110100111 r=10 Ri0
00000011100001000000100110100111 r=10 Li1
1-0000-00-0011-11-10000001000000001010011110100001110 r=10 R1expand
111011100110000011110000100110011101111110000011 r=10 = R1 хоr K
Si=1 n=3 вхід =13 вихід =0
Si=2 n=2 вхід =3 вихід =11
Si=3 n=1 вхід =1 вихід =7
Si=4 n=2 вхід =8 вихід =15
Si=5 n=2 вхід =3 вихід =11
Si=6 n=1 вхід =14 вихід =3
Si=7 n=2 вхід =15 вихід =2
Si=8 n=1 вхід =1 вихід =15
00001011011111111011001100101111 r=10 = R1 після S-box
11101101011010110111110011100100 r=10 = R0 після P
10010000001111111111101100011111 r=10 = L0 xor R0
00000011100001000000100110100111 r=10 = L
10010000001111111111101100011111 r=10 = R
des===============
round =11
00000011100001000000100110100111 r=11 Li0
10010000001111111111101100011111 r=11 Ri0
10010000001111111111101100011111 r=11 Li1
1-1001-01-0000-00-00111111111111111110110100011111111 r=11 R1expand
000101001110000110000011000011010001111000111010 r=11 = R1 хоr K
Si=1 n=1 вхід =2 вихід =7
Si=2 n=0 вхід =7 вихід =4
Si=3 n=0 вхід =3 вихід =14
Si=4 n=1 вхід =1 вихід =8
Si=5 n=1 вхід =1 вихід =11
Si=6 n=1 вхід =8 вихід =6
Si=7 n=2 вхід =12 вихід =0
Si=8 n=2 вхід =13 вихід =3
01110100111010001011011000000011 r=11 = R1 після S-box
00100001001000111000101111011110 r=11 = R0 після P
00100010101001111000001001111001 r=11 = L0 xor R0
10010000001111111111101100011111 r=11 = L
00100010101001111000001001111001 r=11 = R
des===============
round =12
10010000001111111111101100011111 r=12 Li0
00100010101001111000001001111001 r=12 Ri0
00100010101001111000001001111001 r=12 Li1
1-0010-00-0010-10-10100001111110000000100001111110010 r=12 R1expand
000111101001101000010101011110101110000001011001 r=12 = R1 хоr K
Si=1 n=1 вхід =3 вихід =4
Si=2 n=3 вхід =4 вихід =3
Si=3 n=2 вхід =4 вихід =8
Si=4 n=1 вхід =10 вихід =2
Si=5 n=0 вхід =15 вихід =9
Si=6 n=2 вхід =7 вихід =3
Si=7 n=1 вхід =0 вихід =13
Si=8 n=1 вхід =12 вихід =0
01000011100000101001001111010000 r=12 = R1 після S-box
01100011011100001110000100000001 r=12 = R0 після P
11110011010011110001101000011110 r=12 = L0 xor R0
00100010101001111000001001111001 r=12 = L
11110011010011110001101000011110 r=12 = R
des===============
round =13
00100010101001111000001001111001 r=13 Li0
11110011010011110001101000011110 r=13 Ri0
11110011010011110001101000011110 r=13 Li1
0-1111-01-0011-01-01001011110100011110100000011111101 r=13 R1expand
000101000101000101110001001110010011111111111110 r=13 = R1 хоr K
Si=1 n=1 вхід =2 вихід =7
Si=2 n=1 вхід =2 вихід =4
Si=3 n=1 вхід =2 вихід =0
Si=4 n=3 вхід =8 вихід =9
Si=5 n=0 вхід =7 вихід =6
Si=6 n=1 вхід =9 вихід =1
Si=7 n=3 вхід =15 вихід =12
Si=8 n=2 вхід =15 вихід =8
01110100000010010110000111001000 r=13 = R1 після S-box
10001000000101001010001011010011 r=13 = R0 після P
10101010101100110010000010101010 r=13 = L0 xor R0
11110011010011110001101000011110 r=13 = L
10101010101100110010000010101010 r=13 = R
des===============
round =14
11110011010011110001101000011110 r=14 Li0
10101010101100110010000010101010 r=14 Ri0
10101010101100110010000010101010 r=14 Li1
0-1010-10-1010-10-10110100110100100000001010101010101 r=14 R1expand
111111101110100111101111111011100011011000100111 r=14 = R1 хоr K
Si=1 n=3 вхід =15 вихід =13
Si=2 n=2 вхід =7 вихід =1
Si=3 n=3 вхід =3 вихід =0
Si=4 n=3 вхід =7 вихід =8
Si=5 n=3 вхід =13 вихід =4
Si=6 n=3 вхід =1 вихід =3
Si=7 n=0 вхід =12 вихід =5
Si=8 n=3 вхід =3 вихід =7
11010001000010000100001101010111 r=14 = R1 після S-box
00000010101101101110100001100010 r=14 = R0 після P
11110001111110011111001001111100 r=14 = L0 xor R0
10101010101100110010000010101010 r=14 = L
11110001111110011111001001111100 r=14 = R
des===============
round =15
10101010101100110010000010101010 r=15 Li0
11110001111110011111001001111100 r=15 Ri0
11110001111110011111001001111100 r=15 Li1
0-1111-01-0001-11-11111110011111110100100001111111001 r=15 R1expand
001100110101000100001001000011111010101010110011 r=15 = R1 хоr K
Si=1 n=0 вхід =6 вихід =11
Si=2 n=3 вхід =10 вихід =7
Si=3 n=0 вхід =2 вихід =9
Si=4 n=1 вхід =4 вихід =6
Si=5 n=1 вхід =1 вихід =11
Si=6 n=2 вхід =13 вихід =13
Si=7 n=2 вхід =5 вихід =3
Si=8 n=3 вхід =9 вихід =12
10110111100101101011110100111100 r=15 = R1 після S-box
01111111110000000111011110111010 r=15 = R0 після P
11010101011100110101011100010000 r=15 = L0 xor R0
11110001111110011111001001111100 r=15 = L
11010101011100110101011100010000 r=15 = R
des===============
round =16
11110001111110011111001001111100 r=16 Li0
11010101011100110101011100010000 r=16 Ri0
11010101011100110101011100010000 r=16 Li1
0-1101-01-0101-01-01110100110101010101110100010100001 r=16 R1expand
010111110110100101011010111011010110011101101100 r=16 = R1 хоr K
Si=1 n=1 вхід =11 вихід =11
Si=2 n=2 вхід =11 вихід =6
Si=3 n=3 вхід =2 вихід =13
Si=4 n=0 вхід =13 вихід =12
Si=5 n=3 вхід =13 вихід =4
Si=6 n=0 вхід =11 вихід =4
Si=7 n=1 вхід =14 вихід =8
Si=8 n=2 вхід =6 вихід =14
10110110110111000100010010001110 r=16 = R1 після S-box
01001100100001110001001101111011 r=16 = R0 після P
10111101011111101110000100000111 r=16 = L0 xor R0
11010101011100110101011100010000 r=16 = L
10111101011111101110000100000111 r=16 = R
des===============
1110110100111001110110010101000011111010011101001011110011000100
Result = ED39D950FA74BCC4
Слабкі ключі
Слабкими ключами називається ключі k такі, що , де x - 64-бітний блок.
Відомі 4 слабких ключа, вони наведені в таблиці 9. Для кожного слабкого ключа існує нерухомі точки, тобто, таких 64-бітових блоків х, для яких .
Слабкі ключі (hexadecimal) | ||
0101-0101-0101-0101 | ||
FEFE-FEFE-FEFE-FEFE | ||
1F1F-1F1F-0E0E-0E0E | ||
E0E0-E0E0-F1F1-F1F1 |
позначає вектор, що складається з 28 нульових бітів.
Наприклад, для ключа
FE FE FE FE FE FE FE FE (НЕХ)
та тексту
01 23 45 67 89 AB CD EF (НЕХ)
Результати шифрування вiдкритого тексту ключем
6D CE 0D C9 00 65 56 A3 (НЕХ)
далі, для ключа
FE FE FE FE FE FE FE FE (НЕХ)
та тексту
6D CE 0D C9 00 65 56 A3 (НЕХ)
Результати шифрування вiдкритого тексту ключем
01 23 45 67 89 AB CD EF (НЕХ)
Захист та криптоаналіз
Оскільки DES — порівняно старий криптоалгоритм, існує багато публікацій щодо його криптоаналізу. Дуже грунтовну оцінку безпеки DES дано Брюсом Шнаєром, який у своїй відомій книзі «Прикладна криптографія» розбирає та впорядковує велику кількість публікацій щодо криптоаналізу DES.
На сьогоднішній день DES вважається нестійким, оскільки:
- Розмір ключа — 56 бітів — замалий, тому існує реальна загроза пошуку ключа лобовою атакою (послідовним перебором).
- DES нестійкий до лінійного криптоаналізу (тобто лінійна атака дозволяє знайти ключ DES швидше, ніж послідовний перебір).
В той же час, повний 16-раундовий DES стійкий до диференційного криптоаналізу.
Через високу розповсюдженість DES було запропоновано багато ідей щодо підвищення його безпеки, зокрема, замінити S-блоки DES новими, стійкими до лінійної атаки. Однак, широке практичне застосування жодна з видозмінених версій DES не набула. Винятком є потрійний DES, однак, це не видозміна алгоритму, а лише особливий режим шифрування звичайним DES.
Посилання
![]() |
Це незавершена стаття про програмування. Ви можете допомогти проєкту, виправивши або дописавши її. |