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


9

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

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

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

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

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


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


2
Классное решение, но как мне это точно интегрировать в мои initramfs? Вы заявляете, что используете полностью пользовательские initramfs, но разве это не возможно, если использовать ловушку?
— gertvdijk

Безусловно. Может быть, даже без хука, если вы можете придумать способ заставить crypttab сначала найти и открыть ключ. Например, это не обязательно должен быть файл, для него можно создать отдельный раздел на USB-накопителе. Однако, поскольку я так не поступаю, я не могу дать на это конкретный ответ ... извините: - /
— frostschutz

1
Никаких проблем - обойти GnuPG и повторно использовать LUKS, безусловно, лучший вариант. В случае, если мне нужно переписать хуки для подхода GnuPG, я бы лучше переписал его вообще без использования. И да, я знаю, что это не должен быть файл.
— gertvdijk

@gertvdijk, если у вас все получится, мне будет интересен ваш ответ для дальнейшего использования
— frostschutz
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.