Come posso usare dm-crypt (LUKS) con GnuPG per usare due fattori per FDE?


9

Quando si utilizza la crittografia del disco completo con Ubuntu (al contrario della crittografia homedir), dm-crypt con LUKS viene utilizzato per crittografare il volume. Nel programma di installazione (almeno su 12.04 alternativo) puoi scegliere se configurarlo usando una passphrase o un file di chiavi. Vorrei usare una combinazione dei due; nessuno dei due, ma richiede entrambi.

Perché? Perché questo migliora la sicurezza (a due fattori); devi avere qualcosa e devi sapere qualcosa per sbloccarlo. Quindi voglio inserire il file di chiavi su un piccolo dispositivo di archiviazione rimovibile (unità flash USB) e collegarlo solo durante l'avvio. Il risultato dovrebbe essere che è necessario inserire l'unità flash corretta e fornire la passphrase corretta per sbloccare la partizione root.

Quindi, in altre parole, desidero essere richiesto durante l'avvio per la passphrase in cui viene crittografato il file di chiavi su un'unità esterna.

Vedo uno /usr/share/initramfs-tools/hooks/cryptgnupgscript di supporto che può aiutare a realizzarlo, ma non ho idea di come usarlo.

Proprio per evitare confusione: Sto non chiedendo un modo per aggiungere un ulteriore chiave per il volume per sbloccarlo.


Ho trovato una parte della risposta da solo ... leggendo i documenti . Leggi come usarlo in /usr/share/doc/cryptsetup/README.gnupg. Proverò a trovare un po 'di tempo per cambiarlo per farlo usare un file di chiavi da supporti esterni.
gertvdijk,

Risposte:


5

Faccio la stessa cosa, tuttavia temo che la mia risposta non sarà soddisfacente, poiché per vari motivi sono andato con un Initramfs completamente personalizzato .

Invece di GnuPG, che è un binario aggiuntivo che deve essere incluso in Initramfs (e, nel caso GnuPG-2, uno piuttosto complesso), ho semplicemente usato ciò che è già lì. E questo ovviamente dm-crypt/LUKS.

Quindi supponiamo di avere un keyfile. Preferibilmente uno con dati casuali.

# 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

Aggiungi la crittografia per esso con LUKS (sentiti libero di aggiungere le tue impostazioni di cifratura di tua scelta).

# 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

Ora hai un file di chiavi (512 byte) e un file di chiavi.luks (2 MB, che per qualche motivo cryptsetup deve scrivere l'intestazione LUKS 192k). Dato che gli Initramfs verranno comunque compressi, non è poi così male (comunque più piccolo di GnuPG).

Ora puoi decrittografare il file di chiavi:

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

E hai 512 byte di dati casuali in /dev/mapper/lukskey. (Puoi scriverci se vuoi cambiarlo, quindi avremmo potuto inizializzare il file con zero prima.)

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

In Initramfs init è quindi possibile procedere con l'apertura del volume LUKS reale con esso (presupponendo che sia stata aggiunta prima la chiave).

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

Questo approccio rende GnuPG del tutto superfluo, inoltre si ottengono tutti i vantaggi LUKS, come passphrase multiple per la chiave, cifra a scelta, eccetera. Per non parlare di una bella richiesta di password (per lo più normale) con più tentativi.


2
Bella soluzione, ma come posso integrarla esattamente nei miei initramfs? Afferma di utilizzare un initramfs completamente personalizzato, ma questo non sarebbe possibile solo usando un hook?
gertvdijk,

Certamente. Forse anche senza un gancio se riesci a pensare a un modo per forzare crypttab per trovare e aprire la chiave in qualche modo prima. Ad esempio, non deve essere un file, è possibile creare una partizione separata per esso sulla chiavetta USB. Tuttavia, dal momento che non sto facendo in questo modo, non posso dare una risposta concreta per questo ... scusa: - /
frostschutz

1
Nessun problema: eludere GnuPG e riutilizzare LUKS è sicuramente un'opzione superiore. Nel caso in cui ho bisogno di riscrivere gli hook per l'approccio GnuPG, è meglio riscriverlo senza usarlo affatto. E sì, sono consapevole che questo non deve essere un file.
gertvdijk

@gertvdijk se riesci a farlo, sarei interessato alla tua risposta per riferimento futuro
frostschutz
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.