KLUCZ S

S/KEY to system haseł jednorazowych opracowany do uwierzytelniania w systemach operacyjnych typu Unix , zwłaszcza z głupich terminali lub niezaufanych komputerów publicznych, na których nie chce się wpisywać długoterminowego hasła. Prawdziwe hasło użytkownika jest łączone w urządzeniu offline z krótkim zestawem znaków i malejącym licznikiem w celu utworzenia hasła jednorazowego użytku. Ponieważ każde hasło jest używane tylko raz, są one bezużyteczne dla snifferów haseł .

Ponieważ krótki zestaw znaków nie zmienia się, dopóki licznik nie osiągnie zera, możliwe jest sporządzenie listy haseł jednorazowych, w kolejności, które może nosić użytkownik. Alternatywnie, użytkownik może przedstawić lokalnemu kalkulatorowi hasło, znaki i żądaną wartość licznika w celu wygenerowania odpowiedniego hasła jednorazowego, które następnie może zostać przesłane przez sieć w postaci jawnej. Ta ostatnia forma jest bardziej powszechna i praktycznie sprowadza się do uwierzytelniania typu wyzwanie-odpowiedź .

S/KEY jest obsługiwany w systemach Linux (poprzez podłączane moduły uwierzytelniające ), OpenBSD , NetBSD i FreeBSD , a ogólna implementacja typu open source może być wykorzystana w innych systemach. OpenSSH implementuje również S/KEY od wersji OpenSSH 1.2.2 wydanej 1 grudnia 1999 r. Jedna wspólna implementacja nazywa się OPIE . S/KEY jest znakiem towarowym firmy Telcordia Technologies , wcześniej znanej jako Bell Communications Research (Bellcore).

S/KEY jest czasami nazywany schematem Lamporta , od nazwiska jego autora, Lesliego Lamporta . Został opracowany przez Neila Hallera, Phila Karna i Johna Waldena w Bellcore pod koniec lat 80. Wraz z wygaśnięciem podstawowych patentów na kryptografię z kluczem publicznym i powszechnym użyciem laptopów z SSH i innymi protokołami kryptograficznymi, które mogą zabezpieczyć całą sesję, a nie tylko hasło, S/KEY wychodzi z użycia. [ potrzebne źródło ] Schematy, które implementują Uwierzytelnianie dwuskładnikowe , dla porównania, jest coraz częściej używane.

Generowanie hasła

Serwer to komputer, który przeprowadzi uwierzytelnianie .

Generowanie hasła S/KEY
  1. Ten krok zaczyna się od tajnego klucza W . Ta tajemnica może być dostarczona przez użytkownika lub wygenerowana przez komputer. Tak czy inaczej, jeśli ten sekret zostanie ujawniony, bezpieczeństwo S/KEY jest zagrożone.
  2. Kryptograficzna funkcja haszująca H jest stosowana n razy do W , tworząc w ten sposób łańcuch mieszający składający się z n haseł jednorazowych. Hasła są wynikiem zastosowania kryptograficznej funkcji haszującej:
    H ( W ), H ( H ( W )), ..., H n ( W ).
  3. Początkowy sekret W jest odrzucany.
  4. Użytkownik otrzymuje n haseł, wydrukowanych w odwrotnej kolejności:
    H n ( W ), H n −1 ( W ), ..., H ( H ( W )), H ( W ).
  5. Hasła H ( W ), H ( H ( W )), ..., H n −1 ( W ) są usuwane z serwera. Na serwerze przechowywane jest tylko hasło H n ( W ), znajdujące się na górze listy użytkowników.

Uwierzytelnianie

Uwierzytelnianie S/KEY

Po wygenerowaniu hasła użytkownik ma kartkę z n hasłami. Jeśli n jest bardzo duże, przechowywanie wszystkich n haseł lub obliczanie hasła z H ( W ) staje się nieefektywne. Istnieją metody efektywnego obliczania haseł w wymaganej kolejności, i przechowywanie hasła.

Bardziej idealnie, choć być może rzadziej w praktyce, użytkownik może nosić przy sobie małe, przenośne, bezpieczne, niepołączone z siecią urządzenie komputerowe zdolne do regeneracji dowolnego potrzebnego hasła, biorąc pod uwagę tajne hasło, sól i liczbę iteracji wymaganego skrótu , z których dwa ostatnie są dogodnie dostarczane przez serwer żądający uwierzytelnienia przy logowaniu.

