k-匿名化とは何か—— 個人を「群衆」に紛れさせるプライバシー保護技術
著者名:南 和宏, 岩崎 香具矢(編集), 服部 優子(挿絵)
作成日:2026.07.17
テクニカルレポートNo.3
前回の記事「匿名化研究の出発点 ―― William Weld知事の医療情報『再識別』事件」では、名前や社会保障番号といった直接識別子を消すだけでは匿名化※として十分でなく、それ自体は直接識別子でない個人の属性※(準識別子)を組み合わせることで個人が絞り込まれ、特定されてしまうリスクがあることを説明しました。また、その対策としてk-匿名性※という安全性の概念が生まれた経緯を紹介しました。この記事では、そのk-匿名性の概念を詳しく解説します。
匿名化技術の位置付け
最初に、私たちのプロジェクトで研究するSDC技術と匿名化技術の関係を説明します。SDC技術とは、データ分析などの計算結果から元データの機密情報が漏洩するのを防ぐ技術であり、匿名化技術もその一つに位置付けられます。ただし、匿名化技術は図1に示すように集計した統計データではなく、個人単位のミクロデータの詳細な情報をできるだけ元と同じ形式で公開し、さまざまな分析の目的に使ってもらうことを目指します。通常のSDC技術ではプライバシー保護の対象が統計量という集約されたデータであるのに対し、匿名化技術では個人単位のレコードを含む表データがその対象になります。

図1. 様々な分析ニーズに応える匿名データの公開
再識別はこうして起こる:レコードリンク攻撃
次に、

図2. 直接識別子(名前)を削除した医療データ
ここで、図2の右側の表のように「名前」の列を削除すれば、

表1. 公開されている有権者名簿
攻撃者が「橋本直樹さんが匿名化された医療データに含まれている」という事実を知っていれば、職業・性別・年齢という3つの共通する属性を両方のデータで突き合わせるだけで、図4のように医療データの橋本さんのレコードを再識別できてしまう場合があります。

図3.レコードリンク攻撃の例
この例の有権者名簿の橋本直樹さんは、3つの共通の属性について、「職業:法律家・性別:男・年齢:30」という値の組み合わせをとります。図3(左)の医療データでこの値の組み合わせに合致するレコードは3番目のレコードのみであり、橋本さんのレコードであったと再識別されます。この医療データには、「病名」の情報も含まれるため、「橋本直樹さんの病名はエイズである」という、機密性の高いプライベートな個人情報も知られてしまいます。このように、匿名データと攻撃者がもつ外部データに共通する属性の値を照合してレコードを照合する攻撃を レコードリンク攻撃※と呼びます。
k-匿名化の基本アイデア:k 人の中に紛れさせる
レコードリンク攻撃への対抗策として、Pierangela Samarati と Latanya Sweeney が提案したのがこの後説明する k-匿名化 [1] です。k-匿名化で想定する攻撃者は、すでに流通しているデータから標的とする個人の属性を入手し、公開された匿名データの中から候補となるレコードを絞り込もうとします。k-匿名化の発想は攻撃者が外部情報を使っても、そのレコードを k 個より少なくは絞り込めないようにする、という直感的に理解しやすいものです。
この「k 個より少なくは絞り込めない」という匿名データに対する要件を、攻撃者が知り得る個人の属性情報に基づいて定式化したのがk-匿名性です。また、k-匿名性を満たす匿名データを作成するためのデータ加工のプロセスを k-匿名化と呼び、区別します。k-匿名性では、図4のように匿名化の対象となるデータの各属性を次の4種類に分類します。「直接識別子」は、社会保障番号や氏名など、それ単独で個人を直接特定する属性であり、匿名化の際に削除されます。「準識別子」は、住所・生年月日など、組み合わせると個人を絞り込める属性です。この準識別子は攻撃者が知り得る個人の属性情報に相当し、k-匿名性を定義するうえで重要な概念です。「機密情報」は、収入や病名など、攻撃者から守りたい機密性の高い情報です。そして、「非機密情報」は、上のどれにも当たらない属性です。

