Salted Password Hashing: Login Più Sicure
Grazie al meccanismo delle “Salted Password Hashing” è possibile generare password sicure per il proprio sistema di Login. Ora, senza entrare nel vivo della teoria, provo a spiegarvi il perché utilizzarlo.
Caso Tradizionale: Più utenti con la stessa password hanno lo stesso hash
Case Salted Password Hashing: Ogni utente avrà il suo hash anche se la password è la stessa
ATTENZIONE: Questo articolo è da prendere come “AS IS” senza garanzie per l’utilizzo e/o per problemi di validazione delle password generate con esso. Si consiglia vivamente una fase di test come nell’esempio riportato in fondo all’articolo.
Salted Password Hashing: Esempio a “parole”
Per questo tutorial utilizzeremo una classe dal nome SaltedPasswordHashing. Al suo interno troveremo:
Classe UserLogin: contiene informazioni minimali dell’utente (ID, Name, Password)
CreateNewUser: passando in ingresso Name e Password otterremo una istanza di “UserLogin” con la password criptata
GeneratePasswordHash: Il metodo vero e proprio che consente di ottenere la “password personalizzata” per ogni utente. In questo metodo utilizzeremo anche una costante dal nome SITE_PRIVATE_KEY per inserire un terzo elemento per rendere più ardua l’identificazione. Cambiare SITE_PRIVATE_KEY implica il non accedere/validare più le password precedenti.
Salted Password Hashing: The Source Code
UserLogin
|
|
CreateNewUser
|
|
GeneratePasswordHash
|
|
Nel codice proposto ho usato la criptografia MD5. E’ possibile utilizzare altri sistemi, a patto che derivino da HashAlgorithm. Un esempio?
- System.Security.Cryptography.KeyedHashAlgorithm
- System.Security.Cryptography.MD5
- System.Security.Cryptography.RIPEMD160
- System.Security.Cryptography.SHA1
- System.Security.Cryptography.SHA256
- System.Security.Cryptography.SHA384
- System.Security.Cryptography.SHA512
Come vedete le possibilità non mancano.
Salted Password Hashing: Generazione & test
Il codice appena proposto è molto semplice, ora vediamo in maniera altrettanto semplice come scatenare il tutto e verificare se la password generata è sempre la stessa oppure no. TestPasswordHash
|
|
In cosa consiste l’esempio proposto? Come prima cosa parto da un elenco di Guid generate al volo e cablate per averle identiche ad ogni lancio del test. In seguito si lanciano due lanci del generatore di password. Il primo per memorizzarla ed il secondo per confrontarla con quella appena generata. Se le due password coincidono è corretto.