La stessa famiglia SHA-2 non è necessariamente cattiva. In base alla progettazione, non ci sono davvero difetti di sicurezza che rendano preferibili 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 discreta quantità di memoria per il calcolo. Oltre a tutta questa memoria, e in gran parte a causa del bisogno di così tanta memoria, scrypt richiede molto tempo di calcolo rispetto a SHA. Questa risposta dal sito BitCoin Stack Exchange riassume i vantaggi di scrypt piuttosto bene: Quali caratteristiche di scrypt () rendono Tenebrix resistente alla GPU? In sostanza, scrypt è progettato per essere lento e ad alta intensità di memoria. Alle GPU non piace. Le GPU generalmente non hanno la capacità di memoria per archiviare tutta la memoria necessaria per il calcolo dello scrypt senza dover ricorrere a metodi di blocco dell'esecuzione ( dove la GPU blocca tutti i thread perché può solo recuperare i valori dalla memoria condivisa uno alla volta time ), e quindi le GPU non possono fornire alcun grande vantaggio rispetto alle CPU in termini di tempo di elaborazione. Bcrypt è simile.
Bcrypt è provato e vero per l'hashing delle password. Esiste da 17 anni e fa ancora il suo lavoro. Tuttavia, un giorno, la tecnologia GPU avanzerà al punto in cui sarà in grado di calcolare bcrypt in modo più veloce ed efficiente di una CPU. La tecnologia è in continua evoluzione e sviluppo, quindi alla fine accadrà. Quando arriverà quel giorno, bcrypt non sarà più un'ottima scelta per l'hashing delle password, e crittografi ed esperti di sicurezza dovranno sostituire bcrypt con un algoritmo simile che è più lento e richiede più memoria del bcrypt esistente. Forse sarà scrypt, ma chi lo può dire. Allora, perché SHA è disapprovato?
SHA è generalmente scoraggiato non a causa di falle di sicurezza, ma a causa della velocità e della sua capacità di essere implementato su una GPU. Qualcuno con macchine / potenza di calcolo illimitate potrebbe decifrare qualsiasi tipo di algoritmo di hashing, che sia SHA, bcrypt o scrypt, ma questo è teorico. In pratica, un utente malintenzionato non avrà un numero illimitato di macchine su cui provare a decifrare gli hash e, di conseguenza, più puoi rallentare quell'attaccante, più difficile sarà per lui decifrare una password. C'è un limite di budget per tutto e il cracking delle password non fa eccezione. L'aggressore può decifrare le password solo alla velocità consentita dal budget. ( La migliore tecnologia che possono acquistare nei limiti del loro budget, il costo per eseguire tale tecnologia (ad esempio, i costi elettrici), ecc. ) Ovviamente, potresti implementare più round di SHA per rallentare gravemente un aggressore , ma perché non usare semplicemente bcrypt a quel punto? Tra le altre cose, 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à senza fasi, fino al punto che la tecnologia GPU consente di calcolare bcrypt in modo efficiente. Pertanto, bcrypt è la scelta preferibile ove possibile, non perché SHA non sia sicuro, ma perché SHA è troppo efficiente dal punto di vista computazionale.