wiki/HowtoLUKS.md
Benoît S. 7615ede968 On utilise sda plutot que hda en titre d'exemple.
hda c'est les disques IDE, ultra rares de nos jours… Ça montre que la doc a
vécu ^^
2017-06-23 21:44:08 +02:00

204 lines
6 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
categories: securité
title: Howto Chiffrement avec LUKS
...
* Documentation : <https://gitlab.com/cryptsetup/cryptsetup/wikis>
LUKS (Linux Unified Key Setup) est le standard pour le chiffrement de disque sous Linux. Il permet le chiffrement de disque ou de partitions grâce au module noyau [DM-CRYPT](https://gitlab.com/cryptsetup/cryptsetup/wikis/DMCrypt) et l'outil [crypsetup](https://gitlab.com/cryptsetup/).
## Installation
~~~
# apt install cryptsetup
$ /usr/sbin/cryptsetup --version
cryptsetup 1.7.3
$ /sbin/modinfo dm_crypt
filename: /lib/modules/4.9.0-3-amd64/kernel/drivers/md/dm-crypt.ko
license: GPL
description: device-mapper target for transparent encryption / decryption
author: Jana Saout <jana@saout.de>
depends: dm-mod
intree: Y
vermagic: 4.9.0-3-amd64 SMP mod_unload modversions
~~~
## Création
On peut créer un volume chiffré LUKS en renseignant une passphrase ainsi :
~~~
# cryptsetup --verbose --verify-passphrase luksFormat /dev/sda7
WARNING!
========
This will overwrite data on /dev/sda7 irrevocably.
Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
Command successful.
# cryptsetup luksOpen /dev/sda7 crypt_sda7
Enter LUKS passphrase:
key slot 0 unlocked.
Command successful.
# mkfs.ext3 /dev/mapper/crypt_sda7
~~~
On peut aussi utiliser un fichier comme clé de chiffrement :
~~~
# dd if=/dev/random of=/root/foo.key bs=1 count=256
# cryptsetup --verbose --key-size=256 luksFormat /dev/sda7 foo.key
~~~
## Utilisation
Voir si une partition est de type LUKS :
~~~
# cryptsetup isLuks /dev/sda7
# cryptsetup luksDump /dev/sda7
~~~
Déchiffrer une partition LUKS :
~~~
# cryptsetup luksOpen /dev/mapper/vol1-crypto_test crypto_test
# cryptsetup luksOpen /dev/sda7 sda7_crypt
~~~
Si la partition LUKS est protégée par un fichier :
~~~
# cryptsetup luksOpen --key-file /root/.keyfile /dev/sda7 supersecretdata
~~~
Informations sur la partition chiffrée :
~~~
# cryptsetup status crypto_test
~~~
Stopper le déchiffrement d'une partition LUKS :
~~~
# cryptsetup luksClose crypto_test
~~~
## Gestion des passphrases
LUKS permet d'avoir plusieurs passphrases pour un même volume chiffré.
Pour ajouter une passphrase :
~~~
# cryptsetup luksAddKey /dev/sda7
Enter any LUKS passphrase:
key slot 1 unlocked.
Enter new passphrase for key slot:
Verify passphrase:
Command successful.
~~~
> *Note* : sur d'anciennes versions de *cryptsetup*, il fallait avoir la partition non déchiffrée pour pouvoir ajouter une passphrase : <http://bugs.debian.org/460409>
Pour supprimer une passphrase, on note son numéro avec :
~~~
# cryptsetup luksDump /dev/sda7
~~~
Puis on la supprime avec la commande :
~~~
# cryptsetup luksKillSlot /dev/sda7 <n°>
~~~
## Sauvegarde
Si l'entête du conteneur LUKS est corrompu, ceci rend la partition inutilisable.
On peut sauvegarde l'entête d'un conteneur LUKS ainsi :
~~~
# cryptsetup luksHeaderBackup --header-backup-file backup.txt /dev/sda7
~~~
Pour Restaurer l'entête :
~~~
# cryptsetup luksHeaderRestore --header-backup-file backup.txt /dev/sda7
~~~
## FAQ
### Command failed: Failed to setup dm-crypt key mapping
Si vous obtenez un message de ce type :
~~~
Command failed: Failed to setup dm-crypt key mapping.
Check kernel for support for the aes-cbc-essiv:sha256 cipher spec and verify that /dev/sda1 contains at least 133 sectors
~~~
Cela signifie probablement que le module noyau *Device Mapper* n'est pas chargé :
~~~
# modprobe dm-mod
~~~
### Notes sur les algorithmes de chiffrement
Pour utiliser un algorithme de chiffrement spécifique, il faut le préciser au moment de la création de la partition :
~~~
# cryptsetup --verbose --cipher=aes-cbc-essiv:sha256 --verify-passphrase luksFormat /dev/sda7
~~~
Le chiffrement **aes-cbc-essiv** est le chiffrement par défaut de _cryptsetup_ pour les noyaux supérieurs au 2.6.10 car il corrige une vulnérabilité potentielle du chiffrement _aes-cbc-plain_. Une autre méthode de chiffrement utilisée avec l'algorithme AES (Rijndael) est le mode XTS, qui est réputé plus résistant aux attaques par watermarking, mais nécessite un module spécifique (judicieusement nommé _xts_) et une clef d'initialisation du double de la taille de la clef finale (voir <http://en.wikipedia.org/wiki/Disk_encryption_theory#XEX-based_tweaked-codebook_mode_with_ciphertext_stealing_.28XTS.29)>
Les autres algorithmes dignes dintérêt sont _twofish_ et _serpent_, deux compétiteurs de l'AES face à Rijndael.
### Benchmark
On peut vérifier la capacité du processeur avec les différents algorithmes en utilisant `cryptsetup benchmark`. Exemple de sortie
~~~
# cryptsetup benchmark
# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1 992969 iterations per second
PBKDF2-sha256 567411 iterations per second
PBKDF2-sha512 455111 iterations per second
PBKDF2-ripemd160 564965 iterations per second
PBKDF2-whirlpool 214169 iterations per second
# Algorithm | Key | Encryption | Decryption
aes-cbc 128b 564.0 MiB/s 2303.1 MiB/s
serpent-cbc 128b 68.2 MiB/s 447.8 MiB/s
twofish-cbc 128b 161.1 MiB/s 293.7 MiB/s
aes-cbc 256b 421.8 MiB/s 1716.7 MiB/s
serpent-cbc 256b 75.2 MiB/s 473.0 MiB/s
twofish-cbc 256b 149.4 MiB/s 275.1 MiB/s
aes-xts 256b 2025.6 MiB/s 2048.6 MiB/s
serpent-xts 256b 465.4 MiB/s 438.9 MiB/s
twofish-xts 256b 247.2 MiB/s 258.3 MiB/s
aes-xts 512b 1503.3 MiB/s 1573.4 MiB/s
serpent-xts 512b 491.9 MiB/s 396.5 MiB/s
twofish-xts 512b 241.4 MiB/s 228.3 MiB/s
~~~
Cela permet aussi de choisir le chiffrement le plus performant, dans cet exemple *aes-xts* avec une clé de 256 bits est le plus performant.
### /etc/crypttab
Grâce au fichier `/etc/crypttab` on peut déchiffrer des partitions au démarrage. Attention, il faudra alors être présent physiquement devant la machine donc le cas d'usage est surtout un ordinateur portable :
~~~
sda5_crypt UUID=b1fef975-514f-4f33-839c-8b0d4dfeaabe none luks,swap
sda7_crypt UUID=cd81744f-5254-5ff0-b649-3d0143827924 none luks
~~~
~~~