<p class="spip">Comment transporter des données sans crainte de se les faire voler ?</p>

<p class="spip">Tout est parti de la discussion suivante (23 h, grosse fatigue :) : 
<br /></p>
<li> J’ai 20 mots de passes et j’arrive jamais à me rappeler de tous. Où je peux les noter sans me les faire piquer ?
<br /><li> Dans un fichier ou un dossier crypté ! Et il n’y a plus besoin que d’un seul mot pour tout retrouver.
<p class="spip">Dans cet article, je décris la méthode que j’emploie pour crypter un dossier qui ne sera accessible que par mot de passe. La taille du dossier est fixe et doit être choisie en fonction des besoins.</p>

<p class="spip">Tous les systemes Unix (linux) en sont potentiellement capables mais dans le cas de Linux, je conseille l’utilisation d’un noyau 2.6 au minimum car il est déja conçu pour accepter ce type de fs (cryptoloop).</p>

<p class="spip">Je vais donc détailler ici la procédure complète de création et d’utilisation d’un dossier crypté (dans un portable, une clef USB ou un disque dur amovible).</p>

<hr>
<h3>Préparation du terrain</h3>
<p class="spip">Sur une machine Linux, pour utiliser le cryptage et crypter, il nous faut charger quelques modules noyau. (a partir d’ici, on travaille en root)</p>

<p class="spip">Modules relatifs au montage de périphériques loop :</p>
<div style='text-align: left;' class='spip_code' dir='ltr'><code>    modprobe loop<br />
    modprobe cryptoloop</code></div>
<p class="spip">Modules relatifs au cryptage (un seul des 3 au choix) :</p>
<div style='text-align: left;' class='spip_code' dir='ltr'><code>    modprobe serpent<br />
    modprobe aes<br />
    modprobe aes-i586</code></div>
<p class="spip">Si on fait un lsmod, on doit retrouver nos modules chargés.</p>

<p class="spip">(Dans le cas d’un PC Pentium, on peut essayer <u>aes-i586</u>. C’est pareil mais un peu plus rapide car <u>aes-i586</u> utilise des instruction de pentium alors que <u>aes</u> n’utilise que des instructions de 80386)</p>

<h3>Création du fichier d’accueil</h3>
<p class="spip">Dans l’exemple (cas d’une clef USB) :</p>

<li> la clef usb est montée sur = /mnt/removable
<br /><li> on crée dans la clef un dossier /mnt/removable/sauve
<p class="spip"><code class='spip_code' dir='ltr'>    mkdir /mnt/removable/sauve</code></p>

<p class="spip">On crée un fichier de 100 Mo (voyons grand) qui s’appellera <i class="spip">/mnt/removable/sauve/.prive</i>
et on le remplit avec des zero :</p>

<p class="spip"><code class='spip_code' dir='ltr'>    dd if=/dev/zero of=/mnt/removable/sauve/.prive bs=1M count=100</code></p>

<p class="spip">On peut aussi le remplir aléatoirement avec /dev/urandom :</p>

<p class="spip"><code class='spip_code' dir='ltr'>    dd if=/dev/urandom of=/mnt/removable/sauve/.prive bs=1M count=100</code></p>

<hr>
<h3>Mise en place du fichier d’accueil en tant que périphérique virtuel crypté dans /dev</h3>
<p class="spip">Maintenant, il nous faut déclarer le fichier dans /dev comme si c’était un périphérique. C’est la commande <i class="spip">losetup</i> qui permet :
<br /></p>
<li> de mettre en place la liaison cryptée
<br /><li> d’accrocher cette liaison dans /dev
<p class="spip"><code class='spip_code' dir='ltr'>    losetup -e aes-i586-512 /dev/loop0 /mnt/removable/sauve/.prive</code></p>

<p class="spip">Dans l’exemple ci-dessus, j’utilise une clef de 512 bits qui est considérée par le NSA comme suffisante pour un niveau "top secret".</p>

<p class="spip">Pour un niveau "secret" ou "confidentiel", on peut se contenter de clefs 128 ou 256 bits qui résisteront largement aux plus grosses machines de crackage "grand public" (et les transferts seront plus rapides).</p>

<p class="spip">Par contre, le mot de passe doit avoir un minimum de 20 caractères.</p>

<p class="spip">Ensuite, on formate la partition virtuelle :</p>

<p class="spip"><code class='spip_code' dir='ltr'>    mkfs -t ext3 /dev/loop0</code></p>

<p class="spip">et tant qu’on y est, on refait une passe de formatage avec test de blocs :</p>

<p class="spip"><code class='spip_code' dir='ltr'>    mkfs -c /dev/loop0</code></p>

<p class="spip">Voila, ça y est, on a maintenant un périphérique virtuel qui contient un système de fichier crypté.</p>

<h3>Montage du périphérique virtuel crypté</h3>
<p class="spip">il ne nous reste plus qu’a lui créer un point de montage dans un dossier (au choix) et à le monter :</p>
<div style='text-align: left;' class='spip_code' dir='ltr'><code>    mkdir /home/~/secret<br />
    mount /dev/loop0 /home/~/secret</code></div>
