Stavo leggendo qui su Hash and Sali e ho pensato a un altro metodo per eseguire l'autenticazione dell'utente. Ho bisogno dei tuoi pensieri su questo perché potrei trascurare qualcosa.
Scenario:
Per l'autenticazione dell'applicazione web, la tendenza generale è quella di hash la password aggiungendo un salt casuale, con una strong funzione di hash. L'hash casuale e l'hash generato vengono memorizzati nel database. Successivamente, quando l'utente desidera autenticare, la password immessa dall'utente viene nuovamente sottoposta a hash con il sale memorizzato e l'hash generato viene confrontato con l'hash precedentemente memorizzato.
Ora riguardo al mio metodo:
- Memorizziamo un master secret text (purché sia necessario) nel nostro database e utilizziamo il sale esclusivo per utente.
- Invece di archiviare l'hash della password, crittografiamo simmetricamente (hash (master secret + salt)) utilizzando la password utente come chiave e memorizziamo questo valore crittografato nel nostro database.
- Quando l'utente vuole autenticare, questo valore crittografato precedentemente memorizzato sarà decifrato usando la password dell'utente come chiave e otterremo un hash (segreto principale + sale). Questo hash decodificato verrà confrontato con l'hash appena calcolato (master secret + salt)
- Se l'utente immette una password errata, la decrittografia fallirà e otterremo un hash sbagliato che non riuscirà a confrontare con hash (master secret + salt)
In questo modo non memorizziamo la password utente nel database in nessuna forma (testo normale, hash, crittografato). Voglio sapere come questo metodo si confronta con il nostro solito metodo di hashing delle password.