Siła hasła

Mimo postepu technologii, hasla nadal sa najczesciej spotykanym mechanizmem uwierzytelniania. Nawet zakladajac, ze mechanizm, który ich uzywa nie ma zadnej slabosci musimy zdac sobie sprawe, ze jezeli haslo ma skonczona dlugosc (a trudno, zeby mialo nieskonczona), to podejmujac skonczona ilosc prób, mozna haslo odgadnac. Odgadywanie moze polegac na jednej z metod:

  • Po prostu wpisujemy haslo. Imie kota, pózniej marke samochodu, date urodzenia, abc123. I tak do skutku. Metoda nie jest specjalnie wyszukana, ale w praktyce przynosi niezle efekty zwlaszcza, jezeli atakujacy zna osobiscie atakowanego.
  • Uruchamiamy automat, który pobiera ze slownika hasel (prosto sciagalne z Internetu) slowo po slowie i próbuje uzyc ich jako hasla. Dobre slowniki maja kilkaset tysiecy hasel.
  • Uruchamiamy automat, który uzywa hasel ze slownika, doczepiajac im na koncu najbardziej typowe znaki takie jak 0, 123 czy wykrzyknik.
    Uruchamiamy automat, który próbuje wszystkich kombinacji po kolei. aaaa, aaab, aaac, ..., zzzy, zzzz, aaaaa.... i tak dalej, do skutku. W informatycznym slangu, metoda ta nazywana jest "brute force".

Skutecznosc tych metod jest rózna. Jak powiedzie sie metoda pierwsza, to znaczy ze uzyto zbyt trywialnego hasla albo, ze atakujacy mial duzo szczescia. Atakujacemu "recznie" zwykle znudzi sie po jakims czasie od minuty do godziny i prawdopodobnie sie podda.

Automaty sie nie nudza a do tego sa szybsze niz czlowiek stukajacy w klawiature. Dla dobrego, powiedzmy, ze zlozonego z dziesieciu komputerów, automatu do lamania hasel, wydajnosc na poziomie 100000 prób na sekunde nie jest nieosiagalna.

Jak latwo policzyc, slownik zlozony nawet z miliona hasel zostanie sprawdzony w 10 sekund. Jezeli zasób byl zabezpieczony haslem ze slownika, to w takim czasie zabezpieczenie zostanie zlamane. Warto wiedziec, ze w slownikach sa nie tylko "normalne" slowa, ale i typowe hasla takie jak qwerty123 czy 1qaz@WSX.

Jezeli zastosujemy haslo skladajace sie ze slowa slownikowego i doczepionego na koncu ciagu znaków (na przyklad alamakota123) – czas lamania zalezy od tego ile takich ciagów bedzie sprawdzane. Typowo jest to kilkadziesiat. To wystarcza. Przy zalozonej wydajnosci odgadywania, oznacza to, ze haslo podda sie w czasie kilkunastu minut. To nie jest dobre zabezpieczenie.

Ciekawiej robi sie przy haslach nie dajacych sie odnalezc w slowniku i nie zawierajacych w sobie duzych slów prosto ze slownika.

Jezeli haslo sklada sie z samych malych liter – mamy do dyspozycji 26 znaków. Lamiac takie haslo mamy:

  • Dla hasla piecioznakowego: 11881376 mozliwosci, czyli niecale 2 minuty.
  • Dla hasla szescioznakowego: 308915776 mozliwosci, czyli niecala godzine.
  • Dla hasla siedmioznakowego: 8031810176 mozliwosci, czyli prawie doba.
  • Dla hasla osmioznakowego: 208827064576 mozliwosci, czyli ponad 3 tygodnie.
  • Dla hasla dziewiecioznakowego: 5429503678976 mozliwosci, czyli niemal dwa lata.
  • Dla hasla dziesiecioznakowego: 141167095653376 mozliwosci, czyli okolo 44 lata.

Jak jasno widac – warto stosowac dlugie haslo, ale bez siegania po prawdziwe slowa. Jak wspomnialem wczesniej, hasla ze slownika lamane sa w kilka sekund.

A jezeli, zamiast stosowac dlugie haslo z samych malych liter (takie jak asodczlkme) zastosujemy krótsze, ale zlozone z liter duzych i malych (takie jak AsODcz)? Mamy do dyspozycji 52 znaki. Ilosc prób i czas lamania wyniosa maksymalnie:

  • Dla hasla piecioznakowego: 380204032 mozliwosci – 1 godzina
  • Dla hasla szescioznakowego: 19770609664 mozliwosci – ponad dwa dni
  • Dla hasla siedmioznakowego: 1028071702528 mozliwosci – niecale cztery miesiace
  • Dla hasla osmioznakowego: 53459728531456 mozliwosci – 17 lat
  • Dla hasla dziewiecioznakowego: 2779905883635712 mozliwosci – ponad 800 lat
  • Dla hasla dziesiecioznakowego: 144555105949057024 mozliwosci – prawie 47 tysiecy lat

