Час проведення - 4 год.
Мета заняття: перевірити теоретичні відомості про особливості роботи симетричних алгоритмів шифрування на практиці.
Питання до лабораторного заняття
Контрольні запитання
Запустити віртуальну машину Kali linux.
СТВОРИТИ В ТЕРМІНАЛІ КАТАЛОГ ЗІ СВОЇМ ПРІЗВИЩЕМ ТА ПОДАЛЬШІ ДІЇ ВИКОНУВАТИ В ЦЬОМУ КАТАЛОЗІ. СКРІНШОТИ ПОВИННІ ПОКАЗУВАТИ ЦЕЙ КАТАЛОГ.
# openssl version
# openssl help
Ознайомитися із доступними симетричними алгоритмами шифрування
# openssl ciphers
Надати пояснення для перших п'яти алгоритмів.
# openssl speed aes des
Пояснити отримані результати.
Пароль або парольна фраза - це рядок символів, який зазвичай обирає користувач для власної автентифікації або шифрування даних. Оскільки більшість паролів, обраних користувачем, мають низьку ентропію (тобто передбачувані) і слабкі властивості випадковості, то вони не повинні використовуватися безпосередньо як криптографічні ключі. Паролі користувачів піддаються так званим Атакам за словником (Dictionary attacks) - перебір найбільш вірогідних слів зі словника. Ці атаки не будуть ефективними проти паролів, які містять випадкові комбінації великих і малих літер та числових значень. Такі паролі можна відновити лише за допомогою неефективних атак грубої сили (brute force attacks), які перебирають всі можливі символи паролю. В сучасних криптосистемах використовуються так звані функції виведення ключів на основі паролю (Password-Based Key Derivation Function, PBKDF). Сімейство функцій PBKDF2 описані в “NIST Requests Public Comments on SP 800-132, Recommendation for Password-Based Key Derivation: Part 1: Storage Applications”, “PKCS #5: Password-Based Cryptography Specification. Version 2.0” та реалізовані в OpenSSL framework. Основна ідея PBKDF полягає в тому, щоб уповільнити словникові атаки або атаки грубої сили на паролі за рахунок збільшення часу, необхідного для перевірки кожного пароля, що реалізується шляхом додавання до паролю випадкового несекретного рядка - солі (salt) та виконанні багато раундів (ітерацій, повторів) перетворень при виведенні ключа з паролю. Кожна PBKDF в сімействі визначається за допомогою вибором псевдовипадкової функції (PRF) та фіксованою кількістю ітерацій C. Вхідні дані для виконання PBKDF включають пароль P, сіль S, бажану довжину довжину майстер ключа (МК) kLen: МК= PBKDF(PRF, C) (P, S, kLen). |
$ openssl kdf --help
$ openssl kdf -keylen 8 -kdfopt pass:password -kdfopt \
salt:randomvalue -kdfopt iter:3 PBKDF2
$ openssl kdf -keylen 8 -kdfopt pass:password -kdfopt salt:NaCl \
-kdfopt n:2048 -kdfopt r:8 -kdfopt p:1 SCRYPT
Використати у якості паролю своє прізвище для виведення 128 бітного ключа з 64 бітною сіллю і такими параметрами n, r, p, при яких час виведення буде відбуватись не менше 30 секунд. Показати на скріншоті час виведення ключа
# sudo apt install mc
# mcedit
#openssl des -nosalt -in open.txt -out crypted.txt
#openssl des -d -nosalt -in crypted.txt -out decrypted.txt
Порівняти open.txt та decrypted.txt, вони однакові.
# diff -sa decrypted.txt open.txt
#openssl des-ecb -nosalt -in open.txt -out crypted.txt
#openssl des-ecb -d -nosalt -in crypted.txt -out decrypted.txt
Відкрити файл crypted.txt в HEX представленні та знайти періодичні повтори байтів шифротексту. Позначити на скріні звіту ці 10 повторів.
Текст доповнюється спеціальними байтами зі значенням, яке дорівнює кількості символів, які було додано до тексту. Після розшифрування вони видаляються.
У файлі open.txt змінити зміст на рядок 123. Зашифрувати в звичайному режимі, та розшифрувати з опцією -nopad
#openssl des-ecb -nosalt -in open.txt -out crypted.txt
#openssl des-ecb -nosalt -d -nopad -in crypted.txt -out decrypted.txt
У розшифрованому тексті (файл decrypted.txt) показати «зайві» байти зі значенням 5: 8 байт у блоці – 3 (наш рядок 123) = 5. Це можна подивитись у програмі mcedit (Midnight Commander), натиснути F3 та обрати режим hex.
$ openssl des -in open.txt -out crypted.txt
Відкрити файл crypted.txt в HEX представленні та знайти значення і розмір солі.
$ openssl des -pbkdf2 -in open.txt -out crypted.txt
Відкрити файл crypted.txt в HEX представленні та знайти значення і розмір солі. Порівняти сіль із попереднім значенням.
Визначити та пояснити параметри key і iv:
$ openssl des -pbkdf2 -p -in open.txt -out crypted.txt
#openssl des-ecb -nosalt -in open.txt -out crypted.ecb.txt
#openssl des-cbc -nosalt -in open.txt -out crypted.cbc.txt
Порівняти шифротекст в hex поданні та зробити висновки.
#openssl des3 -nosalt -in open.txt -out crypted.des3.txt
#openssl aes-256-ecb -nosalt -in open.txt -out crypted-aes256-ecb.txt
#openssl aes-256-cbc -nosalt -in open.txt -out crypted-aes256-cbc.txt
Порівняти шифротекст в hex поданні та зробити висновки.
#openssl aes-256-cbc -a -in open.txt -out crypted.txt
Скласти звіт, де відображений процес виконання. Звіт оформити у вигляді Google Docs та надати доступ для перевірки. Допускається звіт у вигляді відео з екрану, але обов’язково навести висновки.