项目:离线隐私方案评审
项目目标
用严格 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.py | 76 项合同、规则、预算、指纹与 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 项全部通过,无缓存与个人数据。
- 能逐条把发现映射到本库课程并说明残余边界。
扩展任务
- 复制加固场景,仅把
retention.days改为365,应只得到PR-008和REVIEW。 - 设计“两个银行求欺诈集合交集”的场景:先写威胁模型、候选 MPC/PSI 的保证与输出风险,再填 JSON。
- 不改变阈值前提下构造“预算刚好等于上限”和“delta 单独超限”测试。
- 若新增 schema 字段,先加入失败测试、验证器和文档,不允许未知字段静默丢弃。
自测题
- 为什么“数据没离开机构”不是完整隐私保证?
- 为什么未定义邻接时 ε 数字没有清晰主体语义?
- 安全聚合与 DP 分别保护哪个观察面?
- MPC 为什么不能修复过度泄露的最终输出?
- 为什么
PASS不证明真实 DP/MPC/TEE 实现正确?
关键答案:本项目只检查声明的元数据和有限教学规则,没有验证真实数据流、机制、协议、密钥、硬件、攻击者或法律事实。
关联学习
参考资料
- NIST SP 800-226(最终版,2025-03;获取日期:2026-07-21)
- NIST Privacy-Enhancing Cryptography(获取日期:2026-07-21)
- NIST Privacy Framework(获取日期:2026-07-21)