Sto costruendo un'applicazione con i seguenti requisiti:
- Un client accede con e-mail e password. Sul server,
bcrypt(password)
è calcolato e confrontato con ciò che è memorizzato nel database. - Se l'autenticazione ha esito positivo, il server invia un blocco di dati crittografati che verrà successivamente decrittografato sul client. (Ad un certo punto nel passato, i dati sono stati crittografati dal client e inviati al server.)
- La password per i dati crittografati non deve mai essere inviata al server, quindi non posso usare la stessa password per l'autenticazione e la crittografia / decrittografia.
Una soluzione che soddisfi questi requisiti è quella di utilizzare solo due password: una per l'autenticazione e una per la crittografia / decrittografia dei dati. Tuttavia, gli utenti dovranno ricordare due password e potrebbero mescolarle, inviando involontariamente la password di decrittazione al server e violando il terzo requisito.
Un'alternativa che richiede una sola password: utilizzare la password per la crittografia / decrittografia e bcrypt(password)
per l'autenticazione. In questo modo, il database memorizzerebbe bcrypt(bcrypt(password))
e il server non gestirà mai la password di crittografia / decrittografia.
È una cosa ragionevole da fare o sto trascurando un problema di sicurezza? Il tempo di calcolo / accesso aggiuntivo causato dal calcolo di due hash non sarebbe un problema.