Jak stworzyć bezpieczne hasło?

W kontekście krytycznego błędu zabezpieczeń, jakim jest Heartbleed warto pozmieniać hasła do wszystkich usług, z jakich korzystacie. Naprawdę. Zresztą dla bezpieczeństwa warto zmieniać je regularnie, do tego podejrzewam, że część z was ma naprawdę fatalne passy, więc będzie to okazja, żeby to naprawić.

Jeśli nie macie siły na długie czytanie – wszystko wyjaśni Wam ten komiks, który stał się legendą w kryptograficznym świecie, chociaż pozostawia trochę wątpliwości i nie wyczerpuje tematu. Dlatego przeczytajcie to, co jest pod komiksem, tam wyjaśnię więcej.

password_strength

XKCD, lic. CC BY-NC.

Od początku. Do czego służy hasło? Do zweryfikowania naszej tożsamości. Hasło jest dowodem na to, że jesteśmy tym, za kogo się podajemy wpisując login. Oznacza to, że każdy, kto zna nasze hasło z punktu widzenia komputera jest nami.

Powszechnie uważa się, ze im trudniejsze do zapamiętania, tym jest mocniejsze. Ale najpierw zastanówmy się, przed czym hasło nie chroni i szybko rozumiecie, że „skomplikowane” hasło zabezpiecza przed tym, przed czym z definicji chronić nie może.

Niezależnie od tego jak skomplikowany będzie nasz pass, nigdy nie ochroni nas przed keyloggerami (programami, które zapisują uderzenia w klawisze) i kradzieżami haseł z usług, z których korzystamy. Włamujący się zawsze otrzyma pełne dane logowania.

Hasło nie ochroni nas, jeśli zostanie komukolwiek zdradzone. Dyktowanie go komukolwiek sprawia, że tracimy nad nim kontrolę (może zostać podsłuchane, ale zagrożeniem jest również zwiększenie ilości komputerów zainfekowanych loggerami, na których ktoś zaloguje się na nasze konto).

Oznacza to, że hasło chroni nas tylko przed ludźmi, którzy nie poznali naszych danych logowania i przed komputerami na siłę włamującymi się na nasze konto. Przed tymi pierwszymi chroni praktycznie dowolne hasło, nawet kilkuznakowe (pomijając takie złote pomysły jak „hasło”, „12345” itp.). Tak naprawdę będziecie chcieli zabezpieczyć się przed tymi drugimi.

Jak działa próba złamania zabezpieczeń przez komputer? Żeby określić moc hasła, co do zasady porównuje się ilość haseł o podobnej charakterystyce (np. ilości znaków). Dla komputera siłowe włamywanie oznacza bardzo systematyczne szukanie igły w stogu siana, a naszym zadaniem będzie największe możliwe zwiększenie stogu.

Jeśli mamy 10-znakowe hasło, to komputer będzie musiał przeszukać wszystkie możliwości jedno-, dwu-, trzy-, cztero- itd. aż do dziesięcioznakowych. Na starcie nie wie, jak długie mamy hasło, dowie się do tego dopiero, kiedy strzeli w dobre znaki (musi przejechać wszystkie kombinacje od „a” przez „aaazzz” aż do „zzzzzzzzzz”). Oznacza to, że każdy dodatkowy znak zwiększa ilość koniecznych strzałów (nasz stóg) wykładniczo.

//Najbezpieczniejsze są bardzo długie w 100% losowe hasła zawierające wszelkie możliwe znaki ze wszystkich dostępnych alfabetów. Ale powodzenia z ich wygodnym wykorzystaniem. Ten poradnik pozwala stworzyć bezpieczne hasła, które będziecie w stanie zapamiętać//

Jak duże są różnice? Rzućcie okiem na kalkulator haystack i pobawcie się nim, to świetna zabawka. Czysto teoretycznie (biorąc pod uwagę sumę wszystkich możliwych strzałów) złamanie „aaaaaaaaaa” (10 znaków) może trwać 1.47 sekundy. „aaaaaaaaaaa” (11 znaków) to już 38.17 sekund, kolejne znaki zwiększają ilość operacji w taki sposób, że konieczne będzie kolejno: 17 minut, 7 godzin, 7 dni, 6,5 miesiąca, 14 lat itd.

