16nov. 2008
Linux : Volumes disque chiffrés avec LUKS
Par Jérome Oufella
Le goût du LUKS
Le système Linux fournit de manière native un mécanisme de chiffrement de périphériques de type "bloc", appellé LUKS (pour Linux Unified Key Setup). Ce système propose une approche intéressante, dans le sens où l'accès aux périphériques chiffrés peut être délégué à plusieurs clés (jusqu'à huit). Il est ainsi possible de donner accès à un périphérique à plusieurs personnes, ou encore de donner à une personne plusieurs ressources pour accéder au volume ; par exemple une clé d'utilisation courante, une clé issue d'une empreinte digitale, et une clé en coffre à la banque.
Pré-requis
L'implémentation la plus populaire de LUKS est probablement celle fournie avec la couche DM (Device Mapper) de Linux, via le module noyau dm-crypt, et l'utilitaire cryptsetup. C'est donc un paquetage à installer.
Initialiser un volume LUKS
Utiliser LUKS nécessite l'écriture préalable d'un bloc d'en-tête sur le volume à chiffrer. Comme toutes les autres, cette opération est réalisée avec l'utilitaire cryptsetup. Ici, une première clé de chiffrement sera demandée par le programme :
cryptsetup --size 256 --cipher 'aes-cbc-essiv:sha256' luksFormat /dev/nomvolume
On utilise ici une clé de type AES-256-CBC-SHA, je vous invite à consulter la page de manuel cryptsetup(8) pour une description détaillée des options.
Ouvrir un volume chiffré
L'accès à un volume chiffré se fait généralement au démarrage du système. Une clé valide devra être saisie par l'utilisateur :
cryptsetup luksOpen /dev/nomvolume luks-nomvolume
Le résultat de cette opération est la création par le système d'un périphérique de type bloc, /dev/mapper/luks-nomvolume. Il représente la version déchiffrée de /dev/nomvolume.
Fermer un volume déchiffré
C'est simplement l'opération inverse de la précédente.
cryptsetup luksClose luks-nomvolume
Gestion des clés dans l'en-tête
Ajouter une clé de déchiffrement
Cryptsetup permet la gestion des huit slots de clés présents dans l'en-tête LUKS. Notamment, on voudra être en mesure d'ajouter une nouvelle clé à l'en-tête :
cryptsetup luksAddKey /dev/nomvolume
Afficher les informations sur l'en-tête LUKS
Permet de voir quel(s) slot(s) sont occupés dans l'en-tête LUKS :
cryptsetup luksDump /dev/nomvolume
Supprimer une clé de l'en-tête LUKS
cryptsetup luksDelKey /dev/nomvolume numero_de_slot
Activation automatique au démarrage
Certaines distributions supportent l'activation automatique des volumes chiffrés, à l'aide d'un fichier /etc/crypttab. Son utilisation reste analogue à la phase d'ouverture du volume chiffré :
# Contenu de /etc/crypttab
# target source device key file options
luks-nomvolume /dev/nomvolume none luks
Remarques
Il est intéressant de noter que toutes les clés dans l'en-tête LUKS ont le même poids administratif. Par conséquent, chaque clé permettra la gestion de l'ensemble des informations dans l'en-tête, ce qui est à prendre en considération lors de l'intégration de LUKS dans les politiques de sécurité corporatives.