项目:离线隐私方案评审

项目目标

用严格 JSON 元数据描述一个“两家机构联合发布地区服务统计”的方案,再由确定性 Python 规则检查字段必要性、链接风险、原始数据集中、DP 邻接与预算、保留删除、数据流、FL/安全聚合边界和生命周期控制。

脚本不加载真实个人数据,不实现 DP、FL、安全聚合、MPC、FHE 或 TEE,也不判断合规。它训练的是:先把目的、参与方、威胁和声明写成可审查契约,再把结论交给隐私、密码、领域、安全和法律职责复核。

文件说明

文件作用
examples/privacy_review.py严格解析、契约校验、12 条教学发现、决策和 CLI
examples/privacy_scenario_vulnerable.json故意过度收集且错误组合技术的场景,预期 BLOCK
examples/privacy_scenario_hardened.json最小化、受控且证据完整的元数据场景,预期 PASS
examples/privacy_scenario_contract_error.json含未知字段,预期契约错误
examples/test_privacy_review.py76 项合同、规则、预算、指纹与 CLI 测试

契约覆盖用途/非目标、主体范围、字段的隐私分类与输出角色、参与方信任、带保护类型的数据流、公开输出投影、结构化相邻关系、ε/δ 台账、协议参与方/串谋阈值、保留删除、生命周期控制、对手和风险政策。公开输出不能包含直接标识符或标为 not_released 的字段;MPC、HE、TEE、安全聚合和本地训练声明必须与实际 flow 类型一致。JSON 数值参数用十进制字符串,避免二进制浮点给教学预算制造噪声。

运行

要求 Windows 11、PowerShell 7 和当前稳定 Python 3;只用标准库。从本笔记所在目录运行:

Set-Location '.\examples' # 进入包含场景、实现和测试的目录,固定所有相对路径。
 
# 漏洞场景:退出码 1,action=BLOCK,PR-001..PR-012
python -B .\privacy_review.py --scenario .\privacy_scenario_vulnerable.json # 执行故意过度收集的场景,预期得到 BLOCK。
 
# 加固场景:退出码 0,action=PASS
python -B .\privacy_review.py --scenario .\privacy_scenario_hardened.json # 执行最小化/受控元数据场景,预期得到 PASS。
 
# 未知字段:退出码 2,fail closed
python -B .\privacy_review.py --scenario .\privacy_scenario_contract_error.json # 用未知字段 fixture 验证严格契约拒绝路径。
 
python -B .\privacy_review.py --self-test # 运行脚本内置的快速不变量检查。
python -B -m unittest discover -s . -p 'test_*.py' -v # 正常模式下发现并详细运行全部回归测试。
python -B -O -m unittest discover -s . -p 'test_*.py' # 确认生产规则不依赖 -O 会删除的 bare assert。
python -B -W error -m unittest discover -s . -p 'test_*.py' # 将 warning 视为失败,检查更严格的执行环境。

BLOCK/REVIEW 返回 1 是业务门禁;契约错误返回 2;只有 PASS 返回 0。PowerShell 可用 $LASTEXITCODE 检查。

读懂实现

严格输入

load_json 拒绝重复 key、NaN 和无效 JSON;validate_scenario 拒绝未知/缺失字段、错误类型、非法枚举、重复 ID、悬空参与方/字段引用、非有限或非法 DP 参数。输入错误不能伪装成一份成功报告。

12 条教学发现

规则分别检查:任何不必要字段、公开准标识维度缺少链接评估、从 flow 拓扑推导出的多持有方原始数据集中、公开小组过小、结构化邻接/贡献边界未定义、台账超限、发布审批/会计缺失、保留删除不足、敏感原始字段流向不可信方、真实 FL update 对服务器可见、真实训练场景中的恶意更新缺少约束、生命周期或协议证据不全。

它们不是统一法规阈值。例如 minimum_group_size < 10 与 retention > 90 只是冻结的教学策略,用于演示门禁;生产值必须从实际风险、用途和义务确定。

预算与边界

示例只做最保守的基本 ε/δ 加法,并明确标记“不构成验证过的 DP 保证”。真实系统还需验证邻接、贡献裁剪、机制、随机性、会计方法、采样、并发、重试、效用和所有输出旁路。

候选技术同时给出 fit 与 boundary,防止“推荐 MPC/DP”被误读为完整方案。证据指纹只证明报告输入内容一致,不证明 JSON 声明真实或机制正确。

验收任务

  • 漏洞场景触发 PR-001 至 PR-012,动作为 BLOCK。
  • 加固场景无发现,动作为 PASS。
  • 契约错误返回 2,不产生有效报告。
  • 三种测试模式各 76 项全部通过,无缓存与个人数据。
  • 能逐条把发现映射到本库课程并说明残余边界。

扩展任务

  1. 复制加固场景,仅把 retention.days 改为 365,应只得到 PR-008 和 REVIEW。
  2. 设计“两个银行求欺诈集合交集”的场景:先写威胁模型、候选 MPC/PSI 的保证与输出风险,再填 JSON。
  3. 不改变阈值前提下构造“预算刚好等于上限”和“delta 单独超限”测试。
  4. 若新增 schema 字段,先加入失败测试、验证器和文档,不允许未知字段静默丢弃。

自测题

  1. 为什么“数据没离开机构”不是完整隐私保证?
  2. 为什么未定义邻接时 ε 数字没有清晰主体语义?
  3. 安全聚合与 DP 分别保护哪个观察面?
  4. MPC 为什么不能修复过度泄露的最终输出?
  5. 为什么 PASS 不证明真实 DP/MPC/TEE 实现正确?

关键答案:本项目只检查声明的元数据和有限教学规则,没有验证真实数据流、机制、协议、密钥、硬件、攻击者或法律事实。

关联学习

参考资料