Nella ricerca sulle migliori pratiche nelle password di hashing che utilizzano un salt mi sono imbattuto in presentation su slideshare. L'approccio delineato è il seguente
- Client requests login page
- Server-side code generates random SALT and sends the SALT back to client along with login form
- Client-side JavaScript generates a hash of the password entered by the user added to the salt (hashpwd + salt) called A and sends this to server along with the username
- Server-side code retrieves the hashed password for this user from the db and uses it to generate a new hash (hashpwd + salt), called B.
- Server-side code compares A and B and if they match the user is authenticated.
- Salt is destroyed on server-side.
- The next sign-in request generates a new SALT that only survives for that request.
In questo approccio le password vengono archiviate nel database con hash ma senza sale. Quindi se le password vengono rubate (come LinkedIn), ho ragione nel dire che questo approccio è inutile? Senza un hash la password può essere violata abbastanza facilmente. Quale protezione offre questo approccio? Penso che impedisca gli attacchi di replay generando un nuovo SALE e rende impossibile anche gli attacchi di forza bruta dal front-end. Sarei interessato a conoscere approfondimenti su questo approccio e una buona lista di pro e contro dell'approccio. Non sono un esperto di sicurezza con nessuno sforzo di immaginazione.