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

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

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

hello world

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

ifmmp xpsme

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

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

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

4 ответа

Решение

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

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

а также

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам