Visualiser le risque lié à la restauration des éléments d'identification à l'aide du k-anonymat

Vous trouverez sur cette page la procédure à suivre pour mesurer la métrique k-anonymat d'un ensemble de données à l'aide de Cloud DLP (Data Loss Prevention) et pour la visualiser dans Google Data Studio. Ainsi, vous serez également en mesure de mieux comprendre les risques et d'évaluer les compromis que vous pouvez être amené à faire au niveau de l'utilité des données si vous les masquez ou les anonymisez. Des métriques supplémentaires telles que l-diversité sont également disponibles dans l'API, mais nous nous focaliserons ici sur k-anonymat.

Présentation

Les techniques de suppression de l'identification peuvent s'avérer très utiles pour protéger la vie privée des personnes concernées pendant que vous traitez ou exploitez des données. Mais comment savoir si un ensemble de données a été suffisamment anonymisé ? Et comment saurez-vous si la suppression de l'identification a entraîné une perte de données excessive pour votre cas d'utilisation ? En d'autres termes : comment pouvez-vous comparer le risque de restauration de l'identification et l'utilité de ces données, pour vous aider à prendre les bonnes décisions en ce qui les concerne ?

Le calcul de la valeur de k-anonymat d'un ensemble de données permet de répondre à ces questions en évaluant la possibilité de restaurer l'identification des enregistrements qu'il contient. Cloud DLP bénéficie d'une fonctionnalité intégrée grâce à laquelle il est possible de calculer une valeur de k-anonymat sur un ensemble de données à partir des quasi-identifiants que vous spécifiez. Cela vous permet d'évaluer rapidement si l'anonymisation d'une colonne ou d'une combinaison de colonnes spécifiques conduira à augmenter ou réduire le risque de restauration de l'identification sur l'ensemble de données.

Exemple d'ensemble de données

Voici les premières lignes d'un ensemble de données volumineux servant d'exemple :

user_id zip_code age score
121317473 94043 25 52
121317474 92104 43 87
... ... ... ...

Pour les besoins de ce tutoriel, nous n'aborderons pas user_id, car l'accent est mis sur les quasi-identifiants. Dans un scénario réel, vous devez vous assurer que les données de cette colonne sont masquées ou tokenisées de manière adéquate. La colonne score est spécifique à cet ensemble de données, et il est peu probable qu'un pirate informatique puisse accéder au contenu par d'autres moyens. Par conséquent, vous ne l'incluez pas dans l'analyse. Nous allons donc nous focaliser sur les colonnes zip_code et age restantes, qu'un pirate informatique pourrait exploiter via d'autres sources de données pour identifier un individu. Les questions auxquelles vous essayez de répondre pour cet ensemble de données sont les suivantes :

  • Quel effet les deux quasi-identifiants zip_code et age auront-ils sur le risque global de restauration des éléments d'identification des données ?
  • Comment l'application d'une transformation de suppression des éléments d'identification affectera-t-elle ce risque ?

Vous voulez vous assurer que la combinaison des informations zip_code et age ne permettra pas d'identifier un petit groupe d'utilisateurs. Par exemple, supposons qu'un seul utilisateur de l'ensemble de données vive dans une commune dont le code postal est 94043 et soit âgé de 25 ans. Un pirate informatique pourrait être en mesure de faire un rapprochement entre ces informations et des données démographiques sur la zone géographique, ou toute autre information disponible, et ainsi déterminer qui est cette personne ainsi que la valeur de son score. Pour plus d'informations sur ce phénomène, consultez la section ID d'entité et calcul de k-anonymat de la page de présentation des concepts intitulée Analyse des risques.

Étape 1 : Calculez le k-anonymat sur l'ensemble de données

Pour commencer, servez-vous de Cloud DLP pour calculer k-anonymat sur l'ensemble de données. Envoyez l'entrée JSON suivante à la ressource. Dans cette entrée JSON, vous définissez l'ID d'entité DlpJob sur la colonne user_id, et vous désignez les deux colonnes zip_code et age comme quasi-identifiants. Vous demandez également à Cloud DLP d'enregistrer les résultats dans une table BigQuery.

Entrée JSON :

POST https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/dlpJobs?key={YOUR_API_KEY}

{
  "riskJob":{
    "privacyMetric":{
      "kAnonymityConfig":{
        "entityId":{
          "field":{
            "name":"user_id"
          }
        },
        "quasiIds":[
          {
            "name":"zip_code"
          },
          {
            "name":"age"
          }
        ]
      }
    },
    "actions":[
      {
        "saveFindings":{
          "outputConfig":{
            "table":{
              "projectId":"dlp-demo-2",
              "datasetId":"risk",
              "tableId":"risk1"
            }
          }
        }
      }
    ],
    "sourceTable":{
      "projectId":"dlp-demo-2",
      "datasetId":"deid",
      "tableId":"source1"
    }
  }
}

Une fois que la tâche de calcul de k-anonymat est terminée, Cloud DLP envoie les résultats à une table BigQuery nommée dlp-demo-2.risk.risk1.

Étape 2 : Connectez les résultats à Google Data Studio

