Poiché il contesto di questo sembra essere il cracking delle password e gli hash crittografici non sono adatti per memorizzare le password, la semplice risposta è "la tua domanda è irrilevante".
Una buona funzione di hash crittografica ha una serie di obiettivi di progettazione di base:
- Dovrebbe essere computazionalmente fattibile calcolare un hash H (x) per qualche valore di input x.
- La modifica di un bit dell'input dovrebbe cambiare tutti i bit di output con una probabilità del 50%.
- Dato solo l'output dell'hash, non dovrebbe essere computazionalmente fattibile recuperare informazioni sull'input (a parte gli attacchi generici come le tabelle arcobaleno).
- Dato un input x 1 , non dovrebbe essere computazionalmente fattibile trovare un altro input x 2 che soddisfi la condizione H (x 1 ) == H (x 2 ), cioè dovrebbe essere difficile trovare collisioni.
Sebbene questi obiettivi di base siano certamente utili, in realtà non coprono i requisiti completi di una buona funzione di memorizzazione delle password. Per rispondere alla tua domanda in modo più specifico: il costo computazionale grande o controllabile non è certamente una caratteristica della maggior parte delle funzioni di hash crittografiche "ordinarie".
Una buona funzione di memorizzazione della password, insieme a tutti i precedenti, dovrebbe avere questi obiettivi di progettazione aggiuntivi:
- Non dovrebbe essere deterministico, cioè due password uguali per utenti diversi (o altre entità) non dovrebbero produrre lo stesso hash dell'output.
- Dovrebbe implementare una qualche forma di difesa contro gli attacchi di precomputazione (ad es. le tavole arcobaleno)
- Dovrebbe essere computazionalmente costoso forzare l'input originale per tutti gli input di dizionario banali e comuni. Questo è solitamente controllato implementando un valore di costo, che consente di ridimensionare le prestazioni.
- Non ci dovrebbe essere un modo per produrre guadagni di prestazioni più che trascurabili utilizzando i compromessi tempo / spazio.
- Le prestazioni della funzione dovrebbero essere approssimativamente lineari su tutte le architetture, per evitare l'accelerazione da GPU, FPGA, ecc. forse escludendo il silicio appositamente progettato.
Alcuni di questi obiettivi sono simili a quelli implementati dalle funzioni di derivazione chiave (KDF) come PBKDF2, ma ancora queste funzioni non sono progettate per l'archiviazione di password e sono invece state appropriate per tali usi .
Mentre al momento ci sono solo pochi progetti che implementano tutto quanto sopra, è un campo relativamente nuovo, quindi sono previsti lavori futuri. Per motivi di interesse, l'attuale stato dell'arte per l'archiviazione delle password, come per PHC , è Argon .