Abbiamo diverse possibilità per criptare i dischi in Linux. Vediamo come con gli strumenti di base.

# Premessa
Lo strumenti base di //serie// in Linux è cryptsetup che abbiamo usato nell due guide "Gestione delle passphrase con dischi ZFS criptati" e "Gestione delle passphrase con dischi LVM criptati".
Un interessante tool esterno è VeraCrypt: open, come Linux, offre un'interfaccia grafica ed è cross platform (cioè: possiamo usarlo in Windows, in Mac, In Linux e altre piattaforme).

In questa guida procederemo usando cryptsetup. Il tool è già presente nel nostro sistema.
Procederemo prima con un hard disk interno SATA, poi con un pendrive USB.

Prima di procedere è opportuno tener presente che il pendrive sarà usabile su altri computer solo se hanno Linux ed il tool cryptsetup.

Criptazione HDD

Verifichiamo i dischi presenti nel nostro computer

sudo lsblk 
NAME             MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINTS
sda                8:0    0    5G  0 disk
sr0               11:0    1 1024M  0 rom   
zd0              230:0    0  500M  0 disk  
└─keystore-rpool 253:0    0  484M  0 crypt /run/keystore/rpool
vda              252:0    0   40G  0 disk  
├─vda1           252:1    0  512M  0 part  /boot/grub
│                                          /boot/efi
├─vda2           252:2    0  1,8G  0 part  
│ └─cryptoswap   253:1    0  1,8G  0 crypt [SWAP]
├─vda3           252:3    0    2G  0 part  
└─vda4           252:4    0 35,7G  0 part

Il disco appena aggiunto è mappato come sda .
Procediamo criptando il disco e inserendo la passphrase "NuovoDisco#32A":

sudo cryptsetup --verify-passphrase --verbose luksFormat /dev/sda

WARNING!
========
This will overwrite data on /dev/sda irrevocably.

Are you sure? (Type 'yes' in capital letters): YES
Enter passphrase for /dev/sda: 
Verify passphrase: 
Key slot 0 created.
Command successful.

Procediamo aprendo il device criptato (ovvero attiviamo la decrittografazione):

sudo cryptsetup open --type luks /dev/sda cryptosda
Enter passphrase for /dev/sda:

NB 1: "cryptovdb" è il nome che diamo al device decrittografato. Possiamo dare un nome qualsia, ma è sempre bene scegliere nomi logici e parlanti.
NB 2: il device decrittografato lo troveremo in /dev/mapper/ con il nome scelto ( in questo esempio sarà /dev/mapper/cryptosda ).

Verifichiamo i dischi ora presenti e disponibili

sudo lsblk 
NAME             MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINTS
sda                8:0    0    5G  0 disk  
└─cryptosda      253:2    0    5G  0 crypt 
zd0              230:0    0  500M  0 disk  
└─keystore-rpool 253:0    0  484M  0 crypt /run/keystore/rpool
vda              252:0    0   40G  0 disk  
├─vda1           252:1    0  512M  0 part  /boot/grub
│                                          /boot/efi
├─vda2           252:2    0  1,8G  0 part  
│ └─cryptoswap   253:1    0  1,8G  0 crypt [SWAP]
├─vda3           252:3    0    2G  0 part  
└─vda4           252:4    0 35,7G  0 part

Si noti il nuovo ``cryptosda`` come partizione di ``sda``: significa che è stato decrittografato ed è disponibile come un disco.

Possiamo ora formattare il disco:

sudo mkfs -t ext4 -L HDD-CRYPT /dev/mapper/cryptosda
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 1306624 4k blocks and 327040 inodes
Filesystem UUID: 8ce48b03-80f1-4195-9731-f8493eebf209
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

NB 1: -t ext4 qui chiediamo la formattazione nel formato "ext4" (ovvero lo standard Linux). Possiamo usare il formato che ci serve come "xfs", "btrfs", "hfs", "ntfs", "vfat", ecc...
NB 2: -L HDD-CRYPT qui diamo un'etichetta al filesystem. Qui il nome può essere quello che desideriamo

