LUKS : le standard de chiffrement sous Linux
Posté le 21. Juillet 2022 • 4 minutes • 759 mots • Autres langues: English
Un peu comme pour mon article sur TLS , je suis dans l’obligation de faire un point de langage avant de commencer : on dit chiffrer, bordel !
Pardon pour la forme, mais dans le milieu informatique les termes “crypter”, “cryptage” et autre “désencrypter”, ça n’existe pas et ça me fait saigner des oreilles. Si vous voulez une explication claire et limpide sur ce sujet, je vous recommande chaudement la ressource, que dis-je, le bien public qu’est le site : chiffrer.info .
Dans cet article, je vais vous présenter LUKS, pour Linux Unified Key Setup, qui est le standard de chiffrement pour les systèmes basés sur GNU/Linux. Bien évidemment, il existe des alternatives mais on peut tout de même parler de LUKS comme un incontournable.
Chiffrement d’une partition
Dans notre exemple, nous utilisons Debian 11. Je vous recommande d’utiliser LVM pour gérer vos partitions et notamment s’il y a du chiffrement. Mais vous pouvez utiliser des partitions physiques sur vos disques si vous le souhaitez.
- Création du logical volume
datasLuks
dans le group volumeVG1
:
lvcreate -L 500M -n datasLuksLV VG1
- Préparation du contenaire LUKS :
cryptsetup luksFormat /dev/VG1/datasLuksLV
Vous pouvez préciser diverses options disponibles dans le man
de cryptsetup. Toutefois, les options par défaut sont en adéquation aux règles de l’art si votre distribution est récente ainsi que votre version de cryptsetup.
C’est à cette étape que vous devez choisir la passphrase qui permettra de déchiffrer la partition. Faites-vous plaisir sur la génération aléatoire : au moins 150 bits d’entropie pour cette passphrase qui protègera vos données. Stockez-la dans votre gestionnaire de mot de passe.
Notez que l’on peut mettre jusqu’à 8 clés/passphrase différentes car il y a 8 slots (pour avoir différentes passphrases pour différents utilisateurs par exemple).
- Ouverture du contenaire LUKS :
cryptsetup luksOpen /dev/VG1/datasLuksLV datasLuks
- Mettons un système de fichier en place dans ce contenaire :
mkfs.ext4 /dev/mapper/datasLuks
- Enfin, on monte le système de fichier sur un point de montage :
mount /dev/mapper/datasLuks /mnt/datasLuks
Vous êtes libre ensuite d’adapter votre fstab
. Votre partition chiffrée est désormais prête à l’usage 👍
Gestion de l’en-tête LUKS
L’en-tête LUKS contient les métadonnées nécessaires au déchiffrement de la partition :
- la version de LUKS
- la suite cryptographique utilisée ainsi que son mode
- l’algorithme de hash utilisé pour la passphrase
- l’UUID de la device
- etc.
L’en-tête est placé en début de partition, s’il est perdu ou illisible (suite à un secteur disque défectueux par exemple) alors toute votre partition chiffrée sera perdue car elle ne sera plus ouvrable.
L’en-tête LUKS doit donc absolument être sauvegardé au même titre que votre passphrase
Afficher l’en-tête LUKS
Voici la sortie de la commande cryptsetup luksDump /dev/VG1/datasLuksLV
:
LUKS header information
Version: 2
Epoch: 3
Metadata area: 16384 [bytes]
Keyslots area: 16744448 [bytes]
UUID: 66490eef-77e1-4271-ba81-ab70466a3962
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: argon2i
Time cost: 18
Memory: 242178
Threads: 2
Salt: 83 a5 d8 a1 24 c6 7d db 8b 18 51 51 8a f7 3c 2a
e6 cd 37 e3 24 2b 9f 13 77 ee 6c 16 14 9e cd ed
AF stripes: 4000
AF hash: sha256
Area offset:32768 [bytes]
Area length:258048 [bytes]
Digest ID: 0
Tokens:
Digests:
0: pbkdf2
Hash: sha256
Iterations: 125547
Salt: ba 52 04 a7 cd 7e 7d b1 51 28 c9 35 b8 8f 03 ac
09 43 97 03 01 16 ad d3 b6 3c 5d d3 7b 3a 44 d0
Digest: 9c de 6f c5 4d b7 c5 35 86 4a ac c3 ea 64 36 3c
8a 49 8d fe 0f 16 35 9e 2d 1c e2 8d 79 70 20 6a
Sauvegarder l’en-tête LUKS
cryptsetup luksHeaderBackup /dev/VG1/datasLuksLV --header-backup-file headerLuks.backup
Restaurer l’en-tête LUKS
cryptsetup luksHeaderRestore /dev/VG1/datasLuksLV --header-backup-file headerLuks.backup
Supprimer l’en-tête LUKS
Il est possible de supprimer l’en-tête et donc rendre les données définitivement inaccessibles s’il n’y a pas de backup. Cela peut aussi être utile si les données de cet en-tête sont corrompues et que l’on souhaite ensuite procéder à une restauration.
cryptsetup luksErase /dev/VG1/datasLuksLV
Vous avez désormais les bases pour chiffrer vos partition avec LUKS. Dans mon prochain article, je vous présenterai :
- Un script bash d’automatisation pour le remontage de vos partitions chiffrées suite à un redémarrage.
- Un script bash d’alerte en cas de partition chiffrée non montée sur un serveur.
UPDATE du 12/08/2022 : Je viens de mettre en ligne l’article, cliquez ici !
Ressources :