View a markdown version of this page

Choisir une longueur de balise et des partitions - AWS SDK de chiffrement de base de données

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.

Choisir une longueur de balise et des partitions

Notre bibliothèque de chiffrement côté client a été renommée SDK de chiffrement de AWS base de données. Ce guide du développeur fournit toujours des informations sur le client de chiffrement DynamoDB.

Lorsque vous écrivez une nouvelle valeur dans un champ chiffré configuré pour le chiffrement consultable, le SDK de chiffrement de AWS base de données calcule un HMAC sur la valeur en texte brut associée à un identifiant de partition. Au sein d'une partition donnée, le HMAC complet représente de manière unique la valeur en texte brut. Le SDK tronque ensuite la sortie HMAC afin que plusieurs valeurs de texte clair distinctes puissent être mappées à la même balise. Ces collisions, également appelées faux positifs, limitent la capacité d'un utilisateur non autorisé à déduire des informations distinctives sur le texte en clair sous-jacent.

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 et le nombre de partitions utilisées. Il vous suffit de définir la longueur des balises lors de la configuration des balises standard. Les balises composées utilisent les longueurs des balises standard à partir desquelles elles sont construites. En répartissant les valeurs sur plusieurs partitions, les collisions sont maintenues au sein de chaque partition, ce qui permet de réduire la concentration de fréquence tout en préservant le comportement correct des requêtes.

La balise ne modifie pas l'état chiffré du champ. Cependant, 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. Des longueurs de balises plus courtes et des partitions supplémentaires augmentent les collisions et réduisent les fuites de fréquence, tandis que des longueurs de balises plus longues et moins de partitions améliorent la précision des requêtes.

L'objectif du chiffrement consultable est de réduire les coûts de performance associés aux bases de données chiffrées côté client en utilisant des balises pour effectuer des requêtes sur des données chiffrées. Les balises sont stockées à côté des champs cryptés à partir desquels elles sont calculées. Cela signifie qu'ils peuvent révéler des informations distinctives sur la distribution de votre ensemble de données. Dans des cas extrêmes, un utilisateur non autorisé peut être en mesure d'analyser les informations révélées sur votre distribution et de les utiliser pour identifier la valeur en texte brut d'un champ. Le choix de longueurs de balises et de nombres de partitions appropriés permet d'atténuer ces risques et de préserver la confidentialité de vos données.

Passez en revue votre modèle de menace pour déterminer le niveau de sécurité dont vous avez besoin. Par exemple, plus il y a de personnes qui ont accès à votre base de données, mais ne devraient pas avoir accès aux données en texte brut, plus vous souhaiterez peut-être protéger la confidentialité de la distribution de votre ensemble de données. L'augmentation de la confidentialité nécessite généralement de générer davantage de faux positifs (par le biais de balises plus courtes, de partitions supplémentaires, ou des deux), ce qui peut à son tour réduire les performances des requêtes.

Choix d'un schéma de partitionnement

Le schéma de partitionnement détermine la manière dont les éléments sont répartis entre les partitions lorsque des balises sont dérivées. Le choix d'un schéma approprié est important pour trouver un équilibre entre confidentialité, performance et prévisibilité opérationnelle.

Lorsque vous sélectionnez un schéma de partitionnement, tenez compte des objectifs suivants :

  • Distribuez des valeurs de haute fréquence pour réduire les grandes classes d'équivalence de balises.

  • Évitez d'introduire des modèles prévisibles susceptibles de divulguer des informations sensibles.

  • Maintenez un comportement stable entre les écritures et les requêtes.

Distribution aléatoire par défaut

La valeur par défaut recommandée est un schéma de distribution aléatoire. Dans ce modèle, chaque élément est attribué à une partition à l'aide d'une valeur aléatoire sécurisée par cryptographie. La distribution aléatoire produit des tailles de partition approximativement égales au fil du temps et garantit une répartition uniforme des valeurs fréquentes.

Utilisez la distribution aléatoire lorsque :

  • Vous ne possédez pas de solides connaissances du domaine des distributions de valeur.

  • L'ensemble de données contient un biais inconnu ou évolutif.

  • Vous souhaitez minimiser les fuites liées aux attributs.