Verifichiamo la formattazione appena eseguita:

sudo blkid /dev/mapper/cryptosda 
/dev/mapper/cryptosda: LABEL="HDD-CRYPT" UUID="8ce48b03-80f1-4195-9731-f8493eebf209" BLOCK_SIZE="4096" TYPE="ext4"

Tutto OK. Ora montiamo il disco (faremo un montaggio al volo):

sudo mkdir /mnt/cryptosda
sudo mount /dev/mapper/cryptosda /mnt/cryptosda

Proviamo a scrive, vedere e a cancellare

sudo cp -R /usr/share/doc /mnt/cryptosda/
ls /mnt/cryptosda/doc
sudo /bin/rm -R /mnt/cryptosda/doc
ls /mnt/cryptosda/

Criptazione PenDrive

Operiamo su un pendrive già formattato come tutti i dispositivi USB che possiamo comprare. Pertanto qualche messaggio che riporto sono warning perché le operazioni, come quella di criptazione, sono distruttive e irrecuperabili.

Verifichiamo come è stato mappato il nostro pendrive:

lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID ffff:5678 USB Disk 2.0
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

sudo dmesg|tail -10
[12621.760637] usbcore: registered new interface driver uas
[12622.763639] scsi 7:0:0:0: Direct-Access     VendorCo ProductCode      2.00 PQ: 0 ANSI: 4
[12622.765005] sd 7:0:0:0: Attached scsi generic sg1 type 0
[12622.780063] sd 7:0:0:0: [sdb] 15728640 512-byte logical blocks: (8.05 GB/7.50 GiB)
[12622.790412] sd 7:0:0:0: [sdb] Write Protect is off
[12622.790429] sd 7:0:0:0: [sdb] Mode Sense: 03 00 00 00
[12622.805659] sd 7:0:0:0: [sdb] No Caching mode page found
[12622.805704] sd 7:0:0:0: [sdb] Assuming drive cache: write through
[12622.873783]  sdb:
[12622.890046] sd 7:0:0:0: [sdb] Attached SCSI removable disk

sudo lsblk
NAME             MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINTS
sda                8:0    0    5G  0 disk  
└─cryptosda      253:2    0    5G  0 crypt /mnt/cryptosda
sdb                8:16   1  7,5G  0 disk  
zd0              230:0    0  500M  0 disk  
└─keystore-rpool 253:0    0  484M  0 crypt /run/keystore/rpool
vda              252:0    0   40G  0 disk  
├─vda1           252:1    0  512M  0 part  /boot/grub
│                                          /boot/efi
├─vda2           252:2    0  1,8G  0 part  
│ └─cryptoswap   253:1    0  1,8G  0 crypt [SWAP]
├─vda3           252:3    0    2G  0 part  
└─vda4           252:4    0 35,7G  0 part

Il nostro pendrive "USB Disk 2.0" è stato mappato come sdb .
Procediamo criptando il pendrive e inserendo la passphrase "PenDrive#Test1":

sudo cryptsetup --verify-passphrase --verbose luksFormat /dev/sdb
WARNING: Device /dev/sdb already contains a 'gpt' partition signature.

WARNING!
========
This will overwrite data on /dev/sdb irrevocably.

Are you sure? (Type 'yes' in capital letters): YES           
Enter passphrase for /dev/sdb: 
Verify passphrase: 
Existing 'gpt' partition signature on device /dev/sdb will be wiped.
Existing 'gpt' partition signature on device /dev/sdb will be wiped.
Existing 'PMBR' partition signature on device /dev/sdb will be wiped.
Key slot 0 created.
Command successful.

Procediamo //aprendo// il device criptato (ovvero attiviamo la decrittografazione):

