Publikimi i John the Ripper 1.9.0-jumbo-1 me mbështetjen e FPGA

Liruar versioni i ri i thyerjes së fjalëkalimit më të vjetër të mbështetur John the Ripper 1.9.0-jumbo-1 (projekti është duke u zhvilluar që nga viti 1996). Kanë kaluar 1.8.0 vjet nga lëshimi i versionit të mëparshëm 1-jumbo-4.5, gjatë të cilit janë bërë më shumë se 6000 ndryshime (git commits) nga më shumë se 80 zhvillues. Falë integrim të vazhdueshëm, i cili përfshin një kontroll paraprak të çdo ndryshimi (kërkesë tërheqjeje) në shumë platforma, gjatë kësaj periudhe zhvilluesit rekomanduan përdorimin rishikimi aktual nga GitHub, gjendja e së cilës u ruajt e qëndrueshme pavarësisht ndryshimeve të bëra. Kodi kryesor i projektit shperndare nga nën licencën GPLv2+ dhe kodin e disa komponentëve nën licencën BSD.

Një tipar i versionit të ri është shfaqja e mbështetjes FPGA (përveç CPU, GPU dhe Xeon Phi). Për dërrasat Ztex 1.15v, i cili përfshinte 4 çipa FPGA dhe fillimisht përdorej kryesisht për minierat e Bitcoin, tani janë implementuar 7 lloje të hashes së fjalëkalimeve: bcrypt, descrypt klasik (përfshirë bigcrypt), sha512crypt, sha256crypt, md5crypt (duke përfshirë Apache apr1 dhe AIX smd5), Drupal7 dhe phpass (përdoret, veçanërisht në WordPress). Disa prej tyre zbatohen për herë të parë në FPGA.

Për bcrypt, performanca e arritur prej ~ 119 mijë c/s në 2^5 përsëritje ("2b$05") me një konsum energjie prej rreth ~27 watts tejkalon ndjeshëm GPU-të më të fundit për bord, për çmimin e harduerit dhe për vat. Mbështetur gjithashtu grupime të bordeve të këtij lloji, të cilat testuan deri në 16 borde (64 çipa FPGA) të kontrolluara nga një Raspberry Pi 2 i vetëm. Mbështetet funksionaliteti i zakonshëm John the Ripper, duke përfshirë të gjitha mënyrat e gjetjes së fjalëkalimeve dhe shkarkimin e njëkohshëm të një numri të madh hasesh.

Për të përshpejtuar punën, ne zbatuam përdorimin e një maske (modaliteti "--mask", duke përfshirë në kombinim me mënyrat e tjera) dhe një krahasim të hasheve të llogaritura me ato të ngarkuara në anën FPGA. Për sa i përket zbatimit, në shumë prej modeleve (për shembull, për sha512crypt dhe Drupal7) blloqe të përdorura të përbëra nga bërthama procesori me shumë fije (bërthamat e buta CPU) që ndërveprojnë me bërthamat kriptografike. Zhvillimi i këtij funksionaliteti u drejtua nga Denis Burykin në koordinim me zhvilluesit e tjerë jumbo.

