Як надійно зашифрувати файли в linux за допомогою dm-crypt

Хочете заховати свої дані від сторонніх очей? Ми навчимо вас прийомам шифрування жорсткого диска.

За останній рік тема безпеки інтернет-даних спливала часто: спочатку в зв'язку з одкровеннями Сноудена, потім - з уразливістю в OpenSSL (Heartbleed bug). Незадовго до останньої була виявлена ​​і менш помітна помилка в GnuTLS. В результаті ми стали приділяти більше уваги безпеці віддалених даних; але як щодо тих, що зберігаються у нас на диску?

Раніше ми розглядали TrueCrypt. яка відмінно підходить для шифрування знімних носіїв, особливо тому, що доступна і для Windows, і для Маc, але при необхідності ви можете зашифрувати і всю свою домашню папку, або навіть весь диск. Мова не тільки про те, як захиститися від хакерів-хакерів: що якщо ноутбук з вашою особистою, діловою чи іншою конфіденційною інформацією буде втрачений або вкрадений?

Інший метод, який нам хотілося б розглянути докладніше, називається dm-crypt, і він працює на більш низькому рівні, забезпечуючи шифрування блочного пристрою, на якому розташована файлова система. Недавній тест, проведений Phoronix, показав більш високу продуктивність у разі, коли диск був повністю зашифрований dm-crypt, ніж при використанні ecryptfs на домашніх каталогах.

Стек блокових пристроїв

Перш ніж розглядати шифрування. важливо усвідомити, як працюють блокові пристрої. Вони є системними інтерфейсами для пристроїв зберігання даних, наприклад, / dev / sda! Усередині блочного пристрою знаходиться апаратний драйвер, наприклад, SATA, і власне обладнання. Потім операційна система взаємодіє з блоковим пристроєм для створення на ньому файлової системи.

Блокові пристрої зазвичай розглядаються саме в цій якості, хоча у них є й інші функції. Зокрема, подібний пристрій може бути інтерфейсом для ряду інших блочних пристроїв - вони можуть становити стек. І ви таке вже робили: у вас є файлова система на / dev / sda1 (розділ диска), а це блоковий пристрій посилається на / dev / sda (весь диск).

Такі технології, як RAID і LVM (Logical Volume Management), також представляють собою стеки блокових пристроїв. У вас може бути LVM поверх масиву RAID, який, в свою чергу, також розташований на блокових пристроях окремих дисків або їх розділів.

Шифрування всього пристрою за допомогою dm-crypt працює наступним чином: на базі вашого носія інформації створюється блоковий пристрій, яке шифрує дані при збереженні і дешифрує при читанні. Потім ви вмонтовуєте стандартну файлову систему поверх зашифрованого пристрої, і вона функціонує так само, як і на звичайному розділі диска.

Багато дистрибутиви можна встановити на зашифрований диск, але ми розглянемо безпосередньо створення та роботу пристроїв dm-crypt, не торкаючись чорної магії, яку творить установник. Dm-crypt використовує підсистему ядра для відображення пристроїв [device mapper] для управління блоковими пристроями криптографічними функціями ядра з метою шифрування.

Все робиться за рахунок ядра, але на рівні користувача нам необхідно програмне забезпечення для створення пристроїв dm-crypt і управління ними; таким стандартним інструментом виступає cryptsetup. Ймовірно, він вже встановлений у вашому дистрибутиві; а якщо немає, то вже точно буде в основних репозиторіях.

шифрування

Cryptsetup може створювати два типи зашифрованих пристроїв: прості dm-crypt і LUKS. Якщо ви знаєте, як користуватися простими dm-crypt, то ви знаєте про шифрування більше, ніж ми зможемо тут розповісти; тому ми зупинимося тільки на LUKS, які в більшості випадків є найкращим варіантом. Експериментувати з файловими системами, шифрованими чи ні, значить в процесі навчання ризикувати даними на диску.

Як надійно зашифрувати файли в linux за допомогою dm-crypt
Запустивши cryptsetup -help, ви побачите список не тільки доступних команд, але також хеш і шифрів.

