跳到主要内容

隐私怎么测量 — ε、privacy loss 与 k-匿名

这一章讲三件事: 差分隐私的承诺到底承诺了什么(以及 ε 怎么读); privacy loss 怎么用「训两个模型对比」的办法实测;k-匿名的「藏进人堆」策略和它的两个已知破法。 测不了就护不住——这一章的三把尺子,是第 06–08 章所有防护技术的验收标准。

1. 先看现象:「匿名过了」的数据还是会认出人

实践中最常见的错觉:把姓名、证件号删掉,数据就「匿名」了,可以放心用了。 但一条临床记录里写着罕见遗传病+特定年龄段+小城镇——每一条都无害, 拼起来可能只剩一个人符合。书里给这类泄漏起的现象级描述是复述(regurgitation): 模型把训练数据里的原文段落一字不差地吐出来1

「感觉匿名」不行,得有能算数的定义。本章就是三个能算数的定义。

2. 顶层全景:三把尺子

问的问题 尺子 答案长什么样
───────── ──── ────────────
「你在不在数据集里, 差分隐私(DP) 一个数 ε:越大越不隐私
别人能从输出里看出来吗?」
「这一条输出,泄漏了 privacy loss 一个对数比值:越接近 0 越好
多少关于你的信息?」
「每条记录能藏进多大的 k-匿名 一个整数 k:至少 k 人不可区分
人群里?」

图说:三把尺子量的是三件事,不互相替代。DP 最严格,k-匿名最直观,privacy loss 最细。

3. 第一把尺子:差分隐私

走查:一块披萨,加噪之后报多少

书里用派对披萨打比方:有人问「谁吃了最后一块披萨?」差分隐私让你能如实回答 「有人吃了」,却不指认是谁2。走到数字上——这是本章的主走查,书中原始代码场景:

真实值 true_value = 1000 块披萨(确实被吃了 1000 块)
敏感度 sensitivity = 1 (任何一个人加进来或拿走,答案最多变 1——因为设定每人最多吃一块)
隐私预算 ε = 0.1 (书里选的「今天心情比较注重隐私」值)

Laplace 机制:输出 = 真实值 + 从 Laplace 分布抽的噪声,噪声的尺度 = 敏感度/ε = 1/0.1 = 10

结果:报出去的数在 1000 附近抖动(这次可能是 996,下次 1008)。
一个人吃没吃披萨,对「报出去的数」的影响,被噪声淹没了。
(这些数是书中代码示例的原始数值;单次输出值是随机的。)

为什么有效:把任何一个人的数据加进或拿出数据集,各种输出出现的可能性几乎不变 ——数学上写作「相差一个元素的相邻数据集,输出可能性之比不超过 e^ε」3怎么读 ε:ε 是隐私预算,越小越隐私;书里给的量级是 ε<1 算强隐私, ε≈10 就比较弱4

三个立刻要记住的性质:

  • 可组合:跑两次 ε=0.5 的查询,总泄漏约等于 ε=1——预算是累加的,花完就没5;
  • 记账在升级:现代实现用 Rényi DP 或 moments accountant 这类高级记账法, 比「简单相加」算出的界更紧6;
  • 尺度可调:Laplace 之外还有高斯噪声;训练 LLM 时对梯度加噪的版本叫 DP-SGD, 是第 06 章的主角7

代价:小 ε 会把答案毁掉

噪声不是白来的。书里明说:小 ε 时 Laplace 噪声可能大到让数据失去可用性8。 原文的形容是——噪声太大,你那台会背莎士比亚的模型会开始像「喝多了的数字酒鬼」9隐私-效用的权衡从这一章起贯穿全书。

4. 第二把尺子:privacy loss

DP 的 ε 是个「承诺上限」;privacy loss 是对单次输出实际泄漏量的细粒度测量: 它算的是「含某人数据时得到这个输出的可能性」与「不含时」之比,再取对数(把倍数差变成好加减的数)10。 比值越接近 1(对数越接近 0),这条输出越没有泄漏。

**怎么实测?**书里给了可操作的四步(这是全书方法论里最实在的一段)11:

