Secure Remote Password

Z testwiki
Przejdź do nawigacji Przejdź do wyszukiwania

Szablon:J – protokół umożliwiający bezpieczne uwierzytelnienie jednej ze stron w drugim systemie, który ma kilka zalet w porównaniu do konwencjonalnych technik uwierzytelniania przy pomocy haseł:

  • Hasło nie jest przesyłane w jawnej postaci
  • Hasło nie jest przechowywane na serwerze w jawnej postaci
  • Nie jest możliwe odtworzenie haseł, ani powtórne logowanie przy pomocy danych przechwyconych z podsłuchiwanej komunikacji (nawet odszyfrowanej)
  • Jeśli klient zna prawidłowe hasło, a serwer odpowiednie dane, po przeprowadzeniu protokołu obie strony będą miały kryptograficznie silny klucz który można użyć np. do szyfrowania dalszej części ruchu
  • Nie jest możliwe podszywanie się pod dowolną ze stron w dowolnym momencie działania protokołu.

Algorytm bazuje na obliczeniowej trudności problemu logarytmu dyskretnego w ciałach skończonych. Jest on podobny w swej idei do protokołu Diffiego-Hellmana. Algorytm został opracowany na Uniwersytecie Standforda, między innymi przez Tom Wu. Pierwsze wersje protokołu pojawiły się w połowie lat 90, a we wrześniu roku 2000 opublikowano dokument Szablon:Odn oraz Szablon:Odn opisujące abstrakcyjny protokół oraz rozszerzenie protokołu Telnet używające go. Ulepszona wersja protokołu (SRP-6 oraz SRP-6a), umożliwiająca wymianę również pewnych dodatkowych stałych oraz zmniejszająca ilość komunikatów, została opublikowana w roku 2002. W listopadzie roku 2007 w dokumencie Szablon:Odn opublikowano standard mechanizmu autoryzacji oparty na SRP-6 w protokole TLS. Przygotowywany dokument IEEE P1363.2 APKAS-SRP3 oraz SRP6 ma zajmować się standaryzacją protokołu.

Podobnie jak w standardowych mechanizmach autoryzacji przy pomocy hasła, na serwerze nie jest przechowywane hasło, a jedynie pewne wartości z niej wywiedzione. W porównaniu do szyfrowania opartego na certyfikatach, protokół SRP nie wymaga kosztownych certyfikatów w celu nawiązania bezpiecznej szyfrowanej komunikacji niezbędnej przy przesyłaniu jawnych haseł.

Poniżej przedstawiono kroki protokołu SRP-6a. Litera H oznacza poniżej kryptograficznie silną funkcję skrótu, taką jak SHA1. Symbol | oznacza konkatenację.

Przygotowanie

Pierwszy etap to przygotowanie odpowiednich wpisów na serwerze, jest to jedyny krok który wymaga jawnych haseł i powinien być wykonany w bezpieczny sposób (np. poprzez certyfikowany i zaszyfrowany kanał lub lokalnie bez użycia sieci komputerowej).

Wybierane, ustalane lub losowane:

Obie wartości (zwane łącznie jako parametry grupy) są jawne.

Liczby te:

  • są losowane, sprawdzane czy spełniają powyższe warunki i umieszczane w bazie,
  • albo wybierane z wcześniej sprawdzonych par o odpowiedniej długości. Jest to możliwość zwykle bezpieczniejsza, ponieważ klient w pierwszej fazie protokołu dostanie powyższe liczby, a sprawdzenie czy spełniają one rzeczywiście wymienione właściwości może być zbyt złożone obliczeniowo aby przeprowadzać za każdym razem. Ich niespełnienie umożliwia łatwiejszy atak na protokół. W Szablon:Odn znajdują się tabele zaufanych par o długościach od 1024 do 8192 bitów.

Następnie algorytm losuje:

  • s – dowolną dużą wartość, jest to wartość jawna, tzw. sól

Z tak wylosowanych danych, oraz nazwy użytkownika Szablon:Mvar oraz jego hasła Szablon:Mvar, są obliczane następujące wartości:

Następnie piątka (Szablon:Mvar, Szablon:Mvar (Szablon:Mvar, Szablon:Mvar), Szablon:Mvar) jest zapisywana w bazie danych (jeśli Szablon:Mvar i Szablon:Mvar są ustalone można je pominąć). Wartość Szablon:Mvar oraz Szablon:Mvar jest niszczona. Z tak przygotowanych danych nie da się łatwo odzyskać wartości Szablon:Mvar, z powodu:

  • z wartości Szablon:Mvar nie da się odtworzyć wartości Szablon:Mvar, ponieważ problem logarytmu dyskretnego wydaje się być trudny obliczeniowo

