Nella mia applicazione vorrei crittografare i dati dell'utente in modo tale che non ho accesso ad essi. Per fare questo seguirò i seguenti passi:
- Genera una chiave a 256 bit
- Crittografa dati con chiave
- Ricava la seconda chiave dalla password (PBKDF2)
- Cripta la 1a chiave, distruggi la chiave di testo semplice
- Store hash + password salata e chiave crittografata
Ora il mio problema è questo: devo ancora fornire un modo per reimpostare la password quando viene dimenticata.
Mi rendo conto che seguendo questo schema di stile "trust-nessuno" direttamente si contrappone la possibilità di fornire una funzionalità di reimpostazione della password ma spero in una soluzione che possa aiutare a mantenere lo spirito dello schema attraverso un compromesso sano, senza richiedere un secondo segreto all'utente come le risposte alle domande di sicurezza o una terza parte attendibile.
Le mie idee:
- Memorizzazione di una copia della chiave di crittografia per utente con una chiave controllata dalla mia applicazione come backup, pronta per essere nuovamente crittografata con la nuova password (ripristinata) per le operazioni quotidiane. Per essere chiari, sto bene con l'accesso ai dati da solo - invece, mirano a limitare i potenziali dati a cui un hacker di successo potrebbe accedere.
- All'atto della registrazione, inviando un link di reimpostazione della password alla tua e-mail contenente una chiave nel link utilizzato per crittografare una versione di backup della chiave crittografata, pronta per la nuova crittografia utilizzando la nuova password.