Rafał Ślusarz

 
 
 
 

Jakie hasło jest wystarczająco dobre?


Hasło zabezpiecza Twoje zasoby (konto pocztowe, w serwisie społecznościowym, w usłudze online, ale też dostęp do miejsc i urządzeń) tak długo, jak długo komuś innemu nie uda sie go odgadnąć.

Podstawowe (STARE) zasady tworzenia haseł mówiły o tym, że w 6-cio, lub 8-znakowym haśle powinny znaleźć się przynajmniej 2 cyfry lub inne znaki specjalne np.: !@#$%^&*()][';/.,}{":? - i to zasadniczo powinno wystarczyć, by hasła nie dało się łatwo "odgadnąć". Niestety, tak już nie jest.

Nie jest tak z jednego, prostego powodu: znacząco wzrosła moc obliczeniowa nawet najprostszych komputerów. Teraz, zamiast odgadywać hasła metodą słownikową (external link) prościej (bo skuteczniej) jest użyć pełnej metody brute force (external link) i w ten sposób odgadnąć hasło.

Potrzebny przykład?

Porównajmy dwa hasła: doskonałe hasło wg "starych" wymagań: &Tk7O$8sB i pozornie łatwym hasłem złożonym z trzech słów: idziedwatalerz

Obydwa te hasła oprą się atakom słownikowym, ponieważ nie są popularnymi imionami, nie zawierają daty urodzenia ani fragmentu adresu itp. Aby porównać ich "wytrzymałość" na atak brute force, w uproszczony sposób obliczymy ile czasu zajęłoby ich złamanie sprawdzając wszystkie możliwości, znak po znaku, miejsce po miejscu.
Pierwsze z haseł (&Tk7$8sB) zawiera 8 znaków, z czego na każdej z tych ośmiu pozycji może się pojawić jeden z 95 znaków (duże i małe litery, cyfry i wszystkie popularne znaki specjalne). To drugie hasło (idziedwatalerz) zawiera 14 znaków, z których każdy może przyjąć 26 różnych wartości (tylko małe litery).
W obydwu tych przypadkach ilość haseł o tej samej długości, możliwych do ułożenia z tego samego zestawu znaków, można wyliczyć stosując proste wyrażenie na ilość wariacji z powtórzeniami: V=nk (n - to ilość elementów w naszym zbiorze (odpowiednio: 95 lub 26 znaków), k- długość ciągu (odpowiednio: 8 lub 14 znaków)).
W przypadku naszych haseł wyniki to odpowiednio: 6634204312890625 możliwości oraz 64509974703297150976 możliwości, czyli to drugie hasło wymaga prawie 10 tysięcy razy więcej prób, aby wyczerpać wszystkie możliwości poprawnego ułożenia naszego hasła, jakiekolwiek by ono nie było.
Dla porównania mocy haseł tych skomplikowanych (jak nasze krótkie/dla robotów) do tych "zwykłych" (jak nasz "idzie dwa talerz") wspomnę tylko, że dla maszyny generującej wszystkie możliwe hasła o konkretnej długości (z dostępnych w obydwu zbiorach znaków), to nasze 8-mio znakowe hasło ma taką samą (porównywalną) "moc", jak zwykłe, mało-literowe słowo o długości 11 znaków. Hasło zawierające same małe litery o długości 12 znaków już będzie od niego "silniejsze". A jak łatwo jest zapamiętać jedno i drugie hasło? Sami sobie odpowiedzcie...
To jakie hasło jest lepsze? Dłuższe, czy bardziej skomplikowane?

Jak długie powinno być "długie" hasło?

