J'ai une application Web qui a le cas d'utilisation suivant:
Est-ce faisable? Comment les données doivent-elles être cryptées?
Vous pouvez utiliser une fonction de dérivation de clé pour convertir le mot de passe de l'utilisateur en une clé de chiffrement. Ensuite, vous utiliseriez un générateur de nombres pseudo-aléatoires cryptographiquement sécurisé pour générer une clé distincte qui crypterait les données de l'utilisateur. Vous utiliseriez ensuite la clé dérivée pour crypter la clé générée. Le texte chiffré résultant de la clé de chiffrement des données pourrait ensuite être stocké en toute sécurité dans la table utilisateur de votre base de données (appelez le champ "clé chiffrée" si vous le souhaitez). De cette façon, le mot de passe de l'utilisateur deviendra le moyen de décrypter la clé cryptée de l'utilisateur. La clé qui crypte réellement les données n'est décryptée que suffisamment longtemps pour décrypter les données qu'elle a cryptées. Vous devrez stocker cette clé dans la session afin d'éviter d'avoir à demander à l'utilisateur son mot de passe à chaque occurrence de déchiffrement.
Vous pouvez également stocker la clé de chiffrement de clé sur un service de gestion de clés tel que celui proposé par Amazon AWS. De cette façon, vous récupérez la clé d'Amazon sur TLS en utilisant uniquement une référence à la clé. Bien sûr, dans ce cas, vous devrez toujours stocker les informations d'authentification pour le KMS quelque part dans votre architecture, éventuellement dans un fichier de configuration hautement sécurisé récupéré à distance.
Générateur de nombres aléatoires ⟶ Aide à créer la clé # 1.
Cette clé crypte vos données. Il reste constant dans le temps. Vous devez générer cette clé lors de la première inscription de l'utilisateur. Utilisez un CSPRNG (générateur de nombres pseudo-aléatoires cryptographiquement sécurisé) pour garantir un caractère aléatoire et imprévisible suffisant.
Mot de passe ⟶ Converti en clé # 2 avec PBKDF2.
Cette clé, la clé n ° 2, est utilisée pour crypter la clé n ° 1. Vous voudrez conserver la clé n ° 2 dans la session de l'utilisateur. Stockez la forme cryptée de la clé n ° 1 dans la table utilisateur, dans un champ appelé (peut-être) "clé cryptée".
Modification des mots de passe
Chaque fois que l'utilisateur modifie son mot de passe, il vous suffit d'exécuter l'étape 2 à nouveau, plutôt que de crypter toutes vos données, encore une fois. Il vous suffit de convertir le nouveau mot de passe en une clé (clé n ° 2), de rechiffrer la clé n ° 1 et d'écraser l'ancienne valeur de la forme cryptée de la clé n ° 1.
Chiffrement/déchiffrement des données
Une fois l'utilisateur connecté, exécutez l'étape 2. Une fois le mot de passe converti en clé, déchiffrez simplement la clé n ° 1. Maintenant que vous avez décrypté la clé n ° 1, vous pouvez utiliser la clé n ° 1 pour crypter et décrypter vos données.
Je ne sais pas si cela peut être efficace en tant que commentaire, au lieu d'une réponse: heureux de changer pour le mieux.
Le seul but est de donner une représentation visuelle de réponse acceptée de @ vrtjason , car cela inclut un certain nombre de scénarios et implique l'utilisation de deux clés (de chiffrement). Voici:
Pour être complet, les clés impliquées dans de tels protocoles jouent des rôles connus dans la littérature comme:
HTH