Prima di tutto, sono d'accordo con le altre risposte, sottolineando che è molto più sicuro per evitare questo e archiviare solo gli hash delle password, non le password stesse o tutto ciò che può essere ricondotto a una password.
Ci sono momenti, tuttavia, quando è più o meno necessario consentire il recupero. Nel caso delle password, in genere si desidera ripristinare semplicemente consentendo a un amministratore di modificare la password quando / se necessario anziché recuperare la password esistente.
Un'altra possibilità, tuttavia, è quella di consentire all'utente di memorizzare i dati sul server crittografato con la propria password. In questo caso, consentire semplicemente a un amministratore di modificare la password è sufficiente non . La nuova password non funzionerà per decrittografare i dati e la maggior parte degli utenti troverà inaccettabile che tutti i loro dati crittografati diventino inaccessibili quando / se dimenticano / perdono una password. Per questa situazione, c'è un'alternativa che è ragionevolmente sicura, e consente comunque il recupero quando realmente necessario.
Invece di usare la password dell'utente per crittografare i dati, si crea una chiave casuale per crittografare i dati stessi. Quindi memorizzi quella chiave, in un paio di punti: una volta crittografata con la password dell'utente e in un altro posto crittografata con una password amministratore. Quindi quando (non proprio se) l'utente perde la propria password e non può più accedere direttamente ai dati, è possibile utilizzare la password dell'amministratore per decodificare la chiave reale e utilizzarla per recuperare i dati e / o ricodificare la chiave con la nuova password dell'utente.
Se non vuoi fidarti completamente di un singolo amministratore, puoi gestirlo anche tu. Ad esempio, puoi decidere che 5 persone disporranno di chiavi di amministrazione e desideri che almeno tre di esse siano d'accordo prima di poter recuperare una chiave. In questo caso, quando si archivia la password crittografata per scopi amministrativi, la si memorizza più volte, una volta per ogni gruppo di tre dei cinque amministratori (che non occupa molto spazio, poiché si memorizzano solo tasti , a ~ 256 bit a testa, non più copie dei dati). Ognuna di queste copie viene successivamente crittografata con (gli hash di) ciascuna delle password per questi tre amministratori.
Per decrittografarlo, devi identificare i tre amministratori che stanno inserendo le loro password e scegliere la chiave crittografata appropriata per quel gruppo di tre, quindi decifrare usando ciascuna delle tre password per ottenere finalmente la chiave originale. Puoi quindi usarlo per recuperare i dati stessi, oppure puoi semplicemente ricodificarlo con la (nuova) password dell'utente, in modo che possano comunque accedere ai loro dati.
Quando lo fai, però veramente devi usare un algoritmo di crittografia standard e (con una strong preferenza) un'implementazione standard, ben nota e accuratamente studiata.