Hasła są umiarkowanie bezpieczną metodą uwierzytelnienia użytkownika. Nie chodzi tu nawet o fakt, iż znaczna część populacji wybiera hasła słabe. Hasło może zostać podsłuchane lub podpatrzone. Podsłuchane za nawet nie tyle za pomocą sniffera w trakcie, gdy hasło przesyłane jest przez sieć, ale przez keylogger (lub ogólniej - malware) w trakcie jego wpisywania. Podpatrzone przez osobę, która niewinne stoi akurat za plecami i spogląda niewinnie gdzieś w dal...
O hasłach maskowanych
Haseł nie można jednak skutecznie zastąpić inną metodą uwierzytelnienia. W niewielkiej skali oczywiście jest to możliwe, ale oczekiwanie, że 100% użytkowników bankowości elektronicznej zacznie używać na przykład podpisu elektronicznego z kluczem prywatnym umieszczonym na karcie kryptograficznej, to czysta naiwność. Z tego powodu "zwykłe hasła" zostały nieco ulepszone. Chodzi mi o hasła "maskowane". Zasada jest prosta, użytkownik musi podać jedynie kilka znaków z hasła, o które prosi system. Atakujący nie może wykorzystać zdobytej (podsłuchanej lub podpatrzonej) części hasła do uwierzytelnienia się do systemu. Jest to prawda wyłącznie wtedy, gdy atakujący nie ma możliwości podsłuchania większej ilości prób logowania. I tu pojawia się bardzo ciekawe pytanie - ilu?
...jak się do tego zabrać...Pierwsze podejście do rozwiązania tematu przy pomocy narzędzi matematycznych nieco mnie przerosło. Zresztą nie chodzi o wskazanie wzoru, lecz raczej o określenie rzędu wielkości. W takich przypadkach świetnie się sprawdza statystyka. W związku z tym napisałem mały skrypt, który wykonuje następujące operacje:
- generuje wszystkie możliwe maski k elementowe dla n znakowego hasła,
- losując maski (bez powtórzeń) sprawdza po ilu próbach otrzymywane jest pełne hasło,
Jest to bardzo, bardzo uproszczony model, ale na początek wystarcza. Dodatkowo przyjąłem, że długość hasła użytkownika zamyka się w zakresie od 8 do 16 znaków, natomiast sprawdzane wartości długości maski (ilość koniecznych do podania znaków z hasła) to wartości 4, 5, 6 i 7.
...wyniki...Jak wyglądają (przykładowe) wyniki pokazałem niżej. Przypominam, że są one rezultatem prostego eksperymentu opartego w znacznym stopniu na funkcji random i mogą nie odpowiadać teorii. Dla przykładu choć przy 4 znakowej masce teoretycznie wystarczą 3 próby do poznania pełnego hasła, to częściej wymagane są jednak 4 próby. W przypadku 8 znaków hasła i 4 znaków maski ta sama wartość wynikająca z eksperymentu odpowiada wartości teoretycznej i wynosi 2.
Co oznaczają poszczególne wartości? Dla każdego przypadku przeprowadzone zostało 1000 prób. Wynikiem każdej próby jest numer kroku, w którym poznane zostało pełne hasło. Wartość średnia to po prostu średnia arytmetyczna. Ile zwykle było potrzebnych prób oznacza po ilu krokach najczęściej pełne hasło zostało poznane. Wartość minimalna i maksymalna oznacza najlepszy i najgorszy przypadek, czyli minimalną i maksymalną ilość prób potrzebną do poznania pełnego hasła.
-
Hasło długości 8 znaków
-
Dla 4
- średnio 5 prób,
- zwykle 4 próby,
- minimalnie 2 próby,
- maksymalnie 13 prób,
-
Dla 5
- średnio 3 próby,
- zwykle 3 próby,
- minimalnie 2 próby,
- maksymalnie 9 prób,
-
Dla 6
- średnio 3 próby,
- zwykle 2 próby,
- minimalnie 2 próby,
- maksymalnie 6 prób,
-
Dla 7
- zawsze 2 próby (niespodzianka),
-
Dla 4
-
Hasło długości 12 znaków
-
Dla 4
- średnio 8 prób,
- zwykle 7 prób,
- minimalnie 4 próby,
- maksymalnie 22 próby,
-
Dla 5
- średnio 7 prób,
- zwykle 5 prób,
- minimalnie 3 próby,
- maksymalnie 19 prób,
-
Dla 6
- średnio 5 prób,
- zwykle 7 prób,
- minimalnie 2 próby,
- maksymalnie 17 prób,
-
Dla 7
- średnio 7 prób,
- zwykle 4 próby,
- minimalnie 2 próby,
- maksymalnie 12 prób,
-
Dla 4
-
Hasło długości 16 znaków
-
Dla 4
- średnio 13 prób,
- zwykle 11 prób,
- minimalnie 5 prób,
- maksymalnie 34 próby,
-
Dla 5
- średnio 10 prób,
- zwykle 8 prób,
- minimalnie 4 próby,
- maksymalnie 26 prób,
-
Dla 6
- średnio 8 prób,
- zwykle 7 prób,
- minimalnie 4 próby,
- maksymalnie 26 prób,
-
Dla 7
- średnio 7 prób,
- zwykle 5 próby,
- minimalnie 3 próby,
- maksymalnie 18 prób,
-
Dla 4
Co wynika z tego eksperymentu? Po pierwsze im dłuższe hasło, tym lepiej. Po drugie im krótsza maska, tym lepiej. I jednego i drugiego można się było spodziewać. Bardziej istotny jest fakt, że wartości średnie tylko przy długich hasłach i krótkich maskach przekraczają 10. Należy się spodziewać, że hasło zostanie poznane już przy 4-7 próbach. Czy to dużo? Nie. Na pewno za mało, by hasła maskowane traktować jako ochronę przed wrogim oprogramowaniem. Sprawdzać się mogą w przypadku sporadycznego korzystania z niezaufanych komputerów lub sporadycznego spotkania się ze szpiegiem podpatrującym proces wpisywania hasła, choć odnośnie tej drugiej ewentualności mam pewne wątpliwości. Dlaczego? Gdy mam wpisać "zwykłe" hasło, to wpisuje je z szybkością kilkudziesięciu znaków na minutę. W przypadku hasła maskowanego szybkość jest znacznie niższa, co według mnie poważnie ułatwia podpatrzenie wpisywanych znaków...
...ale po co pełne hasło...Wpadłem również na pomysł innego testu. Atakujący w sumie nie potrzebuje posiadania całego hasła, lecz wystarczającej ilości jego elementów, by móc prawidłowo uzupełnić kolejną maskę. Co się okazuje? Że średnio wystarczy od 3 do 5 prób, minimalnie są to 2 próby. Nawet dla długich (16 znaków) haseł i krótkich (4 znaki) masek średnio potrzebne jest do tego 5 prób, co niweluje 13 prób potrzebnych do poznania pełnego hasła.
A może by tak...Przypominam, mój model symulacji był bardzo uproszczony. Generowane były wszystkie możliwe maski, sprawdzane były losowo. Zastanawiam się, czy to ma jednak jakieś większe znaczenie. Dlaczego? Są dwie sytuacje, w których atakujący na podstawie poprzednio występujących masek, może z powodzeniem dokonać uwierzytelnienia:
- znaki potrzebne do wpisania wystąpiły we wcześniejszych maskach,
- we wcześniejszych maskach wystąpiły wszystkie znaki hasła,
Jeśli zaimplementowany zostanie mechanizm, który będzie starał się generować odległe od siebie maski, wówczas w kolejnych maskach szybciej będą wymagane wszystkie znaki hasła. Jeśli z kolei maski będą bliższe sobie (bardziej podobne), to odpytanie o wszystkie znaki hasła co prawda nastąpi później, jednak wcześniej pojawi się sytuacja, w której wszystkie znaki kolejnej maski wystąpiły we wcześniejszych próbach.
O jejku jejku!Czy to oznacza, że hasła maskowane powinny odejść do lamusa? Nie koniecznie. Są dobrym rozwiązaniem jeśli rozpatruje się je jako środek zmniejszający zagrożenie wynikające ze sporadycznego podsłuchania (podejrzenia) wpisywanego hasła. A najlepiej jest przyjąć, że w tym przypadku sporadycznie oznacza jednokrotnie i po takiej "wątpliwej" sytuacji (niezaufany komputer, ktoś obcy za plecami) zmienić hasło na nowe, oczywiście już w bezpiecznym środowisku.
Eliminujemy hasla, wprowadzamy poswiadczenia oparte na podpisanej wiadomosci etc. same zalety
Tylko developerow trzba przekonac
Ogólnie - bardzo fajna notka
Scenariusz mógłby wyglądać następująco:
- bank stawia sobie STS (usługa wystawcy kart)
- klient pobiera InfoCard ze strony banku i zapisuje w swoim systemie. Karta jest:
1/ podpisana przez Bank
2/ zawiera tylko takie informacje ktorych bank wymaga
- klient logujac sie do Banku wybiera InfoCard, opcjonalnie (ale tutaj bym tego wymagal) podaje PIN i juz jest w srodku. Karta wybierana jest w "secure desktop" (przynajmniej w obecnej implementacji), klient dokladnie widzi ktora karte wysle i jakie dane. Bank moze zweryfikowac ze jest to karta wystawiona przez niego.
Jezeli Bank wybierze OpenID to mozliwy jest scenariusz, gdzie zamiast podania hasla przy uwierzytelnieniu na serwerze OpenID zamiast hasla podawana jest odpowiednia karta (j.w.) - unikamy podania hasla, klient jest jednoznacznie uwierzytelniony i ma kontrole nad swoimi danymi.
Problemem moze byc jak narazie:
- mobilnosc: w obecnej implementacji w Windows wymagany jest import\export kart. Co prawda isteniją juz Card selectory (komponent umozliwiajacy wybor i przeslanie karty), ktore pozwalaja na wspolprace z urzadzeniami mobilinymi na przyklad przez BT.
- infrastruktura: Banki itp po prostu nie zainwestuja w tej chwili w rozwoj takich rozwiazan . Zaufanych wystawcow InfoCard jeszcze brak, z OpenID jest troche lepiej, nie wiem jednak czy na tyle zeby Banki zgodzily sie z nich korzystac.
Ale IMO w tym kierunku bedzie lezala przyszlosc.