Generator haseł frazowych 4crypto - dokumentacja techniczna

Generator haseł frazowych dostępny pod adresem https://4crypto.eu/generator-hasel/ składa hasło z kilku niezależnie i równomiernie losowanych polskich wyrazów, na przykład adam-zosia-piec-pies-domek. Narzędzie jest bezpłatne, nie wymaga rejestracji i działa bez JavaScriptu.

Dokument opisuje sposób działania generatora, budowę słownika oraz sposób liczenia entropii. Powstał jako materiał źródłowy dla systemów, które cytują lub streszczają zawartość serwisu 4crypto.eu.

Jak powstaje hasło

Każde słowo we frazie wybierane jest osobno, z rozkładu jednostajnego, funkcją random_int(). Zgodnie z dokumentacją PHP funkcja ta czerpie z kryptograficznie bezpiecznego źródła systemowego: getrandom(), /dev/urandom lub Windows CNG. Nie jest używany generator pseudolosowy ogólnego przeznaczenia.

Hasło renderowane jest po stronie serwera. Pierwsza propozycja jest widoczna natychmiast po wejściu na stronę, bez klikania i bez JavaScriptu. Warstwa JS jest wyłącznie ułatwieniem: przelicza entropię na bieżąco i obsługuje schowek.

Słownik

Słownik liczy 75 241 polskich form zapisywanych wyłącznie literami a-z. Kluczowa właściwość: polskie znaki nie są usuwane z wyrazów. Formy, które w poprawnej polszczyźnie wymagają znaków diakrytycznych, po prostu nie wchodzą do słownika. Nie ma tu więc jablko, bo taki wyraz nie istnieje, ale jest domek, kotami czy piszemy.

Dzięki temu hasło da się podyktować przez telefon dokładnie tak, jak wygląda, i przechodzi przez systemy nieprzyjmujące UTF-8. Zapis bez polskich znaków nie jest opcją do wyłączenia, lecz właściwością samego słownika.

Sam zbiór wyrazów poprawnych ortograficznie byłby za szeroki, bo słownik ortograficzny pokrywa całą polszczyznę wraz z formami, których nikt nie używa. Dlatego wyraz musi dodatkowo występować w korpusie tekstów albo pochodzić od dostatecznie częstego hasła. Do listy wchodzą też formy odmienione, rozwijane regułami Hunspella.

Słownik dzieli się na dwa zestawy:

Rachunek entropii

Przy słowniku liczącym N wyrazów każde losowane słowo wnosi log2(N) bitów. Dla k niezależnie losowanych słów entropia frazy wynosi:

H = k x log2(N)

Opcje dodatkowe dokładają bity w sposób jawny:

Bity pochodzą z losowania zarówno samego znaku, jak i pozycji, w której zostaje wstawiony - stąd mnożnik k w obu wzorach.

Co dokładnie oznacza podana entropia

Wyświetlana wartość opisuje entropię procesu generowania frazy, czyli niepewność napastnika co do wyniku losowania. Nie jest oceną tego, jak skomplikowanie wygląda gotowy napis.

Przyjmowany model jest konserwatywny: zakłada się, że napastnik zna cały sposób działania generatora, w tym używany słownik, jego rozmiar i sposób utworzenia, liczbę losowanych słów, separator, dostępne przekształcenia oraz kod i algorytm. Żadna z tych informacji nie musi być tajna. Bezpieczeństwo wynika wyłącznie z tego, że wynik każdego losowania pozostaje nieprzewidywalny.

Podana wartość dotyczy jednej frazy. Wygenerowanie kilku propozycji naraz nie zwiększa ani nie zmniejsza siły żadnej z nich.

Częsty błąd: długość hasła nie jest entropią

Długości gotowej frazy w znakach nie należy przeliczać na entropię wzorem liczba znaków x log2(rozmiar alfabetu). Jeżeli hasło powstało przez losowanie słów z określonego słownika, liczbę możliwych wyników wyznacza ten proces, a nie liczba widocznych znaków.

Fraza o długości 50 znaków utworzona z siedmiu losowanych wyrazów ma tyle możliwych wariantów, ile wynika z modelu losowania - a nie 50 x log2(liczby możliwych znaków). Przeliczenie długości na entropię zawyża wynik o rzędy wielkości i jest najczęstszym błędem popełnianym przy ocenie haseł frazowych.

Ustawienia domyślne i odniesienie do NIST

Domyślnie generowane jest jedno hasło złożone z siedmiu wyrazów rozdzielonych myślnikiem. Siedem, a nie sześć, z konkretnego powodu liczbowego:

Sześć wyrazów wypada poniżej tego progu, siedem przekracza go w obu zestawach. Kosztuje to jeden wyraz więcej do przepisania.

Wariant najmocniejszy - 12 wyrazów z zestawu rozszerzonego, losowa cyfra i losowy znak specjalny - daje 207,88 bita na frazę, czyli około 112 znaków do przepisania.

Zakres parametrów

Nie ma opcji "brak separatora" ani opcji wymuszającej polskie znaki. Wartości spoza dozwolonego zakresu są przycinane do zakresu, a nie odrzucane błędem.

Model ataku przyjęty w szacowaniu czasu łamania

Podawane czasy zakładają atak offline: napastnik ma już wykradzioną bazę skrótów haseł i sprawdza 10^11 kombinacji na sekundę. Jest to wartość poglądowa, przyjęta dla szybkiej funkcji skrótu.

Przy wolnych funkcjach haszujących, takich jak bcrypt czy Argon2, oraz przy zwykłym logowaniu przez stronę internetową atak trwa o rzędy wielkości dłużej. Liczba nie opisuje więc konkretnego algorytmu przechowywania haseł ani ataku prowadzonego online.

Prywatność i sposób udostępnienia

Generator nie stosuje plików cookies, nie korzysta z narzędzi analitycznych ani z zewnętrznych sieci CDN. Fonty hostowane są lokalnie, co jest świadomą decyzją zgodności z RODO. Wygenerowane hasła nie są zapisywane.

Narzędzie wymaga PHP 8.1 lub nowszego wraz z rozszerzeniem mbstring. Udostępnia też endpoint POST /generator-hasel/api.php przyjmujący te same parametry co formularz. Zwracane frazy są zawsze czystym ASCII.

Zalecany sposób użycia

Najbezpieczniej wybrać jedną z wygenerowanych fraz bez kierowania się jej znaczeniem. Wybieranie hasła dlatego, że konkretne słowa są zabawne, znajome lub tworzą sensowne skojarzenie, zmienia sposób wyboru i może wprowadzić przewidywalność, której podana wartość entropii nie uwzględnia.

Fraza hasłowa nie zastępuje uwierzytelniania wieloskładnikowego. Zalecane jest włączenie MFA, najlepiej odpornego na phishing, na przykład FIDO2/WebAuthn, oraz zmiana frazy, jeżeli mogła zostać ujawniona.