Arch Linux: LUKS-Volume mit TPM2 inkl. PIN entschlüsseln

Mit systemd-cryptenroll bietet systemd eine einfache Möglichkeit, PKCS#11-, FIDO2- und/oder TPM2-Token-/Geräte zum Entschlüsseln von LUKS2-Volumes einzurichten. Mit der neuesten Version von systemd v251 lässt sich für die Verwendung eines TPM2-Chips auch noch eine zusätzliche PIN festlegen. Dadurch muss zum Entschlüsseln des LUKS-Volume nicht nur der TPM-Speicher (PCR-Status) korrekt sein, sondern es muss auch die korrekte PIN eingegeben werden.

Für mein Notebook mit Arch Linux verwende ich die TPM2+PIN-Lösung nun zum Entschlüsseln meines mit LUKS vollverschlüsselten Systems (Root-LVM-Partition). Was ich dafür tun musste, erfahrt ihr in diesem Beitrag.

Folgende Geräte bzw. Software wurde verwendet:
  • Notebook mit TPM2-Chip
  • Arch Linux
  • systemd v251.1-1-arch
  • tpm2-tools v5.2-1

Voraussetzungen

Nebst Rechner mit TPM2-Chip muss das LUKS-Volume vom Typ LUKS2 sein und eine normale Passphrase bzw. einen Recovery-Key hinterlegt haben. Zudem benötigt ihr systemd ab Version 251 sowie das Paket tpm2-tools . Des Weiteren müsst ihr, wenn ihr wie ich eure LUKS-Root-Partition entsprechend entschlüsseln wollt, sicherstellen, dass euer initramfs die Module systemd und sd-encrypt verwendet. Ich hatte bisher, wie z.B. in meinem Beitrag zur Installation von Arch Linux beschrieben, nur das encrypt-Modul eingesetzt.

TPM2 + PIN mit systemd-cryptenroll für LUKS-Volume einrichten

Um den TPM2-Chip inkl. PIN als Key für ein LUKS-Volume festzulegen, reicht ein Befehl. Bei mir war das entsprechende LUKS-Volume z.B. /dev/sda2, welches meine Root-Partition inkl. LVM beinhaltet. Der Befehl dazu sieht dann so aus:

sudo systemd-cryptenroll --tpm2-device=auto --tpm2-with-pin=yes /dev/sda2
Please enter current passphrase for disk /dev/sda2:
Please enter TPM2 PIN:
Please enter TPM2 PIN (repeat):
New TPM2 token enrolled as key slot 1
Terminal / Konsole

Für Details zum Befehl schaut am besten auf die entprechende systemd-cryptenroll-Seite.

Hinweis PIN muss nicht nur aus Zahlen bestehen

Für die PIN sind nicht nur Zahlen zulässig, sondern auch Buchstaben und Sonderzeichen.

initramfs-Module laden

Wie im Abschnitt "Voraussetzungen" erwähnt, musste ich für mein System noch die Generierung des initramfs anpassen, damit die benötigten systemd-Module beim Booten geladen werden. Das ist letztendlich aber nur relevant, wenn es sich bei dem zu entschlüsselenden LUKS-Volume um die Root-Partition handelt. Dazu habe ich die HOOKS=()-Zeile in /etc/mkinitcpio.conf wie folgt angepasst:

HOOKS=(base systemd autodetect keyboard sd-vconsole modconf block sd-encrypt lvm2 filesystems fsck)
Datei: /etc/mkinitcpio.conf

Anschließend ist das initramfs-Image neu zu generieren:

sudo mkinitcpio -P
Terminal / Konsole

Kernel-Cmdline/-Parameter oder /etc/crypttab anpassen

Damit zum Entschlüsseln des LUKS-Volume der TPM2+PIN-Key verwendet werden kann, muss in der /etc/crypttab-Datei eine entsprechende Zeile hinzugefügt werden. Wenn es sich um die Root-Partition handelt, dann ist /etc/crypttab.initramfs zu verwenden. Für Details zur "crypttab"-Variante siehe: Arch-Linux-Doku: TPM - systemd-cryptenroll. Alternativ, und so habe ich es bei mir umgesetzt, kann man auch direkt die Kernel-Cmdline anpassen. Im Normalfall lässt sich das über die Konfiguration des jeweiligen Bootloaders konfigurieren (siehe Arch-Linux-Doku: Kernel parameters). In meinem Fall habe ich also die Kernel-Cmdline bzw. die Kernel-Parameter wie folgt angepasst:

rd.luks.name=Root-Partition-UUID=rootlvm rd.luks.options=tpm2-device=auto,tpm2-pin=yes root=LABEL=root rw [...]
Kernel-Cmdline

Vergesst nicht anschließend noch eure Bootloader-/Kernel-Dateien neu zu generieren.

Rechner neustarten und mit TPM2 und PIN entschlüsseln

Anschließend kann der Rechner neugestartet werden und anstatt der Abfrage zur Eingabe der normalen Passphrase, werdet ihr nun aufgefordert eure TPM2-PIN einzugeben.

Fazit

Dank systemd ist es mittlerweile auch unter Linux relativ einfach - analog zu Windows und Bitlocker - die verschlüsselte Systempartition mittels TPM2-Chip und zusätzlicher PIN zu entschlüsseln. Alternativ kann man aber z.B. auch einen FIDO2-Security-Token, wie z.B. einen YubiKey, nutzen.

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).