Une approche standard dans le monde webapp consiste à diviser la clé et à la placer à différents endroits. Par exemple, vous pourriez diviser la clé et en mettre une partie dans le système de fichiers (en dehors du répertoire 'webapps'), une partie de celle-ci dans la configuration JNDI (ou équivalent .net) et une partie dans la base de données. Obtenir une seule pièce n'est pas particulièrement difficile si vous êtes compromis, par exemple en examinant un support de sauvegarde ou une injection SQL, mais obtenir toutes les pièces nécessitera beaucoup plus de travail.
Vous pouvez diviser une clé en la tapant XOR avec des nombres aléatoires de la même taille. (Utilisez un générateur de nombres aléatoires cryptographiquement fort!) Vous pouvez répéter ce processus plusieurs fois si vous voulez diviser la clé en plusieurs parties. A la fin du processus, vous voulez, par exemple, trois clés partielles telles que p1^p2^p3 = clé. Vous devrez peut-être coder en base64 certaines des clés partielles afin qu'elles puissent être stockées correctement, par exemple, dans une propriété JNDI.
(Il existe des méthodes plus sophistiquées pour fractionner une clé, par exemple un algorithme n-of-m dans lequel vous n'avez pas besoin de toutes les pièces pour recréer la clé, mais cela dépasse ce dont vous avez besoin ici.
Si vous pouvez demander à l'utilisateur d'entrer activement le mot de passe, il existe des algorithmes PBE (mot de passe à base de mots de passe) qui convertissent un mot de passe en une bonne clé symétrique. Vous voulez en trouver un qui nécessite un fichier externe. Encore une fois, les sauvegardes sur bande ou le mot de passe ne suffisent pas, vous avez besoin des deux. Vous pouvez également utiliser ceci pour diviser le mot de passe en deux parties avec JNDI - vous pouvez utiliser une phrase secrète en texte brut dans JNDI et un fichier d'initialisation quelque part dans le système de fichiers. Enfin, quoi que vous fassiez, soyez sûr de pouvoir "re-jouer" votre application assez facilement. Une approche consiste à utiliser le mot de passe obtenu ci-dessus pour déchiffrer un autre fichier contenant la clé de chiffrement réelle. Cela facilite le changement du mot de passe si vous pensez qu'il a été compromis sans nécessiter un recencryptage massif de toutes les données - il vous suffit de rechiffrer votre clé actuelle.
Ce n'est pas une question triviale. Vous pourriez vouloir examiner ce résumé par plusieurs experts en sécurité pour mettre cette question en perspective: http://www.schneier.com/paper-key-escrow.html –