k-匿名性を使用した再識別リスクの可視化

このトピックでは、Cloud Data Loss Prevention(DLP)を使用してデータセットの k-匿名性を測定し、Google データポータルで可視化する方法を示します。そうすることで、リスクをより深く理解し、データの秘匿化や匿名化を行う場合に有用性のトレードオフを評価するのに役立ちます。l-多様性などの追加の指標も API で利用できますが、このトピックでは k-匿名性に焦点を当てます。

はじめに

匿名化手法は、データを処理または使用するときに主体のプライバシーを保護するうえで非常に役立つ場合があります。しかし、どうすればデータセットが十分に匿名化されていることがわかるでしょうか。さらに、匿名化によって当該の使用事例で生じたデータ損失が大きすぎるかどうかをどのようにして知ることができるでしょうか。つまり、データに基づいた意思決定に役立てるために、再識別リスクとデータの有用性をどのように比較できるでしょうか。

データセットの k-匿名性の値の計算では、データセットのレコードの再識別可能性が評価されるため、こうした質問に答えるのに役立ちます。Cloud DLP には、指定した準識別子に基づいてデータセットの k-匿名性の値を計算する組み込み機能が含まれています。これにより、特定の列または列の組み合わせを匿名化することで、再識別される可能性が高いデータセットが生成されるかどうかを迅速に評価できます。

データセットの例

以下は、大きなデータセットの例の最初の数行です。

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

このチュートリアルでは準識別子に焦点を当てているため、user_id は扱っていません。現実のシナリオでは、このデータが適切に秘匿化またはトークン化されていることを確認する必要があります。score 列はこのデータセットが所有する情報であり、攻撃者は他の方法で知る可能性が低いため、この列は分析に含めません。したがって、残りの zip_code 列と age 列に焦点を当てることになります。攻撃者はこれらの列を使用して、他のデータソース経由で個人について知る可能性があります。データセットについて回答しようとしている質問は次のとおりです。

  • zip_codeage の 2 つの準識別子は、匿名化されたデータの全体的な再識別リスクにどのような影響を与えるか。
  • 匿名化変換の適用は、このリスクにどのような影響を与えるか。

zip_codeage の組み合わせが少数のユーザーにマッピングされないようにする必要があります。たとえば、郵便番号 94043 に住んでいる 25 歳のユーザーがデータセットに 1 人しかいないとします。攻撃者は、その情報をその地域に関する人口統計または他の利用可能な情報と相互参照し、その人物を特定してスコアの値を知ることができる可能性があります。この現象の詳細については、リスク分析のコンセプト トピックのエンティティ ID と k-匿名性の計算セクションをご覧ください。

ステップ 1: データセットに対する k-匿名性を計算する

まず、Cloud DLP を使用して、データセットに対する k-匿名性を計算します。次の JSON をリソースに送信します。この JSON では、DlpJobエンティティ ID user_id 列に設定し、2 つの準識別子を zip_code 列と age 列の両方として識別します。また、結果を BigQuery テーブルに保存するように Cloud DLP に指示しています。

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"
    }
  }
}

k-匿名性ジョブが完了すると、Cloud DLP はジョブ結果を dlp-demo-2.risk.risk1 という名前の BigQuery テーブルに送信します。

ステップ 2: 結果を Google データポータルに接続する

次に、ステップ 1 で作成した BigQuery テーブルを Google データポータルの新しいレポートに接続します。

  1. Google データポータルを開き、[新しいレポートの開始] の下にある [空白] オプションをクリックします。
  2. 右側の [データソースを追加] ペインで、下部にある [新しいデータソースを作成] をクリックします。
  3. [Google コネクタ] セクションで、[BigQuery] にカーソルを合わせて、[選択] をクリックします。
  4. BigQuery データソース ページで、列選択ツールからプロジェクト、データセット、テーブルを選択します。この例では、プロジェクトに dlp-demo-2、データセットに risk、テーブルに risk1 を選択します。
  5. [接続] ボタンをクリックします。3 つの列すべてを選択すると、このボタンは青色に変わります。接続すると、以下に示すような色分けされたフィールドのリストが表示されます。 データポータルのフィールドのリスト。
  6. [フィールド] 列で、upper_endpoint フィールドを見つけます。その行の [集計方法] で、プルダウン メニューから [合計] を選択します。
  7. [レポートに追加] をクリックします。

これで、k-匿名性スキャン結果が新しいデータポータル レポートに追加されました。次のステップでは、グラフを作成します。

ステップ 3: グラフを作成する

最後に、インポートされたフィールドに基づいてグラフを作成します。グラフを挿入するには、次の手順に従います。

  1. データポータルの [挿入] メニューで、[複合グラフ] をクリックします。
  2. グラフを表示するエディタページをクリックして長方形を描画します。

次に、バケットのサイズと値の範囲を変更する効果がグラフに示されるように、グラフデータを構成します。

  1. 右側の [データ] タブの下で、[timestamp] にカーソルを合わせてから丸で囲まれた X をクリックして、[期間のディメンション] を削除します。
    削除ボタンが有効化された timestamp フィールドの詳細。
  2. upper_endpoint フィールドを右側の列の [ディメンション] フィールドと [並べ替え] フィールドにドラッグし、[並べ替え] フィールドのプルダウン メニューから [昇順] を選択します。
  3. bucket_size フィールドと bucket_value_count フィールドを [指標] フィールドにドラッグし、右の列の [指標] に他の追加選択があれば削除します。完了すると、列は次のように表示されます。
    フィールド リストのスクリーンショット。
  4. bucket_size 指標の左にあるアイコンを指定すると、編集(鉛筆)アイコンが表示されます。編集アイコンをクリックし、対応するプルダウン メニューから次の両方を選択します。

    • [表示形式] > [全体に対する割合]
    • [関数を適用] > [実行中の合計]
  5. bucket_value_count 指標を除いて手順を繰り返します。

最後に、両方の指標の折れ線グラフを表示するようにグラフを構成します。

  1. ウィンドウの右側にあるペインの [スタイル] タブをクリックします。
  2. 両方の系列(bucket_sizebucket_value_count を表す #1 と #2)で、[折れ線] を選択します。
  3. 最後のグラフを単独で表示するには、ウィンドウの右上隅にある [ビュー] ボタンをクリックします。

k-匿名性 = 10 のデータポイントが強調表示された最後のグラフ。

グラフの解釈

生成されるグラフは、x 軸が k-匿名性の値で、y 軸がデータ損失率です。たとえば、上のスクリーンショットで、強調表示されたデータポイントは k-匿名性の値が 10 です。これは次のように解釈できます。k-匿名性の値が最大で 10 の行をすべて削除した場合、データセットの行の 82% が失われます。さらに、これにより年齢と郵便番号の固有の組み合わせが 92% 失われます。上記のグラフは、かなりの数の行と値を削除せずに、このデータセットで 2 または 3 より大きい k-匿名性値を達成することは、困難であることを示しています。

幸い、データを削除することだけが選択肢ではありません。他の匿名化手法を使用すると、損失と有用性のより良いバランスをとることができます。たとえば、より高い k-匿名性の値とこのデータセットに関連する種類のデータ損失に対処するには、年齢と郵便番号の組み合わせの一意性を削減するために、年齢や郵便番号をバケット化できます。たとえば、20〜25、25〜30、30〜35 などの範囲で年齢をバケット化してみることができます。実施方法の詳細については、一般化とバケット化テキスト コンテンツ内の機密データの匿名化をご覧ください。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Data Loss Prevention