Ein Standardansatz in der Webapp-Welt ist es, den Schlüssel aufzuteilen und an verschiedenen Stellen zu platzieren. Z. B. könnten Sie den Schlüssel teilen und einen Teil davon in das Dateisystem (außerhalb des "webapps" -Verzeichnisses), einen Teil davon in die JNDI-Konfiguration (oder eine .net-Entsprechung) und einen Teil davon in die Datenbank einfügen. Es ist nicht besonders schwierig, ein einzelnes Teil zu erhalten, wenn Sie kompromittiert sind, z. B. das Durchsuchen von Backup-Medien oder SQL-Injection, aber das Abrufen aller Teile erfordert viel mehr Arbeit.
Sie können einen Schlüssel teilen, indem Sie ihn mit Zufallszahlen der gleichen Größe XOR-ing. (Verwenden Sie einen kryptografisch starken Zufallszahlengenerator!) Sie können diesen Vorgang mehrmals wiederholen, wenn Sie den Schlüssel in mehrere Teile aufteilen möchten. Am Ende des Prozesses möchten Sie z.B. drei partielle Schlüssel, so daß p1^p2^p3 = Schlüssel ist. Möglicherweise müssen Sie einige der Teilschlüssel mit base64 codieren, damit sie ordnungsgemäß gespeichert werden können, z. B. in einer JNDI-Eigenschaft.
(Es gibt ausgefeiltere Möglichkeiten, einen Schlüssel aufzuteilen, z. B. einen n-von-m-Algorithmus, bei dem nicht alle Teile erforderlich sind, um den Schlüssel neu zu erstellen, aber weit darüber hinaus.)
Wenn Sie verlangen können, dass der Benutzer das Passwort aktiv eingibt, gibt es PBE (Passwort-basierte Verschlüsselung) Algorithmen, die ein Passwort in einen guten symmetrischen Schlüssel konvertieren. Sie möchten einen finden, der auch eine externe Datei benötigt. Wiederum ist es ein Fall, dass die Band-Backups oder das Passwort selbst nicht ausreichen, Sie brauchen beides. Sie können dies auch verwenden, um das Passwort in zwei Teile mit JNDI aufzuteilen - Sie können eine Klartext-Passphrase in JNDI und eine Initialisierungsdatei irgendwo im Dateisystem verwenden.
Schließlich, was auch immer Sie tun, stellen Sie sicher, dass Sie Ihre Anwendung relativ einfach "rekey" können. Ein Ansatz besteht darin, das oben erhaltene Passwort zu verwenden, um eine andere Datei zu entschlüsseln, die den eigentlichen Verschlüsselungsschlüssel enthält. Dies macht es einfach, das Passwort zu ändern, wenn Sie der Meinung sind, dass es kompromittiert wurde, ohne dass eine massive Wiederverschlüsselung aller Daten erforderlich wäre - einfach den tatsächlichen Schlüssel erneut verschlüsseln.
Dies ist keine triviale Frage. Sie können diese Zusammenfassung von mehreren Sicherheitsexperten überprüfen, um diese Frage zu relativieren: http://www.schneier.com/paper-key-escrow.html –