Świat przedstawiony, czyli o czym będzie
Prosty przykład - malware, który przechwytuje wpisane hasło oraz grid, na którym pojawiają się symbole. Jest to prosta analogia do opisywanego przeze mnie już zagadnienia (nie)skuteczności haseł maskowanych (nawet załapały się do kategorii ...jest ZŁE!). Cel - określenie ile prób uwierzytelnienia potrzebuję podejrzeć, by poznać PIP.
Coś mi tu nie pasuje...
Na początku kilka rozważań. Niech siatka ma 25 pól (kwadrat o boku 5 na 5), a dostępnymi symbolami niech będą cyfry z zakresu 0-9. Ponieważ jest 10 możliwych symbolów i wystąpienie każdego z nich jest jednakowo prawdopodobne, należy oczekiwać, że na siatce każdy z dopuszczalnych symboli znajdzie się "dwa i pół" raza. Czyli tak naprawdę można oczekiwać, że dla każdej wpisywanej w "losowym haśle" wartości jest "mniej niż trzy" możliwości wystąpienia na siatce. Zakładając, że PIP ma 4 znaki (jak typowy PIN) oznacza to, że mając podpatrzoną jedną próbę uwierzytelnienia (grid i "losowe hasło) można oczekiwać około 81 możliwych PIP (pierwszą pozycję wybieramy na trzy sposoby, drugą pozycję wybieramy na trzy sposoby ..., kombinatoryka). Te rozważania są oczywiście znacznym uproszczeniem, ale obudziły we mnie podejrzenie, że cała koncepcja jest nieco naciągana.
Co się stanie, jeśli zwiększy się ilość dopuszczalnych symboli? Czy to coś poprawi? Nie, wręcz przeciwnie. Jeśli powiedzmy zamiast cyfr od 0 do 9 wprowadzi się litery od a do z co da 26 symboli (w zależności od alfabetu, ale przyjmę taką wartość), to zakładając równe prawdopodobieństwo wystąpienia każdego z symboli na siatce, okazuje się, że każdy z symboli wystąpi (prawie) raz. To oczywiście kolejne przybliżenie, ale pokazuje, że zwiększanie alfabetu dostępnych symboli nic nie daje. W tym przypadku więcej dałoby zmniejszenie ilości symboli, tylko w tym przypadku mogłoby się okazać, że ilość możliwych "losowych haseł" drastycznie spada i zamiast atakować PIP można podjąć próbę zgadywania "właściwego hasła".
Czy zmienianie zbioru symboli w poszczególnych próbach uwierzytelnienia poprawi sytuację? Nie. Mając zarówno "losowe hasło" jak i siatkę, z każdego kroku otrzymujemy listę pozycji, na których poszczególne znaki z wpisanego hasła wystąpiły. Nie interesuje mnie to, że tym razem wpisane zostało 0, a następnym ź lub "namalowany" trójkącik. Interesuje mnie tylko to, że znak 0 wystąpił w siatce na pozycjach (1,5) oraz (3,1) przyjmując "notację (x,y)".
Stopień złożoności problemu zwiększy się, jeśli zwiększona zostanie siatka, ale wówczas zmniejszy się z kolei używalność całego rozwiązania, bo w pewnej chwili zapamiętanie właściwych pól i ich późniejsze odnalezienie zacznie robić się nieco uciążliwe. Skoro w artykułach mowa jest o siatce 5x5 to pozostanę przy tym przypadku.
Nie jestem profesorem matematyki a statystyki, kombinatoryki i rachunku prawdopodobieństwa używam okazjonalnie, więc do udowodnienia, że "coś tu śmierdzi" zamiast wywodu matematycznego posłużę się eksperymentem.
Burzenie mitów
Dla uproszczenia w eksperymencie siatkę 5x5 reprezentuję jako listę 25 elementów indeksowanych od 0 do 24. Na początku generuję swój PIP, który w tym wypadku jest listą indeksów o zadanej długości (np. 5), czyli coś postaci (3,17,5,24,12). Następnie generuję "siatkę", czyli po prostu listę 25 elementów, gdzie każdy z elementów ma losową wartość z przyjętego alfabetu. Następnie na podstawie PIP i tej siatki otrzymywane jest "losowe hasło".
"Procedury łamiąca" otrzymuje na wejście "losowe hasło" oraz wykorzystaną siatkę. Tworzona jest lista zawierająca zbiory możliwych indeksów, czyli po prostu pozycje, na których poszczególne znaki z "losowego hasła" wystąpiły na siatce. Przy kolejnych krokach zapamiętywana jest część wspólna z poprzedniego i obecnego kroku, czyli na przykład jeśli znak na pierwszej pozycji w haśle wystąpił w pierwszym kroku na pozycjach (3,8,23) a w drugim na (3,25) to częścią wspólną jest oczywiście 3, czyli na podstawie dwóch próbek ustalona została pozycja pierwszego elementu w PIP.
Kilka wyników
Poniżej lista wyników dla podanych parametrów. Wyniki składają się z listy kroków i prawdopodobieństwa ich wystąpienia w próbce. Czyli na przykład 1: 0.000140 oznacza, że prawdopodobieństwo zdarzenia polegającego na tym, że po jednokrotnym podpatrzeniu "losowego hasła" i siatki można określić PIP jest ...dość marna. Ostatnia linia oznacza "najbardziej prawdopodobną wartość", przy czym oczywiście należy zaokrąglać ją w górę, bo ciężko podpatrzeć coś "dwa i pół raza". Ilość prób w symulacji to 100 000.
Dlugosc PIP: 4, siatka 5x5, alfabet: 1234567890
1: 0.000140
2: 0.422030
3: 0.495730
4: 0.073300
5: 0.007860
6: 0.000860
7: 0.000070
2.66954
Dlugosc PIP: 5, siatka 5x5, alfabet: 1234567890
2: 0.355340
3: 0.547140
4: 0.087590
5: 0.008960
6: 0.000910
2.75272
Dlugosc PIP: 10, siatka 5x5, alfabet: 1234567890
2: 0.173050
3: 0.667970
4: 0.141840
5: 0.015550
6: 0.001370
7: 0.000190
3.00467
Dlugosc PIP: 15, siatka 5x5, alfabet: 1234567890
2: 0.107000
3: 0.701530
4: 0.170370
5: 0.018970
6: 0.001900
7: 0.000200
3.10772
Jak widać dla siatki 5x5 i alfabetu 124567890 oczekiwana liczba próba to (mniej więcej) 3. Dość słabo jak na technologię, która miałaby "walczyć" z keyloggerami lub sniffingiem.
Dla porządku jeszcze kilka dodatkowych przykładów.
Dlugosc PIP: 5, siatka 5x5, alfabet: abcdefghijklmnopqrstuvwxyz
1: 0.015750
2: 0.845310
3: 0.132570
4: 0.006040
2.12824
Dlugosc PIP: 10, siatka 5x5, alfabet: abcdefghijklmnopqrstuvwxyz
1: 0.000620
2: 0.777440
3: 0.212750
4: 0.008850
5: 0.000320
2.23075
Dlugosc PIP: 15, siatka 5x5, alfabet: abcdefghijklmnopqrstuvwxyz
1: 0.000080
2: 0.724240
3: 0.263230
4: 0.011960
5: 0.000460
2.28839
Jak widać na powyższych przykładach zmiana alfabetu (zwiększenie liczby dostępnych symboli) zadziałało negatywnie, co jest zgodne z oczekiwaniami. Również zgodnie z oczekiwaniami sytuację poprawia "skrócenie" listy dopuszczalnych symboli lub powiększenie siatki.
Dlugosc PIP: 5, siatka 5x5, alfabet: ABCDEF
2: 0.052640
3: 0.568150
4: 0.303100
5: 0.063390
6: 0.010660
7: 0.001700
8: 0.000270
3.4171
Dlugosc PIP: 5, siatka 7x7, alfabet: 1234567890
2: 0.118970
3: 0.689840
4: 0.169900
5: 0.019310
6: 0.001790
7: 0.000160
8: 0.000020
3.09563
Porównując wyniki otrzymane w tym eksperymencie z wynikami otrzymanymi dla haseł maskowanych, okazuje się, że (statystycznie) hasła maskowane sprawują się tak samo dobrze, lub nawet nieco lepiej. Co do wygody rozwiązania się nie wypowiem, choć wydaje mi się, że jednak "siatka" jest trochę wygodniejsza.
I małe podsumowanie
Czy pomysł z siatką jest do niczego? To zależy do czego to rozwiązanie ma być stosowane (lub z czym porównywane). W scenariuszu "ochrony przed szpiegami" rozumianymi jako "złośliwe oprogramowanie" sprawdza się słabo. Oceny stopnia złożoności operacji "zrób zdjęcie ekranu i patrz co naciska", czyli bardziej "ludzkiego" ataku nie podejmę się. Jeśli jednak jakiś bank zastąpi hasło maskowane rozwiązaniem wykorzystującym PIP i będzie je reklamował jako bezpieczniejsze, moim zdaniem będzie to nieprawda. Keyloggery już od dawna potrafią nie tylko logować naciśnięte klawisze, ale i robić screenshoty. Jeśli ktoś będzie miał malware na stacji, z której regularnie korzysta, to zebranie 3-4 próbek potrzebnych (w badanych przypadkach) do złamania PIP, nie jest specjalnie dużym wyzwaniem.
Wczoraj Tomasz Kasprzak dał znać o systemie uwierzytelniania PassWindow. Muszę przyznać, że temat nieco mnie zaintrygował, w szczególności to, czy metoda jest rzeczywiście tak bezpieczna, jak twierdzi producent/wynalazca. Oczywiście nie byłbym sobą, gdyby
Przesłany: Sep 02, 16:23