Chiffrer un volume

LUKS est un (le ?) standard de chiffrement sous Linux. Il permet de chiffrer n'importe quel volume en entier : disque dur interne ou externe, magnétique ou SSD, USB, carte SD, etc. Il fonctionne de pair avec l'utilitaire Cryptsetup.

Pourquoi vouloir chiffrer un disque ? Parce que, comme tout le monde, vous avez des choses à cacher.

Le chiffrement est une notion qui fait parfois peur. Associé à tort aux criminels, aux nazis de la Seconde Guerre mondiale ou aux films d'espionnage ; il est un excellent bouc émissaire permettant de masquer l'incurie ou la mauvaise foi de nos gouvernements dans des domaines qui n'ont pourtant rien à voir avec la cryptologie.

Le chiffrement est aussi une notion très abstraite pour l'utilisateur de l'informatique, toujours perçue comme un truc de geek, difficile à comprendre et surtout à mettre en œuvre. Parfois à juste titre. Alors, pour toutes ces raisons, on a tendance à s'en passer.

Plus maintenant ! On va voir ici qu'il est très facile d'utiliser le chiffrement afin de protéger nos données sauvegardées ou archivées sur un disque ou un volume quelconque.

Chiffrer une clef USB

Pour les besoins de la démonstration, je vais utiliser une clé USB comme cobaye. Le résultat final est qu'il faudra un mot ou phrase de passe afin de pouvoir ouvrir cette clef.

Pour chiffrer un système d'exploitation au complet, le mieux est de le faire au moment de l'installation. En effet, l' installateur d'une distribution Linux propose souvent cette option (tout le disque sera chiffré).

Sous Linux Mint (Mate), il faut se rendre dans l'utilitaire Disques (Menu / Accessoires / Disques). Je pense que le chemin doit être peu ou prou similaire sur d'autres distributions. Au pire, tout est possible par le Terminal et la ligne de commande. :D

L'utilitaire Disques
L'utilitaire Disques permet de formater ou modifier des volumes.

Sur l'image ci-dessus, on voit les disques disponibles dans la colonne Périphériques (à gauche) dont la clé USB de 16 GB, dernière de la liste.

À droite sont représentés les volumes présents sur le périphérique, ici un seul sur tout l'espace de la clé.

Formater avec LUKS

La première étape consiste à cliquer sur le bouton en forme d'engrenages situé en bas de la représentation des volumes, c'est-à-dire ici en bas du grand rectangle vert. Ensuite, on clique sur la première option du menu qui apparaît : Formater....

On obtient une seconde fenêtre intitulée Formater le volume qui présente deux menus déroulant. Dans l'ordre, je choisis les options suivantes :

  1. Écraser les données existantes avec des zéros (lent)
  2. Chiffré, compatible avec les systèmes Linux (LUKS +ext4)

Chiffrer un volume a pour effet de faire apparaître d'autres champs à renseigner, notamment ceux qui permettent de choisir un mot ou une phrase de passe.

Formater la clef USB
Ici on formate la clé et on choisi la phrase de passe.

Une fois la phrase de passe choisie, on clique sur le bouton Formater....

Ainsi qu'on peut le constater sur cette capture d'écran, une phrase de passe peut contenir des espaces.

Un message apparaît Voulez-vous vraiment formater le volume ? ; évidemment, oui.

Le formatage débute immédiatement et si la clé est munie d'un signal lumineux, la voilà qui se transforme en sapin de Noël sur stéroïdes. Notons que l'option 1 choisi au début (écraser les données avec des zéros) allonge la durée du processus : une quinzaine de minutes pour cette clef de 16 GB en USB 3.0.

À titre de comparaison : 20 minutes sur une 8 GB en USB 2.0.

L'opération terminée, l'utilitaire Disques montre le résultat :

Formatage terminé
La clef USB est maintenant formatée avec LUKS.

Il faut maintenant verrouiller le volume en cliquant sur le petit cadenas situé en bas à gauche de la section Volumes. Puis on éjecte le médium (bouton éjecter en haut à droite de la fenêtre de l'utilitaire) et on retire la clef.

Accéder au contenu de la clé USB

Lorsqu'on insère la clé USB, une fenêtre apparaît à l'écran. Il faut évidemment renseigner la phrase de passe. Attention, il n'y a pas de mode qui permet de voir les caractères entrés, mais uniquement des points !

Saisir la phrase de passse
Entrer sa phrase de passe avec option.

Il y a trois options :

Oublier immédiatement le mot de passe : il faudra renseigner la phrase de passe à chaque fois qu'on souhaite accéder au contenu de la clef USB.

Se souvenir du mot de passe jusqu'à la fin de la session : le contenu de la clef sera accessible en tout temps, sauf évidemment si on la démonte (l'éjecte).