Distribution déterministe

Dans certains cas, l'attribution des partitions doit être déterministe. Un schéma déterministe attribue des partitions en fonction d'une fonction stable des attributs des articles. Ces schémas doivent être conçus avec soin, car des entrées asymétriques ou sensibles peuvent entraîner un partitionnement irrégulier ou des fuites d'informations involontaires.

Utilisez une distribution déterministe lorsque :

  • Les flux de travail opérationnels dépendent du placement cohérent des partitions.

  • Vous disposez d'un ensemble de valeurs uniques qui sont volontairement regroupées dans une seule partition.

Gestion des valeurs chaudes connues

Si votre jeu de données contient des valeurs chaudes bien connues, vous pouvez combiner des stratégies aléatoires et déterministes. Par exemple, vous pouvez distribuer de manière aléatoire un petit ensemble de valeurs de haute fréquence tout en affectant toutes les autres valeurs de manière déterministe.

Cette approche réduit la concentration pour les valeurs chaudes tout en préservant un comportement prévisible pour le reste de l'ensemble de données. Comme il introduit une complexité supplémentaire, examinez-le attentivement pour éviter toute fuite d'informations involontaire.

Exemples de schéma de partitionnement

Les exemples suivants illustrent les schémas de partitionnement courants et montrent comment les différentes caractéristiques des données influencent l'attribution des partitions. Chaque exemple montre comment trouver un équilibre entre confidentialité, performance et simplicité opérationnelle.

Exemple 1 : données distribuées de manière uniforme

Vous créez une balise pour les numéros de téléphone, et les valeurs de votre jeu de données sont distribuées de manière approximativement uniforme. Aucun numéro de téléphone n'apparaît significativement plus souvent que les autres.

Dans ce cas, il suffit de configurer une seule partition. Des partitions supplémentaires n'apportent que peu d'avantages et ne feraient qu'augmenter le nombre de requêtes.

Exemple 2 : résultats binaires avec fréquence asymétrique

Vous disposez d'une base de données qui stocke les résultats des tests médicaux avec deux valeurs possibles : NÉGATIVE et POSITIVE. Les résultats négatifs sont environ cinq fois plus fréquents que les résultats positifs.

Pour réduire les fuites de fréquence, utilisez une stratégie mixte :

  • Attribuez des résultats NÉGATIFS de manière aléatoire sur cinq partitions.

  • Attribuez des résultats POSITIFS de manière déterministe à une seule partition.

Cette approche répartit la valeur surreprésentée tout en maintenant la stabilité de la valeur la plus rare, réduisant ainsi les grandes classes d'équivalence sans ventilation inutile.

Exemple 3 : valeurs chaudes connues dans un domaine étendu

Vous avez une base de données de prénoms aux États-Unis d'Amérique. Un ensemble relativement restreint de noms courants (par exemple, les 500 noms les plus fréquents) apparaît beaucoup plus souvent que les autres.

  • Attribuez les 500 noms les plus fréquents de manière aléatoire sur quatre partitions.

  • Attribuez tous les noms restants de manière déterministe à une seule partition.

  • Augmentez progressivement le nombre de partitions jusqu'à ce que les données attribuées à chaque partition présentent une distribution approximativement uniforme.

Cette approche hybride cible les valeurs chaudes connues tout en préservant la simplicité et la prévisibilité du partitionnement pour la plupart des noms.

Ces exemples montrent comment les schémas de partitionnement peuvent être adaptés aux différentes caractéristiques des données. Dans la plupart des cas, la distribution aléatoire est suffisante, mais l'intégration des connaissances du domaine peut encore améliorer la confidentialité et les performances lorsqu'elle est appliquée avec soin.

Calcul de la longueur des balises

