una nuova versione del più antico programma supportato per il recupero delle password (il progetto è in sviluppo dal 1996). Sono passati 4,5 anni dall'uscita della versione precedente 1.8.0-jumbo-1, durante i quali sono stati apportati oltre 6000 cambiamenti (git commits) da più di 80 sviluppatori. Grazie a , che include la revisione preliminare di ogni modifica (pull request) su molte piattaforme, nel frattempo gli sviluppatori hanno raccomandato di utilizzare , il cui stato è rimasto stabile nonostante le modifiche apportate. Il codice principale del progetto è sotto licenza GPLv2+, mentre il codice di alcuni componenti è sotto licenza BSD.
Una novità della nuova versione è l'aggiunta del supporto FPGA (oltre a CPU, GPU e Xeon Phi). Per le schede , che includono 4 chip FPGA e originariamente utilizzate principalmente per il mining di Bitcoin, ora sono implementati 7 tipi di hashing per le password: bcrypt, descrypt classico (incluso bigcrypt), sha512crypt, sha256crypt, md5crypt (incluso Apache apr1 e AIX smd5), Drupal7 e phpass (utilizzato, tra l'altro, in WordPress). Alcuni di essi sono implementati su FPGA per la prima volta.
Per bcrypt, la prestazione raggiunta di ~119k c/s con 2^5 iterazioni («$2b$05») con un consumo di circa ~27 watt supera di gran lunga i risultati dei più recenti GPU in termini di costo per scheda, prezzo dell'hardware e watt. Sono supportati anche di questo tipo di schede, testato fino a 16 schede (64 chip FPGA), controllati da un Raspberry Pi 2. È supportata la normale funzionalità di John the Ripper, compresi tutti i metodi di attacco alle password e il caricamento simultaneo di un gran numero di hash.
Per migliorare le prestazioni è stata implementata l'uso di maschere (modalità «—mask», anche in combinazione con altre modalità) e il confronto degli hash calcolati con quelli caricati sul lato FPGA. Dal punto di vista dell'implementazione, molti dei design (ad esempio, per ) utilizzano blocchi costituiti da nuclei di processori multi-thread (soft CPU cores), interagenti con nuclei crittografici. Lo sviluppo di questa funzionalità è stato curato da Denis Burikin in coordinamento con altri sviluppatori di jumbo.
Altre modifiche importanti:
- Supporto per un'ampia varietà di tipi di hash, cifrature e simili, incluse le classiche hash delle password (come quelle delle nuove versioni di QNX), portafogli di criptovalute, archivi crittografati e file system crittografati (come Bitlocker e FreeBSD geli), oltre al supporto per nuove varianti di formati precedentemente supportati (ad esempio, è stata aggiunta la compatibilità con bcrypt-pbkdf per OpenBSD softraid) e molto altro. In totale, sono stati aggiunti 80 formati per CPU e 47 per OpenCL. Il numero totale di formati è ora di 407 su CPU (o 262 escludendo i formati 'dynamic', configurabili dai file di configurazione) e 88 su OpenCL.
- Abbandono del supporto per il linguaggio CUDA a favore di OpenCL, il che non ostacola affatto l'utilizzo completo delle GPU NVIDIA (e anzi aiuta, grazie alla concentrazione della sviluppo e ottimizzazione su una sola implementazione di ciascun formato per GPU invece di due implementazioni come in precedenza).
- Supporto per nuovi set di istruzioni SIMD — AVX2, AVX-512 (incluso per la seconda generazione di Xeon Phi) e MIC (per la prima generazione) — e un utilizzo più universale e completo di SIMD nelle implementazioni di molti formati, incluso l'utilizzo di set di istruzioni precedentemente supportati fino a AVX e XOP su x86(-64) e.
NEON, ASIMD e AltiVec su ARM, Aarch64 e POWER, rispettivamente. - Numerose ottimizzazioni per CPU e OpenCL, sia per un'elaborazione più efficiente di un gran numero di hash contemporaneamente (ad esempio, è stata testata un'elaborazione di 320 milioni di hash SHA-1 su GPU), sia per migliorare la velocità di calcolo degli hash. Alcune di queste ottimizzazioni sono universali, altre coprono sottoinsiemi di formati diversi, mentre molte sono specifiche per singoli formati.
- (Auto-)ottimizzazione del buffering ottimale delle password verificate su CPU ("--tune=auto --verbosity=5") e delle dimensioni ottimali del carico di lavoro su OpenCL (abilitata per impostazione predefinita), tenendo conto del lungo tempo per raggiungere la piena frequenza operativa delle GPU della serie NVIDIA GTX 10xx e successive. Utilizzo di hash realmente caricati e della reale lunghezza delle password verificate (quando nota in anticipo) per tale auto-ottimizzazione.
- Aggiunta del compilatore di "espressioni dinamiche" specificate direttamente nella riga di comando, che implementano nuovi tipi ibridi di hash, come "--format=dynamic='sha1(md5($p).$s)'", calcolati sulla CPU utilizzando SIMD. Tra i componenti di tali espressioni sono supportati decine di hash rapidi (da quelli comuni come MD5 a quelli moderatamente esotici come Whirlpool), unione di sottostringe, codifica e decodifica, conversione di maiuscole e minuscole, riferimenti a password, sale, nomi utente e costanti stringa.
- Eliminazione delle discrepanze indesiderate rispetto a hashcat, inclusa la supporto per regole precedentemente specifiche di hashcat (comandi delle regole della wordlist), passaggio alla numerazione delle unità OpenCL partendo da 1, applicazione delle stesse lunghezze di password (di solito lunghezza 7) come predefinito durante i test delle prestazioni.
- Nuovi modalità di generazione delle password controllabili (cracking modes), inclusa PRINCE di hashcat (crea "frasi" combinando più parole in base alla lunghezza totale crescente), subsets (genera password con un numero insufficiente di caratteri diversi, anche se questi provengono da un ampio set di possibilità) e hybrid external (permette a modalità esterne, descritte in file di configurazione in un linguaggio simile al C, di generare molte password controllabili basandosi su ciascuna "parola" di base fornita da un'altra modalità). Inoltre, sono stati aggiunti diversi nuovi modi esterni predefiniti.
- Ulteriori capacità di utilizzare più modalità simultaneamente (una sopra l'altra — stacking), così come l'uso di set di regole in stacking (wordlist rules stacking).
- Miglioramenti delle modalità mask (allargamento graduale della maschera nell'intervallo di lunghezze specificate, applicazione della maschera sul lato del dispositivo OpenCL o della scheda FPGA) e single crack (comportamento razionale su dispositivi che calcolano un gran numero di hash in parallelo, cui precedentemente in questa modalità mancavano password controllabili, così come limiti nel consumo di memoria).
- Numerosi miglioramenti del supporto Unicode e di altri formati di codifica in diverse sottosistemi.
- Moltissimi miglioramenti nel programma *2john (che converte file di vari formati per
l'utilizzo con john), in particolare wpapcap2john (che gestisce il traffico WiFi). - Numerose nuove opzioni da riga di comando, impostazioni in john.conf, opzioni dello script configure e relative nuove funzionalità, non tutte delle quali sono state menzionate qui.
- Miglioramento della qualità del codice grazie al supporto integrato per le build di debug con AddressSanitizer (già presente) e UndefinedBehaviorSanitizer (aggiunto), incorporando un fuzzing dei formati (nel contesto di GSoC 2015), l'implementazione dell'integrazione continua (build per decine di combinazioni di sistemi operativi e compilatori e test in esse per garantire il supporto corretto di tutti i formati).
Fonte: opennet.ru
