Як FDE (повне шифрування диска) працює так швидко?


13

Мені цікаво, як працює повне кодування Ubuntu під кришкою. Ось приклад:

Вважаючи наступний рядок як увесь вміст диска:

hello world

Після застосування якогось методу шифрування це виглядатиме приблизно так:
(Я використовував шифр Цезара зі зсувом +1 для цього прикладу, наприклад A → B; B → C ...)

ifmmp xpsme

Як я розумію, коли комп’ютер вимкнено, вміст диска буде рядком вище. Але коли його знову ввімкнено, hello worldдля успішного завантаження Ubuntu потрібно знову повернути його вміст .

Що я насправді не розумію, це те, що в реальному світі вміст диска набагато більше, а алгоритм шифрування набагато складніший, і мені важко комп'ютеру повністю зашифрувати / розшифрувати його всього за кілька секунд (завантажувати або вимикати не потрібно більше часу).

Як це можливо?

Відповіді:


10

Як шифрування AES / Rijndael взагалі працює?

На цій сторінці є цікавий Посібник з малюнком до Поширеного стандарту шифрування (AES), який виглядає легко зрозумілим, хоча це схоже на 50+ зображень, наприклад, ці два:

введіть тут опис зображення

і

введіть тут опис зображення

Дублювати це все тут дуже багато, але якщо у вас є зображення "все в одному", це саме таке:

введіть тут опис зображення


Або є більш компактне пояснення на веб- сайті http://www.password-depot.com/know-how/blowfish_and_rijndael.htm

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

  • Зі 128-бітного ключа Rijndael генерує 10 клавіш по 128 біт кожна.
  • Ці клавіші розміщені в масиви 4x4.
  • Простий текст також розділений на масиви 4x4 (128 біт у кожному).
  • Кожен із 128-бітних елементів простого тексту обробляється в 10 раундів (10 раундів для 128-бітних клавіш, 12 для 192, 14 для 256).
  • Після 10 раунду код формується.
  • Кожен окремий байт підміняється у вікні S і замінюється зворотним на GF (2 8).
  • Потім застосовується трохи розумна матриця модуля-2, після якої виконується операція XOR з 63.
  • Рядки матриць сортуються циклічно.
  • Стовпці матричного множення взаємозамінні на GF (2 8).
  • Підрозділи кожного раунду піддаються операції XOR.

Рівень безпеки цього методу шифрування збільшується, якщо Rijndael виконується кілька разів з різними підрозділами.


Як працює повне шифрування диска Ubuntu?

Я вважаю, що це працює, шифруючи розділ за допомогою LUKS (налаштування за замовчуванням з AES), а потім додає на нього деякі томи за допомогою LVM (наприклад /, swap) та розшифровує та монтує їх під час завантаження після введення парольної фрази. І є звичайний (не зашифрований) завантажувальний розділ, який завантажується достатньо, щоб попросити пароль.

Посібник the_simple_computer по повній шифруванню диска за допомогою Ubuntu (оновлено 28 червня 2015 р.) говорить про те, як працює шифрування програми встановлення за замовчуванням, і згадує, що подвійне завантаження не буде працювати (принаймні, не в коробці), накопичувач необхідно використовувати MBR, так що " якщо на вашому комп'ютері є UEFI, дистрибутив буде встановлений у застарілому режимі BIOS, щоб ви не могли використовувати безпечну завантажувальну систему " і " також дає розмір свопу, рівний розміру оперативної пам'яті вашої системи (часто непотрібної), і ви не мають вибору щодо того, який тип шифрування використовується ".


Як швидко відбувається шифрування?

Якщо ви запустите, cryptsetup benchmarkвін запустить тести і розповість про те, як швидко проходить одне шифрування, слідкуйте за (на даний момент) рядками aes-xts за замовчуванням:

#  Algorithm | Key |  Encryption |  Decryption
     aes-xts   256b    150.0 MiB/s    145.0 MiB/s

Середня швидкість читання на жорсткому диску може становити 80-160 Мб / с, тому ви не будете набагато довше звичайного читання, і можливо, що щойно прочитані сектори вже розшифровані, поки ви ще чекаєте на жорсткий диск, щоб прочитати більше.

SSD може бути швидшим, можливо, 200-550MB / s, так що ви можете це помітити. Але випадкові зчитування можуть бути повільнішими, і я читав, що швидкості SSD можуть сповільнюватися після використання (можливо, коли накопичувач повністю заповниться, і він повинен почати "стирання" секторів?)

