Confidentialité différentielle privée dans la Snowflake Data Clean Room¶
Pour vous aider à protéger la confidentialité des entités contenues dans vos données, les Snowflake Data Clean Rooms proposent une confidentialité différentielle. La confidentialité différentielle est un système de confidentialité basé sur les mathématiques [1] pour fournir une protection des données au niveau de l’entité à la fois pour les requêtes uniques et les requêtes répétées d’un ensemble de données. Les fournisseurs de données peuvent configurer la confidentialité différentielle dans leurs salles blanches afin de permettre une forte protection de la confidentialité au niveau de l’entité et de faibles niveaux de bruit pour leurs données.
La confidentialité différentielle est une alternative aux exigences d’agrégation simples, qui peuvent révéler des informations privées si des adversaires génèrent suffisamment de requêtes « proches » sur des données qui diffèrent d’une entité (connue sous le nom d”attaque différentielle).
La confidentialité différentielle est également une bonne alternative au masquage des données, qui masque entièrement les valeurs des colonnes mais qui empêche les jointures sur les lignes masquées et cache les données utiles à l’analyste. La confidentialité différentielle permet d’effectuer des jointures sur des colonnes protégées et permet également aux analystes de voir les données protégées, en ajoutant suffisamment de bruit pour protéger la confidentialité des lignes protégées, mais pas trop pour que les données soient inutilisables par l’analyste.
Important
Les clients sont responsables de la configuration des outils de confidentialité différentielle dans les Snowflake Data Clean Rooms afin de répondre à leurs exigences en matière de confidentialité des données. Ces outils ne sont pas configurés par défaut.
Comment la protection différentielle de la confidentialité fonctionne-t-elle dans les clean rooms ?¶
Clean rooms offre sa propre implémentation de la confidentialité différentielle qui est différente de celle de Snowflake, lisez donc ce document pour comprendre les différents comportements et paramètres.
La confidentialité différentielle protège la confidentialité des entités dans vos données. Clean rooms définit une entité comme une valeur unique dans une colonne. Clean rooms détermine quelles colonnes contiennent des données susceptibles d’être sensibles ; par exemple, un numéro de sécurité sociale ou une adresse électronique est probablement une entité sensible, mais une couleur ne l’est pas. Lorsque la confidentialité différentielle est appliquée, les clean rooms peuvent identifier une ou plusieurs colonnes d’entités dans chaque table. Vous ne pouvez pas configurer les colonnes désignées comme colonnes d’entité.
La confidentialité différentielle dans les clean rooms ajoute également du bruit aux résultats numériques associés à chaque entité.
Les utilisateurs peuvent essayer de comparer plusieurs résultats de requête différents afin de réduire le bruit ; c’est ce qu’on appelle une attaque par différenciation. Afin d’atténuer les attaques par différenciation, la protection différentielle de la confidentialité calcule et contrôle un budget de protection de la confidentialité attribué à un compte. Chaque requête a un coût qui reflète le degré de confidentialité de l’entité exposée par cette requête. Ce coût est déterminé mathématiquement et dépend de la requête, des données et des requêtes précédentes de l’utilisateur. Si le coût d’une requête dépasse la limite du budget de confidentialité restant, la requête échoue. Dans le cas contraire, la requête peut se poursuivre et le coût est ajouté au budget quotidien de protection de la confidentialité de l’utilisateur. Le budget de protection de la confidentialité est actualisé quotidiennement.
La confidentialité différentielle dans les clean rooms n’impose pas de contraintes d’agrégation sur les requêtes, mais vous pouvez ajouter des contraintes d’agrégation sur vos données ou modèles de manière indépendante.
Astuce
Les politiques de confidentialité de Snowflake empêchent la création d’une vue à partir d’une table protégée, de sorte que vous ne pouvez pas créer de liens dans les tables qui ont des politiques de confidentialité.
Permettre et gérer la protection différentielle de la confidentialité dans l’UI¶
Dans l’UI de clean room, les fournisseurs peuvent définir des paramètres de confidentialité au niveau du modèle ; les consommateurs ne peuvent pas activer ou modifier les paramètres de confidentialité différentiels. Les modèles standard de Snowflake utilisés dans les UI de clean room peuvent avoir différents paramètres de confidentialité par modèle.
Pour utiliser l’UI de clean room afin d’activer ou de désactiver la confidentialité différentielle pour un modèle :
Ouvrez l’onglet Created ` de la page Clean Rooms
Sélectionnez Edit ou
» Edit sur la vignette de la clean room (selon que la clean room vous permet ou non d’effectuer une analyse).
Sélectionnez Next jusqu’à ce que vous atteigniez Configure Analysis & Query.
En bas de la page, développez Privacy Settings. Sélectionnez ou désélectionnez Differential Privacy et indiquez vos paramètres pour ce modèle, y compris le budget de confidentialité pour les utilisateurs et le coût des requêtes. Vous pouvez également établir des valeurs seuils pour imposer des tailles de groupe minimales dans cette requête.
Pour configurer les paramètres d’un autre modèle, définissez d’abord les valeurs du modèle actuel, puis choisissez un autre modèle dans le sélecteur de modèle.
Gérer le budget consacré à la protection de la confidentialité dans le cadre de l’UI¶
Voir le budget restant pour la confidentialité
Lorsque vous exécutez une requête ou que vous voyez les résultats, vous pouvez voir votre budget total et le montant utilisé dans la section Privacy Settings.
Paramétrer le budget de confidentialité pour les autres utilisateurs
Dans l’UI, un fournisseur peut fixer un paramètre de confidentialité, mais pas un consommateur.
Éditez une clean room et allez à la page Configure Analysis & Query.
Sélectionnez un modèle.
En bas de la page, développez Privacy Settings où vous pouvez voir votre budget de confidentialité pour les utilisateurs et le coût des requêtes.
Permettre et gérer la protection différentielle de la confidentialité dans l’API¶
Dans les API de clean rooms, chaque partie peut activer et configurer la confidentialité différentielle au niveau des collaborateurs.
Tous les modèles personnalisés utilisent les mêmes paramètres de confidentialité différentielle dans une clean room. Les modèles fournis par Snowflake peuvent être configurés avec des paramètres de confidentialité individuels dans l’UI.
Utilisez les procédures suivantes pour configurer la confidentialité différentielle :
consumer.enable_templates_for_provider_run
- Désactivez ou activez la confidentialité différentielle avec les valeurs par défaut pour toutes les analyses effectuées par le fournisseur.consumer.set_privacy_settings
- Spécifiez les paramètres individuels de confidentialité différentielle dans les analyses gérées par le fournisseur et impliquant des modèles personnalisés.provider.set_privacy_settings
- Spécifiez les paramètres individuels de confidentialité différentielle dans les analyses gérées par les consommateurs et impliquant des modèles personnalisés.provider.add_custom_sql_template
- Fournissez un paramètre de sensibilité ** pour augmenter ou diminuer l’epsilon (niveau de bruit) d’un modèle au-dessus ou au-dessous de l’epsilon de ligne de base fixé pour le consommateur.provider.add_consumers
- Spécifiez les paramètres de confidentialité par consommateur. Vous pouvez ajouter plusieurs fois le même client avec des paramètres de confidentialité différents pour modifier leurs paramètres de confidentialité.provider.suspend_account_dp_task
- Désactivez le contrôle différentiel du budget de confidentialité pour toutes les clean rooms de ce compte. La protection différenciée de la confidentialité n’est plus appliquée.provider.resume_account_dp_task
- Activez le contrôle différentiel du budget de confidentialité pour toutes les clean rooms de ce compte. Les éventuels paramètres de confidentialité différentiels seront respectés.
Les paramètres de confidentialité pour une clean room sont stockés dans SAMOOHA_CLEANROOM_cleanroom_ID.admin.privacy_budget
, où APPLICATION_ID
est un nom de modèle (NULL représente tous les modèles personnalisés) et PARTY_ACCOUNT est l’utilisateur auquel ils s’appliquent.
Gérer le budget consacré à la protection de la confidentialité dans le cadre de l’API¶
Voir le budget restant pour la confidentialité
Les consommateurs peuvent appeler la procédure consumer.view_remaining_privacy_budget
. Il n’y a aucun moyen pour les fournisseurs de voir le budget restant pour la protection de la confidentialité dans le code.
Paramétrer le budget de confidentialité pour les autres utilisateurs
Les fournisseurs appellent
provider.set_privacy_settings
ouprovider.add_consumers
.Les consommateurs appellent
consumer.set_privacy_settings
pour fixer le paramètre des analyses gérées par le fournisseur.
Paramètres de confidentialité disponibles¶
Les valeurs de confidentialité suivantes peuvent être ensemble à l’aide de diverses procédures de paramétrage des valeurs de confidentialité :
differential
(Entier) - 1 ou 0, où 1 signifie que la confidentialité différentielle doit être activée, et 0 signifie qu’elle ne doit pas l’être.epsilon
(Float) : un nombre supérieur à zéro indiquant la quantité de bruit à ajouter aux résultats. Des valeurs plus faibles (0,1-1,0) assurent une meilleure protection de la confidentialité, mais ajoutent plus de bruit aux résultats. Par défaut : 0,1.noise_mechanism
(Chaîne) - L’algorithme utilisé pour ajouter du bruit aux résultats. Spécifiez soitLaplace
soitGaussien
.privacy_budget
(Entier) - Budget de confidentialité à accorder à cet utilisateur, un nombre >= 0, où 0 signifie qu’il ne peut pas exécuter de requête lorsque la confidentialité différentielle est activée. La valeur par défaut est 10.threshold
(Entier) - Spécifiez 1 pour appliquerthreshold_value
dans les modèles fournis par Snowflake, ou 0 pour ignorerthreshold_value
. La valeur par défaut est 0. Ceci est géré par la bascule de confidentialité différentielle dans l’UI de clean room.threshold_value
(Entier) - Nombre minimum de lignes qu’un groupe doit avoir pour apparaître dans les données. Utilisé uniquement dans des modèles spécifiques fournis par Snowflake.
Fonctionnalités supplémentaires en matière de protection de la confidentialité¶
Ajouter du bruit aux résultats¶
Si vous souhaitez ajouter manuellement du bruit à vos résultats sans mettre en œuvre la confidentialité différentielle, vous pouvez utiliser la fonction de clean room suivante dans votre modèle ou votre code personnalisé. Notez que ce code exige que l’utilisateur dispose d’un budget suffisant pour la protection de la confidentialité, faute de quoi il échouera ; si la tâche de protection différentielle de la confidentialité est désactivée, l’utilisateur dispose essentiellement d’un budget infini.
cleanroom.addnoise(<val>, <epsilon>, <noiserand>, [<gaussian>], [<delta>])
Description : ajoute du bruit calibré à une valeur numérique pour satisfaire aux garanties différentielles de confidentialité. Cette fonction ne peut être appelée que dans le contexte d’une clean room. Il n’est pas nécessaire pour cela que la confidentialité différentielle soit activée pour l’utilisateur ou le modèle, ni que la tâche de confidentialité différentielle soit activée. Utilisez cette fonction dans un modèle ou UDP/UDTP.
Arguments :
val
(DOUBLE) - Valeur originale à laquelle le bruit sera ajouté.epsilon
(DOUBLE) - Le paramètre de budget de confidentialité, où des valeurs plus petites (0,1-1,0) fournissent une protection plus forte de la confidentialité mais ajoutent plus de bruit. La valeur est > 0.noiserand
(DOUBLE) - Valeur aléatoire comprise entre 0 et 1 qui ajoute un caractère aléatoire à chaque résultat. Calculez cette valeur à la volée à l’aide d’un générateur de valeurs aléatoires plutôt que de transmettre une valeur statique.gaussian
(BOOLEAN, optionnel) - Lorsque TRUE, utilise un bruit gaussien au lieu d’un bruit laplacien. La valeur par défaut est FALSE.delta
(DOUBLE, optionnel) - Le paramètre delta pour le mécanisme gaussien lorsquegaussian
est TRUE (plus il est petit, mieux c’est). La valeur par défaut est 0,000001.
Retourne : une valeur DOUBLE représentant la valeur originale à laquelle a été ajouté un bruit préservant la confidentialité.
Recommandations :
Ne s’applique qu’aux agrégats (COUNT, SUM, AVG), jamais aux enregistrements individuels.
Envisagez d’arrondir les résultats pour éviter de révéler trop de précision.
Cette fonction nécessite un budget de protection de la confidentialité pour être exécutée ; sachez donc qu’elle échouera si l’utilisateur n’a pas de budget.
Combinez avec les contraintes de taille minimale des groupes pour une protection améliorée.
Exemple :
Cet exemple de modèle ajoute du bruit à un décompte de valeurs distinctes de hachage d’e-mails, en utilisant la valeur epsilon utilisée dans les clean rooms.
CALL samooha_by_snowflake_local_db.provider.add_custom_sql_template(
$cleanroom_name,
$template_name,
$$
SELECT
cleanroom.addNoise(
count(distinct p.hashed_email), -- Value
{{ privacy.epsilon | sqlsafe }}, -- Epsilon
UNIFORM(0::FLOAT, 1::FLOAT, RANDOM()) -- Noiserand
) AS noisy_count
FROM
IDENTIFIER({{ source_table[0] }}) p
$$);
Ensemble de politiques d’agrégation et de tailles minimales de groupes¶
Si vous souhaitez exiger l’agrégation de vos données et spécifier des tailles de groupe minimales, vous pouvez soit paramétrer une politique d’agrégation sur les tables sources, soit imposer l’agrégation dans vos modèles.
Gérer les coûts liés à la confidentialité différentielle¶
La confidentialité différentielle engendre des coûts même lorsque les utilisateurs individuels ou les modèles n’ont pas activé la confidentialité différentielle, car le système vérifie chaque requête pour voir si la confidentialité différentielle doit être appliquée. Si vous souhaitez éliminer ce coût, vous pouvez désactiver la confidentialité différentielle pour le compte :
Tout d’abord, désactivez la confidentialité différentielle pour toutes les salles blanches à l’aide de l’application Web :
Connectez-vous à l’application Web.
Désactivez la confidentialité différentielle dans toutes les salles blanches qui n’ont pas échoué, même si elles ne sont pas partagées ou publiées :
Sélectionnez Clean rooms » Created » Edit.
Sélectionnez Next jusqu’à ce que vous atteigniez Configure Analysis & Query.
En bas de la page, développez Privacy Settings. Désélectionnez Differential Privacy au besoin, puis cliquez sur Next et Finish pour enregistrer vos modifications. Si l’option n’est pas sélectionnée, cliquez simplement sur Cancel et passez à la salle blanche suivante.
Enfin, suspendez la tâche d’arrière-plan de confidentialité différentielle de votre compte en appelant la procédure provider.suspend_account_dp_task dans Snowsight.
Important
L’activation de la confidentialité différentielle dans une salle blanche après la désactivation de la tâche d’arrière-plan réactive automatiquement la tâche pour ce compte.
Remarques et dépannage :
Si vous oubliez de désactiver la confidentialité différentielle pour une salle blanche et de suspendre la tâche d’arrière-plan, la confidentialité différentielle risque de ne pas fonctionner dans cette salle blanche pour les utilisateurs qui l’ont déjà installée.
Si la confidentialité différentielle est activée dans une salle blanche avant l’installation de la salle blanche, l’installation de la salle blanche échoue. Dans ce cas, vous devez désactiver la confidentialité différentielle dans la salle blanche ou réactiver la tâche comme indiqué ci-dessous.
Si vous souhaitez ensuite activer la confidentialité différentielle dans votre compte, activez la confidentialité différentielle pour toutes les salles blanches du compte ou appelez la procédure provider.resume_account_dp_task dans Snowsight.