Lansată o nouă versiune a celei mai vechi programe de recuperare a parolelor, John the Ripper 1.9.0-jumbo-1. (Proiectul a fost dezvoltat din 1996.) Pe pagina proiectului sunt disponibile pentru descărcare sursele, precum și versiunile precompilate pentru Windows.
Se menționează că au trecut 4,5 ani de la lansarea versiunii 1.8.0-jumbo-1, timp în care au fost efectuate mai mult de 6000 de modificări (git commits) de către peste 80 de dezvoltatori. În această perioadă, dezvoltatorii au recomandat utilizarea versiunii curente de pe GitHub, a cărei stare a fost menținută stabilă, în ciuda modificărilor, datorită integrării continue, care include o verificare preliminară a fiecărei modificări (pull request) pe multe platforme. O caracteristică a noii versiuni este suportul pentru FPGA (circuit integrat de logică programabilă) pe lângă CPU, GPU și Xeon Phi.
Pentru plăci ZTEX 1.15y, care conțin câte 4 cipuri FPGA și folosite inițial în principal pentru mineritul Bitcoin, acum sunt implementate 7 tipuri de hash pentru parole: bcrypt, descrypt clasic (inclusiv bigcrypt), sha512crypt, sha256crypt, md5crypt (inclusiv Apache apr1 și AIX smd5), Drupal7 și phpass (folosit în special în WordPress). Unele dintre acestea sunt implementate pe FPGA pentru prima dată. Pentru bcrypt, performanța obținută de ~119k c/s la 2^5 iterații („$2b$05”) cu un consum de aproximativ 27 de wați depășește semnificativ rezultatele pentru cele mai recente GPU-uri în raport cu placa, prețul echipamentului și consumul de energie. De asemenea, sunt acceptate clustere din acest tip de plăci, lucru testat cu până la 16 plăci (64 FPGA), controlate de un singur Raspberry Pi 2. Se menține funcționalitatea obișnuită a John the Ripper, inclusiv toate modurile de recuperare a parolelor și încărcarea simultană a unui număr mare de hash-uri. Pentru a accelera lucrările, este implementată utilizarea măștii (modul „—mask”, inclusiv în combinație cu alte moduri) și compararea hash-urilor calculate cu cele încărcate pe FPGA. Din punct de vedere al implementării, în multe dintre designuri (de exemplu, pentru sha512crypt și Drupal7) au fost utilizate blocuri formate din nuclee procesor multithreading, interacționând cu nuclee criptografice. Dezvoltarea acestei funcționalități a fost realizată de Denis Burykin în coordonare cu alți dezvoltatori jumbo.
Alte modificări importante:
- Suport pentru un număr mare de tipuri suplimentare de hash-uri, algoritmi de criptare etc., inclusiv atât hash-uri clasice de parole (de exemplu, din versiunile recente QNX), cât și portofele de criptomonede, arhive criptate și sisteme de fișiere criptate (de exemplu, Bitlocker și FreeBSD geli), precum și suport pentru noi tipuri de formate, deja susținute anterior (de exemplu, suport adăugat pentru bcrypt-pbkdf pentru OpenBSD softraid) și multe altele. În total, au fost adăugate 80 de formate pe CPU și 47 pe OpenCL (iar un număr mic de formate vechi au fost eliminate, fiind integrate în cele noi și învechite). Numărul total de formate este acum 407 pe CPU (sau 262 fără a include formatele „dinamice”, configurabile din fișierele de configurare) și 88 pe OpenCL.
- Renunțarea la suportul pentru limbajul CUDA în favoarea OpenCL nu împiedică utilizarea deplină a GPU-urilor NVIDIA (ba chiar ajută, datorită concentrării dezvoltării și optimizărilor pe o singură implementare pentru fiecare format pe GPU, în loc de două implementări ca înainte).
- Suport pentru noi seturi de instrucțiuni SIMD — AVX2, AVX-512 (inclusiv pentru a doua generație Xeon Phi) și MIC (pentru prima generație) — precum și utilizare mai universală și completă a SIMD în implementările multor formate, incluzând utilizarea seturilor de instrucțiuni deja susținute, inclusiv AVX și XOP pe x86(-64) și
NEON, ASIMD și AltiVec pe ARM, Aarch64 și POWER, respectiv. (Parțial în cadrul GSoC 2015.) - Numeroase optimizări pentru CPU și OpenCL, atât pentru o funcționare mai eficientă cu un număr mare de hash-uri simultan (de exemplu, a fost testată încărcarea a 320 de milioane de hash-uri SHA-1 pe GPU), cât și pentru creșterea vitezei de calcul a hash-urilor. O parte din aceste optimizări sunt universale, iar cealaltă parte acoperă diferite submulțimi de formate, multe fiind specifice pentru anumite formate.
- (Auto-)setarea optimă a tamponării parolelor verificate pe CPU ("—tune=auto —verbosity=5") și a dimensiunilor optime ale sarcinii pe OpenCL (inclusă în mod implicit), având în vedere și timpul mai lung necesar pentru atingerea frecvenței complete de operare a GPU-urilor din seria NVIDIA GTX 10xx și mai noi. Utilizarea hash-urilor cu încărcare reală și a lungimii reale a parolelor verificate (atunci când aceasta este cunoscută în prealabil) pentru o astfel de auto-setare.
- Adăugarea unui compilator pentru „expresii dinamice”, specificate direct în linia de comandă și implementând noi tipuri hibride de hash-uri, cum ar fi "—format=dynamic=’sha1(md5($p).$s)’", calculate pe CPU folosind SIMD. Ca componente ale acestor expresii sunt acceptate zeci de hash-uri rapide (de la cele comune precum MD5 până la cele mai puțin exotice precum Whirlpool), combinarea subșirurilor, codificarea și decodificarea, conversia literelor, referințele la parolă, sare, nume de utilizator și constante de șiruri.
- Eliminarea diferențelor nedorite de la hashcat, inclusiv suport pentru regulile specifice anterior hashcat (comenzi de reguli pentru liste de cuvinte), trecerea la numerotarea dispozitivelor OpenCL începând de la 1, aplicarea implicită a aceleași lungimi a parolelor (de obicei lungimea 7) în teste de performanță.
- Noi moduri de generare a parolelor verificate (moduri de cracking), inclusiv PRINCE din hashcat (formează „fraze” combinând mai multe cuvinte în ordinea lungimii totale crescânde), subseturi (ricosează parole cu un număr insuficient de caractere diferite, chiar dacă aceste caractere provin dintr-un set mare de posibilități) și hybrid external (permite modurilor externe, descrise în fișierele de configurare într-un limbaj similar C, să genereze multe parole verificate pe baza fiecărui „cuvânt” de bază, provenit dintr-un alt mod). De asemenea, câteva noi moduri externe predefinite.
- Funcții suplimentare pentru utilizarea mai multor moduri simultan (unul peste altul — stacking), precum și pentru utilizarea seturilor de reguli (stacking de reguli pentru liste de cuvinte).
- Îmbunătățiri ale modurilor de mask (extinderea treptată a măștii în intervalul de lungimi specificat, aplicarea măștii pe partea dispozitivului OpenCL sau a plăcii FPGA) și single crack (comportament rațional pe dispozitive care calculează un număr mare de hash-uri în paralel, pentru care anterior în acest mod nu erau suficiente parole verificate, precum și restricții privind consumul de memorie).
- Multe îmbunătățiri ale suportului Unicode și al altor codificări în diferite subsisteme.
- Multe îmbunătățiri ale programelor *2john (care transformă fișiere de diferite formate pentru
a fi utilizate cu john), în special wpapcap2john (procesează traficul WiFi). - Multe opțiuni noi pentru linia de comandă, setări în john.conf, opțiuni ale scriptului configure și noi funcționalități asociate, nu toate fiind menționate aici.
- Îmbunătățirea calității codului prin suportul încorporat pentru construcții de depanare cu AddressSanitizer (anterior) și UndefinedBehaviorSanitizer (adăugat), adăugarea unui fuzzing integrat pentru formate (în cadrul GSoC 2015), aplicarea integrării continue (construcții pentru zeci de combinații de sistem de operare și compilator și testare în acestea pentru a asigura suportul corect al tuturor formatelor).
Sursa: linux.org.ru