W każdym przypadku pierwsze hasło będzie tym samym hasłem, które zostało zapisane na serwerze. To pierwsze hasło nie będzie używane do uwierzytelniania (użytkownik powinien zdrapać to hasło na kartce papieru), zamiast niego zostanie użyte drugie:

  • Użytkownik przekazuje serwerowi drugie hasło pwd z listy i drapie to hasło.
  • Serwer próbuje obliczyć H ( pwd ), gdzie pwd to podane hasło. Jeśli H ( pwd ) wygeneruje pierwsze hasło (to, które przechowywał serwer), uwierzytelnienie zakończy się pomyślnie. Serwer zapisze pwd jako bieżące odniesienie.

Przy kolejnych uwierzytelnieniach użytkownik poda hasło tj . (Ostatnie hasło na wydrukowanej liście, hasło n , jest pierwszym hasłem wygenerowanym przez serwer, H ( W ), gdzie W jest początkowym sekretem). Serwer obliczy H ( hasło i ) i porówna wynik z hasłem i −1 , które jest przechowywane jako odniesienie na serwerze.

Bezpieczeństwo

Bezpieczeństwo S/KEY opiera się na trudności odwrócenia kryptograficznych funkcji skrótu . Załóżmy, że atakującemu udaje się zdobyć hasło, które zostało użyte do pomyślnego uwierzytelnienia. Załóżmy, że jest to hasło i , to hasło jest już bezużyteczne do kolejnych uwierzytelnień, ponieważ każde hasło może być użyte tylko raz. Interesujące dla atakującego byłoby znalezienie hasła i −1 , ponieważ to hasło będzie używane do następnego uwierzytelnienia.

Wymagałoby to jednak odwrócenia funkcji skrótu, która wygenerowała hasło i −1 , przy użyciu hasła i ( H ( hasło i −1 ) = hasło i ), co jest niezwykle trudne do wykonania w przypadku obecnych kryptograficznych funkcji skrótu .

Niemniej jednak S/KEY jest podatny na atak człowieka w środku, jeśli jest używany samodzielnie. Jest również podatny na pewne wyścigi , na przykład gdy oprogramowanie atakującego podsłuchuje sieć, aby poznać pierwsze N -1 znaków w haśle (gdzie N oznacza długość hasła), ustanawia własną sesję TCP z serwerem i w szybkim następstwo próbuje wszystkich poprawnych znaków na N -tej pozycji, aż jeden się powiedzie. Tego typu luk w zabezpieczeniach można uniknąć, stosując ssh , SSL , SPKM lub inną zaszyfrowaną warstwę transportową.

Ponieważ każda iteracja S/KEY nie zawiera soli ani liczby, możliwe jest bezpośrednie znalezienie kolizji bez łamania początkowego hasła. Ma to złożoność 2 64 , którą można wstępnie obliczyć przy tej samej ilości miejsca. Złożoność przestrzeni można zoptymalizować, przechowując łańcuchy wartości, chociaż kolizje mogą zmniejszyć zasięg tej metody, zwłaszcza w przypadku długich łańcuchów.

Ktoś, kto ma dostęp do bazy danych S/KEY, może złamać je wszystkie równolegle ze złożonością 2 64 . Chociaż nie uzyskaliby oryginalnego hasła, byliby w stanie znaleźć prawidłowe dane uwierzytelniające dla każdego użytkownika. Pod tym względem jest to podobne do przechowywania niesolonych 64-bitowych skrótów silnych, unikalnych haseł.

Protokół S/KEY może zapętlać się. Gdyby taka pętla została utworzona w łańcuchu S/KEY, osoba atakująca mogłaby użyć klucza użytkownika bez znalezienia oryginalnej wartości i być może bez poinformowania prawidłowego użytkownika. Patologicznym przypadkiem tego byłoby OTP, które haszuje do siebie.

Użyteczność

Wewnętrznie S/KEY używa liczb 64-bitowych . Dla użyteczności dla ludzi , każda liczba jest odwzorowywana na sześć krótkich słów, z jednego do czterech znaków każde, z publicznie dostępnego słownika zawierającego 2048 słów. Na przykład jedna liczba 64-bitowa jest odwzorowywana na „ROY HURT SKI FAIL GRIM KNEE”.

Zobacz też

Linki zewnętrzne