J'ai un site Web que les utilisateurs soumettent leurs données personnelles et je pense crypter ces données à l'aide d'AES-256 et leur mot de passe est utilisé comme clé pour ce cryptage, puis je stocke les données cryptées dans une base de données MySQL. ... p>
Maintenant, si l'utilisateur change son mot de passe, comment changera la clé des données cryptées p>
devrais-je recueillir toutes les données de la base de données puis décrypter leurs données avec l'ancienne touche, puis la crypter à nouveau avec une nouvelle clé? P>
4 Réponses :
c'est idiot. p>
AES utilise une touche de 256 bits, alors lorsque vous dites que vous utiliserez leur mot de passe pour la clé, il ne sera pas presque aussi long que la taille de la taille de la clé. P>
Je vais avoir son mot de passe pour me donner le 256 octet, puis l'utiliser dans le cryptage
Tout d'abord, vous ne devez généralement pas utiliser le mot de passe comme clé AES. Peut-être quelque chose comme un hash cryptographique (pas MD5) du mot de passe + un sel (vous stockez le sel mais pas le hachage dans ce cas). P>
Une chose que vous pourriez faire est de chiffrer les fichiers de chaque utilisateur avec une clé aléatoire, puis de chiffrer cette touche avec le mot de passe salé haché +. Si l'utilisateur modifie les mots de passe, il vous suffit de ré-chiffrer la clé. P>
Vous n'avez pas besoin de ré-chiffrer toutes les données de l'utilisateur lorsqu'ils modifient leur mot de passe. P>
génère une clé secrète pour chiffrer les données d'un utilisateur; Appelez cette "clé de cryptage de contenu". Dériver une clé du mot de passe de l'utilisateur; Appelez cette "clé de cryptage clé". Chiffrer la "clé de cryptage de contenu" à l'aide de la "clé de cryptage clé". Stockez la clé cryptée avec le sel et le nombre d'itérations utilisées pour la dérivation de clé. P>
S'ils changent de mot de passe, décrypter la clé de cryptage de contenu avec l'ancien mot de passe et le recrutez-le avec une clé dérivée du nouveau mot de passe. Vous devez choisir un nouveau sel pour le nouveau mot de passe et vous assurer de la stocker avec la nouvelle clé cryptée. P>
Étant donné que la clé de cryptage de contenu est choisie au hasard dans un vaste espace, vous pouvez utiliser la BCE en toute sécurité comme mode de chiffrement lorsque vous le crypter. P>
N'as tout simplement pas le mot de passe, même si vous utilisez du sel, même si vous utilisez un algorithme aussi non brisé. Vous devez répéter l'opération de hachage des milliers de fois. Il existe des bibliothèques pour le faire (correctement) sur la plupart des plates-formes. Utilisez un algorithme de dérivation de clé (PBKDF2, de PKCS n ° 5) pour créer une clé secrète d'un mot de passe. P>
Ce concept suit Le projet de mot de passe S / S / Cryptage MIME. P>
Où la clé cryptée serait-elle stockée? En mémoire sur le serveur d'applications ou en stockage physique sur le serveur de base de données?
@DIMGL stocké dans un stockage fiable et persistant, avec des sauvegardes. Certainement pas en mémoire. Sauf si vous ne vous souciez pas si le contenu est irrévocablement détruit par une panne de courant.
Comment signifie "car la clé de cryptage de contenu est choisi au hasard dans un espace énorme" Aide avec les problèmes avec la BCE?
@Freek Parce que chaque plainte (clé de cryptage de contenu) utilisé avec une clé de cryptage de clé particulière est unique, les chiffres de cipertex obtenus sont également.
Voir aussi la deuxième citation de cryptographie appliquée i> ici.
Ah Vous voulez dire le cryptage du cryptage de contenu, j'ai lu le cryptage des données avec i> la clé de cryptage de contenu sur mon premier look de cette réponse.
Une possibilité d'envisager découle la clé utilisée pour chiffrer les données de la clé utilisée pour accéder aux données. Fait attentivement, cela permet à l'utilisateur de modifier leur mot de passe aussi souvent qu'ils le désirent, tandis que vous ne modifiez qu'un enregistrement dans la base de données. Séparément, vous pouvez planifier des modifications à la ou les touches (s) chiffrer leurs données lorsqu'il vous convient. P>
Comment ça marche? P>
L'avantage de ce niveau d'indirection vient lorsque l'utilisateur souhaite modifier leur mot de passe. Si vous n'utilisez pas une technique analogue à cela, vous devrez obtenir et valider l'ancien mot de passe et le nouveau mot de passe, décrypter toutes les données avec l'ancien mot de passe et ré-chiffrer tout avec le nouveau mot de passe. P >
Avec le niveau d'indirection, vous invitez toujours l'utilisateur à son ancien mot de passe (P1 U SUB>) et de leur nouveau mot de passe (P2 U SUB>) et de les valider, mais vous les validez. seulement avoir à déchiffrer E1 u sub> puis re-chiffrer avec une nouvelle clé K2 U, K SUB> généré à partir d'un nouveau sel S2 U SUB> et le Nouveau mot de passe P2 U SUB>. Vous n'avez pas à toucher les données cryptées du tout. P>
Avec le niveau d'indirection, le système S peut également conserver une deuxième copie cryptée de la clé de données K U, D SUB>, crypté avec le mot de passe du système. Si cela devient nécessaire ou souhaitable de modifier la clé utilisée pour crypter les données, le système peut utiliser sa copie cryptée de la clé pour le faire. Il peut conserver un enregistrement de quelle clé a été enregistré pour la dernière fois par l'utilisateur dans leur clé, de sorte que lorsque l'utilisateur revient à regarder les données, il peut disposer de modifier la clé enregistrée K2 U, D SUB> car A cette époque, il a leur mot de passe (le reste du temps, il ne le fait pas). P>
Ceci est une variation douce sur certaines des idées de " Cryptographie dans la base de données: la dernière ligne de défense "de Kevin Kenan. Les touches KN U, K SUB> sont des exemples d'une clé de kek, une clé de cryptage de clé. Vous pouvez également lire sur les familles clés du livre, ce qui aiderait à la gestion des données cryptées. P>