Création d'un volume chiffré

1. Si nécessaire, activer les options suivantes dans le noyau, et recompiler :

Device Drivers -> Multi-device support (RAID and LVM)

  • Device mapper support
  • Crypt target support

Cryptographic options

  • SHA256 digest algorithm
  • AES cipher algorithms

Vérifier que les modules sont chargés :

$ lsmod | egrep "aes|crypt"

aes_generic            25690  0 
dm_crypt                8855  0 

2. Installer le paquet cryptsetup.

# aptitude install cryptsetup

3. Créer le fichier qui va contenir le système de fichiers chiffrés. Ici, je crée un fichier d'1 Go rempli de données aléatoires. Ca prend un moment...

$ dd if=/dev/urandom of=data bs=1M count=1024

1024+0 enregistrements lus
1024+0 enregistrements écrits
1073741824 octets (1,1 GB) copiés, 334,545 s, 3,2 MB/s

4. Monter le fichier sur l'interface loopback.

# losetup /dev/loop0 data

Si loop0 est déjà utilisé, on peut associer le fichier au premier périphérique disponible.

# losetup -f data

Pour afficher des infos sur les périphériques loopback :

# losetup -a

/dev/loop0: [0803]:523266 (/media/Données/data)

5. Créer le volume chiffré. Ici j'utilise l'algorithme de chiffrement AES-256 et la fonction de hachage SHA-256.

# cryptsetup luksFormat /dev/loop0 -c aes -s 256 -h sha256

WARNING!
========
Cette action écrasera définitivement les données sur /dev/loop0.

Are you sure? (Type uppercase yes): YES
Entrez la phrase de passe LUKS :
Verify passphrase: 

6. Ouvrir le volume chiffré.

# cryptsetup luksOpen /dev/loop0 coffre

Entrez la phrase de passe pour /dev/loop0 :

Le paramètre coffre correspond au point de montage du volume dans l'interface DM (Device Mapper) : /dev/mapper/coffre.

7. Créer un système de fichiers dans le volume chiffré. Je prends FAT32, car je veux essayer d'ouvrir le volume sur un poste Windows avec FreeOTFE.

# mkfs.vfat /dev/mapper/coffre 

mkfs.vfat 3.0.9 (31 Jan 2010)
unable to get drive geometry, using default 255/63

8. Monter le système de fichiers.

# mkdir /media/coffre
# mount -o uid=1000,gid=1000 /dev/mapper/coffre /media/coffre

On peut maintenant placer des fichiers et des dossiers dans le volume chiffré.

Manipulation du volume chiffré

Afficher des informations sur le volume

Avec LUKS, plusieurs clefs peuvent être associées à un même volume chiffré. On voit ci-dessous que seule la première clef est définie.

# cryptsetup luksDump /dev/loop0

LUKS header information for /dev/loop0

Version:        1
Cipher name:    aes
Cipher mode:    cbc-plain
Hash spec:      sha256
Payload offset: 2056
MK bits:        256
MK digest:      b5 ba a3 81 06 21 36 b4 73 35 79 e3 c2 1a e0 f5 47 1b 04 b5 
MK salt:        d8 6d 0e 56 78 ea 02 dc ed 03 4a 66 af d1 4c 5c 
                03 f0 83 78 9a 78 fe e7 e5 b4 95 bd 4e a8 dd 73 
MK iterations:  11375
UUID:           36d147b0-cc17-4f42-84ed-df57927bf783

Key Slot 0: ENABLED
        Iterations:             45545
        Salt:                   e5 ab b9 0d 89 85 eb 7b f0 b3 7b 16 da fb 74 05 
                                bf 76 b5 a2 14 06 1b c6 38 a8 12 2a ef e2 81 56 
        Key material offset:    8
        AF stripes:             4000
Key Slot 1: DISABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

Démonter et refermer le volume

1. Démonter le système de fichiers.

# umount /media/coffre

2. Refermer le volume, qui ne sera plus accessible en clair à l'adresse /dev/mapper/coffre.

# cryptsetup luksClose /dev/mapper/coffre

3. Détacher le périphérique loopback.

# losetup -d /dev/loop0

Ajouter un mot de passe à un volume

# cryptsetup luksAddKey /dev/loop0

Supprimer un mot de passe d'un volume

# cryptsetup luksDelKey /dev/loop0 1

Ouverture et fermeture du volume avec cryptmount

Le logiciel cryptmount permet d'ouvrir et de refermer un volume chiffré en une opération, sans droits d'administration.

1. Installer le paquet cryptmount.

2. En qualité de root, ajouter les données suivantes dans le fichier /etc/cryptmount/cmtab :

  coffre {
       keyformat=luks
       dev=/media/Données/data  keyfile=/media/Données/data
       dir=/media/coffre  fstype=vfat
      }

Les paramètres dev et keyfile ont la même valeur (le chemin du fichier contenant le volume), car avec LUKS la clef est stockée dans le volume.

Le paramètre dir représente le point de montage du système de fichiers déchiffré (ce dossier doit exister).

