Bezpieczeństwo hasła
Atakujący, który próbuje dostać się do jakiejś aplikacji zabezpieczonej hasłem (archiwum RAR zabezpieczone hasłem, e-mail…), ma kilka możliwości, jak bez znajomości hasła dojść do celu. Niektóre z nich wymagają pewnej dawki inteligencji, sprytu i wiedzy, inne z kolei trochę szczęścia i przygotowania fizycznego. Podsumujmy więc najpierw, jakie możliwości ma atakujący.
Jak złamać czyjeś hasło
- Znaleźć kogoś, kto zna hasło (na przykład właściciela skrzynki e-mailowej), i hasło od niego zdobyć — namówić go, przekupić, pobić. Tego sposobu nie będę dalej w artykule opisywać :-).
- Spróbować wyłudzić hasło od właściciela w jakiś niepozorny sposób, na przykład fałszywym mailem; fachowo nazywa się to phishing. Metoda polega na tym, że wysyłasz właścicielowi konta e-mail, w którym wzywasz go, żeby odesłał ci swój login i hasło. Tylko od ciebie zależy, jak wiarygodnie będzie wyglądać wiadomość, bo sama prośba raczej by nie wystarczyła, trzeba do niej dodać jakąś historyjkę. Często można się spotkać z tym, że rzekomo zepsuła się baza danych, dlatego wzywamy wszystkich użytkowników, żeby jeszcze raz podali swoje hasło i login, bo inaczej zlikwidujemy im skrzynkę itp. Jeśli taka wiadomość wygląda naprawdę poważnie, odsetek sukcesów wcale nie jest mały.
- Atak słownikowy — ściągamy z internetu jakieś zestawy najczęstszych haseł i wszystkie wypróbowujemy. Jeśli będziemy mieć szczęście, a właściciel ma jakieś częściej używane hasło, rzeczywiście łatwo je zdobędziemy. Wynika z tego zasadnicza nauka — nie ustawiaj sobie haseł, które mają sens. Ustaw sobie na przykład hasło eminem, a gwarantuję ci, że pierwszy lepszy początkujący haker złamie je w kilka sekund. To chyba najskuteczniejsza metoda: jeśli masz naprawdę duży słownik haseł, jesteś w stanie bez większego wysiłku odgadnąć hasło dużej części użytkowników.
- Brute force, czyli atak siłowy, to najgłupsza metoda. Polega na wypróbowywaniu wszystkich możliwych wariacji haseł, jakie tylko istnieją na świecie. Program składa po kolei literki według pewnego algorytmu i sprawdza, czy nie trafił w szukane hasło. Gdy je znajdzie, zapisuje hasło i kończy. Tę metodę omówimy dalej.
Atak siłowy
Program wykorzystujący tę metodę tworzy po prostu różne wariacje słów i sprawdza, czy przypadkiem nie trafił w hasło. Policzymy, jak długo może mu takie sprawdzanie zająć.
Załóżmy, że mamy hasło z pięciu znaków, które składa się tylko z małych liter alfabetu angielskiego (bez polskich ą, ś itp.). Liter alfabetu angielskiego jest dwadzieścia sześć. Teraz już łatwo policzymy, ile różnych haseł możemy ułożyć z pięciu takich liter. Użyjemy wariacji, ponieważ zależy nam na kolejności (hasło lampa nie jest tym samym co palma, chociaż składa się z tych samych liter), a do tego musimy użyć wariacji z powtórzeniami, bo litery w hasłach mogą się powtarzać. Przejdźmy do samego obliczenia. Wzór na liczbę wariacji z powtórzeniami ma postać Wnk = nk. Za n podstawiamy liczbę liter, z których będziemy wybierać — liczbę liter alfabetu angielskiego, a za k liczbę liter, z których składa się hasło, w naszym przypadku pięć. Wychodzi nam 265, czyli w przybliżeniu dwanaście milionów różnych wariacji. Czy to dużo, czy mało?
To zależy też od tego, jakim sprzętem dysponujemy. Jakiś stary grat poradzi sobie z niewielką liczbą porównań na sekundę, supernowoczesne komputery z dziesięć tysięcy razy większą. W tych przykładach przyjmę, że komputer wykonuje dziesięć milionów porównań i sprawdzeń na sekundę. Pewnie każdy już się domyśla, że pięcioznakowe hasło taki komputer odkryłby w niecałe dwie sekundy, co naprawdę nie jest pocieszającym wynikiem. Ale nie poddawajmy się.
Wzmacniamy hasło
Pięcioznakowe hasło naprawdę nie jest ani trochę bezpieczne, niektóre rozsądniejsze systemy nawet nie pozwalają ustawić tak krótkiego hasła. Mówi się, że hasło nie powinno być krótsze niż osiem znaków. Policzmy teraz, ile jest wariacji dla hasła ośmioznakowego. Tak jak w poprzednim przypadku będziemy brać pod uwagę tylko małe litery alfabetu angielskiego. Podstawiamy do wzoru i wychodzi nam 268, czyli w przybliżeniu dwieście miliardów wariacji. To już ładniejsza liczba. Komputer sprawdziłby wszystkie wariacje w niecałe sześć godzin. Jest lepiej niż poprzednio, ale zobaczmy, jak wzrosłaby siła hasła, gdybyś używał też wielkich liter, cyfr i znaków specjalnych, takich jak podkreślniki, myślniki itp.
Małych liter jest 26, wielkich liter też jest 26, co razem daje 52 znaki. Do tego musimy jeszcze dodać 10 cyfr i jakieś znaki specjalne. Nie wszędzie są dozwolone wszystkie znaki specjalne, więc dla uproszczenia uwzględnię tylko osiem znaków specjalnych, żeby liczba znaków zaokrągliła mi się do ładnych 70. Długość hasła znowu wynosi osiem. Po podstawieniu wychodzi taka liczba: 708, czyli dla lepszego wyobrażenia w przybliżeniu 5{,}8 · 1014, słownie prawie pięćset osiemdziesiąt bilionów wariacji. To już całkiem imponująca liczba. Nasz komputer sprawdziłby wszystkie wariacje w szesnaście tysięcy godzin! To niecałe dwa lata. Atakujący musiałby mieć naprawdę dużo szczęścia, żeby odkryć hasło w jakimś realnym czasie. Do tego musiałby znać długość twojego hasła; gdyby jej nie znał, musiałby jeszcze sprawdzić wariacje o mniejszej liczbie znaków.
Niektórzy ludzie tak boją się o swoje dane, że używają haseł liczbowych. Takie hasła są bardzo odporne na atak słownikowy, bo w żadnym słowniku często używanych haseł raczej nie znajdzie się akurat 41 274 390 553. Niestety, choć takie hasła są odporne na atak słownikowy, są mniej odporne na atak siłowy. Cyfr jest bowiem tylko dziesięć, co oznacza, że liczba wariacji wynosi zawsze 10k. Siłę hasła utrzymuje tylko jego długość. Nasze poprzednie ośmioznakowe hasło ze wszystkimi rodzajami znaków miało w przybliżeniu 5{,}8 · 1014 wariacji. Żeby osiągnąć co najmniej tyle samo przy haśle liczbowym, musiałoby ono mieć piętnaście cyfr, prawie dwa razy więcej znaków. Wyraźnie widać, że skuteczniej jest wybrać hasło krótsze, ale z większą liczbą rodzajów znaków.
Nie lekceważ atakującego
Atakujący może być sprytny. Powiedzmy, że po przeczytaniu poprzednich akapitów postanowiłeś, że swoje obecne hasło „cytrynka” zmienisz przynajmniej na „Cytrynka”, przez co liczba możliwych wariacji wzrośnie wielokrotnie, bo atakujący musi już uwzględnić w algorytmie również wielkie litery. Tyle że atakujący może założyć, że wielka litera będzie tylko na pierwszym miejscu, bo tak łatwiej się zapamiętuje i nie ma zwyczaju pisać wielkiej litery w środku słowa. Napisze więc algorytm, który sprawdzi wszystkie wariacje słów z małymi literami i ewentualnie z jedną wielką literą na samym początku.
Twoje pierwotne hasło miało złożoność (chodzi mi o to, ile w sumie mogło być wariacji, gdybyśmy zachowali tę samą postać hasła — osiem małych liter) 268. Gdyby atakujący nie myślał, nowe hasło miałoby złożoność 528, ale gdyby użył opisanego wyżej algorytmu, hasło miałoby złożoność 52 · 267. Na pierwszym miejscu hasła mogą się zmieniać małe i wielkie litery, których jest razem 52, a na pozostałych siedmiu miejscach już tylko małe litery, co jest zwykłą wariacją z powtórzeniami.
Dalej atakujący może na przykład wiedzieć, że twoje hasło składa się z czterech liter i czterech cyfr, niepomieszanych, zawsze cyfry po kolei i litery po kolei. Złożoność takiego hasła obliczylibyśmy tak: pierwsza czwórka liter ma razem 264 wariacji, druga czwórka cyfr ma 104 wariacji. Te dwa wyniki następnie mnożymy: 264 · 104. Gdyby atakujący nie wiedział, czy najpierw są cyfry, czy litery, musielibyśmy poprzedni wynik jeszcze pomnożyć przez dwa.