Skip to Content

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 :) :

  •  J’ai 20 mots de passes et j’arrive jamais à me rappeler de tous. Où je peux les noter sans me les faire piquer ?
  •  Dans un fichier ou un dossier crypté ! Et il n’y a plus besoin que d’un seul mot pour tout retrouver.

    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) :

  •  la clef usb est montée sur = /mnt/removable
  •  on crée dans la clef un dossier /mnt/removable/sauve

       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 :

  •  de mettre en place la liaison cryptée
  •  d’accrocher cette liaison dans /dev

       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

  •  Lenteur d’accès.

    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.

  •  Changement de mot de passe.

    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 :

  •  si je me trompe dans le mot de passe, je suis parfois coincé pour la suite.

    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

  •  j’ai une erreur qui m’annonce que loop0 est indisponible

    Ca peut arriver ( !). Dans ce cas, rien n’empêche d’utiliser loop1...loop7.

  •  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 ?

    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 :

  •  AES-128 : module de cryptage AES i386 avec clef de 128 bits
  •  AES-i586-128 module de cryptage AES i586 avec clef de 128 bits
  •  AES-512 module de cryptage AES i386 avec clef de 512 bits
  •  AES-i586-512 module de cryptage AES i586 avec clef de 512 bits
    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 ;)