Sto cercando di comprendere l'hashing delle password. In passato sembrava così semplice, solo MD5 (password + sale) e il gioco è fatto. Quindi md5 ha dimostrato di avere collisioni così le persone hanno iniziato a passare a SHA1 e così via.
Poi abbiamo iniziato a parlare di dover creare lentezza, quindi abbiamo implementato molte iterazioni del nostro algoritmo di hash per rendere il controllo dell'hash abbastanza lento.
Quello che sto cercando di capire è:
- Perché SHA512 non può essere utilizzato in un algoritmo di password se lo iteriamo abbastanza per crearlo lentamente? L'esempio è SHA512 la password 100k volte.
-
Perché è raccomandato PBKDF2 o bcrypt invece di fare quanto sopra? O perché no?
Questa risposta afferma che è "non per l'hashing di una password per l'archiviazione sicura a fini di autenticazione". Tuttavia questa risposta (con molti upvotes) consiglia l'opposto (?); che dovresti usare pbkdf2 / bcrypt / scrypt per memorizzare in sicurezza le password.
- Se una funzione PBKDF2 si basa su SHA1 sottostante, è intrinsecamente insicura se SHA1 può essere dimostrato danneggiato? ( Implementazione .NET RFC2898 )
Speriamo che se qualcuno possa rispondere alle domande di cui sopra comprenderò perché un semplice algoritmo di hash (a lenta lentezza) non è sufficiente, e anche perché abbiamo bisogno di tutte queste funzioni derivative chiave apparentemente complesse per fare una semplice memorizzazione delle password.