Jak korzystać z dm-crypt (LUKS) w GnuPG, aby używać dwuskładnikowego FDE?

9

Podczas korzystania z pełnego szyfrowania dysku w systemie Ubuntu (w przeciwieństwie do szyfrowania homedir), do szyfrowania woluminu używany jest dm-crypt z LUKS. W instalatorze (przynajmniej 12.04 na przemian) możesz wybrać konfigurację za pomocą hasła lub pliku klucza. Chciałbym użyć kombinacji tych dwóch; też nie, ale wymagają obu.

Dlaczego? Ponieważ zwiększa to bezpieczeństwo (dwuskładnikowe); musisz coś mieć i musisz coś wiedzieć, aby to odblokować. Następnie chcę umieścić plik klucza na małym wymiennym urządzeniu pamięci masowej (dysk flash USB) i podłączyć go tylko podczas rozruchu. W rezultacie powinno być wymagane włożenie odpowiedniego napędu flash i podanie odpowiedniego hasła do odblokowania partycji root.

Innymi słowy, chcę zostać zapytany podczas uruchamiania o hasło, do którego szyfrowany jest plik klucza na dysku zewnętrznym.

Widzę /usr/share/initramfs-tools/hooks/cryptgnupgskrypt pomocnika, który może pomóc go osiągnąć, ale nie mam pojęcia, jak go używać.

Aby uniknąć zamieszania: nie pytam o sposób dodania dodatkowego klucza do woluminu, aby go odblokować.

gertvdijk
źródło
Znalazłem jedną część odpowiedzi, ... czytając dokumenty . Przeczytaj o tym, jak z tego korzystać /usr/share/doc/cryptsetup/README.gnupg. Spróbuję znaleźć trochę czasu na jego zmianę, aby używał pliku klucza z zewnętrznych mediów.
gertvdijk

Odpowiedzi:

5

Robię to samo, ale obawiam się, że moja odpowiedź nie będzie satysfakcjonująca, ponieważ z różnych powodów wybrałem całkowicie niestandardowy Initramfs .

Zamiast GnuPG, który jest dodatkowym plikiem binarnym, który musi być zawarty w Initramfs (a w przypadku GnuPG-2dość złożonego), po prostu użyłem tego, co już tam jest. I to oczywiście dm-crypt/LUKS.

Załóżmy, że masz keyfile. Najlepiej z danymi losowymi.

# 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

Dodaj szyfrowanie za pomocą LUKS (możesz dodać wybrane ustawienia szyfrowania).

# 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

Teraz masz plik klucza (512 bajtów) i plik klucza.luks (2 MB, który z jakiegoś powodu cryptsetup musi napisać 192k nagłówek LUKS). Ponieważ Initramf i tak zostanie skompresowany, nie jest to wcale takie złe (wciąż mniejsze niż GnuPG).

Teraz możesz odszyfrować plik klucza:

# cryptsetup luksOpen keyfile --header keyfile.luks lukskey
Enter passphrase for keyfile: bananas

I masz 512 bajtów losowych danych /dev/mapper/lukskey. (Możesz do niego napisać, jeśli chcesz go zmienić, abyśmy mogli wcześniej zainicjować plik zerami).

# blockdev --getsize64 /dev/mapper/lukskey
512

W Initramfs init możesz następnie otworzyć z nim prawdziwy wolumin LUKS (zakładając, że najpierw dodałeś klucz).

cryptsetup --key-file=/dev/mapper/lukskey luksOpen /dev/yourdisk luksyourdisk
cryptsetup luksClose lukskey # clean up

Takie podejście sprawia, że ​​GnuPG jest całkowicie zbędny, a ponadto zyskujesz wszystkie zalety LUKS, takie jak wiele haseł dla klucza, wybrany szyfr i tak dalej. Nie wspominając już o ładnym (najczęściej zwykłym) pytaniu o hasło z wieloma próbami.

frostschutz
źródło
2
Fajne rozwiązanie, ale jak dokładnie zintegrować to z moimi initramfs? Stwierdzasz, że używasz całkowicie niestandardowych initramfs, ale czy nie byłoby to możliwe tylko za pomocą haka?
gertvdijk
Na pewno. Może nawet bez haka, jeśli wymyślisz sposób zmuszenia crypttab, aby najpierw znalazł i otworzył klucz. Np. Nie musi to być plik, możesz utworzyć dla niego osobną partycję na pamięci USB. Ponieważ jednak nie robię tego w ten sposób, nie mogę na to
udzielić
1
Żaden problem - obejście GnuPG i ponowne użycie LUKS jest z pewnością lepszą opcją. W przypadku, gdy muszę przepisać haczyki dla podejścia GnuPG, lepiej przepisałbym to bez używania go w ogóle. I tak, wiem, że to nie musi być plik.
gertvdijk
@gertvdijk, jeśli się tak stanie, byłbym zainteresowany twoją odpowiedzią na przyszłość
frostschutz