Napisałem mały serwer internetowy, który obecnie używa podstawowego uwierzytelnienia przez ssl. Jak dotąd wszystko działa świetnie. Teraz chcę (trzeba) przełączyć się na auth. Ale nie mogę wymyślić, jak to zrobić z hasłami, które nie są przechowywane w bazie danych jako tekst jawny? Mam tylko skrót hasła (wygenerowany przy użyciu bcrypt) przechowywanych haseł moich użytkowników. Czy w ogóle możliwe jest automatyczne trawienie http?Zaszyfrowane hasło w bazie danych i wyciągu z przeglądarki Auth
Odpowiedz
Właśnie się nad tym zastanawiałem. Najpierw przeczytałem RFC 2617 - HTTP Authentication: Basic and Digest Access Authentication, aby uzyskać wgląd w specyfikację i zobaczyć, jak można ją zaadaptować do uwierzytelniania API REST.
Zrobiłeś to samo, co Ty - Czy uwierzytelnianie trawienne oznacza, że serwer musi przechowywać hasło użytkownika w postaci zwykłego tekstu?
This przepełnienie stosu odpowiedź jasno: nr Serwer nie przechowywać tekstu jawnego hasła - it should store the hash of (username|realm|password)
.
Byłoby dobrze, z wyjątkiem jednej rzeczy - kanoniczna specyfikacja obsługuje tylko używanie MD5 jako funkcji skrótu.
Oczywiście można przechowywać zarówno hash bcrypt i hash MD5 ale robi tak tylko zagraża bezpieczeństwu hash bcrypt skutecznie czyniąc go bezużytecznym (ponieważ atakujący może przesunąć swoje wysiłki na brute zmusza hash MD5 zamiast).
Więc zrobiła krok do tyłu i pomyślałem, dlaczego nie lekceważyć spec i używać bcrypt na obu stronach jako funkcji mieszającej (bcrypt(username|realm|password)
)?
Cóż, oprócz celowego powolnego, bcrypt has a maximum password length który makes it unsuitable for use as a general digest algorithm.
Uff, moja głowa już płynęła, ale wciąż myślałem, że jeszcze raz. Niektóre z sugestii dotyczyły używania TLS z SRP lub uwierzytelnionego szyfrowania, w szczególności EAX, ale czułem, że być może robili to o krok za daleko, aby uzyskać prostą usługę sieciową.
Mówiąc prościej, jeśli naprawdę chcesz to zrobić, możesz work around bcrypt's character limitation by using a preliminary hash.
Krótko mówiąc wydaje się, że można zrobić:
bcrypt(sha256(username|realm|password))
i używać zamiast H(A1)
w bastardized wersji spec.
Nasuwa się teraz pytanie - czy naprawdę warto było dodać tę złożoność? Czy otrzymaliśmy dodatkową warstwę zabezpieczeń w porównaniu z podstawowym uwierzytelnieniem przez HTTPS?
- 1. Dlaczego miałbyś chcieć przechowywać w bazie danych hasło w postaci zwykłego tekstu lub zaszyfrowane (nie hashed)?
- 2. sprawdź nazwę użytkownika i hasło w bazie danych (dołączono scenariusz)
- 3. Utwórz użytkownika w bazie danych po Firebase Auth (Android)
- 4. Jak przechowywać hasło jako zaszyfrowane w pliku właściwości na wiosnę
- 5. Curl - Wykrzyknik w User Auth/hasło
- 6. Wyklucz nazwę użytkownika lub hasło z UserChangeForm w Django Auth
- 7. Mam zaszyfrowane hasło md5, jak przekazać hasło użytkownikowi, gdy używa "Nie pamiętasz hasła"?
- 8. Parse string z bash i numerem wyciągu
- 9. Tłumaczenia i Symfony2 w bazie danych
- 10. commitLog i SSTables w bazie danych Cassandra
- 11. Migracja schematu DB w wyciągu
- 12. tekst wyciągu z pdf w JavaScript
- 13. Integracja z Flyway w produkcyjnej bazie danych
- 14. Zaszyfrowane pola i wyszukiwanie pełnotekstowe, najlepsze podejście?
- 15. Sesja Check CakePHP istnieje w bazie danych
- 16. Przewidywanie brakujących wartości danych w bazie danych
- 17. Html w mojej bazie danych!
- 18. RStudio: Zapisywanie danych z przeglądarki
- 19. Android istnieje() w bazie danych?
- 20. Zachowaj ustawienia w bazie danych
- 21. Przechowywanie pozwoleń na aplikacje w bazie danych
- 22. Kwerendy hibernacji w bazie danych
- 23. Niestandardowe hasło administratora admina Magento
- 24. MySQL typ danych w bazie
- 25. Hasło hashujące Laravel i Meteor
- 26. Zwiększanie licznika w bazie danych
- 27. ember-simple-auth Aktualizacja i resetowanie hasła
- 28. Przechowuj certyfikat X509 w bazie danych
- 29. Zend sesji i Zend auth
- 30. Wstawianie rekordów zbioru danych w bazie danych
Długo po wydarzeniu wiem, ale fantastyczne wyjaśnienie - generalnie unikam komentarzy "dziękuję" za kierownicą, ale to naprawdę pomogło mi zrozumieć ograniczenia trawienia auth :) – ChrisV