W jaki sposób uwierzytelnianie skrótów różni się od uwierzytelniania podstawowego innym niż wysyłanie poświadczeń jako zwykły tekst?Co to jest uwierzytelnianie skrótów?
Odpowiedz
Główną różnicą jest to, że nie wymaga wysyłania nazwę użytkownika i hasło w poprzek przewodu w postaci zwykłego tekstu. Jest także odporny na powtórne ataki, ponieważ używa jednorazowego numeru z serwera.
Serwer podaje klientowi jednorazowy numer (jednorazowy), który łączy się z nazwą użytkownika, dziedziną, hasłem i żądaniem URI. Klient uruchamia wszystkie te pola za pomocą metody mieszania MD5 w celu utworzenia klucza mieszającego.
Wysyła ten klucz mieszający do serwera wraz z nazwą użytkownika i obszarem, aby podjąć próbę uwierzytelnienia.
Strona po stronie serwera ta sama metoda służy do generowania skrótu, tylko zamiast używać hasła wpisanego w przeglądarce serwer wyszukuje oczekiwane hasło dla użytkownika z jego bazy danych użytkownika. Wyszukuje przechowywane hasło dla tej nazwy użytkownika, uruchamia ten sam algorytm i porównuje go z tym, co wysłał klient. Jeśli pasują, to dostęp zostaje przyznany, w przeciwnym razie może wysłać 401 Nieautoryzowane (bez logowania lub nieudanego logowania) lub 403 Forbidden (odmowa dostępu).
Autoryzacja szyfrowana to standardized in RFC2617. Jest nice overview of it on Wikipedia:
Można myśleć o tym tak:
- Client sprawia prośba
- klient wróci do nonce z serwera i żądania uwierzytelnienia 401
- Klient wysyła następującą odpowiedź array (nazwa użytkownika, dziedzina, generate_md5_key (nonce, username, realm, URI, password_given_by_user_to_browser)) (tak, to jest bardzo uproszczone)
- Serwer pobiera nazwę użytkownika i dziedzinę (plus zna identyfikator URI, którego żąda klient) i jest to loo Podaj hasło do tej nazwy użytkownika. Potem idzie i robi własną wersję generate_md5_key (nonce, username, realm, URI, password_I_have_for_this_user_in_my_db)
- Porównuje wyjście generate_md5(), które otrzymało z tym, który wysłał klient, jeśli pasuje do klienta wysłanego poprawnie hasło. Jeśli nie pasują, hasło wysłane było błędne.
Niezłe wyjaśnienie. Czy nazwa użytkownika i pwd są przeznaczone dla użytkownika systemu Windows? Skąd pochodzą? – SoftwareGeek
Są to, co użytkownik wpisze w przeglądarce. Hasło musi pasować do tego, co serwer zapisał dla hasła dla tego użytkownika. Najprawdopodobniej jest to coś konkretnego dla tej aplikacji internetowej, a nie hasła do systemu Windows. To bardzo zależy od sposobu, w jaki aplikacja internetowa jest tworzona. –
Ta odpowiedź ma 6 lat, ale wydaje mi się, że wszystkie systemy obsługujące zabezpieczenia przechowują hasła w formacie solonego hasha. Nie ma i nie powinno być żadnej metody uzyskania oryginalnego hasła z bazy danych uniemożliwiającego autoryzację digest. –
Hash poświadczeń jest wysyłany przez przewód.
HA1 = MD5(username:realm:password)
od klienta do serwera?Czy mógłbyś podać kroki do interakcji? Artykuł w Wikipedii jest dobry, ale potrzebuję lepszego wyjaśnienia lub przykładu. – SoftwareGeek
Tak, klient generuje wartość skrótu i wysyła ją na serwer. Artykuł w Wikipedii szczegółowo opisuje protokół. Sugeruję, abyś to odwołał, by uzyskać więcej informacji. –
Jedynym sposobem na uzyskanie wartości mieszania HA1 poświadczeń jest znajomość hasła. Serwer zna HA1, ale nie hasło, które je wygenerowało. Jeśli HA1 był znany atakującemu, mógł dostać się do systemu. Więc nie jest wysyłany drutem. Kolejny hash oparty na nonce itp. Jest wykonywany przed zrobieniem tego, a to musi zgadzać się z podobnymi obliczeniami wykonanymi na serwerze. Tak więc, dopóki serwer utrzymuje HA1 prywatny system jest bezpieczny.
To jest wyjaśnienie dla uwierzytelniania Digest, gdzie hasło nie jest wysyłane w postaci zwykłego tekstu (co ma miejsce w przypadku Basic Auth) –
Doskonałe wyjaśnienie przez @Gumbo tutaj: http://stackoverflow.com/a/5288679/591487 – inorganik
Coś, czego NIGDY nie powinno się używać. Nie chroni hasła podczas przesyłania i wymaga, aby serwer przechowywał hasła w trybie zwykłym. – CodesInChaos
Funkcja Digest zapewnia lepsze zabezpieczenia podczas tranzytu niż uwierzytelnianie podstawowe dla ruchu _unencrypted_, ale jest słaba. DUŻO bezpieczniej jest używać uwierzytelniania podstawowego w połączeniu z SSL/TLS, ponieważ w ten sposób można również przechowywać hasła na serwerze zaszyfrowanym. – rustyx