La longueur de la balise est spécifiée en bits et détermine le nombre de bits de la sortie HMAC qui sont conservés après la troncature. La longueur recommandée dépend de la manière dont les valeurs sont distribuées au sein de chaque partition, du fait que les données contiennent des valeurs corrélées et de vos exigences en matière de sécurité et de performances. Lorsqu'un jeu de données est approximativement uniforme après avoir appliqué un schéma de partitionnement approprié, vous pouvez utiliser des équations simples et des procédures de réglage pour estimer la longueur effective d'une balise. Ces équations fournissent une estimation du nombre moyen de faux positifs qu'une balise peut produire, mais elles ne garantissent pas un nombre précis de faux positifs pour chaque valeur unique de l'ensemble de données. La première étape consiste à estimer la population.

Note

L'efficacité de ces équations dépend de la distribution de votre jeu de données au sein de chaque partition. Si votre jeu de données n'est pas distribué de manière uniforme, consultezLes balises sont-elles adaptées à mon ensemble de données ?.

Estimer la population

La population est le nombre attendu de valeurs uniques dans le champ à partir duquel votre balise standard est construite, il ne s'agit pas du nombre total attendu de valeurs stockées dans le champ. Prenons l'exemple d'un Room champ crypté qui identifie le lieu des réunions des employés. Le Room champ devrait stocker 100 000 valeurs au total, mais les employés ne peuvent réserver que 50 salles différentes pour les réunions. Cela signifie que la population est de 50 car seules 50 valeurs uniques peuvent être stockées Room sur le terrain.

Note

Si votre balise standard est construite à partir d'un champ virtuel, la population utilisée pour calculer la longueur de la balise est le nombre de combinaisons uniques créées par le champ virtuel.

Lorsque vous estimez votre population, assurez-vous de tenir compte de la croissance prévue de l'ensemble de données. Une fois que vous avez écrit de nouveaux enregistrements avec la balise, vous ne pouvez pas mettre à jour la longueur de la balise. Passez en revue votre modèle de menace et toutes les solutions de base de données existantes afin de créer une estimation du nombre de valeurs uniques que vous prévoyez de stocker dans ce champ au cours des cinq prochaines années.

Votre population n'a pas besoin d'être précise. Tout d'abord, identifiez le nombre de valeurs uniques dans votre base de données actuelle ou estimez le nombre de valeurs uniques que vous comptez stocker au cours de la première année. Posez ensuite les questions suivantes pour déterminer la croissance prévue des valeurs uniques au cours des cinq prochaines années.

  • Vous attendez-vous à ce que les valeurs uniques soient multipliées par 10 ?

  • Vous attendez-vous à ce que les valeurs uniques soient multipliées par 100 ?

  • Vous attendez-vous à ce que les valeurs uniques soient multipliées par 1000 ?

La différence entre 50 000 et 60 000 valeurs uniques n'est pas significative et elles se traduiront toutes deux par la même longueur de balise recommandée. Cependant, la différence entre 50 000 et 500 000 valeurs uniques aura un impact significatif sur la longueur de balise recommandée.

Envisagez d'examiner les données publiques sur la fréquence des types de données courants, tels que les codes postaux ou les noms de famille. Par exemple, il existe 41 707 codes postaux aux États-Unis d'Amérique. La population que vous utilisez doit être proportionnelle à votre propre base de données. Si le ZIPCode champ de votre base de données inclut des données provenant de l'ensemble des États-Unis d'Amérique, vous pouvez définir votre population comme étant 41 707, même si ZIPCode le champ ne contient pas actuellement 41 707 valeurs uniques. Si le ZIPCode champ de votre base de données inclut uniquement les données d'un seul État, et n'inclura que les données d'un seul État, vous pouvez définir votre population comme le nombre total de codes postaux dans cet État au lieu de 41 704.

Calcul de la longueur des balises à partir de la taille de

Lorsque vos données sont distribuées de manière approximativement uniforme dans chaque partition et ne contiennent pas de valeurs corrélées, vous pouvez estimer la longueur de balise appropriée à l'aide d'une formule simple basée sur la population.

Soit p la taille de la population de la balise, c'est-à-dire le nombre de valeurs en texte clair distinctes à partir desquelles la balise est construite au sein d'une même partition. Un point de départ courant pour la longueur de balise b (en bits) est le suivant :

b = log₂(p) − 1

