Projekt z przedmiotu: Aplikacje internetowe i rozproszone TEMAT: Łamanie haseł str. 0
Spis Treści: 0. Skład zespołu i ostateczny podział obowiązków str. 2. 1. Temat - str. 2 2. Uzasadnienie biznesowe - str. 2-3 3. Technologie str. 3 4. Funkcjonalności podstawowe str. 3 5. Funkcjonalności rozszerzone str. 4 6. Przypadki użycia oraz diagramy czynności str. 5-7 7. Algorytmy str. 8-10 8. Testy wydajnościowe str. 11-15 9. Ostateczna wersja programu str. 16-19 str. 1
0. Skład zespołu i ostateczny podział obowiązków: Szef grupy: Krzysztof Gruszewski Komunikacja MPI, Testy wydajnościowe: Marek Sobczuk, Mateusz Borowicz Interface/Algorytm Brute Force(rekurencyjnie): Maciej Gustowski Metoda inteligentna/słownikowa: Maciej Golec Algorytm Brute Force/funkcjonalności dodatkowe: Mikołaj Porębny 1. Temat. Zadaniem naszego projektu jest napisanie aplikacji umożliwiającej złamanie/odkrycie pojedynczego hasła, zadanego zbioru zaszyfrowanych haseł, lub połączeniu hasła z login em. 2. Uzasadnienie biznesowe. str. 2 Problem łamania haseł ma już szeroką gamę rozwiązań, jednak jest on dobrym przykładem mogącym obrazować współpracę kilku jednostek komputerowych. Trudno pokusić się o nowe innowacyjne rozwiązania problemu, jednak w naszej pracy postanowiliśmy skupić się na czymś innym. Oczywiście nie rezygnujemy od razu z dodatkowych funkcjonalności, czy pomysłów. Korzystając z takich metod jak metoda słownikowa, czy metoda brute force, rozdzielimy dane zadanie na procesy, które zostaną przydzielone konkretnym jednostkom. Naszym podstawowym zadaniem będzie opracowanie prostej w użyciu, sprawnie działającej aplikacji, która pozwoli na wykorzystanie
skutecznie działających metod(metoda brute force, będzie używana jedynie w przypadkach beznadziejnych [np. gdy hasło generowane jest losowo], lub gdy wszystkie inne metody zawiodą), oraz optymalizacje samego rozdzielania zadań na procesy. Trudno oczywiście o to, żeby nasz program został użyty w celu choćby złamania hasła danego użytkownika na serwisie społecznościowym. Podstawowe funkcjonalności pomogą jednak np. w odkrycie hasła do archiwum.rar czy.zip, a rozszerzone pomogą użytkownikowi w przypomnieniu sobie zapomnianego hasła. 3. Technologie Pakiet Microsoft Office 2007 Visual Paradigm MySQL Workbench Wamp Server MPICH2 - taka sam wersja na wszystkich hostach Python - taka sam wersja na wszystkich hostachch PsPAD - kompilator do pythona Hamachi 2.1.0.166 VLAN 4. Funkcjonalności podstawowe I. Wybór problemu: a) Łamanie hasła o danym rozmiarze, z danym alfabetem znaków b) Łamanie hasła o nieznanym rozmiarze, z danym alfabetem znaków c) Łamanie hasła o nieznanym rozmiarze i nieokreślonym alfabecie d) Łamanie hasła i login u II. Wybór metody: a) Metoda Brute Force b) Metoda Słownikowa str. 3
III. Rekomendowane użycie programu(dla nieznanego rozmiaru i alfabetu znaków, za pomocą wszystkich metod) 5. Funkcjonalności rozszerzone. I. Podprogram pomagający przy pomocy pytań zadawanych użytkownikowi, przypomnienie sobie hasła(np. do konta e- mail owego)** *przed przystąpieniem do działania konkretnego algorytmu, sprawdzanemu będą statystycznie najczęściej używane hasła( qwe, 1234321 ), następnie będą sprawdzane hasła w jakiś sposób połączone z loginem jeśli taki jest znany(np. jeśli login = kowalski666, to na początku zostanie sprawdzony sam login jako hasło, następnie jego wariacje[np. w przypadku serwisu EdukacjaWeb kowalsk666i ), następnie metoda słownikowa z zestawem cyfr wykorzystanym w loginie, itp.( )wszystko do uzgodnienia. **ludzka pamięć jest zawodna, problem zapominania haseł jest dosyć powszechny, zapisywanie ich w jakimkolwiek miejscu niesie za sobą pewne ryzyko, stąd też taki pomysł. Przykład działania: jeśli użytkownik programu pamięta hasła do innych serwisów, aplikacji, itp. możliwe ze zapomniane hasło jest jednym z nich. Możemy wymyśleć aplikacja, która spróbuje połączyć hasło z imieniem zmarłego kota, pierwszej miłości, zawodnika nba czy czegokolwiek innego. Tym jednak proponuje zająć się później. str. 4
6. PRZYPADKI UŻYCIA ORAZ DIAGRAMY CZYNNOŚCI Rys.1 Przypadki użycia str. 5
Rys.2. Diagram czynności : Rekomendowane użycie metody str. 6
Rys.3 Diagram czynności: Przypominanie hasła str. 7
ALGORYTMY ALGORYTM BRUTE FORCE: Rys.4 Główny schemat działania dla algorytmu brute force str. 8
Rys.5 Zasada działania rekurencji str. 9
ALGORYTM SŁOWNIKOWY: Rys.6 Główny schemat działania dla algorytmu słownikowego str. 10
TESTY WYDAJNOŚCIOWE: Testy zostały wykonane w oparciu o najbardziej podstawową, najwcześniejszą, działającą wersję aplikacji w oparciu o dwie jednostki sprzętowe. Przed samym przystąpieniem do testów wypróbowaliśmy kilka konfiguracji między jednostkami z danymi systemami operacyjnymi. Konfiguracje między systemami operacyjnymi jednostek: 1. Linux + WinXP = masakra 2. Linux + Win7 = masakra 3. WinXP + WinXP = jest dobrze 4. Win7 + WinXP = jest dobrze 5. Win7 + Win7 = jest dobrze 6. Mac + Mac =? 7. Mac +? =? Testy wydajnościowe zostały przeprowadzone na dwóch jednostkach roboczych o konfiguracjach: Jednostka 1: Windows 7 32 3Gb RAM Intel Core 2 DUo CPU P8400 @ 2.27 GHz Jednostka 2: Windows 7 32 2 Gb RAM Intel Core 2 DUo CPU T7400 @ 2.16 GHz str. 11
Metoda Słownikowa Ponieważ dla metody słownikowej uzależnienie testu od długości hasła nie miało sensu, został przeprowadzony tylko jeden test, w którym uzależniliśmy wynik od ilości wątków. Dla każdej ilości wątków test został przeprowadzony dwukrotnie. Jeśli wyniki różniły się od siebie nieznacznie(przyjęliśmy, że nieznacznie oznacza, że wartość bezwzględna różnicy będzie wynosić mniej niż 20% niższego pomiaru). Przebieg testu: Wnioski: Jak widać na wykresie, dla dwóch jednostek roboczych, najlepszy wynik został osiągnięty dla 5 wątków. Warto zwrócić uwagę, że największa amplituda pomiędzy wartościami wystąpiła między jednym a dwoma wątkami, najmniejsza natomiast w okolicy ekstremum naszej funkcji(czyli między czwartym, a piątym, oraz piątym a szóstym). str. 12
Metoda Brute Force W przypadku algorytmu Brute force sytuacja miała się już trochę inaczej. Wymogiem przeprowadzenia testu było oczywiście uzależnienie od długości hasła. Testy zostały przeprowadzone na tych samych zasadach co w przypadku metody słownikowej. Przebieg testów: Dla dł. 3: str. 13
Dla dł. 4: Dla dł. 5: str. 14
Wnioski: Jak łatwo zauważyć, kształt wykresu dla algorytmu Brute force jest zbliżony do kształtu wykresy dla algorytmu słownikowego. Ciekawym spostrzeżeniem jest fakt, iż jest on bardziej wyraźny dla wyższych rozmiarów hasła. Należy zwrócić w tym przypadku uwagę na wartość amplitudy pomiędzy czasem dla 1 wątku, a czasem dla optymalnej ilości wątków(dla dł. 3,4,5 są to kolejno: 2,4,7 wątków). Można wysnuć z tego oczywisty wniosek, że ilość wątków musi być proporcjonalna do długości hasła. Informację to wykorzystaliśmy oczywiście w ostatecznej wersji naszej aplikacji. Ostatnim wnioskiem jest fakt iż należy wystrzegać się ilości wątków ponad wartością optymalną. Chociaż po pojedynczej inkrementacji różnica między czasem dla ilości optymalnej, a ilości optymalnej podniesionej o jeden jest niewielka, to należy zwrócić uwagę na to, iż różnice pomiędzy sąsiednimi wartościami stają się coraz wyższe. Ostatecznie prowadzi to do odkrytej przez nas anomalii czasowej(np. dla długości 5, czas dla 14 wątków równał się niecałe 30s, natomiast dla 15 wątków skoczył nagle do wartości ponad 400s). Początkowo trudno było nam nawet odkryć granicę tej anomalii, ponieważ dla wyższej ilości wątków(najwyższe przez nas testowana ilość to 25), program powodował zawieszenie systemu. str. 15
Ostateczna wersja programu Wśród podstawowych funkcjonalności opartych na bazie danych znajdują się: Rejestracja nowego użytkownika: Logowanie do systemu: str. 16
O ile w pierwszej, konsolowej wersji programu sam użytkownik mógł ustalać liczbę procesów, w wersji ostatecznej oparliśmy się na wykonanych przez nas testach. Dlatego dla metody słownikowe, tak jak i metody Brute force liczba procesów jest znaleziona przez nas wartością optymalną. Zależność występuje niestety tylko dla 2 hostów i danej długości hasła. Dla większych wartości zgodnie z zasadami logiki przyjęliśmy: dla metody słownikowej rozdział dzielony(dla dwóch hostów po 5, więc mamy w sumie 10 wątków, stąd dla 3 hostów mamy podłogę z 10/3 = 3, dla 10/4 = 2, itd.) dla metody brute force, ponieważ nie odnaleźliśmy dokładnej funkcji wyznaczającej optymalną ilość procesów, ustaliliśmy, że zgodnie z następnymi wyrazami funkcji 2,4,7, przyjęliśmy regułę: an = an-1 + bn gdzie: a jest daną wartością optymalną pierwsze a =1 n jest rozmiarem hasła(1,2, ) b jest danym krokiem inkrementacyjnym zmieniającym się o wartość podniesioną o jeden względem poprzedniej(będzie to więc kolejno(1,2,3,4, ). str. 17
Sam wzór zlecenia zadania przyjął formę: 1. Wybranie metody i parametrów: 2. Ograniczenie alfabetu(opcjonalnie): str. 18
3. Monitorowanie zlecenia: Na końcu jako lekko humorystyczną opcjonalność dodatkową stworzyliśmy password guide dla nowych użytkowników komputerów: str. 19