简介:《隐私计算金融应用调研报告》由北京金融科技产业联盟联合成方金融信息技术服务有限公司、中国农业银行于2021年10月编制,聚焦安全多方计算、联邦学习、可信执行环境等技术在金融业的落地路径,适合金融机构数据治理、风控与营销团队以及隐私计算技术供应商研读。压缩包内仅1份PDF文档,体积约11.06MB,完整收录调研全文与图表,涵盖样本情况、研发团队规模、数据治理架构、发展阶段、场景与技术应用程度、基础设施投入以及风险挑战与发展动力等章节。报告面向30家机构(15家金融机构与15家科技公司)展开问卷调研,对比双方在人才投入、应用成熟度与合规态度上的差异,并给出共建联盟、开展标准研究的建议。目前已有325人学习下载,可作为理解数据“可用不可见”落地现状、评估技术选型与合规风险的参考底稿。
1. 隐私计算金融应用调研报告:先定场景再选技术,别从算法名词开始
金融机构做隐私计算调研,常见的第一版报告是从 MPC、联邦学习、TEE、同态加密的名词解释写起,最后落到“建议试点”。这种写法评审时容易被问住:到底解决哪个业务问题?数据在哪一方?性能能不能扛住真实客群?这份调研报告的目标不是科普技术,而是给立项、采购和 POC 提供可验证的证据链。它适合银行、保险、证券的科技团队,也适合咨询和厂商售前。调研范围要覆盖场景拆解、技术路线匹配、评估指标、合规边界和最小验证。写报告的人需要同时懂数据、模型和合规,不能只做文献综述。把“隐私计算金融应用”拆成可回答的问题,才是报告能被业务方和风控方同时接受的前提。
2. 隐私计算金融场景拆解:从联合风控到跨机构反欺诈的调研颗粒度
2.1 金融侧五类典型场景与可量化指标
做金融行业调研,第一步不是问厂商支持什么算法,而是把业务场景拆成参与方、数据特征、模型目标和验收指标。下面这张表是我在写调研报告时常用的场景摸底模板,每一列都对应后续访谈要追问的点。
| 场景 | 主要参与方 | 数据特点 | 候选隐私计算技术 | 关键量化指标 | 调研输出物 |
|---|---|---|---|---|---|
| 信贷联合风控 | 银行、消金、征信机构 | 样本重叠、特征互补、标签稀缺 | 纵向联邦学习、MPC | KS 提升、AUC 提升、入模特征数 | 联合建模可行性结论 |
| 跨机构反欺诈 | 银行、支付机构、运营商 | 黑名单、设备、交易行为 | PSI、MPC、图联邦 | 查全率、误报率、响应延迟 | 名单求交与联防方案 |
| 精准营销 | 银行、电商、生活服务平台 | 用户标签、消费行为 | 联邦学习、TEE | 转化率、触达成本、覆盖率 | 客群圈选与效果评估 |
| 联合统计 | 监管、协会、多机构 | 汇总指标、分布统计 | 差分隐私、MPC | 统计误差、隐私预算 | 监管报送与行业指数 |
| 保险定价 | 保险公司、医院、车企 | 健康、驾驶、理赔数据 | TEE、联邦学习 | 赔付率、定价偏差 | 数据合作定价模型 |
这张表的作用是防止报告写成技术综述。比如“跨机构反欺诈”里,PSI 只解决名单求交,不解决模型训练;如果业务方要的是实时拦截,那 TEE 或 MPC 的延迟指标比算法先进性更重要。调研颗粒度要细到“谁出数据、谁出模型、谁出算力、结果给谁”,否则 POC 阶段会反复返工。
2.2 技术路线匹配:MPC、FL、TEE、DP、HE 的取舍矩阵
隐私计算不是单一技术,金融场景里常见的有五条路线。调研报告里最好给出一张取舍矩阵,把安全假设、性能开销和适用边界写清楚。
| 技术路线 | 安全假设 | 典型金融场景 | 性能特征 | 调研时必须追问 |
|---|---|---|---|---|
| 多方安全计算 MPC | 多数诚实、不共谋 | 名单求交、联合统计、小规模评分 | 通信开销大,随参与方增加明显 | 门限设置、恶意模型、网络带宽 |
| 联邦学习 FL | 参与方本地数据不出域 | 联合风控、营销模型 | 训练轮次多,通信量大 | 梯度泄露防护、样本对齐方式 |
| 可信执行环境 TEE | 依赖硬件信任根 | 高性能联合计算、保险定价 | 接近明文计算,受内存限制 | 侧信道防护、远程证明、运维权限 |
| 差分隐私 DP | 数学隐私保证 | 统计发布、监管报送 | 加噪后精度下降可控 | 隐私预算 epsilon、组合定理 |
| 同态加密 HE | 密码学安全 | 密态查询、少量特征计算 | 计算开销大,密文膨胀 | 参数集、乘法深度、噪声增长 |
我一般会在报告里强调:金融场景很少只用一种技术。联合风控常用“联邦学习 + MPC 样本对齐”,反欺诈常用“PSI + TEE 实时查询”,监管报送常用“MPC + 差分隐私”。选型理由要绑定业务指标,比如延迟要求低于 200ms 时,纯 MPC 往往不现实;参与方超过五家时,通信轮次会成为瓶颈。
2.3 调研访谈提纲的代码化模板
为了让访谈不遗漏关键问题,我会用 Python 维护一份结构化提纲,再渲染成 Markdown 或表格。这样不同项目可以复用,也方便版本对比。
# survey_outline.py # 用途:生成隐私计算金融应用调研访谈提纲 # 说明:每个场景下列出必须确认的问题,避免口头访谈丢项 outline = { "场景名称": "跨机构反欺诈", "参与方": ["银行A", "支付机构B", "运营商C"], "数据出域要求": "原始数据不出本地,仅交换加密中间结果", "技术候选": ["PSI", "TEE", "MPC"], "必问问题": [ "样本ID是否统一?手机号、设备号还是内部客户号?", "黑名单更新频率是多少?实时还是T+1?", "查询延迟上限是多少毫秒?", "参与方是否接受硬件可信执行环境?", "结果输出是名单、分数还是布尔值?", "谁承担算力成本?谁承担网络专线成本?" ], "验收指标": { "查全率": ">= 85%", "误报率": "<= 3%", "单次查询延迟": "<= 200ms" } } def render_markdown(data): lines = [f"# {data['场景名称']} 调研提纲", ""] lines.append(f"- 参与方:{', '.join(data['参与方'])}") lines.append(f"- 数据出域要求:{data['数据出域要求']}") lines.append(f"- 技术候选:{', '.join(data['技术候选'])}") lines.append("") lines.append("## 必问问题") for i, q in enumerate(data["必问问题"], 1): lines.append(f"{i}. {q}") lines.append("") lines.append("## 验收指标") for k, v in data["验收指标"].items(): lines.append(f"- {k}:{v}") return "\n".join(lines) if __name__ == "__main__": print(render_markdown(outline))这段代码的逻辑很简单:把场景、参与方、技术候选和验收指标放在一个字典里,再按固定顺序渲染成 Markdown。参数outline可以替换成任意金融场景,比如“信贷联合风控”或“保险定价”。render_markdown里的lines列表保证输出格式统一,方便直接粘贴到调研报告附录。实际使用时,我会把验收指标改成带单位的值,比如延迟用毫秒、提升用百分点,避免访谈记录里出现“较快”“较高”这种无法验证的描述。
3. 可复现的评估流水线:评分卡、POC 与必调参数
3.1 用 Python 构建加权评分卡
调研报告如果只列技术路线,评审很难判断优先级。我会把安全性、性能、合规、成本、生态五个维度做成加权评分卡,每个候选项打分后排序。下面是一段可直接运行的评分代码。
# scorecard.py # 用途:对隐私计算方案做加权评分,输出排名 # 说明:权重之和为1,得分归一化到0-100 import pandas as pd weights = { "安全性": 0.30, "性能": 0.25, "合规": 0.20, "成本": 0.15, "生态": 0.10 } # 候选方案原始分,满分10分 data = { "方案": ["MPC方案", "联邦学习方案", "TEE方案", "混合方案"], "安全性": [9, 7, 6, 8], "性能": [5, 7, 9, 7], "合规": [8, 8, 7, 8], "成本": [4, 6, 5, 6], "生态": [6, 8, 7, 8] } df = pd.DataFrame(data) df["加权总分"] = sum(df[k] * v for k, v in weights.items()) * 10 df = df.sort_values("加权总分", ascending=False) print(df[["方案", "加权总分"]].to_string(index=False))逻辑说明:weights是调研团队和业务方共同确认的权重,金融行业通常把安全性和合规放在前两位。data里每一列是候选方案在对应维度的原始分,满分 10 分。df["加权总分"]把加权和乘以 10,得到百分制分数。参数调整时,如果业务方更看重性能,可以把性能权重调到 0.30,同时降低生态权重。注意评分卡不能替代 POC,它只用于筛选进入 POC 的候选方案。我会在调研报告里附上评分明细,让评审看到每个维度的依据,而不是只给一个总分。
3.2 最小 POC:纵向联邦逻辑回归的验证点
金融联合风控最常做的 POC 是纵向联邦逻辑回归。下面用伪代码表示关键步骤,重点不是实现完整框架,而是让调研报告里的验证点可执行。
# vertical_fl_lr_poc.py # 用途:纵向联邦逻辑回归最小流程伪代码 # 说明:A方有标签,B方有特征,双方样本ID对齐后联合训练 # 1. 样本对齐:使用PSI求交集,不暴露非交集ID common_ids = private_set_intersection(party_a_ids, party_b_ids) # 2. 初始化模型参数 w_a = init_weights(n_features_a) w_b = init_weights(n_features_b) learning_rate = 0.01 epochs = 20 for epoch in range(epochs): # 3. A方计算部分线性值,B方计算部分线性值 z_a = party_a_linear(common_ids, w_a) z_b = party_b_linear(common_ids, w_b) # 4. 加密聚合,双方只能看到聚合后的z z = secure_aggregate(z_a, z_b) y_hat = sigmoid(z) # 5. 计算加密梯度,分别回传给A和B grad_a = party_a_gradient(y_hat, party_a_labels, party_a_features) grad_b = party_b_gradient(y_hat, party_b_features) # 6. 本地更新权重,不交换原始特征 w_a = w_a - learning_rate * grad_a w_b = w_b - learning_rate * grad_b # 7. 验证:在交集样本上计算AUC、KS,与明文基线对比 auc = evaluate_auc(common_ids, y_hat, party_a_labels) ks = evaluate_ks(common_ids, y_hat, party_a_labels)这段伪代码的验证点有三个:第一,private_set_intersection是否真的不泄露非交集 ID,调研时要看 PSI 协议的安全证明;第二,secure_aggregate是否使用了同态加密或秘密分享,梯度回传是否可能反推特征;第三,最终auc和ks与明文基线差距是否在可接受范围内,通常要求 AUC 下降不超过 1 个百分点。参数epochs和learning_rate需要根据通信轮次调整,联邦场景下轮次越多通信成本越高。调研报告里应记录每次 POC 的样本量、特征数、参与方数量和网络延迟,否则结论无法复现。
3.3 性能与安全参数表
POC 阶段最容易忽略的是参数对结果的影响。下面这张表是我在调研报告里必附的必调参数清单。
| 参数 | 所属技术 | 典型取值范围 | 影响 | 调研记录项 |
|---|---|---|---|---|
| 通信轮数 | 联邦学习 | 10-100 | 轮数越多精度越高,通信开销线性增长 | 每轮耗时、总耗时 |
| 批量大小 | 联邦学习 | 256-4096 | 影响梯度稳定性与内存 | 单机内存峰值 |
| 隐私预算 epsilon | 差分隐私 | 0.1-10 | 越小越安全,但统计误差越大 | 噪声机制、组合方式 |
| MPC 门限 | 多方安全计算 | t-of-n | 门限越低越易恢复,安全性下降 | 参与方数量、共谋假设 |
| TEE 内存 | 可信执行环境 | 几十GB到上百GB | 限制参与计算的数据量 | 飞地内存、换页开销 |
| 同态加密乘法深度 | 同态加密 | 2-10 | 深度越大噪声增长越快 | 参数集、密文膨胀倍数 |
调研时不要只问厂商“支持多少轮”,而要问“在多少样本、多少特征、多少参与方下,每轮耗时是多少”。同一个联邦学习框架,在 10 万样本和 1000 万样本下的表现完全不同。我会要求厂商提供可复现的 benchmark 脚本或日志,否则性能数据只能作为参考,不能写进最终结论。
4. 合规边界与风险核查清单:调研报告不能漏的验证项
4.1 数据出域与个人信息保护核查清单
金融隐私计算项目的合规边界比技术选型更容易被低估。调研报告需要把数据出域、个人信息保护、授权链路和审计要求逐条确认。下面这张清单可以直接作为访谈附件。
| 核查项 | 要确认的问题 | 需要提供的证据 | 风险等级 |
|---|---|---|---|
| 数据出域 | 原始数据是否离开本地?中间结果是否可逆? | 数据流图、加密协议说明 | 高 |
| 授权链路 | 用户是否授权跨机构联合计算? | 授权书模板、撤回机制 | 高 |
| 最小必要 | 参与计算的字段是否最小化? | 字段清单、业务必要性说明 | 中 |
| 存储期限 | 中间结果和模型参数保存多久? | 存储策略、销毁记录 | 中 |
| 审计追溯 | 能否记录每次计算的任务、参与方、结果? | 审计日志样例 | 中 |
| 跨境传输 | 是否有境外参与方或境外算力? | 参与方清单、部署架构 | 高 |
| 再识别风险 | 输出结果是否可能反推个体? | 差分隐私证明、攻击测试报告 | 高 |
这张表的关键是“需要提供的证据”一列。很多调研报告只写“厂商承诺合规”,但没有证据。合规评审时,承诺不能替代协议说明和日志样例。如果某个核查项无法提供证据,我会在报告里标为未验证,而不是直接写“满足”。
4.2 供应商尽调:从白皮书到安全证明
供应商尽调不能只看白皮书。我通常会用一份可执行的检查脚本,把需要收集的材料列出来,并扫描文档里是否包含关键安全描述。下面是一个 bash 示例。
#!/bin/bash # vendor_check.sh # 用途:检查隐私计算供应商材料是否齐全 # 说明:将供应商文档放在 vendor_docs 目录下运行 DOC_DIR="./vendor_docs" REQUIRED_FILES=("安全白皮书.pdf" "密码协议说明.pdf" "测试报告.pdf" "部署架构.png") KEYWORDS=("半诚实" "恶意模型" "远程证明" "侧信道" "同态加密" "秘密分享") echo "== 文件完整性 ==" for f in "${REQUIRED_FILES[@]}"; do if [ -f "$DOC_DIR/$f" ]; then echo "[存在] $f" else echo "[缺失] $f" fi done echo "== 关键词扫描 ==" for kw in "${KEYWORDS[@]}"; do count=$(grep -r "$kw" "$DOC_DIR" 2>/dev/null | wc -l) echo "$kw: $count 处" done这段脚本的逻辑是先检查必需文件是否存在,再统计关键词出现次数。REQUIRED_FILES数组列出尽调材料,KEYWORDS数组列出安全相关术语。参数可以根据项目调整,比如增加“联邦学习”“差分隐私”等词。注意关键词出现次数多不代表安全,只能说明文档覆盖了这些概念。真正要验证的是协议说明里有没有形式化安全定义、测试报告里有没有攻击测试用例。调研报告里我会把供应商材料分成“已提供”“部分提供”“未提供”三档,并注明未提供项对结论的影响。
4.3 报告结构:结论先行、证据链、风险等级
调研报告本身的结构也要可检索、可评审。我一般按“结论先行、证据链、风险等级”组织:开头一页写推荐方案和排除理由,中间按场景和技术路线展开,附件放评分卡、POC 日志和合规清单。每个结论后面必须跟证据编号,比如“推荐 TEE 方案,证据见附录 B-3 延迟测试”。风险等级用高、中、低标注,高等级风险必须给出缓解措施或明确不推荐。这样业务方看第一页就能决策,技术方可以顺着证据链复现。报告版本也要管理,每次 POC 更新后只改证据和结论,不重写全文。
5. 进阶技巧:用 Jinja2 自动生成调研报告并做版本对比
5.1 模板化渲染调研报告骨架
当调研覆盖多个场景和多个供应商时,手工拼报告容易漏项。我会用 Jinja2 维护一份 Markdown 模板,把场景、评分和参数对比自动渲染出来。
# render_report.py # 用途:用Jinja2生成隐私计算金融应用调研报告骨架 # 说明:模板中变量与评分卡、参数表字段对应 from jinja2 import Template template = Template(""" # {{ title }} ## 推荐结论 {% for item in recommendations %} - {{ item.scene }}:推荐 {{ item.tech }},理由:{{ item.reason }} {% endfor %} ## 评分排名 | 方案 | 加权总分 | | --- | --- | {% for row in scores %} | {{ row.name }} | {{ row.score }} | {% endfor %} ## 必调参数 | 参数 | 取值 | 影响 | | --- | --- | --- | {% for p in params %} | {{ p.name }} | {{ p.value }} | {{ p.impact }} | {% endfor %} """) data = { "title": "隐私计算金融应用调研报告", "recommendations": [ {"scene": "跨机构反欺诈", "tech": "PSI + TEE", "reason": "延迟低于200ms"} ], "scores": [ {"name": "混合方案", "score": 78.5}, {"name": "TEE方案", "score": 74.0} ], "params": [ {"name": "TEE内存", "value": "64GB", "impact": "限制单次计算数据量"} ] } print(template.render(**data))这段代码的关键是模板变量和数据结构一一对应。recommendations列表存放每个场景的推荐技术,scores存放评分卡结果,params存放必调参数。每次调研数据更新后,只需要改data字典,报告骨架自动生成。参数说明里impact列写清楚影响,避免评审时反复追问。实际使用时,我会把模板放在 Git 仓库里,数据用 YAML 文件维护,渲染前先跑一遍校验,确保每个场景都有推荐结论和证据编号。
5.2 方案参数对比与版本追踪
调研报告经常需要对比不同版本的 POC 结果。我会用表格记录方案参数,再用 Git 做版本追踪。
| 版本 | 方案 | 样本量 | 特征数 | 参与方 | AUC | 单轮耗时 | 结论 |
|---|---|---|---|---|---|---|---|
| v1 | MPC | 10万 | 50 | 2 | 0.72 | 12s | 延迟不达标 |
| v2 | 联邦学习 | 100万 | 120 | 3 | 0.79 | 45s | 进入下一轮 |
| v3 | TEE+PSI | 500万 | 80 | 4 | 0.81 | 0.18s | 推荐试点 |
版本追踪用几条命令就能固定证据:
# 初始化调研仓库 git init privacy_finance_survey cd privacy_finance_survey # 保存每次POC的数据和报告 git add scorecard.csv params.yaml report.md git commit -m "v3: TEE+PSI 500万样本 延迟0.18s" # 对比两次结论差异 git diff v2 v3 -- report.md git log --oneline -- params.yamlgit diff可以快速看出推荐结论从“联邦学习”变成“TEE+PSI”的原因,git log能追溯参数变化。调研报告最后一页不要写“待后续验证”这种空话,而是把当前版本的可复现命令、数据文件和结论编号列出来。下次评审时,任何人拿到仓库都能重新跑出同样结果。最后一行技术内容:把params.yaml里的epsilon、门限、内存和通信轮数固定到版本标签,再用git tag v3锁住这一版结论。
本文还有配套的精品资源,点击获取