Post by Torsten Bergersorry, hatte Deine Frage wohl nicht richtig verstanden.
Offensichtlich, denn ich habe gar keine Frage gestellt.
Post by Torsten BergerEtwas habe ich noch nicht verstanden: Du generierst doch den Key nicht
auf Deinem Yubikey - oder doch (wie?) ?!.
Doch.
ssh-keygen lässt den Yubikey den Schlüssel erzeugen und bekommt
dann vom Yubikey den Key Handle und den öffentlichen Schlüssel
mitgeteilt.
Post by Torsten BergerKannst Du bitte Dein Setup noch ein bisschen weiter ausführen?
Gerne.
FIDO-Authenticator (z.B. Yubikey) an USB-Schnittstelle stecken,
Schlüssel erzeugen:
$ ssh-keygen -t ed25519-sk
Das legt
- einen öffentlichen SSH-Schlüssel an (id_ed25519_sk.pub), der
genau wie jeder andere öffentliche SSH-Schlüssel gehandhabt
wird;
- einen privaten SSH-Schlüssel an (id_ed25519_sk), der aber nur
im Zusammenspiel mit dem Authenticator funktioniert, weil er nur
den FIDO Key Handle enthält. Wie andere private SSH-Schlüssel
lässt er sich mit einer Passphrase schützen, was ich auch tue.
Den öffentlichen Schlüssel habe ich in meine ~/.ssh/authorized_keys
auf zahlreichen Hosts verteilt.
Wenn ich mich an meinem Arbeitsrechner einlogge, lade ich den
privaten Schlüssel in den ssh-agent (ssh-add ~/.ssh/id_ed25519_sk).
Dazu braucht der Authenticator übrigens nicht angesteckt zu sein.
Wenn ich am Rechner sitze, stecke ich den Authenticator an, den ich
an meinem Schlüsselbund habe.
Beim Aufbau einer SSH-Verbindung erfolgt die Authentisierung mit
dem obigen SSH-Schlüssel. Dabei wird auch der FIDO Key Handle (aus
dem privaten SSH-Schlüssel) an den Authenticator geschickt, der
damit auf seinen eigentlichen privaten FIDO-Schlüssel zugreift.
Bevor der Authenticator die Authentisierungs-Operation durchführt,
blinkt er, um die Anwesenheit des Benutzers zu prüfen. Ich zwicke
den Authenticator... und bin drin wie Boris Becker!
Damit ergibt sich eine Zwei-Faktor-Authentisierung, denn es wird
1. die Datei mit dem privaten SSH-Schlüssel
2. der FIDO-Authenticator
benötigt. Weder meinen SSH-Schlüssel exfiltrieren noch meinen
Schlüsselbund klauen verschafft allein Zugriff; man muss schon
beides tun.
Bis auf die Verwendung von ED25519 statt ECDSA bewegt sich das alles
in der Funktionalität des ursprünglichen, kompakten U2F-Standards.
FIDO2 ist gehörig angeschwollen, nachdem man ein ordentliches Komitee
mit mehr Google-Mitarbeitern und Microsoft gegründet hat. OpenSSH
unterstützt ein paar der hinzugekommenen Features, aber obiges Setup
erfüllt seinen Zweck mit minimaler Konfiguration.
Und noch ein wichtiger Hinweis: Der eigentliche private FIDO-Schlüssel
verlässt den Authenticator nie. Er lässt sich damit nicht duplizieren.
Da der Authenticator verloren oder kaputt gehen kann, hat man
sinnvollerweise einen zweiten Authenticator, mit dem man ein zweites
SSH-Schlüsselpaar erzeugt und den öffentlichen Teil auch in alle
~/.ssh/authorized_keys verteilt. Danach kann man diesen Backup-
Authenticator in den Safe legen.
--
Christian "naddy" Weisgerber ***@mips.inka.de