case03(再識別デモ): 弱点の評価 — 3/7¶
攻撃の設計に入る前の下ごしらえ。「なぜ運転者ハッシュが元に戻せるのか」を、ハッシュ化の性質とIDの作りの両面から評価します。用語は 用語集 を参照。
見るポイント¶
- ハッシュ関数の性質: 同じ入力からは必ず同じ出力が出る(決定的)。逆算する式は無いが、入力を総当りして一致を探せば元の入力が分かる。
- エントロピー(候補の多さ): 元の値が取りうるパターンが少ないほど、総当りが早く終わる。IDの桁形式が公知だと候補が絞られる。
- ソルト/秘密鍵の有無: ソルト(各値に足すランダム値)や秘密鍵(HMAC)が無いと、同じIDは誰が計算しても同じハッシュになり、事前計算した対応表(レインボーテーブル)で一気に照合できる。
- 既知の平文があるか: 攻撃者が「1つでも」元のIDとそのハッシュの組を掴めると、加工方法そのものを言い当てられる。
2つの弱点¶
この事例で再識別が成立してしまう原因は、次の2点に集約されます。
致命的な弱点
| 弱点 | 具体的な状態 | なぜ危険か | 攻撃で果たす役割 |
|---|---|---|---|
| ① 形式が公知・低エントロピー | 運転者IDは 100-000-000 形式。先頭の事業者コード 100 は公表・固定。候補は残り6桁=約100万通り(106)。 | 取りうるIDを全列挙できる。全部ハッシュしても数秒。 | 総当りで ハッシュ→ID の対応表を作れる |
| ② 単純な無ソルト SHA-256 | ソルト・秘密鍵なしで SHA-256 を1回。 | 同じIDは誰が計算しても同じハッシュ。事前計算・使い回しが効く。 | 既知IDのハッシュ一致で加工方法を確定できる |
エントロピーの直感
もしIDが「予測不能な十分に長いランダム値」(例: 128ビットの乱数)なら、候補が天文学的で総当りは不可能です。ところが本件のIDは桁形式が決まっていて、しかも公表されている部分があるため、実際に試すべき候補は約100万通りに縮みます。「形式が公知」=「候補が少ない」=「総当りできる」 という連鎖が弱点①の本質です。
ソルト・秘密鍵があると何が変わる?
- ソルト(値ごとに違うランダム値を足してハッシュ)があると、同じIDでも出力がバラけ、事前計算した対応表が使えません。
- 秘密鍵つきハッシュ(HMAC)だと、鍵を知らない攻撃者は正しいハッシュを再現できず、総当りしても一致しません。
- 本件はどちらも無し。だから「素の
SHA-256で総当り」がそのまま通ってしまいます(対策は 結果 で実演)。
公開データの各項目(再識別に使えるか)¶
| 項目 | 性質 | 再識別での役割 |
|---|---|---|
| 運転者ハッシュ | 運転者IDの無ソルト SHA-256 | 復元対象。総当りで元の運転者IDに戻せる(弱点①②) |
| 乗車日時 | 行動・履歴 | 復元後、同一運転者の行動を時系列で追える |
| 乗車地・降車地 | 行動・履歴 | 復元後、営業所・生活圏の推定につながる |
| 走行距離km・料金 | 行動・履歴 | 補助的(他項目と組み合わせ) |
→ この評価をもとに、次の 攻撃の設計 で「①方法の特定 → ②総当りで全復元」の手順を組み立てます。