YubiKey 5C NFC
Status: LUKS ontgrendeling met FIDO2 is te onbetrouwbaar op Fedora 43 (systemd 258). Dit onderzoek documenteert wat geprobeerd is, wat de oorzaak is, en wat je in de tussentijd kunt doen. Mijn advies? Opnieuw proberen als Fedora 44 verschijnt met systemd 259+.
Wat op dit moment werkt
De YubiKey werkt betrouwbaar voor alles buiten de vroege boot processen:
- OATH/TOTP — Yubico Authenticator Flatpak 7.3.0 werkt uitstekend voor 2FA codes
- SSH — FIDO2-backed SSH sleutels
- Bitwarden — hardware-backed authenticatie
- pam-u2f — YubiKey touch voor
sudoen GDM schermvergrendeling (zie hieronder)
Wat Geprobeerd Is: FIDO2 LUKS Ontgrendeling
Het doel was: YubiKey inplugggen → aanraken bij boot → LUKS ontgrendelt → bureaublad. Geen LUKS wachtwoord nodig dus.
Wat gedaan is
Packages geïnstalleerd:
sudo dnf install libfido2 fido2-tools cryptsetupFIDO2 enrollment:
sudo systemd-cryptenroll \
--fido2-device=auto \
--fido2-with-client-pin=no \
--fido2-with-user-presence=yes \
--fido2-with-user-verification=no \
/dev/nvme1n1p3crypttab:
luks-680fec4e-... UUID=680fec4e-... none discard,fido2-device=autodracut config (/etc/dracut.conf.d/fido2.conf):
add_dracutmodules+=" fido2 "Wat werkte
- Enrollment werkt (keyslot 1, touch-only,
fido2-clientPin-required: false) - FIDO2 libraries zijn aanwezig in initramfs (
lsinitrd | grep fido) - Incidentele succesvolle boots bij het snel aanraken (constant spammen) van de YubiKey op het juiste moment
Wat niet werkte
Touch venster is ~1-2 seconden — niet genoeg tijd om te reageren. Er is geen configureerbare
token-timeout=in crypttab tot systemd 259 uit is.Geen wachtwoord fallback — als FIDO2 mislukt, vraagt het systeem niet om een LUKS wachtwoord. Het valt terug in een dracut emergency shell met een vergrendeld root account. Dit is een bevestigde regressie geïntroduceerd in systemd 257 (issue #35393). Dit wil je niet.
dracut initqueue race met de YubiKey — het USB HID apparaat is niet gereed binnen het 5-seconden dracut initqueue venster op deze hardware, waardoor
systemd-cryptsetupmislukt voordat het de touch prompt kan tonen.rhgb/plymouth verbergt prompts — zelfs met verbose boot is de touch prompt verborgen achter Plymouth.
Oorzaak
systemd 257/258 heeft een regressie waarbij een mislukte FIDO2 authenticatie niet terugvalt op een wachtwoord. Gecombineerd met het korte dracut initqueue venster door de USB stack op deze laptop, resulteert dit in een onherstelbare boot loop als FIDO2 niet slaagt bij de eerste poging.
Wat teruggedraaid is
# FIDO2 verwijderen uit LUKS
sudo systemd-cryptenroll --wipe-slot=fido2 /dev/nvme1n1p3
# crypttab herstellen naar alleen wachtwoord
# alleen discard, geen fido2-device=auto
# dracut config verwijderen
sudo rm /etc/dracut.conf.d/fido2.conf
sudo rm -r /etc/systemd/system/systemd-cryptsetup@.service.d/
# initramfs herbouwen
sudo dracut --force --regenerate-allWanneer Opnieuw Proberen
Wachten op Fedora 44 (verwacht met systemd 259+). Systemd 259 voegt token-timeout= toe als crypttab optie, wat een configureerbaar wachtvenster geeft voor de touch prompt. Gecombineerd met een fix voor de fallback regressie zou FIDO2 LUKS ontgrendeling betrouwbaar moeten worden.
Bij een nieuwe poging is de enrollment procedure zelf correct — alleen de systemd versie is het obstakel op dit moment.
YubiKey Gebruiken voor sudo en Schermvergrendeling (pam-u2f)
Een betrouwbaar alternatief dat wel werkt: vereist een YubiKey touch voor sudo en/of het GDM vergrendelscherm.
Nog te documenteren na testen.
Probleemoplossing
Systeem vast in boot loop na FIDO2 enrollment
Als je FIDO2 hebt ingericht en niet kunt booten, tik snel op de YubiKey direct na het BIOS scherm. Het touch venster is erg kort en je zult dus op het juiste moment moeten spammen. Als je geluk hebt, boot je succesvol en kun je de FIDO2 enrollment ongedaan maken (zie hieronder).
Eenmaal in het systeem, direct terugdraaien:
sudo systemd-cryptenroll --wipe-slot=fido2 /dev/nvme1n1p3
sudo nano /etc/crypttab # verwijder fido2-device=auto
sudo rm /etc/dracut.conf.d/fido2.conf
sudo dracut --force --regenerate-allLUKS keyslots verifiëren
sudo cryptsetup luksDump /dev/nvme1n1p3 | grep -E "^\s+[0-9]+:"Moet alleen 0: luks2 tonen na terugdraaien. Als slot 1 nog aanwezig is, is FIDO2 nog steeds ingeschreven.