{"id":519,"date":"2011-12-05T21:36:27","date_gmt":"2011-12-05T20:36:27","guid":{"rendered":"https:\/\/hoper.dnsalias.net\/atdc\/?p=519"},"modified":"2017-05-03T13:41:16","modified_gmt":"2017-05-03T11:41:16","slug":"chiffrement-pratique","status":"publish","type":"post","link":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/2011\/12\/05\/chiffrement-pratique\/","title":{"rendered":"Chiffrement &#8211; Pratique"},"content":{"rendered":"<div class=\"post-content\">\n<h4>Important<\/h4>\n<p>Avant de lire ceci, il est tr\u00e8s vivement recommand\u00e9 de lire la <a href=\"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/2011\/12\/01\/chiffrement-theorie\/\">partie th\u00e9orique<\/a>. J&rsquo;y explique clairement (enfin, je crois&#8230;) la diff\u00e9rence entre les deux exemples donn\u00e9es plus bas, que ce soit en ce qui concerne l&rsquo;utilisation de luks, ou la diff\u00e9rence entre les cyphers.<\/p>\n<p>&nbsp;<\/p>\n<h3>Solution 1 : Sans utiliser le format luks<\/h3>\n<p>Nous allons donc chiffrer un \u00ab\u00a0device\u00a0\u00bb, que ce soit une partition de disque dur, un volume logique LVM, un raid ou n&rsquo;importe quoi d&rsquo;autre. Je prendrai pour l&rsquo;exemple un device appel\u00e9 \/dev\/xxx, \u00e0 vous d&rsquo;adapter \u00e0 votre cas de figure. Les commandes suivantes sont \u00e0 passer en tant que root :<\/p>\n<pre>cryptsetup -y --cipher=aes-xts-plain64 -s 512 create toto \/dev\/xxx\r\n<\/pre>\n<p>Cette commande vous demandera un mot de passe, mot de passe qui sera donc utilis\u00e9 pour le chiffrement. Voici la signification des diff\u00e9rentes options et param\u00e8tres :<\/p>\n<pre>-y                       Le mot de passe est demand\u00e9 deux fois (v\u00e9rification)\r\naes-xts-plain64          Le cypher utilis\u00e9. Ici, c'est de l'AES\r\n-s 512                   Avec une clef (d\u00e9duite du mot de passe) longue de 512 bits \r\ntoto                     Le nom du volume une fois d\u00e9chiffr\u00e9. \r\n\/dev\/xxx                 Le device que l'on  veut chiffrer\r\n<\/pre>\n<p>Et voila, c&rsquo;est finit. Vous avez maintenant un nouveau device : \/dev\/mapper\/toto. Tout ce que vous faites dessus sera chiffr\u00e9, puis envoy\u00e9 sur \/dev\/xxx<\/p>\n<p>Nous allons par exemple cr\u00e9er un syst\u00e8me de fichier, puis cr\u00e9er un fichier vide. NB : La cr\u00e9ation du syst\u00e8me de fichier d\u00e9truira \u00e9videment tout ce qui serait d\u00e9j\u00e0 pr\u00e9sent sur \/dev\/xxx&#8230;<\/p>\n<pre>mkfs -t ext4 \/dev\/mapper\/toto\r\nmount \/dev\/mapper\/toto \/mnt\r\ntouch \/mnt\/fichier_vide\r\nls \/mnt\r\n<\/pre>\n<p>Mon fichier \u00ab\u00a0fichier_vide\u00a0\u00bb est bien pr\u00e9sent. Nous allons maintenant d\u00e9monter ce volume et rendre totalement inaccessible ce fichier, pour toute personne qui n&rsquo;aurait pas connaissance du bon cypher, et de la bonne clef :<\/p>\n<pre>umount \/mnt\r\ncryptsetup remove toto\r\n<\/pre>\n<p>Il reste \u00e0 v\u00e9rifier que l&rsquo;on est bien capable de retrouver ses donn\u00e9es. On utilise exactement la m\u00eame commande cryptsetup pour re-cr\u00e9er le volume virtuel \u00ab\u00a0toto\u00a0\u00bb (le -y n&rsquo;est plus vraiment indispensable) :<\/p>\n<pre>cryptsetup --cipher=aes-xts-plain64 -s 512 create toto \/dev\/xxx\r\nmount \/dev\/mapper\/toto \/mnt\r\nls -l \/mnt\r\n<\/pre>\n<p>Bingo !<\/p>\n<p><strong>Remarque :<\/strong><\/p>\n<p>Le cypher utilise le mode \u00ab\u00a0plain64\u00a0\u00bb. Vous trouverez peut etre ailleurs des tutos indiquant \u00ab\u00a0plain\u00a0\u00bb sans le 64 derri\u00e8re. Le plain64 est totalement compatible avec plain \u00ab\u00a0tout court\u00a0\u00bb, (compatibilit\u00e9 \u00ab\u00a0ascendante\u00a0\u00bb), vous pouvez donc indiquer plain64 pour d\u00e9chiffrer un volume chiffrer en \u00ab\u00a0plain\u00a0\u00bb. L&rsquo;inconv\u00e9nient du mode plain et qu&rsquo;il introduit une vuln\u00e9rabilit\u00e9 du chiffrement pour des volumes ayant une taille sup\u00e9rieure \u00e0 2 To. (Voir <a href=\"http:\/\/bugs.debian.org\/cgi-bin\/bugreport.cgi?bug=600384\">ici<\/a>). Globalement, utilisez toujours plain64 si votre syst\u00e8me est suffisamment r\u00e9cent pour cela.<\/p>\n<p>&nbsp;<\/p>\n<h3>Solution 2 :En utilisant luks (et serpent pour le cypher).<\/h3>\n<p>Complexions un tout petit peu les choses. D\u2019abord en utilisant un cypher plus s\u00e9curis\u00e9. V\u00e9rifiez si votre noyau sait faire du \u00ab\u00a0serpent\u00a0\u00bb avec une commande du type :<\/p>\n<pre>grep serpent \/proc\/crypto\r\n<\/pre>\n<p>Si cette commande ne renvoi rien, c&rsquo;est que cette fonctionnalit\u00e9 n&rsquo;est pas activ\u00e9e par d\u00e9faut dans votre noyau. Chargez le module correspondant, et r\u00e9-essayez :<\/p>\n<pre>modprobe serpent\r\ngrep serpent \/proc\/crypto\r\n<\/pre>\n<p>Ca fonctionne ? bien, on continu. Nous allons maintenant FORMATER le device en utilisant luksFormat. ATTENTION : Toutes les donn\u00e9es pr\u00e9sentes sur le device seront effac\u00e9es d\u00e8s que cette commande sera termin\u00e9e :<\/p>\n<pre>cryptsetup --cipher=serpent-xts-plain64 -s 512 luksFormat \/dev\/xxx\r\n<\/pre>\n<p>Cette commande vous demandera de taper YES (en majuscule) pour valider, puis un mot de passe (n\u00e9c\u00e9ssaire pour administrer le volume). A part le cypher qui change (juste pour l&rsquo;exemple hein, on aurait tr\u00e8s bien pu reprendre AES !), on observe que \u00ab\u00a0toto\u00a0\u00bb \u00e0 disparu. Pour le moment, nous n&rsquo;avons fait que formater le device \/dev\/xxx. (Op\u00e9ration \u00e0 ne faire qu&rsquo;une fois !) et nous ne sommes donc pas encore pr\u00eat \u00e0 l&rsquo;utiliser. Vous pouvez voir que le formatage \u00e0 fonctionn\u00e9, et que le cypher est maintenant renseign\u00e9 directement \u00e0 l&rsquo;int\u00e9rieur de \/dev\/xxx, en tapant :<\/p>\n<pre>cryptsetup luksDump \/dev\/xxx\r\n<\/pre>\n<p>Vous pouvez voir en bas 8 \u00ab\u00a0slots\u00a0\u00bb affich\u00e9s. Le premier est utilis\u00e9 par le mot de passe que vous avez rentr\u00e9 pr\u00e9c\u00e9demment. Libre \u00e0 vous d&rsquo;en indiquer d&rsquo;autres (ou d&rsquo;en effacer etc) en utilisant les commandes disponibles. Lancez simplement \u00ab\u00a0cryptsetup &#8211;help\u00a0\u00bb pour en avoir la liste, tout est simple et explicite, alors je ne vais pas m\u2019\u00e9tendre sur le sujet.<\/p>\n<p>Maintenant que nous avons cr\u00e9e notre volume luks, voyons comment \u00ab\u00a0l&rsquo;ouvrir\u00a0\u00bb pour pouvoir l&rsquo;utiliser (\u00e9quivalent de la commande cryptsetup create) :<\/p>\n<pre>cryptsetup luksOpen \/dev\/xxx toto\r\n<\/pre>\n<p>Simple non ? Toutes les informations de chiffrement \u00e9tant d\u00e9j\u00e0 contenu dans \/dev\/xxx, il ne reste plus qu&rsquo;a taper le mot de passe (en r\u00e9alit\u00e9 l&rsquo;un des mots de passe, n&rsquo;importe lequel, si vous en avez utilis\u00e9s plusieurs \u00ab\u00a0slots\u00a0\u00bb). A partir de la, vous vous en doutez, le mode de fonctionement est exactement le m\u00eame que dans le premier cas. Maintenant que nous avons notre volume \u00ab\u00a0d\u00e9chiffr\u00e9\u00a0\u00bb virtuel \u00ab\u00a0\/dev\/mapper\/toto\u00a0\u00bb, on peut le formater en ext4 (ou autre) etc. Voir plus haut.<\/p>\n<p>Afin \u00ab\u00a0d&rsquo;oublier\u00a0\u00bb le mot de passe, (\u00e9quivalent du cryptsetup remove du dessus), il faudra utiliser la commande :<\/p>\n<pre>cryptsetup luksClose \/dev\/xxx<\/pre>\n<p>&nbsp;<\/p>\n<h3>LVM, et redimensionnement de volumes chiffr\u00e9s<\/h3>\n<p>Je l&rsquo;ai dit, cryptsetup peut \u00eatre utilis\u00e9 avec n&rsquo;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&rsquo;int\u00e9ret de LVM est de pouvoir modifier \u00e0 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 \u00e0 modifier la taille de device virtuel (toto) pour qu&rsquo;il corresponde avec la nouvelle taille du volume r\u00e9el (\/dev\/xxx). Voila par exemple comment augmenter la taille d&rsquo;un syst\u00e8me de fichier en ext4 qui se trouverai sur un volume logique chiffr\u00e9 \u00ab\u00a0toto\u00a0\u00bb, utilisant le device \u00ab\u00a0\/dev\/groupe\/volume\u00a0\u00bb :<\/p>\n<pre>lvresize -L +50g \/dev\/groupe\/volume\r\ncryptsetup resize toto      \r\nresize2fs \/dev\/mapper\/toto\r\n<\/pre>\n<h3>Liens<\/h3>\n<ul>\n<li>Autres <a href=\"http:\/\/www.freeotfe.org\/docs\/Main\/Linux_examples__LUKS.htm\">exemples<\/a> d&rsquo;utilisations, en utilisant un fichier comme conteneur et avec d&rsquo;autres cyphers<\/li>\n<li>Des discussions concernant les <a href=\"http:\/\/www.gossamer-threads.com\/lists\/gentoo\/security\/62439\">performances<\/a><\/li>\n<li>Pourquoi \u00ab\u00a0<a href=\"http:\/\/bugs.debian.org\/cgi-bin\/bugreport.cgi?bug=600384\">plain64<\/a>\u00a0\u00bb au lieu de \u00ab\u00a0plain\u00a0\u00bb<\/li>\n<li>Une doc <a href=\"http:\/\/doc.ubuntu-fr.org\/utilisateurs\/lildadou\/cryptsetup\">TROP<\/a> technique sur ubuntu-fr ! (rarissime, profitez en avant qu&rsquo;elle soit supprim\u00e9e \ud83d\ude09<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>Bon chiffrement !<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Important Avant de lire ceci, il est tr\u00e8s vivement recommand\u00e9 de lire la partie th\u00e9orique. J&rsquo;y explique clairement (enfin, je crois&#8230;) la diff\u00e9rence entre les deux exemples donn\u00e9es plus bas, que ce soit en ce qui concerne l&rsquo;utilisation de luks, ou la diff\u00e9rence entre les cyphers. &nbsp; Solution 1 : Sans utiliser le format luks [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-519","post","type-post","status-publish","format-standard","hentry","category-non-classe"],"_links":{"self":[{"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/posts\/519","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/comments?post=519"}],"version-history":[{"count":2,"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/posts\/519\/revisions"}],"predecessor-version":[{"id":523,"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/posts\/519\/revisions\/523"}],"wp:attachment":[{"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/media?parent=519"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/categories?post=519"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/tags?post=519"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}