Що таке шифрування LUKS і як воно працює?

Коли конфіденційна інформація зберігається у будь-якому цифровому сховищі даних, варто вжити певних заходів, щоб уберегти її від сторонніх очей. І замість того, щоб просто "приховати" дані за звичайним паролем, можна перетворити їх у нечитабельний текст, щоб лише авторизована особа могла розшифрувати його та прочитати оригінальний вміст. Цей спосіб захисту даних широко відомий як шифрування. У Linux для цього є LUKS, стандартне рішення ядра для шифрування цілих дисків. Далі ми розглянемо цю технологію та принципи її роботи більш детально.

Останнє оновлення:
02 червня 2023

Час прочитання: 4 хв.

Що таке LUKS?

LUKS (Linux Unified Key Setup) — це, безумовно, найпоширеніший засіб шифрування блокових пристроїв, який використовується в різних системах на базі Linux. Він повністю відкритий, працює на рівні ядра та використовує підсистему device mapper через модуль dm-crypt. Перша версія LUKS, яка пізніше була названа LUKS1, була випущена у 2005 році. У 2018 році її було вдосконалено підтримкою деяких додаткових функцій. Цю оновлену версію зазвичай називають LUKS2.

Шляхом кодування інформації, що зберігається на внутрішньому диску комп'ютера/ноутбука або на будь-якому портативному USB-накопичувачі, LUKS блокує доступ до неї, доки користувач не надасть вірні дані автентифікації. Це також популярний спосіб захисту пристроїв NAS, особливо виробництва QNAP.

LUKS можна використовувати для шифрування будь-якого розділу, який може охоплювати не лише один диск, але й набір дисків RAID або навіть том LVM. Для цього пропонуються різні комбінації алгоритмів шифрування (зокрема AES, Serpent, Twofish), режимів шифрування (ECB; CBC, XTS) і хеш-функцій (SHA-1, SHA-256, SHA-512, RIPEMD160 тощо). Стандартним налаштуванням є AES у режимі роботи XTS із розміром ключа 512 біт. Однак розробники різних дистрибутивів Linux і виробники апаратного забезпечення на базі Linux можуть встановлювати власні параметри шифрування за замовчуванням.

Усі розділи, зашифровані LUKS, мають схоже планування. Найважливіша інформація, пов'язана із шифруванням, наприклад використаний алгоритм і ключі, міститься в заголовку LUKS, спеціальній області, розташованій на початку зашифрованого пристрою. У якості альтернативи також можна створити "відокремлений" заголовок LUKS, який зберігатиметься в зовсім іншому місці, наприклад, на флешці. Заголовок є обов'язковим структурним елементом розділу, зашифрованого із застосуванням LUKS. Якщо він пошкодиться, наприклад, через неправильне повторне розбиття на розділи, дані більше не зможуть бути розшифровані та безповоротно втратяться. Через це створення його резервних копій є дуже гарною практикою.

Далі йдуть так звана область "матеріала ключа" та власне зашифровані дані користувача. Первинний ключ, який використовується для шифрування (він же Головний ключ, Master Key), генерується системою випадковим чином. Цей ключ, у свою чергу, шифрується за допомогою ключа користувача або кількох ключів, якщо дійсних користувачів, які мають доступ до сховища, більше одного. Ці закодовані варіанти Головного ключа зберігаються в спеціальних слотах ключів у області "матеріал ключа". Може бути до восьми слотів, кожен з яких розблоковується ключем конкретного користувача. Самі ключі користувача захищені криптографічними хеш-алгоритмами (наприклад, PBKDF2), тоді як Головний ключ розділений на "антикриміналістичні" смуги.

Ключ користувача, який розшифровує Головний ключ і, відповідно, розблоковує сховище, може мати вигляд:

  • парольної фрази – це послідовність довжиною не більше 512 символів, яка вводиться користувачем і запитується під час запуску системи або доступу до зовнішнього пристрою, зашифрованого за допомогою LUKS;
  • файл ключа – це файл, вміст якого можна використати як парольну фразу для розблокування тому, зашифрованого із застосуванням LUKS. Коли він зберігається на портативному пристрої, такому як USB-накопичувач, він грає роль фізичного ключа, роблячи дешифрування можливим лише тоді, коли він підключений до комп'ютера. Такий файл може містити просту парольну фразу, блок випадкових символів або навіть двійкові дані, як-от зображення, музика чи відео.

Як зашифрувати пристрій?

Оскільки функція шифрування LUKS вбудована безпосередньо в ядро Linux, увімкнути її досить легко у будь-якому з дистрибутивів Linux:

  • Шифрування LUKS можна активувати під час процесу встановлення чи перевстановлення системи, позначивши відповідну опцію. Цей спосіб є оптимальним, оскільки передбачає шифрування всіх розділів, включаючи простір підкачки, і, таким чином, дозволяє досягти максимального захисту. Однак розділ /boot разом із GRUB не шифрується. Він розміщується у окремому розділі, щоб можна було завантажити систему після її встановлення.
  • Шифрування можна здійснити на основі розділів із застосуванням cryptsetup, утиліти командного рядка для налаштування зашифрованих файлових систем за допомогою Device Mapper і цілі dm-crypt.
  • У підтримуваних пристроях NAS том NAS можна зашифрувати під час його створення, якщо користувач встановить відповідний прапорець.

LUKS у QNAP NAS

Більшість пристроїв NAS виробництва QNAP пропонують функцію повного дискового шифрування. Зашифрований розділ можна створити на окремому диску, у конфігурації JBOD або у масиві RAID на основі механізму шифрування, що надається LUKS, і 256-бітного алгоритму AES у режимі CBC. Однак ця варіація функції шифрування LUKS має помітні відмінності від стандартної у Linux.

Якщо користувач вирішить увімкнути шифрування, йому буде запропоновано визначити парольну фразу довжиною у 8-32 символи. Ця парольна фраза призначена для шифрування Головного ключа LUKS і її спершу перетворює утиліта QNAP під назвою storage_util, яка застосовує до неї хеш-функцію MD5 із salt YCCaQNAP.

Отриманий ключ шифрування можна зберегти як 256-байтний файл із розширенням *.key під час процедури або після неї.

Щоб розблокувати такий том, користувач має ввести оригінальну парольну фразу або завантажити експортований файл *.key.

Наступні програмні продукти дозволяють отримати доступ і відновити дані зі сховищ, у яких застосована вищезгадана технологія: