Intelligente Lösungen
in neuer Dimension

LUKS mit FIDO2 - systemd-cryptenroll

Das aktuelle Ubuntu-22.04 (jammy) unterstützt wohl das Entsperren von Festplatten mittels FIDO2-Stick (Solokey). Hier meine Experimente dazu. TLDR: Funktioniert noch nicht so richtig toll!

Vorabprüfung

FIDO-Stick:

1
2
3
root@cslpc55:~# systemd-cryptenroll --fido2-device=list
PATH         MANUFACTURER PRODUCT
/dev/hidraw1 SoloKeys     Solo 4.1.5

Verschlüsselte Platte:

1
2
3
4
root@cslpc55:~# luks-list.sh
disk   |disk-size|vendor|model            |serial|part     |part-size|crypto-part    |fstype     |lv|su
-------|---------|------|-----------------|------|---------|---------|---------------|-----------|--|--
nvme0n1|465,8G   |      |KINGSTON SNVS500G|50026B|nvme0n1p5|464,3G   |nvme0n1p5_crypt|LVM2_member|2 |1

Aktivierung

Für die Aktivierung muß man

  • das Aktivierungskommando eintippen
  • zunächst das bestehende Festplattenkennwort eingeben
  • dann die PIN vom FIDO-Stick/Solokey eingeben
  • dann den FIDO-Stick/Solokey drücken
  • dann nochmal den FIDO-Stick/Solokey drücken

Auf der Konsole sieht es so aus:

1
2
3
4
5
6
7
8
root@cslpc55:~# systemd-cryptenroll /dev/nvme0n1p5 --fido2-device=auto --fido2-with-client-pin=yes
Please enter current passphrase for disk /dev/nvme0n1p5: **********              
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.

/etc/crypttab erweitern

Am Zeilenende muß “fido2-device=auto” hinzugefügt werden in /etc/crypttab:

1
nvme0n1p5_crypt UUID=406f3f48-xxx none luks,discard,fido2-device=auto

Initramfs neu erzeugen

Leider funktioniert “update-initramfs” nicht mehr:

1
2
3
4
root@cslpc55:~# update-initramfs -u
update-initramfs: Generating /boot/initrd.img-5.15.0-53-generic
cryptsetup: WARNING: nvme0n1p5_crypt: ignoring unknown option 'fido2-device'
...

Also stellen wir um auf “dracut”:

1
2
apt install dracut
apt install fido2-tools

Konfiguration von “dracut” erweitern:

1
2
3
4
5
6
7
8
9
10
11
root@cslpc55:~# sudo tee /etc/dracut.conf.d/11-fido2.conf <<EOF
## Spaces in the quotes are critical.
# install_optional_items+=" /usr/lib/x86_64-linux-gnu/libfido2.so.* "

## Ugly workround because the line above doesn't fetch
## dependencies of libfido2.so
install_items+=" /usr/bin/fido2-token "

# Required detecting the fido2 key
install_items+=" /usr/lib/udev/rules.d/60-fido-id.rules /usr/lib/udev/fido_id "
EOF

Initramfs neu erzeugen:

1
dracut -f

Neustart

Beim Neustart des Rechners wird man nun aufgefordert, den PIN des Solokeys einzugeben und 2x den Solokey zu drücken:

Eingabe des PINs

Die Eingabemaske sieht optisch relativ schlicht aus! Entschlüsseln der Platte klappt gut!

Probleme

Ich habe noch ein paar Zusatztests gemacht, die leider nicht so richtig gut funktioniert haben!

Neustart ohne Solokey

Eigentlich sollte der Neustart auch ohne Solokey klappen. Laut Dokumentation erfolgt eine Abfrage nach dem Festplattenkennwort, sofern der Solokey nicht innerhalb von 30 Sekunden erkannt wird. Das hat bei mir nicht geklappt! Es erscheint immer die Frage nach dem PIN und diese “verschwindet” auch nicht nach einiger Zeit.

Zusatzregistrierung

Ich habe zusätzlich zur oben beschriebenen Registrierung noch diese vorgenommen:

1
root@cslpc55:~# systemd-cryptenroll /dev/nvme0n1p5 --fido2-device=auto

Idee: Damit muß dann kein PIN mehr eingetippt werden. Leider führt das dazu, dass der Solokey nicht mehr abgefragt wird. Stattdessen muß man bei der optisch schlichten Maske das Festplattenkennwort eintippen!

Links

Änderungen

  • 2022-11-25: Erste Version