Gra w hasła i zasady, które niczego nie chronią

Opublikowano autor David Carrero

W czerwcu 2023 roku programista Neal Agarwal opublikował na swojej stronie neal.fun coś zatytułowanego The Password Game. Prosi, żebyś wpisał hasło. Potem, żeby miało co najmniej pięć znaków. Potem cyfrę. Potem wielką literę. Potem znak specjalny.

Do tego miejsca to nie jest gra. To formularz twojego banku.

Potem zaczyna się reszta. Cyfry mają sumować się do 25. Ma zawierać nazwę miesiąca. Ma zawierać cyfry rzymskie, których iloczyn wynosi 35. Ma zawierać dzisiejszą odpowiedź z Wordle. Ma wskazywać kraj ze zdjęcia. Ma zawierać najlepszy ruch w zadanej pozycji szachowej, w notacji algebraicznej. Zasad jest trzydzieści pięć, a po drodze w twoim haśle wykluwa się emoji jajka o imieniu Paul, które trzeba karmić gąsienicami, podczas gdy płomień zjada twoje znaki, jeśli go w porę nie ugasisz.

Gra działa z niewygodnego powodu: nikt nie musi ci tłumaczyć żartu. Łapiesz go w pierwszej sekundzie, bo ten mechanizm znosisz od połowy życia. Agarwal tylko dalej pociągnął za nitkę.

I tu warto zwolnić. Pierwszych czterech zasad nie wymyślił on.

Skąd wzięły się zasady, które już znałeś

Wielka litera, cyfra, symbol i minimalna długość to nie folklor internetu: to praktyczne tłumaczenie dokumentu amerykańskiego NIST opublikowanego w 2003 roku, SP 800-63, napisanego przez Billa Burra. Stamtąd zeszły do formularzy pół świata, a stamtąd do twojej głowy.

Opisaliśmy to w całości w tekście czym jest hasło: Burr nie miał danych o prawdziwych hasłach — prawie ich nie było — więc rozumował w stronę tego, co wydawało się rozsądne. Więcej różnorodności znaków, więcej kombinacji, więcej bezpieczeństwa. W 2017 roku sam NIST się wycofał, a Burr powiedział Wall Street Journal, że żałuje sporej części tego, co napisał.

Gra Agarwala nie wyolbrzymia więc żadnej polityki bezpieczeństwa. Kontynuuje listę, która była błędna już w pierwszym wierszu. Jedyna różnica między „musi zawierać symbol“ a „cyfry muszą sumować się do 25“ jest taka, że do tego pierwszego przywykłeś.

Czego te zasady nigdy nie mierzyły

Tu żart przestaje być śmieszny, bo da się to zmierzyć.

Te liczby pochodzą ze sprawdzania haseł na tej stronie, z jego zadeklarowanym modelem: atak offline na szybki skrót, przy 10¹² próbach na sekundę. To nie są szacunki z broszury; to jest to, co zobaczysz, wpisując tam te same ciągi.

hasło spełnione zasady próby wytrzymuje
Haslo123! wszystkie cztery 4,3 × 10⁸ < 1 sekunda
Wiosna2026! wszystkie cztery 1,0 × 10⁷ < 1 sekunda
Zx9#kQ2m wszystkie cztery 3,3 × 10¹⁵ 55 minut
sześć słów wylosowanych kostką, małymi literami żadnej 1,1 × 10²³ 3500 lat

Ostatni wiersz nie pochodzi ze sprawdzania, tylko z arytmetyki, i to celowo: narzędzie nie może wiedzieć, że tych sześć słów wypadło na kostce, więc policzyłoby coś innego. Sześć rzutów to dokładnie 77,5 bita, a 77,5 bita przy 10¹² próbach na sekundę to około trzech i pół tysiąca lat. Wrócimy do tego na końcu.

Przeczytaj to jeszcze raz. Haslo123! przechodzi przez każdy formularz na planecie i pada, zanim puścisz klawisz, bo słowo jest w słowniku, a reszta to ozdóbka, którą dokłada każdy: wielka litera z przodu, cyfra i symbol z tyłu. A ostatni wiersz, sześć zwykłych słów małymi literami, odrzuciłaby połowa serwisów, w których masz konto: bez wielkiej litery, bez cyfry, bez symbolu.

Warto zatrzymać się przy Zx9#kQ2m, bo to najlepszy możliwy przypadek tej zasady. Osiem naprawdę losowych znaków, z wszystkimi czterema typami — dokładnie to, co polityka z 2003 roku uważała za wzorcowe hasło. Pięćdziesiąt pięć minut. I to jest sufit: narzędzie nie może wiedzieć, że wpisałeś je losowo, więc daje ci kredyt zaufania i liczy najlepszy scenariusz. Zresztą nikt tak nie pisze. Poproś człowieka o osiem znaków z symbolem, a wyjdzie Czesc123! — 4,3 × 10⁸ prób, poniżej sekundy.

Zasada nie odróżnia tych dwóch. Dla formularza Czesc123! i Zx9#kQ2m to to samo hasło. To cała wada: zasada budowy mierzy kształt ciągu, a odporność nie tkwi w kształcie.

Zasada 90 dni, czyli jak powstaje Lato2026!

Druga połowa spadku po 2003 roku to wygasanie. Zmieniaj co dziewięćdziesiąt dni.

