Формування умінь і навичок створення стійких паролів. Отримання знань методів і способів подолання парольного захисту та навичок використання відповідного програмного забезпечення. Закріплення знань файлової структури, умінь і навичок використання можливостей віртуальних принтерів, архіваторів, текстових і табличних редакторів для організації парольного захисту. (Примітка: Мета з методички, частково стосується ЛР2). Основна мета даної роботи - реалізація та тестування алгоритму DES.
Було виконано шифрування перших 8 літер ПІБ (ZarubinA) ключем password за алгоритмом DES, обмежившись одним раундом.
1. Вхідні дані:
- Текст:
ZarubinA - HEX:
5A61727562696E41 - Двійковий блок (64 біти):
0101101001100001011100100111010101100010011010010110111001000001 - Ключ:
password - HEX:
70617373776F7264 - Двійковий ключ (64 біти):
0111000001100001011100110111001101110111011011110111001001100100
2. Початкова перестановка даних (IP):
- Результат після IP:
0111111101001101010101011010101000000000110010000100110101000101
3. Розділення на L0 та R0:
- L0:
01111111010011010101010110101010 - R0:
00000000110010000100110101000101
4. Генерація ключа першого раунду (k1):
- Після PC-1 (56 біт):
00001011101011111111111111110100000011010011111001111100 - C0:
0000101110101111111111111111 - D0:
0100000011010011111001111100 - Після 1 зсуву:
* C1:
0001011101011111111111111110* D1:1000000110100111110011111000 - Після PC-2 (k1, 48 біт):
101110110111011111011101011010101100011110100101
5. Обчислення функції Фейстеля F(R0, k1):
- E(R0) (48 біт):
100000000001011001010000001001011010101000001010 - E(R0) ⊕ k1 (48 біт):
001110110110000110001101010011110110110110101111 - Вихід S-блоків (32 біти):
10001100111011110000101010001101 - Результат F(R0, k1) після P (32 біти):
01010101110011110001100101111100
6. Обчислення L1 та R1:
- R1 = L0 =
01111111010011010101010110101010 - L1 = R0 ⊕ F(R0, k1) =
01010101000001110101010000111001
7. Результат першого раунду (L1R1):
0101010100000111010101000011100101111111010011010101010110101010
Було розроблено програмне забезпечення на мові Python (des_cipher.py), що реалізує алгоритм шифрування DES. Повний код доступний у репозиторії.
Програма була протестована на трьох стандартних векторах:
| Приклад | Текст (HEX) | Ключ (HEX) | Очікуваний Шифр (HEX) | Отриманий Шифр (HEX) | Результат |
|---|---|---|---|---|---|
| 1 | 0123456789ABCDEF | FEFEFEFEFEFEFEFE | 6DCE0DC9006556A3 | 6DCE0DC9006556A3 |
True |
| 2 | 0000000000000000 | 0000000000000000 | 8CA64DE9C1B123A7 | 8CA64DE9C1B123A7 |
True |
| 3 | 0123456789ABCDEF | FEDCBA9876543210 | ED39D950FA74BCC4 | ED39D950FA74BCC4 |
True |
Висновок по тестуванню: Програма коректно реалізує алгоритм DES, оскільки результати збігаються зі стандартними тестовими векторами.
Було виконано шифрування даних з Завдання 1 (ZarubinA, ключ password) за допомогою програми.
- Вхідний текст (HEX):
5A61727562696E41 - Ключ (HEX):
70617373776F7264 - Фінальний шифр (після 16 раундів):
46FEE249B6624944
Порівняння результатів 1-го раунду:
- Ручний розрахунок:
- L1:
01010101000001110101010000111001 - R1:
01111111010011010101010110101010
- L1:
- Програмний результат (з виводу консолі):
- L1:
00000000011111100110000101010101 - R1:
10001100010010101110010100001001
- L1:
Висновок по перевірці: Спостерігається розбіжність між результатами першого раунду, отриманими вручну та програмно. Хоча програма проходить стандартні тести, необхідно провести додатковий аналіз коду або ручних обчислень для виявлення причини невідповідності саме для цих вхідних даних. (Примітка: Подальший аналіз та висновки базуються на коректній роботі програми на стандартних тестах).
- Було детально вивчено структуру та етапи симетричного алгоритму шифрування DES, включаючи мережу Фейстеля, генерацію ключів та функцію F.
- Виконано покроковий ручний розрахунок одного раунду DES, що дозволило глибше зрозуміти внутрішні перетворення алгоритму.
- Розроблено програмну реалізацію DES на Python, яка успішно пройшла перевірку на стандартних тестових векторах.
- Продемонстровано складність ручних криптографічних обчислень та важливість їх точної програмної реалізації.