Cette formule préserve une probabilité non négligeable de collisions tout en maintenant le nombre de faux positifs gérable. La soustraction d'un bit du logarithme garantit que plusieurs valeurs distinctes sont censées correspondre à la même balise, ce qui permet de limiter les fuites de fréquence et de préserver l'anonymat.

Ce calcul fournit une estimation du comportement de collision moyen dans l'ensemble de données. Cela ne garantit pas que chaque valeur produira le même nombre de faux positifs et ne tient pas compte des distributions asymétriques, des valeurs corrélées ou des modèles de données contradictoires.

Utilisez cette formule comme ligne directrice initiale plutôt que comme exigence stricte. Validez toujours la configuration obtenue par rapport à votre modèle de menace, à vos attentes en matière de performances et aux caractéristiques des données observées, et ajustez la longueur de la balise ou le nombre de partitions selon les besoins.

Rubrique avancée sur la longueur des balises

En tant qu'utilisateur expérimenté, vous bénéficiez d'une plus grande flexibilité lors de la sélection d'une longueur de balise adaptée à votre solution. Vous devez choisir une longueur qui protège de manière adéquate la confidentialité de vos données tout en minimisant tout impact inutile sur les performances des requêtes. Le niveau de sécurité préservé par une balise dépend de la distribution de votre ensemble de données et de la corrélation des champs à partir desquels vos balises sont construites.

  • Une balise trop longue produit trop peu de faux positifs et peut révéler des informations distinctives sur la distribution de votre ensemble de données.

  • Une balise trop courte produit trop de faux positifs et augmente le coût des performances des requêtes car elle nécessite une analyse plus approfondie de la base de données.

Si votre jeu de données est distribué de manière approximativement uniforme, vous pouvez utiliser les équations et procédures suivantes pour estimer la longueur de balise appropriée pour votre implémentation. Ces équations fournissent une estimation du nombre moyen de faux positifs qu'une balise peut produire, mais elles ne garantissent pas un nombre précis de faux positifs pour chaque valeur unique de l'ensemble de données. Les rubriques suivantes supposent que vos balises sont distribuées de manière uniforme et ne contiennent pas de données corrélées.

  1. Calculez la plage recommandée pour le nombre de collisions attendu

    Pour déterminer la longueur de balise appropriée pour un champ donné, vous devez d'abord identifier une plage appropriée pour le nombre de collisions attendu. Le nombre de collisions attendu représente le nombre moyen attendu de valeurs de texte brut uniques correspondant à une balise HMAC particulière. Le nombre attendu de faux positifs pour une valeur unique en texte brut est inférieur d'un au nombre de collisions attendu.

    Nous recommandons que le nombre de collisions attendu soit supérieur ou égal à deux, et inférieur à la racine carrée de votre population. Les équations suivantes ne fonctionnent que si votre population possède 16 valeurs uniques ou plus.

    2 ≤ number of collisions < √(Population)

    Si le nombre de collisions est inférieur à deux, la balise produira trop peu de faux positifs. Nous recommandons deux comme nombre minimum de collisions attendues, car cela signifie qu'en moyenne, chaque valeur unique du champ générera au moins un faux positif en étant mappée à une autre valeur unique.

  2. Calculez la plage recommandée pour les longueurs de balise

    Après avoir identifié le nombre minimum et maximum de collisions attendues, utilisez l'équation suivante pour identifier une plage de longueurs de balise appropriées.

    number of collisions = Population * 2-(beacon length)

    Tout d'abord, déterminez la longueur de la balise lorsque le nombre de collisions attendues est égal à deux (le nombre minimum recommandé de collisions attendues).

    2 = Population * 2-(beacon length)

    Ensuite, déterminez la longueur de la balise pour laquelle le nombre de collisions attendu est égal à la racine carrée de votre population (le nombre maximum recommandé de collisions attendues).

    √(Population) = Population * 2-(beacon length)

    Nous recommandons d'arrondir le résultat produit par cette équation à la longueur de balise la plus courte. Par exemple, si l'équation produit une longueur de balise de 15,6, nous recommandons d'arrondir cette valeur à 15 bits au lieu d'arrondir à 16 bits.

  3. Choisissez une longueur de balise

    Ces équations identifient uniquement une plage recommandée de longueurs de balise pour votre champ. Nous vous recommandons d'utiliser une balise plus courte pour préserver la sécurité de votre ensemble de données dans la mesure du possible. Cependant, la longueur de la balise que vous utilisez réellement est déterminée par votre modèle de menace. Tenez compte de vos exigences en matière de performances lorsque vous examinez votre modèle de menace afin de déterminer la longueur de balise la mieux adaptée à votre champ.

    L'utilisation d'une longueur de balise plus courte réduit les performances des requêtes, tandis que l'utilisation d'une longueur de balise plus longue réduit la sécurité. En général, si votre jeu de données est inégalement distribué ou si vous créez des balises distinctes à partir de champs corrélés, vous devez utiliser des balises de plus courte longueur afin de minimiser la quantité d'informations révélées sur la distribution de vos ensembles de données.

    Si vous examinez votre modèle de menace et que vous déterminez que les informations distinctives révélées concernant la distribution d'un champ ne constituent pas une menace pour votre sécurité globale, vous pouvez choisir d'utiliser une longueur de balise supérieure à la plage recommandée que vous avez calculée. Par exemple, si vous avez calculé la plage de longueurs de balise recommandée pour un champ entre 9 et 16 bits, vous pouvez choisir d'utiliser une longueur de balise de 24 bits pour éviter toute perte de performance.

    Choisissez soigneusement la longueur de votre balise. Une fois que vous avez écrit de nouveaux enregistrements avec la balise, vous ne pouvez pas mettre à jour la longueur de la balise.