fstype définit le type du système de fichiers (FAT32 en l'occurrence).

3. Pour ouvrir un volume chiffré, en tant qu'utilisateur standard :

$ cryptmount coffre

Donnez mot de passe pour la cible "coffre": 
dosfsck 3.0.9, 31 Jan 2010, FAT32, LFN
/dev/mapper/coffre: 1 files, 2/261371 clusters

4. Pour refermer le volume chiffré.

$ cryptmount -u coffre

Interactions avec Gnome et Nautilus

Dans Gnome 2.3, les disques chiffrés avec LUKS et dm-crypt sont reconnus automatiquement dans Nautilus et dans l'Utilitaire de disque (paquet gnome-disk-utility).

Notre volume est reconnu comme un disque chiffré dès qu'il est associé à un périphérique loopback.

En d'autres termes, la commande losetup -f fichier_volume fait apparaître un disque (intitulé "1,1 GB chiffré", chez moi) dans le volet de gauche de Nautilus.

(D'autres icônes peuvent apparaître, car une icône est associée à chaque disque, fixe ou amovible, monté dans /media.)

Pour déchiffrer et monter le volume, cliquer dessus. Un premier message demande la saisie du mot de passe du volume. Un deuxième message demande celle du mot de passe d'administration (car à ce stade, seul l'administrateur est autorisé à monter le système de fichiers du volume).

Pour éviter le deuxième message, on peut autoriser l'utilisateur courant du système à monter la partition du volume en ajoutant une ligne au fichier /etc/fstab. Cette opération permet également de choisir le point de montage du volume.

Pour ce faire, il nous faut récupérer un identifiant stable du volume.

1. Associer le volume à un périphérique loopback.

#losetup -f /chemin/du/fichier

2. Déchiffrer et monter le volume dans Nautilus en cliquant sur l'icône correspondante.

3. Afficher l'identifiant des périphériques créés :

$ ls -l /dev/disk/by-id/* | grep luks

lrwxrwxrwx 1 root root 10 16 déc.  12:11 /dev/disk/by-id/dm-name-udisks-luks-uuid-36d147b0-cc17-4f42-84ed-df57927bf783-uid1000 -> ../../dm-7
lrwxrwxrwx 1 root root 10 16 déc.  12:11 /dev/disk/by-id/dm-uuid-CRYPT-LUKS1-36d147b0cc174f4284eddf57927bf783-udisks-luks-uuid-36d147b0-cc17-4f42-84ed-df57927bf783-uid1000 -> ../../dm-7

Je récupère le premier identifiant (quel est le rôle du deuxième ?) :

/dev/disk/by-id/dm-name-udisks-luks-uuid-36d147b0-cc17-4f42-84ed-df57927bf783-uid1000

Dans /etc/fstab, ajouter une ligne du type :

/dev/disk/by-id/dm-name-udisks-luks-uuid-36d147b0-cc17-4f42-84ed-df57927bf783-uid1000   /media/coffre   vfat    user,noauto,uid=1000,gid=1000   0       0

Le paramètre user autorise l'utilisateur courant à monter le système de fichiers. noauto évite le montage automatique au démarrage de l'ordinateur.

Refermer et démonter le volume chiffré

Dans Nautilus, cliquer sur l'icône du volume chiffré pour démonter le système de fichier et refermer le volume.

Un message d'erreur peut apparaître quelques secondes plus tard : Impossible de démonter Système de fichiers 1,1 GB. Error locking luks device: timeout (10s) waiting for cleartext device to be removed.

Je ne sais pas ce qu'il signifie, car le volume est démonté correctement.

Point important, l'association entre le fichier et le périphérique loopback n'est pas supprimée.

# losetup -a

/dev/loop0: [0803]:523266 (/media/Données/data)

Tant que cette association existe, il est possible de rouvrir le volume chiffré en cliquant sur son icône dans Nautilus.

Cette icône devrait disparaître si le périphérique loopback est déconnecté. Cependant, en raison d'un bug du pilote loopback dans le noyau (testé dans 2.6.32), aucun événement n'est généré quand l'association est rompue. Gnome n'est donc pas informé de la disparition du périphérique.

Pour en savoir plus, voir ces documents :

Selon le premier document, le problème est corrigé dans le noyau 2.6.35-22. Chez moi, il ne se produit plus avec le noyau 2.6.38.

Dans les noyaux antérieurs, la commande suivante fait disparaître les icônes "périmées" en annonçant à udev un changement dans les périphériques loopback :

# udevadm trigger --verbose --action=change --sysname-match=loop*

/sys/devices/virtual/block/loop0
/sys/devices/virtual/block/loop1
/sys/devices/virtual/block/loop2
/sys/devices/virtual/block/loop3
/sys/devices/virtual/block/loop4
/sys/devices/virtual/block/loop5
/sys/devices/virtual/block/loop6
/sys/devices/virtual/block/loop7

Le paramètre --verbose fait apparaître des infos sur les périphériques concernés.

Documentation