I OpenSSH-kodebasen eksperimentel support for to-faktor autentificering ved brug af enheder, der understøtter protokollen , udviklet af alliancen . U2F muliggør oprettelse af omkostningseffektive hardware tokens til bekræftelse af brugerens fysiske tilstedeværelse, hvor interaktionen sker via USB, Bluetooth eller NFC. Sådanne enheder markedsføres som et middel til to-faktor autentificering på websteder, understøttes allerede af de fleste webbrowsere og produceres af forskellige producenter, herunder Yubico, Feitian, Thetis og Kensington.
For at interagere med enheder, der bekræfter brugerens tilstedeværelse, er der tilføjet en ny nøgletype "sk-ecdsa-sha2-nistp256@openssh.com" ("ecdsa-sk") i OpenSSH, som anvender ECDSA (Elliptic Curve Digital Signature Algorithm) med NIST P-256 elliptisk kurve og SHA-256 hash. Interaktionsprocedurerne med tokens er blevet flyttet til et mellemlag, der indlæses på samme måde som biblioteket til support af PKCS#11 og er en indpakning omkring biblioteket , der giver midler til kommunikation med tokens over USB (understøtter FIDO U2F/CTAP 1 og FIDO 2.0/CTAP 2 protokoller). Det mellemlag, der er forberedt af udviklerne af OpenSSH, er indarbejdet i hovedbiblioteket libfido2, ligesom HID-driveren For at aktivere U2F kan du bruge den seneste version af kodebasen fra
OpenSSH og HEAD-grenen af biblioteket , som allerede indeholder det nødvendige lag til OpenSSH. Libfido2 understøtter drift på OpenBSD, Linux, macOS og Windows.
For autentificering og generering af nøglen skal miljøvariablen SSH_SK_PROVIDER sættes, hvori stien til libsk-libfido2.so angives (export SSH_SK_PROVIDER=/path/to/libsk-libfido2.so), eller biblioteket kan defineres via SecurityKeyProvider-opsætning, hvorefter "ssh-keygen -t ecdsa-sk" skal køres, eller hvis nøglerne allerede er oprettet og konfigureret, skal der oprettes forbindelse til serveren ved hjælp af "ssh". Når ssh-keygen køres, gemmes det oprettede nøglepar i "~/.ssh/id_ecdsa_sk" og kan bruges som andre nøgler.
For authentication and key generation, you need to set the environment variable SSH_SK_PROVIDER, specifying the path to libsk-libfido2.so (export SSH_SK_PROVIDER=/path/to/libsk-libfido2.so), or define the library through the SecurityKeyProvider setting. After that, run "ssh-keygen -t ecdsa-sk" or, if the keys are already created and configured, connect to the server using "ssh". When you run ssh-keygen, the created key pair will be saved in "~/.ssh/id_ecdsa_sk" and can be used similarly to other keys.
Den åbne nøgle (id_ecdsa_sk.pub) skal kopieres til serveren i filen authorized_keys. På serversiden verificeres kun den digitale underskrift, mens interaktionen med tokens foregår på klientsiden (det er ikke nødvendigt at installere libsk-libfido2 på serveren, men serveren skal understøtte nøgletypen "ecdsa-sk"). Den genererede hemmelige nøgle (id_ecdsa_sk) fungerer i bund og grund som en descriptor for nøglen, der danner den reelle nøgle kun i kombination med den hemmelige sekvens, der opbevares på U2F-tokenet.
Hvis nøglen id_ecdsa_sk falder i hænderne på en angriber, kræver det også adgang til den hardware-token for at kunne autentificere sig, da den gemte hemmelige nøgle i filen id_ecdsa_sk er værdiløs uden dette. Desuden kræves der som standard en lokal bekræftelse af fysisk tilstedeværelse fra brugeren ved enhver operation med nøgler (både ved generering og autentificering), fx ved at blive bedt om at røre ved sensoren på tokenet, hvilket gør det sværere at udføre fjernangreb på systemer med tilsluttet token. Som et yderligere sikkerhedsniveau kan der ved opstart af ssh-keygen også angives en kode til adgang til filen med nøglen.
U2F-nøglen kan tilføjes til ssh-agent gennem "ssh-add ~/.ssh/id_ecdsa_sk", men ssh-agent skal være bygget med understøttelse af "ecdsa-sk" nøgler, der skal være en libsk-libfido2 lag til stede, og agenten skal køre på systemet, hvor tokenet tilsluttes.
Den nye nøgletype "ecdsa-sk" er tilføjet, da OpenSSH's format af ecdsa-nøgler adskiller sig fra U2F-formatet for digitale ECDSA-underskrifter ved at have ekstra felter.
Kilde: opennet.ru
