Linux: LUKS-Container mit FIDO2 entsperren

Standardmäßig lassen sich LUKS-Volumes, wie z.B. LUKS-Container, mit einer Passphrase entsperren bzw. entschlüsseln. Seit einiger Zeit bietet systemd mit systemd-cryptenroll aber auch die Möglichkeit, LUKS-Container mit einem FIDO2-Gerät, welches die HMAC Secret Extension unterstützt, zu entsperren. Wie sich das z.B. mit einem Hardware-Security-Token wie einem YubiKey umsetzen lässt, zeige ich in folgendem Beitrag.

Folgende Geräte bzw. Software wurde verwendet:
  • Notebook mit Arch Linux
  • YubiKey 5C NFC (Firmware: v5.4.3)
  • systemd v252.1-1-arch
  • YubiKey-Manager v4.0.0a1

Voraussetzungen

Ich setze für diesen Beitrag voraus, dass ihr bereits eine LUKS-Containerdatei mit einer entsprechenden Passphrase erzeugt habt. Wichtig ist dabei, dass es sich um ein LUKS-Volume vom Typ LUKS2 handelt. Außerdem benötigt ihr ein FIDO2-kompatibles Gerät, welches die Erweiterung HMAC-Secret unterstützt. Unter Arch Linux muss zusätzlich das Paket libfido2 installiert sein.

YubiKey - FIDO2-PIN festlegen

Um die Sicherheit zu erhöhen, soll der LUKS-Container nur per YubiKey bzw. FIDO2 entsperrt werden können, wenn auch eine korrekte YubiKey-FIDO2-PIN eingegeben wurde. Im Auslieferungszustand hat die FIDO2-App des YubiKeys keine FIDO2-PIN gesetzt. Die PIN lässt sich z.B. mit dem YubiKey-Manager setzen, welcher in den offiziellen Paket-Repositories der gängigen Linux-Distributionen, wie z.B. Arch Linux und Debian, enthalten ist. Zum Einrichten einer PIN kann folgender Befehl genutzt werden:

ykman fido access change-pin
Terminal / Konsole

LUKS-Container: FIDO2-Gerät/Token hinterlegen

Zum Hinzufügen des (mit dem Rechner verbundenen) FIDO2-Geräts bzw. des entsprechenden Tokens zum LUKS-Container, in meinem Fall BackupDaten, wird folgender Befehl ausgeführt:

sudo systemd-cryptenroll --fido2-device=auto ~/BackupDaten
Please enter current passphrase for disk /home/sl/BackupDaten: ******
Initializing FIDO2 credential on security token.
👆 (Hint: This might require confirmation of user presence on security token.)
Please enter security token PIN: ***********
Generating secret key on FIDO2 security token.
👆 In order to allow secret key generation, please confirm presence on security token.
New FIDO2 token enrolled as key slot 1.
Terminal / Konsole

LUKS-Container mit FIDO2-Gerät/Token entsperren

Der LUKS-Container lässt sich nun entweder per Passphrase oder per FIDO2 entsperren. Standardmäßig wird immer die Passphrase abgefragt. Damit der FIDO2-Token verwendet wird, nutzt folgenden Befehl zum Entsperren der LUKS-Containerdatei:

sudo cryptsetup open --token-only BackupDaten mybackup
Geben Sie die PIN des Tokens ein: *****
Asking FIDO2 token for authentication.
👆 Please confirm presence on security token to unlock.
Terminal / Konsole

Ihr werdet anschließend aufgefordert eure FIDO2-PIN einzugeben und den Vorgang per Tastendruck auf dem FIDO2-Gerät (falls unterstützt) zu bestätigen.

Eine Passphrase muss auch weiterhin hinterlegt sein, da diese zum Hinzufügen als auch Entfernen von z.B. TPM-, FIDO2-Token etc. benötigt wird. Ihr könnt und solltet aber eine sichere bzw. komplexe Passphrase verwenden.

Fazit

Dank systemd lassen sich LUKS-Volumes anstatt mit Passphrase auch leicht mit FIDO2-Geräten entsperren. Das funktioniert nicht nur bei LUKS-Containerdateien, sondern generell bei allen LUKS2-Volumes. Verwendet ihr also z.B. eine Festplattenvollschlüsselung auf Basis von dm-crypt/LUKS für euer System, könnt ihr natürlich auch dieses mit einm FIDO2-Gerät absichern bzw. zum Entsperren nutzen. Die Einrichtung unter Arch Linux funktioniert dabei quasi analog zu meinem Beitrag Arch Linux: LUKS-Volume mit TPM2 inkl. PIN entschlüsseln.

Feedback

Für Feedback zum Beitrag, seien es Fragen, Korrigierungen und/oder Anregungen, könnt ihr mir gerne eine Nachricht per E-Mail oder Mastodon schreiben (siehe Kontakt).