Créer une clé USB chiffrée via LUKS avec cryptsetup

I. Présentation

A l'air du cloud, de la dématérialisation, du "je ne sais pas où sont mes données", certaines de ces données ont tout intérêt à rester très proche de vous, voir directement dans votre poche.

Et il est même préférable de prévoir le jour où elles en sortiront par inadvertance. Aujourd'hui, nous allons créer une clé USB chiffrée via le système de chiffrement de disque LUKS (Linux Unified Key Setup).

Un petit mot sur LUKS, système de chiffrement de disque créé en 2004 par Clemens Fruhwirth. A la base créé pour fonctionner sous Linux, LUKS a aujourd'hui l'avantage d'être un système indépendant de l'OS et surtout indépendant du programme de chiffrement/déchiffrement que l'on utilise. Cela signifie que plusieurs programmes peuvent traiter le chiffrement/déchiffrement d'un système de chiffrement de disque LUKS, sous Linux comme sous Windows !

LUKS est un utilitaire de type "Block Layer Encryption" (Chiffrement au niveau du bloc). Cela signifie que tout est chiffré sur la partition, cela est aussi appelé "on-disk encryption" ou "full-disk encryption". On le différencie du "File-System Layer encryption" qui lui ne chiffre uniquement qu'au niveau fichier/dossier.

Pour des explications plus précises et détaillées à ce sujet, je vous oriente vers cet article (en anglais) : Block-layer Encryption

Il serait bien entendu possible de ne chiffrement qu'une partition et non la clé entièrement, mais nous allons ici créer une partition couvrant l'intégralité d'une clé USB (tutoriel fait avec un clé USB de 8 Go).

Pour effectuer cela, je suis sur une distribution Debian 8.1, nous verrons ensuite comment fermer et ouvrir une partition chiffrée sous Debian et autres OS Linux qui suivront la même procédure.

II. Installation de cryptsetup

Commençons par le commencement, sur notre distribution Linux (Debian dans mon cas), on commence par installer cryptsetup :

apt-get install cryptsetup

Pour ceux qui sont sous CentOS/RHEL/Fedora :

yum install cryptsetup-luks

En réalité, c'est l'utilitaire "dm-crypt" qui va faire le travail de chiffrement, cryptsetup est une interface en ligne de commande permettant de gérer les fonctionnalités et les actions de dm-crypt, un peu comme iptables avec netfilter, petite subtilité toujours utilise à savoir ;).

III. Création de la partition LUKS et du système de fichier

C'est le moment d'insérer notre clé USB si cela n'est pas déjà fait.

Note : Dans le cadre du tutoriel, je chiffre l'intégralité de ma clé USB, pas juste une partition. Il est également important de savoir que durant cette procédure, toutes les données existantes seront effacées de la clé

Pour chiffrer des données qui sont déjà sur la clé, procédez comme suivante :

  • Copier les données de la clé vers un répertoire sur votre disque dur
  • Procédez à la création de votre partition chiffrée comme cela va être expliqué à la suite de ce tutoriel
  • Recopier vos données du disque dur vers votre nouvelle partition chiffrée
  • Supprimez les fichiers mis temporairement sur votre disque dur

En piste ! On commence donc par repérer notre clé USB, dans mon cas il s'agit de /dev/sdc et sa partition initiale existante /dev/sdc1. Pour initialiser le chiffrement de la partition visée :

cryptsetup -y -v luksFormat /dev/sdc1

On va donc procéder au chiffrement, nous sera alors demandé notre passphrase, élément permettant d'ouvrir notre partition chiffrée (un gros mot de passe en somme). Voici la sortie attendue :

luks-partition-chiffrement-usb-01

On pourra ensuite ouvrir notre partition LUKS, qui ne sera pas encore tout à faire utilisable, notre passphrase nous sera demandée pour ouvrir notre partition LUKS :

cryptsetup luksOpen /dev/sdc1 usbkey1

