Die Firma Yubico bietet mit "yubikey_luks" eine Software zur Nutzung ihrer Yubikeys als Schlüssel für einem LUKS Container, die mit einem Challenge-Response Verfahren arbeitet.
Die Passphrase wird als Challenge an den Yubikey gesendet, der mit kryptografischem Voodoo einen Response abgeleitet, der als Schlüssel zum Öffnen des Container dient. Die Passphrase (Challenge) kann dabei einfach und leicht merkenbar sein, da der Yubikey als zweiter Faktor für das Öffnen des Container nötig ist und ein starkes PW ableitet.
- Die Software kann mit dem bevorzugten Paketmanager installiert werden:
> sudo apt install yubikey-luks yubikey-personalization
- Der zweite PW-Slot des Yubikey wird für Challende-Response vorbereitet:
> ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible
- Das Challenge-Response Passwort wird in einen freien Keyslot des LUKS Containers eingetragen. Es gibt ein Script, dass die Aufgabe übernimmt. Es wird dabei 2x das neue Challenge Passwort für den Yubikey und eine Passphrase für das Öffnen des LUKS Containers abgefragt:
> sudo yubikey-luks-enroll -d <device> -s <key-slot>
Falls man den Überblick verloren hat, welche Keyslots im LUKS Container noch frei sind, kann man sich die Belegung mit folgendem Kommando anzeigen lassen:
> sudo cryptsetup luksDump <device>
LUKS header information for <device>
- Zukünftig kann man zum Öffnen des Containers den Yubikey anschließen und nur das einfache Challenge Passwort in der Passwortabfrage eingeben. Andere Methoden zum Öffnen des Container bleiben davon unberührt und stehen weiter zur Verfügung.
Full Disc Encryption: Wenn man bei der Installation das System vollständig verschlüsselt hat, kann man den Yubikey auch zum Öffnen des Root-Containers beim Booten verwenden.
Dafür ist die Festplattenpartition mit dem verschlüsselten Root-Container zu ermitteln und der Yubikey als Hardware Token zum Öffnen hinzuzufügen, wie oben beschrieben. Die folgenden Schritte funktionieren auf einem Debian System und davon abgeleiteten Derivaten:
- Zuerst das BACKUP der Daten aktualisieren, falls man etwas kaputtspielt!
- Am einfachsten identifiziert man den Root-Container mit einem Blick in die Datei /etc/crypttab. In der ersten Zeile das zweite Element ist die Kennung für das <device>, welches für das Kommando "yubikey-luks-enroll" zu verwenden ist.
Danach ist die Datei /etc/crypttab anzupassen. In der (ersten) Zeile für den Root Container ist das Schlüsselwort "luks" mit dem vollständigen Pfad zu "ykluks-keyscript" zu ergänzen, also "... luks,keyscript=/usr/share/yubikey-luks/ykluks-keyscript ...".
Also: aus der Zeile...type="text/javascript"
cryptroot UUID=xxxx ... luks
... wird diese Zeile:
cryptroot UUID=xxxx ... luks,keyscript=/usr/share/yubikey-luks/ykluks-keyscript
Alle anderen Parameter bleiben so erhalten, wie bei der Installation konfiguriert.
- Danach ist noch das Bootimage neu zu bauen mit:
> sudo update-initramfs -u
- Wenn man den Rechner neu bootet, kann man statt der bisherigen (hoffentlich starken und komplexen) Passphrase, die man bei der Installtion vergeben hat, auch den Yubikey anschließen und das einfachere Challenge Passwort eingeben.
Als zusätzliches Sicherheitsfeature könnte man
"yubikey-luks-suspend" aktivieren. Der Daemon sorgt dafür, dass bei einem Suspend des Rechners alle LUKS Container geschlossen und die Schlüssel aus dem RAM gelöscht werden. Der Daemon wird mit folgenden Kommandos gestartet und für zukünftige Restarts des Linux Systems aktiviert:
> sudo systemctl start yubikey-luks-suspend
> sudo systemctl enable yubikey-luks-suspend
(Das funktioniert natürlich nicht bei einem vollständig verschlüsselten System!!!)