一个闷热的下午,小区公告栏贴出一张《业主健康统计表》。物业很贴心:所有姓名、电话都涂成了黑色方块。可推销员老周只看了一眼,就掏出手机说:“李阿姨,您最近降糖药还够用吗?”——公告明明打了码,年龄、楼栋、宠物、药盒编号却原样写着,老周再对照业主群里的养猫照片,三分钟锁定了目标。 这就是去标识化与重识别的真实战争:前者想给数据“打码”,后者却能凭残留线索拼出真容。本文从这场“打码与侦探”的攻防出发,讲清去标识化的基本手法,拆解 GoodRx 因“假打码”被罚 150 万美元、MOVEit 因“档案柜被搬走”波及全球数千家机构的真实案例,最后落到法规红线与工程防护实践。

岗位关联

掌握去标识化与重识别的攻防逻辑,是医疗 AI 产品通过监管审查、实现数据合规共享、避免天价罚单的底层职业素养。

目录
  1. 可视化演示
  2. 基本概念:涂黑姓名,就安全了吗?
  3. 去标识化技术:把线索再模糊一层
  4. 重识别攻击:侦探的拼图游戏
  5. GoodRx 案例:一张能还原的“假马赛克”
  6. MOVEit 事件:整个档案柜被搬走
  7. 法规与合规:给“打码”定规矩
  8. 安全防护实践:让侦探无处下手
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示医疗数据去标识化流程、重识别风险量化分析与MOVEit/GoodRx案例对比,支持阶段切换与匿名化强度调节,直观呈现隐私保护与数据效用的动态博弈。

本节配有交互动效(进入视口后自动加载,约 3KB)。

医疗数据去标识化流程 直接标识符(姓名/SSN)经掩码与泛化处理移除 准标识符(邮编/年龄)经k-匿名化降低链接攻击风险 k-anon(k) k-匿名确保每条记录至少与k-1条不可区分

基本概念:涂黑姓名,就安全了吗?

物业贴出的公告上,姓名、电话被涂成黑块——在隐私保护的世界里,这些被涂掉的信息叫“直接标识符”:身份证号、手机号、社保卡号,单独出现就能锁死一个人。老周扫了一眼黑块,却根本没在意,因为公告上的其他信息——“3号楼502、45岁、养猫、常取降糖药”——还完整地暴露在阳光下。

这些看似无害的字段叫“间接标识符”(准标识符):年龄、性别、邮编、职业、居住地。单独拎出来,“45岁养猫”满大街都是;可组合在一起,“3号楼502 + 45岁 + 养猫 + 降糖药”就几乎指向唯一一个人。去标识化(de-identification)的目标,就是把这些能指向个人的信息全部移除或改写,让数据无法对上号。

美国 HIPAA 的“安全港”规则给出了最著名的去标识化清单:姓名、地理细分、电话号码等 18 类标识符全部去除。但清单只约束“直接”的那部分,间接标识符不在其中。于是产生一个核心风险指标——唯一性:当一组准标识符的值在数据集中只出现一次时,这个组合就等同于一份指纹。

f(q1,q2,…,qk)=1⇒该个体可被唯一识别\displaystyle f(q_1, q_2, \dots, q_k) = 1 \Rightarrow \text{该个体可被唯一识别}

1. 定义频次函数:$f(q_1, q_2, \dots, q_k)$ 表示同时满足 $q_1$ 到 $q_k$ 这组准标识符取值的记录条数。

f(q1,q2,…,qk)\displaystyle f(q_1, q_2, \dots, q_k)

2. 判断唯一性:当 $f(q_1, q_2, \dots, q_k) = 1$ 时,数据集中只有一条记录符合这个组合。

f(q1,q2,…,qk)=1\displaystyle f(q_1, q_2, \dots, q_k) = 1

3. 得出重识别结论:该组合独此一份,可据此唯一识别出对应个体,即“重识别”成功。

⇒可唯一识别\displaystyle \Rightarrow \text{可唯一识别}