① 训两个模型:一个含敏感数据,一个不含
② 拿同一个输入分别查询两个模型
③ 统计各自输出某结果的概率(prob_with 与 prob_without)
④ 算对数比值,多次查询取平均

书里的数值演示:prob_with = 0.7,prob_without = 0.6,privacy loss = |ln(0.7/0.6)| ≈ 0.1542—— 不算小,说明这个输出对「某人在不在」是有反应的12。 书里配的用例直接对症:两个模型,一个在敏感病历上微调过、一个没有, 拿「The patient's prescribed medication is」这样的半句话去探,量两个模型的回答差多少13

它还是个探测器:训练中和上线后持续监控 privacy loss, 某些输入上的值持续偏高,说明模型把那些训练样本记得太牢——那是提取攻击最喜欢的入口14

5. 第三把尺子:k-匿名

走查:四个人,2-匿名

k-匿名的承诺:每条记录在准标识符(能拼起来认人的属性组合,如年龄+邮编)上, 至少和另外 k−1 条记录不可区分——「藏进人堆」15。 书的代码例子走一遍:

数据集(4 人,属性:年龄 / 邮编 / 病症):
(30, 12345, 流感) (30, 12345, 感冒)
(40, 23456, 发烧) (40, 23456, 咳嗽)
按准标识符 (年龄, 邮编) 分组:
组 A:{30,12345} 有 2 人;组 B:{40,23456} 有 2 人
最小的组是 2 → 这个数据集只有 2-匿名

图说:书里原话——「真实场景里我们会要求大得多的 k」。
(示例数值来自书中代码,真实部署的 k 通常是几百上千。)

两个已知的破法(书里明说的)

  • 同质性攻击:如果某组 k 个人病症全相同——藏进人堆也没用,病一猜就中;
  • 背景知识攻击:攻击者手上有外部信息,在组内仍能锁定个人16

补丁是加两道更严的约束:l-diversity(每组内敏感属性至少要有 l 个不同值, 专治同质性)和 t-closeness(每组内的敏感属性分布要接近整体分布)17。 书里的实践口径:大规模动态场景偏好差分隐私(它能扛成员推断这类攻击), 静态数据集用 k-匿名+l-diversity 组合就够18

搬到 LLM 上的三种用法

书里给的语言版本:①微调数据里,任何独特短语都要在至少 k 篇文档里出现过; ②RAG 检索库做「文档级 k-匿名」——独一份的机密文档不许入库; ③数据策展时把罕见词替换成常见词(保住语义——意思相近)19

6. 三把尺子搬进 RAG

RAG 的多段架构(第 03 章讲过)让隐私风险有了新形态:向量库里的嵌入可被用来重建文档; 「哪些文档总被一起检索」能反推查询意图;引用来源会暴露机密文档—— 书里提到已有 RAG 系统因此泄漏过 API 密钥与许可证信息20

三把尺子各有对应动作:

尺子在 RAG 里的动作
DP建嵌入时加校准噪声(私有嵌入);检索时不用精确 top-k,改按相似度加权随机抽样(检索混淆);查询嵌入加噪(查询扰动)21
privacy loss对检索模式本身测泄漏:哪些文档总一起出现
k-匿名文档级 k-匿名:没有 k 篇相似文档的独苗不入库22

判断(我们的,不是书里的): 「检索混淆」是这三招里最耐人寻味的—— 它主动放弃一点检索质量换取「攻击者分不清哪篇才是真的 top-1」。 这等于承认:在 RAG 架构里,你的查询行为本身就是隐私,光保护文档不够。 如果错,会错在: 如果实际攻击者拿不到检索日志(系统记录的「谁查了什么」)、只能看到最终回答, 那检索混淆防的就是一个不存在的对手,牺牲检索质量就白付了。

7. 作者的判断与证据

书里给了数学定义和可跑代码的:DP 公式、Laplace 机制、privacy loss 四步法、 k-匿名实现,全部带代码——这一章是全书「可操作性」最高的一章。

作者的判断:「现代大规模场景偏好 DP 而非 k-匿名」是作者给的实践口径, 理由(抗成员推断)成立,但书里没有给两种方案在同一数据集上的对比实验。

