« Cryptsetup » : différence entre les versions

De Wiki doc

(→‎Gestion des clef : Ajout de la section "Tester une clef")
(Ajout de la section "Bitlocker" + remplacement des balise "source" obsolètes)
Ligne 1 : Ligne 1 :
[[Category:chiffrement]]
[[Category:chiffrement]]
[[Category:périphériques bloc]]
[[Category:périphériques bloc]]
''Cryptsetup'' est l'implémentation du standard ''LUKS'' sur la plupart des distributions ''Linux''. Il permet de chiffrer des périphériques de type bloc. Dans les distributions ''Debian'', il est fournit par le paquet <source lang="bash" inline>cryptsetup</source>.
''Cryptsetup'' est l'implémentation du standard ''LUKS'' sur la plupart des distributions ''Linux''. Il permet de chiffrer des périphériques de type bloc. Dans les distributions ''Debian'', il est fournit par le paquet <code>cryptsetup</code>.


=Mise en œuvre=
=Mise en œuvre=
Voici un exemple de mise en œuvre de ''cryptsetup'' décrivant la création, le montage et le démontage d'un volume chiffré.
Voici un exemple de mise en œuvre de ''cryptsetup'' décrivant la création, le montage et le démontage d'un volume chiffré.


{{astuce|Il est possible de réaliser un test de performance des différents algorithmes supportés via la commande <source lang="bash" inline>cryptsetup benchmark</source>.}}
{{astuce|Il est possible de réaliser un test de performance des différents algorithmes supportés via la commande <code>cryptsetup benchmark</code>.}}


Chiffrement du disque ''sdc'' dans son intégralité (écrase tout dessus). Taper '''YES''' (en majuscule) et entrer le mot de passe de déchiffrement 2 fois
Chiffrement du disque ''sdc'' dans son intégralité (écrase tout dessus). Taper '''YES''' (en majuscule) et entrer le mot de passe de déchiffrement 2 fois
Ligne 59 : Ligne 59 :
  cryptsetup luksClose testClef
  cryptsetup luksClose testClef


{{astuce|Vous pouvez afficher les algorithmes utilisés pour un volume avec la commande <syntaxhighlight lang="bash" inline>file -sL /tmp/sda2.img</syntaxhighlight>.}}
{{astuce|Vous pouvez afficher les algorithmes utilisés pour un volume avec la commande <code>file -sL /tmp/sda2.img</code>.}}


==Source de la section==
==Source de la section==
Ligne 67 : Ligne 67 :


