Hasła nie należy przechowywać w postaci zwykłego tekstu z oczywistych względów bezpieczeństwa: musisz przechowywać skróty, a także należy ostrożnie generować skrót, aby uniknąć ataków na tęczową tablicę.
Zwykle jednak wymagane jest przechowywanie ostatnich n haseł i wymuszanie minimalnej złożoności i minimalnej zmiany między różnymi hasłami (aby uniemożliwić użytkownikowi korzystanie z sekwencji takiej jak Hasło_1, Hasło_2, ..., Hasło_ n ). Byłoby to trywialne w przypadku haseł tekstowych, ale jak możesz to zrobić, przechowując tylko skróty?
Innymi słowy: jak można wdrożyć bezpieczny mechanizm historii haseł?
Odpowiedzi:
Przechowuj skróty i weryfikuj wprowadzone hasło względem przechowywanych skrótów, w ten sam sposób, w jaki weryfikujesz hasło podczas logowania. Aby wygenerować „minimalne” zmiany, musisz wygenerować „alternatywne” hasło z podanego na podstawie wzorców numerycznych.
Przy logowaniu weryfikujesz już wprowadzone hasło w haszu, nie ma potrzeby przechowywania hasła w postaci zwykłego tekstu. Ta sama sztuczka działa, jeśli chodzi o zmianę hasła, wystarczy sprawdzić wprowadzone hasła i wygenerowane hasła „minimalnej zmiany” względem historycznych skrótów. Jeśli nowe hasło jest zadowalające, przenieś bieżący skrót hasła do zestawu historycznego i zastąp go nowym skrótem dla nowego hasła.
źródło
Gdy użytkownik zmieni swoje hasło, poproś go o podanie poprzedniego hasła. Masz teraz dostęp do dwóch haseł zwykłego tekstu, nawet jeśli nie przechowujesz haseł zwykłego tekstu w bazie danych.
Wykonaj dowolną weryfikację tych dwóch haseł. Nie zapobiegnie to naprzemiennemu korzystaniu przez użytkownika z dwóch haseł (z sufiksem - możesz zapobiec bezpośredniej naprzemienności według sugestii w innych odpowiedziach), ale zapobiegnie to bardziej rażącym przypadkom.
źródło
potatoSalad1
i chcą je zaktualizowaćpotatoSalad2
, oznacza to, że zmiana jest zbyt mała, ponieważ w tym momencie masz oba hasła w postaci zwykłego tekstu. Ale dalej: masz tylko skróty, a natura skrótów polega na tym, że nie możesz stwierdzić, czy dwa skróty miały podobny lub zupełnie inny zwykły tekst jako dane wejściowe.aby dodać do odpowiedzi @ martijnPieter, minimalną zmianę można wprowadzić, wykonując krótką brutalną siłę w oparciu o nowe i poprzednie hasła (które oboje macie dostępne)
na przykład możesz iterować po wszystkich hasłach o odległości hamowania 1 lub 2 od nowego hasła i sprawdzić, czy pasuje do starego hasła
ale możesz zauważyć, że może to zmniejszyć zaufanie użytkowników do haszowania haseł (ponieważ zasadniczo mówisz, że możesz odzyskać poprzednie hasło, aby odrzucić nowe hasło)
źródło
To naprawdę bardziej dodatek do sprytnej odpowiedzi @ Briana. Czapki z głów również dla @Martijn Pieters za dodanie szczegółowych informacji o tym, jak brutalnie wymusić stare hasła w oparciu o bieżące, oraz dla maniaka @ratchet dla „dystansu hamującego”. Nie usuwam mojej odpowiedzi, ponieważ uważam, że stanowi ona ciekawe tło do tworzenia kopii zapasowych.
Najnowocześniejsze przechowywanie haseł wymaga użycia wielu rund silnego jednokierunkowego skrótu kryptograficznego (SHA-512 +) z unikalną solą (128 bitów +) dla każdego użytkownika. Ale nie kusz się, aby przechowywać dodatkowe informacje o każdym haśle. Im więcej informacji o każdym haśle będziesz przechowywać, tym bardziej podważasz bezpieczeństwo swojego algorytmu mieszającego.
Przykład
Zastanów się, jak łatwo można wymusić hasło, jeśli wiesz, że:
Klawiatura amerykańska ma 95 znaków do wydrukowania, więc znajomość hasła o długości 7 znaków daje 95 ^ 7 = 69 883 729 610 000 = permutacje 7x10 ^ 13. Gdyby było naprawdę losowe, złamanie tego na pojedynczym procesorze 3Ghz zająłoby rok. Ale:
Tak (poprawione dzięki @Hellion):
To 50 000 razy łatwiejsze do złamania! Przechowywanie dobrych informacji w celu uniknięcia podobnych haseł w tym przypadku zabrało Ci złamanie 7-znakowego hasła z roku do kilku godzin. Dekodowanie wszystkich haseł na potężnym komputerze wieloprocesorowym z dobrą kartą wideo i odrobiną cierpliwości jest teraz bardzo wykonalne. Mam nadzieję, że ten prosty przykład pokazuje, że im bardziej sensownie możesz porównać podobne hasła, tym mniej bezpieczne będzie twoje haszowanie.
Znaczenie silnego mieszania
Bazy danych z hasłami są regularnie kradzione, z niesamowitymi włamaniami do wiadomości co miesiąc. Heck, w zeszłym miesiącu stan SC stracił numery ubezpieczenia społecznego wszystkich - ups! Ile jeszcze tych naruszeń jest objętych ochroną?
Myśl końcowa
Najbardziej przerażające jest dla mnie to, że ludzie wybierają to samo lub podobne hasło do wielu witryn, aby włamanie się do jednego umożliwiło atakującemu dostęp do nich wszystkich. Chciałbym zobaczyć sprawdzoną metodę zapobiegania tej sytuacji, choć uważam, że zapobieganie najczęstszym złym hasłom pomógłoby bardziej niż zapobieganie ponownemu użyciu przez użytkownika złego hasła w tej samej witrynie. Najlepsze, co mogę zasugerować, to ogólna polityka firmy dotycząca korzystania z bezpiecznego menedżera haseł, który generuje losowe hasła dla każdego z użytkowników i przechowuje je bezpiecznie.
źródło
Po pierwsze, możesz przechowywać skróty dla ostatnich „n” poprzednich haseł, abyś mógł sprawdzić, czy ich nowe hasło powiela poprzednie hasło. Masz również zwykły tekst aktualnego hasła (ponieważ zalogowali się lub podali Ci je w celu uwierzytelnienia żądania zmiany hasła), a także nowe hasło, dzięki czemu możesz sprawdzić minimalne zmiany między tymi dwoma hasłami.
Jeśli (dla Ciebie) bardzo ważne jest bezpośrednie porównanie tych dwóch haseł z poprzednimi hasłami „n”, musisz je zapisać (zaszyfrowane), aby móc je później odzyskać.
Chociaż może to być postrzegane jako luka w zabezpieczeniach, można zaimplementować metody szyfrowania w celu zapewnienia wystarczającego bezpieczeństwa.
Następnie za każdym razem, gdy hasło zostanie zmienione, możesz odszyfrować wszystkie stare hasła i wykonać wszystkie testy minimalnej zmiany.
Teraz, jeśli ktoś zna hasło tej osoby i zna wszystkie pozostałe niezbędne szczegóły, może odszyfrować te informacje dla tej jednej osoby. Ale jeśli mają już hasło tej osoby, mogą już zalogować się jako ta osoba i uzyskać dostęp do konta tej osoby.
Ponadto w przypadku starych haseł może nie być konieczne przechowywanie ich w czystym tekście. Można je przechowywać w jakiś zaciemniony sposób. Lub przechowywane jako alfabetyczna lista znaków w haśle.
Nie twierdzę, że jest to zalecana rzecz do zrobienia w ogólnym przypadku, ale zakładając, że zadanie, które opisałeś, jest wymagane w twoim przypadku, jest to jeden ze sposobów na wykonanie tego z pewnymi środkami bezpieczeństwa.
źródło