Skąd taki postęp? Dodawanie innego typu znaków (małe, wielkie litery, cyfry, inne znaki) sprawia, że ilość możliwych haseł mnoży się o ilość potencjalnych znaków. Jednoznakowe hasło zapisane małymi literami angielskiego alfabetu to 26 kombinacji. Dwa znaki to 26×26+26. Jeśli dodamy do tego wielkie litery otrzymujemy 52×52+52. Jeśli dodamy liczby – 62×62+62 itd. Każdy dodatkowy znak robi monumentalną różnicę, która tylko zwiększa się wraz z wydłużaniem hasła.

Oczywiście to tylko teoria, w rzeczywistości programy łamiące hasła są o wiele mądrzejsze, korzystają ze słowników, są nauczone najpopularniejszych haseł i sposobów, w jaki ludzie je konstruują (np. popularnych zamienników – o na 0, i na 1 lub ! itp.). Jednak zasada pozostaje, a długość jest ważniejsza od skomplikowania. „lUbiek0tk!” może zostać złamane w tydzień. „no he cant read my poker face” zajmie (teoretycznie!) siedem tysięcy trylionów trylionów wieków, a jest nie tylko łatwe do zapamiętania – raz usłyszane nie chce w ogóle wyjść z głowy. Jeśli dodacie do tego poprawną interpunkcję („No, he can’t read my poker face!”), to możecie pomnożyć to przez kolejny trylion.

//Pamiętajcie jednak, że atak słownikowy oznacza wykorzystanie najpopularniejszych słów. Wykorzystujcie rzadkie słowa, słowa spoza słownika lub wyrażenia slangowe, generalnie wszystko to, czego nie uznalibyście za wyraz w Scrabble, to pomaga//

To bardzo nieintuicyjne, w końcu od lat uczy się nas, że każde hasło musi być skomplikowane i zawierać wiele różnych typów znaków. Tymczasem wystarczy długość, nawet nieskomplikowana, którą należy uzupełnić o łatwe do zapamiętania dodatkowe znaki.

Przed poprzednią zmianą haseł oddzielałem od siebie słowa znakiem „]” i każde hasło kończyłem kombinacją „!2Q”, obecnie mam zupełnie inny system. Kilka miesięcy temu moim hasłem byłoby „bardzo]lubie]kotki!2Q”. I jedna złota zasada – nigdy nie schodźcie poniżej 16 znaków, nie ma limitu w górę.

Warto również pamiętać o tym, że algorytmy są konstruowane tak, żeby pokonać nasze przyzwyczajenia. Łatwiejsze do złamania będzie hasło, które zaczyna się od wielkich liter, w środku ma małe i kończy się cyframi. „Aaaaaaaaaaaaa1234” będzie łatwiejsze do złamania niż „aaaa1234aaaaaaaaA”.

//Edit: na fejsie Jakub zwrócił uwagę na ciekawą dyskusję, która pozwala lepiej zrozumieć, dlaczego ważne jest łamanie wyrazów losowymi znakami. Przy zastosowaniu ataku słownikowego na czterowyrazowe hasło można argumentować, że mamy do czynienia z czteroznakowym hasłem (zamiast poszczególnych liter program dopasowuje tylko słowa). To prawda, ale można sobie z tym poradzić – np. eliminując samogłoski czy oddzielając od siebie słowa losowymi znakami, a w najgorszym wypadku – po prostu dodając coś, co wyrazem nie jest. Wtedy „bardzolubiekotki” może ewoluować w „brdzlbktk”, „bardzo&&.1lubie&&.1kotki” czy „bardzolubiekotki/1”.

To trochę bardziej skomplikowane, ale dalej pozwala na tworzenie banalnych do zapamiętania, trudnych do złamania haseł. Pamiętajcie, dalej kluczowym elementem pozostanie długość.//

Jeśli interesuje was więcej serdecznie polecam lekturę pod tymi linkami: haystack, rumkin.com, xato.net

Jedna myśl nt. „Jak stworzyć bezpieczne hasło?

  1. Pingback: Heartbleed, jedno z największych naruszeń bezpieczeństwa w historii internetu | Dystopijna przyszłość, w której miasta zostały zniszczone przez potwory

Dodaj komentarz