У всіх прикладах ми використовуємо / dev / sdb, який, як ми вважаємо, є зовнішнім або іншим запасним пристроєм (які мають резервну копію) - але не намагайтеся нічого міняти на своєму системному диску, поки не розберетеся як слід. Всі ці команди повинні бути запущені з правами адміністратора, тому увійдіть в термінал від імені root через su, або перед кожною командою додавайте sudo.

Для початку створимо зашифроване пристрій: cryptsetup luksFormat / dev / sdb1 Після запиту на введення пароля створиться шифрований розділ на / dev / sdb1. Ви можете відкрити зашифроване пристрій за допомогою

cryptsetup luksOpen / dev / sdb1 name Знову піде запит пароля, а потім в / dev / mapper створиться пристрій з ім'ям, заданим в командному рядку. Далі / dev / mapper / name можна використовувати як будь-який блоковий пристрій:

mkfs.ext4 / dev / mapper / name mount / dev / mapper / name / / mnt / encrypted Для паролів діють звичайні правила: вони повинні бути довгими і варіативними, щоб їх було важко вгадати, але легко запам'ятати. Втративши пароль, ви втрачаєте вміст пристрою.

Як надійно зашифрувати файли в linux за допомогою dm-crypt
За cryptsetup luksDump можна отримати інформацію про зашифрованому розділі LUKS. Там же знаходяться команди резервного копіювання та відновлення, щоб продублювати інформацію LUKS.

Безпечне зберігання ключів

Пристрій, зашифроване LUKS, містить вісім ключових слотів. Ключі - те саме, що і паролі, і їх можна призначити кілька на один пристрій, що актуально при наявності декількох систем, коли ви хочете мати майстер-пароль, який знаєте тільки ви. При використанні LuksFormat пароль зберігається в слоті 0, потім ви можете додати ще, використовуючи cryptsetup luksAddKey / dev / sdb1 Вам запропонують ввести поточний пароль, а потім новий.

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

dd if = / dev / urandom of = / path / to / keyfile bs = 1k count = 4 chmod 0400 / path / to / keyfile cryptsetup luksAddKey / dev / sdb1 / path / to / keyfile cryptsetup luksOpen -key-file / path / to / keyfile / dev / sdb1 name

Зрозуміло, ключові файли повинні бути збережені надійно, на незашифрованому пристрої, і доступ до них повинен мати тільки адміністратор. З особистого досвіду: навіть якщо те захищений ключовим файлом, краще все одно встановити складний пароль, записаний в надійному місці, на випадок, якщо файл виявиться пошкоджений або недоступний з інших причин. Ключі також можна змінювати або видаляти, командами luksChangeKey і luksRemoveKey.

Додаткові опції

До сих пір ми розбиралися з варіантами шифрування за умовчанням, але cryptsetup включає також опції -hash і -cipher. Перша визначає спосіб хешування паролів, а друга задає метод шифрування.

Найкраще дотримуватися популярних шифрів і хеш, якщо тільки у вас немає більш вагомої причини вибрати щось інше. У методів, використовуваних рідше, можуть бути приховані недоліки, просто тому, що вони менш протестовані, що і сталося нещодавно з реалізацією хеша Whirlpool в бібліотеці libcgrypt, використовуваної cryptsetup. При внесенні виправлень постраждали ті системи, де вже використовувалися дефектні хеші.

Ще одна причина дотримуватися загальноприйнятих методів - портативність. Для внутрішнього диска це не важливо, але якщо ви хочете використовувати шифрований диск на іншій системі, там теж повинні бути встановлені ті ж хеші і шифри.

LUKS - Linux Unified Key Setup був створений задля надання стандартного, крос-платформного (незважаючи на назву) формату зберігання шифрованих даних на дисках. Він стосується не методів шифрування, а способу зберігання інформації про них.

Він також є більш надійним способом зберігання ключів або паролів, так як метод з dm-crypt схильний злому. Оскільки LUKS багатоплатформовий, доступ до зашифрованих пристроїв можна отримати і з Windows, за допомогою FreeOTFE.

Схожі статті