Najmocniejsze losowe hasło ma jedną wadę praktyczną: nie da się go zapamiętać. Ciąg w stylu wn3RZ70=L^j{k~ME jest świetny dla menedżera haseł, ale beznadziejny, gdy musisz wpisać go z głowy - na nowym laptopie, na konsoli serwera albo przy odblokowywaniu samego menedżera. I tu wchodzi metoda, która godzi siłę z pamięcią ludzką: Diceware - hasło złożone z kilku losowych słów.
Fraza kotwica-deszcz-mostek-pralka-bocian-gniew wygląda jak żart przy haśle pełnym znaków specjalnych. A jednak, jeśli te słowa zostały wylosowane uczciwie, jest matematycznie mocniejsza niż większość haseł, które ludzie wymyślają sami. W tym artykule pokażę, dlaczego to działa, skąd bierze się jej entropia i jak wygenerować taką frazę w naszym generatorze haseł - po polsku albo po angielsku.
Czym właściwie jest Diceware
Metodę opracował Arnold Reinhold w 1995 roku i jest genialna w swojej prostocie. Bierzesz listę 7776 słów, gdzie każde ma przypisany pięciocyfrowy kod złożony z cyfr od 1 do 6. Skąd akurat 7776? To 6 do potęgi 5 - czyli liczba wyników pięciu rzutów zwykłą sześcienną kostką.
Rzucasz kostką pięć razy, odczytujesz na przykład 4-2-6-1-3 i znajdujesz odpowiadające temu słowo na liście. Powtarzasz to dla każdego słowa we frazie - typowo sześć lub siedem razy - i sklejasz wynik. Cała tajność hasła leży w fizycznej losowości rzutów, a nie w sprycie wymyślania.
Kluczowa intuicja: Diceware nie każe Ci być kreatywnym. Wręcz przeciwnie - odbiera Ci wybór i oddaje go kostce, bo człowiek jest fatalnym generatorem losowości.
Matematyka, czyli dlaczego to naprawdę jest mocne
Siłę hasła mierzymy w bitach entropii - czyli logarytmem dwójkowym z liczby wszystkich możliwych wariantów. Dla Diceware liczy się to wyjątkowo czysto, bo każde słowo jest wybierane niezależnie i z jednakowym prawdopodobieństwem z listy o znanej wielkości.
Jedno słowo z listy 7776 elementów to dokładnie log2(7776) ≈ 12,9 bita. Nie szacunek, nie heurystyka - twarda wartość. Entropia całej frazy to po prostu liczba słów pomnożona przez tę wartość:
4 słowa -> 4 × 12,9 ≈ 51,7 bita
5 słów -> 5 × 12,9 ≈ 64,6 bita
6 słów -> 6 × 12,9 ≈ 77,5 bita (rekomendacja EFF)
7 słów -> 7 × 12,9 ≈ 90,4 bita
8 słów -> 8 × 12,9 ≈ 103,4 bita
Dla porównania: szesnastoznakowe hasło ze wszystkich klas znaków (małe, wielkie, cyfry, symbole - około 92 znaki) ma około 104 bitów. Sześciowyrazowa fraza Diceware (77 bitów) jest więc trochę słabsza od takiego molocha, ale nieporównanie mocniejsza od haseł, które ludzie realnie wybierają - typowe „wymyślone" hasło ma efektywnie 25-40 bitów, bo opiera się na słowniku, dacie i przewidywalnym wzorcu.
Co oznacza 77 bitów w praktyce? Atakujący musiałby przejść średnio przez 2^76 prób. Nawet farma licząca bilion haseł na sekundę potrzebowałaby na to setek tysięcy lat. A wszystko to przy haśle, które wystukasz z pamięci.
Tajność jest w rzutach, nie w liście słów
Najczęstsze nieporozumienie: „skoro lista słów jest publiczna, to przecież atakujący ją zna". Owszem zna - i to nic nie zmienia. To jest dokładnie zasada Kerckhoffsa z kryptografii: bezpieczeństwo nie może opierać się na tajności metody, tylko na tajności klucza. Tutaj kluczem są Twoje rzuty kostką.
Atakujący znający listę i wiedzący, że masz frazę sześciowyrazową, wciąż stoi przed 7776^6 kombinacjami. Publiczna lista nie pomaga mu ani trochę, bo nie wie, które słowa wypadły. Dlatego listy Diceware są jawne i dobrze udokumentowane - lepsze są te dopracowane (krótkie słowa, brak mylących par, duży dystans edycyjny) niż tajne.
Kostka czy crypto - i kiedy to ma znaczenie
Oryginalny Diceware używa fizycznej kostki nie bez powodu. Chodzi o weryfikowalną losowość niezależną od komputera. Jeśli generujesz hasło główne do menedżera albo klucz, który ma chronić naprawdę poważne rzeczy, fizyczna kostka eliminuje ryzyko, że generator liczb na maszynie jest podstawiony albo źle zainicjowany.
Dla codziennego użytku w przeglądarce ten poziom paranoi nie jest konieczny - pod warunkiem, że narzędzie używa kryptograficznego generatora. Nasz generator losuje słowa przez crypto.getRandomValues(), czyli CSPRNG wbudowany w przeglądarkę, a nie przez Math.random(), który do haseł nie nadaje się nigdy. Dodatkowo stosujemy odrzucanie nadmiaru (rejection sampling), żeby nie wprowadzić tak zwanego modulo-bias - drobnego przekłamania, przez które niektóre słowa wypadałyby częściej.
Reguła kciuka: do rzeczy, które musisz wykuć na pamięć - hasło główne, szyfrowanie dysku - rozważ fizyczną kostkę. Do wszystkiego innego CSPRNG w dobrym narzędziu jest w zupełności wystarczający.
Polski czy angielski - czy język robi różnicę
To jest najczęstsze pytanie i odpowiedź jest pięknie matematyczna: język nie ma znaczenia, liczy się tylko wielkość listy. Entropia zawsze wynosi liczba_słów × log2(N), gdzie N to liczba słów na liście.
W naszym generatorze masz dwie listy do wyboru. Polska liczy 3887 słów (log2 ≈ 11,9 bita na słowo), angielska EFF 7775 słów (log2 ≈ 12,9 bita na słowo). Polskie słowa są krótsze i bez ogonków, więc łatwiej je wpisać i zapamiętać, ale dają minimalnie mniej entropii na słowo. Różnicę nadrabiasz dosłownie jednym słowem więcej: siedem polskich słów (≈ 83 bity) bije sześć angielskich (≈ 77 bitów).
To zresztą najlepsza ilustracja całej zasady - dwie różne listy, ten sam wzór, a generator liczy entropię na żywo z faktycznej wielkości listy. Nie ma magii w angielskim, nie ma magii w polskim. Jest tylko logarytm z liczby słów.
Jak wygenerować frazę w naszym generatorze
W generatorze haseł obok klasycznego przycisku znajdziesz tryb frazy:
- Wybierz język listy - Polski albo English.
- Ustaw suwakiem liczbę słów. Domyślne sześć to dobry punkt startowy; do rzeczy poważnych ustaw siedem lub osiem.
- Kliknij Generuj metodą Diceware. Fraza pojawi się w polu, a obok zobaczysz uczciwą entropię liczoną jako liczba słów razy log2 listy - nie z liczby znaków.
Wszystko dzieje się lokalnie w przeglądarce - żadne hasło ani fraza nie są nigdzie wysyłane. Możesz też wpisać własną frazę w to samo pole, a narzędzie oszacuje jej siłę.
Czego nie robić
Diceware jest odporne tylko wtedy, gdy nie zepsujesz go „poprawkami":
- Nie wybieraj słów samodzielnie. Gdy człowiek „losuje" słowa z głowy, wpada w skojarzenia i przewidywalne ciągi - cała entropia znika.
- Nie skracaj listy. Mniejsza lista to mniej bitów na słowo. Jeśli odrzucisz słowa, które Ci się nie podobają, osłabiasz hasło.
- Nie dorabiaj przewidywalnych ozdobników. Doklejanie
123!na końcu daje pozory siły, ale crackery sprawdzają takie wzorce w pierwszej kolejności. Lepiej dołożyć jeszcze jedno losowe słowo. - Nie używaj jednej frazy wszędzie. Nawet najmocniejsza fraza staje się bezużyteczna, gdy serwis ją wyciekł. Świeże hasło sprawdzisz w naszej sprawdzarce wycieków.
Gdzie Diceware sprawdza się najlepiej
Passphrase nie zastępuje menedżera haseł - uzupełnia go. Idealne zastosowanie to te kilka haseł, które naprawdę musisz pamiętać: hasło główne do menedżera, hasło do szyfrowania dysku, login do komputera, klucz do kopii zapasowych. Do setek pozostałych kont używaj długich, w pełni losowych haseł znakowych z menedżera - ich i tak nie wpisujesz ręcznie.
Diceware to pomost między dwoma światami: twardą entropią, którą rozumie matematyk, a ludzką pamięcią, która lubi obrazy i słowa. Sześć losowych słów mieści się w głowie znacznie łatwiej niż szesnaście losowych znaków - a chroni równie skutecznie. Jeśli chcesz zobaczyć obie metody obok siebie, otwórz nasz generator haseł i porównaj entropię frazy z entropią klasycznego hasła.
Listy słów użyte w generatorze: polska lista Diceware autorstwa MaciekTalaska (licencja MIT) oraz angielska EFF Large Wordlist (Electronic Frontier Foundation, licencja CC BY 3.0 US).