Ho una domanda sull'hash della password. Questa non è una domanda sul metodo BEST POSSIBLE delle password di hashing, ma piuttosto una domanda più utilitaristica su ciò che è sufficiente per cancellare una password senza che le tabelle arcobaleno standard rappresentino un problema.
Lasciatemi delineare uno scenario ipotetico. Si dispone di un'applicazione progettata senza sali unici e, per qualsiasi motivo di progettazione, sarebbe un'enorme modifica modificare l'applicazione in modo che funzioni con un sale unico per ogni singolo utente. Quindi, invece di riscrivere una parte enorme dell'applicazione, stiamo cercando un modo per accedere alle password hash più sicure di un puro SHA1 (o qualsiasi altro algoritmo di hashing standard), ma non coinvolge i sali unici.
Fornirò due esempi di soluzioni che non implicano sali unici. Ognuno di loro ha l'ovvio vantaggio di rendere inutile una tabella arcobaleno per un puro SHA1 (o qualsiasi altro algoritmo di hashing standard). Ognuno, tuttavia, ha lo svantaggio di essere in grado di creare una tabella arcobaleno per quella particolare strategia. Ma se ci pensi, usare un sale unico ha la stessa vulnerabilità, se tu dovessi scegliere come target un singolo utente.
L'idea più semplice è quella di disporre di un singolo salt per tutte le password hard-coded. Il secondo è quello di creare un algoritmo più complicato, come la suddivisione di una password in due da un insieme definito di regole, l'hashing di ciascuno, quindi l'hashing della concatenazione dei due hash parziali e l'archiviazione. Questo può essere esteso a qualsiasi algoritmo che ti piace.
Questo metodo è sufficiente per la maggior parte delle applicazioni? Nessuno dei due è ovviamente sicuro come un sale unico per ogni utente, ma se si targetizza un utente specifico non sembra né più né meno sicuro se si conosce il sale per quel particolare utente.
È corretto? Ed è una soluzione praticabile per alcuni (o forse più) casi?