Cryptage d’un dossier sur une clef USB
Comment transporter des données sans crainte de se les faire voler ?
Tout est parti de la discussion suivante (23 h, grosse fatigue :) :
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.
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).
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).
Préparation du terrain
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)
Modules relatifs au montage de périphériques loop :
modprobe loop
modprobe cryptoloop
Modules relatifs au cryptage (un seul des 3 au choix) :
modprobe serpent
modprobe aes
modprobe aes-i586
Si on fait un lsmod, on doit retrouver nos modules chargés.
(Dans le cas d’un PC Pentium, on peut essayer aes-i586. C’est pareil mais un peu plus rapide car aes-i586 utilise des instruction de pentium alors que aes n’utilise que des instructions de 80386)
Création du fichier d’accueil
Dans l’exemple (cas d’une clef USB) :
mkdir /mnt/removable/sauve
On crée un fichier de 100 Mo (voyons grand) qui s’appellera /mnt/removable/sauve/.prive
et on le remplit avec des zero :
dd if=/dev/zero of=/mnt/removable/sauve/.prive bs=1M count=100
On peut aussi le remplir aléatoirement avec /dev/urandom :
dd if=/dev/urandom of=/mnt/removable/sauve/.prive bs=1M count=100
Mise en place du fichier d’accueil en tant que périphérique virtuel crypté dans /dev
Maintenant, il nous faut déclarer le fichier dans /dev comme si c’était un périphérique. C’est la commande losetup qui permet :
losetup -e aes-i586-512 /dev/loop0 /mnt/removable/sauve/.prive
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".
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).
Par contre, le mot de passe doit avoir un minimum de 20 caractères.
Ensuite, on formate la partition virtuelle :
mkfs -t ext3 /dev/loop0
et tant qu’on y est, on refait une passe de formatage avec test de blocs :
mkfs -c /dev/loop0
Voila, ça y est, on a maintenant un périphérique virtuel qui contient un système de fichier crypté.
Montage du périphérique virtuel crypté
il ne nous reste plus qu’a lui créer un point de montage dans un dossier (au choix) et à le monter :
mkdir /home/~/secret
mount /dev/loop0 /home/~/secret
On peut (pourquoi pas ? ) préférer faire le montage dans la clef USB elle même :
mkdir /mnt/removable/sauve/ici
mount /dev/loop0 /mnt/removable/sauve/ici
Si on fait un df, on doit voir :
#df
/dev/loop0 97M 1,1M 91M 2% /mnt/removable/sauve/ici
Si on veut pouvoir accéder au contenu de la clef en tant que simple user, il faut mettre un petit coup de chmod :
chmod 777 /mnt/removable/sauve/ici
Et on quitte le mode root.
Automatisation du montage/démontage
Voila maintenant un petit script qui permet d’automatiser le montage :
------------------------------------------
#!/bin/bash
#on charge le module de cryptage
modprobe loop
modprobe cryptoloop
modprobe aes-i586
#on accroche le fichier crypte sur loop0
losetup -e aes-i586 /dev/loop0 /mnt/removable/sauve/.prive
#on monte loop sur son ancrage
mount /dev/loop0 /mnt/removable/sauve/ici
------------------------------------------
Et un autre petit script qui permet d’automatiser le démontage :
------------------------------------------
#!/bin/bash
#pour retourner a la racine
cd /
#démontage
umount /mnt/removable/sauve/ici
#on détache la partition virtuelle
losetup -d /dev/loop0
-----------------------------------------
Ces deux petits scripts trouveront leur place dans :
/mnt/removable/sauve
et seront donc disponibles dès que la clef USB sera montée.
Trucs, astuces et petits gags
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.
Références :
Tout d’abord, une adresse qui est un bon point de départ pour aller plus loin :
http://openpgp.vie-privee.org/linux.html
Technique
L’utilisation de losetup -e aes-i586-512 donne sur certaines machines faiblardes des accès vraiment trop lents. On peut alors utiliser aes-586-128 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.
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.
Gags :
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
Ca peut arriver ( !). Dans ce cas, rien n’empêche d’utiliser loop1...loop7.
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 :-).
Commentaires
Cryptage d’un dossier sur une clef USB
> Cryptage d’un dossier sur une clef USB
Non. Il ne faut pas confondre :
le module AES s’adresse à toutes les machines basées sur un compatible intel : 386, 486, pentium, amd64...
le module AES-i586 ne s’adresse qu’aux machines basées sur un compatible intel pentium : pentium, celeron, athlon, amd64...
Merci pour ton post car il met en évidence certains manque de détails de mon article.
> Cryptage d’un dossier sur une clef USB
extra :-)
Je préciserais juste (parsque je me suis pris la tête quelques minutes) que si vous tapez un mauvais mot de passe, il faut détacher la partition virtuelle avant une nouvelle tentative :
losetup -d /dev/loop0.
Si j’ai bien compris, lorsque j’utilise aes tout court la longueur de la clef dépend de la capacité de la clef ?
merci
> Cryptage d’un dossier sur une clef USB
Ok ! c’est corrigé. Merci :-)
> Cryptage d’un dossier sur une clef USB
faute d’orthographe :
"discussion" et pas "discution" (au début du texte)
> Cryptage d’un dossier sur une clef USB
merci pour la correction !
effectivement, c’est une erreur de ma part. le montage n’a rien a voir avec le dossier /tmp ou /home/ /tmp
et je remplace donc :
mount /dev/loop0 /home/~/tmp/secret
par :
mount /dev/loop0 /home/~/secret
j’en ai profité pour faire quelques modifs "cosmetiques" et j’ai détaillé un peu plus certains chapitres.
merci encore !
> Cryptage d’un dossier sur une clef USB
Je trouve l’écriture de ces lignes étonnante :
mkdir /home/ /secret
mount /dev/loop0 /home/ /tmp/secret
Tu ne voulais pas mettre :
mkdir /secret
mount /dev/loop0 /tmp/secret
plutot ?
Pour moi = le home personnel (qui est identique a $HOME)
[gnunux@myhost ]$ ls -d /home/
ls : /home/ : Aucun fichier ou répertoire de ce type
[gnunux@myhost ]$ ls -d
/home/gnunux
[gnunux@myhost ]$
Voila ;)