Le passphrase sono le password per accedere a dischi criptati. Vediamo come gestirle con dischi (=volumi) LVM.
Premessa
In un disco criptato possiamo mettere più password (ovvero più passphrase), una per ogni slot disponibile. Di default sono disponibili 32 slot, quindi 32 passphrase diverse. Gli "slot" sono parti software messe dentro il disco criptato in una parte nascosta, non raggiungibile.
In questa guida vediamo come aggiungere, modificare e cancellare passphrase per crisptare-decriptare un disco.
Prima di procedere è bene ricordare che:
- il disco del computer usato è stato completamente criptato durante l'installazione ed è un volume LVM;
- linux, al momento, non offre strumenti grafici, pertanto operiamo da terminale;
- la distro usata per la guida è un Linux Mint 21.1;
- lo stato delle partizioni del disco è il seguente:
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sr0 11:0 1 1024M 0 rom
vda 252:0 0 25G 0 disk
├─vda1 252:1 0 512M 0 part /boot/efi
├─vda2 252:2 0 1,7G 0 part /boot
└─vda3 252:3 0 22,8G 0 part
└─vda3_crypt 253:0 0 22,8G 0 crypt
├─vgmint-root 253:1 0 21,9G 0 lvm /
└─vgmint-swap_1 253:2 0 980M 0 lvm [SWAP]
NB: il disco è mappato come "vda" (a differenza dei comuni "sda") perché è un disco di una macchina virtuale.
Ultima informazione: le passphrase inserite non sono né visibili, né recuperabili.
Gestire le passphrase
Procediamo iniziando o vedere quanti slot sono attivi, successivamente continueremo aggiungendo una passphrase, poi la modificheremo. Infine la cancelleremo.
Operiamo sempre da un terminale con un utente amministratore.
Pertanto iniziamo aprendo un terminale (comoda la scorcatoia da desktio CTRL+ALT+T).
Stampa slot
Diamo il seguente comando:
sudo cryptsetup luksDump /dev/vda3
LUKS header information
Version: 2
Epoch: 3
Metadata area: 16384 [bytes]
Keyslots area: 16744448 [bytes]
UUID: ae5adb56-2530-4135-a5c4-e276eaa4feb7
Label: (no label)
Subsystem: (no subsystem)
Flags: (no flags)
Data segments:
0: crypt
offset: 16777216 [bytes]
length: (whole device)
cipher: aes-xts-plain64
sector: 512 [bytes]
Keyslots:
0: luks2
Key: 512 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 512 bits
PBKDF: argon2id
Time cost: 4
Memory: 209552
Threads: 4
Salt: 62 2b a1 8f b0 94 3c f6 06 5d 6c 96 cd cd e9 26
d2 b8 f2 4f 48 5a 48 47 b4 bc f5 44 ad 68 66 37
AF stripes: 4000
AF hash: sha256
Area offset:32768 [bytes]
Area length:258048 [bytes]
Digest ID: 0
Tokens:
Digests:
0: pbkdf2
Hash: sha256
Iterations: 27582
Salt: 9a 09 b2 b1 55 ab 30 9c 14 53 67 70 9e d7 f9 cc
35 45 40 c2 13 63 f4 85 54 83 84 a7 39 ec 68 7a
Digest: 3c de d3 8d e9 ce 09 e8 c5 4e 12 0d 5a 86 85 3b
69 a6 1a 25 af 1b 29 53 8b df 9e 49 4d 4b 4e 7a
L'output è lungo e ricco di informazioni. Si focalizzi l'attenzione sulle seguenti righe:
[ ... ]
Keyslots:
0: luks2
[ ... ]
significa che c'è una passphrase per accedere al disco (slot 0 occupato = 1 passphrase inserita).
Aggiungiamo una passphrase
Aggiungiamo la passphrase "Pass Phrase#1nuova" con il seguente comando:
sudo cryptsetup luksAddKey /dev/vda3
Enter any existing passphrase:
Enter new passphrase for key slot:
Verify passphrase:
NB 1: per poter aggiungere una passphrase è necessario digitare la passphrase esistente;
NB 2: se esiste più di una passphrase è suffuciente inserire una delle esistenti.
Verifichiamo la passphrase appena inserita testandola:
sudo cryptsetup open --test-passphrase /dev/vda3
Se non abbiamo nessun output vuol dire che la passphrase c'è e funziona.
NB: se non esiste la passphrase inserita o se abbiamo sbagliato a digitarla cryptsetup ci risponde così:
No key available with this passphrase.
Verifichiamo gli slot usati
sudo cryptsetup luksDump /dev/vda3
[ ... ]
Keyslots:
0: luks2
[ ... ]
1: luks2
[ ... ]
NB: l'output è stato tagliato. Si noti che abbiamo ora 2 blocchi con l'etichetta "luks2". Significa che ci sono 2 passphrase.
Modifichiamo una passphrase
Modifichiamo la passphrase appena inserita in "PassPhrase#1B" con il seguente comando:
sudo cryptsetup luksChangeKey /dev/vda3
Enter passphrase to be changed:
Enter new passphrase:
Verify passphrase:
Verifichiamo il cambio della passphrase. Testiamo simulando l'apertura del disco.
Diamo il seguente comando inserendo la vecchia passphrase (="Pass Phrase#1nuova")
sudo cryptsetup open --test-passphrase /dev/vda3
No key available with this passphrase.
L'output conferma che non esiste più la vecchia passphrase.
Continuiamo inserendo la corretta passphrase (="PassPhrase#1B")
sudo cryptsetup open --test-passphrase /dev/vda3
Ora l'output è silenzioso e ciò significa che è corretta.
Infine verifichiamo gli slot disponibili: vedremo che sono rimasti invariati (abbiamo cambiato una passphrase, non abbiamo né aggiunto, né tolto passphrase).
sudo cryptsetup luksDump /dev/vda3
[ ... ]
Keyslots:
0: luks2
[ ... ]
1: luks2
[ ... ]
Cancelliamo una passphrase
Cancelliamo la passphrase appena cambiata "PassPhrase#1B" con il seguente comando:
sudo cryptsetup luksRemoveKey /dev/vda3
Enter passphrase to be deleted:
Se tutto è corretto (digitata correttamente la passphrase e se la passphrase esiste) l'output è sempre silenzioso. Se invece abbiamo fatto un errore di digitazione o la passphrase non esiste otteniamo il messaggio
No key available with this passphrase.
Verifichiamo gli slot disponibili:
sudo cryptsetup luksDump /dev/zd0
[ ... ]
Keyslots:
0: luks2
[ ... ]
L'output ci dice che siamo tornati ad avere il slot 0 (=c'è una sola passphrase, c'è una sola password).
Conclusione
La criptazione dei device è diventata una pratica ordinaria (più correttamente obbligatoria) con l'avvento delle normative GDPR, ma anche per l'aumentata necessità di sicurezza.
Il rovescio della medaglia, però, è la necessità di maggiore attenzione, di maggiore consapevolezza e di una buona prassi di conservazione delle passphrase inserite perché una volta perse è (quasi) impossibile sbloccare i nostri dischi.
Altro rovescio è la necessità di inserire la passphrase ogni volta che apriamo il disco o avviamo il device. E' particolarmente antipatica la cosa se operiamo su un server e non siamo nel CED e magari abbiamo dato un comando di riavvio.
E' possibile salvare la passphrase in modo da non doverla ridigitare tutte le volte. Ma così facendo vanifichiamo il livello aggiunto di sicurezza perché sarà sufficiente avere un accesso alla macchina per poter riaccedere ai dati in chiaro sul disco.
Infine l'uso di soluzioni di filesystem avanzati, come LVM o ZFS, permettono manipolazioni più avanzate e decisamente interessanti come la cryptazione selettiva di pool, l'aggiunta al volo di dischi, ridondanza, snapshot, ecc...