L'étape suivante consiste à connecter la table BigQuery produite lors de l'étape 1 à un nouveau rapport dans Google Data Studio.

  1. Ouvrez Google Data Studio, puis cliquez sur l'option Vide sous Démarrer un nouveau rapport.
  2. Dans le volet Ajouter une source de données à droite, cliquez sur Créer une source de données en bas.
  3. Dans la section Connecteurs Google, pointez la souris sur BigQuery, puis cliquez sur Sélectionner.
  4. Sur la page "Source de données BigQuery", sélectionnez le projet, l'ensemble de données et la table dans le sélecteur de colonnes. Pour cet exemple, choisissez le projet dlp-demo-2, l'ensemble de données risk et la table risk1.
  5. Cliquez sur le bouton Connecter, qui passe en bleu dès que vous avez choisi un élément dans chacune des trois colonnes. Une fois la connexion établie, vous voyez apparaître une liste de champs codés par des couleurs comme illustré ci-dessous : Liste des champs dans Data Studio.
  6. Dans la colonne Field (Champ), recherchez le champ upper_endpoint. Dans la ligne correspondante, sous Aggregation (Agrégation), choisissez Sum (Somme) dans le menu déroulant.
  7. Cliquez sur Ajouter au rapport.

Les résultats de l'analyse du k-anonymat ont maintenant été ajoutés au nouveau rapport Data Studio. À l'étape suivante, vous allez créer le graphique.

Étape 3 : Créez le graphique

La dernière étape consiste à créer le graphique à partir des champs importés. Pour insérer le graphique, procédez comme suit :

  1. Dans le menu Insertion de Data Studio, cliquez sur Graphique combiné.
  2. Sur la page de l'éditeur, cliquez et tracez un rectangle là où vous souhaitez faire figurer le graphique.

Configurez ensuite le graphique pour qu'il présente l'effet des variations sur la taille et les plages de valeurs des buckets :

  1. Dans l'onglet Données à droite, supprimez la valeur Date Range Dimension (Dimension associée à la plage de dates) en pointant la souris sur l'horodatage timestamp, puis en cliquant sur la croix entourée comme illustré ci-dessous :
    Détail du champ d'horodatage avec le bouton de suppression activé
  2. Faites glisser le champ upper_endpoint vers les champs Dimension et Sort (Trier) de la colonne de droite, puis sélectionnez Ascending (Ordre croissant) dans le menu déroulant situé sous le champ Sort (Trier).
  3. Faites glisser les champs bucket_size et bucket_value_count vers le champ Metric (Métrique), puis supprimez les métriques supplémentaires sélectionnées dans la colonne de droite. Une fois que vous avez terminé, la colonne doit se présenter comme illustré ci-dessous :
    Capture d'écran de la liste des champs
  4. Pointez la souris sur l'icône à gauche de la métrique bucket_size. Une icône de modification (en forme de crayon) apparaît. Cliquez sur cette icône, puis sélectionnez les deux éléments suivants dans les menus déroulants correspondants :

    • Afficher comme > Pourcentage du total
    • Appliquer le calcul en cours > Somme cumulée
  5. Répétez l'étape précédente, mais cette fois pour la métrique bucket_value_count.

Enfin, configurez le graphique de sorte qu'il affiche des courbes pour ces deux métriques :

  1. Cliquez sur l'onglet STYLE dans le volet situé à droite de la fenêtre.
  2. Pour les deux séries (n°1 et n°2, qui représentent les statistiques bucket_size et bucket_value_count), sélectionnez Courbes.
  3. Pour afficher le graphique final, cliquez sur le bouton Afficher dans l'angle supérieur droit de la fenêtre.

Graphique final avec k-anonymat = 10

Interpréter le graphique

Le graphique généré comporte sur son axe x les valeurs de k-anonymat et, sur son axe y, le pourcentage de données perdues. Par exemple, dans la capture d'écran ci-dessus, le point de données sélectionné correspond à une valeur k-anonymat de 10. Vous pouvez interpréter cela comme suit : si vous supprimez toutes les lignes dont la valeur de k-anonymat est au maximum de 10, vous perdez 82 % des lignes de l'ensemble de données. En outre, cela entraîne une perte de 92 % des combinaisons uniques d'âge et de code postal. Le graphique ci-dessus montre qu'il est difficile d'obtenir une valeur de k-anonymat supérieure à 2 ou 3 dans cet ensemble de données sans supprimer un nombre significatif de lignes et de valeurs.

Heureusement, supprimer les données n'est pas la seule option. D'autres techniques d'anonymisation permettent d'atteindre un meilleur équilibre entre perte de données et utilité. Par exemple, pour réduire l'ampleur de la perte de données associée à des valeurs élevées de k-anonymat dans le cadre de cet ensemble de données, vous pouvez essayer de fragmenter les âges ou les codes postaux afin de réduire le caractère unique des combinaisons d'âge et de code postal. Ainsi, vous pouvez essayer de fragmenter les âges dans des tranches allant de 20 à 25 ans, de 25 à 30 ans, de 30 à 35 ans, etc. Pour en savoir plus sur la procédure à suivre, consultez les pages Généralisation et binning et Supprimer l'identification des données sensibles dans le contenu textuel.