Как технически работает предзагрузочная аутентификация с шифрованием диска?

Как технически работает предзагрузочная аутентификация с шифрованием диска?

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

Хотя в сети много хаоса по этому вопросу, похоже, что TrueCrypt может это сделать, хотя мне может понадобиться его загрузчик на дополнительном загрузочном диске. Из того, что я читаю, некоторые инструменты Linux (включая некоторые модифицированные GRUB2) также могут это сделать.

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

Если такого инструмента нет, не означает ли это, что инструмент дешифрования каким-то образом должен передавать информацию о дешифровании в ОС при загрузке? Я могу себе представить, что это будет сложно сделать кроссплатформенно.

решение1

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

Да, в общем-то да.Аппаратное полное шифрование дискаделает это: шифрование полностью обрабатывается устройством (жестким диском/флэш-памятью) или, возможно, контроллером по цепочке, ведущей к физическому устройству(ам), и не «видно» ОС.
При этом ОС выполняет ввод-вывод точно так же, как если бы она имела дело с простым, незашифрованным устройством, магия происходит в оборудовании (и/или прошивке — «ниже» ОС в любом случае).

Если такого инструмента нет, не означает ли это, что инструмент дешифрования каким-то образом должен передавать информацию для дешифрования в ОС при загрузке?

Действительно, должна быть какая-то форма передачи информации, если шифрование не может быть выполнено "под" ОС (либо как выше, либо, возможно, с использованием методов виртуализации – но тогда у вас как бы запущены две (или более) ОС). И да, это означает, что кросс-ОС - это сложно.
Вам также понадобится код boostrap (как минимум загрузчик) для расшифровки, если у вас нет аппаратной/прошивочной помощи.

Википедияшифрование дискав статье об этом подробнее.

решение2

Если у вас есть аппаратная поддержка (или, точнее, прошивка, т. е. BIOS) для зашифрованных дисков, то вы можете зашифровать весь диск с помощью прошивки. У этого есть недостатки: не так много компьютеров, которые поддерживают шифрование диска, и это привязывает вас к определенной прошивке (или, что еще хуже, если на вашем компьютере есть TPM и ключ шифрования находится в TPM, это привязывает вас к этой конкретной материнской плате, если вы не сделали резервную копию ключа шифрования хранилища).

Если шифрование выполняет операционная система, то на диске должно быть небольшое незашифрованное пространство, где хранятся начальные части операционной системы. Распространенная конфигурация Linux — иметь отдельный /bootраздел с открытым текстом и шифровать каждый другой раздел. «Полное шифрование диска» — это немного неправильное название: обычно оно используется для обозначения «полного шифрования тома», где том обычно является разделом, а не диском. Полное шифрование диска — это когда вы не шифруете каждый файл (или, по крайней мере, дерево каталогов) отдельно.

В Linux стандартным инструментом для полного шифрования диска являетсяdmcrypt. Он доступен во всех основных дистрибутивах и интегрирован во многие установщики.

решение3

Да, с помощью Grub2 /bootраздел можно зашифровать с помощью LUK:

  • /bootкак папку /на зашифрованном разделе LUKs
  • /bootна LUKs, зашифрованном на разделе
  • И так далее, поскольку Linux позволяет использовать любой несортированный список блоков в качестве устройства, и он может быть корнем (initramfs очень сложно настроить для такого несортированного списка блоков, но это можно сделать, это параноидальный способ)

Я также протестировал параноидальный способ шифрования /boot(когда это раздел) с более чем одним слоем:

  1. /dev/sda5как единственный логический раздел на диске (MBR только с двумя расширенными разделами /bootи /)
  2. Я поместил /dev/sda5LUKs уровня 1, сопоставленный с/dev/mapper/level_0001
  3. Я поместил /dev/mapper/level_0001LUKs уровня 2, сопоставленный с/dev/mapper/level_0002
  4. Я поместил /dev/mapper/level_0002LUKs уровня 3, сопоставленный с/dev/mapper/level_0003
  5. И так далее, /dev/mapper/level_####я ставлю уровень LUK ####+1, сопоставленный с/dev/mapper/level_####+1
  6. Я /dev/mapper/level_3436поместил уровень LUK 3437, сопоставленный с/dev/mapper/level_3436
  7. Поверх /dev/mapper/level_3437я поставил Ext4, смонтированный как/boot
  8. После /bootзапуска я устанавливаю Grub2echo GRUB_CRYPTODISK_ENABLE=y >> /etc/default/grub
  9. /dev/sda6Я поставил только /один уровень LUK

Во время загрузки он запрашивает у меня 3437 разных паролей, я использую более 32 символов в каждом.

Это была всего лишь проверка концепции, время загрузки ужасное.

Но если я сделаю то же самое, /то вся системная скорость чтения/записи тоже ужасна, но Linux хотя бы работает. Я также тестировал с более чем десятью тысячами уровней; это частично работает, чтение/запись снижается до 10 КБ/с (да, действительно ужасно) на моем процессоре, загрузка занимает целый день, и приложения имеют тенденцию часто падать из-за тайм-аутов диска при доступе к OnLine (серфинг и т. д.).

Таким образом, допустимо размещение трех или четырех уровней LUK, даже десяти, это во многом зависит от вашего процессора и того, что вы используете: процессор или диск, 3D-рендеринг или огромные данные и т. д.

PD: Вы также можете использовать разные хэш-функции и алгоритмы на каждом уровне LUK, а также можете использовать , --iter-time=#чтобы увеличить время монтирования (предупреждение: при предварительной загрузке Grub2 время монтирования увеличивается в три или четыре раза, использование значения около десяти тысяч приведет к почти тридцати секундам при предварительной загрузке).

Связанный контент