在金融联合征信、医疗机构跨院数据分析、政务数据共享等场景中,一个反复出现的矛盾是:多个参与方希望共同挖掘数据价值,但又绝不能交出原始数据。法规要求数据最小化、目的限制,而协作需求又希望样本量越大越好、维度越丰富越好。“数据可用不可见”正是在这种张力下催生的技术理念——让数据在不出控制域的前提下被计算,仅输出结果或参数更新,而非暴露明细。目前实现这一理念的技术路线主要有三条:多方安全计算(MPC)、联邦学习(FL)和可信执行环境(TEE),它们在安全假设、性能开销和适用场景上差异显著。

多方安全计算:密码学原语构建的分布式信任
多方安全计算允许一组互不信任的参与方,在各自持有秘密输入的条件下,共同计算某个约定函数,并且除了函数输出外无法获知任何额外信息。经典实现基于两种密码学原语:不经意传输与混淆电路。假设Alice持有x,Bob持有y,双方想安全比较x与y的大小,但都不愿泄露自己的值。借助Garbled Circuit,Alice将比较电路转换成混淆真值表发送给Bob,Bob通过不经意传输获取自己输入对应的标签,然后在本地评估混淆电路得到结果,整个过程Bob不知道Alice的输入,Alice也看不到Bob的输入。
在实际工程中,MPC的性能瓶颈主要来自电路深度和通信轮数。以加法秘密分享为例,若三个参与方要计算总和,各自将私有值拆分成碎片分发,然后本地聚合碎片即可还原总和。但对于乘法、比较等非线性操作,就需要交互与大量密文通信。开源框架如SPDZ、ABY3通过混合协议(算术电路用加法分享,布尔电路用混淆电路)来平衡性能,一个中等规模的逻辑回归模型训练在广域网环境下可能耗时数小时。因此MPC更适用于统计查询、隐私交集(PSI)、简单的规则匹配等轻量级任务,而非大型深度学习训练。
MPC的安全模型通常分为半诚实敌手和恶意敌手。半诚实假设参与方会遵守协议执行但试图窥探额外信息,恶意敌手则允许任意偏离协议。后者需要引入零知识证明或消息认证码(MAC)来防止篡改,代价是性能再降一个数量级。选择哪种安全模型必须与应用的风险模型匹配:如果是同集团内部不同部门间协作,半诚实通常足够;跨企业甚至竞对之间,则需要至少恶意安全或允许中止安全。
联邦学习:让模型移动,数据不动
联邦学习由Google在2016年提出,核心思想是各参与方在本地用自有数据训练同一个模型,只把加密后的梯度或模型参数上传到中心服务器聚合,迭代更新全局模型。典型的联邦平均算法(FedAvg)流程如下:服务器下发初始模型给各个客户端;客户端用本地数据计算梯度并执行一步或多步SGD,得到新的本地模型;客户端将模型更新(或模型本身)加密后发送给服务器;服务器聚合后更新全局模型,反复迭代。这种方式下原始数据从未离开本地,实现了“数据不动模型动”。
但联邦学习并非天然保证隐私。研究者已经证明,通过梯度可以反推出训练样本的部分信息,甚至重构出原始图像。因此实际部署中必须叠加差分隐私(DP)或安全聚合。差分隐私通过在梯度上添加校准噪声,使得攻击者无法区分单个样本是否存在于训练集中;安全聚合则利用秘密分享或同态加密,确保服务器只能看到聚合后的梯度,无法获取任何单个用户的贡献。纵向联邦学习(特征互补)还涉及实体对齐与联合建模中的隐蔽信道泄露,比如一方持有标签,通过联合建模可以推断另一方的特征分布。这些都需要在方案设计阶段进行严格的威胁建模。
联邦学习的落地面临异构系统、数据分布非独立同分布(Non-IID)、通信成本等挑战。当客户端数据分布差异很大时,FedAvg全局模型可能发散,可采用FedProx、SCAFFOLD等变体加入近端项约束。在移动端场景,设备掉线、网络延迟极为常见,需要设计异步聚合和压缩通信策略。一个简单的PyTorch联邦学习模拟核心逻辑如下:
# 模拟客户端本地训练
def client_update(model, train_loader, local_epochs):
model.train()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
for _ in range(local_epochs):
for data, target in train_loader:
optimizer.zero_grad()
output = model(data)
loss = F.nll_loss(output, target)
loss.backward()
optimizer.step()
return model.state_dict()
# 服务端聚合(FedAvg)
def server_aggregate(global_model, client_weights):
global_dict = global_model.state_dict()
for k in global_dict.keys():
global_dict[k] = torch.stack([client_weights[i][k].float() for i in range(len(client_weights))], 0).mean(0)
global_model.load_state_dict(global_dict)
return global_model
上述代码片段展示了最基本的FedAvg,未包含加密和DP。实际系统中还会使用gRPC进行客户端-服务器通信,并通过TLS保障传输安全,梯度在聚合前用同态加密或秘密分享保护。
可信执行环境:硬件隔离的安全区
TEE借助CPU硬件级隔离,创建一块独立于操作系统甚至VMM的飞地,即使宿主机OS被攻破,飞地内的代码和数据也无法被窥探。Intel SGX是目前x86平台最常用的TEE实现,它将应用划分为可信部分(enclave)和不可信部分,敏感计算在enclave内进行,内存页由硬件加密引擎保护,外部访问只能看到密文。AMD SEV和ARM TrustZone也是同类技术,但安全边界和隔离粒度不同。在数据可用不可见场景中,数据提供方将加密数据发送至TEE,数据在飞地内解密、计算,结果加密输出,全程明文仅存在于飞地内部。
相比纯密码学方案,TEE的计算性能接近明文,不需要复杂的密码协议,因此可以运行大型的机器学习推理甚至训练。但TEE并非无懈可击:侧信道攻击(如Meltdown、Spectre及其变体)可能泄露飞地内的数据;SGX需要信任Intel的远程认证服务(IAS),本质上引入了中心化信任;另外,enclave内存大小有限(SGX2支持动态扩容但仍受平台限制),应用需要做好内存管理。LibOS项目如Gramine、Occlum可以将未修改的Linux应用程序运行在enclave中,大大降低了迁移成本。
在实际工程中,通常将TEE与密码学协议组合使用。例如,数据发送方使用enclave的公钥加密数据,确保只有该飞地能解密;飞地内部执行联邦学习聚合或MPC的预处理,减少交互轮次;计算结果用接收方公钥加密后输出,防止信道窃听。这种混合架构既能利用TEE的性能优势,又能缓解单一技术点的信任风险。选型时需要评估硬件部署成本(SGX需特定CPU支持)、认证依赖方以及应用改造成本。
技术选型与落地权衡
三条路线并不是互斥的,许多生产系统会按需融合。例如纵向联邦学习里的安全求交阶段用PSI(MPC的一种),模型训练阶段用联邦学习,梯度聚合阶段用TEE加速。选择的核心考量维度包括:参与方数量、数据类型(结构化/非结构化)、计算复杂度、安全假设、延迟容忍度以及合规要求。如果参与方较多且仅需要简单的统计查询(如广告点击率统计),MPC中的秘密分享方案即可快速落地;如果是跨机构联合训练深度模型,联邦学习为基础框架,叠加差分隐私或安全聚合是常见路径;当对计算性能有极高要求且能接受TEE的信任模型时,基于SGX的方案可以处理复杂任务。
此外,无论采用哪种技术,都需要配套的密钥管理、认证授权和审计机制。数据可用不可见的安全边界不仅在于计算过程,还包括输入输出的隐写信道、元数据泄露和侧信道信息。例如,即使使用MPC保护了数据内容,查询发起频率和时间戳仍可能暴露业务逻辑。因此,完整的数据安全合规方案应当是技术、管理与法律约束的结合,隐私计算技术只是工具箱中的关键一环。