W przypadku gdyby było to możliwe (odtworzenie Szablon:Mvar), co prawda nadal nie jest możliwe odtworzenie Szablon:Mvar (funkcja Szablon:Mvar jest jednokierunkowa), ale znajomość Szablon:Mvar jest wystarczająca do złamania protokołu.

Dodatkowo w bazie można zapisać wartość

  • k=H(N|g)

jednak nie jest to konieczne, ponieważ można ją obliczyć w samym protokole, czyni się to czasami z powodów wydajności.

Sam protokół bazuje na tych wartościach, i jest przedstawiony w dwóch wersjach poniżej (w zależności, czy Szablon:Mvar i Szablon:Mvar są ustalone czy zmienne).

Protokół SRP-6a

Faza 1

1. Klient wysyła do serwera nazwę użytkownika Szablon:Mvar

2. Serwer sprawdza, czy nazwa użytkownika jest prawidłowa. Serwer:

Faza 2

3. Klient upewnia się, że Szablon:Mvar oraz Szablon:Mvar są bezpieczne. Klient:

  • upewnia się, że Szablon:Mvar \mod Szablon:Mvar jest różne od zera,
  • oblicza k=H(N|g),
  • oblicza x=H(s|H(I|:|P)),
  • oblicza v=gxmodN,
  • losuje dużą (co najmniej 256 bitów) liczbę Szablon:Mvar (klucz prywatny klienta)
  • oblicza A=gamodN (klucz publiczny klienta)
  • oblicza u=H(A|B)
  • oblicza S=(Bkgx)(a+ux)modN=(Bkv)(a+ux)modN
  • oblicza M1=H(A|B|S)
  • wysyła Szablon:Mvar oraz Szablon:Mvar do serwera.

4. Serwer z otrzymanych wartości Szablon:Mvar oraz Szablon:Mvar:

  • upewnia się, że Szablon:Mvar \mod Szablon:Mvar jest różne od zera,
  • oblicza u=H(A|B),
  • oblicza S=(Avu)bmodN,
  • oblicza własne M1=H(A|B|S) i porównuje zgodność z przesłanym. Jeśli Szablon:Mvar się nie zgadza oznacza to, że klient nie został uwierzytelniony i następuje zakończenie protokołu.
  • następnie oblicza M2=H(A|M1|S),
  • oblicza tajny klucz sesji K=H(S),
  • odsyła Szablon:Mvar do klienta.

Faza 3

5. Klient:

  • oblicza własne M2=H(A|M1|S) i porównuje zgodność z przesłanym
  • oblicza tajne K=H(S),

W tym miejscu obie strony posiadają wspólny silny klucz, który można użyć do szyfrowania ruchu. Klient nie znający hasła, lub serwer nie posiadający Szablon:Mvar nie są w stanie ich obliczyć.

W dalszej kolejności powinno się udowodnić poprawność kluczy:

6. Klient oblicza M=H((H(N)xorH(g))|H(I)|s|A|B|K) i wysyła na serwer.

7. Serwer oblicza swoje Szablon:Mvar i porównuje poprawność. Następnie oblicza Szablon:Mvar = Szablon:Mvar(Szablon:Mvar|Szablon:Mvar|Szablon:Mvar) i odsyła do klienta.

8. Klient oblicza swoje Szablon:Mvar i sprawdza poprawność.

Modyfikacje

Algorytm posiada liczne modyfikacje, na przykład w trakcie obliczania Szablon:Mvar oraz Szablon:Mvar można użyć funkcji HMAC w której Szablon:Mvar jest kluczem zamiast zwykłej funkcji mieszającej.

Implementacje

Istnieją referencyjne implementacje protokołu SRP zaimplementowane przez autorów protokołu. Cisco (będące współautorem Szablon:Odn) oferuje produkty obsługujące SRP.

Jedną z niewielu bibliotek obsługujących rozszerzenia SRP protokołu TLS jest biblioteka GnuTLS[1]. Starszą wersję protokołu implementuje TLS Lite[2].

Wśród przeglądarek internetowych obsługę tego protokołu będzie wspierać prawdopodobnie Firefox 3.5[3]. Dodatkowo wśród nielicznych implementacji istnieje klient FTP IglooFTP Pro 3.9[4] oraz przeglądarka SupraBrowser[5]. GNU SSH implementuje SRP[6], oraz Kermit[7]. Istnieją również patche dla OpenSSH[8] oraz różne testowe implementacje w różnych językach programowania takich jak PHP czy JavaScript[9].

Zobacz też

Przypisy

Szablon:Przypisy

Linki zewnętrzne