8. 边界与局限

  • ε 的「多少算安全」没有共识,书里只给了量级带(ε<1 强,≈10 弱), 「选 0.1 还是 1」仍然是个业务判断;
  • privacy loss 的两模型对照法代价高(要训两个模型),书里没讨论成本;
  • k-匿名在维度——数据的列数——一高时就失效:「k 人一组」找不齐, 书里只提了一句,没有展开解法;
  • RAG 隐私三招(私有嵌入/检索混淆/查询扰动)都停在方案描述,没有用数字做的评测。

9. 可带走的

  1. 隐私要测量,不要感觉:三把尺子——DP 的 ε、privacy loss、k-匿名的 k;
  2. DP 承诺的是「你在不在,输出几乎不变」;ε 越小越隐私,预算会累加、花完就没;
  3. Laplace 机制的噪声尺度 = 敏感度/ε:敏感度越低、预算越足,噪声越小;
  4. privacy loss 实测法:训两个模型对比同一输入的输出概率(各种输出各有多大机会);
  5. privacy loss 偏高的输入 = 模型记得太牢的样本 = 提取攻击的入口;
  6. k-匿名防的是「拼图认人」,但同质性与背景知识两个攻击要靠 l-diversity / t-closeness 补;
  7. 独特短语要出现在 ≥k 篇文档;独苗机密文档不该进 RAG 库;
  8. RAG 里「查询行为」也是隐私:检索混淆用少量质量换可否认性;
  9. 隐私-效用权衡从这一章起贯穿全书:噪声是拿性能付的账。

10. 原文地图

主题原书章原文位置
复述与 system prompt 泄漏Privacy Metricstext/13-fm-privacy-metrics.txt:17(搜「reproduce verbatim passages」)
披萨比喻与 DP 定义Differential Privacytext/14-fm-differential-privacy.txt:5(搜「last slice of pizza」) · text/14-fm-differential-privacy.txt:9(搜「differ by at most one element」)
ε 量级带Differential Privacytext/14-fm-differential-privacy.txt:15(搜「privacy budget」)
可组合性Differential Privacytext/14-fm-differential-privacy.txt:56(搜「composable」)
RDP 与 moments accountantDifferential Privacytext/14-fm-differential-privacy.txt:59(搜「Rényi」)
Laplace 机制与披萨数字Differential Privacytext/14-fm-differential-privacy.txt:79(搜「sensitivity」) · text/14-fm-differential-privacy.txt:85(搜「1000」)
DP-SGD 首次点名Differential Privacytext/14-fm-differential-privacy.txt:101(搜「DP-SGD」)
小 ε 的效用代价Differential Privacytext/14-fm-differential-privacy.txt:103(搜「Shakespeare」)
privacy loss 定义Privacy Losstext/15-fm-privacy-loss.txt:13(搜「log」)
两模型对照法Privacy Losstext/15-fm-privacy-loss.txt:56(搜「Train two versions」)
0.1542Privacy Losstext/15-fm-privacy-loss.txt:42(搜「0.1542」)
病历用例Privacy Losstext/15-fm-privacy-loss.txt:92(搜「medical records」)
高 loss = 记太牢Privacy Losstext/15-fm-privacy-loss.txt:110(搜「extraction attacks」)
k-匿名定义k-anonymitytext/16-fm-k-anonymity.txt:3(搜「safety in numbers」)
2-匿名例子k-anonymitytext/16-fm-k-anonymity.txt:39(搜「2-anonymity」)
两个攻击与补丁k-anonymitytext/16-fm-k-anonymity.txt:61(搜「homogeneity」) · text/16-fm-k-anonymity.txt:68(搜「l-diversity」)
LLM 三用法k-anonymitytext/16-fm-k-anonymity.txt:51(搜「k different documents」) · text/16-fm-k-anonymity.txt:53(搜「k-anonymity」)
RAG 三风险与 API key 案例Privacy Considerations in RAG Systemstext/17-fm-privacy-considerations-in-rag-systems.txt:19(搜「API keys」)
三招缓解Privacy Considerations in RAG Systemstext/17-fm-privacy-considerations-in-rag-systems.txt:25(搜「private embeddings」) · text/17-fm-privacy-considerations-in-rag-systems.txt:27(搜「retrieval obfuscation」) · text/17-fm-privacy-considerations-in-rag-systems.txt:29(搜「query perturbation」)