所以老周根本不需要看姓名:“3号楼502、45岁、养猫、降糖药”这串组合在小区里只有李阿姨一个人。涂黑姓名就像撕掉信封上的地址——信纸上的落款、笔迹、故事,照样把身份写得明明白白。

去标识化技术:把线索再模糊一层

被老周一眼识破后,物业升级了公告:“45岁”改成“40-49岁”,“3号楼502”改成“城东片区”,“降糖药”改成“慢性病用药”。这些动作在数据领域分别叫泛化(generalization)和抑制(suppression)——前者把精确值往粗粒度上挪,后者直接把稀有值变成星号。

去标识化工具箱里还有两件常用工具。脱敏(masking):把字段内容替换成无意义字符,如手机号 138\\\*\*8888;假名化(pseudonymization):把姓名替换成随机 ID,映射表单独加密保存——注意,假名化只是“换名字”,不是“隐身”,因为映射表一旦泄露就全部还原。

这些技术围绕同一个数学目标——k-匿名(k-anonymity):按准标识符把记录分桶,要求每个桶里至少有 k 条记录,让攻击者最多只能锁定“这个桶里的 k 分之一”。k 越大隐私越好,但数据可用性越差,这是一场用精度换隐私的讨价还价。

∣{r∈D:r.Q=q}∣≥k,∀q∈ΠQ(D)\displaystyle \left|\{r \in D : r.Q = q\}\right| \ge k, \quad \forall q \in \Pi_Q(D)

1. 定义等价类:$Q$ 是选定的准标识符集合(如“年龄区间+片区”),$r.Q = q$ 表示记录 $r$ 在这一组属性上的取值等于 $q$。

r.Q=q\displaystyle r.Q = q

2. 统计桶大小:$\{r \in D : r.Q = q\}$ 是从数据集 $D$ 中筛出所有符合 $q$ 的记录,外面的 $|\cdot|$ 数出它们的条数。

{r∈D:r.Q=q}\displaystyle \{r \in D : r.Q = q\}

3. 遍历所有组合:$\Pi_Q(D)$ 是 $D$ 在 $Q$ 上的全部不同取值,即所有可能出现的“等价类”。

ΠQ(D)\displaystyle \Pi_Q(D)

4. 施加下限约束:每个等价类条数都 $\ge k$,攻击者面对任何一个桶都至少有 $k$ 个候选者,无法精确指认。

≥k\displaystyle \ge k

物业把“李阿姨专属线索”混进“40-49 岁的城东慢性病患者”人群里,桶里一下多了几十号人,老周的“精准点名”失效了。k-匿名就是用“大家都长得差不多”来保护“谁也不知道你是谁”。

重识别攻击:侦探的拼图游戏

老周并没有放弃。公告这条路走不通,他转身打开电脑:小区业主群相册、快递柜取件记录、社区体检预约表——这些公开或半公开的信息,像散落一地的拼图碎片。

把两张表按“楼栋+年龄+宠物”对齐拼接,公告里的匿名记录立刻和业主通讯录的姓名挂上了钩。这种把匿名数据与外部数据关联、还原身份的技术,就是链接攻击(linkage attack),也是重识别最经典的招式。

链接攻击的理论基础可以追溯到 2000 年 Latanya Sweeney 的著名实验:当时马萨诸塞州发布政府职员就诊记录,去掉了姓名、电话,但保留邮编、出生日期、性别——Sweeney 仅凭这三项组合就在选民登记表上锁定了当时的州长 Weld,并把病历寄到了他办公室。她估算大约 87% 的美国人可被这三项组合唯一识别。这就是“马赛克效应”:碎片单独无害,拼起来触目惊心。

Ranon⋈QRpublic⇒(姓名,敏感字段)\displaystyle R_{\text{anon}} \bowtie_{Q} R_{\text{public}} \Rightarrow (\text{姓名}, \text{敏感字段})