sudo cryptsetup open --type luks /dev/sdb usbsdb
Enter passphrase for /dev/sdb:

NB 1: "usbsdb" è il nome che diamo al device decrittografato. Possiamo dare un nome qualsia, ma è sempre bene scegliere nomi logici e parlanti.
NB 2: il device decrittografato lo troveremo in /dev/mapper/ con il nome scelto ( in questo esempio sarà /dev/mapper/usbsdb ).

Verifichiamo i dischi ora presenti e disponibili

sudo lsblk 
NAME             MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINTS
sda                8:0    0    5G  0 disk  
└─cryptosda      253:2    0    5G  0 crypt /mnt/cryptosda
sdb                8:16   1  7,5G  0 disk  
└─usbsdb         253:3    0  7,5G  0 crypt 
zd0              230:0    0  500M  0 disk  
└─keystore-rpool 253:0    0  484M  0 crypt /run/keystore/rpool
vda              252:0    0   40G  0 disk  
├─vda1           252:1    0  512M  0 part  /boot/grub
│                                          /boot/efi
├─vda2           252:2    0  1,8G  0 part  
│ └─cryptoswap   253:1    0  1,8G  0 crypt [SWAP]
├─vda3           252:3    0    2G  0 part  
└─vda4           252:4    0 35,7G  0 part

Si noti il nuovo usbsdb come //partizione// di sdb: significa che è stato decrittografato ed è disponibile come un disco.

Possiamo ora formattare il disco:

sudo mkfs -t exfat -L USB-CRYPT /dev/mapper/usbsdb
exfatprogs version : 1.1.3
Creating exFAT filesystem(/dev/mapper/usbsdb, cluster size=32768)

Writing volume boot record: done
Writing backup volume boot record: done
Fat table creation: done
Allocation bitmap creation: done
Upcase table creation: done
Writing root directory entry: done
Synchronizing...

exFAT format complete!

Verifichiamo la formattazione appena eseguita:

sudo blkid /dev/mapper/usbsdb
/dev/mapper/usbsdb: LABEL="USB-CRYPT" UUID="7EB6-ABE1" BLOCK_SIZE="512" TYPE="exfat" PTTYPE="dos"

Tutto OK. Ora montiamo il disco (faremo un montaggio al volo):

sudo mkdir /mnt/usbsdb
sudo mount /dev/mapper/usbsdb /mnt/usbsdb

Proviamo a scrive, vedere e a cancellare

sudo cp -R /usr/share/doc /mnt/usbsdb/
ls /mnt/usbsdb/doc
sudo /bin/rm -R /mnt/usbsdb/doc
ls /mnt/usbsdb/

Uso PenDrive Criptato

Utile da sapere che se abbiamo usato il processo sopra non dobbiamo necessariamente usare il terminale per aprire il device e successivamente montarlo.
Con i desktop grafici riconoscono automaticamente la criptazione e richiedono la passphrase automaticamente, Una volta digitata la passphrase il pendirive viene montato automaticamente come una qualsiasi pennetta non crittografata.

Conclusione

La criptazione dei dischi è un'operazione doverosa anche nell'uso personale. I tool di installazione provvedono a fare la criptazione per noi. Resta la variante di criptazione per dischi aggiunti dopo l'installazione.
La guida ci permette di fare questo; l'operazione richiede un po' di impegno, ma nulla di eccessivamente complesso.

Da evidenziare che la guida resta elementare e non approfondisce diversi aspetti.

Un paio, però, valgono la pena di essere qui accennati:

  • la criptazione può essere applicata all'intero disco che poi può essere usato in totpo o partizionato. Ma possiamo scegliere di applicare la criptazione ad una singola partizione del disco;
  • cryptsetup non permette l'uso dei dispositivi criptati (come i pendrive) su altri computer a meno che non abbiano Linux;
  • per ovviare al problema sopra bisogna usare altri programmi al posto di cryptsetup come, ad esempio, VeraCrypt.