Attualmente memorizzo le password dei miei utenti come hash PBKDF2, per la parte di autenticazione della mia applicazione web.
Ogni utente ha anche la propria chiave privata e la propria chiave pubblica (anch'essa memorizzata nel proprio profilo utente nel database). La chiave privata viene crittografata con la password in testo semplice al momento della registrazione.
Ora, sono giunto alla parte in cui ho bisogno di recuperare la chiave privata dell'utente, per decifrare altri dati - quindi il problema è; quale sarebbe il modo migliore per permettermi di accedere alla chiave privata dell'utente?
Ho in mente un paio di idee:
I could (upon login) decrypt the private key, then encrypt it with DPAPI and store it in persistent memory (server side).
I could encrypt the user's password with an OTP, and then store the encrypted password in a cookie (on each request I could generate a new OTP, re-encrypt the password, and put back in the cookie) The OTP would have to be stored in server-side persistent memory (probably encrypted with DPAPI).
I could store the store the OTP and the encrypted password in persistent memory (server side).
I could store half of the password (encrypted) in a cookie and half in persistent memory (server side).
Quale di queste opzioni sarebbe la più sicura? C'è un altro metodo a cui non ho pensato?
So che rotolare il tuo è una cosa baaad, ma questa applicazione non ha bisogno di essere super sicura a livello di governo, ma mi piacerebbe che fosse il più sicuro possibile.