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 = 133457799BBCDFF1
000110110000001011101111111111000111000001110010 < Key i =1
011110011010111011011001110110111100100111100101 < Key i =2
010101011111110010001010010000101100111110011001 < Key i =3
011100101010110111010110110110110011010100011101 < Key i =4
011111001110110000000111111010110101001110101000 < Key i =5
011000111010010100111110010100000111101100101111 < Key i =6
111011001000010010110111111101100001100010111100 < Key i =7
111101111000101000111010110000010011101111111011 < Key i =8
111000001101101111101011111011011110011110000001 < Key i =9
101100011111001101000111101110100100011001001111 < Key i =10
001000010101111111010011110111101101001110000110 < Key i =11
011101010111000111110101100101000110011111101001 < Key i =12
100101111100010111010001111110101011101001000001 < Key i =13
010111110100001110110111111100101110011100111010 < Key i =14
101111111001000110001101001111010011111100001010 < Key i =15
110010110011110110001011000011100001011111110101 < 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
011000010001011110111010100001100110010100100111 r=1 = R1 хоr K
Si=1 n=0 вхід =12 вихід =5
Si=2 n=1 вхід =8 вихід =12
Si=3 n=0 вхід =15 вихід =8
Si=4 n=2 вхід =13 вихід =2
Si=5 n=3 вхід =0 вихід =11
Si=6 n=2 вхід =3 вихід =5
Si=7 n=0 вхід =10 вихід =9
Si=8 n=3 вхід =3 вихід =7
01011100100000101011010110010111 r=1 = R1 після S-box
00100011010010101010100110111011 r=1 = R0 після P
11101111010010100110010101000100 r=1 = L0 xor R0
11110000101010101111000010101010 r=1 = L
11101111010010100110010101000100 r=1 = R
des===============
round =2
11110000101010101111000010101010 r=2 Li0
11101111010010100110010101000100 r=2 Ri0
11101111010010100110010101000100 r=2 Li1
0-1110-10-1111-01-01001010100001100001010101000001001 r=2 R1expand
000011000100010010001101111010110110001111101100 r=2 = R1 хоr K
Si=1 n=1 вхід =1 вихід =15
Si=2 n=0 вхід =2 вихід =8
Si=3 n=0 вхід =9 вихід =13
Si=4 n=1 вхід =6 вихід =0
Si=5 n=2 вхід =13 вихід =3
Si=6 n=2 вхід =11 вихід =10
Si=7 n=1 вхід =7 вихід =10
Si=8 n=2 вхід =6 вихід =14
11111000110100000011101010101110 r=2 = R1 після S-box
00111100101010111000011110100011 r=2 = R0 після P
11001100000000010111011100001001 r=2 = L0 xor R0
11101111010010100110010101000100 r=2 = L
11001100000000010111011100001001 r=2 = R
des===============
round =3
11101111010010100110010101000100 r=3 Li0
11001100000000010111011100001001 r=3 Ri0
11001100000000010111011100001001 r=3 Li1
1-1100-10-1100-00-00000000010101110101110100001010011 r=3 R1expand
101100000111110010001000111110000010011111001010 r=3 = R1 хоr K
Si=1 n=2 вхід =6 вихід =2
Si=2 n=1 вхід =3 вихід =7
Si=3 n=2 вхід =9 вихід =1
Si=4 n=0 вхід =4 вихід =0
Si=5 n=2 вхід =15 вихід =14
Si=6 n=0 вхід =1 вихід =1
Si=7 n=1 вхід =15 вихід =6
Si=8 n=0 вхід =5 вихід =15
00100111000100001110000101101111 r=3 = R1 після S-box
01001101000101100110111010110000 r=3 = R0 після P
10100010010111000000101111110100 r=3 = L0 xor R0
11001100000000010111011100001001 r=3 = L
10100010010111000000101111110100 r=3 = R
des===============
round =4
11001100000000010111011100001001 r=4 Li0
10100010010111000000101111110100 r=4 Ri0
10100010010111000000101111110100 r=4 Li1
0-1010-00-0010-00-01011111000000001010111111110101001 r=4 R1expand
001000101110111100101110110111100100101010110100 r=4 = R1 хоr K
Si=1 n=0 вхід =4 вихід =2
Si=2 n=2 вхід =7 вихід =1
Si=3 n=2 вхід =14 вихід =14
Si=4 n=2 вхід =7 вихід =13
Si=5 n=3 вхід =11 вихід =9
Si=6 n=2 вхід =2 вихід =15
Si=7 n=2 вхід =5 вихід =3
Si=8 n=2 вхід =10 вихід =10
00100001111011011001111100111010 r=4 = R1 після S-box
10111011001000110111011101001100 r=4 = R0 після P
01110111001000100000000001000101 r=4 = L0 xor R0
10100010010111000000101111110100 r=4 = L
01110111001000100000000001000101 r=4 = R
des===============
round =5
10100010010111000000101111110100 r=5 Li0
01110111001000100000000001000101 r=5 Ri0
01110111001000100000000001000101 r=5 Li1
1-0111-01-0111-01-00100000100000000000000001000001010 r=5 R1expand
110001100000010100000011111010110101000110100010 r=5 = R1 хоr K
Si=1 n=3 вхід =8 вихід =5
Si=2 n=2 вхід =0 вихід =0
Si=3 n=0 вхід =10 вихід =12
Si=4 n=1 вхід =1 вихід =8
Si=5 n=2 вхід =13 вихід =3
Si=6 n=3 вхід =10 вихід =1
Si=7 n=0 вхід =3 вихід =14
Si=8 n=2 вхід =1 вихід =11
01010000110010000011000111101011 r=5 = R1 після S-box
00101000000100111010110111000011 r=5 = R0 після P
10001010010011111010011000110111 r=5 = L0 xor R0
01110111001000100000000001000101 r=5 = L
10001010010011111010011000110111 r=5 = R
des===============
round =6
01110111001000100000000001000101 r=6 Li0
10001010010011111010011000110111 r=6 Ri0
10001010010011111010011000110111 r=6 Li1
1-1000-10-1010-00-01001011111110100001100000110101111 r=6 R1expand
101001101110011101100001100000001011101010000000 r=6 = R1 хоr K
Si=1 n=3 вхід =4 вихід =4
Si=2 n=2 вхід =7 вихід =1
Si=3 n=1 вхід =14 вихід =15
Si=4 n=3 вхід =0 вихід =3
Si=5 n=2 вхід =0 вихід =4
Si=6 n=1 вхід =5 вихід =12
Si=7 n=2 вхід =5 вихід =3
Si=8 n=0 вхід =0 вихід =13
01000001111100110100110000111101 r=6 = R1 після S-box
10011110010001011100110100101100 r=6 = R0 після P
11101001011001111100110101101001 r=6 = L0 xor R0
10001010010011111010011000110111 r=6 = L
11101001011001111100110101101001 r=6 = R
des===============
round =7
10001010010011111010011000110111 r=7 Li0
11101001011001111100110101101001 r=7 Ri0
11101001011001111100110101101001 r=7 Li1
1-1110-10-1001-01-01100001111111001011010101101010011 r=7 R1expand
000110011010111110111000000100111011001111101111 r=7 = R1 хоr K
Si=1 n=0 вхід =3 вихід =1
Si=2 n=0 вхід =13 вихід =0
Si=3 n=2 вхід =15 вихід =7
Si=4 n=2 вхід =12 вихід =5
Si=5 n=0 вхід =2 вихід =4
Si=6 n=3 вхід =13 вихід =0
Si=7 n=1 вхід =7 вихід =10
Si=8 n=3 вхід =7 вихід =13
00010000011101010100000010101101 r=7 = R1 після S-box
10001100000001010001110000100111 r=7 = R0 після P
00000110010010101011101000010000 r=7 = L0 xor R0
11101001011001111100110101101001 r=7 = L
00000110010010101011101000010000 r=7 = R
des===============
round =8
11101001011001111100110101101001 r=8 Li0
00000110010010101011101000010000 r=8 Ri0
00000110010010101011101000010000 r=8 Li1
0-0000-00-0110-00-01001010101010111110100000010100000 r=8 R1expand
111101110100100001101111100111100111101101011011 r=8 = R1 хоr K
Si=1 n=3 вхід =14 вихід =6
Si=2 n=2 вхід =10 вихід =12
Si=3 n=3 вхід =0 вихід =1
Si=4 n=3 вхід =7 вихід =8
Si=5 n=3 вхід =3 вихід =7
Si=6 n=3 вхід =3 вихід =12
Si=7 n=3 вхід =6 вихід =10
Si=8 n=1 вхід =13 вихід =14
01101100000110000111110010101110 r=8 = R1 після S-box
00111100000011101000011011111001 r=8 = R0 після P
11010101011010010100101110010000 r=8 = L0 xor R0
00000110010010101011101000010000 r=8 = L
11010101011010010100101110010000 r=8 = R
des===============
round =9
00000110010010101011101000010000 r=9 Li0
11010101011010010100101110010000 r=9 Ri0
11010101011010010100101110010000 r=9 Li1
0-1101-01-0101-01-01101010010101001010111110010100001 r=9 R1expand
100010100111000010111001010010001001101100100000 r=9 = R1 хоr K
Si=1 n=2 вхід =1 вихід =1
Si=2 n=3 вхід =3 вихід =1
Si=3 n=0 вхід =1 вихід =0
Si=4 n=3 вхід =12 вихід =12
Si=5 n=0 вхід =9 вихід =5
Si=6 n=1 вхід =4 вихід =7
Si=7 n=2 вхід =6 вихід =7
Si=8 n=2 вхід =0 вихід =7
00010001000011000101011101110111 r=9 = R1 після S-box
00100010001101100111110001101010 r=9 = R0 після P
00100100011111001100011001111010 r=9 = L0 xor R0
11010101011010010100101110010000 r=9 = L
00100100011111001100011001111010 r=9 = R
des===============
round =10
11010101011010010100101110010000 r=10 Li0
00100100011111001100011001111010 r=10 Ri0
00100100011111001100011001111010 r=10 Li1
0-0010-00-0100-00-01111111001011000001100001111110100 r=10 R1expand
101000010111000010111110110110101000010110111011 r=10 = R1 хоr K
Si=1 n=2 вхід =4 вихід =13
Si=2 n=1 вхід =11 вихід =10
Si=3 n=0 вхід =1 вихід =0
Si=4 n=2 вхід =15 вихід =4
Si=5 n=2 вхід =11 вихід =5
Si=6 n=2 вхід =4 вихід =2
Si=7 n=0 вхід =11 вихід =7
Si=8 n=3 вхід =13 вихід =5
11011010000001000101001001110101 r=10 = R1 після S-box
01100010101111001001110000100010 r=10 = R0 після P
10110111110101011101011110110010 r=10 = L0 xor R0
00100100011111001100011001111010 r=10 = L
10110111110101011101011110110010 r=10 = R
des===============
round =11
00100100011111001100011001111010 r=11 Li0
10110111110101011101011110110010 r=11 Ri0
10110111110101011101011110110010 r=11 Li1
0-1011-01-0111-11-11010101011111010101111110110100101 r=11 R1expand
011110111010000101111000001101000010111000100011 r=11 = R1 хоr K
Si=1 n=0 вхід =15 вихід =7
Si=2 n=2 вхід =13 вихід =3
Si=3 n=1 вхід =2 вихід =0
Si=4 n=2 вхід =12 вихід =5
Si=5 n=1 вхід =6 вихід =13
Si=6 n=0 вхід =1 вихід =1
Si=7 n=2 вхід =12 вихід =0
Si=8 n=3 вхід =1 вихід =1
01110011000001011101000100000001 r=11 = R1 після S-box
11100001000001001111101000000010 r=11 = R0 після P
11000101011110000011110001111000 r=11 = L0 xor R0
10110111110101011101011110110010 r=11 = L
11000101011110000011110001111000 r=11 = R
des===============
round =12
10110111110101011101011110110010 r=12 Li0
11000101011110000011110001111000 r=12 Ri0
11000101011110000011110001111000 r=12 Li1
0-1100-00-0101-01-01111110000000111111000001111110001 r=12 R1expand
000101011101101000000101100010111110010000011000 r=12 = R1 хоr K
Si=1 n=1 вхід =2 вихід =7
Si=2 n=1 вхід =14 вихід =11
Si=3 n=2 вхід =4 вихід =8
Si=4 n=1 вхід =2 вихід =11
Si=5 n=2 вхід =1 вихід =2
Si=6 n=2 вхід =15 вихід =6
Si=7 n=0 вхід =8 вихід =3
Si=8 n=0 вхід =12 вихід =5
01111011100010110010011000110101 r=12 = R1 після S-box
11000010011010001100111111101010 r=12 = R0 після P
01110101101111010001100001011000 r=12 = L0 xor R0
11000101011110000011110001111000 r=12 = L
01110101101111010001100001011000 r=12 = R
des===============
round =13
11000101011110000011110001111000 r=13 Li0
01110101101111010001100001011000 r=13 Ri0
01110101101111010001100001011000 r=13 Li1
0-0111-01-0101-11-10111111010100011110000001011110000 r=13 R1expand
101011010111100000101011011101011011100010110001 r=13 = R1 хоr K
Si=1 n=3 вхід =5 вихід =9
Si=2 n=1 вхід =11 вихід =10
Si=3 n=2 вхід =0 вихід =13
Si=4 n=3 вхід =5 вихід =1
Si=5 n=1 вхід =14 вихід =8
Si=6 n=1 вхід =13 вихід =11
Si=7 n=2 вхід =1 вихід =4
Si=8 n=3 вхід =8 вихід =15
10011010110100011000101101001111 r=13 = R1 після S-box
11011101101110110010100100100010 r=13 = R0 після P
00011000110000110001010101011010 r=13 = L0 xor R0
01110101101111010001100001011000 r=13 = L
00011000110000110001010101011010 r=13 = R
des===============
round =14
01110101101111010001100001011000 r=14 Li0
00011000110000110001010101011010 r=14 Ri0
00011000110000110001010101011010 r=14 Li1
0-0001-11-1000-10-11000000110100010101010101011110100 r=14 R1expand
010100000101010110110001011110000100110111001110 r=14 = R1 хоr K
Si=1 n=0 вхід =10 вихід =6
Si=2 n=1 вхід =2 вихід =4
Si=3 n=0 вхід =11 вихід =7
Si=4 n=3 вхід =8 вихід =9
Si=5 n=0 вхід =15 вихід =9
Si=6 n=0 вхід =2 вихід =10
Si=7 n=3 вхід =11 вихід =15
Si=8 n=0 вхід =7 вихід =1
01100100011110011001101011110001 r=14 = R1 після S-box
10110111001100011000111001010101 r=14 = R0 після P
11000010100011001001011000001101 r=14 = L0 xor R0
00011000110000110001010101011010 r=14 = L
11000010100011001001011000001101 r=14 = R
des===============
round =15
00011000110000110001010101011010 r=15 Li0
11000010100011001001011000001101 r=15 Ri0
11000010100011001001011000001101 r=15 Li1
1-1100-00-0010-10-10001011001010010101100000001011011 r=15 R1expand
010111111100010111010100011101111111111101010001 r=15 = R1 хоr K
Si=1 n=1 вхід =11 вихід =11
Si=2 n=2 вхід =14 вихід =2
Si=3 n=1 вхід =11 вихід =14
Si=4 n=0 вхід =10 вихід =8
Si=5 n=1 вхід =14 вихід =8
Si=6 n=3 вхід =15 вихід =13
Si=7 n=3 вхід =14 вихід =3
Si=8 n=1 вхід =8 вихід =12
10110010111010001000110100111100 r=15 = R1 після S-box
01011011100000010010011101101110 r=15 = R0 після P
01000011010000100011001000110100 r=15 = L0 xor R0
11000010100011001001011000001101 r=15 = L
01000011010000100011001000110100 r=15 = R
des===============
round =16
11000010100011001001011000001101 r=16 Li0
01000011010000100011001000110100 r=16 Ri0
01000011010000100011001000110100 r=16 Li1
0-0100-00-0011-01-01000000100000110100100000110101000 r=16 R1expand
111010110101011110001111000101000101011001011101 r=16 = R1 хоr K
Si=1 n=2 вхід =13 вихід =10
Si=2 n=3 вхід =10 вихід =7
Si=3 n=0 вхід =15 вихід =8
Si=4 n=1 вхід =7 вихід =3
Si=5 n=1 вхід =2 вихід =2
Si=6 n=1 вхід =2 вихід =4
Si=7 n=1 вхід =12 вихід =2
Si=8 n=1 вхід =14 вихід =9
10100111100000110010010000101001 r=16 = R1 після S-box
11001000110000000100111110011000 r=16 = R0 після P
00001010010011001101100110010101 r=16 = L0 xor R0
01000011010000100011001000110100 r=16 = L
00001010010011001101100110010101 r=16 = R
des===============
1000010111101000000100110101010000001111000010101011010000000101
Result = 85E813540F0AB405 (HEX)
Слабкі ключі
Слабкими ключами називається ключі 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.
Посилання
![]() |
Це незавершена стаття про програмування. Ви можете допомогти проєкту, виправивши або дописавши її. |