Quando provi a password di hash , l'autore dell'attacco può usa sempre lo stesso tipo di hardware del difensore. Ciò che l'attaccante cerca è di fare meglio, usando hardware specializzato che gli consenta di usare hash N password potenziali per un costo inferiore rispetto a se stesse usando l'hardware del difensore. Il costo totale include il costo di acquisto dell'hardware, il costo di sviluppo del relativo software e quindi il costo di esecuzione dell'hardware, che sostanzialmente equivale all'elettricità utilizzata (per alimentare l'hardware e per rinfrescarlo). Per un attaccante serio, il costo del potere domina.
Ogni volta che c'è qualche operazione che l'attaccante può fare meno del difensore, l'attaccante vince. Un punto importante è che il cracking della password è un imbarazzante problema parallelo : per definizione, l'autore dell'attacco ha molti potenziali password da provare.
Supponete di sovrapporre tre funzioni hash distinte Hash1
, Hash2
e Hash3
. Ciò significa che il difensore deve avere tutte e tre le implementazioni a portata di mano, tutte in esecuzione sul suo server. L'attaccante, d'altra parte, può avere una programmazione migliore: può (dire) hash un milione di potenziali password con Hash1
e salvare i risultati in un buffer; quindi passare l'hardware a qualcosa che applica Hash2
, ed eseguirlo oltre il milione di uscite salvate dal passaggio precedente, salvando di nuovo le uscite Hash2
in un buffer; infine, cambio di nuovo l'hardware, con Hash3
.
Questo tipo di "commutazione hardware" è particolarmente rilevante quando si utilizza FPGA : ogni "commutazione" è una riprogrammazione dello stesso hardware reale ed è questione di pochi secondi al massimo. Usando tale schedulazione e buffering, il costo di "commutazione" è trascurabile.
Può essere usato anche come pipeline: se l'attaccante ha creato tre macchine specializzate, una per Hash1
, una per Hash2
e una per Hash3
, allora può eseguire Hash1
sulla prima password potenziale, quindi invia l'output alla macchina che calcola Hash2
. Mentre la seconda macchina calcola Hash2
, la prima macchina può calcolare Hash1
su un'altra password potenziale. E così via. In pratica, l'attaccante può mantenere tutte le sue macchine specializzate in piena occupazione in qualsiasi momento, ridendo così dei tuoi tentativi di "aumentare la forza".
Inoltre, se ci sono tre funzioni hash distinte da implementare e solo una di esse può essere ottimizzata con hardware specializzato, l'hacker ottiene comunque una vittoria ottimizzandone quella. Per dire le cose in modo grossolano, se si esegue la cascata di bcrypt, scrypt e SHA-256, l'autore dell'attacco utilizzerà un PC per i primi due e una GPU per SHA-256 e quindi eviterà circa 1/3 del costo. / p>
Per riassumere, l'intuizione che "la miscelazione di un insieme di algoritmi di hash diversi dovrebbe fornire ulteriore forza" è sbagliata. Fa il contrario. Tale mixaggio aumenta i costi di sviluppo e di utilizzo per il difensore, mentre non rallenta l'attaccante (che ha molto parallelismo con cui trarre vantaggio), e aumenta le opzioni di ottimizzazione dell'attaccante.
(Tutto questo viene detto senza parlare di aspetti pratici, come la gestione dei singoli sali per tutte le funzioni in cascata e i pericoli della crittografia fatta in casa.)