Narzędzie do tworzenia haseł Powrót do generatora

Poradnik bezpieczeństwa

Dlaczego Math.random nie jest bezpieczne dla haseł

Dowiedz się, dlaczego Math.random nadaje się do efektów UI, ale nie do haseł, kodów resetujących, tokenów ani innych wrażliwych sekretów.

Podsumowanie

Math.random() to ogólna pseudolosowa funkcja JavaScript. Jest przydatna do animacji, losowego zachowania UI, przykładów, gier i symulacji. Nie jest przeznaczona do celów kryptograficznych i nie powinna być używana do generowania haseł, kodów resetujących, sekretów API, kluczy podpisu ani tokenów odzyskiwania.

Problem

Generator haseł potrzebuje nieprzewidywalności wobec atakującego, a nie tylko wartości, które wydają się zróżnicowane dla użytkownika. Math.random() nie zapewnia gwarancji bezpieczeństwa kryptograficznego na poziomie przeglądarki, a implementacje mogą się różnić między silnikami.

Bezpieczniejsza opcja w przeglądarce

Nowoczesne przeglądarki udostępniają crypto.getRandomValues() poprzez Web Crypto API. PwdGen używa tego interfejsu oraz próbkowania z odrzucaniem, co zapobiega tendencyjnemu wyborowi znaków. Jeśli to API jest niedostępne, bezpiecznym zachowaniem jest zatrzymanie generowania i wyjaśnienie wymogu zgodności.

Jak sprawdzić generator

Przeszukaj źródło w poszukiwaniu Math.random. Poważny generator haseł nie powinien go używać do znaków hasła. Może pojawić się w dokumentacji wyjaśniającej, dlaczego jest niebezpieczny, ale nie w ścieżce generowania.

Szczegółowe wskazówki

Ten przewodnik koncentruje się na tym, dlaczego Math.random jest nieodpowiednie dla haseł i sekretów. Jest napisany dla programistów, studentów i użytkowników narzędzi sprawdzających, czy generator używa bezpiecznej losowości, więc praktycznym celem nie jest tworzenie dramatycznego twierdzenia o bezpieczeństwie. Celem jest wybór nawyku dotyczącego haseł, który przetrwa codzienne użytkowanie: formularze logowania, menedżery haseł, klawiatury mobilne, odzyskiwanie konta, współdzielone urządzenia i okazjonalne usługi z dziwnymi regułami walidacji. Bezpieczne zalecenie jest użyteczne tylko wtedy, gdy prawdziwa osoba może go konsekwentnie przestrzegać.

Najbezpieczniejszym punktem wyjścia jest losowość plus unikalność. Losowość oznacza, że wartość jest wybierana z dużej przestrzeni przez kryptograficznie odpowiednie źródło losowe, a nie wymyślona z daty urodzenia, imienia zwierzaka, wzoru klawiatury czy ulubionego cytatu. Unikalność oznacza, że to samo hasło nie jest używane nigdzie indziej. Hasło długie, ale używane wielokrotnie, może szybko zawieść po jednym niezwiązanym naruszeniu, podczas gdy unikalne losowe hasło ogranicza szkody do jednego konta, na którym zostało użyte.

W tym temacie praktycznym ustawieniem jest crypto.getRandomValues z próbkowaniem z odrzucaniem zamiast Math.random. Możesz zastosować to ustawienie, korzystając z przewodnika Web Crypto API, a następnie przechować końcową wartość w zaufanym menedżerze haseł. PwdGen generuje wartości lokalnie w przeglądarce za pomocą Web Crypto; wygenerowane hasło nie jest wysyłane na serwer PwdGen. Ta lokalna konstrukcja zmniejsza ekspozycję po stronie serwera, ale nie chroni przed każdym zagrożeniem. Złośliwe rozszerzenie przeglądarki, zainfekowane urządzenie, strona phishingowa lub niebezpieczne zarządzanie schowkiem mogą nadal ujawnić sekret po jego wygenerowaniu.

Najczęstsze problemy, których należy unikać, to przewidywalne pseudolosowe sekwencje, tendencyjność modulo, niestandardowe funkcje losowe i kod demonstracyjny skopiowany do produkcji. Te problemy mają znaczenie, ponieważ atakujący rzadko muszą brute-force’ować każde możliwe hasło, gdy ludzkie nawyki dają im skrót. Wypełnianie poświadczeń, phishing, wyciekłe listy haseł i nadużycia odzyskiwania konta są często bardziej realistyczne niż czyste matematyczne wyszukiwanie. Dlatego najlepsze porady łączą jakość hasła z kontrolami na poziomie konta, takimi jak MFA, klucze dostępu, przechowywanie kodów odzyskiwania i regularny przegląd ustawień e-maila lub telefonu do odzyskiwania.

Skorzystaj z tej listy kontrolnej podczas stosowania zalecenia:

Jeśli strona internetowa odrzuca idealne ustawienie, nie zmuszaj hasła do słabszego wzorca ręcznie. Dostosuj jedną zmienną na raz. Jeśli symbole są odrzucane, pozostaw włączone wielkie litery, małe litery i cyfry oraz zwiększ długość. Jeśli maksymalna długość jest niska, użyj największej akceptowanej długości i upewnij się, że wartość jest unikalna. Jeśli hasło musi być odczytane na głos, wydrukowane lub wpisane na ekranie telewizora lub routera, rozważ wykluczenie mylących znaków i zwiększenie długości, aby zrekompensować mniejszy alfabet.

Na koniec pamiętaj o granicach porad dotyczących haseł. Silne hasło to jedna warstwa obrony, a nie gwarancja. Nie może sprawić, że strona phishingowa będzie bezpieczna, naprawić złośliwego oprogramowania ani zrekompensować usługi, która źle przechowuje poświadczenia. Użyteczny nawyk jest nudny, ale trwały: wygeneruj unikalną wartość, przechowuj ją bezpiecznie, chroń ścieżkę odzyskiwania i szybko ją wymień, jeśli podejrzewasz ujawnienie.

Bezpieczny następny krok

Po przeczytaniu tego przewodnika wykonaj jeden mały audyt konta zamiast próbować naprawić wszystko naraz. Wybierz konto, które spowodowałoby najwięcej problemów, gdyby zostało przejęte, potwierdź, że jego hasło jest unikalne, i sprawdź e-mail do odzyskiwania, telefon do odzyskiwania, metodę MFA i przechowywanie kodów zapasowych. Jeśli jakakolwiek część tego łańcucha jest słaba, popraw tę część przed przejściem do kont o niższym ryzyku. Ta kolejność utrzymuje pracę w zarządzalnych ramach i chroni konta, które atakujący najprawdopodobniej wykorzystają jako odskocznię. Dlaczego math.random nie jest bezpieczne dla haseł? Najlepszym rezultatem jest powtarzalny nawyk: generuj lokalnie, przechowuj ostrożnie i unikaj ponownego użycia.

Często zadawane pytania

Czy Math.random jest kiedykolwiek w porządku?

Tak, do efektów wizualnych, symulacji i zwykłej losowości UI, ale nie do poświadczeń ani tokenów bezpieczeństwa.

Czego zamiast tego powinny używać generatory haseł?

Powinny używać kryptograficznego źródła losowego, takiego jak crypto.getRandomValues() w przeglądarce.

Czy PwdGen używa Math.random jako rozwiązania zastępczego?

Nie. Jeśli Web Crypto jest niedostępne, PwdGen wyświetla ostrzeżenie o zgodności i nie generuje haseł za pomocą Math.random().

Źródła