<p class="spip">On peut (pourquoi pas ? ) préférer faire le montage dans la clef USB elle même :</p>
<div style='text-align: left;' class='spip_code' dir='ltr'><code>    mkdir /mnt/removable/sauve/ici<br />
    mount /dev/loop0 /mnt/removable/sauve/ici</code></div>
<p class="spip">Si on fait un df, on doit voir :</p>
<div style='text-align: left;' class='spip_code' dir='ltr'><code>    #df<br />
    /dev/loop0   97M   1,1M   91M   2%   /mnt/removable/sauve/ici</code></div>
<p class="spip">Si on veut pouvoir accéder au contenu de la clef en tant que simple user, il faut mettre un petit coup de chmod :</p>

<p class="spip"><code class='spip_code' dir='ltr'>    chmod 777 /mnt/removable/sauve/ici</code></p>

<p class="spip">Et on quitte le mode root.</p>

<hr>
<h3>Automatisation du montage/démontage</h3>
<p class="spip">Voila maintenant un petit script qui permet d’automatiser le montage :</p>
<div style='text-align: left;' class='spip_code' dir='ltr'><code>------------------------------------------<br />
#!/bin/bash<br />
<br />
#on charge le module de cryptage<br />
modprobe loop<br />
modprobe cryptoloop<br />
modprobe aes-i586<br />
<br />
#on accroche le fichier crypte sur loop0<br />
losetup -e aes-i586 /dev/loop0 /mnt/removable/sauve/.prive<br />
<br />
#on monte loop sur son ancrage<br />
mount /dev/loop0 /mnt/removable/sauve/ici<br />
------------------------------------------<br />
</code></div>
<p class="spip">Et un autre petit script qui permet d’automatiser le démontage :</p>
<div style='text-align: left;' class='spip_code' dir='ltr'><code>------------------------------------------<br />
#!/bin/bash<br />
<br />
#pour retourner a la racine<br />
cd /<br />
<br />
#démontage<br />
umount /mnt/removable/sauve/ici<br />
<br />
#on détache la partition virtuelle<br />
losetup -d /dev/loop0<br />
-----------------------------------------<br />
</code></div>
<p class="spip">Ces deux petits scripts trouveront leur place dans :</p>

<p class="spip">/mnt/removable/sauve</p>

<p class="spip">et seront donc disponibles dès que la clef USB sera montée.</p>

<hr>
<h3>Trucs, astuces et petits gags</h3>
<p class="spip">Cet article n’a d’autres prétentions que d’être un simple mode d’emploi. Mais bien sûr, quelques précisions supplémentaires ne feront pas de mal.</p>

<p class="spip"><strong class="spip">Références :</strong></p>

<p class="spip">Tout d’abord, une adresse qui est un bon point de départ pour aller plus loin :
<a href="http://openpgp.vie-privee.org/linux.html" class="spip_url spip_out">http://openpgp.vie-privee.org/linux.html</a></p>

<p class="spip"><strong class="spip">Technique</strong></p>

<li> Lenteur d’accès.
<p class="spip">L’utilisation de <i class="spip">losetup -e aes-i586-512</i> donne sur certaines machines faiblardes des accès vraiment trop lents. On peut alors utiliser <i class="spip">aes-586-128</i> sans trop de craintes car la clef 128 bits est de toutes façons suffisament solide pour résister aux attaques brutes même avec un gros bi-processeur. L’AES reste pour l’instant une valeur sûre.</p>

<li> Changement de mot de passe.
<p class="spip">Non, désolé, on change pas. Le mot de passe de l’AES n’est pas un mot de passe. C’est un mot de cryptage et les données sont cryptées à travers lui. La seule solution consiste à créer un nouveau fichier crypté avec un autre mot de passe et à copier les données du dossier 1 vers le dossier 2. Quand c’est fini, on détruit le vieux fichier 1.</p>

<p class="spip"><strong class="spip">Gags :</strong></p>

<li> <i class="spip">si je me trompe dans le mot de passe, je suis parfois coincé pour la suite.</i>
<p class="spip">Oui. Il faut donc procéder à un démontage du périphérique virtuel avant de recommencer. Pour cela, on peut lancer le script de démontage ou bien taper la commande : losetup -d /dev/loop0</p>

<li> <i class="spip">j’ai une erreur qui m’annonce que loop0 est indisponible</i>
<p class="spip">Ca peut arriver ( !). Dans ce cas, rien n’empêche d’utiliser loop1...loop7.</p>

<li> <i class="spip">sur ma station, la clef usb se monte automatiquement sur /mnt/removable alors que sur mon portable, elle se monte en /media/sd0. Comment faire pour adapter le script ?</i>
<p class="spip">Je n’ai pas de solution simple. Deux scripts peut-être ? Ou alors une usine à gaz en bash avec autoreconnaissance du point de montage (good luck :-).</p>