wiki/HowtoChiffrementData.md

162 lines
4.1 KiB
Markdown
Raw Normal View History

2017-06-23 01:12:52 +02:00
---
categories: securité
title: Howto Chiffrement avec LUKS
...
2016-12-29 11:25:39 +01:00
2017-06-23 01:12:52 +02:00
* Documentation : <https://gitlab.com/cryptsetup/cryptsetup/wikis>
2016-12-29 11:25:39 +01:00
2017-06-23 01:12:52 +02:00
## Installation
2016-12-29 11:25:39 +01:00
~~~
2017-06-23 01:12:52 +02:00
# 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
2016-12-29 11:25:39 +01:00
~~~
2017-06-23 01:12:52 +02:00
## Création
2016-12-29 11:25:39 +01:00
2017-06-23 01:12:52 +02:00
On peut créer un volume chiffré LUKS en renseignant une passphrase ainsi :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
# cryptsetup --verbose --verify-passphrase luksFormat /dev/md7
WARNING!
========
This will overwrite data on /dev/md7 irrevocably.
Are you sure? (Type uppercase yes): YES
2017-01-03 11:20:35 +01:00
Enter LUKS passphrase:
Verify passphrase:
2016-12-29 11:25:39 +01:00
Command successful.
# cryptsetup luksOpen /dev/md7 crypt_md7
2017-01-03 11:20:35 +01:00
Enter LUKS passphrase:
2016-12-29 11:25:39 +01:00
key slot 0 unlocked.
Command successful.
# mkfs.ext3 /dev/mapper/crypt_md7
~~~
2017-06-23 01:12:52 +02:00
On peut aussi utiliser un fichier comme clé de chiffrement :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
2017-06-23 01:12:52 +02:00
# dd if=/dev/random of=/root/foo.key bs=1 count=256
# cryptsetup --verbose --key-size=256 luksFormat /dev/md7 foo.key
2016-12-29 11:25:39 +01:00
~~~
2017-06-23 01:12:52 +02:00
## Utilisation
2016-12-29 11:25:39 +01:00
Voir si une partition est de type LUKS :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
# cryptsetup isLuks /dev/hda7
# cryptsetup luksDump /dev/hda7
~~~
2017-06-23 01:12:52 +02:00
Déchiffrer une partition LUKS :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
# cryptsetup luksOpen /dev/mapper/vol1-crypto_test crypto_test
# cryptsetup luksOpen /dev/hda7 hda7_crypt
~~~
2017-06-23 01:12:52 +02:00
Si la partition LUKS est protégée par un fichier :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
# cryptsetup luksOpen --key-file /root/.keyfile /dev/md7 supersecretdata
~~~
2017-06-23 01:12:52 +02:00
Informations sur la partition chiffrée :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
# cryptsetup status crypto_test
~~~
2017-06-23 01:12:52 +02:00
Stopper le déchiffrement d'une partition LUKS :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
# cryptsetup luksClose crypto_test
~~~
2017-06-23 01:12:52 +02:00
## Gestion des passphrases
2016-12-29 11:25:39 +01:00
2017-06-23 01:12:52 +02:00
LUKS permet d'avoir plusieurs passphrases pour un même volume chiffré.
Pour ajouter une passphrase :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
# cryptsetup luksAddKey /dev/hda7
2017-01-03 11:20:35 +01:00
Enter any LUKS passphrase:
2016-12-29 11:25:39 +01:00
key slot 1 unlocked.
2017-01-03 11:20:35 +01:00
Enter new passphrase for key slot:
Verify passphrase:
2016-12-29 11:25:39 +01:00
Command successful.
~~~
2017-06-23 01:12:52 +02:00
> *Note* : sur d'anciennes versions de *cryptsetup*, il fallait avoir la partition non dechiffrée pour pouvoir ajouter une passphrase : <http://bugs.debian.org/460409>
2016-12-29 11:25:39 +01:00
2017-06-23 01:12:52 +02:00
Pour supprimer une passphrase, on note son numéro avec :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
# cryptsetup luksDump /dev/hda7
~~~
2017-06-23 01:12:52 +02:00
Puis on la supprime avec la commande :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
# cryptsetup luksKillSlot /dev/hda7 <n°>
~~~
2017-06-23 01:12:52 +02:00
## Sauvegarde
Si l'entête du conteneur LUKS est corrompu, ceci rend la partition inutilisable.
2016-12-29 11:25:39 +01:00
2017-06-23 01:12:52 +02:00
On peut sauvegarde l'entête d'un conteneur LUKS ainsi :
2016-12-29 11:25:39 +01:00
~~~
2017-06-23 01:12:52 +02:00
# cryptsetup luksHeaderBackup --header-backup-file backup.txt /dev/hda7
2016-12-29 11:25:39 +01:00
~~~
Pour Restaurer l'entête :
~~~
2017-06-23 01:12:52 +02:00
# cryptsetup luksHeaderRestore --header-backup-file backup.txt /dev/hda7
2016-12-29 11:25:39 +01:00
~~~
## FAQ
2017-06-23 01:12:52 +02:00
Si vous obtenez un message de ce type :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
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/md1 contains at least 133 sectors
~~~
2017-01-03 11:20:35 +01:00
2017-06-23 01:12:52 +02:00
Cela signifie probablement que le module noyau *Device Mapper* n'est pas chargé :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
# 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 :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
# cryptsetup --verbose --cipher=aes-cbc-essiv:sha256 --verify-passphrase luksFormat /dev/md7
~~~
2017-06-23 01:12:52 +02:00
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)>
2016-12-29 11:25:39 +01:00
2017-06-23 01:12:52 +02:00
Les autres algorithmes dignes dintérêt sont _twofish_ et _serpent_, deux compétiteurs de l'AES face à Rijndael.