Je nomme ici mon montage "usbkey1" mais vous êtes libre de mettre autre chose. On formate alors notre partition pour la rendre toute propre en la remplissant de "0" (du vide si l'on peut dire).

dd if=/dev/zero of=/dev/mapper/usbkey1

En fonction de votre clé, cela peut être assez long (~ 20 minutes pour 8 Go avec un i7), on peut également utilise la commande "pv" (apt-get install pv) qui affiche une petite barre de progression :

pv -tpreb /dev/zero | dd of=/dev/mapper/usbkey1 bs=128M

Voici ce que l'on pourra voir avec l'utilisation de la commande "pv" lors du traitement avec "dd" :

luks-partition-chiffrement-usb-02

Afin que notre clé USB soit utilisable et que l'on puisse y stocker des fichiers par dessus LUKS, on créé un système de fichier sur la partition :

mkfs.ext4 /dev/mapper/usbkey1

C'est une partie qui peut sembler déroutante au premier abord, une partition LUKS (qui chiffre tout) et par dessus un système de fichier ext4 (ou autre si souhaité) qui supportera les fichiers/dossiers. Lorsque l'on utilisera notre clé USB, il faudra donc déchiffrer l'ensemble dans un premier temps en saisissant la passphrase, puis l'OS sera capable de voir le système de fichier utilisé et pourra le monter pour y lire fichiers et dossiers.

Pour utiliser une clé USB chiffrée via le système LUKS également sur un système Windows, on oubliera l'ext4 au profit du FAT par exemple :

mkfs.fat /dev/mapper/usbkey1

Ici, on précise comme emplacement cible /dev/mappe/usbkey1, pourquoi ?

/dev/mapper/usbkey1 est le "raccourci" que nous avons donné à notre clé USB (/dev/mapper est générique à Linux pour le mappage, "usbkey1" dépend de ce que vous avez saisi). Il permet donc d'accéder à notre partition déchiffrée.

  • /dev/sdc1 : Partition de notre clé USB, ici les informations sont chiffré grâce à LUKS et un OS ne peut monter un système de fichier connu directement.
  • /dev/mapper/****: Mappage de notre partition /dev/sdc1 une fois déchiffré, ici le contenu est lisible pour un OS/système de fichier

Étant donné que le chiffrement utilisé est un "block-layer encryption" et non un "file-system encryption", c'est étape supplémentaire de mappage est nécessaire.

IV. On monte et on démonte

Sous Debian, dm-crypt est présent par défaut. Le montage se fait donc dans la plupart des cas directement au branchement de la clé USB. Alors, notre passphrase nous est demandé sur une pop-up :

luks-partition-chiffrement-usb-03

Une fois la passphrase saisie, l'OS pourra lire le système de fichier se trouvant sur la clé et pourra ensuite monter ce système de fichier, on verra alors notre partition montée :

luks-partition-chiffrement-usb-04

Cependant, l'interface graphique n'est pas toujours là et en cas de problème, on a toujours l'air plus malin lorsque l'on sait s'en passer. Nous allons donc voir commencer effectuer cette même opération en ligne de commande. A nouveau, il nous faut donc brancher notre clé USB et repérer la partition qui nous intéresse, pour moi il s'agit encore une fois de /dev/sdc1. Ma clé USB étant représentée par /dev/sdc (/dev/sda étant mon disque dur principale avec mon OS, /dev/sdb mon second disque dur avec mes data, la suite est sdc bien entendu. le "1" de "sdc1" signifiant "première partition").

On commence donc par déchiffrer notre partition chiffrée à l'aide de crypsetup et de son option "luksOpen" :

cryptsetup luksOpen /dev/xvdc usbkey1

Ensuite, et maintenant que notre clé USB est compréhensible par le système de fichier et notre OS, on monte son contenu dans un dossier quelconque, par exemple "/home/mickael/tmp" dans mon cas :

mount /dev/mapper/usbkey1 /home/mickael/mnt

On pourra donc accéder aux données de notre clé USB librement et de façon transparente.

Une fois nos traitement terminés, il ne faut pas oublier de fermer tout cela proprement et ne surtout pas arracher notre clé USB brusquement comme un lycéen à la fin d'un cours ennuyant. On commence par démonter le montage du système de fichier effectué:

umount /home/mickael/mnt

Puis on referme notre partition chiffrée :

cryptsetup luksClose usbkey1

On peut maintenant débrancher notre clé USB et la jeter dans la rue sans crainte qu'un passant puisse lire son contenu (blague - https://code.google.com/p/luks-volume-cracker/ - ayez une très bonne passphrase !).

Note : avec une interface graphique, le fait d'éjecter le périphérique effectue ces deux actions simultanément.

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Mickael Dorigny

Co-fondateur d'IT-Connect.fr. Auditeur/Pentester chez Orange Cyberdéfense.

Nombre de posts de cet auteur : 526.Voir tous les posts

3 thoughts on “Créer une clé USB chiffrée via LUKS avec cryptsetup

  • Bonjour,

    Contrairement à ce qui est affirmé dans cet article, cette méthode ne permet pas d’ouvrir la clé usb sous windows !
    « Cela signifie que plusieurs programmes peuvent traiter le chiffrement/déchiffrement d’un système de chiffrement de disque LUKS, sous Linux comme sous Windows ! » = FAUX
    A moins, peut-être d’installer Librecrypt mais ce n’est pas chose aisée…

    Il est dommage d’affirmer des choses sans avoir rien véfifié !

    Répondre
  • Bonjour, je me demandais si l’étape :

    dd if=/dev/zero of=/dev/mapper/usbkey1

    était vraiment indispensable ? Pourquoi remplir absolument la partition de zero ?

    Merci pour ce tuto en tout cas 😉

    Répondre
  • Bonjour,

    Tout d’abord, merci pour ce tutoriel en Français.

    La réponse est certe un peu tardive, mais je la fourni si quelqu’un passe par là et veut savoir : quand à la commande « dd if=/dev/zero of=/dev/mapper/usbkey1 », elle permet de mieux sécuriser le disque chiffré.

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.