Snowflakeの差分プライバシー¶
差分プライバシーは、ユーザーが機密データセットから機密情報を漏えいするリスクを制限する、データプライバシーに関する広く認知された基準です。たとえば、人、企業、場所など、データ内の個々のエンティティのアイデンティティと情報を保護します。各個人の情報が保護される一方、差分プライバシーによって、データコンシューマーは引き続き個人のグループに関する統計、傾向、行動を知ることができます。
差分プライバシーは、再識別リクスに対する強力な保護を提供し、標的型プライバシー攻撃に対して特に効果があります。この保護により、機密データをチーム間、組織外、規制の枠を超えて共有することができます。差分プライバシーは、2つの機密データセットを結合したり、新しいフィールドを追加したり、既存のフィールドのマスキングを解除したり、予備集計されたデータの代わりに個々の行を提供したりすることに伴う、再識別リスクの増大を軽減します。
他のプライバシー手法とは異なり、差分プライバシーは以下を行います。
差分攻撃や増幅攻撃などの標的型プライバシー攻撃から保護する。
プライバシーとユーティリティのトレードオフを定量化し、管理する。つまり、データコンシューマーがデータについて知ることができる非機密情報の量を制御する。
データプロバイダーが機密データを変換して再識別リスクを低減する必要性を排除する(マスキング、再編集、バケッティングなど)。
差分プライバシーが機密情報を保護する方法¶
差分プライバシーの下では、クエリ結果で、個々のエンティティを特定するために使用される可能性がある情報を明らかにしてはなりません。Snowflakeは、差分プライバシーを実施するために以下を行います。
ノイズを付加した集計¶
差分プライベートのクエリでは、結果を返すためにデータを集計する必要があります。 SELECT *
のような行レベルのクエリはブロックされます。これらの集計にはノイズが付加されており、計算の正確な結果ではありません。特定の行やエンティティが集計に含まれているかどうかをわかりにくくするために、結果にノイズ(つまり、ばらつきや無作為化)が付加されます。
ノイズを付加することで、サラミ法や差分攻撃のようなプライバシー攻撃から保護されます。クエリ結果に付加されるノイズの量は、クエリされる記録数、集計のタイプ、データ変換のタイプなど、クエリの機密性に影響するいくつかの要因に依存します。Snowflakeでは厳密な数学に基づいてクエリの機密性を計算しますが、クエリが個々のエンティティに関する情報を漏らす可能性があると、と大まかに理解することができます。一般的に、機密性の低いクエリはノイズが少なく、統計的に無視できるほどのレベルである場合もあります。非常に機密性の高いクエリ、たとえば個々のエンティティを特定しようとするクエリは、機密情報が漏れるのを防ぐために大量のノイズが付加されています。
Snowflakeは、クエリの最終的な集計の前に発生する中間集計にはノイズを付加しません。ノイズが付加されるのはクエリごとに一度だけです。
Snowflakeは、プライバシー保護されたテーブルの行数をパブリックな情報とみなします。たとえば、テーブル t
がプライバシーポリシーによって保護されている場合、 SELECT COUNT(*) FROM t
を実行すると、プライバシーロスを招くことなく正確な結果が返されます。
ノイズのレベルを把握する方法については、 クエリ結果の理解 をご参照ください。
プライバシーロスの制限¶
保護されたデータセットに対するすべてのクエリは、個人に関連するプライベートな情報を暴露することになり、これにはプライベートなクエリが生成するノイズの多い集計結果も含まれます。差分プライバシーでは、この情報の開示は プライバシーロス として知られ、定量化可能な単位となっています。クエリによって明らかにされる個人情報が多ければ多いほど、そのクエリに関連するプライバシーロスは大きくなります。プライバシーロスは定量化可能であるため、Snowflakeは差分プライバシーを使用して、クエリの履歴にわたる機密データを統計的に一定の信頼度まで保護することができます。
プライバシーロスは、ユーザーが保護されたデータに対してクエリを実行するたびに蓄積されます。累積プライバシーロスがある閾値に達した場合、その後にユーザーにさらに多くの結果を表示すると、理論的には許容できないレベルの信頼度で個人を特定できるようになります。 プライバシーバジェット は、どれだけのプライバシーロスが許容できるかという制限を設定するものです。Snowflakeは、ユーザーまたはユーザーグループによって実行されたクエリのプライバシーロスを集計し、その集計値がそれらのユーザーに関連付けられたプライバシーバジェットを超えることがないようにします。Snowflakeはプライバシーロスの閾値を設定するデフォルト値が予備構成されたカスタマイズ可能なプライバシーバジェットを提供します。
Snowflakeは、スキーマレベルのオブジェクトである プライバシーポリシー を使用して、プライバシーバジェットをユーザーまたはユーザーグループに関連付けます。管理者がそのプライバシーポリシーをテーブルやビューに割り当てると、そのテーブルやビューは プライバシー保護 された状態になります。ユーザ-がプライバシー保護されたテーブルに対してクエリを実行すると、Snowflakeはプライバシーポリシーを使用して、どのプライバシーバジェットがユーザーに関連付けられているかを判断し、クエリで発生するプライバシーロスがバジェットの上限を超えないようにします。
理論上のプライバシーと実際のプライバシーの違い¶
差分プライバシーの基準は学術文献に由来し、特に理論的なプライバシー攻撃に対して、数学的に証明された強力なプライバシー保証を持つように定式化されています。特に、プライバシーバジェットなどのプライバシー設定は、アカデミックな場で議論される場合、より控えめに設定されます。これらの設定は、データの有用性(分析の忠実性、正確性、可用性)を犠牲にして、理論的なプライバシー攻撃に対する強力な保護を優先します。PII や PHI のような機密性の高いデータを含め、ユースケースにおけるプライバシーとユーティリティのトレードオフを検討する際には、以下を考慮してください。
実際のプライバシー攻撃は、攻撃者が無制限の計算資源を持ち、攻撃対象のデータセット以外のすべてのデータセットにアクセスできると仮定した、学術文献に記載されている理論的なプライバシー攻撃ほど効果的ではありません。
デーデータコンシューマーは通常、意図的に攻撃を仕掛けようとはしません。データプロバイダーはコンシューマーのデータアクセスを取り消すことができ、データの分析価値が高すぎてそれを失うリスクを冒すことはできないためです。
Snowflakeでは、実際のユースケースの目標に沿って、プライバシー保護とユーティリティの合理的なバランスをとるデフォルト設定を選択していますが、特定のニーズに合わせて常に異なる設定にすることができます。
差分プライバシーのワークフロー¶
以下のワークフローは、差分プライバシーでデータを保護するデータプロバイダーが実行するタスクと、保護された後にデータをクエリするアナリストのタスクで構成されます。
データプロバイダー:
エンティティレベルのプライバシー を実装したい場合は、要件を満たすようにデータを構造化します。
プライバシーポリシーを作成 して、ロールやアカウントなどの要素に基づいてプライバシーバジェットをユーザーに関連付けます。
テーブルまたはビューに プライバシーポリシーを割り当て、クエリが差分プライベートになるようにします。
プライバシー保護されたテーブルやビューの数値列やカテゴリ列に対して プライバシードメインを定義 します。
アナリストに権限を与え、プライバシー保護されたデータにアクセスできるようにします。
アナリストがプライバシー保護されたデータに対してクエリを実行する際、 ユーザーに関連付けられたプライバシーバジェットを管理 することができます。
アナリスト:
データプロバイダーがプライバシー保護されたテーブルの列に定義した プライバシードメインを表示 し、列の内容をよりよく理解します。
データプロバイダーが、集計または GROUP BY 句で使用したい列のプライバシードメインを設定し忘れた場合、 その列のプライバシードメインを指定 します。
プライバシー保護されたテーブルとビューに対して、 差分プライベートクエリを実行 します。
ノイズ間隔を使用して、集計の 結果を理解するのに役立てる ようにします。
必要であれば、 データプロバイダーのプライバシードメインを狭めて、クエリ結果の改善を試みます。
制限事項¶
テーブルがプライバシー保護されている場合、アナリストがクエリできるのは以下のデータ型のみです。
文字列データ型。バイナリ型はサポートされていません。
日付と時刻のデータ型。タイムスタンプについては、 TIMESTAMP_NTZ のみがサポートされています。
差分プライバシーを使用する場合、現在サポートされていないSnowflakeの機能があります。詳細については、 Snowflake機能との相互作用 をご参照ください。
プライバシー保護のため、クエリ機能は制限されています。サポートされている演算子、クエリ構文、関数のリストについては、 差動プライバシー SQL リファレンス をご参照ください。
プライバシー保護されたテーブルに対してクエリを実行する場合、Snowflakeは、どの程度のノイズが付加されるかに影響する統計情報を計算した上でクエリを実行します。この2つのステップの間にデータが変化した場合、付加されたノイズの量が正しくない可能性があります。Snowflakeでは、アナリストがクエリを実行できる際にデータ更新が発生しないように、データプロバイダーがデータ更新のスケジュールを設定することを推奨しています。
次のステップ¶
データセットを保護するために差分プライバシーを使用しているデータプロバイダーは、 差分プライバシーの実装 をご参照ください。
差分プライバシーで保護されたデータセットをクエリするアナリストは、 差分プライバシーで保護されたデータのクエリ をご参照ください。