La stessa famiglia SHA-2 non è necessariamente cattiva. Di progettazione, non ci sono davvero difetti di sicurezza che rendono preferibile bcrypt o scrypt. Tuttavia, il problema che molti esperti di sicurezza hanno con SHA è che è troppo veloce e non richiede molta memoria. In confronto, una funzione di hashing come scrypt è molto più lenta e costosa, per così dire.
Scrypt richiede una quantità decente di memoria da calcolare. Oltre a tutta questa memoria, e in gran parte a causa del bisogno di tanta memoria, scrypt richiede molto tempo computazionale rispetto a SHA. Questa risposta dal sito BitCoin Stack Exchange riassume piuttosto bene i vantaggi dello scrypt: Quali caratteristiche di scrypt () rendono Tenebrix resistente alle GPU? In sostanza, scrypt è progettato per essere lento e ad alto consumo di memoria. Alle GPU non piace. Le GPU in genere non hanno la capacità di memoria per memorizzare tutta la memoria necessaria per il calcolo scrypt senza dover ricorrere ai metodi di blocco dell'esecuzione ( dove la GPU blocca tutti i thread perché può recuperare solo i valori dalla memoria condivisa time ), e quindi le GPU non possono fornire grandi vantaggi alle CPU in termini di tempo di elaborazione. Bcrypt è simile.
Bcrypt è provato e true per l'hashing della password. È in giro da 17 anni e continua a funzionare. Tuttavia, un giorno, la tecnologia GPU avanzerà al punto in cui è in grado di calcolare bcrypt più velocemente e in modo più efficiente di una CPU. La tecnologia è in continua evoluzione e sviluppo, quindi accadrà alla fine. Quando quel giorno arriverà, bcrypt non sarà più una grande scelta per l'hash delle password, e crittografi e esperti di sicurezza dovranno sostituire bcrypt con un algoritmo simile che è più lento e richiede più memoria rispetto al bcrypt esistente. Forse quello sarà scrypt, ma chi dirà. Quindi, perché SHA è disapprovato?
SHA è generalmente scoraggiato non a causa di problemi di sicurezza, ma a causa della velocità e della sua capacità di essere implementato su una GPU. Qualcuno con macchine illimitate / potenza computazionale potrebbe crackare qualsiasi tipo di algoritmo di hash, sia esso SHA, bcrypt o scrypt, ma questo è teorico. In pratica, un utente malintenzionato non avrà un numero illimitato di macchine per provare a far crollare gli hash e, di conseguenza, più è possibile rallentare quell'attaccante, più sarà difficile per loro craccare una password. C'è un limite di budget per tutto e il cracking delle password non fa eccezione. L'utente malintenzionato può crackare solo le password alla velocità consentita dal loro budget. ( La migliore tecnologia che possono acquistare nel loro budget, il costo per eseguire quella tecnologia (ad esempio, i costi elettrici), ecc. ) Naturalmente, potresti implementare più turni di SHA per rallentare gravemente un attaccante , ma perché non usare solo bcrypt a quel punto? Tra l'altro, con l'avanzare della tecnologia GPU nel prossimo futuro, sarà necessario aggiungere sempre più round / iterazioni ai calcoli SHA per rallentarlo fino al punto in cui è più lento di bcrypt. Tuttavia, con l'avanzare della tecnologia GPU, bcrypt rimarrà immutato, fino al punto che la tecnologia GPU consente di calcolare in modo efficiente bcrypt. Pertanto, bcrypt è la scelta preferibile laddove possibile, non perché SHA sia insicuro, ma perché SHA è troppo efficiente dal punto di vista computazionale.