Festplattenverschlüsselung mit cryptsetup/LUKS

Diese Anleitung zeigt, wie man LUKS-verschlüsselte Volumes konfiguriert, um sich beim Booten mit Nitrokey Pro oder Nitrokey Storage zu authentifizieren.

Zum Hintergrund: cryptsetup-initramfs unterstützt jetzt die Verwendung von OpenPGP-Smartcards wie dem Nitrokey Pro und dem Nitrokey Storage, um LUKS-verschlüsselte Volumes zu entsperren. Wenn Sie das Setup abgeschlossen haben, müssen Sie nur noch Ihren Nitrokey beim Booten einstecken und Ihre Benutzer-PIN eingeben, anstatt Ihre reguläre Passphrase für die Festplattenverschlüsselung einzugeben.

Diese Anleitung wurde auf Ubuntu 20.04 und Debian 10 getestet.

Warnung

Die folgende Anleitung kann Sie möglicherweise von Ihrem Computer aussperren. Sie sollten sich dieser Risiken bewusst sein. Wir empfehlen Ihnen, das folgende Skript auf einem zweiten Computer oder nach einer vollständigen Sicherung zu verwenden, da Sie Ihre Daten verlieren könnten.

Anforderungen

  • Ein Ubuntu- oder Debian-Computer mit mindestens einem LUKS-verschlüsselten Volume.

Lesen Sie den Abschnitt unten, um zu bestimmen, welche Methode mit dieser Anleitung kompatibel ist.

  • Ein Nitrokey Pro 2 oder Nitrokey Storage 2 initialisiert mit Tasten.

Bekannte Probleme

Bisher funktioniert das Skript nur mit manuell partitionierten Volumes, die aus einer unverschlüsselten /boot-Partition und einer verschlüsselten Root-Partition / bestehen.

Bitte wählen Sie für diese Anleitung nicht die automatische Festplattenverschlüsselung, die das von Ihnen verwendete Betriebssystem bietet. Sie werden mit wiederkehrenden Fehlern konfrontiert, wenn die Partitionierung automatisch über die Installationsoberfläche von Ubuntu und Debian durchgeführt wird.

Anweisungen

  1. Abhängigkeiten installieren

    $ sudo apt install scdaemon opensc gnupg2
    
  2. Smartcard-Luks-Verzeichnis erstellen

    $ mkdir smartcard-luks && cd smartcard-luks
    
  3. Laden Sie das Smartcard-Luks-Skript herunter

    $ wget https://raw.githubusercontent.com/daringer/smartcard-key-luks/main/smartcard-key-luks
    $ sudo chmod +x smartcard-key-luks
    
  4. Exportieren des öffentlichen Schlüssels

    So exportieren Sie Ihren öffentlichen Schlüssel aus dem Schlüsselbund von GnuPG:

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

    Wenn Sie bereits einen öffentlichen Schlüssel auf einen Keyserver hochgeladen haben (oder ihn irgendwo anders gespeichert haben), sollten Sie ihn auf die Art und Weise abrufen, die Ihnen am liebsten ist, und mit Schritt 5 fortfahren.

  5. Ermitteln und überprüfen Sie den korrekten LUKS-Gerätenamen für Ihre Root-Partition:

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

    Hinweis

    Normalerweise sollte dies etwas wie nvme0n1p3_crypt (für NitroPC) oder sda3_crypt (für NitroPads) sein. Sie können und sollten überprüfen, ob die in /etc/crypttab angegebene UUID die vorgesehene Partition ist, indem Sie den symbolischen Link in /dev/disks/by-uuid/ überprüfen.

  6. Führen Sie das Skript mit dem Luks-Gerätenamen (z. B. nvme0n1p3_crypt) und pubkey.asc als Argumente aus.

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