Se souvenir pour toujours : la clef sera déchiffrée automatiquement au montage (lorsqu'elle sera insérée) sur l'ordinateur où elle a été préparée.

En cas de succès, on accède au volume USB qui est maintenant déverrouillé. On peut aussi y accéder par l'icône présente sur le bureau ou encore par le chemin classique : /media/$USER/nom du support, par exemple ici /media/stephane/secret. Icône clef chiffré

L'en-tête LUKS

L'en-tête LUKS contient les informations relatives au chiffrement qui ont été créées lors du formatage. Si cet en-tête est corrompu, c'est-à-dire endommagée, on ne pourra plus accéder au volume chiffré.

Même s'il faut toujours faire une copie de sauvegarde de ses données sur un autre support, il est sans doute tout aussi judicieux de faire une copie de l'en-tête LUKS des supports chiffrés. Voici à quoi elle ressemble : En-tête LUKS

Il va donc falloir jouer un peu avec le Terminal et l'utilitaire cryptsetup. Comme on peut le voir, la commande qui permet d'afficher le contenu de l'en-tête LUKS est :

sudo cryptsetup luksDump /dev/sdc1

Attention, sur votre système, la clef USB chiffrée n'est pas forcément sdc1. L'utilitaire Disques l'indique sous l'appellation Périphérique (sous la zone rectangulaire représentant le ou les volumes).

Il faudra évidemment la sauvegarder sur un autre support, judicieusement sur une autre clef USB qu'on va utiliser uniquement à cette fin. Cette clef n'a pas vraiment besoin d'être chiffrée car l'en-tête seule dans la nature ne peut pas être utilisée pour déchiffrer le mot de passe.

Sauvegarder l'en-tête

On va donc copier l'en-tête du périphérique /dev/sdc1 (la clef de 16 GB), sur une petite clef USB de 500 Mo (si, si, ça existe encore en cette fin 2016).

L'utilitaire Disques indique que cette clef est le périphérique /dev/sdd1, montée sur /media/stephane/5877-7E7C

L'utilitaire Disques
L'utilitaire renseigne sur le périphérique et son point de montage.

5877-7E7C est simplement le nom d'origine de la clé. Je ne l'ai pas modifié même si cela serait souhaitable pour une raison de clarté.

La ligne de commande afin d'effectuer notre opération sera de type :

sudo cryptsetup luksHeaderBackup /dev/XXX --header-backup-file SAUV ou XXX est le périphérique dont l'en-tête doit être sauvegardé et SAUV sa copie de sauvegarde qui sera créé dans la foulée.

Donc, en pratique :

sudo cryptsetup luksHeaderBackup /dev/sdc1 --header-backup-file /media/stephane/5877-7E7C/tetedesecret

où :

L'en-tête est maintenant copié sur la petite clef. C'est un fichier de type inconnu d'une taille de 1 Mo. Copie de l'en-tête LUKS

Afin de vérifier pour de bon, il suffit d'appeler la commande que l'on a vue un peu plus haut, en remplaçant /dev/sdc1 par le chemin vers le fichier tetedesecret :

sudo cryptsetup luksDump /media/stephane/5877-7E7C/tetedesecret donne bien le même en-tête que celle de la clef chiffrée.

Modifier ou ajouter des mots de passe

Modifier un mot de passe peut se faire facilement via l'utilitaire Disque en cliquant sur le bouton des 2 engrenages puis Modifier la phrase de passe....

Ajouter des mots de passe pour un même volume est tout aussi simple à réaliser. On voit dans le fichier en-tête que cette possibilité est représentée par les lignes Key Slot de 0 à 7. Il est donc possible d'avoir 8 mots ou phrases de passe différents pour un seul périphérique.

Cela peut-être envisagé si par exemple, plusieurs personnes travaillent sur le même disque. Chaque personne peut ainsi détenir un mot de passe différent des autres.

La ligne de commande pour réaliser cette opération est très simple, par exemple, ici cela donne :

sudo cryptsetup luksAddKey /dev/sdc1

Il faut d'abord entrer une phrase de passe existante, celle créée au départ : C'est La demo-12_19. Ensuite, il faudra entrer une nouvelle phrase de passe. Attention, ici, même pas de points. Entrer une phrase de passe dans le Terminal se fait « en aveugle ».

Dans le contexte de plusieurs utilisateurs ayant chacun leur phrase de passe, faire une copie de l'en-tête LUKS n'est sans doute pas du luxe.

C'est tout. On devrait maintenant voir dans l'en-tête, des données au niveau de Key Slot 1.

La commande finale

luksErase est sans appel.

sudo cryptsetup luksErase /dev/sdc1 détruit l'en-tête et rend donc de ce fait les données définitivement inaccessibles.

Voilà ! Maintenant, il est enfin possible de perdre sa clef USB qui contient nos photos tout nu.