Przejdź do treści

Wprowadzenie

Programy

Przydatne programy do łamania haseł oraz tworzenia słowników.

  1. hashcat -a <attack> -m <hash_mode> <hash> <dictionary | mask> - do łamania haseł korzystając ze słownika lub generując wszystkie możliwe kombinacje podanej maski.
  2. john [OPTIONS] [PASSWORD-FILES] - do łamania haseł podobnie jak hashcat.
  3. <file_type>2john <filename> - set narzędzi do wyciągania haszy z plików. Wyciągnięty format można wstawić równiesz do hashcat. np rar2john, zip2john, pdf2john.
  4. aircrack-ng <pcap-file-with-handshake> - do łamania haseł wifi. Konieczne jest złapanie handshake lub PKMIC data.
  5. airolib-ng <databse> <operation> [options] - prekomputacja PMKs (Pairwise Master Keys) do wykorzystania w krakowaniu kluczy WPA/WPA2.
  6. hcxtools - suite narzędzi do wyciągania haszy lub kluczy z plików pcap. Następnie można takie hasze wstawić do hashcat
    • hcxpcapngtool <options> *.* - convert pcapng, pcap and cap files to hash formats that hashcat and JtR use
    • hcxhashtool <options> - konerwsja pomiędzy formatami oraz wyciąganie haszy PKMID/EAPOL lub ESSID.
  7. crunch <min> <max> [options] - generuje słownik do ataku brute force na postawie podanych opcji.

Ważne pojęcia matematyczne

Dzielenie z resztą

Dla liczb całkowitych a i b mówimy, że przystają do siebie modulo liczby naturalnej n gdy:

n | (a - b)

czyli n dzieli różnice a i b. Pisze się wtedy:

a = b (mod n)

zapisy ten jest równoważny a = n * k + b dla k będącej liczby całkowitej. Liczba b może być wtedy resztą dizelenia.

W jęsykach programowania, takie działanie jest wykonane operatorem % który zwraca resztę dzielena a przez b: a % b.

Chińskie twierdzenie o resztach

Jeżeli liczby m1, m2, ..., mn są parami względnie pierwsze to układ kongruencji:

x = a1 (mod m1)

x = a2 (mod m2)

...

x = an (mod mn)

Ma rozwiązanie. Rozwiązanie to jest jednoznaczne modulo produkt liczb m1, m2, ..., mn.

Funkcja Eulera

Funkcja Eulera, oznaczana przez phi(n), dla n >= 1 wyznacza liczbę liczb całkowitych względnie pierwszych z n z przedziału [1,n].

Twierdzenie Eulera

Dla dowolnych liczb całkowitych a oraz liczby naturalnych n, jeżeli największy wspólny dzielnik a i n jest 1, to

a ^ phi(n) = 1 (mod n).

RSA

RSA jest systemem szyfrowania asymetrycznego, czyli jeden klucz do encrypcji (publiczny) oraz jeden, inny, do dekrypcji (prywatny).

Aby wyznaczyć klucze publiczne oraz prywatne wybieramy najpierw dwie różne liczby pierwsze p i q.

Następnie oblicza się n jako produkt liczby p z q, oraz phi(n) = (p - 1) * (q - 1).

Wybierana jesy liczba e względnie pierwsza z phi(n).

Obliczana jest odwortność modulo liczby e modulo phi(n):

ed = 1 (mod phi(n))

Para liczb (n, e) jest kluczem publicznym. Liczba d jest kluczem prywatnym.

Wiadomość m można zaszyfrować wstawiając ją do potęgi e modulo n:

c = m ^ e (mod n)

Szyfrogam c można odszyfrować wstawiając go do potęgi d modulo n:

m = c ^ d (mod n)

Algorytm ten jest uznawany za niebezpieczny.

Dodatkowe informacje

Zadania w CTFach często są matematyczne. Popularne jest wykorzystać wariację RSA którą łatwo złamać. Sposoby na to są zbyt różne, żeby je opisać. Znając natomiast metodę wykorzystaną do szyfrowania wiadomości można to złamać. Można do tego wykorzystać metodę trial and error. Polecane jest też robienie notatek na kartce.

Author

Źródła

  1. Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone. Kryptografia stosowana, WNT, Warszawa, 2005