Quote Originariamente inviata da miksco Visualizza il messaggio
Buonasera.
Qualcuno saprebbe spiegarmi come funziona la codifica di password utilizzando SALT
E' semplicemente una tecnica che previene gli attacchi a dizionario in caso di furto dei dati criptati.

Se tu riesci a sapere che la mia password criptata con sha1 è "7c6a61c68ef8b9b6b061b28c348bc1ed7921cb53" ti basta mettere la stringa su google per capire che è "passw0rd". Ci sono database enormi con mapping di questo tipo, alcuni sono anche disponibili in rete.

Ovviamente il problema diventa concreto quando hai una password comune o molto corta (e una vulnerabilità nel sistema che ti espone il dato).

Il salt è un granello di sale (una stringa o sequenza di bit) che concateni con la stringa prima di criptarla. Per esempio se la stessa mia password criptata con il salt in Sha1 è "24195deddb6c5e293bb1d89a55c6d66734b49c98" non ci puoi arrivare tanto facilmente, perché questa volta ci ho aggiunto la stringa "`%&2£!!è@" prima di criptarla.

Ovviamente in fase di check devi ricordartelo e criptare l'input dell'utente con lo stesso granello di sale prima di confrontarlo col valore che hai nel database.

Il salt teoricamente può essere pubblico (inteso come salvato insieme al valore criptato), perché il suo scopo è solo quello di rendere inutili quei mapping. Quindi conoscerlo non dà un aiuto definitivo.

E' una protezione maggiore tenerlo segreto, o usare un salt diverso per ogni stringa e conservare la relazione stringa-salt in un posto diverso da dove è salvato il dato criptato.
Puoi anche generarlo a partire dalla stringa iniziale (che so, utilizzi come salt un md5 di un md5 di un md5 del base64encode della stringa di partenza) così ti risparmi il problema di doverlo salvare da qualche parte (con lo svantaggio che se si scopre l'algoritmo che lo genera, si scoprono i salt di tutte le stringhe).