1. 准备两张表:$R_{\text{anon}}$ 是打码后的数据表,$R_{\text{public}}$ 是攻击者掌握的公开表(如选民册、社交资料)。

Ranon, Rpublic\displaystyle R_{\text{anon}},\ R_{\text{public}}

2. 指定连接键:$\bowtie_{Q}$ 表示以准标识符集合 $Q$(年龄、邮编、性别等)相等为条件进行关系连接。

⋈Q\displaystyle \bowtie_{Q}

3. 拼出结果行:连接结果中每行同时包含 $R_{\text{public}}$ 的姓名和 $R_{\text{anon}}$ 的敏感字段(如疾病)。

(姓名,敏感字段)\displaystyle (\text{姓名}, \text{敏感字段})

4. 完成重识别:姓名与敏感信息同现,打码数据还原为可识别个人的隐私数据。

⇒身份泄露\displaystyle \Rightarrow \text{身份泄露}

这就是侦探的三板斧:公开数据 + 重叠字段 + 唯一组合。公告栏上的“匿名”,在拼图高手眼里不过是缺了一块的拼图——他早就知道那块缺的是什么。

GoodRx 案例:一张能还原的“假马赛克”

物业吸取教训,决定把联系方式“加密”后再贴:电话号码经过程序变成一串乱码,老周总该认不出来了吧?可老周只是掏出一本“常见号码字典”,逐个试了一遍,三分钟就把乱码翻译回了原号——原来这所谓的“加密”,就是把号码放进一个固定公式里折腾一下,换汤不换药。

真实世界里翻车的是美国处方药优惠平台 GoodRx。它在隐私政策里承诺“绝不向广告商出售健康信息”,实际上却把用户用药信息与“哈希处理过的邮箱”一起,通过 SDK 悄悄传给了 Facebook、Google 等广告平台。GoodRx 以为自己做了“去标识化”,但哈希(hash)是确定性函数:同一个输入永远得到同一个输出,而邮箱、手机号空间小得可以用字典穷举。

2023 年 2 月,美国 FTC 对 GoodRx 开出 150 万美元罚单——这是《健康数据泄露通知规则》下的首例执法。罚款之外更重的处罚是:永久禁止 GoodRx 将健康数据用于广告。监管部门的态度很明确:用一个可逆的“假马赛克”冒充匿名化,等于没打码。

E∗={e∈C:h(e)=hleak},∣E∗∣=1⇒e 被还原\displaystyle \mathcal{E}^* = \{ e \in \mathcal{C} : h(e) = h_{\text{leak}} \}, \quad |\mathcal{E}^*| = 1 \Rightarrow e \text{ 被还原}

1. 构造候选字典:$\mathcal{C}$ 是攻击者枚举出的所有可能邮箱、手机号集合,真实数据往往都在其中。

C\displaystyle \mathcal{C}

2. 逐个哈希比对:$h(e)$ 是对候选 $e$ 做哈希的结果,与泄露值 $h_{\text{leak}}$ 相等才算命中。

h(e)=hleak\displaystyle h(e) = h_{\text{leak}}

3. 筛选匹配集合:$\mathcal{E}^*$ 收集所有命中的候选;因为哈希一对一,通常只有一个。

E∗={e∈C:h(e)=hleak}\displaystyle \mathcal{E}^* = \{ e \in \mathcal{C} : h(e) = h_{\text{leak}} \}

4. 判定还原成功:$|\mathcal{E}^*| = 1$ 表示唯一命中,该邮箱原值连带其背后的健康数据就此被还原。

∣E∗∣=1\displaystyle |\mathcal{E}^*| = 1

哈希不是打码,而是一张透明贴纸:看上去遮住了字,字却原样透过纸面。老周用字典一照,“李阿姨的降糖药”立刻对上了号——这也是 GoodRx 被罚最核心的技术定性:可逆的“伪匿名”,法律不认。

MOVEit 事件:整个档案柜被搬走

