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:
- Zestaw krótszy - 40 163 wyrazy o długości 4-8 znaków, średnio 6,6 znaku, 15,2936 bita na wyraz. Łatwiejszy do podyktowania i przepisania.
- Zestaw rozszerzony - 75 241 wyrazów o długości 4-12 znaków, średnio 8,26 znaku, 16,1992 bita na wyraz.
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:
-
Losowa cyfra dopisana do jednego losowo wybranego słowa:
log2(10 x k)bitów. -
Losowy znak specjalny ze zbioru ośmiu znaków
!@#$%&*?, również dopisany do losowo wybranego słowa:log2(8 x k)bitów.
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 z zestawu krótszego daje 91,76 bita,
- siedem wyrazów z zestawu krótszego daje 107,06 bita,
- dla odniesienia: 15 losowych znaków ASCII to 98,55 bita - próg, jaki NIST SP 800-63B stawia hasłu używanemu jako samodzielny czynnik.
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
- Liczba wyrazów: od 3 do 12, domyślnie 7.
- Liczba propozycji naraz: od 1 do 10, domyślnie 1.
- Separator: myślnik, kropka, podkreślenie, plus, ukośnik lub spacja. Separator wybiera się identyfikatorem, nie znakiem, więc do generatora nigdy nie trafia dowolny ciąg od klienta.
- Zestaw słownika: krótszy lub rozszerzony.
- Opcje: wielka litera, losowa cyfra, losowy znak specjalny.
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.