Celem projektu było zaimplementowanie programu pozwalającego na załamanie hashu sha1. Zastosowano metodę typu brute force. Zrównoleglenia programu dokonano za pomocą MPI. Program uruchomiono na klasterze komputerowym składającym się z 13 węzłów.
Celem projektu było zaimplementowanie programu pozwalającego na załamanie hashu sha1. Zastosowano metodę typu brute force. Zrównoleglenia programu dokonano za pomocą MPI. Program uruchomiono na klasterze komputerowym składającym się z 13 węzłów.
\section{Algorytm brute force }
\section{Algorytm brute force }
Algorytm brute force, inaczej algorytm siłowy. Ten algorytm opiera się na sukcesywnym sprawdzaniu wszystkich możliwych kombinacji w poszukiwaniu rozwiązania problemu. Nie skupia się na jego szczegółowej analizie. Zwykle jest to nieoptymalna metoda, jednak jst prosta w do zaimplementowania. Teoretycznie pozwala ona złamać każde hasło. praktycznie, w zależności od skomplikowania hasła, może to być bardzo długi czas (np. dłuższy niż istnieje Wszechświat). W zależności od kontekstu, w którym termin brute force zostaje użyty, może mieć on nieznacznie różne definicje. Meoda brute-force może być przeprowadzony wobec prawie wszystkich szyfrów symetrycznych i szyfrów asymetrycznych.
Algorytm brute force, inaczej algorytm siłowy. Ten algorytm opiera się na sukcesywnym sprawdzaniu wszystkich możliwych kombinacji w poszukiwaniu rozwiązania problemu. Nie skupia się na jego szczegółowej analizie. Zwykle jest to nieoptymalna metoda, jednak jest prosta w do zaimplementowania. Teoretycznie pozwala ona złamać każde hasło. praktycznie, w zależności od skomplikowania hasła, może to być bardzo długi czas (np. dłuższy niż istnieje Wszechświat). W zależności od kontekstu, w którym termin brute force zostaje użyty, może mieć on nieznacznie różne definicje. Metoda brute-force może być przeprowadzony wobec prawie wszystkich szyfrów symetrycznych i szyfrów asymetrycznych.
\section{SHA-1}
\section{SHA-1}
SHA-1 (Secure Hash Algorithm) jest jednokierunkową funkcją hashującą zaprojektowaną przez National Security Agency (NSA) i opublikowaną przez National Institute of Standards and Technology (NIST. Wytwarza ona skrót o długości 160 bitów z wiadomości o dowolnym rozmiarze, nie większym niż pow(2,64) bitów. Funkcja SHA-1 jest
SHA-1 (Secure Hash Algorithm) jest jednokierunkową funkcją hashującą zaprojektowaną przez National Security Agency (NSA) i opublikowaną przez National Institute of Standards and Technology (NIST. Wytwarza ona skrót o długości 160 bitów z wiadomości o dowolnym rozmiarze, nie większym niż ${}2^{64}$ bitów. Funkcja SHA-1 jest
oparta na zasadach podobnych, do użytych przez profesora Ronalda L. Rivesta z MIT przy projektowaniu funkcji hashujących MD4 i MD5, i w znacznym stopniu naśladuje te algorytmy. Oryginalna specyfikacja tego algorytmu została opublikowana w 1993 roku jako Secure Hash Standard, FIPS PUB 180. Ta wersja jest teraz często nazywana jako SHA-0. Była ona wycofana przez NSA krótko po publikacji i zastąpiona przez poprawioną wersję
oparta na zasadach podobnych, do użytych przez profesora Ronalda L. Rivesta z MIT przy projektowaniu funkcji hashujących MD4 i MD5, i w znacznym stopniu naśladuje te algorytmy. Oryginalna specyfikacja tego algorytmu została opublikowana w 1993 roku jako Secure Hash Standard, FIPS PUB 180. Ta wersja jest teraz często nazywana jako SHA-0. Była ona wycofana przez NSA krótko po publikacji i zastąpiona przez poprawioną wersję
opublikowaną w 1995 roku w FIPS PUB 180-1 i nazwaną SHA-1.
opublikowaną w 1995 roku w FIPS PUB 180-1 i nazwaną SHA-1.
Program został napisany w języku c++. Wykorzystana implementacja MPI to MPICH2. Zastosowany w programie algorytm jest algorytmem siłowym. Najpierw generuje hasło, potem oblicza z niego sha1 i porównuje z hashem podanym jako argument programu. Gdy są takie same program wypisuje hasło oraz czas obliczeń. Jeśli nie są zgodne wtedy próbuje szczęścia z kolejnym hasłem. Dla potrzeb tego projektu dokonano kilku założeń dotyczących hasła:
Program został napisany w języku C++. Wykorzystana implementacja MPI to MPICH2. Zastosowany w programie algorytm jest algorytmem siłowym. Najpierw generuje hasło, potem oblicza z niego sha1 i porównuje z hashem podanym jako argument programu. Gdy są takie same program wypisuje hasło oraz czas obliczeń. Jeśli nie są zgodne wtedy próbuje szczęścia z kolejnym hasłem. Dla potrzeb tego projektu dokonano kilku założeń dotyczących hasła:
\begin{lista}
\begin{lista}
\item Hasło może mieć długość od 2 do 10 znaków.
\item Hasło może mieć długość od 2 do 10 znaków.
@ -235,7 +235,7 @@ Hasło są przydzielane do procesów kolejno, czyli dla n-ty proces otrzymuje n-
W programie istnieje pewnego rodzaju ograniczenie co do ilości znaków z których generowane jest hasło. Powinna to być liczba typu ${}2^{n}$ (w tym projekcie jest to 64). Wynika to z tego, że główny licznik pętli odpowiedzialnej za generowanie haseł operuje przepełnieniem bitowym. Możliwość użycia innej niż ${}2^{n}$ liczby znaków nie pozostała by bez wpływu na szybkość całego programu.
W programie istnieje pewnego rodzaju ograniczenie co do ilości znaków z których generowane jest hasło. Powinna to być liczba typu ${}2^{n}$ (w tym projekcie jest to 64). Wynika to z tego, że główny licznik pętli odpowiedzialnej za generowanie haseł operuje przepełnieniem bitowym. Możliwość użycia innej niż ${}2^{n}$ liczby znaków nie pozostała by bez wpływu na szybkość całego programu.
Funkcja generująca hash SHA-1 została zaimplementowana przez autorów. W stopniu na jaki pozwalały umiejętność autorów została również zoptymalizowana pod katem jak najszybszego wykonania.
Funkcja generująca hash SHA-1 została zaimplementowana przez autorów. W stopniu na jaki pozwalały umiejętność autorów została również zoptymalizowana pod kątem jak najszybszego wykonania.