Mise à jour : Debian 10.8 Buster
Installer le paquet cryptsetup qui fournit les commandes de chiffrage de la partition
$ sudo aptitude install cryptsetup
Si le mot de passe comprend des caractères composés différemment sur le clavier local (AZERTY) et sur le clavier QWERTY, il faudra en tenir compte.
Les lettres du clavier français qui n'existent pas sur le clavier qwerty (lettres avec accent, ç, ...) ne pourront pas être produites
$ dd if=/dev/urandom bs=512 count=4 of=/etc/keys/file.key
$ sudo chown 600 /etc/keys/file.key
$ echo -n "Ceci est 1 {phrase de passe*!" |sudo tee /etc/keys/file.key
Noter l’utilisation de l'option -n : "do not output the trailing newline" qui est nécessaire pour que la phrase de passe entrée depuis le terminal et le fichier correspondant soient équivalents
Il est préconisé d'initialiser la partition avec des données aléatoires pour rendre plus difficile la localisation et le déchiffrage des informations.
Utiliser les données aléatoires générées par$ sudo dd if=/dev/urandom of=/dev/sdb1 status=progres conv=fsync
ou par random, pour une protection encore plus élevée, en contrepartie d'un temps beaucoupd plus élevé
$ sudo dd if=/dev/random of=/dev/sdb1 status=progress conv=fsync
Le chiffrage crée un conteneur qui "dissimulera" le contenu de la partition.
$ sudo cryptsetup luksFormat -s 512 -h sha512 /dev/sdb1
WARNING!
========
Cette action écrasera définitivement les données sur /dev/sdb1.
Are you sure? (Type uppercase yes): YES
Saisissez la phrase secrète :
Vérifiez la phrase secrète :
Réponse YES en majuscule, puis saisir et retaper la phrase de passe
$ sudo cryptsetup luksFormat /dev/sdb1 /etc/keys/file.key
WARNING!
========
Cette action écrasera définitivement les données sur /dev/sdb2.
Are you sure? (Type uppercase yes): YES
$ sudo cryptsetup luksFormat -q /dev/sdb1 /etc/keys/file.key
La partition apparaît désormais comme un système de fichier "crypto_LUKS"
$ lsblk -f /dev/sdb
NAME FSTYPE LABEL UUID MOUNTPOINT
sdb
├─sdb1 crypto_LUKS e328780d-deb0-46d3-8ca4-c30eb441e14f
A noter que depuis Buster (version 2.1.0 de cryptsetup), le formatage luks par défaut est de type 2, alors qu'il était précédemment de type 1. Ce nouveau type n'est pas (encore?) pris en charge par grub et ne doit donc pas être utilisé pour une partition de boot ou contenant le répertoire de boot.
$ sudo cryptsetup luksFormat --type luks1 -s 512 -h sha512 /dev/sdb1
$ sudo cryptsetup luksDump /dev/sdb1 |grep Version
Version: 1
$ sudo cryptsetup convert /dev/sdb1 --type luks1
Il est prudent de faire une sauvegarde de l'entête avant la conversion!!!
$ sudo cryptsetup open /dev/sdb1 secret
$ sudo cryptsetup open /dev/sdb1 secret --key-file=/etc/keys/file.key
La partition "dissimulée" apparaît désormais dans la partition conteneur sdb1
$ lsblk -f /dev/sdb
NAME FSTYPE LABEL UUID MOUNTPOINT
sdb
└─sdb1 crypto_LUKS e328780d-deb0-46d3-8ca4-c30eb441e14f
└─secret
Son point d'attache est le répertoire /dev/mapper
$ ls -l /dev/mapper
total 0
lrwxrwxrwx 1 root root 7 mai 25 01:02 secret -> ../dm-0
crw------- 1 root root 10, 236 mai 25 00:47 control
Il est désormais possible de manipuler (formater, monter, ...) la partition "dissimulée" comme une partition "habituelle", en utilisant comme identifiant /dev/mapper/contenu à la place de /dev/sdb1
L'état du conteneur peut-être vérifié avec cryptsetup status. Lorsque le conteneur est ouvert, la première ligne indique "active"
$ sudo cryptsetup status secret
/dev/mapper/contenu is active.
type: LUKS1
cipher: aes-xts-plain64
keysize: 512 bits
device: /dev/sdb1
offset: 4096 sectors
size: 3899520 sectors
mode: read/write
Le container étant ouvert, pour formater la partition dissimulée, par exemple en ext4 et avec l'étiquette "BU" :
$ sudo mkfs.ext4 -L BU /dev/mapper/secret
lsblk et blkid permettent de vérifier que le formatage a bien été pris en compte
$ lsblk -f /dev/sdb
NAME FSTYPE LABEL UUID MOUNTPOINT
sdb
└─sdb1 crypto_LUKS e328780d-deb0-46d3-8ca4-c30eb441e14f
└─secret ext4 BU 60552e12-9a34-4b6d-9b2b-e09c3fddeec2
$ sudo blkid
.....
/dev/sdb1: UUID="e328780d-deb0-46d3-8ca4-c30eb441e14f" TYPE="crypto_LUKS" PARTUUID="97876783-01"
/dev/mapper/secret: LABEL="BU" UUID="60552e12-9a34-4b6d-9b2b-e09c3fddeec2" TYPE="ext4"
Le container peut désormais être monté en utilisant comme un périphérique bloc en utilisant /dev/mapper/contenu
Monter la partition, par exemple en /mnt
$ sudo mount /dev/mapper/secret /mnt
Avant de fermer le conteneur, démonter la partition
$ sudo umount /mnt
Puis fermer le conteneur
$ sudo cryptsetup close secret
L'état du conteneur passe à "inactive"
$ sudo cryptsetup status contenu
/dev/mapper/secret is inactive
Il est possible d'éjecter la clé
$ sudo eject /dev/sdb