Do bazy kodu OpenSSH
Aby móc wchodzić w interakcję z urządzeniami potwierdzającymi obecność użytkownika, do OpenSSH dodano nowy typ kluczy „[email chroniony]” („ecdsa-sk”), który wykorzystuje algorytm podpisu cyfrowego ECDSA (Elliptic Curve Digital Signature Algorithm) z krzywą eliptyczną NIST P-256 i skrótem SHA-256. Procedury interakcji z tokenami umieszczone są w bibliotece pośredniej, która ładowana jest w podobny sposób jak biblioteka obsługująca PKCS#11 i stanowi opakowanie na bibliotekę
Aby włączyć U2F, możesz użyć świeżego fragmentu bazy kodu z
Libfido2 obsługuje OpenBSD, Linux, macOS i Windows.
Aby uwierzytelnić i wygenerować klucz, należy ustawić zmienną środowiskową SSH_SK_PROVIDER, wskazując w niej ścieżkę do libsk-libfido2.so (eksport SSH_SK_PROVIDER=/path/to/libsk-libfido2.so) lub zdefiniować bibliotekę poprzez SecurityKeyProvider ustawienie, a następnie uruchom „ssh-keygen -t ecdsa-sk” lub, jeśli klucze zostały już utworzone i skonfigurowane, połącz się z serwerem za pomocą „ssh”. Po uruchomieniu ssh-keygen wygenerowana para kluczy zostanie zapisana w „~/.ssh/id_ecdsa_sk” i będzie można jej używać podobnie jak innych kluczy.
Klucz publiczny (id_ecdsa_sk.pub) należy skopiować na serwer w pliku autoryzowane_klucze. Po stronie serwera weryfikowany jest tylko podpis cyfrowy, a po stronie klienta odbywa się interakcja z tokenami (nie musisz instalować na serwerze libsk-libfido2, ale serwer musi obsługiwać typ klucza „ecdsa-sk”) . Wygenerowany klucz prywatny (id_ecdsa_sk) jest w istocie uchwytem klucza, tworzącym prawdziwy klucz tylko w połączeniu z tajną sekwencją przechowywaną po stronie tokena U2F.
Jeżeli klucz id_ecdsa_sk wpadnie w ręce atakującego, aby przejść uwierzytelnienie będzie on musiał uzyskać dostęp także do tokena sprzętowego, bez którego klucz prywatny zapisany w pliku id_ecdsa_sk będzie bezużyteczny. Ponadto domyślnie przy wykonywaniu jakichkolwiek operacji na kluczach (zarówno podczas generowania, jak i podczas uwierzytelniania) wymagane jest lokalne potwierdzenie fizycznej obecności użytkownika, np. proponowane jest dotknięcie czujnika na tokenie, co utrudnia przeprowadzać zdalne ataki na systemy z podłączonym tokenem. Jako kolejną linię obrony można również określić hasło podczas fazy uruchamiania ssh-keygen, aby uzyskać dostęp do pliku klucza.
Klucz U2F można dodać do ssh-agent poprzez „ssh-add ~/.ssh/id_ecdsa_sk”, ale ssh-agent musi być zbudowany z obsługą kluczy „ecdsa-sk”, warstwa libsk-libfido2 musi być obecna i agent musi działać w systemie, do którego podłączony jest token.
Dodano nowy typ klucza „ecdsa-sk”, ponieważ format kluczy OpenSSH ecdsa różni się od formatu U2F dla podpisów cyfrowych ECDSA w obecności dodatkowych pól.
Źródło: opennet.ru