第三章:去标识化(De-identification)笔记

3.1 预备知识

  • 数据集adult_with_pii.csv,包含人口普查数据,其中 PII(个人可识别信息) 是虚构的。
  • 主要列:姓名、出生日期(DOB)、社保号(SSN)、邮编(Zip)、工作类别等。

3.2 去标识化(De-identification)

  • 定义:移除数据集中的标识信息(如姓名、SSN 等)的过程,也称匿名化或假名化。
  • 关键点:标识信息没有严格的形式化定义,因为所有信息都可能成为标识信息(取决于背景知识)。
  • 常用做法:直接删除明显标识列(如姓名列和社保号列),例如使用数据框的删除列操作生成新的去标识化数据集。

3.3 关联攻击(Linkage Attacks)

定义:攻击者利用辅助信息(auxiliary information)与去标识化数据集中的剩余属性进行连接(join),从而重新识别个体。

3.3.1 攻击演示

  • 目标:找到朋友 Karrie Trusslove 的收入。
  • 已知辅助信息:出生日期 + 邮编。
  • 在去标识化数据中匹配这两个字段,若匹配唯一,则成功重新识别并推断敏感属性(如收入)。具体操作是将已知的单条记录与去标识化数据集按照出生日期和邮编两列进行合并,若结果唯一,即可定位目标个体。

3.3.2 重新识别的难易程度

  • 邮编:在数据集中非常唯一(大部分邮编只出现一次)→ 仅凭邮编即可唯一识别很多人。
  • 出生日期:分布较分散,多数日期出现 1~3 次,但也有不少唯一值。
  • 组合(邮编 + 出生日期):几乎能唯一识别整个数据集(实验中仅 2 人重复)。
  • 引用 Latanya Sweeney 的研究:87% 的美国人口可通过“性别 + 出生日期 + 邮编”唯一识别。

3.3.3 能重新识别多少人?

  • 仅用出生日期:约 7000 人可唯一识别,另有 10000 人缩小到 2 个候选。
  • 用出生日期 + 邮编:基本实现全员唯一识别。

3.4 聚合(Aggregation)

定义:只发布汇总统计量(如平均值、总和),而非个体记录。

例如,计算所有记录年龄的平均值。

3.4.1 小群体问题(Problem of Small Groups)

  • 若分组过细(如按邮编分组),有些组只有 1 人,则平均值直接泄露该人的年龄。
  • 在数据集中,很多邮编唯一,导致按邮编求平均年龄实际上暴露了个体年龄。
  • 美国人口普查局发布的区块级数据中,有些区块人口为零,存在同样问题。
  • 关键困难:多大群体才“足够大”?没有明确标准,因为攻击者总能利用小群体。

3.4.2 差分攻击(Differencing Attacks)

即使是大群体,若发布多个聚合结果,攻击者可通过求差提取个体信息。

示例

  • 查询1:所有人年龄总和为某个数值。
  • 查询2:除 Karrie 外所有人年龄总和为另一个数值。
  • 两者相减,差值即为 Karrie 的精确年龄。

这种攻击不依赖于群体大小,只要两个查询只差一条记录即可。

3.4.3 关于恶意查询(On Malicious Queries)

  • 无法区分恶意与非恶意查询:攻击者可以利用一系列看似正常的查询组合来提取隐私。
  • 系统无法从查询语法判断意图,即使预批准查询也无法防止链式推理。
  • 差分隐私的设计原则:不尝试识别恶意查询,而是通过控制输出分布来统一保护隐私,无论查询是否恶意。

总结

  • 链接攻击:利用辅助信息与去标识化数据进行连接,可高效重新识别个体。
  • 去标识化:移除明显标识符并不足以保证安全,因为剩余属性(如邮编、出生日期)具有高度识别力。
  • 聚合统计:看似安全,但小群体和差分攻击可轻松泄露个体信息。
  • 核心教训:传统方法(去标识化、聚合)无法提供可靠隐私保护,因为它们依赖对攻击者背景知识和查询意图的不现实假设。

词汇表(Glossary)

术语 说明
Join(SQL) 表连接操作
Group by 分组聚合
Census block 人口普查区块
pandas 的 merge 函数 执行 SQL 风格的连接
pandas 的 groupby 方法 分组操作
pandas 的 read_csv 函数 读取 CSV 文件