物业把公告锁进了铁柜子,还贴了封条。可一个月后,隔壁“搬家公司”(其实是假冒的)上门,把整个档案柜抬上了车——因为柜门根本没锁,密码还写在柜子背面。这不是打码技术的问题,是“存放与搬运”环节出了大漏洞。

真实事件发生在 2023 年 5 月:全球企业广泛使用的文件传输软件 MOVEit Transfer 被 Cl0p 勒索团伙利用 SQL 注入零日漏洞(CVE-2023-34362)攻破。黑客绕过了身份认证,直接从数据库拖走海量文件——包括大量医疗机构互传的患者数据、企业 HR 数据。BBC、英国航空、美国能源部等全球数千家机构相继中招,受影响人数以千万计。

MOVEit 事件的本质是供应链攻击:大多数机构不是自己被打,而是“队友”被打。更值得警惕的是:很多机构把“去标识化数据”、“原始身份表”、“加密密钥”存在同一套传输系统里,一旦文件传输通道被攻破,所有保护瞬间归零——保险柜再结实,也架不住钥匙和档案一起被搬走。

Rtotal=∑i=1mri\displaystyle R_{\text{total}} = \sum_{i=1}^{m} r_i

1. 枚举受害机构:$i$ 从 1 到 $m$ 遍历所有被攻破的机构,$m$ 代表受影响的机构总数。

i=1,2,…,m\displaystyle i = 1, 2, \dots, m

2. 累计单点损失:$r_i$ 是第 $i$ 家机构泄露的记录条数,单条记录可能同时包含身份与健康信息。

ri\displaystyle r_i

3. 求和得总损失:总泄露记录数等于所有机构损失之和,$m$ 越大、每家的 $r_i$ 越大,灾难越不可控。

Rtotal=∑i=1mri\displaystyle R_{\text{total}} = \sum_{i=1}^{m} r_i

老周的终极武器不是破解打码,而是“把整个档案柜搬走”。数据安全不能只盯着“打码技术”本身,加密存储、传输通道、密钥管理、供应商审查——任何一个环节掉链子,前面所有隐私功夫都可能付之东流。

法规与合规:给“打码”定规矩

小区所在的“医疗数据公约”其实早有章程:公告可以贴,但打码到什么程度、能留哪些字段、贴多久必须撤下、谁有资格查看,都写得明明白白。物业以前是“自由发挥”,现在才发现规矩比想象中严得多。

美国 HIPAA 规定:按“安全港”规则去掉 18 类标识符的数据视为去标识化,此后不再受 HIPAA 隐私条款约束。但注意——GoodRx 翻车正是栽在“伪去标识化+欺骗性承诺”上,FTC 依据《健康数据泄露通知规则》照样重罚。欧盟 GDPR 更严格:任何“假名化”数据仍属于个人数据,只有达到“不可逆匿名”才脱出监管,判定标准要看攻击者“合理可能使用的手段”。中国《个人信息保护法》则把去标识化定位为安全措施,不是免责金牌。

三地法规口径不同,但内核一致:法规不看你嘴上说“我打码了”,而看数据在现实攻击下是否真的无法还原。跨机构共享、跨境传输、外包加工,每个环节都要单独做风险评估,并保留最小必要的字段——能不给的坚决不给。

Pr⁡[重识别成功]≤θ⇒可视为匿名\displaystyle \Pr[\text{重识别成功}] \le \theta \Rightarrow \text{可视为匿名}

1. 定义风险概率:$\Pr[\text{重识别成功}]$ 是在现有技术、数据可得性和攻击手段下,攻击者成功还原身份的概率。

Pr⁡[重识别成功]\displaystyle \Pr[\text{重识别成功}]

2. 设立阈值:$\theta$ 是法规或行业认可的可接受风险上限,如差分隐私中的隐私预算对应。

θ\displaystyle \theta

3. 比较判定:当风险概率不高于阈值时,数据才被法律视为匿名;否则只是假名化或去标识化,仍受监管。

Pr⁡[重识别成功]≤θ\displaystyle \Pr[\text{重识别成功}] \le \theta

