W tej publikacji skoncentrujemy się na hasłach uwierzytelniających w różnego typu aplikacjach. W systemach wykorzystywane są jako tajny parametr, potwierdzający zadeklarowaną tożsamość przez danego użytkownika. Tożsamość ta weryfikowana jest za pomocą podanego identyfikatora.
We współczesnych systemach kryptograficznych hasła są nadal powszechnie stosowane ze względu na to, że z punktu widzenia użytkownika oraz systemu teleinformatycznego, są najłatwiejszym w użyciu mechanizmem. Hasła – rozumiane jako stosunkowo krótkie sekwencje liter, cyfr oraz innych znaków – mają następujące zalety, determinujące ich przydatność:
- mogą być łatwo zapamiętane przez człowieka (w przeciwieństwie do kluczy kryptograficznych stosowanych we współczesnej kryptografii),
- nie wymagają żadnego dodatkowego sprzętu ani sterowników (w przeciwieństwie, np. do uwierzytelnienia biometrycznego czy kart elektronicznych),
- są wprowadzane za pomocą tego samego interfejsu, który służy do komunikacji z użytkownikiem (zwykle monitor, wyświetlacz, klawiatura lub klawiatura ekranowa).
Powyższe cechy haseł wiążą się równocześnie z licznymi zagrożeniami, które należy brać pod uwagę podczas ich stosowania:
- użytkownicy mogą wybierać hasła krótkie lub łatwe do złamania metodami słownikowymi,
- hasła mogą zostać podsłuchane podczas transmisji sieciowej lub podglądnięte podczas wpisywania,
- raz przechwycone hasło może być wykorzystywane do podszywania się bez wiedzy oryginalnego właściciela.
Problem nieautoryzowanego wykorzystania podsłuchanych lub złamanych haseł jest rozwiązywany za pomocą haseł jednorazowych lub uwierzytelnienia dwuskładnikowego (ang. two-factor authentication), zwykle z użyciem tokenów, uwierzytelnienia biometrycznego oraz innych technik.
We współczesnych systemach kryptograficznych hasła nie powinny być nigdy stosowane bezpośrednio jako klucze kryptograficzne ze względu na stosunkowo niską entropię informacyjną haseł. Pozwala to bowiem na skuteczny atak samego hasła o złożoności (entropii) np. rzędu 40 zamiast atakowania pełnego klucza kryptograficznego (np. o długości 128 bitów i takiej samej entropii).
Siła hasła pozostaje w ścisłym związku z ilością możliwych kombinacji, a najprostszą jej miarą jest poziom entropii informacyjnej. Zależność tę obrazuje poniższa tabela:
ZESTAW ZNAKÓW | LICZBA ZNAKÓW W ZBIORZE | HASŁO 8 ZNAKÓW | HASŁO 16 ZNAKÓW | ||
---|---|---|---|---|---|
Kombinacje | Entropia | Kombinacje | Entropia | ||
Cyfry (4 znakowy PIN) | 10 | 10'000 | 13,28 | ||
Litery bez rozróżnienia na duże i małe | 26 | { 2*10^{11}} | 37,54 | {4*10^{22}} | 75,08 |
Małe i duże litery | 52 | {5*10^{13}} | 45,50 | {3*10^{27}} | 91,27 |
Małe, duże litery, cyfry | 62 | {2*10^{14}} | 47,50 | {5*10^{28}} | 95,33 |
Małe i duże litery, cyfry, wszystkie symbole na standardowej klawiaturze | 95 | {7*10^{15}} | 52,63 | {4*10^{31}} | 104,98 |
Tabela pokazuje dane teoretyczne, które będą poprawne dla haseł generowanych losowo. Hasła wybierane przez ludzi mają tendencję do powielania pewnych kombinacji – np. jednej dużej litery na początku i cyfr na końcu, lub budowane są na bazie słowa z języka naturalnego, co obniża rzeczywistą entropię takiego hasła. Może to ułatwić jego złamanie, zwłaszcza jeśli zostaną użyte programy próbujące odtwarzać typowe zachowania użytkowników podczas wybierania haseł.
Uproszczoną wersją kalkulowania entropii będzie sprawdzanie hasła w internetowych aplikacjach (w których NIGDY nie podawaj prawdziwych haseł!), które przeliczają jak dużo czasu potrzeba aby komputer odgadł Twoje hasło. Przykładowo https://howsecureismypassword.net
Tester weryfikujący system do uwierzytelnienia hasła musi brać pod uwagę wszystkie zagrożenia, pozwalające na próby złamania „hasła” lub jego nieautoryzowanego użycia. W szczególności tester powinien sprawdzać czy systemy te mają następujące zabezpieczenia:
- Polityka bezpieczeństwa wymuszająca wybieranie przez użytkowników haseł o odpowiedniej długości i złożoności, lub generowanie i przydzielanie im takich haseł. Wiąże się to z całym mechanizmem walidacji haseł i sprawdzaniem poprawności działania walidatorów.
- Ograniczenie ilości prób uwierzytelnienia. Po przekroczeniu ustalonego limitu logowanie na dany identyfikator użytkownika jest blokowane na stałe lub czasowo. Jest to szczególnie istotne w przypadku haseł z założenia bardzo krótkich (PIN). Ograniczenie do trzech prób zapewnia wystarczającą ochronę przeciwko atakom automatycznym, szczególnie dla haseł o entropii rzędu 20.
Bezpieczne przechowywanie haseł.
Hasła w systemach teleinformatycznych są z reguły przechowywane w sposób uniemożliwiający ich odtworzenie. Chroni to przed przejęciem dużej ilości haseł w przypadku uzyskania dostępu do bazy oraz umożliwia zapewnienie niezaprzeczalności działań użytkownika. Do przekształcania haseł stosuje się algorytmy oparte na jednokierunkowych, kryptograficznych funkcjach skrótu. Ze względu na możliwość prowadzenia skutecznych ataków (atak słownikowy czy tęczowe tablice) na hasła przetworzone za pomocą pojedynczej funkcji skrótu, konieczne jest stosowanie do tego celu funkcji przypominających funkcje PBKDF opisane w standardzie PKCS#5.
Obecnie najczęściej stosowanymi funkcjami skracania haseł jest NTLM (Windows), oparta na DES funkcja crypt (starsze systemy uniksowe), oparte na MD5 lub SHA-1 funkcje stosowane w Linuksie czy serwerze Apache oraz oparta na szyfrze Blowfish funkcja bcrypt (OpenBSD).
Niedoskonałe funkcje skracania haseł mogą prowadzić do znacznego obniżenia bezpieczeństwa danego systemu – w ten sposób podatna na złamanie jest, stosowana w starszych wersjach Window,s funkcja LMHash (Lan Manager Hash) czy funkcja stosowana w starszych wersjach bazy MySQL (dwukrotne SHA-1 bez salt).
Każdy większy dostawca usługi wymagającej autoryzacji posiada swój zbiór rekomendacji i zasad definiowania oraz kontrolowania haseł. Przykładem może być Google. Poniżej wyciąg z pomocy serwisu.
Utwórz silne hasło
Silne hasło pomaga:
- chronić Twoje dane osobowe;
- chronić Twoje e-maile, pliki i inne treści;
- zabezpieczać Twoje konto przed dostępem innych osób.
Wymagania dotyczące hasła
Utwórz hasło złożone z co najmniej 8 znaków. Może to być dowolna kombinacja liter, cyfr i symboli (znaków ASCII). Znaki diakrytyczne ani litery ze znakami diakrytycznymi nie są obsługiwane.
Nie możesz używać hasła, które:
- jest wyjątkowo słabe, np. „hasło123”;
- było używane wcześniej na Twoim koncie;
- zaczyna się lub kończy spacją.
Wskazówki dotyczące dobrego hasła
Silne hasło może być łatwe do zapamiętania dla Ciebie, ale musi być prawie niemożliwe do odgadnięcia przez inną osobę. Dowiedz się, jakie warunki musi spełniać dobre hasło, a następnie zastosuj te wskazówki, tworząc hasło do swojego konta.
Wymyśl hasło, które będzie unikalne
Używaj innego hasła do każdego ważnego konta takiego jak konto e-mail czy bankowości internetowej.
Ponowne wykorzystanie hasła do ważnego konta jest ryzykowne. Jeśli ktoś pozna hasło do jednego z Twoich kont, może uzyskać dostęp do poczty e-mail, adresu, a nawet pieniędzy.
Wymyśl hasło, które jest dłuższe i łatwiejsze do zapamiętania
Długie hasła są silniejsze, dlatego utwórz hasło, które będzie miało co najmniej 8 znaków. Poniższe wskazówki pomogą Ci tworzyć dłuższe hasła, które łatwiej zapamiętasz. Przykładowe rzeczy, których możesz użyć:
- tekst piosenki lub wiersza;
- ważny cytat z filmu lub przemowy;
- fragment książki;
- ciąg słów, który ma dla Ciebie znaczenie;
- skrót: utwórz hasło z pierwszych liter kolejnych słów w zdaniu.
Unikaj haseł możliwych do odgadnięcia przez:
- osoby, które znasz;
- osoby, które mają dostęp do Twoich podstawowych danych (np. Twojego profilu w mediach społecznościowych).
Nie używaj danych osobowych
Unikaj tworzenia haseł na podstawie informacji, które inni mogą znać lub łatwo uzyskać. Przykłady:
- Twoje przezwisko lub inicjały;
- imię Twojego dziecka lub zwierzaka;
- ważne daty urodzin lub lata;
- nazwa Twojej ulicy;
- numery z Twojego adresu.
Nie używaj popularnych słów czy wzorców
Unikaj prostych słów, wyrażeń i wzorców, które łatwo zgadnąć. Przykłady:
- oczywiste słowa i wyrażenia, takie jak „hasło” czy „wpuscmnie”;
- ciągi znaków, takie jak „abcd” lub „1234”;
- wzorce z klawiatury, takie jak „qwerty” czy „qazwsx”.
Po utworzeniu silnego hasła dbaj o jego poufność
Ukrywanie zapisanych haseł
Jeśli musisz zapisać swoje hasło, nie zostawiaj go przy komputerze ani na biurku. Zadbaj o to, by wszystkie spisane hasła były przechowywane w nikomu nieznanym bądź zabezpieczonym miejscu.
Narzędzie do zarządzania hasłami
Jeśli nie potrafisz zapamiętać wielu haseł, dobrym rozwiązaniem może być zaufany menedżer haseł. Poświęć trochę czasu na zapoznanie się z opiniami i ocenami dotyczącymi takich rozwiązań. Możesz też zapisywać hasła na swoim koncie Google.
Powyższe dobre rady są również w wielu przypadkach wartościowymi testami lub danymi testowymi do weryfikowania poprawności systemów, a także dbałości użytkowników o bezpieczeństwo swojego konta. Przykładowo używając jednego z popularnych haseł możemy sprawdzić czy użytkownicy przypadkiem ich nie używają:
- 123456
- password
- 12345678
- qwerty
- 12345
- 123456789
- letmein
- 1234567
- football
- iloveyou
Tak samo robią hakerzy, którzy przy użyciu metody brute force próbują włamać się na konto użytkowników.
Niezaprzeczalnie najlepszym źródłem do szukania pomysłów na weryfikowanie autoryzacji w systemach będzie OWASP. Jego publikacja „Authentication Cheat Sheet” jest nie tylko wartościowym poradnikiem dla programistów, ale również dla testerów. Ci ostatni szczególnie powinni zwrócić uwagę na „Password Storage Cheat Sheet”.
Na koniec warto wspomnieć o opisującym rzeczywistość informatyczną xkcd i jego kamyczek do bezpieczeństwa haseł.