Footnotes

  1. 出处:「Privacy Metrics」第 17 段(text/13-fm-privacy-metrics.txt:17,搜「reproduce verbatim passages」)。同段还点名了 system prompt 泄漏:用户用 prompt 套出模型的内置指令。

  2. 出处:「Differential Privacy」第 5 段(text/14-fm-differential-privacy.txt:5,搜「last slice of pizza」)。

  3. 出处:「Differential Privacy」第 9 段(text/14-fm-differential-privacy.txt:9,搜「differ by at most one element」)。公式:P(M(D1)∈S) ≤ exp(ε)·P(M(D2)∈S)。

  4. 出处:「Differential Privacy」第 15 段(text/14-fm-differential-privacy.txt:15,搜「privacy budget」)。

  5. 出处:「Differential Privacy」第 56 段(text/14-fm-differential-privacy.txt:56,搜「composable」)。

  6. 出处:「Differential Privacy」第 59 段(text/14-fm-differential-privacy.txt:59,搜「Rényi」)。

  7. 出处:「Differential Privacy」第 61 段(text/14-fm-differential-privacy.txt:61,搜「Laplace or Gaussian」)与第 101 段(text/14-fm-differential-privacy.txt:101,搜「DP-SGD」)。

  8. 出处:「Differential Privacy」第 99 段(text/14-fm-differential-privacy.txt:99,搜「excessive」)。

  9. 出处:「Differential Privacy」第 103 段(text/14-fm-differential-privacy.txt:103,搜「Shakespeare」)。

  10. 出处:「Privacy Loss」第 13 段(text/15-fm-privacy-loss.txt:13,搜「log」)。privacy loss 本质上就是 DP 里那个对数似然比,ε 是它的界。

  11. 出处:「Privacy Loss」第 56 段(text/15-fm-privacy-loss.txt:56,搜「Train two versions」)。

  12. 出处:「Privacy Loss」第 42 段(text/15-fm-privacy-loss.txt:42,搜「0.1542」)。

  13. 出处:「Privacy Loss」第 92 段(text/15-fm-privacy-loss.txt:92,搜「medical records」)。

  14. 出处:「Privacy Loss」第 110 段(text/15-fm-privacy-loss.txt:110,搜「extraction attacks」)。

  15. 出处:「k-anonymity」第 3 段(text/16-fm-k-anonymity.txt:3,搜「safety in numbers」)。

  16. 出处:「k-anonymity」第 61 段(text/16-fm-k-anonymity.txt:61,搜「homogeneity」)与第 63 段(搜「background knowledge」)。

  17. 出处:「k-anonymity」第 68 段(text/16-fm-k-anonymity.txt:68,搜「l-diversity」)与第 73 段(搜「t-closeness」)。

  18. 出处:「k-anonymity」第 78 段(text/16-fm-k-anonymity.txt:78,搜「membership inference」)。

  19. 出处:「k-anonymity」第 51 段(text/16-fm-k-anonymity.txt:51,搜「k different documents」)与第 53 段(text/16-fm-k-anonymity.txt:53,搜「retrieved documents must maintain」)。

  20. 出处:「Privacy Considerations in RAG Systems」第 19 段(text/17-fm-privacy-considerations-in-rag-systems.txt:19,搜「API keys」)。

  21. 出处:「Privacy Considerations in RAG Systems」第 25 段(text/17-fm-privacy-considerations-in-rag-systems.txt:25,搜「private embeddings」)、第 27 段(text/17-fm-privacy-considerations-in-rag-systems.txt:27,搜「retrieval obfuscation」)、第 29 段(text/17-fm-privacy-considerations-in-rag-systems.txt:29,搜「query perturbation」)。

  22. 出处:「Privacy Considerations in RAG Systems」第 23 段(text/17-fm-privacy-considerations-in-rag-systems.txt:23,搜「document k-anonymity」)。