Cechą szczególną nowej wersji jest pojawienie się obsługi FPGA (oprócz procesora, karty graficznej i Xeon Phi). Do desek
W przypadku bcrypt osiągnięta wydajność ~119 tys. c/s przy 2^5 iteracjach („2b$05”) przy zużyciu energii ~27 watów znacznie przewyższa wyniki dla najnowszych procesorów graficznych na płytę, cenę sprzętu i wat . Obsługiwane również
Aby przyspieszyć pracę, zaimplementowaliśmy wykorzystanie maski (tryb „-maska”, także w połączeniu z innymi trybami) i porównanie wyliczonych skrótów z tymi ładowanymi po stronie FPGA. Z realizacyjnego punktu widzenia wiele projektów (np.
Inne ważne zmiany:
- Obsługa dużej liczby dodatkowych typów skrótów, szyfrów itp., w tym zarówno klasycznych skrótów haseł (np. z nowych wersji QNX), jak i portfeli kryptowalut, zaszyfrowanych archiwów i zaszyfrowanych systemów plików (np. Bitlocker i FreeBSD geli), a także obsługę nowych typów formatów obsługiwanych wcześniej (na przykład dodano obsługę bcrypt-pbkdf dla oprogramowania OpenBSD) i wiele więcej. W sumie dodano 80 formatów na procesorze i 47 na OpenCL. Całkowita liczba formatów wynosi obecnie 407 na procesorze (lub 262, nie licząc formatów „dynamicznych” skonfigurowanych z plików konfiguracyjnych) i 88 na OpenCL.
- Odmowa wsparcia języka CUDA na rzecz OpenCL, co w żaden sposób nie przeszkadza w pełnym wykorzystaniu procesorów graficznych NVIDIA (a nawet pomaga, dzięki skupieniu rozwoju i optymalizacji na jednej implementacji każdego formatu dla GPU zamiast na dwóch dotychczasowych implementacjach).
- Obsługa nowych zestawów instrukcji SIMD - AVX2, AVX-512 (w tym dla Xeon Phi drugiej generacji) i MIC (dla pierwszej generacji) - a także bardziej uniwersalne i pełne wykorzystanie SIMD w implementacjach wielu formatów, w tym z wykorzystaniem wcześniej obsługiwane zestawy instrukcji do AVX i XOP na x86(-64) i
NEON, ASIMD i AltiVec odpowiednio na ARM, Aarch64 i POWER. - Liczne optymalizacje dla procesora i OpenCL, zarówno w celu wydajniejszej pracy z dużą liczbą skrótów jednocześnie (na przykład testowano ładowanie 320 milionów skrótów SHA-1 na GPU), jak i w celu zwiększenia szybkości obliczeń skrótu. Niektóre z tych optymalizacji są uniwersalne, inne obejmują różne podzbiory formatów, a wiele z nich jest specyficznych dla poszczególnych formatów.
- (Auto)konfiguracja optymalnego buforowania sprawdzanych haseł na CPU („—tune=auto —verbosity=5”) i optymalnych rozmiarów zadań na OpenCL (domyślnie włączone), w tym uwzględnienie powolnego narastania do pełnej częstotliwości roboczej procesorów graficznych z serii NVIDIA GTX 10xx i nowszych. Używanie faktycznie załadowanych skrótów i rzeczywistej długości sprawdzanych haseł (jeśli jest znana z góry) do takiego automatycznego dostrajania.
- Dodanie kompilatora dla „wyrażeń dynamicznych” określonych bezpośrednio w wierszu poleceń i zaimplementowanie nowych hybrydowych typów skrótu, na przykład „-format=dynamic='sha1(md5($p).$s)'”, obliczanych na procesorze przy użyciu SIMD . Jako składniki takich wyrażeń obsługiwane są dziesiątki szybkich skrótów (od popularnych, takich jak MD5 do umiarkowanie egzotycznych, takich jak Whirlpool), łączenie podciągów, kodowanie i dekodowanie, konwersja wielkości liter, odniesienia do hasła, soli, nazwy użytkownika i stałych łańcuchowych.
- Eliminacja niepożądanych różnic w stosunku do hashcat, w tym obsługa reguł wcześniej specyficznych dla hashcat (polecenia reguł listy słów), przejście na numerację urządzeń OpenCL od 1, domyślne użycie tych samych długości haseł (zwykle długość 7) w testach wydajnościowych.
- Nowe tryby generowania weryfikowalnych haseł (tryby łamania), w tym PRINCE z hashcat (tworzy „frazy” łącząc kilka słów w kolejności rosnącej całkowitej długości), podzbiory (wywołuje hasła z niewystarczającą liczbą różnych znaków, nawet jeśli te znaki pochodzą z dużego zestawu możliwych) i hybrydowe zewnętrzne (pozwala trybom zewnętrznym, opisanym w plikach konfiguracyjnych w języku podobnym do C, na generowanie wielu weryfikowalnych haseł na podstawie każdego podstawowego „słowa” otrzymanego z innego trybu). Ponadto kilka nowych predefiniowanych trybów zewnętrznych.
- Dodatkowe możliwości jednoczesnego korzystania z kilku trybów (jeden na drugim - układanie w stosy), a także korzystania z zestawów reguł (stosowanie reguł listy słów).
- Ulepszenia trybów maski (stopniowe rozciąganie maski w określonym zakresie długości, nałożenie maski z boku urządzenia OpenCL lub płytki FPGA) i pojedynczego pęknięcia (rozsądne zachowanie na urządzeniach obliczających dużą liczbę skrótów równolegle , dla których wcześniej w tym trybie nie było wystarczającej liczby weryfikowalnych haseł, a także ograniczeń w zużyciu pamięci).
- Wiele ulepszeń w obsłudze Unicode i innych kodowań w różnych podsystemach.
- Wiele ulepszeń programów *2john (konwertujących pliki w różnych formatach do
używaj z Johnem), zwłaszcza wpapcap2john (obsługuje ruch Wi-Fi). - Istnieje wiele nowych opcji wiersza poleceń, ustawień w john.conf, konfiguracji opcji skryptu i odpowiednich nowych funkcji, z których nie wszystkie zostały tutaj wymienione.
- Poprawa jakości kodu dzięki wbudowanej obsłudze kompilacji debugowania za pomocą AddressSanitizer (poprzednio) i UnknownBehaviorSanitizer (dodano), dodanie wbudowanego fuzzera formatu (w ramach GSoC 2015), wykorzystanie ciągłej integracji (kompilacje dla kilkudziesięciu systemów operacyjnych i kompilatorów kombinacje i testowanie ich pod kątem prawidłowej obsługi wszystkich formatów).
Źródło: opennet.ru