Domanda

Ho un database di password con hash a cui non è stato aggiunto il sale prima che venissero hash. Voglio aggiungere sale alle nuove password. Ovviamente non posso ricodificare quelli esistenti.

Come migreresti a un nuovo sistema di hashing?

È stato utile?

Soluzione

Sicuro che puoi. Basta aggiungere un sale all'hash esistente e l'hash di nuovo. Ovviamente ciò richiederà che eventuali accessi futuri passino attraverso lo stesso processo, il che significa che dovranno essere chiamate due funzioni hash ma molti schemi legittimi lo fanno comunque in modo che non abbia un cattivo odore come si potrebbe pensare.

Salare una password è uno sforzo per difendersi dalle tabelle arcobaleno. In questo caso il sale non deve essere un segreto.

http://en.wikipedia.org/wiki/Rainbow_tables#Defense_against_rainbow_tables

Puoi effettivamente vedere l'articolo

hash = MD5 (MD5 (password) . salt)

Qual è lo stesso metodo esatto che useresti. (Tranne una diversa funzione di hashing.)

Altri suggerimenti

Come soluzione rapida, è possibile creare una colonna salt nel database e quando un utente accede correttamente abbinando il vecchio hash, è quindi possibile utilizzare quella password che ha inserito con un salt e creare un nuovo hash.

Puoi aggiungere una colonna, composta da un flag che mostra se l'utente ha un vecchio (senza sale) o un nuovo (con sale) hash.

Una buona idea è, a quel punto, forzare tutti gli utenti a cambiare le loro password al momento dell'accesso. In questo modo puoi liberarti di quella colonna alla fine.

Ho affrontato un problema simile che riguardava più tecniche di hashing. Ho usato l'approccio della codifica di un tipo di metodo hash anche nel database (ovvero "alpha", "beta", "gamma", "delta"). Ho contrassegnato tutti gli hash correnti con il livello appropriato. Quando gli utenti hanno effettuato l'accesso, ho convalidato le loro password e le ho ricodificate utilizzando i metodi aggiornati. Le nostre password scadono dopo 90 giorni, quindi è stata solo una questione di attesa per 3 mesi fino a quando tutte le password che utilizzano i vecchi metodi potevano essere ripristinate.

Ci sono alcuni modi qui che potrebbero lavora per te.
Ricorda, qualsiasi modello costante che aggiungi nell'hash esistente è inutile (uno dei trucchi su quel link suggerisce qualcosa del genere). Non ci dovrebbero essere schemi identificabili che possono essere usati per isolare il sale.

Naturalmente, il modo migliore sarebbe migrare verso una tabella hash salata.

Crea un nuovo campo nel tuo database chiamato " salted " con un tipo di vero / falso (o qualunque sia l'equivalente nel tuo DBMS). Impostare tutti i valori su false per gli hash esistenti. Ogni volta che viene aggiunto un nuovo hash, salato, imposta "salato" campo su true.

Quindi, tutto ciò che devi fare è gestire i due tipi di hash in modo diverso nel tuo codice.

Questa è più una soluzione generale che una specifica, ma dovrebbe risolvere il tuo problema.

Se stai conservando il sale all'interno dell'hash, dovrebbe essere abbastanza semplice determinare se è incluso un sale controllando la lunghezza dell'hash. Se non c'è un salt, basta hash la password, se c'è un salt, hash la password + salt.

Non dovresti aver bisogno di una colonna booleana nel tuo database.

Il modo migliore per archiviare Salt è incorporare il valore Salt nella password hash + salt che ho appena creato. Non aggiungo la stringa di sale all'inizio o alla fine dell'hash, ho letteralmente incorporato il sale nell'hash.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top