Najlepsze byłoby oczywiście jak najdłuższe hasło, jednak nie ma co popadać w przesadę.
Z pomocą w odpowiedzi na to pytanie może nam przyjść (znowu) matematyka i sprawdzenie, jak długo trwałoby wygenerowanie wszystkich możliwych haseł o konkretnej długości, aby w końcu odgadnąć nasze, właściwe.
Zakładamy tu, że haker łamiący nasze hasło posiada, lub ma do dyspozycji cały botnet (external link) lub własny superkomputer (external link), albo nieograniczony dostęp do takiego superkomputera w ramach grantu obliczeniowego, np. w TASK-u (external link). W "najgorszym przypadku" zakładamy, że haker posiada nieograniczony budżet na karty NVIDIA GeForce RTX 4090.
Gdyby dodatkowo założyć, że nasze hasło było przechowywane w formie najgorszego możliwego (bo najstarszego, najczęściej używanego i najszybszego do obliczania) hasha (external link) MD5 (external link), to teraz możemy przystąpić do obliczenia, ile rzeczywiście czasu zajmuje wygenerowanie takich haseł.

Karta graficzna typu RTX 4090, za pomocą narzędzia hashcat (external link) osiąga ok. 150 miliardów obliczeń hashy MD5 w czasie 1 sekundy. Używając takiej właśnie karty haker sprawdzałby wszystkie możliwości, aby znaleźć nasze "krótkie hasło dla robotów" przez około 12 godzin. Gdyby jednak ten sam haker był obrzydliwie bogaty i kupił sobie 100 takich kart, to sprawdzenie tego 8-mio znakowego hasła dla robotów zajęłoby mu trochę ponad 7 minut - i to tylko w sytuacji, gdyby nasze prawdziwe hasło odgadł dopiero w ostatniej próbie.
Na tych samych stu kartach RTX 4090 nasze 14-znakowe hasło złożone z samych małych liter, ten sam haker odgadywałby przez prawie 50 dni. W sumie to jest całkiem wykonalne i potencjalnie niebezpieczne, ale gdyby do naszego mało-literowego hasła dodać jeszcze 3 literki, to czas jego odgadywania wydłużyłby się do prawie 2400 lat. Chyba można spać spokojnie...
Proszę mnie tu nie łapać za słówka, że przez 2400 lat nikt nie odgadnie takiego hasła, bo oczywiście może się zdarzyć, że hasło zostanie odgadnięte po pierwszej próbie. Statystycznie można chyba przyjąć, że do złamania (odgadnięcia) dowolnego hasła potrzebna by była mniej więcej połowa czasu na przeliczenie wszystkich możliwych hashy. No i oczywiście (w dobrych, bezpiecznych systemach/bazach) stosuje się obecnie znacznie bardziej bezpieczne algorytmy szyfrowania (external link), niż archaiczny MD5; to wymaga jeszcze dłuższego czasu.

Czy więc w ogóle warto zakładać hasła dłuższe, niż 17-18 znaków? To zależy od naszego własnego przekonania, ale póki nawet hakerzy nie mają możliwości kupienia na "bazarku" komputera kwantowego, to z punktu widzenia matematyki i rozsądku: NIE.
Zawsze też można dodać chociaż kilka wielkich liter do naszego "wyrażenia" budującego hasło - to je wzmocni o nową pulę znaków - DWUDZIESTOSZEŚCIOKROTNIE.

Jak tworzyć hasła-zdania lub hasła-wyrażenia (phassphrases)?

Bardzo prosto, trzeba tylko pamiętać o jednej regule: nie mogą to być prawdziwe zdania/rzeczywiste zwroty.
Nie można użyć wyrażenia "LitwoOjczyznoMoja" - ponieważ to zdanie jest znane w kulturze popularnej i z pewnością należy już do baz danych służących do "łamania" haseł metodą słownikową.
Jeżeli jednak ktoś jest fanem twórczości Mickiewicza i najbardziej na świecie chciałby wykorzystać właśnie to zdanie, to proponowałbym lekką modyfikację, na przykład "LitwoOjciecMajowka".

Wyrażenia hasłowe powinny być zlepkiem nierealnym, oderwanym od rzeczywistości, ale jednocześnie powinny się nam (ich właścicielom) z czymś kojarzyć - abyśmy mogli je łatwo zapamiętać. Mogą to być jakieś osobiste wspomnienia przeplecione czymś "niepasującym" lub wyrażenia zrozumiałe tylko dla nas, na przykład:

