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...