Choc mozna zalozyc, ze w tym czasie komputery zwieksza (zgodnie z prawem Moore'a) swoja moc obliczeniowa, to i tak troche im to zajmie.

Wychodzi, ze dziesiecioznakowe haslo zlozone z duzych i malych liter (takie jak sKIrEcyeAk) jest calkiem dobrym zabezpieczeniem.

Kombinujmy wiec dalej. Do duzych i malych liter dodajmy cyfry. Razem 62 znaki do dyspozycji. Jezeli zechcemy takie haslo zlamac metodami brute force, otrzymamy maksymalne czasy:

  • Dla hasla piecioznakowego: 916132832 – 2,5 godziny
  • Dla hasla szescioznakowego: 56800235584 – prawie tydzien
  • Dla hasla siedmioznakowego: 3521614606208 – ponad rok
  • Dla hasla osmioznakowego: 218340105584896 – prawie 70 lat
  • Dla hasla dziewiecioznakowego: 13537086546263552 – ponad 4000 lat
  • Dla hasla dziesiecioznakowego: 839299365868340224 – ponad 260 tysiecy lat

Duze i male litery polaczone z cyframi (na przyklad dE3F4R5aa1) daja juz haslo calkiem przyzwoite i trudne do zlamania.

W przypadku tak zwanych znaków specjalnych, sprawa nieco sie komplikuje. wynika to z faktu, ze o ile litera A jest mniej wiecej tak samo czesto uzywana jak Z, a cyfra 1 jak cyfra 9, to znak ! czy . jest znacznie bardziej popularny niz na przyklad znaki + { ; _ czy \.

Podstawowe znaki specjalne obejmuja to, co dostepne jest przez Shift+cyfra: !@#$%^&*() oraz znak kropki. Rozszerzona lista obejmie dodatkowo wszystko to, co dostepne jest z prawej strony klawiatury. Mozna teoretycznie uzywac znaków "bardzo specjalnych" takich jak ™, ® czy €, ale wtedy pojawia sie duze ryzyko, ze jakis system bedzie je zle rozumial lub wprowadzal w taki sposób, ze uwierzytelnianie stanie sie niemozliwe, wiec lepiej ich unikac. Przyjmujac, ze podstawowych znaków specjalnych jest 11 a z rozszerzonymi lacznie 30, otrzymamy w koncu tabelke:

 

  Male litery (26) Male i wielkie litery (52) Litery i cyfry (62) Litery, cyfry i podstawowe znaki specjalne (73) Litery, cyfry i pelny zestaw znaków specjalnych (92)
5 znaków 2 minuty godzina 2 godziny 5 godzin 18 godzin
6 znaków godzina 2 dni 7 dni 17 dni 70 dni
7 znaków doba 4 miesiace 1 rok 3 lata 17 lat
8 znaków 20 dni 17 lat 70 lat 255 lat 1600 lat
9 znaków 2 lata 800 lat 4000 lat 19000 lat 150000 lat
10 znaków 44 lata 47000 lat 260000 lat 1,3mln lat 13mln lat

 

Warto zwrócic uwage, ze mowa jest o czasach maksymalnych. Jezeli atakujacy bedzie mial duzo szczescia – zgadnie w pierwszej sekundzie. Utrudnic mu to mozna stosujac taki zestaw znaków hasla, jakich na pewno nie zechce sprawdzac. Czyli cos w okolicach ostatniej kolumny tabelki.

Dla jasnosci, warto wspomniec jeszcze co sie stanie, jezeli haslo zastapimy kluczem o dlugosci na przyklad 128 bitów. Maksymalny czas lamania przez nasz automat wyniesie ponad 107902830708060141889705291 lat. Dlugo, zwlaszcza pamietajac, ze wszechswiat istnieje "tylko" 14000000000 lat

Warto pomyslec jeszcze o zwiekszaniu mocy obliczeniowej automatu zgadujacego hasla. Komputerów na swiecie jest duzo i jezeli do pracy "namówimy" na przyklad dziesiec tysiecy maszyn – czas lamania skróci sie tysiac razy w porównaniu z dziesiecioma komputerami zalozonymi na poczatku. To duzy zysk, ale na przyklad dla dziewiecioznakowego hasla ze znakami specjalnymi, oznacza w praktyce sto piecdziesiat lat nieprzerwanego liczenia. Czyli w praktyce nie ma sie chyba czego obawiac.

Wszystkie te dywagacje opieraja sie na zalozeniu, ze stosowane algorytmy nie maja znanych wad. Dla wspólczesnie stosowanych rozwiazan zazwyczaj jest to prawda, ale o niejednym algorytmie tak myslano i czas brutalnie rozwial te nadzieje.

Jezeli ktos chce zweryfikowac powyzsze obliczenia, to przypomne tylko, ze zbiór odgadywanych hasel jest wariacja z powtórzeniami.

Autor: Grzegorz Tworek [MVP]