Как мне использовать dm-crypt (LUKS) с GnuPG, чтобы использовать двухфакторный для FDE?

9

При использовании полного шифрования диска с Ubuntu (в отличие от шифрования homedir) для шифрования тома используется dm-crypt с LUKS. В установщике (по крайней мере, на 12.04 альтернативный) вы можете выбрать настройку с помощью ключевой фразы или ключевого файла. Я хотел бы использовать комбинацию двух; не либо, но и то и другое.

Почему? Потому что это повышает безопасность (двухфакторный); вам нужно что- то иметь, и вам нужно что- то знать, чтобы разблокировать это. Затем я хочу поместить ключевой файл на маленькое съемное запоминающее устройство (USB-накопитель) и подключать его только во время загрузки. Результатом должно быть то, что необходимо вставить правильную флешку и предоставить правильную фразу-пароль для разблокировки корневого раздела.

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

Я вижу /usr/share/initramfs-tools/hooks/cryptgnupgвспомогательный скрипт, который может помочь в его выполнении, но я понятия не имею, как его использовать.

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

gertvdijk
источник
Я сам нашел одну часть ответа ... прочитав документы . Читайте о том, как использовать это в /usr/share/doc/cryptsetup/README.gnupg. Я постараюсь найти время для его изменения, чтобы он использовал ключевой файл с внешнего носителя.
gertvdijk

Ответы:

5

Я делаю то же самое, однако, боюсь, мой ответ не будет удовлетворительным, так как по разным причинам я пошел с полностью пользовательскими 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, такие как множественные пароли для ключа, шифр по вашему выбору и так далее. Не говоря уже о хорошем (в основном обычном) запросе пароля с несколькими повторными попытками.

frostschutz
источник
2
Классное решение, но как мне это точно интегрировать в мои initramfs? Вы заявляете, что используете полностью пользовательские initramfs, но разве это не возможно, если использовать ловушку?
gertvdijk
Безусловно. Может быть, даже без хука, если вы можете придумать способ заставить crypttab сначала найти и открыть ключ. Например, это не обязательно должен быть файл, для него можно создать отдельный раздел на USB-накопителе. Однако, поскольку я так не поступаю, я не могу дать на это конкретный ответ ... извините: - /
frostschutz
1
Никаких проблем - обойти GnuPG и повторно использовать LUKS, безусловно, лучший вариант. В случае, если мне нужно переписать хуки для подхода GnuPG, я бы лучше переписал его вообще без использования. И да, я знаю, что это не должен быть файл.
gertvdijk
@gertvdijk, если у вас все получится, мне будет интересен ваш ответ для дальнейшего использования
frostschutz