Dzisiaj w ramach promocji szybki wpis na temat tego jak długie powinno być hasło w Windows.
Jak długie hasło w Windows?
Jak długie powinno być hasło? Odpowiedź jest w zasadzie prosta - jak najdłuższe. W praktyce polecam jednak, by miało ono więcej niż 14 znaków, zwłaszcza jeśli pracujesz w domenie i nie wiesz, czy administrator wyłączył tworzenie hashy haseł LM. Jak Windows przechowuje hasła (oczywiście mowa o tych Windows z linii NT). Oczywiście - nie w formie jawnej, lecz w postaci hasha. Standardowo przechowywane są dwa hashe LM oraz NTLM. Dalsze rozważania zakładają, że hashe haseł są dostępne dla atakującego i jego zadanie polega na ich złamaniu.
Hash LM jest archaicznym wynalazkiem, który w obecnej chwili nie zapewnia większego poziomu bezpieczeństwa. Dlaczego? Hash LM powstaje w następujący sposób:
- Branych jest 14 znaków hasła (w przypadku hasła krótszego jest ono uzupełniane do tej wartości)
- Hasło poddawane jest operacji uppercase (zamiana małych liter na duże)
- Hasło jest dzielone na dwie 7 znakowe części, dalsze operacje wykonywane są na każdej połówce ODDZIELNIE
- Na postawie 7 znaków części hasła wyliczany jest klucz DES
- Otrzymanym kluczem szyfrowana jest pewna znana wartość
- Wyniki szyfrowania składane są w hash hasła
Jak widać słabości hasha LM to:
- Ograniczenie efektywnej długości hasła do 7 znaków
- Zmniejszenie liczby istniejących kombinacji przez brak rozróżnienia wielkości liter
Przy obecnym sprzęcie bez większych problemów można przygotować wcześniej tabele zawierające możliwe hasła wraz z wcześniej wyliczonymi hashami. Łamanie hasha sprowadza się wówczas jedynie do znalezienia wcześniej wyliczonego hasha i określeniu jaki ciąg znaków go wyprodukował. O koncepcji tego podejścia można poczytać tutaj.
Nieco inaczej przedstawia się sytuacja w przypadku hasha NTLM. W tym przypadku wykorzystywanych jest 127 znaków hasła (pojawiają się też informacje o 128, ale raczej 127 jest wartością właściwą). Hash liczony jest w następujący sposób:
- Branych jest do 127 znaków wpisanego hasła
- Wpisane hasło zamieniane jest na UNICODE
- Wyliczany jest hash MD4
Jak widać tutaj maksymalna efektywna długość hasła to 127 a nie 7 znaków (taka mała różnica), co więcej ilość kombinacji nie jest ograniczona przez operację uppercase. Oczywiście także w przypadku hasha NTLM można wykorzystywać wcześniej przygotowane tabele, ale w tym wypadku wyliczenie wszystkich kombinacji jest nieco trudniejsze niż w przypadku LM. Dla przykładu zakładając, że w haśle dopuszczalne są znaki od a-z (duże i małe, dla ułatwienia przyjmijmy, że jest ich 26) oraz cyfry od 0-9 w przypadku LM maksymalna ilość różnych haseł (właściwie ich fragmentów) to 36^1+36^2+36^3+36^4+36^5+36^6+36^7=80 603 140 212. Liczba może i robi wrażenie, ale nie przy obecnej wydajności przeciętnego komputera biurkowego. W przypadku hasha NTLM istnieje trochę więcej hashy, które należałoby wyliczyć by mieć sprawdzone wszystkie możliwości dla tego zakresu znaków o maksymalnej długości 7 znaków. Na każdej pozycji hasła może znaleźć się jeden z 62 znaków (26+26+10), co daje wartość 3 579 345 993 194. Nie jest to zabójcza wartość mając na uwadze, że mój laptop jest w stanie sprawdzić w granicach 3 000 000 haseł na sekundę (Celeron 1,7). W przypadku skorzystania z NTLM jednak hasło nie jest ograniczone do 7 znaków, dla hasła składającego się z 14 znaków liczba możliwości to już 12 605 077 130 307 650 304 141 546. Przypominam, że z góry zakładam, że hasło nie zawiera znaków innych niż alfanumeryczne. A co to za hasło bez jakiegoś $# lub innego fajnego krzaczka :)
Dlaczego hasło powinno być dłuższe niż 14 znaków? Dlatego, że wówczas system nie tworzy hasha LM, nawet jeśli administrator nie wyłączył tej opcji. Opis jak wyłączyć tworzenie hasha LM dostępny jest tutaj. Widzę zresztą, że pojawiła się w tym artykule informacja o wykorzystaniu haseł mających przynajmniej 15 znaków. O ile mnie pamięć nie myli, wcześniej jej nie było. W każdym razie wybór odpowiednio długiego hasła jest jedyną rzeczą, którą może zrobić, jeśli administrator nie chce wprowadzić tej drobnej zmiany.