Ndryshime të tjera të rëndësishme:

  • Mbështetje për një numër të madh llojesh shtesë të hasheve, shifrave, etj., duke përfshirë të dyja haset klasike të fjalëkalimeve (për shembull, nga versionet e reja të QNX), dhe kuletat e kriptomonedhave, arkivat e koduar dhe sistemet e skedarëve të koduar (për shembull, Bitlocker dhe FreeBSD geli ), si dhe mbështetje për varietete të reja të formateve të mbështetura më parë (për shembull, mbështetja bcrypt-pbkdf për OpenBSD softraid është shtuar) dhe shumë më tepër. Në total, 80 formate janë shtuar në CPU dhe 47 në OpenCL. Numri i përgjithshëm i formateve tani është 407 në CPU (ose 262 pa përfshirë formatet "dinamike" të konfiguruara nga skedarët e konfigurimit) dhe 88 në OpenCL.
  • Heqja e mbështetjes së gjuhës CUDA në favor të OpenCL, e cila nuk ndërhyn aspak në përdorimin e plotë të GPU-së NVIDIA (dhe madje ndihmon, falë fokusit të zhvillimit dhe optimizimeve në një implementim të secilit format nën GPU në vend të dy implementimet më parë).
  • Mbështetje për grupet e reja të udhëzimeve SIMD - AVX2, AVX-512 (përfshirë gjeneratën e dytë të Xeon Phi) dhe MIC (për gjeneratën e parë) - si dhe përdorim më universal dhe më të plotë të SIMD në zbatime të shumë formateve, duke përfshirë përdorimin i konfigurimeve të udhëzimeve të mbështetura më parë në AVX dhe XOP në x86(-64) dhe
    NEON, ASIMD dhe AltiVec në ARM, Aarch64 dhe POWER, përkatësisht.

  • Optimizime të shumta për CPU dhe OpenCL, të dyja për të punuar në mënyrë më efikase me një numër të madh hasesh në të njëjtën kohë (për shembull, ngarkimi i 320 milionë hasheve SHA-1 në GPU) dhe për të rritur shpejtësinë e llogaritjes së hash-it. Disa nga këto optimizime janë universale, disa mbulojnë nëngrupe të ndryshme formatesh dhe shumë janë specifike për format.
  • (Auto-)akordim i buferimit optimal të fjalëkalimeve të kontrolluara në CPU (“-tune=auto —verbosity=5”) dhe dimensioneve optimale të punës në OpenCL (aktivizuar si parazgjedhje), duke përfshirë marrjen parasysh të rikuperimit të ngadaltë në frekuencën e plotë të funksionimit e GPU-ve të serisë NVIDIA GTX 10xx dhe më të reja. Përdorimi i hash-eve të ngarkuara reale dhe gjatësia reale e fjalëkalimeve të kontrolluara (kur dihet paraprakisht) për një akordim automatik të tillë.
  • Shtimi i një përpiluesi të "shprehjeve dinamike" që specifikohet drejtpërdrejt në vijën e komandës dhe zbaton lloje të reja hash hibride, për shembull "--format=dynamic='sha1(md5($p).$s)'", i llogaritur në CPU duke përdorur SIMD. Dhjetra hash-e të shpejta (nga ato të zakonshme si MD5 tek ato paksa ekzotike si Whirlpool), lidhja e nënstringave, kodimi dhe dekodimi, konvertimi i rasteve të karaktereve, referencat e fjalëkalimit, kripërat, emri i përdoruesit dhe konstantet e vargut mbështeten si përbërës të shprehjeve të tilla.
  • Eliminimi i dallimeve të padëshiruara nga hashcat, duke përfshirë mbështetjen për komandat e rregullave të listave të fjalëve specifike të hashcat-it, kalimi në numërimin e pajisjes OpenCL nga 1, duke përdorur të njëjtat gjatësi të fjalëkalimeve të paracaktuar (zakonisht gjatësinë 7) për testet e performancës.
  • Mënyra të reja për gjenerimin e fjalëkalimeve të thyera (modalitetet e thyerjes), duke përfshirë PRINCE nga hashcat (gjeneron "fraza" duke bashkuar disa fjalë në rend rritës të gjatësisë totale), nëngrupe (sjell fjalëkalime me një numër të pamjaftueshëm karakteresh të ndryshëm, edhe nëse këto karaktere vijnë nga një grup i madh i atyre të mundshme) dhe hibride të jashtme (lejon mënyrat e jashtme, të përshkruara në skedarët e konfigurimit në gjuhën e ngjashme me C-në, të gjenerojnë shumë fjalëkalime të verifikueshme bazuar në çdo "fjalë" bazë të marrë nga një modalitet tjetër). Gjithashtu, disa mënyra të reja të paracaktuara të jashtme.
  • Karakteristika shtesë për përdorimin e disa mënyrave në të njëjtën kohë (njëra mbi tjetrën - grumbullimi), si dhe për një përdorim të tillë të grupeve të rregullave (vendosja e rregullave të listës së fjalëve).
  • Përmirësime në mënyrat e maskës (shtrirja graduale e maskës në intervalin e caktuar të gjatësive, aplikimi i maskës në anën e një pajisjeje OpenCL ose bordit FPGA) dhe çarje e vetme (sjellje e arsyeshme në pajisjet që llogarisin një numër të madh hasesh paralelisht, të cilat më parë në këtë modalitet mungonin fjalëkalimet për t'u kontrolluar, si dhe kufizimet në konsumin e memories).
  • Shumë përmirësime në mbështetje për Unicode dhe kodime të tjera në nënsisteme të ndryshme.
  • Shumë përmirësime në programet *2john (konvertimi i skedarëve të formateve të ndryshme në
    përdorni me john), veçanërisht wpapcap2john (trajton trafikun WiFi).

  • Shumë opsione të reja të linjës së komandës, cilësimet john.conf, opsionet e konfigurimit të skriptit dhe veçoritë e reja përkatëse të tyre, jo të gjitha janë përmendur këtu.
  • Përmirësimi i cilësisë së kodit për shkak të mbështetjes së integruar për ndërtimet e korrigjimit me AddressSanitizer (më parë) dhe UndefinedBehaviorSanitizer (shtuar), duke shtuar një fuzzer të formatit të integruar (brenda GSoC 2015), duke përdorur integrimin e vazhdueshëm (ndërtimet për dhjetëra kombinime të sistemit operativ dhe kompilatorëve dhe testimi i tyre për mbështetjen e saktë të të gjitha formateve).

Burimi: opennet.ru

Shto një koment