Pour une mise en œuvre du GDPR (EU General Data Protection Regulation), je dois crypter certaines informations personnelles. Il existe deux façons de crypter les données:
Laissez l'application Web avoir la seule responsabilité du chiffrement et du déchiffrement. Les données réelles dans la base de données sont entièrement cryptées. De cette façon, si les données sont volées, les données sont en sécurité (en supposant que mon cryptage est bon).
Activez le chiffrement au niveau de la base de données et ajoutez l'application Web d'accès en tant que client de confiance. Le chiffrement et le déchiffrement se produisent dans la base de données elle-même. De cette façon, si les informations d'identification de la base de données sont connues, les données sont perdues.
Alors, quelle est la meilleure façon sans trop compromettre les performances?
Laisser votre base de données gérer le cryptage/décryptage est probablement pour le mieux:
Il y a un point en faveur du chiffrement côté client, que vous avez déjà mentionné. C'est un gros problème, mais je ne pense pas qu'il l'emporte sur les avantages ci-dessus:
SELECT * FROM table;
et décrypter et filtrer manuellement chaque ligne, ce qui ne va tout simplement pas bien se passer. Vous garderez la clé en mémoire sur un serveur directement accessible sur le Web pendant une longue période, en réponse directe à une demande qui peut être envoyée par un attaquant.Comme Kevinsouligne , vous avez également la possibilité de crypter des champs spécifiques. Par exemple, si vous stockez le nom d'utilisateur et le numéro de carte de crédit d'un client, ce dernier définitivement doit être crypté, mais le premier ne le fait probablement pas. Vous pouvez inclure par exemple une contrainte CHECK
pour vous assurer que vous n'ajoutez pas accidentellement une carte de crédit non chiffrée. Les numéros de carte de crédit en sont un bon exemple, car vous n'avez jamais besoin de faire de correspondance avec eux - vous ne les récupérez ou ne les stockez que dans la base de données, vous pouvez donc les gérer efficacement du côté client.
Cependant, notez que une bonne sécurité n'est pas une chose . Une bonne sécurité fait tout correctement:
Quelle que soit la façon dont vous gérez votre base de données, ce n'est pas la fin du chemin. Assurez-vous de prendre soin de tout .
L'ajout de cryptage sur sa base de données par champ ou par groupe de champs semble être le meilleur compromis à condition qu'un ou plusieurs champs d'index soient également créés avec chaque champ crypté.
Vous résoudriez plusieurs problèmes à la fois.
La dernière tendance est de stocker les clés privées dans un HSM qui sont des modules de sécurité matériels. Il existe des options pour marquer la clé comme non exportable depuis le HSM. Le morceau de données qui doit être chiffré est envoyé au HSM, mais il peut être un problème de performance en cas de grande quantité de données. Si la clé est exportable, elle sera uniquement exportée et conservée en mémoire pour être utilisée par l'application pour le chiffrement. Lorsque la clé est exportée, elle doit d'abord être chiffrée à l'aide d'une autre clé publique dans le HSM, puis envoyée à l'application. Étant donné que l'application possède sa clé privée, elle peut déchiffrer notre clé de chiffrement principale. Maintenant, la question est de savoir où cette clé de clé doit être stockée? Il peut être stocké dans une base de données avec un accès limité.