図4.k-匿名性における属性の分類
k-匿名性では、準識別子に分類される属性の値の組み合わせについて、常に同じ値を取るレコードが k 個以上存在することを要件とします。k には整数を指定します。例えば、図5に示すテーブルは k-匿名性(k=3)を満たします。この例では、職業・性別・年齢を準識別子、病名を機密情報に分類しています。このテーブルでは、準識別子が同じ値を取る2つのグループにレコードが分かれます。このような、準識別子の値が同じレコードのまとまりを「等価クラス」と呼びます。レコード数が少ないほうの等価クラスは3つのレコードを含むので、このテーブルはk-匿名性(k=3)を満たすことになります。
図5.k-匿名性 (k=3) の匿名データの例
このような匿名データを作成すれば、攻撃者が特定したい人物の準識別子(職業・性別・年齢)を知っていたとしても、候補となるレコードを k 個より少なくは絞り込めません。つまり、標的のレコードを正しく言い当てられる確率は、最大でも 1/k に抑えられます。k=3 なら 1/3 以下、k=10 なら 1/10 以下です。k を大きくするほど「群衆に紛れる」度合いが高まり、安全性が増します。個人を消すのではなく、見分けがつかない仲間で取り囲む——これが k-匿名性の本質です。
k-匿名性の実施方法「一般化」
先ほど説明した k-匿名性は、レコードが再識別されない匿名データが満たすべき性質を定義したものであり、どのようにしてそのような匿名データを作るか(k-匿名化)は別の話です。現在では k-匿名性を実現するさまざまな k-匿名化アルゴリズムが考案されていますが、この記事では、最初の Samarati と Sweeney の論文 [1] で提案された、準識別子の値を一般化※する手法を紹介します。
Samarati と Sweeney の k-匿名化手法では、まず直接識別子を削除します。次に、準識別子を一般化します。一般化とは、値を粗くして複数のレコードを同じ見た目にそろえる操作のことです。たとえば、
- 職業:「技術者」「弁護士」→「専門職」へ
- 年齢:「35」「38」→「[35-40)」という範囲へ
と一般化します。このとき、各属性についてあらかじめ ドメイン一般化階層※を定義しておく必要があります。職業のような分類属性なら「技術者 → 専門職 → すべて」と、上にいくほど粗くなるように定義します。年齢のような数値属性なら、範囲を段階的に広げていくように定義します。この一般化を施した結果が、図4のk-匿名性(k=3)されたテーブルです。なお、機密情報と非機密情報は一切変更しない点に注意してください。守りたい中身を歪めるのではなく、紐づけの手がかりだけを曖昧にするのが k-匿名化の作法です。
プライバシーと有用性のトレードオフ
ここで一つ、現実的な問題が起きます。例えば、準識別子である年齢をすべて「0歳以上」にしてしまえば準識別子を思い切り一般化すれば、k-匿名性は簡単に満たせます。しかし、それではデータはあまりに粗くなり、分析の役に立ちません。
つまり k-匿名化とは、
「k-匿名性を満たす」という制約のもとで、データの有用性をできるだけ高く保つ最適化問題
と考えることができます。どこまで一般化すればk-匿名性を満たすか、必要以上に情報を捨てていないか——このバランスをどう取るかが、研究の焦点になります。Samarati と Sweeney の k-匿名化手法は、ドメイン一般化階層の一番下のレベルから始め、データが k-匿名性を満たすまで一般化のレベルを順に上げていき、k-匿名性を満たした段階でそれ以上の一般化を行わない、という方法をとります。
まとめ
k-匿名化の概要を整理すると、次のようになります。
- 問題:名前を消すだけでは、準識別子の照合(レコードリンク攻撃)で個人が再識別されてしまう。
- 発想:個人のレコードをデータから削除するのではなく、準識別子が同じレコードを k 個以上そろえ、「群衆に紛れさせる」ことにより、特定確率を 1/k 以下に抑える。
- 手段:直接識別子を削除し、準識別子をドメイン一般化階層に沿って一般化する。機密情報の中身は変えない。
- 課題:プライバシーと有用性はトレードオフの関係にあり、どこまで一般化するかが最適化問題になる。
k-匿名化は、平文のままデータを公開しつつ、統計的な再識別リスクに上限を設けるという、暗号技術とは異なる発想に立ちます。その明快さゆえに匿名化技術の基礎となり、同時にその限界が、現代のプライバシー保護技術の進展の出発点にもなりました。その後、k-匿名性の弱点を補う、より強い要件の安全性指標もいくつか提案されていますが、k-匿名性は概念の理解しやすさと実用性の高さから、今もなお匿名化手法の主流であり続けています。
用語補足
- 匿名化・・・データから特定の個人を識別できないように加工する処理を指します。つまり、「このデータは誰のものか」を辿れなくすることで、個人のプライバシーを保護しながらデータの利活用を可能にする技術・手続きです。
- レコード・・・データを表形式(テーブル)で表したときの1行分のデータを指します。1つのレコードは、通常1人の個人、あるいは1つの対象(1件の取引、1台の機器など)に関する情報のまとまりに対応します。
- レコードリンク攻撃・・・匿名化されたデータと、別の公開データや外部データを照合し、同じ人物の情報を結びつけることで個人を特定しようとする攻撃。たとえば、生年月日・性別・郵便番号などを手がかりに、匿名データと名簿を結びつける場合があります。
- k-匿名化・・・データの中で、同じ特徴を持つ人が少なくとも k 人以上になるように加工する匿名化手法。たとえば k=3 の場合、ある人の情報が、少なくとも他の2人と区別できない状態になるようにします。
- 一般化・・・データの細かい情報を、より大まかな表現に置き換えること。たとえば「35歳」を「30代」にする、「東京都新宿区」を「東京都」にする、といった加工が一般化にあたります。
- ドメイン一般化階層・・・一般化するときに、値をどの順番で大まかにしていくかを示した階層。たとえば「35歳 → 30代 → 成人 → すべて」のように、具体的な値から広い分類へ段階的にまとめるルールを指します。
過去の記事で登場した専門用語
参考文献
- Pierangela Samarati and Latanya Sweeney, “Protecting Privacy When Disclosing Information: k-Anonymity and Its Enforcement through Generalization and Suppression,” Technical Report SRI-CSL-98-04, SRI International Computer Science Laboratory, 1998.