I processori ARM sono un'architettura a 32 bit e sono relativamente inefficienti nell'eseguire operazioni aritmetiche a 64 bit: quando devono calcolare un'aggiunta a 64 bit, devono farlo con due aggiunte a 32 bit e alcune di propagazione. Questo è in qualche modo equivalente a x86 utilizzato in modalità a 32 bit (eccetto che x86 abbastanza recente ha accesso agli opcode SSE2, che offrono calcoli su numeri interi a 64 bit, anche in modalità a 32 bit). Tutti i recenti x86 possono funzionare in modalità 64 bit (se il sistema operativo lo consente), il che li rende molto più veloci nelle funzioni di calcolo hash che si basano su operazioni aritmetiche a 64 bit, il primo esempio è SHA-512. Su una funzione di hash a 32 bit come SHA-256, i core ARM e x86 saranno "comparabili".
Un ulteriore vantaggio di ARM è che ha diversi set di istruzioni; l'ARM originale utilizzava opcode a 32 bit, mentre le versioni più recenti consentono il set di istruzioni "Thumb" che ha opcodes più piccoli ma meno potenti. "Thumb" è stato quindi esteso a "Thumb-2", con una combinazione di opcode a 16 bit e 32 bit. I più recenti core ARM sanno solo Thumb-2. Il codice "Thumb-2" dovrebbe essere quasi efficiente quanto il codice ARM originale, pur essendo notevolmente più compatto. Ma molto può nascondersi in una parola come "quasi".
Per bcrypt , ciò che conta è la disponibilità di circa 4 kB di "RAM veloce". Quasi tutti i core ARM e x86 che incontrerai hanno cache L1 che sono più grandi di quello (per ottenere un ARM senza cache, devi guardare ARM7TDMI a 33 MHz o sistemi simili), quindi, ancora, ARM e x86 saranno comparabili .
Per scrypt , la situazione è mista. Scrypt utilizza una funzione di hash interna per calcolare accessi apparentemente casuali in un ampio buffer RAM, quindi questa è una corsa tra il tempo per calcolare la funzione hash su un input piccolo e la latenza della RAM principale. La latenza della RAM principale non è scalabile (e un bus "più veloce" significa più larghezza di banda , non meno latenza ). Per un piccolo sistema basato su ARM come Raspberry PI, la funzione di hash sarà il collo di bottiglia, specialmente se si tratta di SHA-512. Per multicore x86 più grande, la latenza della memoria renderà il tutto più lento. L'x86 non darà accelerazioni proporzionate al suo prezzo più alto; specialmente se si usa la CPU con 6 o 8 core: ci sarà troppa contesa sul bus della memoria condivisa.
Detto questo, la domanda riguarda economia : quale scelta di architettura produrrà il maggior numero di hash al secondo, per un dato budget? Questo include il costo di hardware , ma anche l' energia , che a lungo termine domina (si paga l'hardware una volta, ma è necessario alimentarlo con elettricità tutto l'anno lungo). I costi energetici devono includere i sistemi di raffreddamento, che non sono trascurabili nelle grandi aziende informatiche. I processori ARM hanno fama di utilizzare meno energia (è stato a lungo il loro punto di forza, ed è per questo che oggi gli smartphone usano processori ARM).
Quindi l'architettura ARM dovrebbe essere, in media e per grandi cluster , una scelta migliore per il crack delle password, tranne quando si ha a che fare con un processo di hashing legato alla CPU (come PBKDF2 ) che si basa su una funzione hash a 64 bit (ad es. SHA-512), nel qual caso una CPU x86 (in Modalità a 64 bit) sarà un affare migliore. Questo cambierà con l'avvento di processori ARM a 64 bit .
Per un amatore che non costruisce un cluster oltre a ciò che si adatta alla sua stanza e deve utilizzare hardware standard, questi problemi saranno sminuiti da quelli di disponibilità e di effetti di mercato. Non si acquista una CPU x86 sola; hai bisogno di una scheda madre e di altre cose intorno ad esso; alla fine, acquisti un PC . Il costo della CPU sarà una piccola parte del costo totale dell'hardware. Allo stesso modo, non si acquista un ARM, ma un Raspberry PI. Pertanto, per ottenere una stima corretta, è necessario eseguire benchmark . Per le funzioni raw di hash, ti suggerisco di utilizzare sphlib , una libreria di implementazioni di varie funzioni hash (inclusi SHA-256 e SHA-512 ), scritto in C; viene fornito con uno strumento di benchmarking. Per bcrypt e scrypt, sfoglia le implementazioni di riferimento.
(Come una sensazione istintiva, mi aspetto un pareggio.Il cluster Raspberry PI, ovviamente, vince totalmente contro il cluster x86 se si tiene conto del "fattore divertimento".)