想象你是一名刚入学的大学新生,辅导员递给你一张饭卡:“以后你在食堂的每一笔消费,都会变成一条流水记录。”你打一份红烧肉,刷卡机“嘀”一声,余额少了 15 元;三天后你发现余额告急,翻看流水才发现奶茶喝得太勤。这张卡背后的逻辑,正是隐私计算里“隐私账本机制与预算管理”的缩影。在数据的世界里,每一份敏感数据就像一桌饭菜,AI 系统每次查询数据都相当于刷一次卡,消耗的不是人民币,而是一种名为“隐私预算(ε)”的宝贵额度;而记录每一笔查询的账本,就是隐私账本。它决定了谁能在何时查询多少数据、每次查询要付出多大的“隐私代价”、余额耗尽后系统如何熔断,以及审计人员如何通过流水追溯责任。本文用这张饭卡贯穿始终,带你从零理解差分隐私中最具工程价值的一环。

岗位关联

对 AI 从业者而言,隐私账本是把差分隐私从论文落到生产系统的“记账中枢”;掌握它,你才能在数据产品上线时自信地回答审计与合规的拷问,护住用户信任这道真正的底线。

目录
  1. 可视化演示
  2. 账本核心概念
  3. 差分隐私基础
  4. 隐私预算机制
  5. 记账流程规范
  6. 预算消耗策略
  7. 账本审计合规
  8. 工程落地实践
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示隐私账本记录查询消耗epsilon的流程、预算分配策略与顺序/并行组合定理的累计消耗对比。

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

隐私账本查询消耗流程 每次查询消耗epsilon并记入账本累计值 预算耗尽时拒绝查询保护隐私不被突破 Σε≤B 累计消耗不超过总预算上限

账本核心概念

小陈的饭卡流水单上写着:7:50 豆浆加油条 4.5 元;12:10 红烧肉套餐 15 元;18:30 麻辣烫 18 元。流水单本身不是目的,食堂靠它控制亏损、发现盗刷、安排备菜。隐私账本(Privacy Ledger)就是数据世界的饭卡流水单,它专门记录“谁、在什么时间、用多少隐私预算、查询了什么数据”。

在差分隐私体系里,隐私账本不只是审计用的日志,更是预算管理的大脑。差分隐私(Differential Privacy)是一种数学化的隐私保护定义,它通过在查询结果中加入随机噪声,让攻击者无法判断某条具体记录是否存在于数据集中。而每次加噪声都要消耗一份名为 ε 的隐私预算,账本则负责回答三个问题:预算还剩多少?这笔查询该不该放行?出了问题该找谁?

账本的记账原理很简单:每次查询前读账本算余额,查询后追加一条记录,记录包含查询 ID、查询者身份、时间戳、数据集版本、查询类型、消耗的 ε 值、噪声尺度以及输出结果的哈希值。这个模式的发展脉络也很有代表性:2006 年 Dwork 等人提出差分隐私后,Google 在众包词频统计系统 RAPPOR 中首次大规模实践了隐私账本思想;随后 OpenDP、Google 差分隐私库等框架把账本沉淀为开箱即用的标准组件。

账本的核心价值可以概括为四句话:可审计,每一笔消耗都能追溯;可控制,余额不足自动拒绝;可证明,累计泄露不超过承诺上限;可问责,出事后能精准定位责任方。就像食堂财务室从流水单里看出“麻辣烫档口最近卖太疯要补货”,数据团队也能从账本中发现“某个查询账户预算即将耗尽,需要熔断或审批”,这就是账本作为控制中枢的意义。

差分隐私基础

为什么食堂师傅打菜总要“抖勺”?因为要把每份菜的重量控制在差不多的范围,让单份菜的“特殊之处”难以辨认。差分隐私在查询结果上添加随机噪声,就是数据世界的“抖勺”——通过让输出结果带上扰动,使攻击者无法通过对比两次查询的细微差异,反推出某个具体用户的记录。

