nowa wersja najstarszego wspieranego programu do łamania haseł (projekt rozwija się od 1996 roku). Od wydania poprzedniej wersji 1.8.0-jumbo-1 minęło 4,5 roku, w trakcie których wprowadzono ponad 6000 zmian (git commits) od ponad 80 deweloperów. Dzięki , której stan utrzymywał się stabilny mimo wprowadzanych zmian. Podstawowy kod projektu jest objęty licencją GPLv2+, a kod niektórych komponentów licencją BSD. Cechą nowej wersji jest dodanie wsparcia dla FPGA (obok CPU, GPU i Xeon Phi). Dla płyt
, które zawierają 4 chipy FPGA i były pierwotnie używane głównie do wydobywania Bitcoin, teraz wprowadzono 7 typów haseł: bcrypt, klasyczny descrypt (w tym bigcrypt), sha512crypt, sha256crypt, md5crypt (w tym Apache apr1 i AIX smd5), Drupal7 oraz phpass (stosowany m.in. w WordPress). Niektóre z nich są realizowane na FPGA po raz pierwszy. Dla bcrypt osiągnięta wydajność to ~119k c/s przy 2^5 iteracjach („$2b$05”) z mocą pobieraną wynoszącą ~27 watów, co znacząco przewyższa wyniki dla najnowszych GPU w przeliczeniu na płytę, cenę sprzętu i watt. Wspierane są również
płyty tego typu, co zostało sprawdzone aż do 16 płyt (64 chipy FPGA) kontrolowanych z jednego Raspberry Pi 2. Wspierana jest standardowa funkcjonalność John the Ripper, w tym wszystkie tryby łamania haseł oraz jednoczesne ładowanie dużej liczby hashy. Aby przyspieszyć działanie wprowadzono zastosowanie maski (tryb „—mask”, w tym w połączeniu z innymi trybami) i porównywanie obliczonych hashy z załadowanymi po stronie FPGA. Z punktu widzenia realizacji, w wielu projektach (na przykład dla
Inne ważne zmiany: ) zastosowano bloków z wielowątkowymi rdzeniami procesorów (soft CPU cores), współdziałającymi z rdzeniami kryptograficznymi. Rozwój tej funkcjonalności prowadził Denis Burykin we współpracy z innymi programistami jumbo.
Inne ważne zmiany:
- Wsparcie dla dużej liczby dodatkowych typów skrótów, szyfrowania, itd., w tym zarówno klasycznych skrótów haseł (na przykład od nowych wersji QNX), jak i portfeli kryptowalut, szyfrowanych archiwów oraz szyfrowanych systemów plików (na przykład Bitlocker i FreeBSD geli), a także wsparcie dla nowych rodzajów formatów, które były wcześniej obsługiwane (na przykład dodano wsparcie dla bcrypt-pbkdf dla OpenBSD softraid) i wiele innych. Łącznie dodano 80 formatów na CPU i 47 na OpenCL. Łączna liczba formatów wynosi teraz 407 na CPU (lub 262, nie wliczając „dynamicznych” formatów, konfigurowanych z plików konfiguracyjnych) oraz 88 na OpenCL.
- Rezygnacja z obsługi języka CUDA na rzecz OpenCL, co wcale nie przeszkadza w pełnym wykorzystaniu GPU od NVIDIA (a wręcz pomaga, dzięki skoncentrowaniu rozwoju i optymalizacji na jednej implementacji każdego formatu pod GPU, zamiast dwóch implementacji wcześniej).
- Wsparcie dla nowych zestawów instrukcji SIMD — AVX2, AVX-512 (w tym dla drugiej generacji Xeon Phi) i MIC (dla pierwszej generacji) — a także bardziej uniwersalne i pełne wykorzystanie SIMD w realizacjach wielu formatów, w tym zastosowanie wcześniej wspieranych zestawów instrukcji aż do AVX i XOP na x86(-64) oraz
NEON, ASIMD i AltiVec na ARM, Aarch64 i POWER, odpowiednio. - Liczne optymalizacje dla CPU i OpenCL, zarówno dla bardziej efektywnej pracy z dużą ilością skrótów jednocześnie (np. testowano obciążenie 320 milionami skrótów SHA-1 na GPU), jak i dla zwiększenia prędkości obliczania skrótów. Część z tych optymalizacji jest uniwersalna, część obejmuje różne podzbiory formatów, a wiele jest specyficznych dla poszczególnych formatów.
- (Auto-)konfiguracja optymalnego buforowania sprawdzanych haseł na CPU („—tune=auto —verbosity=5”) oraz optymalnych rozmiarów zadań na OpenCL (włączone domyślnie), z uwzględnieniem wolnego osiągania pełnej częstotliwości roboczej GPU serii NVIDIA GTX 10xx i nowszych. Użycie rzeczywiście załadowanych skrótów i rzeczywistej długości sprawdzanych haseł (gdy znana jest z góry) dla takiej auto-konfiguracji.
- Dodanie kompilatora „dynamicznych wyrażeń”, podawanych bezpośrednio w wierszu poleceń i realizujących nowe hybrydowe typy skrótów, na przykład „—format=dynamic=’sha1(md5($p).$s)'”, obliczanych na CPU przy użyciu SIMD. Jako składniki takich wyrażeń obsługiwanych jest dziesiątki szybkich skrótów (od popularnych jak MD5 do umiarkowanie egzotycznych jak Whirlpool), łączenie podciągów, kodowanie i dekodowanie, konwersja rejestru znaków, odniesienia do hasła, soli, nazwy użytkownika i stałych łańcuchowych.
- Usunięcie niepożądanych różnic w stosunku do hashcat, w tym wsparcie wcześniej specyficznych dla hashcat zasad (polecenia zasad listy słów), przejście na numerację urządzeń OpenCL od 1, stosowanie domyślnie tych samych długości haseł (zazwyczaj długość 7) podczas testów wydajnościowych.
- Nowe tryby generowania weryfikowanych haseł (tryby łamania), w tym PRINCE z hashcat (tworzy „frazy”, łącząc kilka słów w porządku rosnącej długości całkowitej), podzbiory (dobierają hasła z niewystarczającą liczbą różnych symboli, nawet jeśli te symbole pochodziły z dużego zbioru możliwych) oraz hybrydowe zewnętrzne (pozwala zewnętrznym trybom, opisanym w plikach konfiguracyjnych w języku podobnym do C, generować wiele weryfikowanych haseł w oparciu o każde podstawowe „słowo”, pochodzące z innego trybu). Ponadto kilka nowych predefiniowanych zewnętrznych trybów.
- Dodatkowe możliwości wykorzystania kilku trybów jednocześnie (jeden na drugim — stacking), a także dla takiego wykorzystania zestawów zasad (stacking zasad listy słów).
- Udoskonalenia trybów mask (stopniowe rozwijanie maski w określonym zakresie długości, stosowanie maski po stronie urządzenia OpenCL lub płyty FPGA) oraz single crack (rozsądne zachowanie na urządzeniach obliczających dużą liczbę hashy równolegle, na co wcześniej w tym trybie brakowało weryfikowanych haseł, jak również ograniczenia dotyczące zużycia pamięci).
- Wiele ulepszeń wsparcia dla Unicode i innych kodowań w różnych podsystemach.
- Wiele ulepszeń programów *2john (konwertujących pliki różnych formatów na
potrzeby john), szczególnie wpapcap2john (przetwarza ruch WiFi). - Wiele nowych opcji wiersza poleceń, ustawień w john.conf, opcji skryptu configure oraz powiązanych nowych funkcji, z których nie wszystkie udało się tutaj wymienić.
- Poprawa jakości kodu dzięki wbudowanej obsłudze wersji debug, w tym AddressSanitizer (wcześniej) oraz UndefinedBehaviorSanitizer (dodane), wdrożeniu wbudowanego fuzzera formatów (w ramach GSoC 2015), oraz zastosowaniu ciągłej integracji (kompilacje dla dziesiątek kombinacji systemu operacyjnego i kompilatora oraz testowanie poprawnej obsługi wszystkich formatów).
Źródło: opennet.ru
