Sì, puoi farlo accedendo alla chiave principale mentre il volume viene decrittografato.
Il veloce e sporco per aggiungere una nuova passphrase:
device=/dev/sda5
volume_name=foo
cryptsetup luksAddKey $device --master-key-file <(dmsetup table --showkeys $volume_name | awk '{ print $5 }' | xxd -r -p)
device
e volume_name
dovrebbe essere impostato in modo appropriato.
volume_name
è il nome del volume decrittografato, quello che vedi in /dev/mapper
.
Spiegazione:
I volumi LUKS crittografano i loro dati con una chiave master. Ogni passphrase che aggiungi semplicemente memorizza una copia di questa chiave master crittografata con quella passphrase. Quindi se hai la chiave principale, devi semplicemente usarla in un nuovo slot per chiavi.
Consente di separare il comando sopra.
$ dmsetup table --showkeys $volume_name
Questo scarica un sacco di informazioni sul volume attivamente decifrato. L'output è simile al seguente:
0 200704 crypt aes-xts-plain64 53bb7da1f26e2a032cc9e70d6162980440bd69bb31cb64d2a4012362eeaad0ac 0 7:2 4096
Il campo n. 5 è la chiave principale.
$ dmsetup table --showkeys $volume_name | awk '{ print $5 }' | xxd -r -p
Non mostrerà l'output di questo dato che si tratta di dati binari, ma ciò che fa è afferrare la chiave master per il volume e quindi convertirlo in dati binari non elaborati che sono necessari in seguito.
$ cryptsetup luksAddKey $device --master-key-file <(...)
Questo sta dicendo a cryptsetup di aggiungere una nuova chiave al volume. Normalmente questa azione richiede una chiave esistente, tuttavia usiamo --master-key-file
per dirgli che vogliamo usare invece la chiave principale.
È il <(...)
comando di sostituzione e reindirizzamento della shell. Fondamentalmente esegue tutto all'interno, invia l'output a una pipe, quindi sostituisce il <(...)
con un percorso a quella pipe.
Quindi l'intero comando è solo una riga per condensare diverse operazioni.