lub podobne, równie absurdalne. Z wymienionego zestawu tylko "kotek na kołowrotku" może być mniej bezpieczny, ponieważ prędzej, czy później algorytmy budujące słowniki wpadną na to, że w wierszyku "wlazł kotek na płotek" ważny jest rytm i rym wiersza i będą próbowały dopisywać takie rozwiązania frazy "wlazł kotek", aby znaleźć wszystkie, możliwe rymy. Za to powiązanie "stawonogów" z "kierowaniem ruchem" łatwo nie przyjdzie nawet sztucznej inteligencji ChatGPT-4 (chyba że dotrze ona na niniejszą stronę i to przeczyta...).

Czy hasła należy zmieniać okresowo?

Stare, niestety mocno zakorzenione, praktyki informatyczne niekiedy zmuszają nas, użytkowników, do okresowej zmiany swojego hasła, na przykład co 30 dni. Jak pisze Microsoft, na tej stronie (external link):
(...) Kiedy użytkownicy są zmuszani do zmian haseł, zbyt często robią drobne zmiany lub używają przewidywalnych schematów do modyfikacji swojego hasła i/lub zapominają nowego hasła.
Ostatnie badania naukowe kwestionują wartość pewnych zakorzenionych w środowisku praktyk dotyczących haseł takich jak okresowe wygasanie haseł i wskazują na lepsze alternatywy.
Na podobnym stanowisku stoją ustawodawcy regulujący wymagania stawiane systemom teleinformatycznym obsługującym autoryzacje, na przykład National Institute of Standards and Technology w dokumencie Digital Identity Guidelines, Authentication and Lifecycle Management (dostępnym tutaj (external link), strona 14) piszą:
(Mechanizmy sprawdzające poprawność hasła) NIE POWINNY wymagać arbitralnej zmiany zapamiętanych haseł (np. okresowo).
Z kolei Application Security Verification Standard dostępny na tej stronie (external link) (skorzystaj tam z odnośnika Download i odszukaj interesujący Cię format dokumentu) mówi:
2.1.10 Sprawdź, czy nie ma okresowej rotacji hasła lub wymagań związanych z historią hasła.
Wszystko to oznacza, że jeżeli mamy dobre, długie hasło (o ile nikt go nie podejrzy), to nie musimy go obsesyjnie zmieniać. Zmienić możemy, jeżeli zachodzi podejrzenie, że ktoś mógł zerknąć, lub kiedy hasło wpisaliśmy w pole przeznaczone na login... Różnie przecież bywa.

Czy to wszystko?

Oczywiście, że nie.
Pomijam tu oczywiste i godne polecenia metody dodatkowego wzmocnienia zabezpieczenia dostępu i ochrony swojego konta, jak uwierzytelnianie dwuskładnikowe (external link) (np. oparte o kody generowane w dedykowanych aplikacjach, fizyczne klucze bezpieczeństwa lub biometrię) lub hasła o długości co najmniej 20 znaków, generowane losowo i zapamiętywane/zarządzane przez managery haseł (external link) - najlepiej niepowiązane z przeglądarką.
Bezwzględnie też wszyscy powiniśmy stosować się do zasady: jedno hasło dla jednej strony. Tego samego hasła NIE WOLNO wykorzystywać w więcej, niż jednym miejscu.
Dobrymi rozwiązaniami są także Single Sign-On (SSO) lub OAuth - usługi oparte o tzw. dostawców tożsamości. Mechanizm ten zgrubnie polega na tym, że użytkownik otrzymuje dostęp do wielu usług, wykorzystując tylko jedno hasło, które potwierdza jego tożsamość u dostawcy (np. autoryzując się przez swoje konto w Google, Facebook-u lub przez Apple). W ten sposób naprawdę dobre hasło (i tylko jedno do zapamiętania) dotyczy właśnie tego dostawcy, a nie nowego serwisu, do którego uzyskujemy dostęp.

Więcej na temat tych wspomnianych rozwiązań można przeczytać na przykład na stronie CERT (external link).

TL; DR:   Jakie hasło jest wystarczająco dobre?
  Najlepsza jest najdłuższa fraza, jaką jesteś w stanie łatwo zapamiętać.

Wstecz.

↑↑↑


  Data ostatniej modyfikacji strony: 17.05.2023 r.