SRP: protokół bezpiecznego zdalnego hasła
Poznają Państwo, jak SRP umożliwia wzajemne uwierzytelnianie klienta i serwera bez przechowywania haseł na serwerze.
SRP: protokół bezpiecznego zdalnego hasła to bezpłatna lekcja Cryptology Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cryptology Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cryptology Academy zawiera 4 lekcji w sumie.
Przegląd i historia SRP
Protokół Secure Remote Password (SRP) został opracowany przez Toma Wu na Uniwersytecie Stanforda i opublikowany jako RFC 2945 w 2000 roku; później zdefiniowano jego ulepszoną wersję SRP-6a. SRP umożliwia uwierzytelnianie wzajemne na podstawie wspólnego hasła bez przesyłania samego hasła, nawet w postaci zaszyfrowanej.
Serwer przechowuje weryfikator, a nie hasło
Podczas rejestracji w SRP klient oblicza weryfikator hasła v = g^x mod N, gdzie x = H(salt || password), a N jest dużą bezpieczną liczbą pierwszą. Serwer przechowuje wyłącznie sól i weryfikator v. Nawet jeśli baza danych serwera zostanie przejęta, przechowywany weryfikator nie ujawnia bezpośrednio hasła.
Generowanie klucza sesji SRP
Podczas logowania w SRP klient i serwer przeprowadzają wymianę podobną do Diffiego-Hellmana, która generuje wspólny klucz sesji. Obliczenia po obu stronach uwzględniają wartość wyprowadzoną z hasła, dlatego wynikowy klucz sesji może zostać poprawnie obliczony wyłącznie przez kogoś, kto zna odpowiednio hasło i weryfikator.
Uwierzytelnianie wzajemne w SRP
SRP zapewnia uwierzytelnianie wzajemne: klient udowadnia znajomość hasła, a serwer udowadnia, że posiada prawidłowy weryfikator. Zapobiega to atakom phishingowym, w których fałszywy serwer próbuje zebrać informacje o haśle, ponieważ fałszywy serwer nie może poprawnie zakończyć wymiany SRP bez prawdziwego weryfikatora.
Obliczanie weryfikatora
Weryfikator oblicza się jako v = g^x mod N, gdzie x = H(salt || password), g jest generatorem, a N jest bezpieczną liczbą pierwszą o długości 2048 bitów lub większej. Problem logarytmu dyskretnego sprawia, że odzyskanie x na podstawie v jest obliczeniowo niewykonalne. Hasło można zweryfikować wyłącznie poprzez pomyślne przeprowadzenie pełnej wymiany SRP.
Ulepszenia w SRP-6a
SRP-6a eliminuje słabości pierwotnych projektów SRP-3 i SRP-6, wprowadzając parametr mnożnika k = H(N, g) oraz zmieniając kolejność obliczeń po stronie klienta i serwera. Zmiany te zapobiegają niektórym atakom zgadywania typu dwa za jednym razem i zapewniają, że udział serwera zostaje wcześnie powiązany z protokołem.
SRP w systemach produkcyjnych
SRP znalazł szerokie zastosowanie w rzeczywistych systemach. Firma Apple używa SRP do synchronizacji iCloud Keychain, aby umożliwić urządzeniom pobieranie danych pęku kluczy bez ujawniania hasła do konta serwerom Apple. 1Password korzystało z SRP w swoim modelu uwierzytelniania, aby zapobiegać ujawnieniu danych uwierzytelniających po stronie serwera.
SRP zapobiega phishingowi
Ponieważ SRP generuje klucz sesji wiążący zarówno hasło, jak i weryfikator serwera, serwer phishingowy nie może poprawnie zakończyć uzgadniania SRP. Użytkownik łączący się z witryną phishingową przez SRP nie przejdzie uwierzytelniania, co zapewnia wbudowaną właściwość chroniącą przed phishingiem, nieobecną w tradycyjnym przesyłaniu haseł.
Ograniczenia SRP
SRP jest kosztowny obliczeniowo i wymaga potęgowania modularnego na dużych liczbach całkowitych (co najmniej 2048-bitowych). Jego poprawna implementacja jest złożona, a wiele subtelnych problemów związanych z walidacją parametrów doprowadziło do powstania podatnych implementacji. Protokół wymaga również bezpiecznego kanału (TLS), aby zapobiec pasywnemu podsłuchiwaniu samej wymiany.
Zestawy szyfrów TLS-SRP
RFC 5054 definiuje zestawy szyfrów TLS-SRP, które integrują uwierzytelnianie wzajemne SRP bezpośrednio z uzgadnianiem TLS. Eliminuje to potrzebę używania certyfikatów serwera, a jednocześnie zapewnia szyfrowane uwierzytelnianie wzajemne. TLS-SRP zyskał jednak w praktyce niewielką popularność, ponieważ pojawiły się nowocześniejsze alternatywy, takie jak FIDO2 i OPAQUE.
SRP a nowoczesne alternatywy
Choć SRP był przełomowym rozwiązaniem, nowoczesne alternatywy, takie jak OPAQUE, zapewniają silniejsze gwarancje bezpieczeństwa (odporność na wstępne obliczenia), a FIDO2/passkeys całkowicie eliminują hasła. W nowych systemach preferowane są OPAQUE lub FIDO2, ale SRP nadal jest prawidłowym wyborem dla systemów wymagających uwierzytelniania wzajemnego za pomocą hasła bez podatności na phishing.
Sprawdzenie weryfikatora SRP
Co w protokole SRP serwer przechowuje zamiast hasła użytkownika?
Podsumowanie lekcji: uwierzytelnianie SRP
SRP przechowuje weryfikator hasła, a nie hasło, generuje wspólny klucz sesji za pomocą wymiany podobnej do DH i zapewnia odporne na phishing uwierzytelnianie wzajemne. SRP-6a zwiększa odporność pierwotnego projektu na ataki zgadywania. Pęk kluczy iCloud firmy Apple oraz 1Password używają SRP w systemach produkcyjnych. OPAQUE i FIDO2 to nowocześni następcy SRP przeznaczeni do nowych systemów.
Często zadawane pytania
Czy lekcja „SRP: protokół bezpiecznego zdalnego hasła” jest bezpłatna?
Tak — pełny tekst „SRP: protokół bezpiecznego zdalnego hasła” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cryptology Academy, przejdź na CoddyKit PRO. Kurs Cryptology Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „SRP: protokół bezpiecznego zdalnego hasła”?
Poznają Państwo, jak SRP umożliwia wzajemne uwierzytelnianie klienta i serwera bez przechowywania haseł na serwerze. Ćwiczysz Cryptology Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Cryptology Academy?
Nie wymagamy żadnego doświadczenia. Cryptology Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „SRP: protokół bezpiecznego zdalnego hasła”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Cryptology Academy?
Tak. Każda lekcja Cryptology Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Podstawowy problem uwierzytelniania hasłem
- SRP: protokół bezpiecznego zdalnego hasła
- Protokoły PAKE i ich właściwości
- Uwierzytelnianie bez haseł: WebAuthn i FIDO2