Important
Avant de lire ceci, il est très vivement recommandé de lire la partie théorique. J’y explique clairement (enfin, je crois…) la différence entre les deux exemples données plus bas, que ce soit en ce qui concerne l’utilisation de luks, ou la différence entre les cyphers.
Solution 1 : Sans utiliser le format luks
Nous allons donc chiffrer un « device », que ce soit une partition de disque dur, un volume logique LVM, un raid ou n’importe quoi d’autre. Je prendrai pour l’exemple un device appelé /dev/xxx, à vous d’adapter à votre cas de figure. Les commandes suivantes sont à passer en tant que root :
cryptsetup -y --cipher=aes-xts-plain64 -s 512 create toto /dev/xxx
Cette commande vous demandera un mot de passe, mot de passe qui sera donc utilisé pour le chiffrement. Voici la signification des différentes options et paramètres :
-y Le mot de passe est demandé deux fois (vérification) aes-xts-plain64 Le cypher utilisé. Ici, c'est de l'AES -s 512 Avec une clef (déduite du mot de passe) longue de 512 bits toto Le nom du volume une fois déchiffré. /dev/xxx Le device que l'on veut chiffrer
Et voila, c’est finit. Vous avez maintenant un nouveau device : /dev/mapper/toto. Tout ce que vous faites dessus sera chiffré, puis envoyé sur /dev/xxx
Nous allons par exemple créer un système de fichier, puis créer un fichier vide. NB : La création du système de fichier détruira évidement tout ce qui serait déjà présent sur /dev/xxx…
mkfs -t ext4 /dev/mapper/toto mount /dev/mapper/toto /mnt touch /mnt/fichier_vide ls /mnt
Mon fichier « fichier_vide » est bien présent. Nous allons maintenant démonter ce volume et rendre totalement inaccessible ce fichier, pour toute personne qui n’aurait pas connaissance du bon cypher, et de la bonne clef :
umount /mnt cryptsetup remove toto
Il reste à vérifier que l’on est bien capable de retrouver ses données. On utilise exactement la même commande cryptsetup pour re-créer le volume virtuel « toto » (le -y n’est plus vraiment indispensable) :
cryptsetup --cipher=aes-xts-plain64 -s 512 create toto /dev/xxx mount /dev/mapper/toto /mnt ls -l /mnt
Bingo !
Remarque :
Le cypher utilise le mode « plain64 ». Vous trouverez peut etre ailleurs des tutos indiquant « plain » sans le 64 derrière. Le plain64 est totalement compatible avec plain « tout court », (compatibilité « ascendante »), vous pouvez donc indiquer plain64 pour déchiffrer un volume chiffrer en « plain ». L’inconvénient du mode plain et qu’il introduit une vulnérabilité du chiffrement pour des volumes ayant une taille supérieure à 2 To. (Voir ici). Globalement, utilisez toujours plain64 si votre système est suffisamment récent pour cela.
Solution 2 :En utilisant luks (et serpent pour le cypher).
Complexions un tout petit peu les choses. D’abord en utilisant un cypher plus sécurisé. Vérifiez si votre noyau sait faire du « serpent » avec une commande du type :
grep serpent /proc/crypto
Si cette commande ne renvoi rien, c’est que cette fonctionnalité n’est pas activée par défaut dans votre noyau. Chargez le module correspondant, et ré-essayez :
modprobe serpent grep serpent /proc/crypto
Ca fonctionne ? bien, on continu. Nous allons maintenant FORMATER le device en utilisant luksFormat. ATTENTION : Toutes les données présentes sur le device seront effacées dès que cette commande sera terminée :
cryptsetup --cipher=serpent-xts-plain64 -s 512 luksFormat /dev/xxx
Cette commande vous demandera de taper YES (en majuscule) pour valider, puis un mot de passe (nécéssaire pour administrer le volume). A part le cypher qui change (juste pour l’exemple hein, on aurait très bien pu reprendre AES !), on observe que « toto » à disparu. Pour le moment, nous n’avons fait que formater le device /dev/xxx. (Opération à ne faire qu’une fois !) et nous ne sommes donc pas encore prêt à l’utiliser. Vous pouvez voir que le formatage à fonctionné, et que le cypher est maintenant renseigné directement à l’intérieur de /dev/xxx, en tapant :
cryptsetup luksDump /dev/xxx
Vous pouvez voir en bas 8 « slots » affichés. Le premier est utilisé par le mot de passe que vous avez rentré précédemment. Libre à vous d’en indiquer d’autres (ou d’en effacer etc) en utilisant les commandes disponibles. Lancez simplement « cryptsetup –help » pour en avoir la liste, tout est simple et explicite, alors je ne vais pas m’étendre sur le sujet.
Maintenant que nous avons crée notre volume luks, voyons comment « l’ouvrir » pour pouvoir l’utiliser (équivalent de la commande cryptsetup create) :
cryptsetup luksOpen /dev/xxx toto
Simple non ? Toutes les informations de chiffrement étant déjà contenu dans /dev/xxx, il ne reste plus qu’a taper le mot de passe (en réalité l’un des mots de passe, n’importe lequel, si vous en avez utilisés plusieurs « slots »). A partir de la, vous vous en doutez, le mode de fonctionement est exactement le même que dans le premier cas. Maintenant que nous avons notre volume « déchiffré » virtuel « /dev/mapper/toto », on peut le formater en ext4 (ou autre) etc. Voir plus haut.
Afin « d’oublier » le mot de passe, (équivalent du cryptsetup remove du dessus), il faudra utiliser la commande :
cryptsetup luksClose /dev/xxx
LVM, et redimensionnement de volumes chiffrés
Je l’ai dit, cryptsetup peut être utilisé avec n’importe quoi. /dev/xxx peut donc parfaitement etre un volume logique du type /dev/groupe/volume. Ca, je pense que tout le monde le comprend bien. Oui mais, l’intéret de LVM est de pouvoir modifier à chaud la taille des volumes. Que va t-il se passer pour cryptsetup si le device change de taille ? Et bien pas grand chose. Il faut simplement penser à modifier la taille de device virtuel (toto) pour qu’il corresponde avec la nouvelle taille du volume réel (/dev/xxx). Voila par exemple comment augmenter la taille d’un système de fichier en ext4 qui se trouverai sur un volume logique chiffré « toto », utilisant le device « /dev/groupe/volume » :
lvresize -L +50g /dev/groupe/volume cryptsetup resize toto resize2fs /dev/mapper/toto
Liens
- Autres exemples d’utilisations, en utilisant un fichier comme conteneur et avec d’autres cyphers
- Des discussions concernant les performances
- Pourquoi « plain64 » au lieu de « plain »
- Une doc TROP technique sur ubuntu-fr ! (rarissime, profitez en avant qu’elle soit supprimée 😉
Bon chiffrement !