case04(再構築デモ): 攻撃の設計 — 4/7¶
弱点の評価 で見たとおり、公表統計は個票についての制約です。これらを連立させて解く手順を設計します。これは「攻撃を推奨する」ためではなく、安易な統計公表がいかに脆いかを理解し、正しい対策(差分プライバシー等)に結びつけるための教材です。
攻撃の全体像¶
flowchart TD
A["公表統計表<br/>人数・中央値・平均(14行、7行は秘匿)"] --> B
B["① 変数を用意<br/>7人ぶんの年齢・性別・人種・配偶を未知数に"] --> C
C["② 統計を制約に翻訳<br/>各公表行 → 人数・合計区間・中央値の制約"] --> D
D["③ 制約充足問題を全解列挙<br/>全ての解を数え尽くす(CP-SAT)"] --> E
E -->|解が1通り| F["再構築された個票<br/>7人の年齢・属性が確定"]
E -->|複数解| G["曖昧さが残る<br/>(統計が少ない/粗い場合)"]
各ステップの狙い¶
| ステップ | やること | ポイント |
|---|---|---|
| ① 変数を用意 | 総人口の公表値(7人)から、7人ぶんの未知数(年齢・性別・人種・配偶関係)を置く | 攻撃者は「人数」だけは公表から分かる |
| ② 統計を制約に翻訳 | 公表された各行を、人数・合計(平均×人数)・中央値の制約に変換 | 秘匿された行は制約にしない(情報がないだけ) |
| ③ 全解列挙 | すべての制約を満たす個票の組合せを数え尽くす(CP-SAT) | 解が1通りなら個票が確定。複数なら曖昧さが残る |
なぜ『全解列挙』が必要なの?1つ見つければ十分では?
再構築で怖いのは「唯一解」の場合です。解が1つしかないなら、それは間違いなく本物の個票です。だから「1つ見つける」だけでなく「他に解が無いことを確かめる(数え尽くす)」ことが本質。このデモでは、7行の制約だけで解が1通りに決まり、伏せた7行が無くても個票が確定してしまいます。
小集団 × 多数の正確な統計 = 危険
- 統計が少ない/粗いと解は多数残り、個票は特定できない(曖昧さがプライバシーを守る)。
- 統計が多い/正確だと解が一意に絞られ、個票が復元される。
- 本件は7人という小集団に、人数・中央値・平均を重ねたため、セルを半分伏せてもなお一意に決まります。
この設計が示すこと(対策への布石)¶
攻撃が成立する条件を裏返すと、そのまま対策になります(詳細は 結果)。
- 統計に不確かさ(ノイズ)を残す: 公表値に数学的なノイズを加える(差分プライバシー)と、制約が「幅」を持ち、解が一意に絞れなくなる。
- 公表する統計の量・精度を絞る: 細かいグループの統計を出しすぎない/粗く丸める。小集団の統計は特に慎重に。
- 秘匿だけに頼らない: セルの抑制は再構築を止めないと理解し、上の対策と組み合わせる。
→ 具体的な制約の作り方は 攻撃の仕様、実行は ② 実装(Colab)、復元後の個票は 復元後テーブル。