公约不关心物业多努力地涂黑,只看老周的三板斧还能不能奏效。法规的本质,是把“攻击者视角”写进条款——你防不住侦探,就要承担后果。

安全防护实践:让侦探无处下手

物业终于学聪明了:公告只发布统计结论,比如“城东片区 40-49 岁慢性病患病率 12%”;各楼栋数据合并展示;凡发现有人蹲点抄录立刻广播预警;还定期检查公告栏有没有被撕开的新口子。

把这些动作翻译成工程语言,就是四道防线。隐私设计(Privacy by Design):在系统架构期就嵌入去标识化,而非上线后补救;风险评估:发布前用 k-匿名与唯一性扫描,计算重识别概率;应急响应:定好泄露后的报告时限与通知模板(如 GDPR 的 72 小时);持续监测:部署蜜罐记录(诱饵数据)和数字水印,追溯泄露源头。

其中最硬核的技术是差分隐私(differential privacy):不再试图把数据“变模糊”,而是直接在统计结果里注入可控噪声。噪声的尺度由“敏感度”和“隐私预算 ε”决定——ε 越小,单个人的信息越难从结果中被推断,哪怕攻击者手握再多背景知识也白搭。它和 k-匿名最大的区别在于:k-匿名防链接攻击,差分隐私防一切“基于统计结果”的推断。

M(x)=f(x)+Lap(Δfε)\displaystyle M(x) = f(x) + \mathrm{Lap}\left(\frac{\Delta f}{\varepsilon}\right)

1. 定义真实查询:$f(x)$ 是要发布的统计结果,如患病人数、平均住院天数。

f(x)\displaystyle f(x)

2. 计算敏感度:$\Delta f$ 表示任意单条记录增删对结果的最大影响值,是噪声的“标尺”。

Δf\displaystyle \Delta f

3. 注入拉普拉斯噪声:$\mathrm{Lap}(\Delta f / \varepsilon)$ 生成以 0 为中心、尺度 $\Delta f / \varepsilon$ 的随机噪声;$\varepsilon$ 越小噪声越大。

Lap(Δfε)\displaystyle \mathrm{Lap}\left(\frac{\Delta f}{\varepsilon}\right)

4. 发布扰动结果:$M(x)$ 是用噪声掩盖后的发布值;攻击者无论用什么背景知识,都无法把噪声从真实值中剥离,从而无法指认个人。

M(x)\displaystyle M(x)

最终,公告栏上只剩下统计数字和一片模糊的“雾”。老周盯着公告看了半天,悻悻而归——他连李阿姨到底在不在数据里都无法确定。这,才是重识别风险的终局解法:不是把信息藏起来,而是让信息本身失去“指认”的效力。

AI 应用场景

真实世界研究数据的合规发布

阶段:数据治理与发布

解决的问题:医疗机构发布真实世界研究数据时,直接公开原始病历会泄露患者隐私;传统做法仅删姓名,仍可被链接攻击重识别。AI 驱动的去标识化管线可在发布前自动泛化、抑制、注入差分隐私噪声,并输出重识别风险评估报告。

具体案例:某三甲医院计划公开 2 万例糖尿病患者的用药疗效分析。数据团队先用 k-匿名(k=5)泛化年龄与住址,对罕见病种抑制,再用差分隐私对“并发症发生率”等统计指标注入噪声,最后用重识别攻击模拟器验证,确认风险低于阈值后才对外发布。

医疗 App 广告 SDK 合规审计(GoodRx 教训)

阶段:产品合规与数据共享

解决的问题:互联网医疗公司常通过哈希 ID 与广告平台对接以“规避”隐私问题;GoodRx 证明哈希可被字典攻击还原。合规审计用同样手法模拟攻击,在监管介入前主动发现问题。

具体案例:某互联网医疗公司审计发现其投放 SDK 把“哈希邮箱+用药标签”传给广告商后,安全团队立刻用字典攻击还原了 12% 的测试邮箱,证明存在重识别风险;随即下线该对接,改为差分隐私聚合上报,并更新隐私政策。

