LUKS : quelques grammes de paranoïa pour des données bien protégées

01/08/10

LUKS signifie Linux Unified Key Setup. Il s’agit d’un format de cryptage de données standard et indépendant de la plateforme.

Cet outil a justement été développé dans une optique de standardisation des processus d’encryptage et de décryptage des données, suite aux expériences malheureuses d’utilisateur.

Afin de prétendre à la standardisation de l’outil, il a donc fallu prendre et justifier un ensemble de décisions. Ces décisions ont été regroupées sous une même modèle, TKS1, destiné au processing de clé issue de user password.

Ce dispositif d’encryption est basé sur une version améliorée de cryptsetup et utilisant dm-crypt comme support pour la partie encryption de disque. Bien qu’initialement développé pour Linux, il existe aujourd’hui des versions dédiées Windows .

LUKS est un processus à lancer sur une partition nouvelle, vierge de toute données dans la mesure où il opère une réorganisation de la structure logique de la partition. Néanmoins, il est possible, en passant par un backup et une restauration explicite à votre charge, de faire en sorte qu’une partition existante passe en cryptée sans perte de données.

Fonctionnement

Un disque encrypté via LUKS a une structure telle que :

LUKS phdr | KM1 | KM2 | ... | KM8 | bulk data

On peut y voir 3 types d’éléments : le Partition header (phdr), les key materials (KM) et les données encryptées (bulk data).

Le partition header (phdr) débute au secteur 0 de la partition et contient :

  • les informations propres à l’encodage des données : le cipher utilisé, son mode, la md5sum de la master key ainsi que sa longueur, et un uuid,
  • les informations à propos des key slots, c’est-à-dire les entrées contenant les localisations des key materials.

Lorsqu’un key slot est activé, il y a recopie de la version cryptée de la master key dans la partie KM (Key Material) qui est associée au key slot.

Cette version cryptée est verrouillée par le password utilisateur.

La master key est construite grâce à PBKDF2 (PKCS #5’s password based key derive function 2). Elle est checksummée et plusieurs fois hashée via PBKDF2. Le résultat et le nombre d’itération sont tous les deux stockés dans le phdr.

Normalement, une master key comprend seulement 16 ou 32 octets, ce qui peut poser des soucis de sécurité en cas de remapping en tant que zone réservée. En effet, il devient alors impossible d’accéder au secteur pour purger toute trace de la clé.

C’est pour cela que LUKS a prévu une fonction qui splitte les information et gonfle la taille de la master key, ce qui permet de réduire les risques que l’ensemble de la master key soit remappée.

Lorsqu’un utilisateur renseigne le mot de passe et après vérification de celui-ci, il y a décryptage du key material contenant la version cryptée de la master key. Il est alors possible de décrypter les données.

Grâce à la multitude des key slot, il est possible d’avoir plusieurs mots de passe protégeant les données. Il suffit donc de fournir un de ces mots de passe pour déverrouiller la partition.

Le phdr est de taille constante, en revanche, les tailles des KM dépendent de la longueur de la master key.

Il existe plusieurs étapes par lesquelles on doit passer pour mettre en place et gérer LUKS.

L’initialisation est la première.

Elle consiste à construire une master key, et à modifier la structure de la partition à encrypter de telle sorte qu’elle dépende de cette master key.

Il y a ensuite définition du password afin de déverrouiller la master key. Pour cela, l’utilisateur doit disposer d’une version non cryptée de la master key. Le password est ensuite crypté par PBKDF2 et crypte à son tour la master key.

Il est possible de changer de mot de passe puisque cela revient à déverrouiller la master key, à ajouter un nouveau password et à supprimer l’ancien.