匿名统计,根本不匿名

只公布"平均值"、"人均"、"占比",就算安全了吗?拖动下面的 ε,亲眼看攻击者如何仅凭统计结果把一个人从数据里揪出来。

隐私攻击演示

如果张三收入 99 万,只看平均值能猜出他在不在数据里吗?

旁边这块仪表已默认跑了一次攻击,显示的是攻击者仅凭统计结果推断「张三是否在数据里」的把握。点下面的按钮换一批噪声再来一次,看看结果如何波动。

攻击者判断张三在场
—
默认已模拟一次,可点击按钮再来一次

1. 模拟数据集

选择一个场景。系统会生成一批普通用户,再加入一个极端的「张三」。

普通样本
—
特殊用户
—
敏感度
—
查询类型
均值

2. 精确统计:泄露从差异开始

攻击者不需要看到原始数据,只要能比较「包含张三」和「不包含张三」的统计结果,极端个体就可能暴露。

不包含张三
—
普通人群统计
包含张三
—
发布方真实数据
精确差异
—
差异越大,越容易推断

3. 打开差分隐私

ε 是隐私预算。ε 越小,噪声越大,隐私越强;ε 越大,结果越准,但更容易暴露单个人。

隐私强1.0结果准
800 次
差分隐私发布值
—
误差 —
噪声规模
—
scale = 敏感度 / ε
隐私解释
—
—

4. 查询次数会消耗预算

「预算」= 你愿意为整批数据总共泄露多少隐私。 第 3 节的 ε 是单次查询的成本,这里把它累加起来:给数据集设一个总额 3.0,每发布一次就扣掉相应的 ε,扣完为止。

为什么要有上限?如果允许无限次查询,攻击者可以把多次噪声结果平均掉,噪声就等于白加了。 (这是一个独立的沙盘演示,点击下方按钮不会影响上面第 3 节的统计结果。)

总预算 3.0(可发布的隐私额度) 剩余 3.0
试着依次点击右侧按钮,看预算怎么被消耗。

你应该带走的直觉

01

匿名化不等于安全

去掉姓名只能隐藏显式身份。只要统计结果对某个人足够敏感,仍可能通过差异反推。

02

噪声是保护层

差分隐私故意让发布值抖动,让「有你」和「没你」看起来差不多。

03

预算不是无限的

查询越多,攻击者越能平均掉噪声。隐私预算就是限制反复试探的刹车。