医疗数据跨机构传输安全加固(MOVEit 教训)

阶段:MLOps / 数据管道

解决的问题:医疗 AI 训练数据常需跨机构传输,依赖第三方文件传输软件;MOVEit 零日漏洞暴露供应链单点故障。安全审计需识别并缓解传输链路风险。

具体案例:某医疗 AI 创业公司在部署 MOVEit Transfer 前做了供应链排查,发现其存在未修补的 CVE 后改用端到端加密 + 专用隔离通道传输数据,并对传输日志做实时异常检测,未受该事件影响。

Python 演示

python79 行
# -*- coding: utf-8 -*-"""k-anonymity and re-identification attack demo."""from collections import Counter  def anonymize(rows):    """Remove names, generalize age into 10-year ranges."""    out = []    for r in rows:        lo = (r['age'] // 10) * 10        out.append({            'age_range': '{}-{}'.format(lo, lo + 9),            'zip_prefix': r['zip'][:3],            'disease': r['disease'],        })    return out  def linkage_attack(anon_rows, public_rows):    """Join on quasi-identifiers, return matched public names."""    hits = 0    for a in anon_rows:        for p in public_rows:            if a['age_range'] == p['age_range'] and a['zip_prefix'] == p['zip_prefix']:                hits += 1                print('Re-identified: {} -> disease {}'.format(p['name'], a['disease']))    return hits  def check_k_anonymity(anon_rows, k):    """Every equivalence class must contain at least k records."""    groups = {}    for a in anon_rows:        key = (a['age_range'], a['zip_prefix'])        groups.setdefault(key, []).append(a)    weak = [key for key, recs in groups.items() if len(recs) < k]    return len(weak) == 0, groups  def strengthen(anon_rows):    """Further generalize zip prefix and suppress rare diseases."""    for r in anon_rows:        r['zip_prefix'] = r['zip_prefix'][:2]    cnt = Counter(r['disease'] for r in anon_rows)    for r in anon_rows:        if cnt[r['disease']] < 2:            r['disease'] = '*'    return anon_rows  def main():    patients = [        {'name': 'Zhang Wei', 'age': 42, 'zip': '100010', 'disease': 'asthma'},        {'name': 'Li Na', 'age': 35, 'zip': '100020', 'disease': 'diabetes'},        {'name': 'Wang Qiang', 'age': 58, 'zip': '200030', 'disease': 'hypertension'},        {'name': 'Zhao Min', 'age': 29, 'zip': '100040', 'disease': 'gastritis'},        {'name': 'Liu Yang', 'age': 47, 'zip': '200050', 'disease': 'insomnia'},        {'name': 'Chen Jing', 'age': 63, 'zip': '200030', 'disease': 'hypertension'},    ]    public = [        {'name': 'Zhang Wei', 'age_range': '40-49', 'zip_prefix': '100'},        {'name': 'Wang Qiang', 'age_range': '50-59', 'zip_prefix': '200'},        {'name': 'Chen Jing', 'age_range': '60-69', 'zip_prefix': '200'},    ]    anon = anonymize(patients)    print('=== after de-identification ===')    for row in anon:        print(row)    hits = linkage_attack(anon, public)    print('re-identified: {} person(s)'.format(hits))    ok, groups = check_k_anonymity(anon, 2)    print('k=2 satisfied: {}, classes: {}'.format(ok, len(groups)))    anon = strengthen(anon)    hits2 = linkage_attack(anon, public)    print('after strengthening, re-identified: {} person(s)'.format(hits2))  if __name__ == '__main__':    main()
目的:演示“删姓名 ≠ 安全”,用链接攻击还原匿名数据中的身份,再用泛化与抑制达到 k-匿名、阻断攻击。
  1. lo = (r['age'] // 10) * 10泛化核心:把年龄下取整到十位,如 42 变成 40。
  2. 'zip_prefix': r['zip'][:3]邮编只保留前三位,作为准标识符参与分组。
  3. key = (a['age_range'], a['zip_prefix'])用准标识符组合构造“等价类”分组键。
  4. groups.setdefault(key, []).append(a)把记录分桶,为 k-匿名检查做准备。
  5. weak = [key for key, recs in groups.items() if len(recs) < k]找出记录数不足 k 的桶,这些桶有重识别风险。
  6. r['zip_prefix'] = r['zip_prefix'][:2]把邮编前缀从三位再扩成两位,让更多记录落入同一桶。
  7. if cnt[r['disease']] < 2:抑制只出现过一次的稀有疾病值,防止疾病成为指认线索。

常见误区

误区我把姓名、身份证、手机号都删了,剩下的年龄、城市、职业应该没问题了吧?用户隐私已经保护得很好了。

正解年龄+城市+职业等准标识符组合唯一时,照样能锁定个人。Sweeney 用邮编+出生日期+性别识别了州长;上面的代码演示里,6 条记录通过链接攻击就能重识别 3 人。去标识化要按“攻击者手里有什么”来评估,而不是按“我删了什么”来自我安慰。

为何常见:人们天然认为“名字就是身份”,忽略了身份线索的多源组合性,也就是马赛克效应。

误区我们把邮箱做 SHA256 哈希再共享,哈希不能反解出原文,这总算是匿名化了吧?

正解哈希是确定性函数而非加密;邮箱、手机号空间小,字典攻击加彩虹表可快速还原,GoodRx 因此被 FTC 罚 150 万美元。要防止还原必须加随机盐并配合慢哈希,更稳妥的做法是直接不共享原始标识符,改用差分隐私聚合统计。

为何常见:把“不可读”误当“不可逆”,混淆了加密(可解密)与哈希(确定性映射)在隐私场景下的本质区别。

误区数据库和备份都加密了,用 MOVEit 传文件时应该也安全吧?反正数据文件本身有保护。

正解MOVEit 零日漏洞导致整个数据库被“连锅端”,如果传输过程未加密、密钥与数据同系统存放,前面所有加密形同虚设。传输链路、第三方软件供应链、日志泄露都是独立攻击面,必须分层设防并保证密钥与数据分离。

为何常见:只关注“静态数据”安全,忽略“动态传输+供应链”这一最大盲区。

误区我们在隐私政策里写了“不会共享个人信息”,法务也审核过,应该不会被告。

正解监管看实质不看声明。GoodRx 隐私政策写得很漂亮,却偷偷共享可重识别的哈希 ID 与健康标签,照样被 FTC 重罚并永久禁止广告用途。合规要落到技术验证:实际模拟攻击、追踪 SDK 真实数据流、对第三方共享清单逐条审计。

为何常见:把“纸面合规”等同于“实质合规”,忽视工程实现与法律承诺的一致性。

面试题

Q1. 下列哪项属于直接标识符?

单选题 · easy

  • A.姓名← 正确答案
  • B.年龄
  • C.职业
  • D.城市

答案:A。直接标识符能独立指向个人,姓名、身份证号、手机号都属于这一类。年龄、职业、城市单独看无害,属于间接标识符,就像公告上老周用来拼图的“楼栋+宠物”。

Q2. 去标识化与匿名化的核心区别是?

单选题 · mid

  • A.数据是否被彻底删除
  • B.重识别风险是否可控← 正确答案
  • C.模型是否经过验证
  • D.法律是否认定合规

答案:B。去标识化只是降低重识别风险,理论上仍可被还原;匿名化则要求在“合理可能的手段”下无法还原。GoodRx 的教训正是把去标识化当成了匿名化——哈希邮箱可逆,风险不可控。

Q3. Sweeney 研究表明,仅靠哪三项组合即可锁定约 87% 的美国人?

单选题 · easy

  • A.邮编出生日期性别← 正确答案
  • B.姓名电话家庭住址
  • C.职业收入教育程度
  • D.血型身高体重指数

答案:A。邮编+出生日期+性别是经典的准标识符组合。它们单独无害,组合后唯一性极高——这正是马赛克效应的实证,也是链接攻击能成功的数据基础。

Q4. 链接攻击成功通常需要哪些条件?

多选题 · mid

  • A.两表存在公共准标识符← 正确答案
  • B.准标识符组合足够唯一← 正确答案
  • C.两张表来自同一机构
  • D.数据集中包含完整姓名

答案:AB。链接攻击靠公共准标识符把匿名表与外部表拼起来,组合越唯一越容易锁定个人;两表往往来自不同来源,匿名表中也不含姓名,C、D 不是必要条件。

Q5. GoodRx 被 FTC 处罚的根本原因是?

单选题 · mid

  • A.私下共享可重识别健康数据← 正确答案
  • B.未向用户提供足够优惠券
  • C.未安装防火墙等安全设备
  • D.未经授权收集用户基因数据

答案:A。GoodRx 承诺不出售健康信息,却通过可字典还原的哈希邮箱把用药标签共享给广告平台。问题不在“没装防火墙”,而在“假打码+欺骗性承诺”,属于实质上的隐私造假。

Q6. MOVEit 数据泄露事件的主要攻击途径是?

单选题 · hard

  • A.软件漏洞被勒索团伙利用← 正确答案
  • B.员工误点钓鱼邮件泄露密码
  • C.黑客物理入侵机房拷贝硬盘
  • D.用户弱口令被暴力破解登录

答案:A。Cl0p 团伙利用 MOVEit Transfer 的 SQL 注入零日漏洞(CVE-2023-34362)批量拖库,属于软件供应链攻击。事件揭示:第三方传输工具的漏洞同样能击穿机构内部的所有隐私防护。

Q7. 以下哪些做法能提升 k-匿名性?

多选题 · hard

  • A.将年龄泛化到十年区间← 正确答案
  • B.对稀有疾病值进行抑制← 正确答案
  • C.增加每条记录的字段数量
  • D.将邮编前缀由三位扩为两位← 正确答案

答案:ABD。泛化年龄、抑制稀有值、扩大邮编粒度都能让更多记录落入同一等价类,提升桶内记录数;增加字段反而让组合更精细、桶更小,降低 k-匿名性。

Q8. 关于差分隐私机制,下列说法正确的是?

单选题 · extreme

  • A.噪声尺度与查询敏感度正相关← 正确答案
  • B.隐私预算越大注入噪声越大
  • C.差分隐私需假定攻击者无背景知识
  • D.差分隐私通过删除敏感字段实现

答案:A。拉普拉斯机制的噪声尺度为 Δf/ε,与敏感度正相关、与隐私预算 ε 成反比——B 说反了。差分隐私的强项恰是不依赖攻击者背景知识,C 错;它靠加噪声而非删字段,D 错。

Q9. 马赛克效应的核心含义是?

单选题 · easy

  • A.多源低敏信息拼出完整隐私← 正确答案
  • B.单条高敏记录决定整体风险
  • C.数据脱敏后即可永久公开
  • D.加密算法决定隐私保护强度

答案:A。单条“年龄”“养猫”“常取降糖药”都无害,拼在一起却能锁定李阿姨。马赛克效应提醒我们:低敏信息的组合也可能构成重识别,风险评估必须看整体而非单字段。

Q10. MOVEit 与 GoodRx 教训共同指向哪些防线?

多选题 · mid

  • A.隐私承诺必须有技术验证← 正确答案
  • B.数据转移环节需加密与审计← 正确答案
  • C.合规审计只需法务书面签字
  • D.供应链与第三方风险需排查← 正确答案

答案:ABD。GoodRx 栽在“承诺与实现不符”,MOVEit 栽在“传输与供应链失守”,两者都指向技术验证、传输加密、第三方审计;只靠法务签字不解决工程层面的隐私泄露。