Cryptage complet du disque avec cryptsetup/LUKS

Ce guide montre comment configurer des volumes chiffrés en LUKS, pour s’authentifier au démarrage avec Nitrokey Pro ou Nitrokey Storage.

Pour situer le contexte, cryptsetup-initramfs prend désormais en charge l’utilisation de cartes à puce OpenPGP comme Nitrokey Pro et Nitrokey Storage pour déverrouiller les volumes chiffrés en LUKS. Une fois la configuration terminée, il vous suffira d’insérer votre Nitrokey au démarrage et d’entrer votre PIN utilisateur, au lieu de taper votre phrase de passe de chiffrement de disque habituelle.

Ces instructions ont été testées sur Ubuntu 20.04 et Debian 10.

Avertissement

Le guide suivant peut potentiellement vous bloquer l’accès à votre ordinateur. Vous devez être conscient de ces risques, et nous vous recommandons d’utiliser le script ci-dessous sur un ordinateur secondaire, ou après une sauvegarde complète car vous pourriez perdre vos données.

Exigences

  • Un ordinateur Ubuntu ou Debian avec au moins un volume crypté par LUKS.

Consultez la section ci-dessous pour déterminer quelle méthode est compatible avec ce guide.

  • Une Nitrokey Pro 2 ou Nitrokey Storage 2 initialisée avec des clés.

Problèmes connus

Jusqu’à présent, le script ne fonctionne qu’avec des volumes partitionnés manuellement, qui sont composés d’une partition /boot non chiffrée, et d’une partition / racine chiffrée.

Veuillez ne pas sélectionner le chiffrement automatique du disque complet fourni par le système d’exploitation que vous utilisez pour ce guide. Vous serez confronté à des erreurs récurrentes lorsque le partitionnement est effectué automatiquement, en utilisant l’interface d’installation sur Ubuntu et Debian.

Instructions

  1. Installer les dépendances

    $ sudo apt install scdaemon opensc gnupg2
    
  2. Créer le répertoire smartcard-luks

    $ mkdir smartcard-luks && cd smartcard-luks
    
  3. Télécharger le script smartcard-luks

    $ wget https://raw.githubusercontent.com/daringer/smartcard-key-luks/main/smartcard-key-luks
    $ sudo chmod +x smartcard-key-luks
    
  4. Exporter la clé publique

    Pour exporter votre clé publique depuis le trousseau de GnuPG :

    $ gpg2 --armor --export KeyID > pubkey.asc
    

    Si vous avez déjà téléchargé une clé publique sur un serveur de clés (ou si elle est stockée ailleurs), vous devez la récupérer de la manière qui vous convient le mieux et passer à l’étape 5.

  5. Déterminez et vérifiez le nom correct du dispositif LUKS pour votre partition racine :

    $ cat /etc/crypttab
    # if there is only one entry, you want the 1st column of this entry
    

    Indication

    En général, cela devrait être quelque chose comme nvme0n1p3_crypt (pour NitroPC) ou sda3_crypt (pour NitroPads). Vous pouvez et devriez vérifier que l’UUID mentionné dans /etc/crypttab est la partition désignée en vérifiant le lien symbolique dans /dev/disks/by-uuid/.

  6. Exécutez le script avec le nom du périphérique luks (par exemple, nvme0n1p3_crypt) et pubkey.asc comme arguments.

    $ sudo ./smartcard-key-luks nvme0n1p3_crypt pubkey.asc
    

Une fois que vous exécutez le script avec la clé publique OpenPGP comme argument, il configure automatiquement un nouveau secret LUKS, le crypte contre cette clé publique, et configure crypttab, LUKS, initramfs, et GRUB.

On vous demandera d’abord le « PIN de l’utilisateur ».

img1

Une fois que vous avez déverrouillé la Nitrokey, il vous sera demandé de saisir votre « ancienne phrase de passe ». Il s’agit de la phrase de passe que vous avez entrée pour crypter votre volume lors de l’installation.

img2

Note

Il s’agit d’une solution de repli au cas où vous perdriez votre Nitrokey ou si elle n’était pas disponible. Jusqu’à présent, elle n’a pas été testée, et les utilisateurs doivent être conscients du risque d’être bloqués hors de leur ordinateur, si la méthode de repli ne fonctionne pas.

Une fois que vous avez saisi la phrase de passe, le script termine l’installation en une minute environ. N’interrompez pas le script, sinon vous risquez d’être bloqué sur votre ordinateur après le redémarrage.

img3

C’est fait !

Vous devez maintenant redémarrer, et vous devriez pouvoir utiliser votre Nitrokey pour déverrouiller votre disque crypté.

Utilisation

Après le redémarrage, le système vous demande de saisir votre code PIN.

img5

Saisissez votre code PIN utilisateur pour déverrouiller le lecteur

img6

Autres conseils

Modifier la phrase d’authentification

Une fois cette configuration effectuée, vous ne devez plus utiliser l’utilitaire disques (gnome) pour changer la phrase de passe (de secours). La manière correcte de le faire est d’appeler directement cryptsetup comme ceci :

$ sudo cryptsetup luksChangeKey /dev/nvme0n1p3

Avec nvme0n1p3 étant la partition pour laquelle vous avez configuré les clés.

Utiliser des touches multiples

Il est facile d’utiliser plusieurs clés de sécurité (matérielles) de sorte que chacune d’entre elles soit capable de déverrouiller le lecteur LUKS indépendamment. Il suffit d’exporter plusieurs clés publiques et de passer plusieurs clés au script de configuration comme ceci :

$ sudo ./smartcard-key-luks nvme0n1p3_crypt pubkey-1.asc pubkey-2.asc

Définir le nom du titulaire de la carte

Pendant la saisie du code PIN au démarrage pour le décryptage de la partition racine LUKS, un titulaire de carte est présenté à l’utilisateur, pour le définir, utilisez $ gpg --edit-card et dans l’invite tapez admin et name pour définir le titulaire de la carte OpenPGP (Nitrokey Storage 2 ou Nitrokey Pro 2).

Remplacer/supprimer des touches

Il n’est pas possible d’ajouter/supprimer des clés directement. Vous devez donc supprimer/supprimer l’ancienne configuration et relancer la configuration avec la ou les clés désignées :

Supprimez le fichier clé (chemin, si vous avez utilisé le script ci-dessus) de luks-device (nvme0n1p3) :

$ sudo cryptsetup luksRemoveKey /dev/nvme0n1p3 /etc/cryptsetup-initramfs/cryptkey.gpg

Supprime le fichier clé lui-même :

$ sudo rm /etc/cryptsetup-initramfs/cryptkey.gpg

Ré-exécutez la configuration ci-dessus.

Déverrouillage de LUKS2 avec un certificat X509

SystemD supporte le déverrouillage d’une partition LUKS2 à l’aide d’un certificat X509. Vous trouverez un excellent article de blog sur la façon de réaliser cette opération sur le Blog personnel de Vladimir Timofeenko.