Exemple de longueur de balise avancée

Prenons l'exemple d'une base de données qui a marqué le unit champ comme ENCRYPT_AND_SIGN dans les actions cryptographiques. Pour configurer une balise standard pour le unit champ, nous devons déterminer le nombre attendu de faux positifs et la longueur de la balise pour le unit champ.

  1. Estimer la population

    Après avoir examiné notre modèle de menace et notre solution de base de données actuelle, nous nous attendons à ce que le unit champ contienne à terme 100 000 valeurs uniques.

    Cela signifie que la population est égale à 100 000 habitants.

  2. Calculez la plage recommandée pour le nombre de collisions attendu.

    Dans cet exemple, le nombre de collisions attendu doit être compris entre 2 et 316.

    2 ≤ number of collisions < √(Population)
    1. 2 ≤ number of collisions < √(100,000)
    2. 2 ≤ number of collisions < 316
  3. Calculez la plage recommandée pour la longueur de balise.

    Dans cet exemple, la longueur de la balise doit être comprise entre 9 et 16 bits.

    number of collisions = Population * 2-(beacon length)
    1. Calculez la longueur de la balise lorsque le nombre de collisions attendu est égal au minimum identifié à l'étape 2.

      2 = 100,000 * 2-(beacon length)

      Longueur de la balise = 15,6, soit 15 bits

    2. Calculez la longueur de la balise lorsque le nombre de collisions attendu est égal au maximum identifié à l'étape 2.

      316 = 100,000 * 2-(beacon length)

      Longueur de la balise = 8,3, soit 8 bits

  4. Déterminez la longueur de balise adaptée à vos exigences en matière de sécurité et de performance.

    Pour chaque bit inférieur à 15, le coût de performance et la sécurité doublent.

    • 16 bits

      • En moyenne, chaque valeur unique correspond à 1,5 autre unité.

      • Sécurité : deux enregistrements portant la même balise HMAC tronquée ont 66 % de chances d'avoir la même valeur en texte brut.

      • Performance : une requête permet de récupérer 15 enregistrements pour 10 enregistrements que vous avez réellement demandés.

    • 14 bits

      • En moyenne, chaque valeur unique correspond à 6,1 autres unités.

      • Sécurité : deux enregistrements portant la même balise HMAC tronquée ont 33 % de chances d'avoir la même valeur en texte brut.

      • Performance : une requête permet de récupérer 30 enregistrements pour 10 enregistrements que vous avez réellement demandés.