Un approccio standard nel mondo webapp è quello di dividere la chiave e metterla in luoghi diversi. Ad esempio, è possibile suddividere la chiave e inserirne una parte nel filesystem (al di fuori della directory 'webapps'), parte di essa nella configurazione JNDI (o equivalente .net) e parte di essa nel database. Ottenere qualsiasi singolo pezzo non è particolarmente difficile se sei compromesso, ad es. Esaminare supporti di backup o SQL injection, ma ottenere tutti i pezzi richiederà molto più lavoro.
È possibile dividere un tasto XOR-it con numeri casuali della stessa dimensione. (Utilizzare un generatore di numeri casuali crittograficamente forte!) È possibile ripetere questo processo più volte se si desidera dividere la chiave in più parti. Alla fine del processo, ad esempio, tre chiavi parziali come p1^p2^p3 = chiave. Potrebbe essere necessario codificare in base64 alcune chiavi parziali in modo che possano essere archiviate correttamente, ad es. In una proprietà JNDI.
(Esistono modi più sofisticati per dividere un tasto, ad esempio un algoritmo n-of-m in cui non è necessario ricorrere a tutti i pezzi per ricreare la chiave, ma questo è ben oltre ciò che è necessario qui.)
Se è possibile richiedere all'utente di immettere attivamente la password, esistono algoritmi PBE (crittografia basata su password) che convertono una password in una buona chiave simmetrica. Vuoi trovarne uno che richieda anche un file esterno. Anche in questo caso, i backup su nastro o la password stessa non sono sufficienti, ne occorrono entrambi. Puoi anche usare questo per dividere la password in due parti con JNDI: puoi usare una passphrase in chiaro in JNDI e un file di inizializzazione da qualche parte nel filesystem.
Infine, qualunque cosa tu sia, puoi tranquillamente "reimpostare" la tua applicazione. Un approccio consiste nell'utilizzare la password ottenuta in precedenza per decrittografare un altro file che contiene la chiave di crittografia effettiva. Ciò semplifica la modifica della password se ritieni che sia stata compromessa senza richiedere un'enorme ricodifica di tutti i dati, semplicemente ricodificando la tua chiave effettiva.
Questa non è una domanda banale. Potrebbe essere utile rivedere questo abstract da diversi esperti di sicurezza per mettere questa domanda in prospettiva: http://www.schneier.com/paper-key-escrow.html –