staging.inyokaproject.org

LUKS mit Yubikey will nicht - Passphrase funktioniert immer

Status: Ungelöst | Ubuntu-Version: Kubuntu 22.04 (Jammy Jellyfish)
Antworten |

Dark_Wolf

Avatar von Dark_Wolf

Anmeldungsdatum:
12. August 2006

Beiträge: 2649

Hallo Leute,

ich hab hier ein Notebook bei dem die Homepartition mit LUKS verschlüsselt ist. Beim Booten muss man ein extra Passwort eingeben danach fährt der Rechern fertig zum Anmeldebildschirm hoch.

Nun hab ich hier einen Yubikey der laut Config die Anmeldung auch für Luks unterstützt.

ykman --diagnose 2>&1 | grep hmac-secret  
        Ctap2Info: {<VERSIONS: 0x01>: ['U2F_V2', 'FIDO_2_0', 'FIDO_2_1_PRE'], <EXTENSIONS: 0x02>: ['credProtect', 'hmac-secret']

Meine erste Idee war das ganze mit Systemd zu lösen. Hierfür bin ich dieser Anleitung gefolgt. Bei

systemd-cryptenroll /dev/nvme0n1p4 --fido2-device=auto  --fido2-with-client-pin=yes

kam dann immer die Fehlermeldung "Failed to load LUKS2 superblock: Invalid argument" Da bin ich dann definitiv nicht weiter gekommen.

Unlocking LUKS encrypted drives with a YubiKey has been supported since systemd 248. In Debian, systemd>=250 is required, as the feature has not been enabled in prior versions.

Das gilt in dem Fall wohl auch für Ubuntu. Nun zum Glück gibt es noch eine andere Möglichkeit, die laut Internetrecherche gut zu funktionieren scheint. https://www.endpointdev.com/blog/2022/03/disk-decryption-yubikey/ https://deisi.github.io/posts/luks_mi_yubikey/

Die ganze Config ist hier auch sauber durch. Keine Fehler. Ich hab dann sogar noch zum Test die Optionen direkt in die Grub CMD geschrieben:

cryptoptions=target=crypthome,source=/dev/nvme0n1p4,keyscript=/usr/share/yubikey-luks/ykluks-keyscript"

Man sieht auch das der Slot im Yubikey sauber belegt ist. Auch die "/etc/ykluks.cfg" wurde beschrieben:

# If you change this file, you need to run 
#   update-initramfs -u
WELCOME_TEXT="Please insert yubikey and press enter or enter a valid passphrase"
# Set to "1" if you want both your password and Yubikey response be bundled together and writtent to key slot.
CONCATENATE=0
# Set to "1" if you want to hash your password with sha256.
HASH=0
YUBIKEY_CHALLENGE="supergeheim"
YUBIKEY_LUKS_SLOT=2

Im Log sieht man dann folgende Fehlermeldung:

Encountered unknown /etc/crypttab option 'keyscript=/usr/share/yubikey-luks/ykluks-keyscript', ignoring

Nach meiner Recherche scheint das nicht implementiert zu sein. Zumindest im Zusammenhang mit Systemd stößt man dabei auf einige Bugberichte. Weis da vielleicht schon jemand eine Lösung? Nen Workaround oder überhaupt ne andere Lösung für den Yubikey?

Lieben Dank lg Dark Wolf

ChQdEwrOd

Anmeldungsdatum:
15. November 2023

Beiträge: 6

+1

habe das gleiche Erlebnis.

Probiere nu mal die initramfs Option von https://unix.stackexchange.com/a/447676/356711 aus, mla sehen, was das bewirkt...

ChQdEwrOd

Anmeldungsdatum:
15. November 2023

Beiträge: 6

Ok, mag vielleicht nicht mehr interessieren, aber für die ggf. suchende Nachwelt hier ein paar Lösungen:

Bin nun am Ende der Recherche angekommen, es gibt zwei große Fehlerquellen:

  1. Script veraltet: Die Paketversion ist sage und schreibe von 2017! 😮 "Schon" gelöst im Masterbranch im Jahre 2021 unter https://github.com/cornelinux/yubikey-luks/blob/master/key-script, wie ich nun gelernt habe. Bug: https://bugs.launchpad.net/ubuntu/+source/yubikey-luks/+bug/2049954

  2. Die von dir genannten Fehlermeldungen entstehen erst später im Init-Prozess und sind wohl "normal", weil das System ja schon entschlüsselt ist zu dem Zeitpunkt, werden also absichtlich ignoriert. Der eigentliche Ablauf findet innerhalb vom initramfs statt.

Zum debuggen kann man mal spaßeshalber alle Breakpoints im Boot enablen im Grubmenu und dich durchsteppen: (https://wiki.debian.org/InitramfsDebug: " break=premount,mount,mountroot,bottom,init. Dann sieht man die "echten" Ausgaben, die leider nicht alle im Syslog/journal landen, warum auch immer. Hat mich Stunden gekostet, dahinter zu kommen 🙄

Wie habe ich es ausgerollt:

1
2
3
> apt install yubikey-manager yubikey-personalization yubikey-luks
> ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible
> cryptsetup luksDump /dev/sdXX

Damit checken, dass der zweite Key nicht belegt ist! Sonst löschen mit 'cryptsetup luksKillSlot /dev/sdXX 1'. Wenn unsicher, welcher Key nun dein manuelles PW enthält: 'cryptsetup --verbose open --test-passphrase /dev/sdXX' und PW eingeben..

Dann:

1
> yubikey-luks-enroll -d /dev/sdXX -cs 1

Obacht! Zweimal wird das neue LUKS 2FAS PW für die Kombi mit yubikey abgefragt, einmal das existierende PW für LUKS zur Authorisierung des Vorganges.

Nun ist das Luks so weit und mit dem zweiten Eintrag mit dem yubikey verknüpft.

Nicht vergessen, das Script gegen die Masterversion auszutauschen! → siehe Problem 1 oben → /usr/share/yubikey-luks/ykluks-keyscript

Zuletzt nun noch die Config und das initramfs. In die /etc/ykluks.cfg muss YUBIKEY_CHALLENGE="<DeinNeuesYubikeyLuksPW>" gesetzt werden, dann hat man 1FAS. Wenn es leer oder falsch ist, dann musst du auf der Konsole beim Booten das yubikeyPW direkt eingeben, wenn der Yubikey im Rechner steckt. Ansonsten fällt das System zurück auf das PW ohne Yubikey und fragt nach diesem PW.

1
> update-initramfs -u

Solltest du noch irgendwas an grub verändert haben, auch noch 'update-grub'.

Wenn nun alles passt, also script aktuell, config angepasst, initramfs upgedatet, dann sollte der Rechner nun bei eingesetztem yubikey durchbooten.

Antworten |