Тема №1. Криптосистеми з секретним ключем

Лабораторне заняття 1.6. «Криптосистеми з секретним ключом у фреймворку OpenSSL»

Час проведення - 4 год.

Мета заняття: перевірити теоретичні відомості про особливості роботи симетричних алгоритмів шифрування на практиці.

Питання до лабораторного заняття

  1. Інсталяція на ознайомлення із фреймворком OpenSSL
  2. Дослідження особливостей реалізації симетричних алгоритмів шифрування

Контрольні запитання

  1. Якою функціональністю володіє фреймворк OpenSSL?
  2. Які алгоритми шифрування відносяться до симетричних?

Запустити віртуальну машину Kali linux.

СТВОРИТИ В ТЕРМІНАЛІ КАТАЛОГ ЗІ СВОЇМ ПРІЗВИЩЕМ ТА ПОДАЛЬШІ ДІЇ ВИКОНУВАТИ В ЦЬОМУ КАТАЛОЗІ. СКРІНШОТИ ПОВИННІ ПОКАЗУВАТИ ЦЕЙ КАТАЛОГ.

  1. В командному рядку Kali linux ознайомитися із фреймворком OpenSSL.

# openssl version

# openssl help

Ознайомитися із доступними симетричними алгоритмами шифрування

# openssl ciphers

Надати пояснення для перших  п'яти алгоритмів.

  1. Протестувати швидкість симетричних алгоритмів шифрування aes des.

# 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).

  1. Переглянути довідку для команди kdf  - виконувати операції Key Derivative Function

$ openssl kdf --help

  1. Використати PBKDF2 для виведення 64 бітного ключа у шістнадцятковому кодуванні з пароля password, солі random_value і кількістю ітерацій 3:

$ openssl kdf -keylen 8 -kdfopt pass:password -kdfopt \

 salt:randomvalue -kdfopt iter:3 PBKDF2

  1. Використати у якості паролю своє прізвище для виведення 128 бітного ключа з 128 бітною сіллю і кількістю ітерацій, при якій час виведення буде відбуватись не менше 30 секунд. Показати на скріншоті час виведення ключа (щоб оцінити час виконання (виведення ключа) у openssl kdf, можна скористатись стандартною утилітою time).

  1. Описати особливості функції виведення ключів на основі паролю SCRYPT.

  1. Використати PBKDF SCRYPT:

$ 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 секунд. Показати на скріншоті час виведення ключа

  1. Створити файл open.txt у своєму каталозі с текстом «hello world!!!» (встановивши текстовий редактор mcedit. Показати зміст файлу.

# sudo apt install mc

# mcedit

  1. Здійснити DES шифрування open.txt  без «солі» (за замовчуванням з «сіллю», та режим des-cbc)

#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

  1. Написати у файлі open.txt ДЕСЯТЬ РАЗІВ ПІДРЯД СВОЄ ПРІЗВИЩЕ І ІМ’Я. Зашифрувати open.txt  у режимі ecb.

#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 повторів.

  1. Довжина вихідного тексту (у файлі open.txt) звичайно не подільна на 8, тому використовується вирівнювання (padding).

Текст доповнюється спеціальними байтами зі значенням, яке дорівнює кількості символів, які було додано до тексту. Після розшифрування вони видаляються.

У файлі 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.

  1. Зашифрувати  open.txt із застосуванням солі.

$ openssl des -in open.txt -out crypted.txt

Відкрити файл crypted.txt  в HEX представленні та знайти значення і розмір солі.

  1. Зашифрувати  open.txt із застосуванням функції виведення ключів на основі паролю PBKDF2

$ openssl des -pbkdf2 -in open.txt -out crypted.txt

Відкрити файл crypted.txt  в HEX представленні та знайти значення і розмір солі. Порівняти сіль із попереднім значенням.

Визначити та пояснити параметри key і iv:

$ openssl des -pbkdf2 -p -in open.txt -out crypted.txt

  1. Написати у файлі open.txt послідовність з однакових символів, наприклад «a». Зашифрувати у режимах ecb и cbc.

#openssl des-ecb -nosalt -in open.txt -out crypted.ecb.txt

#openssl des-cbc -nosalt -in open.txt -out crypted.cbc.txt

Порівняти шифротекст в hex поданні та зробити висновки.

  1. Застосувати алгоритм 3DES і показати crypted.des3.txt в hex.

#openssl des3 -nosalt -in open.txt -out crypted.des3.txt

  1. Застосувати алгоритм AES

#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 поданні та зробити висновки.

  1.  Показати шифртекст crypted.txt у кодуванні  base64 (опція -a)

#openssl aes-256-cbc -a -in open.txt -out crypted.txt

Скласти звіт, де відображений процес виконання. Звіт оформити у вигляді Google Docs та надати доступ для перевірки. Допускається звіт у вигляді відео з екрану, але обов’язково навести висновки.