Prima di tutto, sono d'accordo con le altre risposte sottolineando che è molto più sicuro evitarlo e archiviare solo hash di password, non le password stesse o tutto ciò che può essere trasformato in una password.
Ci sono momenti, tuttavia, in cui è 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é ripristinare la password esistente.
Un'altra possibilità, tuttavia, è quella di consentire all'utente di archiviare dati sul server crittografati con la propria password. In questo caso, consentire semplicemente a un amministratore di modificare la password non è sufficiente. 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, esiste un'alternativa che è ragionevolmente sicura e consente comunque il ripristino quando è realmente necessario.
Invece di utilizzare la password dell'utente per crittografare i dati, si crea una chiave casuale per crittografare i dati stessi. Quindi archiviare quella chiave, in un paio di posizioni: una volta crittografata con la password dell'utente e in un'altra posizione crittografata con una password dell'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 decrittografare la chiave reale e utilizzarla per recuperare i dati e / o crittografare nuovamente 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 delle chiavi di amministratore e desideri che almeno tre di esse siano d'accordo prima che una chiave possa essere recuperata. In questo caso, quando memorizzi la password crittografata per scopi amministrativi, la memorizzi più volte, una volta ciascuna per ciascuna serie di tre dei cinque amministratori (che non occupa molto spazio, poiché stai memorizzando solo più chiavi , a ~ 256 bit ciascuno, non più copie dei dati). Ognuna di quelle copie viene successivamente crittografata con (gli hash di) ciascuna delle password per quei tre amministratori.
Per decrittografarlo, devi identificare i tre amministratori che stanno inserendo le loro password e scegliere la chiave crittografata appropriata per quel set di tre, quindi decrittografare utilizzando ciascuna delle tre password per ottenere finalmente la chiave originale. Puoi quindi usarlo per recuperare i dati stessi, oppure puoi semplicemente crittografarli nuovamente con (hash of) la nuova password dell'utente in modo che possano ancora accedere ai loro dati.
Quando si esegue questa operazione, però, è davvero necessario utilizzare un algoritmo standard di crittografia, e (da una forte preferenza) uno standard, ben noto, accuratamente studiato implementazione di esso.