Nikt nie wymyśla nowego hasła co dziewięćdziesiąt dni. Ludzie robią — i ty robisz, i ja robię — inkrementację poprzedniego. Wiosna2026! zamienia się w Lato2026! i robota odwalona. Oba wytrzymują poniżej sekundy, a jeśli atakujący ma pierwsze, zgadnięcie drugiego nie jest atakiem: to wypełnienie luki.

NIST wycofał obowiązkową rotację w SP 800-63B, w 2017 roku. W wersji z sierpnia 2025 ton stwardniał: tam, gdzie wcześniej pisano, że weryfikatorzy nie powinni narzucać zasad budowy ani wymagać okresowych zmian, teraz jest napisane, że nie mogą robić ani jednego, ani drugiego. Zmianę wymusza się tylko wtedy, gdy są przesłanki, że hasło zostało skompromitowane.

Dziewięć lat po pierwszym odwołaniu twoja firma wciąż prosi cię o wielką literę co kwartał.

Limit znaków to najgorszy sygnał ze wszystkich

Agarwal opowiadał, że kroplą, która przelała czarę — tym, co pchnęło go do zrobienia gry — była próba założenia konta i komunikat, że jego hasło jest za długie.

Ze wszystkich absurdalnych zasad to jedyna, która jest przy okazji złym znakiem.

System, który przechowuje twoje hasło jak należy, wcale go nie przechowuje: przechowuje jego skrót, a skrót ma zawsze ten sam rozmiar, czy podasz mu osiem znaków, czy osiemset. Nie istnieje żaden powód po stronie przechowywania, żeby stawiać limit na szesnastu. Jest dokładnie jeden znany, uzasadniony wyjątek techniczny — bcrypt ignoruje wszystko powyżej 72 bajtów — i nie tłumaczy on formularzy, które zatrzymują się na dwunastu.

Krótki limit nie dowodzi, że trzymają twoje hasło jawnym tekstem, ale to rodzaj szczegółu, który pojawia się tylko wtedy, gdy ktoś wsadził je do kolumny bazy danych o stałej szerokości. SP 800-63B żąda czegoś przeciwnego: żeby akceptować co najmniej 64 znaki.

Zasada, która działa, nie mieści się w formularzu

Podstawowy dyskomfort polega na tym, że dobrej praktyki nie da się wyrazić jako pola walidacji. Nikt nie napisze wyrażenia regularnego na „nie użyłeś go nigdzie indziej“ ani na „nie ma go w ostatnim wycieku“.

To, co da się zrobić, to policzyć. Fraza ze słów wybranych kostką — Diceware — dodaje 12,9 czystego bita na słowo, i te bity naprawdę są bitami. Przy tym samym modelu 10¹² prób na sekundę:

  • Pięć słów to 64,6 bita: około 164 dni.
  • Sześć słów to 77,5 bita: około 3500 lat.

Warto podać obie liczby, nie tylko drugą. Często powtarza się, że fraza z pięciu słów „wytrzyma wieki“; wobec szybkiego skrótu nie wytrzymuje wieków: wytrzymuje pięć i pół miesiąca. Dlatego Reinhold zalecał pięć jako minimum i sześć do tego, co naprawdę ważne. Szóste słowo zmienia skalę, i jest za darmo.

Żadna z tych dwóch nie przeszłaby formularza twojego banku.

Dlaczego ta gra jest śmieszna

Kiedy gra żąda, żeby cyfry sumowały się do 25, śmiejesz się, bo to arbitralny warunek, który nie ma nic wspólnego z tym, co czyni hasło bezpiecznym.

Żądanie symbolu też jest arbitralnym warunkiem, który nie ma nic wspólnego z tym, co czyni hasło bezpiecznym. Różnica polega na tym, że ten serwuje pół internetu i że do tego zdążyliśmy się przywiązać.

Jeśli chcesz podsumowanie operacyjne, mieści się w trzech linijkach: użyj generatora albo kostek, wrzuć wynik do menedżera i spełnij zasady formularza, dopisując to, czego żąda, bez wiary, że cię to przed czymkolwiek uchroniło. Wielka litera na początku i ! na końcu to myto, nie obrona.

Reszta to gra. Jest znakomicie zrobiona i szkoda, że nie została grą.


Źródła: Neal Agarwal, „The Password Game“ (neal.fun, 27 czerwca 2023), jej 35 zasad oraz relacja samego autora o formularzu, który powiedział mu, że jego hasło jest za długie · NIST SP 800-63 (2003), SP 800-63B (2017) i SP 800-63B-4 (sierpień 2025), który w sprawie zasad budowy i wygasania przechodzi z „nie powinni“ na „nie mogą“ i żąda akceptowania co najmniej 64 znaków · wypowiedzi Billa Burra dla Wall Street Journal, sierpień 2017 · Arnold G. Reinhold, Diceware (1995), skąd pochodzi 12,9 bita na słowo. Czasy w tabeli zmierzono narzędziem sprawdzania haseł na tej stronie, z jego zadeklarowanym modelem 10¹² prób na sekundę wobec szybkiego skrótu; wartości Diceware policzono przy tym samym tempie na podstawie log₂(7776) na słowo.

Zdjęcie: Olha Ruskykh · Pexels

← Wróć do bloga