Per essere chiari, questi algoritmi sono algoritmi di hashing della password, che potrebbero essere utilizzati per creare una chiave di crittografia. Queste non sono routine di crittografia da sole. Se stai chiedendo informazioni sulle routine di crittografia, (come AES), modifica la tua domanda.
Se la tua domanda riguarda la derivazione della chiave (quindi puoi creare una chiave per alimentare la tua routine di crittografia):
Ho chiesto un simile, se non una domanda duplicata me stesso.
- PBKDF2 è progettato specificamente per la derivazione di chiavi.
- bcrypt può essere usato anche per questo, sebbene non sia necessariamente progettato per la derivazione della chiave (meno minus), ma per l'hashing (funziona ancora). È più recente (meno), ma ancora sufficientemente controllato (rimuove principalmente il meno). È meno conveniente utilizzare GPU su di esso (più), a causa dell'overhead di memoria extra. (se la memoria mi serve correttamente, su questo non verrò corretto)
- scrypt è più recente e considerato promettente, anche se non così ben controllato quanto gli altri due. (a meno) Mi aspetto che questo, come bcrypt, sia progettato per l'hashing della password, ma non necessariamente per la derivazione della chiave. Se si utilizza questo, si può prendere in considerazione l'aggiunta di una routine più comprovata alla formula, in quanto questa non è una routine comprovata da sola.
Vorrei utilizzare PBKDF2 e bcrypt entrambi e xor i due risultati insieme, perché mi piace che PBKDF2 sia stato progettato per la derivazione delle chiavi e che bcrypt sia più resistente alle GPU. Ma potrei avere un eccesso di progettazione.
In ogni caso, assicurati che la tua routine richieda molto tempo. Se non si regolano correttamente gli hash, e si completa troppo rapidamente, allora una forza bruta offline può diventare fattibile. Raccomando 50-500ms. Tieni presente che l'hardware più recente velocizzerà il processo e che gli hacker potrebbero accelerarlo ulteriormente se investono o magari noleggiano solo un cloud / cluster. Entrambi questi significano che dovresti regolare gli hash per ripetere il più possibile, fermandoti appena prima di avere un "problema lento". Perché non farà nulla se non accelerare nel tempo.