Metti un modo un po 'meno descrittivo, ma più concettuale, in pratica vuoi fornire due diversi mezzi per ottenere la stessa chiave. Questa è l'idea di avere una chiave dati, tipicamente unica per un record, o forse per tutti i record di un utente, a seconda delle esigenze di sicurezza. Quindi si cripta quella chiave con una chiave derivata dalla propria password e una chiave derivata da qualche altra informazione. Potrebbe essere una cosa alternativa che sanno o potrebbe essere qualcosa che il tuo server conosce. Può essere una crittografia simmetrica o, per una maggiore sicurezza, le informazioni che il server sa possono utilizzare una chiave pubblica per una chiave privata che non è presente sul server.
Quindi se l'utente perde mai la password e non è quindi in grado di accedere alla chiave dati, la crittografia alternativa può essere decifrata per recuperare la chiave. In ordine di sicurezza, la memorizzazione simmetrica della chiave sul server è meno sicura come se il server e il DB fossero compromessi, la crittografia è resa inutilizzabile. Le informazioni dell'utente potrebbero essere un po 'migliori, ma per essere facilmente memorizzabili, sarà probabilmente anche facilmente ricercabile o indovinabile, il che è insicuro anche se il server non è compromesso. L'opzione asimmetrica in cui il server non ha accesso alle informazioni necessarie per un ripristino (poiché sa solo come crittografare la versione di ripristino della chiave dati è la più sicura, ma è anche la più difficile dal punto di vista dell'usabilità come la decrittografia deve quindi essere effettuata a) a mano o b) da un server secondario altamente protetto, preferibilmente con la chiave privata in un TPM (modulo piattaforma affidabile) o un altro keystore hardware sicuro.
Comunque sia, il principio di base è lo stesso. Rendi la chiave sempre irrecuperabile senza il segreto, la archivi solo più volte con diversi segreti.