差分隐私的数学保证是:无论某条记录在不在数据集里,查询结果的概率分布都不会发生显著变化。这里有一个核心概念叫“相邻数据集”——两个数据集仅相差一条记录。下面这个公式就是差分隐私的正式定义,它限制了“同一输出在相邻数据集上出现概率的比值”。

除了 ε,另一个关键参数是敏感度(Sensitivity)。它刻画“单条记录最大能撬动多少查询结果”,直接决定噪声要加多大。可以用下面这个公式来度量:

回到“抖勺”的比喻:菜价差(敏感度)越大的窗口,师傅抖得越狠;而 ε 越小,说明食堂对“重量一致”的要求越苛刻,抖动幅度也得更大。差分隐私的全部工程细节,本质上都是在平衡“抖动力度”与“数据可用性”这对矛盾。

Pr⁡[M(D)∈S]≤eε×Pr⁡[M(D′)∈S]\Pr[\mathcal{M}(D) \in S] \le e^{\varepsilon} \times \Pr[\mathcal{M}(D') \in S]
敏感度就是遍历所有相邻数据集对,找出查询结果差异的最大值;差异越大,说明单条记录越“显眼”,越需要大噪声来掩护。
  1. 查询函数 f把数据集映射为数值向量的聚合操作,比如求和、均值、直方图统计,是噪声注入的对象。
    f(D)f(D)
  2. 相邻数据集对遍历枚举所有仅差一条记录的数据集对,在全部候选对中寻找结果变化最大的情况。
    max⁡D≃D′\max_{D \simeq D'}
  3. L1 距离度量两个结果向量各分量差绝对值的总和,衡量单条记录的“最大影响力”,是设置噪声尺度的依据。
    Δf=∑j∣f(D)j−f(D′)j∣\Delta f = \sum_j \left| f(D)_j - f(D')_j \right|

隐私预算机制

父母每月往饭卡里充 300 元。这个额度怎么定?定高了怕乱花,定低了吃不饱。隐私预算(Privacy Budget)就是数据系统的“月额度”,用 ε 表示。它是数据所有者对外做出的安全承诺:整个系统在一段时间内累计泄露的隐私,不超过 e^ε 这个上限。

预算机制的核心是“花钱买噪声”。每次查询时,系统从总预算中扣除一部分 ε,同时用这个 ε 决定噪声大小。最经典的实现是拉普拉斯机制(Laplace Mechanism),它把真实结果加上一个服从拉普拉斯分布的随机数。“拉普拉斯分布”可以理解为一种尖峰厚尾的概率分布:噪声大多集中在 0 附近,偶尔出现较大的偏离值。公式如下:

预算还需要精细分配。系统会把总预算切分成多份:研究型查询 40%、运营型查询 30%、临时型查询 30%,并给每个账户设单独上限,防止单一查询方透支全部额度。预算上限通常会写进数据使用协议,成为法律层面的承诺。就像父母给饭卡设了“单日消费不超过 50 元”的规则,既保证你饿不着,也防止你一天花光一个月的生活费。

M(D)=f(D)+Lap ⁣(Δfε)\mathcal{M}(D) = f(D) + \mathrm{Lap}\!\left(\frac{\Delta f}{\varepsilon}\right)
拉普拉斯机制就是在真实查询结果上叠加一层尺度为 Δf/ε 的随机扰动;ε 越小,扰动越猛,隐私保护越强,结果也越失真。
  1. 真实聚合结果 f(D)不加噪声时查询会返回的原始统计值,也是攻击者最想拿到、最需要保护的“菜价底账”。
    f(D)f(D)
  2. 拉普拉斯噪声项以 0 为中心、两侧指数衰减的随机数,既能让攻击者猜不准,又不会把统计结果彻底毁掉。
    Lap(λ),概率密度=12λe−∣x∣/λ\mathrm{Lap}(\lambda),\quad \text{概率密度} = \frac{1}{2\lambda} e^{-|x|/\lambda}
  3. 尺度参数与预算的关系λ = Δf/ε,敏感度越大或预算越紧,噪声尺度越大,单条记录的影响力被掩盖得越彻底。
    λ=Δfε\lambda = \frac{\Delta f}{\varepsilon}
  4. 机制的整体输出把真实值“蒙上一层雾”后再交给查询方,用户拿到的是带抖动的统计量,而非精确值。
    M(D)=f(D)+Lap(Δf/ε)\mathcal{M}(D) = f(D) + \mathrm{Lap}(\Delta f / \varepsilon)

记账流程规范

一次标准刷卡要经历五步:亮卡、点菜、扣款、打菜、出小票。数据查询同样如此,隐私账本的记账流程也可以拆成五个环节。每一步都像食堂收银流程一样有章可循,缺一步就会出乱子。

1. 身份认证:确认查询者身份与权限。只有授权的研究者、分析师才能发起查询,相当于刷卡前先验证是不是本人持卡。

2. 查询登记:把查询内容登记为账本候选记录,包括查询的字段、条件和目的,相当于点菜时收银员先记下菜名。

3. 预算校验:翻开账本核对当前余额,判断本次查询要消耗的 ε 是否足够。余额不足直接拒绝,相当于收银机提示“余额不足,请充值”。

4. 噪声添加:按本次查询的 ε 和敏感度计算噪声尺度,把随机扰动注入真实结果,相当于师傅按标准抖勺后装盘。

5. 结果输出与日志留存:返回加噪结果,同时把整笔查询追加进账本流水,生成不可抵赖的记录,相当于出小票并存底账。

日志留存环节最考验工程功底。账本记录字段包括:查询 ID、查询者、时间戳、数据集版本、查询类型、消耗 ε、噪声尺度、输出哈希。为了防止账本被篡改,工程上常用哈希链:每条记录的哈希值都包含上一条记录的哈希,改掉中间任何一笔,整条链都会断裂——这就像食堂的“收银机底账”,一旦生成就撕不掉、改不了。

预算消耗策略

精打细算的学生很快会发现:连续三个窗口各点一份 10 元的菜,总共要花 30 元;但如果食堂推出“套餐一口价 25 元”,花得更少。组合查询也存在类似的“账单算法”,这就是差分隐私的组合定理。

顺序组合(Sequential Composition)针对的是“对同一份数据集连续多次查询”的场景。结论很直观:总预算等于各次查询预算的累加。就像连续点三份菜,钱一笔一笔加上去。

并行组合(Parallel Composition)则给出了另一条省钱路线:把数据集按记录切分成互不相交的块,每个块独立查询。因为任何一条记录只属于其中一个块,同一记录的泄露最多只来自那一块的预算,所以总预算取各块的最大值即可。

关于预算恢复,要特别提醒:隐私预算不像饭卡那样每月自动清零充值。已发生的“泄露”是累积的,简单重置账本会让总泄露悄悄突破承诺上限。工程上常见的恢复方式是数据更新换代——旧数据下线、新数据重新立账;或者采用预算衰减模型,对同一用户反复查询时逐步加大噪声。无论哪种方式,都必须经过审计确认累计泄露仍在承诺范围内。

εseq=∑i=1kεi\varepsilon_{\text{seq}} = \sum_{i=1}^{k} \varepsilon_i
把数据集按记录分成互不相交的 k 块分别查询,总预算只需取各块预算的最大值,而不是累加——这是工程上最常用的“省钱技巧”。
  1. 互不相交的数据分块把数据集 D 按记录切分成 k 块,保证任何个体只归属其中一块,块间没有重叠。
    D1, D2, …, DkD_1,\ D_2,\ \ldots,\ D_k
  2. 逐块查询的消耗第 i 块数据上的查询消耗 ε_i,块与块之间互不影响,相当于不同的菜互不串味。
    εi\varepsilon_i
  3. 总体取最大值由于个体只出现在一块中,总泄露不超过单块中最大的预算消耗,因此取 max 而非求和。
    εpar=max⁡1≤i≤kεi\varepsilon_{\text{par}} = \max_{1 \le i \le k} \varepsilon_i

账本审计合规

月底,食堂财务部开始查账:逐笔对照菜单价目、刷卡记录和窗口营业额,发现异常就召开发布会说明。数据系统的审计工作,流程惊人地相似,只是“对账”的对象从饭菜换成了查询与预算。

审计追踪是账本最基础的能力。审计员可以重放账本中的每一笔记录,重新计算该查询应当消耗的 ε,并与账本中登记的数值比对,验证系统有没有“偷工减料”少扣预算。合规要求层面,欧盟 GDPR 将差分隐私视为实现“数据最小化”原则的技术手段之一;中国的《个人信息保护法》要求处理敏感个人信息需进行“影响评估”,而隐私账本正是影响评估最有力的证据来源——它能证明系统确实限制了累计泄露。

风险预警与责任界定则是账本的前瞻性价值。当某个查询账户在短时间内消耗掉 80% 的预算,账本会触发熔断与告警,阻止异常行为继续;当隐私事件真的发生时,账本可以明确指出“谁在何时查了什么数据、消耗了多少预算”,从而区分是查询方过度请求,还是系统配置失误。就像食堂查账后若发现某个窗口“手抖”太严重,会调低该窗口的扣款上限;数据系统发现风险账户后,也会下调其预算上限或直接冻结权限。

工程落地实践

小食堂用纸质流水单,大食堂用电子收银系统。生产环境中的隐私账本也经历了从“日志文件”到“专用服务”的升级。一个可落地的隐私账本系统通常采用三层架构:查询 API 网关负责接收请求、身份认证与限流;预算管理服务承担账本读写、余额计算与加噪策略决策,是系统的“财务大脑”;存储层包含账本数据库、噪声引擎与数据集本体。

工具层面,业界已有大量成熟框架:Google 差分隐私库(Google DP Library)内置预算追踪功能,适合生产环境;OpenDP 由哈佛与微软主导,学术气息浓、算法覆盖全面;IBM diffprivlib 对 Python 开发者友好;PySyft 则把差分隐私与联邦学习结合起来。选型时建议遵循几条最佳实践:第一,预算默认给足但设置熔断阈值,防止单账户透支;第二,账本写操作必须事务化,避免并发查询时“读余额与扣款”不同步导致超支;第三,噪声引擎与账本分离部署,便于独立审计;第四,定期演练“超支事故”,验证熔断与告警是否真的能拉响。

从场景看,医疗统计查询、城市交通热力图、广告投放归因、普查数据发布,都已经有隐私账本的身影。电子收银系统带来的最大变化是:食堂经理打开手机就能看到实时余额、异常警报和每笔流水。隐私账本服务让数据管理者获得了同样的“驾驶舱”体验——数据仍然在流动,但每一分“隐私钱”都花得明明白白。

AI 应用场景

场景 1:医院科研数据查询平台

阶段:数据发布与共享阶段

解决的问题:传统做法里,医院向高校研究者开放患者统计查询时,常采用“去标识化”报告,但攻击者可以通过连接就诊时间、科室、疾病组合等外部信息重新识别个体。引入差分隐私后,每个查询都注入噪声并记录到隐私账本,研究者只能获得加噪统计量;账本还限制了每个课题组的查询次数与预算上限,从机制上杜绝了“反复查询反推个体”的可能。

具体案例:某三甲医院为一项“新冠后遗症研究”开放 20 万患者记录。平台给课题组分配总预算 ε = 2.0,每次查询消耗 0.1;信息科通过账本页面实时查看各课题组剩余额度与查询明细。当某课题组一周内用掉 80% 预算时,系统自动降级为粗粒度结果并发送告警邮件。

场景 2:城市位置数据的对外统计服务

阶段:数据对外服务阶段

解决的问题:运营商向交通部门提供区域人流热力图时,第三方若对同一区域反复查询,可对聚合结果做差分还原出个体轨迹。通过在每次查询中注入拉普拉斯噪声并记录预算消耗,系统把“推断单个用户位置”的成本抬高到不可承受的程度,同时账本为每次调用提供了明确的责任凭证。

具体案例:某市交通大脑接入运营商位置标签,每次区域查询消耗 ε = 0.05,单日上限 0.5。预算耗尽后,接口自动切换为只返回“低 / 中 / 高拥挤”三档粗粒度结果。运营方在季度审计中发现某地图厂商连续 10 天到达上限,随即下调其配额并约谈。

场景 3:联邦学习建模中的隐私记账

阶段:模型训练阶段

解决的问题:多方联合建模时,梯度在每轮训练中反复上传,攻击者可以从梯度反推训练数据。差分隐私剪枝加噪声的方式为每轮训练消耗一份预算,但若没有统一账本,各参与方无法知道累计泄露量。隐私账本让每一轮消耗清晰可见,防止“沉默方”在最后一轮恶意提取信息。

具体案例:某银行联盟训练信贷风控模型,每轮训练预算 0.1,总预算 5.0。账本在第 50 轮触发预算枯竭告警后,联盟按预案停止训练、审计流水并补充新数据重新立账,整个过程留痕可查。

Python 演示

python55 行
import mathimport random  class PrivacyLedger:    """隐私账本:记录查询预算消耗,余额不足时拒绝查询。"""     def __init__(self, total_budget):        self.total_budget = total_budget        self.remaining_budget = total_budget        self.records_list = []     def query(self, name, epsilon, raw_value, sensitivity=1.0):        if epsilon > self.remaining_budget:            return None        self.remaining_budget -= epsilon        noise = self._laplace_noise(sensitivity / epsilon)        noisy_value = raw_value + noise        self.records_list.append((name, epsilon, raw_value, noisy_value))        return noisy_value     def _laplace_noise(self, scale):        u = random.random() - 0.5        return -scale * math.copysign(1.0, u) * math.log(1 - 2 * abs(u))     def audit(self):        return list(self.records_list)  def main():    data = [22, 25, 30, 35, 42, 48, 51, 60]    mean_age = sum(data) / len(data)    ledger = PrivacyLedger(total_budget=2.0)     query_list = [        ("年龄均值", 0.8, mean_age),        ("年龄极差", 0.8, max(data) - min(data)),        ("年龄中位数", 0.8, sorted(data)[len(data) // 2]),    ]     for name, eps, raw in query_list:        result = ledger.query(name, eps, raw)        if result is None:            print("[拒绝] {0}:剩余预算不足,停止查询".format(name))        else:            print("[完成] {0}:真实值 {1:.2f},加噪结果 {2:.2f},剩余预算 {3:.2f}".format(                name, raw, result, ledger.remaining_budget))     print("账本流水(审计视图):")    for record in ledger.audit():        print("  - {0}:消耗 {1},输出 {2:.2f}".format(record[0], record[1], record[3]))  if __name__ == "__main__":    main()
目的:实现一个带拉普拉斯噪声的隐私账本,演示“查询扣款—记账—余额不足拒绝”的完整闭环。
  1. class PrivacyLedger:定义隐私账本类,相当于食堂财务记账系统,集中管理预算与流水。
  2. self.remaining_budget = total_budget初始化饭卡余额,即可用的隐私预算 ε 总量。
  3. self.records_list = []账本流水表,后续每笔查询都追加一条记录用于审计。
  4. if epsilon > self.remaining_budget: return None余额不足直接拒绝查询,对应收银机的“余额不足”提示。
  5. self.remaining_budget -= epsilon扣款操作:从剩余预算中扣除本次查询消耗。
  6. noise = self._laplace_noise(sensitivity / epsilon)按尺度 λ = Δf/ε 生成拉普拉斯噪声,实现“抖勺”。
  7. self.records_list.append((name, epsilon, raw_value, noisy_value))记账:谁查了什么、花了多少、输出了什么。
  8. result = ledger.query(name, eps, raw)依次发起三笔查询,模拟真实业务中的连续调用。
  9. ledger.audit()导出完整流水,供审计与复盘使用,就像拉出食堂月度账单。

常见误区

误区“把姓名、身份证号这些字段删掉,数据就匿名了,可以放心开放查询。”

正解去标识化不等于差分隐私。攻击者通过连接外部信息,比如就诊时间、科室、疾病组合,依然能重新识别个体。差分隐私从机制层面保证“无论某条记录是否在数据集中,输出差异都很小”;隐私账本则记录每次查询的累计泄露量,把保护从“删字段”升级为“可证明的数学承诺”。就像饭卡上不写名字,但只要你连续几天在固定时段刷同一台机器,熟人照样能人肉出你的作息。

为何常见:普通公司最常用的脱敏手段就是去标识化,新闻和教材也常把“脱敏”挂在嘴边,容易让人误以为删字段就是全部隐私保护。

误区“ε 是超参数,调大一点噪声就小,结果更准,隐私损失一点没关系。”

正解ε 出现在指数位置,是隐私损失的上界参数。ε 从 1 增到 2,隐私损失上界放大到原来的 e 倍(约 2.72 倍),但噪声尺度只缩小一半。收益线性、风险指数级,完全不划算。预算设定应遵循“够用就好”,并把 ε 写进数据使用协议,因为它不仅是调参问题,更是审计与合规层面的承诺。

为何常见:工程师习惯把模型里的超参数调大调小来优化效果,忽略了 ε 在隐私语义上的指数级意义。

误区“账本嘛,就是记录日志,查询完写一条流水就完事了,对系统运行没影响。”

正解账本不只是记录,更是实时决策组件。每次查询前系统必须读账本算余额,余额不足时直接拒绝;没有账本的差分隐私系统根本无法回答“总共泄露了多少”,也就做不了预算管理和熔断。账本是动态的预算控制器,而不是挂在墙上的记事本。

为何常见:汉语里“账本”让人联想到记账簿,忽略了它在查询主链路中承担的关键控制职责。

误区“预算用完了重启一下服务,或者重建数据库,账本清零就能继续查询了。”

正解隐私预算是累积的承诺。只要数据还是同一批人的数据,重启只是把账本清零,实际泄露并没有消失,反而会让总泄露超过 ε 上限,使差分隐私保证彻底失效。恢复预算必须基于数据更新换代或经过审计确认的衰减模型,而不是简单重启。饭卡钱花完了,换一张新卡刷的还是同一个人的钱,除非食堂改了伙食标准。

为何常见:软件工程里“重启解决一切”的习惯,被错误地迁移到了隐私领域。

误区“把一次大查询拆成很多次小查询,每次花一点点 ε,不就能无限查下去了?”

正解顺序组合定理明确告诉我们,对同一数据集多次查询的预算线性相加,拆得再碎总额不变,还因为每次查询的固定开销可能更亏。想省钱应该考虑并行组合——把数据集分块后分别查询、取最大预算;或者使用更高级的 Rényi 差分隐私组合界来精确核算累积损失。

为何常见:初学者容易凭直觉认为“小预算 + 多查询”是免费漏洞,忽略了组合定理这一最基本的约束。

面试题

Q1. 在 ε-差分隐私中,隐私参数 ε 的值越小,说明?

单选题 · easy

  • A.噪声越大,隐私保护越强← 正确答案
  • B.噪声越小,查询结果越准
  • C.允许查询的次数就越多
  • D.账本需要记录的内容越少

答案:A。ε 越小,e^ε 越接近 1,说明加噪前后输出分布越接近,个体被识别的风险越低,隐私保护越强。代价是需要更大的噪声、更差的结果精度。选项 B 正好说反了,C 与 D 与 ε 的取值没有必然关系。

Q2. 根据顺序组合定理,对同一个数据集连续执行 k 次查询,总隐私预算为?

单选题 · mid

  • A.各次预算之和← 正确答案
  • B.各次预算的最大值
  • C.各次预算的平均值
  • D.首次查询的预算值

答案:A。顺序组合要求总 ε 等于各次 ε_i 线性相加,就像连续点三份菜、钱一笔笔累加。B 是并行组合的结论,C 和 D 没有理论依据,都是对组合定理的误记。

Q3. 拉普拉斯机制的噪声尺度 λ 与敏感度 Δf、隐私预算 ε 的关系是?

单选题 · mid

  • A.λ = Δf / ε← 正确答案
  • B.λ = ε / Δf
  • C.λ = Δf × ε
  • D.λ = Δf − ε

答案:A。噪声尺度 λ 与敏感度成正比、与预算成反比。敏感度越大,说明单条记录对结果的影响越大,噪声要更猛;ε 越小,说明隐私要求越高,同样需要更大的噪声。

Q4. 某公司将数据集按记录分成 5 个互不相交的块并行查询,各块预算分别为 0.2、0.5、0.3、0.4、0.1,总隐私预算为?

单选题 · hard

  • A.1.5
  • B.0.5← 正确答案
  • C.0.3
  • D.0.9

答案:B。并行组合定理取各块预算的最大值,max(0.2, 0.5, 0.3, 0.4, 0.1) = 0.5。因为每条记录只出现在一个块中,同一记录的泄露最多来自那一块的预算。只有在顺序组合时才会累加出 1.5。

Q5. 隐私账本在差分隐私系统中的核心作用是?

单选题 · easy

  • A.记录查询消耗并控制预算← 正确答案
  • B.加密存储所有的用户数据
  • C.加快数据库查询的速度
  • D.自动生成数据脱敏报告

答案:A。账本记录每一笔查询消耗的 ε,并据此拒绝超额查询,是预算管理的中枢。加密存储、查询加速和脱敏报告都不是账本的核心职责,它们属于存储层、性能层和数据处理层的功能。

Q6. 关于敏感度 Δf,下列说法正确的是?

单选题 · mid

  • A.是相邻查询结果的极大差← 正确答案
  • B.是数据集记录数的均值
  • C.是噪声尺度的固定常数
  • D.是预算消耗的最小单位

答案:A。敏感度刻画“单条记录最大能撬动多少查询结果”,它决定噪声尺度:Δf 越大,噪声越大。B、C、D 都偏离了定义,敏感度不是记录数的函数,也不是固定常数或预算单位。

Q7. 隐私账本一般应记录哪些信息?(多选)

多选题 · mid

  • A.查询者身份与查询时间← 正确答案
  • B.查询内容与消耗预算← 正确答案
  • C.数据集的原始记录内容
  • D.输出结果与噪声参数← 正确答案

答案:ABD。账本记录“谁、何时、查了什么、花了多少预算、输出了什么”等元数据。原始记录内容是隐私本体,账本不应冗余存储,否则账本自身就会变成新的泄露源。

Q8. 当某个查询账户的隐私预算即将耗尽时,合理的处理方式有?(多选)

多选题 · hard

  • A.拒绝新查询提示余额不足← 正确答案
  • B.悄悄清零账本重新累计
  • C.自动降低噪声继续查询
  • D.触发告警请管理员审批← 正确答案

答案:AD。预算告急时应熔断并触发告警,由管理员审计后决定是否追加预算。清零账本会让累计泄露突破承诺,偷偷降噪则直接破坏差分隐私保证,两者都是违规操作。

Q9. 在工程实现中,账本写操作必须事务化的原因是?

单选题 · mid

  • A.防止并发查询导致预算超支← 正确答案
  • B.防止数据被黑客窃取
  • C.防止噪声生成速度过慢
  • D.防止数据库表过于庞大

答案:A。两个查询并发到达时,若“读余额”与“写账本”不原子,两个请求可能读到同一个余额并同时扣款,导致实际消耗超过上限。事务化保证“扣款 + 记账”要么都成功、要么都不发生,就像两人同时刷卡时收银机只能逐笔结算。

Q10. 差分隐私主要防御的攻击类型是?

单选题 · easy

  • A.差分攻击与成员推断攻击← 正确答案
  • B.分布式拒绝服务攻击
  • C.SQL 注入与 XSS 攻击
  • D.物理破坏与供电中断

答案:A。差分隐私针对的是通过多次查询结果组合推断个体是否在数据集中、以及个体具体取值的成员推断和差分攻击。DDoS、SQL 注入属于系统安全与 Web 安全问题,不在差分隐私的防御范围内。