=Fichier crypttab=
=Fichier crypttab=
Le fichier <source lang="bash" inline>/etc/crypttab</source> est aux volumes chiffrés ce qu'est son homologue [[fstab]] aux systèmes de fichiers (il en partage d'ailleurs les mêmes [[fstab#Options de montages|options]]). Il est lu au démarrage par ''Cryptsetup'' afin de déchiffrer les volumes qui y sont renseignés (un par ligne). Si une phrase de passe est demandée, l'utilisateur sera invité à la rentrée, si c'est une clef sous [[#Déchiffrement automatique|forme de fichier]], celui-ci sera exploité depuis l'emplacement précisé dans la ligne.
Le fichier <code>/etc/crypttab</code> est aux volumes chiffrés ce qu'est son homologue [[fstab]] aux systèmes de fichiers (il en partage d'ailleurs les mêmes [[fstab#Options de montages|options]]). Il est lu au démarrage par ''Cryptsetup'' afin de déchiffrer les volumes qui y sont renseignés (un par ligne). Si une phrase de passe est demandée, l'utilisateur sera invité à la rentrée, si c'est une clef sous [[#Déchiffrement automatique|forme de fichier]], celui-ci sera exploité depuis l'emplacement précisé dans la ligne.


Une entrée ''crypttab'' comporte 4 champs :
Une entrée ''crypttab'' comporte 4 champs :
Ligne 73 : Ligne 73 :


Explications :
Explications :
* '''<nom_du_volume>''' : correspond au nom qui sera donnée au volume une fois déchiffré et qui sera disponible dans <source lang="bash" inline>/dev/mapper/<nom_du_volume></source>
* '''<nom_du_volume>''' : correspond au nom qui sera donnée au volume une fois déchiffré et qui sera disponible dans <code>/dev/mapper/<nom_du_volume></code>
* '''<périphérique_bloc>''' : chemin ou ''UUID'' du périphérique à déchiffrer (même syntaxe que pour ''fstab'')
* '''<périphérique_bloc>''' : chemin ou ''UUID'' du périphérique à déchiffrer (même syntaxe que pour ''fstab'')
* '''<fichier_de_clef>''' : chemin du fichier de clef. Mettre '''none''' si une identification par mot de passe est préférée
* '''<fichier_de_clef>''' : chemin du fichier de clef. Mettre '''none''' si une identification par mot de passe est préférée
Ligne 100 : Ligne 100 :
  echo "vbd_luks UUID=${UUID_LUKS} /root/luks/fichier_clef.luks luks,discard" >> /etc/crypttab
  echo "vbd_luks UUID=${UUID_LUKS} /root/luks/fichier_clef.luks luks,discard" >> /etc/crypttab


Le paramètre <source lang="bash" inline>discard</source> permet d'autoriser les commandes ''TRIM'' pour les ''SSD''. Cela n'a pas de sens si vous utilisez des disques durs. Si votre disque est amovible (et donc potentiellement absent lors du démarrage), il peut être judicieux d'ajouter l'option <source lang="bash" inline>nofail</source> qui permettra au système de ne pas se bloquer s'il ne trouve pas le périphérique. La commande <source lang="bash" inline>cryptdisks_start <nom_du_volume></source> devra alors être utilisée pour déchiffrer le volume.
Le paramètre <code>discard</code> permet d'autoriser les commandes ''TRIM'' pour les ''SSD''. Cela n'a pas de sens si vous utilisez des disques durs. Si votre disque est amovible (et donc potentiellement absent lors du démarrage), il peut être judicieux d'ajouter l'option <code>nofail</code> qui permettra au système de ne pas se bloquer s'il ne trouve pas le périphérique. La commande <code>cryptdisks_start <nom_du_volume></code> devra alors être utilisée pour déchiffrer le volume.


{{info|Le fichier <source lang="bash" inline>/etc/crypttab</source> va initier un déchiffrement des volumes qui y sont indiqués au démarrage. Si le volume demande un mot de passe, un prompt sera proposé à l'utilisateur (c'est ce que fait la première ligne du fichier pour votre disque principal). Si la méthode d'accès est un fichier de clef, ''Cryptsetup'' va le soumettre au volume et si il correspond à celui de sa bibliothèque, il le déchiffre.}}
{{info|Le fichier <code>/etc/crypttab</code> va initier un déchiffrement des volumes qui y sont indiqués au démarrage. Si le volume demande un mot de passe, un prompt sera proposé à l'utilisateur (c'est ce que fait la première ligne du fichier pour votre disque principal). Si la méthode d'accès est un fichier de clef, ''Cryptsetup'' va le soumettre au volume et si il correspond à celui de sa bibliothèque, il le déchiffre.}}


À ce stade, le volume se déchiffrera automatiquement au démarrage. Vous pouvez utiliser la [https://serverfault.com/questions/714605/can-cryptsetup-read-mappings-from-etc-crypttab commande] <source lang="bash" inline>cryptdisks_start vbd_luks</source> pour parcourir la ligne du fichier ''crypttab'' et en appliquer les directives (c'est ce que fait ''init'' au démarrage) afin de tester votre configuration immédiatement.
À ce stade, le volume se déchiffrera automatiquement au démarrage. Vous pouvez utiliser la [https://serverfault.com/questions/714605/can-cryptsetup-read-mappings-from-etc-crypttab commande] <code>cryptdisks_start vbd_luks</code> pour parcourir la ligne du fichier ''crypttab'' et en appliquer les directives (c'est ce que fait ''init'' au démarrage) afin de tester votre configuration immédiatement.


Il est également possible d’enchaîner avec un [[fstab|montage automatique]] du système de fichier via le <source lang="bash" inline>/etc/fstab</source>.
Il est également possible d’enchaîner avec un [[fstab|montage automatique]] du système de fichier via le <code>/etc/fstab</code>.


Déchiffrer manuellement le volume ''LUKS''
Déchiffrer manuellement le volume ''LUKS''
Ligne 117 : Ligne 117 :
  echo "/dev/mapper/vbd_luks /mnt btrfs rw,relatime,space_cache,subvolid=5,subvol=/ 0 0" >> /etc/fstab
  echo "/dev/mapper/vbd_luks /mnt btrfs rw,relatime,space_cache,subvolid=5,subvol=/ 0 0" >> /etc/fstab


Au redémarrage, le volume sera automatiquement déchiffré et monté dans <source lang="bash" inline>/mnt/</source>.
Au redémarrage, le volume sera automatiquement déchiffré et monté dans <code>/mnt/</code>.


==Source de la section==
==Source de la section==
* https://www.howtoforge.com/automatically-unlock-luks-encrypted-drives-with-a-keyfile
* https://www.howtoforge.com/automatically-unlock-luks-encrypted-drives-with-a-keyfile
=Bitlocker=
''Cryptsetup'' est compatible avec le chiffrement de disques des systèmes ''Windows'' nommé [https://support.microsoft.com/fr-fr/windows/chiffrement-d-appareils-dans-windows-ad5dcf4b-dbe0-2331-228f-7925c2a3012d Bitlocker].
Lors de la création d'un tel volume sous ''Windows'', aucune clé de chiffrement n'est demandée à l'utilisateur car le système en génère une et la stock dans le ''TPM'' de l'ordinateur (j'imagine qu'une clé est demandée uniquement si ce composant matériel est absent). Une clé de récupération est alors fournie sous forme de fichier texte. Il est très important de garder la clé qu'il contient car c'est cette dernière qui permettra de déverrouiller le disque chiffré via un autre système d'exploitation (<code>/dev/nvme0n1p3</code> et ''Debian 11'' dans l'exemple suivant).
L'intérêt d'une telle manipulation est évident : être capable de récupérer les données du disque système si ''Windows'' refuse de démarrer.
Déchiffrer le disque
cryptsetup open --type=bitlk /dev/nvme0n1p3 disque_windows
Monter le disque
mount -o ro /dev/mapper/disque_windows /mnt
Les commande de démontage de re-verrouillages du disque sont identiques à ce qui a déjà été traité.
==Source de la section==
* https://superuser.com/questions/376533/how-to-access-a-bitlocker-encrypted-drive-in-linux

Version du 19 avril 2024 à 23:45

Cryptsetup est l'implémentation du standard LUKS sur la plupart des distributions Linux. Il permet de chiffrer des périphériques de type bloc. Dans les distributions Debian, il est fournit par le paquet cryptsetup.

Mise en œuvre

Voici un exemple de mise en œuvre de cryptsetup décrivant la création, le montage et le démontage d'un volume chiffré.

ASTUCE

Il est possible de réaliser un test de performance des différents algorithmes supportés via la commande cryptsetup benchmark.

Chiffrement du disque sdc dans son intégralité (écrase tout dessus). Taper YES (en majuscule) et entrer le mot de passe de déchiffrement 2 fois

cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 /dev/sdc

Ouvrir le volume (ça fait un volume "montable" dans /dev/mapper/sdc_crypt)

cryptsetup luksOpen /dev/sdc sdc_crypt

Créer le système de fichier

mkfs.ext4 /dev/mapper/sdc_crypt

Monter le volume

mount /dev/mapper/sdc_crypt /mnt

Démonter le volume

umount /mnt

Fermer le volume

cryptsetup luksClose sdc_crypt

Afficher les détails du volume (type de chiffrement notamment)

cryptsetup luksDump /dev/sdc

Gestion des clef

Cryptsetup n'utilise pas réellement le mot de passe que vous avez fourni pour chiffrer le volume. Il génère lui même une clé qu'il va chiffrer avec l'un des moyens que vous lui fournissez (mot de passe ou fichier de clef). Ceci permet de pouvoir non seulement changer de mot de passe sans re-chiffrer tout le volume (seul la clef maitraisse l'est), mais également d'en avoir plusieurs.

Changement de clef

cryptsetup luksChangeKey /dev/sdc

Si vous avez plusieurs clefs d'enregistrées, vous pouvez sélectionner le crénau contenant celle à changer en ajoutant le paramètre suivant

cryptsetup luksChangeKey /dev/sdc -S 2

Les créneaux sont visualisables avec la commande

cryptsetup luksDump /dev/sdc

Ajout d'une clef

cryptsetup luksAddKey /dev/sdc

Suppression d'une clef

cryptsetup luksRemoveKey /dev/sdc

Tester une clef

Lorsqu'un volume est en cours d'utilisation, il peut arriver que vous soyez dans le doute concernant la clé utilisée pour le dé-chiffrer. Afin de la tester sans fermer le volume (et donc d'être dans l'incapacité de récupérer les données si vous avez perdu la clef), il est possible de copier la partie Luks dans un fichier et d'effectuer les tests dessus.

head -c 128M /dev/sda2 > /tmp/sda2.img
cryptsetup luksOpen /tmp/sda2.img testClef

Il est également possible d'utiliser un fichier de clef si vous en avez ajouté-un dans votre volume

cryptsetup luksOpen /tmp/sda2.img testClef --key-file /root/fichier_clef.luks

Si le volume se déverrouille c'est que vous avez renseigné la bonne clef. Vous pouvez le fermer

cryptsetup luksClose testClef

ASTUCE

Vous pouvez afficher les algorithmes utilisés pour un volume avec la commande file -sL /tmp/sda2.img.

Source de la section

Fichier crypttab

Le fichier /etc/crypttab est aux volumes chiffrés ce qu'est son homologue fstab aux systèmes de fichiers (il en partage d'ailleurs les mêmes options). Il est lu au démarrage par Cryptsetup afin de déchiffrer les volumes qui y sont renseignés (un par ligne). Si une phrase de passe est demandée, l'utilisateur sera invité à la rentrée, si c'est une clef sous forme de fichier, celui-ci sera exploité depuis l'emplacement précisé dans la ligne.

Une entrée crypttab comporte 4 champs :

<nom_du_volume> <périphérique_bloc> <fichier_de_clef> <options>

Explications :

  • <nom_du_volume> : correspond au nom qui sera donnée au volume une fois déchiffré et qui sera disponible dans /dev/mapper/<nom_du_volume>
  • <périphérique_bloc> : chemin ou UUID du périphérique à déchiffrer (même syntaxe que pour fstab)
  • <fichier_de_clef> : chemin du fichier de clef. Mettre none si une identification par mot de passe est préférée
  • <options> : prends le paramètre obligatoire luks suivit de divers options facultatives identiques au fstab

Déchiffrement automatique

Si vous avez plusieurs volumes chiffrés, il est possible d'utiliser des fichiers de clef présent sur le premier pour déchiffrer les autres. Nous allons partir du principe que mon premier disque de démarrage (chiffré) est vda et que le second est vdb.

Création du répertoire de travail

mkdir /root/luks

Création du fichier de clé

dd if=/dev/urandom of=/root/luks/fichier_clef.luks bs=4096 count=1

Attribution des droits

chmod 500 luks/
chmod 400 luks/fichier_clef

Un volume LUKS peut gérer plusieurs mots de passes/clefs, nous allons donc ajouter celle que nous avons créé à notre deuxième disque

cryptsetup luksAddKey /dev/vdb /root/luks/fichier_clef.luks

Récupération de l'UUID de vdb

export UUID_LUKS=$(blkid -s UUID -o value /dev/vdb)

Ajout d'une entrée dans le fichier de déchiffrement

echo "vbd_luks UUID=${UUID_LUKS} /root/luks/fichier_clef.luks luks,discard" >> /etc/crypttab

Le paramètre discard permet d'autoriser les commandes TRIM pour les SSD. Cela n'a pas de sens si vous utilisez des disques durs. Si votre disque est amovible (et donc potentiellement absent lors du démarrage), il peut être judicieux d'ajouter l'option nofail qui permettra au système de ne pas se bloquer s'il ne trouve pas le périphérique. La commande cryptdisks_start <nom_du_volume> devra alors être utilisée pour déchiffrer le volume.

INFORMATION

Le fichier /etc/crypttab va initier un déchiffrement des volumes qui y sont indiqués au démarrage. Si le volume demande un mot de passe, un prompt sera proposé à l'utilisateur (c'est ce que fait la première ligne du fichier pour votre disque principal). Si la méthode d'accès est un fichier de clef, Cryptsetup va le soumettre au volume et si il correspond à celui de sa bibliothèque, il le déchiffre.

À ce stade, le volume se déchiffrera automatiquement au démarrage. Vous pouvez utiliser la commande cryptdisks_start vbd_luks pour parcourir la ligne du fichier crypttab et en appliquer les directives (c'est ce que fait init au démarrage) afin de tester votre configuration immédiatement.

Il est également possible d’enchaîner avec un montage automatique du système de fichier via le /etc/fstab.

Déchiffrer manuellement le volume LUKS

cryptsetup luksOpen /dev/vdb vbd_luks

Formater la partition

mkfs.btrfs -n 32K /dev/mapper/vbd_luks

Ajouter une une entrée dans le fstab

echo "/dev/mapper/vbd_luks /mnt btrfs rw,relatime,space_cache,subvolid=5,subvol=/ 0 0" >> /etc/fstab

Au redémarrage, le volume sera automatiquement déchiffré et monté dans /mnt/.

Source de la section

Bitlocker

Cryptsetup est compatible avec le chiffrement de disques des systèmes Windows nommé Bitlocker.

Lors de la création d'un tel volume sous Windows, aucune clé de chiffrement n'est demandée à l'utilisateur car le système en génère une et la stock dans le TPM de l'ordinateur (j'imagine qu'une clé est demandée uniquement si ce composant matériel est absent). Une clé de récupération est alors fournie sous forme de fichier texte. Il est très important de garder la clé qu'il contient car c'est cette dernière qui permettra de déverrouiller le disque chiffré via un autre système d'exploitation (/dev/nvme0n1p3 et Debian 11 dans l'exemple suivant).

L'intérêt d'une telle manipulation est évident : être capable de récupérer les données du disque système si Windows refuse de démarrer.

Déchiffrer le disque

cryptsetup open --type=bitlk /dev/nvme0n1p3 disque_windows

Monter le disque

mount -o ro /dev/mapper/disque_windows /mnt

Les commande de démontage de re-verrouillages du disque sont identiques à ce qui a déjà été traité.

Source de la section