Dato che lo stretching chiave si riduce fondamentalmente all'hash hash più e più volte (dove sale, pepe e password individuano la funzione hash, ma il principio rimane lo stesso), mi chiedo di questa domanda.
Da un lato, gli hash dovrebbero essere il più possibile esenti da collisioni. Per gli stessi hash, ciò è teoricamente realizzabile a causa della stessa lunghezza, ma ciò darebbe l'esistenza di una mappa biiettiva, cioè per ogni hash h si potrebbe dare un altro hash h₂, il cui hash è l'hash originale di nuovo, quindi tu può invertire l'hash. Quindi potresti "semplicemente" usare l'inversione per invertire l'intera catena di hash e creare una password valida - anche peggio, se sale / pepe e password influenzano la derivazione della chiave allo stesso modo, questo potrebbe rendere inutilizzabile la salatura dal momento della creazione la password potrebbe compensare la sua influenza.
D'altra parte, se gli hash si scontrano, questo significa che alcuni hash sono più sicuri di altri - alcuni hash non possono essere ottenuti tagliando un altro hash, ma altri hash possono essere ottenuti da più hash. E questi hash sarebbero attrattori ed è molto più probabile che si verifichino dopo molti cicli di hashing rispetto a quelli non ottenibili, riducendo efficacemente il potenziale spazio delle chiavi.
Quindi, quale di queste due possibilità è peggiore, e quale è il caso reale nella realtà? Poiché la scelta della password e di sale / pepe modifica la funzione di hashing, la risposta dipende da questo? Questo problema può essere risolto concatenando l'intera catena di hash invece di quella finale? (Se questo non ha già un nome, posso proporre hash cat?)