Як комп'ютер може повністю зашифрувати / розшифрувати весь диск лише за кілька секунд (завантажувати чи вимикати не потрібно більше часу)?

Не потрібно спочатку все дешифрувати. Шифрування (LUKS) працює на блоки даних , може випадковим чином розшифрувати будь-який блок і діє як шар між зашифрованими даними диска та тим, що бачить файлова система.

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

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

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


@Hewbot Я додав інформацію (внизу) про швидкість дешифрування файлів і блоків, оскільки назва вашого Q була відредагована, щоб додати "так швидко?" (чи все ще є заголовок, про який ви хотіли запитати?)
Xen2050

3

Це буде трохи спрощенням, але я спробую пройти процес доступу до файлу в зашифрованій файловій системі.

Наприклад, скажімо, на початку зашифрованої файлової системи є файлова таблиця; скажімо, ми хочемо читати /foo.bar. Отже, перше, що ми робимо, - це прочитати початок розділу, розшифрувати його і переглядати через нього потрібний файл; скажімо, він говорить, що файл починається з 0x10000000 байт. Отже, щоб прочитати, ми починаємо читати з диска в цьому місці та розшифровувати його; Аналогічно, для написання ми можемо зашифрувати новий вміст і записати їх у тому новому місці.

Сподіваємось, це допомагає усунути будь-яку плутанину в процесі.


1
Я думаю, що це відповідь, яка насправді відповідає на питання ОП - його / її неправильне уявлення полягає в тому, що він повинен повністю зашифрувати / розшифрувати весь диск, а не лише біти, які читаються / записуються під час їх використання.
Хтось десь підтримуєMonica

2

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

Ви можете перевірити про вплив продуктивності тут і вони стоять для додаткової безпеки.


1
Крім того, дані на диску зашифровуються / розшифровуються лише за потребою; Наприклад, під час завантаження розшифровуються лише сценарії запуску, інформація про користувача, виконувані файли DM / WE тощо.
Nick Mertin

Багато процесорів не мають підтримки AES, і шифрування Ubuntu все ще працює на них ... навіть якщо вони це зробили, це все ще не відповідає на питання, як працює шифрування Ubuntu
Xen2050

@shsh Тоді, якби я був на справді старому комп’ютері, використовувати FDE було б неможливо, бо не було б апаратної реалізації? Чи повинен я тоді зрозуміти, що весь диск шифрується та розшифровується під час завантаження та відключення?
Hewbot

@ MagikM18 Якщо так, то як алгоритм знає, з чого почати розшифровувати цілу "рядок"? Я маю на увазі, якщо я відкрию документ, як він знає "координати", де він знаходиться?
Hewbot

@Hewbot так само, як і в будь-якому випадку; в основному, шифрування являє собою шар між фізичним диском і демоном файлової системи. таким чином, коли він запитує зчитувати дані з диска, вони читаються, а потім розшифровуються; так що, як і у звичайному файлі, спочатку він прочитає таблицю файлів, знайде початкове положення файлу, а потім прочитає звідти.
Нік Мертін

0

Сучасні комп’ютери можуть робити мільярди операцій в секунду, тому мене не дивує, що шифрування та дешифрування швидко проходять.

Ось як я інтуїтивно оцінював, наскільки швидко працюють комп'ютери:

  1. Робити обчислення в пам'яті (особливо L1 та L2), надзвичайно швидко
  2. Читання з локального сховища, менш швидке (твердотілі диски швидше, ніж жорсткі диски)
  3. Читання з мережі, навіть менш швидке.

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

Настільки інтуїтивно, я не здивований, що повне шифрування диска не має великого впливу на продуктивність, оскільки я уявляю, що диск є горловиною.

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


1
Я не можу знайти спосіб такої відповіді. Просто копіювання 1 ТБ за допомогою USB 3.0 займає декілька хвилин, якщо потрібно здійснити середній процес (дешифрування), для завантаження комп'ютера з FDE може знадобитися кілька хвилин.
Hewbot

@Hewbot Я відредагував свою відповідь, щоб пояснити, що розшифровування відбувається під час руху. В ОС не потрібно зчитувати дані 1 ТБ, щоб почати використовувати зашифрований диск 1 ТБ.
Flimm
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.