Generator haseł Generator

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ądsad), 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ć?
WariantEntropia
3 losowe słowa44,9 bita
4 losowe słowa58,2 bita
5 losowych słów71,4 bita
zdanie 4-słowne51,1 bita
zdanie 5-słowne61,6 bita
zdanie 6-słowne70,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ć.