Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Chiffrement consultable
Notre bibliothèque de chiffrement côté client a été renommée AWS Database Encryption. SDK Ce guide du développeur fournit toujours des informations sur le client de chiffrement DynamoDB. |
Le chiffrement consultable vous permet de rechercher des enregistrements cryptés sans déchiffrer l'intégralité de la base de données. Cela se fait à l'aide de balises, qui créent une carte entre la valeur en texte brut écrite dans un champ et la valeur cryptée réellement stockée dans votre base de données. Le chiffrement AWS de base de données SDK stocke la balise dans un nouveau champ qu'il ajoute à l'enregistrement. Selon le type de balise que vous utilisez, vous pouvez effectuer des recherches de correspondance exacte ou des requêtes complexes plus personnalisées sur vos données chiffrées.
Note
Le chiffrement consultable dans la AWS base de données Le chiffrement SDK diffère du chiffrement symétrique consultable défini dans la recherche universitaire, tel que le chiffrement symétrique consultable
Une balise est une balise tronquée de code d'authentification des messages basée sur le hachage (HMAC) qui crée une carte entre le texte en clair et les valeurs cryptées d'un champ. Lorsque vous écrivez une nouvelle valeur dans un champ chiffré configuré pour le chiffrement consultable, le chiffrement de AWS base de données SDK calcule une valeur supérieure à la valeur en HMAC texte brut. Cette HMAC sortie correspond à une correspondance un à un (1:1) pour la valeur en texte brut de ce champ. La HMAC sortie est tronquée afin que plusieurs valeurs de texte clair distinctes correspondent à la même balise tronquéeHMAC. Ces faux positifs limitent la capacité d'un utilisateur non autorisé à identifier des informations distinctives concernant la valeur en texte brut. Lorsque vous interrogez une balise, le chiffrement AWS de base de données filtre SDK automatiquement ces faux positifs et renvoie le résultat en texte brut de votre requête.
Le nombre moyen de faux positifs générés pour chaque balise est déterminé par la longueur restante de la balise après troncature. Pour obtenir de l'aide pour déterminer la longueur de balise appropriée pour votre implémentation, consultez la section Détermination de la longueur de balise.
Note
Le chiffrement consultable est conçu pour être mis en œuvre dans de nouvelles bases de données non peuplées. Toute balise configurée dans une base de données existante ne cartographiera que les nouveaux enregistrements téléchargés dans la base de données, il n'y a aucun moyen pour une balise de mapper des données existantes.
Rubriques
Les balises sont-elles adaptées à mon ensemble de données ?
L'utilisation de balises pour effectuer des requêtes sur des données chiffrées réduit les coûts de performance associés aux bases de données chiffrées côté client. Lorsque vous utilisez des balises, il existe un compromis inhérent entre l'efficacité de vos requêtes et la quantité d'informations révélées sur la distribution de vos données. La balise ne modifie pas l'état chiffré du champ. Lorsque vous chiffrez et signez un champ avec le chiffrement de AWS base de donnéesSDK, la valeur en texte brut du champ n'est jamais exposée à la base de données. La base de données stocke la valeur chiffrée aléatoire du champ.
Les balises sont stockées à côté des champs cryptés à partir desquels elles sont calculées. Cela signifie que même si un utilisateur non autorisé ne peut pas voir les valeurs en texte clair d'un champ crypté, il peut être en mesure d'effectuer une analyse statistique sur les balises pour en savoir plus sur la distribution de votre ensemble de données et, dans les cas extrêmes, identifier les valeurs en texte clair auxquelles une balise correspond. La façon dont vous configurez vos balises peut atténuer ces risques. En particulier, le choix de la bonne longueur de balise peut vous aider à préserver la confidentialité de votre ensemble de données.
Sécurité et performance
-
Plus la longueur de la balise est courte, plus la sécurité est préservée.
-
Plus la longueur de la balise est longue, plus les performances sont préservées.
Le chiffrement consultable peut ne pas être en mesure de fournir les niveaux de performance et de sécurité souhaités pour tous les ensembles de données. Passez en revue votre modèle de menace, vos exigences de sécurité et vos besoins en matière de performances avant de configurer des balises.
Tenez compte des exigences d'unicité des ensembles de données suivantes pour déterminer si le chiffrement consultable convient à votre ensemble de données.
- Diffusion
-
Le niveau de sécurité préservé par une balise dépend de la distribution de votre ensemble de données. Lorsque vous configurez un champ chiffré pour le chiffrement consultable, le chiffrement AWS de base de données SDK calcule et HMAC surpasse les valeurs en texte brut écrites dans ce champ. Toutes les balises calculées pour un champ donné sont calculées à l'aide de la même clé, à l'exception des bases de données mutualisées qui utilisent une clé distincte pour chaque locataire. Cela signifie que si la même valeur en texte brut est écrite plusieurs fois dans le champ, la même HMAC balise est créée pour chaque instance de cette valeur en texte brut.
Vous devez éviter de créer des balises à partir de champs contenant des valeurs très communes. Prenons l'exemple d'une base de données qui stocke l'adresse de chaque résident de l'État de l'Illinois. Si vous créez une balise à partir du
City
champ crypté, la balise calculée sur « Chicago » sera surreprésentée en raison du pourcentage élevé de la population de l'Illinois qui vit à Chicago. Même si un utilisateur non autorisé peut uniquement lire les valeurs cryptées et les valeurs des balises, il peut être en mesure d'identifier les enregistrements contenant des données relatives aux résidents de Chicago si la balise préserve cette distribution. Pour minimiser la quantité d'informations distinctives révélées concernant votre distribution, vous devez suffisamment tronquer votre balise. La longueur de balise requise pour masquer cette distribution inégale entraîne des coûts de performance importants qui risquent de ne pas répondre aux besoins de votre application.Vous devez analyser soigneusement la distribution de votre jeu de données afin de déterminer dans quelle mesure vos balises doivent être tronquées. La longueur de balise restante après la troncature est directement corrélée à la quantité d'informations statistiques pouvant être identifiées sur votre distribution. Vous devrez peut-être choisir des longueurs de balise plus courtes pour minimiser suffisamment la quantité d'informations distinctives révélées à propos de votre ensemble de données.
Dans les cas extrêmes, vous ne pouvez pas calculer la longueur d'une balise pour un ensemble de données distribué de manière inégale afin d'équilibrer efficacement les performances et la sécurité. Par exemple, vous ne devez pas créer de balise à partir d'un champ qui contient le résultat d'un test médical pour une maladie rare. Comme les
NEGATIVE
résultats devraient être nettement plus répandus dans l'ensemble de données, lesPOSITIVE
résultats peuvent être facilement identifiés en fonction de leur rareté. Il est très difficile de masquer la distribution lorsque le champ ne comporte que deux valeurs possibles. Si vous utilisez une balise suffisamment courte pour masquer la distribution, toutes les valeurs en texte brut correspondent à la même HMAC balise. Si vous utilisez une longueur de balise plus longue, il est évident de savoir quelles balises correspondent à des valeurs en texte brutPOSITIVE
. - Corrélation
-
Nous vous recommandons vivement d'éviter de créer des balises distinctes à partir de champs contenant des valeurs corrélées. Les balises construites à partir de champs corrélés nécessitent des longueurs de balise plus courtes pour minimiser suffisamment la quantité d'informations révélées sur la distribution de chaque ensemble de données à un utilisateur non autorisé. Vous devez analyser soigneusement votre ensemble de données, notamment son entropie et la distribution conjointe des valeurs corrélées, afin de déterminer dans quelle mesure vos balises doivent être tronquées. Si la longueur des balises qui en résulte ne répond pas à vos besoins en termes de performances, les balises ne conviennent peut-être pas à votre ensemble de données.
Par exemple, vous ne devez pas créer deux balises
City
et deuxZIPCode
champs distincts, car le ZIP code sera probablement associé à une seule ville. Généralement, les faux positifs générés par une balise limitent la capacité d'un utilisateur non autorisé à identifier des informations distinctives concernant votre ensemble de données. Mais la corrélation entre lesZIPCode
champsCity
et permet à un utilisateur non autorisé d'identifier facilement les résultats faussement positifs et de distinguer les différents ZIP codes.Vous devez également éviter de créer des balises à partir de champs contenant les mêmes valeurs en texte brut. Par exemple, vous ne devez pas créer de balise à partir de
preferredPhone
champsmobilePhone
et de champs, car ils contiennent probablement les mêmes valeurs. Si vous créez des balises distinctes à partir des deux champs, le chiffrement AWS de base de données SDK crée les balises pour chaque champ sous des clés différentes. Il en résulte deux HMAC balises différentes pour la même valeur en texte brut. Il est peu probable que les deux balises distinctes présentent les mêmes faux positifs et un utilisateur non autorisé pourrait être en mesure de distinguer différents numéros de téléphone.
Même si votre jeu de données contient des champs corrélés ou présente une distribution inégale, vous pouvez peut-être créer des balises qui préservent la confidentialité de votre ensemble de données en utilisant des longueurs de balise plus courtes. Cependant, la longueur des balises ne garantit pas que chaque valeur unique de votre ensemble de données produira un certain nombre de faux positifs qui minimiseront efficacement la quantité d'informations distinctives révélées à propos de votre ensemble de données. La longueur de la balise estime uniquement le nombre moyen de faux positifs produits. Plus votre jeu de données est inégalement distribué, moins la longueur de balise est efficace pour déterminer le nombre moyen de faux positifs produits.
Examinez attentivement la distribution des champs à partir desquels vous construisez les balises et déterminez dans quelle mesure vous devrez tronquer la longueur des balises pour répondre à vos exigences de sécurité. Les rubriques suivantes de ce chapitre supposent que vos balises sont distribuées de manière uniforme et ne contiennent pas de données corrélées.
Scénario de chiffrement consultable
L'exemple suivant illustre une solution de chiffrement consultable simple. En application, les champs d'exemple utilisés dans cet exemple peuvent ne pas respecter les recommandations d'unicité de distribution et de corrélation pour les balises. Vous pouvez utiliser cet exemple comme référence lorsque vous découvrirez les concepts de chiffrement consultables dans ce chapitre.
Prenons l'exemple d'une base de données nommée Employees
qui suit les données des employés d'une entreprise. Chaque enregistrement de la base de données contient des champs appelés EmployeeID LastName, FirstName, et Address. Chaque champ de la Employees
base de données est identifié par la clé primaireEmployeeID
.
Voici un exemple d'enregistrement en texte brut dans la base de données.
{ "EmployeeID": 101, "LastName": "Jones", "FirstName": "Mary", "Address": { "Street": "123 Main", "City": "Anytown", "State": "OH", "ZIPCode": 12345 } }
Si vous avez marqué les FirstName
champs LastName
et comme ENCRYPT_AND_SIGN
dans vos actions cryptographiques, les valeurs de ces champs sont chiffrées localement avant d'être téléchargées dans la base de données. Les données cryptées téléchargées sont entièrement aléatoires, la base de données ne reconnaît pas ces données comme étant protégées. Il détecte simplement les entrées de données typiques. Cela signifie que l'enregistrement réellement stocké dans la base de données peut ressembler à ce qui suit.
{ "PersonID": 101, "LastName": "1d76e94a2063578637d51371b363c9682bad926cbd", "FirstName": "21d6d54b0aaabc411e9f9b34b6d53aa4ef3b0a35", "Address": { "Street": "123 Main", "City": "Anytown", "State": "OH", "ZIPCode": 12345 } }
Si vous devez interroger la base de données pour obtenir des correspondances exactes dans le LastName
champ, configurez une balise standard nommée LastNamepour mapper les valeurs en texte clair écrites dans le LastName
champ aux valeurs cryptées stockées dans la base de données.
Cette balise effectue des calculs HMACs à partir des valeurs en texte brut du LastName
champ. Chaque HMAC sortie est tronquée de sorte qu'elle ne correspond plus exactement à la valeur en texte brut. Par exemple, le hachage complet et le hachage tronqué pour Jones
peuvent ressembler à ce qui suit.
Hachage complet
2aa4e9b404c68182562b6ec761fcca5306de527826a69468885e59dc36d0c3f824bdd44cab45526f70a2a18322000264f5451acf75f9f817e2b35099d408c833
Hachage tronqué
b35099d408c833
Une fois la balise standard configurée, vous pouvez effectuer des recherches d'égalité sur le LastName
terrain. Par exemple, si vous souhaitez effectuer une rechercheJones
, utilisez la LastNamebalise pour effectuer la requête suivante.
LastName = Jones
Le chiffrement AWS de base de données filtre SDK automatiquement les faux positifs et renvoie le résultat en texte brut de votre requête.