Table des matières
Bonjour à tous,
Aujourd’hui, nous allons voir comment chiffrer vos périphériques (clés USB, disques durs …) sous Linux afin de garantir la confidentialité de ceux-ci. La confidentialité étant l’un des 3 piliers de la sécurité de l’information. Pour cela, nous allons utiliser un outil open-source utilisant le standard LUKS.
Chiffrement, cryptage et cryptation
Tout d’abord, dans ce paragraphe (au titre ironique, j’espère que vous l’aurez compris), j’aimerais d’abord faire un petit rappel sur les termes chiffrer, déchiffrer et crypter, décrypter.
Déchiffrer et décrypter servent le même but: prendre un message incompréhensible et le rendre lisible.
Chiffrer / déchiffrer
Prenez un coffre et mettez-y un cadenas à clé. Ensuite, faites 5 copies de cette clé et passez cette clé à vos voisins. Voilà, vous avez chiffré votre coffre et seul vous et vos voisins peuvent ouvrir le coffre car vous possédez la clé. En informatique, le chiffrement, c’est pareil.
Le coffre correspond aux données que vous voulez chiffrer. Le cadenas correspond à l’algorithme avec lequel vous allez les chiffrer. Pour la clé, le terme est le même des deux côtés de la métaphore.
Ici, je vous ai parlé du chiffrement symétrique, la clé est la même pour chiffrer et déchiffrer mais il existe également le chiffrement asymétrique avec des clés publiques et privées.
Crypter / décrypter
Décrypter est totalement différent de déchiffrer. En effet, là où vous déchiffrez (ouvrez le coffre) avec la clé, vous décryptez sans la clé et donc en essayant de casser le cadenas avec un gros marteau. Décrypter n’a donc informatiquement que peu de sens car cette action consiste à casser la clé en essayant de multiples combinaisons, vous ne pouvez pas avoir un algorithme qui vous décryptera votre message crypté du premier coup comme pour le déchiffrement.
Quant aux termes crypter et cryptage, vous me ferez le plaisir de les laisser dans un coffre crypté (je suis presque fier de cette blague ^^), ces mots n’existent pas et sont issus de encryption en anglais qui se traduit par chiffrement.
TLDR (Too Long To Read)
Pour déchiffrer, vous donnez le message chiffré et une clé à un algorithme, celui-ci vous retournera toujours et systématiquement la donnée en clair. Pour décrypter, eh bien débrouillez-vous et cherchez par vous-même, vous n’avez pas de clé, il faut donc tester jusqu’à éventuellement trouver si on est chanceux :)
LUKS
LUKS signifie (en anglais) Linux Unified Key Setup. C’est le standard pour le chiffrement de disque associé au noyau Linux. Si je reprends la page Wikipédia, LUKS permet de chiffrer l’intégralité d’un disque de telle sorte qu’il soit utilisable sur d’autres plates-formes et distributions de Linux (voire d’autres systèmes d’exploitation). Il supporte des mots de passe multiples, afin que plusieurs utilisateurs soient en mesure de déchiffrer le même volume sans partager leur propre mot de passe.
Cryptsetup
Cryptsetup est donc un logiciel implémentant le standard LUKS sur Linux. Nous allons voir ici comment l’utiliser pour chiffrer nos volumes.
Mise en place avec Cryptsetup
À noter que toutes les commandes ci-dessous sont à exécuter en root et toutes les données sur votre disque dur vont être écrasées. Enfin, il faudra remplacer /dev/sda et sg3 dans toutes les commandes pour les adapter à votre cas.
-
Pour commencer, je vous laisse faire un petit
apt update && apt install cryptsetup
puis uncryptsetup --version
et de noter la version (de mon côté, je suis en 1.7.3). -
Ensuite, il faut (après avoir branché le disque dur) faire un
fdisk -l
pour connaître le nom du lecteur (l’équivalent des lettresC:
,D:
… côté Windows). Voici ce que j’obtiens:
Disk /dev/sda: 2.7 TiB, 3000592982016 bytes, 5860533168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: BA5EC986-5DB7-4B67-BF7D-208FAF3D1385
Mon disque s’appelle donc /dev/sda.
-
On veut maintenant chiffrer notre disque:
cryptsetup -y -v luksFormat /dev/sda
-
Il est temps d’initialiser le volume (que je vais appeler sg3) avec le mot de passe (le mettre sur un gestionnaire de mots de passe semble être une bonne idée non ?):
cryptsetup luksOpen /dev/sda sg3
-
On peut maintenant vérifier le statut de cette initialisation:
cryptsetup -v status sg3
pour obtenir:
/dev/mapper/sg3 is active.
type: LUKS1
cipher: aes-xts-plain64
keysize: 256 bits
device: /dev/sda
offset: 4096 sectors
size: 5860529072 sectors
mode: read/write
Command successful.
-
À présent, il est temps de formater la partition LUKS. Cette étape est très longue (et optionnelle), je vous recommande de la lancer depuis tmux ou de veiller à ne pas fermer votre terminal. On va commencer par “écrire des 0” sur tout le disque. Cela permet de s’assurer que le monde extérieur verra les données comme étant aléatoires (le volume étant chiffré):
dd if=/dev/zero of=/dev/mapper/sg3 status=progress
Sur mon disque dur de 2,7 To, cela a mis plus de 5 jours et demi, alors soyez patient ^^ -
On peut désormais mettre en place notre système de fichiers:
mkfs.ext4 /dev/mapper/sg3
-
On crée ensuite le dossier dans lequel on fera le montage:
mkdir -p /media/sg3
-
On peut désormais monter le disque dur:
mount /dev/mapper/sg3 /media/sg3
-
On vérifie enfin que le disque est bien monté avec un
df -h
:
/dev/mapper/sg3 2.7T 89M 2.6T 1% /media/sg3
- On peut donc le démonter classiquement avec un
umount /media/sg3
suivi d’uncryptsetup luksClose sg3
Comment remonter le disque
C’est bien beau de chiffrer un disque, mais il faut savoir le remonter à chaque utilisation.
cryptsetup luksOpen /dev/sda sg3
en rentrant votre mot de passemount /dev/mapper/sg3 /media/sg3
pour monter le volume
Et voilà ! Pour démonter, c’est comme la dernière étape du paragraphe précédent.
Remarques
Voici quelques remarques en vrac, ça peut aider ou donner des idées :)
Version
Le fait de connaître la version est important si vous voulez utiliser votre disque dur depuis une autre machine, assurez-vous d’utiliser la même version où qu’il n’y ait pas de problème de compatibilité entre les 2 (voir dans les release notes).
Entropie
Le fait de mettre des 0 sur la partition chiffrée est assez controversé. Certains diront de remplir avec des 0 ou 1 aléatoires, mais c’est beaucoup plus long et le disque est déjà chiffré donc il y a déjà un niveau d’aléatoire. Pour cette raison, remplir avec des 0 suffit puisqu’il est impossible de distinguer les données à 0 des données chiffrées.
Aller plus loin
Il est également possible de monter automatique le disque, je vous conseille de faire un tour côté crypttab et fstab.
On peut aussi ouvrir automatiquement le volume sans taper de mots passe à l’aide d’un support amovible. Je n’ai pas testé mais voici un tutoriel permettant de le faire.
Avec PAM, on peut ouvrir le volume automatiquement sans mot de passe ni support amovible. D’un point de vue sécurité, je ne préfère pas cette méthode mais il est intéressant de savoir que c’est possible.
Conclusion
Voilà, vos données sont enfin en sécurité et vous maitrisez qui peut y avoir accès. Mais attention, ça ne veut pas dire que vos données sont en sécurité ad vitam æternam car il suffit de formater le disque et vous perdez tout ! Comme vu en introduction, on ne gère que la confidentialité des données ;)
Si vous avez des questions ou remarques, n’hésitez pas dans les commentaires ou par mail si vous êtes timide !