Как FDE (Full Disk Encryption) работает так быстро?

13

Мне интересно, как работает полное шифрование диска в Ubuntu. Вот пример:

Учитывая следующую строку как все содержимое диска:

hello world

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

ifmmp xpsme

Как я понимаю, когда компьютер выключен, содержимое диска будет соответствовать приведенной выше строке. Но когда он снова включен, Ubuntu необходимо вернуть его содержимое hello worldдля успешной загрузки.

Что я на самом деле не понимаю, так это то, что в реальном мире содержимое диска намного больше, а алгоритм шифрования - намного сложнее, и мне трудно для компьютера полностью зашифровать / расшифровать все это всего за несколько секунд. (не требуется больше времени для загрузки или выключения).

Как это возможно?

Hewbot
источник

Ответы:

10

Как работает AES / Rijndael Encryption в целом?

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

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

и

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

Слишком много, чтобы дублировать все это здесь, но если вам нужно изображение «все в одном», то вот оно:

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


Или есть более компактное объяснение на http://www.password-depot.com/know-how/blowfish_and_rijndael.htm

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

  • Из 128-битного ключа Rijndael генерирует 10 ключей по 128 бит каждый.
  • Эти ключи помещены в массивы 4х4.
  • Простой текст также делится на массивы 4х4 (по 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-550 МБ / с, так что вы можете заметить это. Но случайное чтение может быть медленнее, и я читал, что скорости SSD могут замедляться после использования (может быть, когда накопитель полностью заполняется, и он должен начать «стирать» сектора?)

Как компьютер может полностью зашифровать / расшифровать весь диск всего за несколько секунд (для загрузки или выключения не требуется больше времени)?

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

Когда файловая система хочет увидеть какой-либо блок данных, LUKS сначала расшифровывает этот блок, а затем передает расшифрованные данные в файловую систему. Сначала вы ждете, пока накопитель прочитает блок данных (как без использования шифрования), и у вас будет только дополнительная задержка для расшифровки этого одного блока (или нескольких блоков) данных - и если расшифровка выполняется быстрее, чем накопитель может прочитать, расшифровка может быть завершена до того, как накопитель прочитает следующий блок данных.

Так что, как и обычной файловой системе, не нужно читать весь диск, чтобы прочитать файл, когда шифрование добавлено, ему не нужно читать весь диск, и это не делает вещи намного медленнее.

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

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

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

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

Надеемся, что это поможет устранить путаницу в процессе.

Ник Мертин
источник
1
Я думаю, что это ответ, который фактически отвечает на вопрос OP - его / ее заблуждение состоит в том, что он должен полностью шифровать / дешифровать весь диск, а не только биты, которые читаются / записываются при их использовании.
SomeoneSomewhereSupportsMonica
2

Процессор использует выделенный набор команд. Это возможно из-за этого, AES-NI . Это обеспечивает быстрое шифрование и дешифрование, или вы можете сказать, что это сокращает накладные расходы. Это быстро, потому что это аппаратная реализация, как объяснено здесь .

Вы можете проверить влияние на производительность здесь, и они того стоят для дополнительной безопасности.

SHSH
источник
1
Кроме того, данные на диске шифруются / дешифруются только по мере необходимости; например, при загрузке дешифруются только сценарии запуска, информация о пользователе, исполняемые файлы DM / WE и т. д.
Nick Mertin,
Многие процессоры не имеют поддержки AES, и шифрование Ubuntu по-прежнему работает на них ... даже если они это сделали, это по-прежнему не дает ответа на вопрос о том, как работает шифрование Ubuntu
Xen2050
@shsh Тогда, если бы я был на очень старом компьютере, было бы невозможно использовать FDE, потому что не было бы аппаратной реализации? Должен ли я понимать, что весь диск шифруется и дешифруется при загрузке и завершении работы?
Hewbot
@ MagikM18 Если это так, как алгоритм узнает, с чего начать расшифровку всей «строки»? Я имею в виду, если я открою документ, как он узнает «координаты», где он находится?
Hewbot
@ Hewbot так же, как и в любом случае; По сути, шифрование - это слой между физическим диском и демоном файловой системы. поэтому, когда он запрашивает чтение данных с диска, он читается, а затем дешифруется; так же, как и в обычном fs, он сначала читает таблицу файлов, находит начальную позицию файла, а затем читает оттуда.
Ник Мертин
0

Современные компьютеры могут выполнять миллиарды операций в секунду, поэтому меня не удивляет быстрота шифрования и дешифрования.

Вот как я бы интуитивно оценил скорость работы компьютеров:

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

Другой ключевой момент, который нужно понять, это то, что операционная система не нуждается в расшифровке всего жесткого диска для загрузки системы. Скорее операционная система знает, как дешифровать только те части жесткого диска, которые ей нужны на лету, и то же самое относится и к записи.

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

Конечно, эти интуиции не всегда соответствуют действительности. Например, в действительности были случаи, когда полное шифрование диска вызывало заметное снижение производительности. Но обычно они решаются после того, как разработчики проходят несколько этапов разработки оптимизаций.

Флимм
источник
1
Я не могу найти способ, которым этот ответ возможен. Простое копирование 1 ТБ с USB 3.0 занимает несколько минут, если необходимо выполнить промежуточный процесс (дешифрование), для загрузки компьютера с FDE может потребоваться несколько минут.
Hewbot
@Hewbot Я отредактировал свой ответ, чтобы объяснить, что расшифровка происходит на лету. ОС не нужно читать 1 ТБ данных, чтобы начать использовать зашифрованный диск 1 ТБ.
Flimm