Pytania
Wszystko, co wcześniej zaśmiecało stronę generatora.
Losowe słowa czy zdanie?
Losowe słowa dają najwięcej entropii na słowo — każde to niezależne losowanie z 5707 możliwości, czyli 12,5 bita. Kosztem jest pamięć: cztery niepowiązane rzeczy to cztery rzeczy do zapamiętania.
Zdanie ma mniejsze pule w poszczególnych miejscach (przymiotników jest 926, czasowników 332), więc na słowo wypada mniej bitów. Ale zapamiętujesz jeden obrazek zamiast listy, więc bez trudu uniesiesz hasło dłuższe — a to długość decyduje o entropii.
Pięciosłowne zdanie daje 61,6 bita i bije cztery losowe słowa (58,2), będąc przy tym wyraźnie łatwiejszym do zapamiętania. Sześciosłowne zdanie (70,2) dorównuje pięciu losowym słowom (71,4).
Jak zbudowane jest zdanie?
Konstrukcja jest stała:
przymiotnik — rzeczownik — [przysłówek] — czasownik — [przymiotnik] — rzeczownik
zielony — kot — szybko — pije — zimne — mleko
Podmiot stoi w mianowniku, dopełnienie w bierniku, a przymiotniki przyjmują rodzaj swojego rzeczownika. Uzgodnienie nie kosztuje ani bita entropii — przymiotnik jest losowany z pełnej listy i dopiero potem odmieniany, więc pula rzeczowników zostaje pełna.
Skąd biorą się słowa?
Słownik ma 5707 słów — formy podstawowe rzeczowników i przymiotników, zbudowane z dwóch publicznych źródeł:
- PoliMorf 2.1 (licencja BSD) — słownik morfologiczny, z niego brane są formy podstawowe oraz odmiana potrzebna w trybie zdania;
- hermitdave/FrequencyWords (OpenSubtitles 2018, licencja MIT) — lista frekwencyjna, dzięki której zostają tylko słowa z pierwszej 50 tys. najczęstszych.
Do tego długość 4–9 znaków, same małe litery polskiego alfabetu i odfiltrowane wulgaryzmy. Całość odtwarza jeden skrypt w repozytorium, więc listy nie trzeba przyjmować na wiarę.
Po co wersja bez ogonków?
Bo polskie litery bywają kłopotliwe tam, gdzie hasło trzeba wpisać poza systemem: w BIOS-ie, na konsoli serwera, na obcej klawiaturze.
Obie wersje powstają z tej samej listy, więc entropia prawie się nie zmienia —
kilkanaście słów zlewa się po usunięciu ogonków z innymi (np. sąd →
sad), co kosztuje jakieś 0,004 bita na słowo.
Co dokładnie robią cyfra i wielka litera?
Cyfra dokleja się losowo na początku albo na końcu jednego z wylosowanych słów. Daje log₂(10) bita za samą wartość plus log₂(2 × liczba słów) za miejsce, w którym stanęła.
Wielka litera trafia na początek losowo wybranego słowa i dodaje log₂(liczba słów) — tajne jest to, które słowo ją dostało, a nie sam fakt, że któreś dostało.
Wielka litera nakładana jest przed cyfrą, żeby cyfra doklejona z przodu jej nie
zasłoniła: wychodzi 7Kot, a nie 7kot.
Czym jest tryb wulgarny?
Wpuszcza do hasła dokładnie jedno słowo z osobnej listy 89 wulgaryzmów, wyzwisk i słownictwa używkowego — reszta hasła pochodzi ze zwykłego słownika. Lista jest krótka, więc hasło traci na tym kilka bitów; zyskuje za to na zapamiętywalności, bo takie słowo zostaje w głowie samo.
Czego na tej liście nie ma i nie będzie: obelg wymierzonych w grupy ludzi (rasowych, etnicznych, wobec orientacji) oraz słownictwa przemocy i śmierci. Te słowa są odfiltrowane na stałe i nie wracają żadnym przełącznikiem.
Ile słów wybrać?
| Wariant | Entropia |
|---|---|
| 3 losowe słowa | 44,9 bita |
| 4 losowe słowa | 58,2 bita |
| 5 losowych słów | 71,4 bita |
| zdanie 4-słowne | 51,1 bita |
| zdanie 5-słowne | 61,6 bita |
| zdanie 6-słowne | 70,2 bita |
Liczby dotyczą ustawień domyślnych, czyli z cyfrą i wielką literą.
Do rzeczy ważnych — menedżer haseł, szyfrowany dysk, poczta — warto brać 5 losowych słów albo 6-słowne zdanie. Obie opcje dają ok. 70 bitów.
Ile takie hasło naprawdę jest warte?
Wklejone do popularnego testera dostanie kilkaset bitów. Ta liczba nie jest wzięta z sufitu — po prostu odpowiada na inne pytanie niż „ile tu jest losowości”.
Tester widzi wyłącznie tekst i zakłada, że każdy znak wylosowano
osobno: długość × log₂(alfabet), czyli ok. 185 bitów dla hasła z 31 znaków.
Tymczasem smaczny to nie siedem niezależnych liter, tylko jedno losowanie
z listy 5707 słów — 12,5 bita zamiast 42. Samych losowań jest tu ok. 58 bitów przy
czterech słowach z cyfrą i wielką literą.
Prawda leży pomiędzy, bliżej dolnej liczby. Atakujący faktycznie nie wie, z którego generatora pochodzi hasło — generatorów są setki, a listy słów bywają różne. Ta niewiedza jest jednak warta kilkanaście bitów, nie sto: ile słów (~2 bity), jaki separator (~2 bity), z jakiej listy (~10 bitów nawet przy tysiącu prawdopodobnych list). Wychodzi rząd 70 bitów, a nie 185.
Reszta różnicy znika dlatego, że ataki łączące słowa z list są w narzędziach do łamania haseł od lat i nikt nie musi wiedzieć o istnieniu akurat tej strony, żeby je odpalić. Dlatego w liczbach wyżej liczone są same losowania — tak liczy się hasła typu diceware i tego wymaga NIST SP 800-63B. Nie dlatego, że atakujący na pewno zna schemat, tylko dlatego, że to jedyna część, na którą można liczyć.
Czym jest tryb Krótkie?
To hasło w stylu znanym z DinoPass: dwa krótkie słowa sklejone bez separatora, drugie
z wielkiej litery, dwie litery podmienione na podobne znaki i dwie cyfry na końcu —
na przykład kr@bW0da47. Słowa pochodzą z puli około 3000 najkrótszych
(do sześciu liter), więc całość mieści się w kilkunastu znakach.
Podmiany są losowane: z liter, które mają odpowiednik (a e i o s t b g z),
wybierane są dwie pozycje. To ma znaczenie — stała podmiana „każde a na
@” nie dawałaby nic, bo taką regułę ma każde narzędzie do łamania haseł;
dopiero losowy wybór, które litery zostały zamienione, wnosi kilka bitów.
Uczciwie o sile: dwa słowa (23 bity), wybór podmian (~3 bity) i dwie cyfry (6,6 bita) dają razem około 33 bitów — tyle, ile typowe hasło „Trudne1!”. To tryb dla kont o małej wartości i systemów, które wymagają krótkiego hasła ze znakami specjalnymi i cyframi. Do menedżera haseł, dysku czy poczty nie nadaje się; tam zostają losowe słowa albo zdanie.
Liczba słów, separator, cyfra i wielka litera nie mają w tym trybie zastosowania, więc ich przełączniki znikają z ustawień. Tryb wulgarny działa — jedno z dwóch słów pochodzi wtedy z osobnej listy.
Jak losowane są słowa?
Przez crypto.getRandomValues, z odrzucaniem wartości spoza zakresu
będącego wielokrotnością liczby słów. Dzięki temu każde słowo ma dokładnie takie samo
prawdopodobieństwo — zwykłe % n dawałoby lekkie przesunięcie rozkładu
na korzyść początku listy.
Czy hasło gdzieś trafia?
Nie. Strona jest statyczna i cała logika wykonuje się w przeglądarce — nie ma tu żadnego zapytania do sieci, żadnego serwera i żadnej analityki. Można ją zapisać na dysk i używać bez internetu.
Ale hasło wymyślone „z głowy” nigdy nie jest losowe. Jeśli podmienisz wygenerowane słowa na własne, wszystkie powyższe wyliczenia przestają obowiązywać.