Как включить аппаратное шифрование диска
Сергей <tz4678@gmail.com>Глоссарий:
- SED = Self Encrypted Drive
- FDE = Full Disk Encryption
- TCG = Trusted Computing Group
- OPAL = Specification Of Security Storage
- DEK = Data Encryption Key
Многие современные модели SSD используют аппаратное шифрование. Самым последним стандартом для подобных устройств является TCG OPAL 2.0. Его поддерживают накопители, начиная с Samsung EVO 840. Шифрование не нужно специально включать, оно работает всегда, просто запрос пароля по-умолчанию отключен.
После включения запроса пароля диск будет заблокирован после выключения питания. Чтобы его разблокировать придется воспользоваться утилитой sedutil. Ее использование требует определенных настроек ядра Linux, поэтому самым простым решением является запись на флешку готового live-образа:
$ wget https://raw.githubusercontent.com/Drive-Trust-Alliance/exec/master/RESCUE64.img.gz $ gunzip RESCUE64.img.gz $ dd if=RESCUE64.img of=/dev/sdX bs=4096 conv=fdatasync status=progress
После успешной записи нам необходимо загрузиться с этой флешки.
Первым делом нужно задать новый мастер-пароль, а для этого придется сгенерировать новый ключ шифрования данных (DEK). Ключ шифрования данных шифруется в свою очередь паролем. При вводе пароля мы расшифровываем ключ, которым расшифровываем и шифруем данные при чтении/записи. Этот ключ хранится в оперативной памяти (диска либо компьютера), пока подается питание. Есть только одна небольшая проблема: пароли, заданные на заводе, нам не узнать, поэтому придется сгенерировать новый DEK и задать к нему пароли, используя PSID:
$ sedutil-cli --PSIDrever <PSID> /dev/nvme0n1
Теперь можно задать мастер-пароль:
$ sedutil-cli --initialSetup p /dev/nvme0n1
На данном этапе нет смысла задавать сложный пароль, реальные пароли мы зададим позже.
У SSD с SED/FDE есть дополнительная память объемом около 128 мегабайт. Когда диск заблокирован, то доступна только она. Эта память используется для записи маленького образа Linux (Linux PBA) размером 31 мегабайт, единственной задачей которого является разблокировка основного содержимого диска после введения правильного пароля.
Записываем Linux PBA:
$ gunzip /usr/sedutil/UEFI64-1.15.1.img.gz $ sedutil-cli --loadPBAimage p /usr/sedutil/UEFI64-1.15.1.img /dev/nvme0n1
Включаем запрос пароля:
$ sedutil-cli --enableLockingRange 0 p /dev/nvme0n1 $ sedutil-cli --setMBREnable on p /dev/nvme0n1
Теперь задаем реальные пароли (один используется для разблокировки диска, другой ‒ для прочих операций с ним):
$ sedutil-cli --setsidpassword p <your-password> /dev/nvme0n1 $ sedutil-cli --setadmin1pwd p <your-password> /dev/nvme0n1
Пароль лучше всего использовать более 20 символов.
При следующем включении компьютера будет запрошен пароль от диска.
Отключение запроса пароля:
$ sedutil-cli --disableLockingRange 0 <your-password> /dev/nvme0n1 $ sedutil-cli --setMBREnable off <your-password> /dev/nvme0n1
И как бонус я расскажу о решении очень частой проблемы при использовании Dual Boot. После разблокировки диска сразу грузится Windows, и пропадает запись "Linux Boot Loader" в меню UEFI. Такая проблема наблюдается в ноутбуках от Acer и у некоторых производителей материнских плат. У нее решение довольное тривиальное: нужно переименовать каталог с Windows на EFI-разделе:
$ mv /boot/EFI/Microsoft /boot/EFI/MS
Для того чтобы Windows можно было выбрать из меню systemd-boot, добавляем файл /boot/loader/entries/windows.conf:
title Windows Boot Manager efi \EFI\MS\Boot\Bootmgfw.efi
Подписывайтесь на меня в гитхаб https://github.com/tz4678