Sobald Sie das Skript mit dem öffentlichen OpenPGP-Schlüssel als Argument ausführen, legt es automatisch ein neues LUKS-Geheimnis an, verschlüsselt es mit diesem öffentlichen Schlüssel und richtet crypttab, LUKS, initramfs und GRUB ein.

Zuerst werden Sie zur Eingabe der Benutzer-PIN aufgefordert

img1

Sobald Sie den Nitrokey entsperren, werden Sie nach Ihrer alten Passphrase gefragt. Es ist die Passphrase, die Sie bei der Installation zum Verschlüsseln Ihres Volumes eingegeben haben.

img2

Bemerkung

Dies ist eine Fall-Back-Alternative für den Fall, dass Sie Ihren Nitrokey verlieren oder dass er nicht verfügbar ist. Bisher wurde sie nicht getestet, und die Benutzer müssen sich des Risikos bewusst sein, dass sie aus ihrem Computer ausgesperrt werden, wenn die Ausweichmethode nicht funktioniert.

Sobald Sie die Passphrase eingegeben haben, schließt das Skript die Einrichtung in etwa einer Minute ab. Unterbrechen Sie das Skript nicht, sonst werden Sie nach dem Neustart des Computers möglicherweise ausgesperrt.

img3

Erledigt!

Inzwischen müssen Sie einen Neustart durchführen, und Sie sollten in der Lage sein, Ihren Nitrokey zu verwenden, um Ihr verschlüsseltes Laufwerk zu entsperren.

Verwendung

Nach dem Neustart sollten Sie zur Eingabe Ihrer Benutzer-PIN aufgefordert werden

img5

Geben Sie Ihre Benutzer-PIN ein, um das Laufwerk zu entsperren

img6

Weitere Hinweise

Passphrase ändern

Sobald diese Einrichtung abgeschlossen ist, sollten Sie das (Gnome-)Dienstprogramm disks nicht mehr verwenden, um die (Fallback-)Passphrase zu ändern. Der korrekte Weg, dies zu tun, ist der direkte Aufruf von cryptsetup wie folgt:

$ sudo cryptsetup luksChangeKey /dev/nvme0n1p3

Dabei ist „nvme0n1p3“ die Partition, für die Sie die Schlüssel eingerichtet haben.

Mehrere Schlüssel verwenden

Es ist einfach, mehrere (Hardware-)Sicherheitsschlüssel zu verwenden, so dass jeder von ihnen in der Lage ist, das LUKS-Laufwerk unabhängig zu entsperren. Exportieren Sie einfach mehrere öffentliche Schlüssel und übergeben Sie auch mehrere Schlüssel an das Setup-Skript wie folgt:

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

Karteninhabername festlegen

Während der PIN-Eingabe beim Booten zur Entschlüsselung der LUKS-Root-Partition wird dem Benutzer ein Kartenhalter präsentiert, um diesen zu setzen, verwenden Sie bitte $ gpg --edit-card und geben Sie innerhalb der Eingabeaufforderung admin und name ein, um den Kartenhalter für die OpenPGP-Karte (Nitrokey Storage 2 oder Nitrokey Pro 2) zu setzen.

Schlüssel austauschen/löschen

Es ist nicht möglich, Schlüssel direkt hinzuzufügen/zu entfernen. Daher müssen Sie das alte Setup löschen/entfernen und das Setup mit dem/den vorgesehenen Schlüssel(n) erneut ausführen:

Entfernen Sie die Schlüsseldatei (Pfad, wenn Sie das obige Skript verwendet haben) von luks-device (nvme0n1p3):

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

Entfernen Sie die Schlüsseldatei selbst:

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

Führen Sie das obige Setup erneut aus.

Freischaltung von LUKS2 mit X509-Zertifikat

SystemD unterstützt das Entsperren einer LUKS2-Partition mit Hilfe eines X509-Zertifikats. Ein toller Blogeintrag, wie man das realisiert, findet sich im Persönlichen Blog von Vladimir Timofeenko