При использовании полного шифрования диска с Ubuntu (в отличие от шифрования homedir) для шифрования тома используется dm-crypt с LUKS. В установщике (по крайней мере, на 12.04 поочередно) вы можете выбрать настройку с помощью ключевой фразы или ключевого файла. Я хотел бы использовать комбинацию двух; не либо, но и то и другое.
Почему? Потому что это повышает безопасность (двухфакторный); вам нужно иметь что-то, и вам нужно знать что-то, чтобы разблокировать это. Затем я хочу поместить ключевой файл на маленькое съемное запоминающее устройство (USB-накопитель) и подключать его только во время загрузки. Результатом должно быть то, что необходимо вставить правильную флешку и предоставить правильную фразу-пароль для разблокировки корневого раздела.
Итак, другими словами, я хочу, чтобы при загрузке меня спрашивали о парольной фразе, которой шифруется ключевой файл на внешнем диске.
Я вижу вспомогательный скрипт /usr/share/initramfs-tools/hooks/cryptgnupg
, который может помочь в его выполнении, но я понятия не имею, как его использовать.
Просто, чтобы избежать путаницы: я не прошу способ добавить дополнительную клавишу к тому, чтобы разблокировать его.
Я делаю то же самое, однако, боюсь, мой ответ не будет удовлетворительным, так как по разным причинам я пошел с совершенно обычным Initramfs .
Вместо GnuPG
, который является дополнительным двоичным файлом, который должен быть включен в Initramfs (а в случае с GnuPG-2
, довольно сложным), я просто использовал то, что уже есть. И это, очевидно, dm-crypt/LUKS
.
Итак, предположим, у вас есть keyfile
. Желательно со случайными данными.
# dd if=/dev/urandom of=keyfile count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.000189802 s, 2.7 MB/s
Добавьте шифрование для него с помощью LUKS (не стесняйтесь добавлять свои настройки шифра по своему выбору).
# truncate -s 2M keyfile.luks
# cryptsetup luksFormat keyfile --header keyfile.luks
WARNING!
========
This will overwrite data on keyfile.luks irrevocably.
Are you sure? (Type uppercase yes): YES
Enter passphrase: bananas
Verify passphrase: bananas
Теперь у вас есть ключевой файл (512 байт) и keyfile.luks (2 МБ, для которого cryptsetup по какой-то причине необходимо написать заголовок 192k LUKS). Так как Initramfs будет сжат в любом случае, это не так уж плохо (все же меньше, чем GnuPG
).
Теперь вы можете расшифровать файл ключа:
# cryptsetup luksOpen keyfile --header keyfile.luks lukskey
Enter passphrase for keyfile: bananas
И у вас есть 512 байт случайных данных в /dev/mapper/lukskey
. (Вы можете написать в него, если хотите изменить его, поэтому мы могли бы инициализировать файл с нулями раньше.)
# blockdev --getsize64 /dev/mapper/lukskey
512
В Initramfs init
вы могли бы затем перейти к откройте реальный том LUKS с ним (при условии, что вы сначала добавили ключ).
cryptsetup --key-file=/dev/mapper/lukskey luksOpen /dev/yourdisk luksyourdisk
cryptsetup luksClose lukskey # clean up
Этот подход делает GnuPG совершенно лишним, плюс вы получаете все преимущества LUKS, такие как множественные пароли для ключа, шифр по вашему выбору и так далее. Не говоря уже о хорошем (в основном обычном) запросе пароля с несколькими повторными попытками.