Une approche standard dans le monde des applications Web consiste à diviser la clé et à la placer à différents endroits. Par exemple, vous pouvez diviser la clé et en placer une partie dans le système de fichiers (en dehors du répertoire 'webapps'), une partie dans la configuration JNDI (ou l'équivalent .net), et une partie dans la base de données. Obtenir un seul élément n'est pas particulièrement difficile si vous êtes compromis, par exemple en examinant les supports de sauvegarde ou par injection SQL, mais obtenir tous les éléments demandera beaucoup plus de travail.
Vous pouvez diviser une clé en la soumettant à une opération XOR avec des nombres aléatoires de 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 morceaux. À 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 pour qu'elles puissent être stockées correctement, par exemple dans une propriété JNDI.
(Il existe des moyens plus sophistiqués de diviser une clé, par exemple un algorithme n-de-m où vous n'avez pas besoin de toutes les pièces pour recréer la clé, mais c'est -largement- au-delà de ce dont vous avez besoin ici).
Si vous pouvez exiger de l'utilisateur qu'il saisisse activement le mot de passe, il existe des algorithmes PBE (password-based encryption) qui convertissent un mot de passe en une bonne clé symétrique. Vous devez en trouver un qui nécessite également un fichier externe. Là encore, les sauvegardes sur bande ou le mot de passe lui-même ne suffisent pas, il faut les deux. Vous pourriez également utiliser ceci pour diviser le mot de passe en deux parties avec JNDI - vous pouvez utiliser une phrase de passe en texte clair dans JNDI et un fichier d'initialisation quelque part dans le système de fichiers.
Enfin, quoi que vous fassiez, assurez-vous de pouvoir "recoder" votre application assez facilement. Une approche consiste à utiliser le mot de passe obtenu ci-dessus pour déchiffrer un autre fichier qui contient la véritable clé de chiffrement. Cela permet de changer facilement le mot de passe si vous pensez qu'il a été compromis sans nécessiter un nouveau chiffrement massif de toutes les données - il suffit de rechiffrer votre clé réelle.
4 votes
Il ne s'agit pas d'une question triviale. Vous pouvez consulter ce résumé rédigé par plusieurs experts en sécurité pour mettre cette question en perspective : schneier.com/papier-key-escrow.html