联邦学习同态加密以及常见问题
一、核心原理
同态加密的本质是保持运算结构的同态性:
-
数学表达:若加密函数为 EE,明文为 m1,m2m1,m2,满足:
其中 ⊕,⊗ 是密文空间的运算,对应明文空间的加法(+)或乘法(×)。
二、同态加密的级别
根据支持的运算类型分为:
-
部分同态(PHE):
-
仅支持单一运算(如加法或乘法)。
-
经典方案:RSA(乘法同态)、Paillier(加法同态)。
-
-
些许同态(SHE):
-
支持有限次加法和乘法(受噪声增长限制)。
-
代表方案:BGV、BFV、CKKS。
-
-
全同态(FHE):
-
支持任意次加法和乘法运算(理论上可执行任何计算)。
-
突破:Gentry的自举(Bootstrapping) 技术(2009年),通过降低噪声实现无限计算。
-
三、为何需要HE(同态加密)?联邦学习的隐私风险
-
参数泄露:
-
梯度(如图像分类)可能包含训练样本特征。
-
模型权重(如线性回归)可反推输入数据。
-
-
中间攻击:
-
恶意服务器或中间节点可窃取/篡改参数。
-
-
HE解决方案:
-
客户端加密参数 → 服务器聚合密文 → 返回加密结果
-
全程参数以密文形式存在,服务器无法解密。
-
四、联邦学习中结合同态加密
在联邦学习中,同态加密用于保护参与方(如客户端)的本地数据隐私:
- 参数加密:客户端上传的模型梯度或参数 ( \theta ) 先加密为 ( E(\theta) )。
- 安全聚合:服务器直接在加密数据上聚合(如求和),得到 ( E(\sum \theta) )。
- 结果解密:只有拥有私钥的授权方(如协调者)能解密聚合结果,获得全局模型更新。
(模拟加法同态加密):
# 模拟Paillier加密的加法同态
def encrypt(pk, m):return m + pk # 简化示例def decrypt(sk, c):return c - sk # 简化示例pk, sk = 123, 123 # 公钥和私钥
theta1, theta2 = 5, 7
c1, c2 = encrypt(pk, theta1), encrypt(pk, theta2)
aggregated = c1 + c2 # 密文相加
result = decrypt(sk, aggregated) # 解密后为 5+7=12
具体流程
-
初始化:
-
服务器生成密钥:公钥(PK)广播给客户端,私钥(SK)保留或由可信第三方保管。
-
初始化全局模型
。
-
-
本地训练:
-
客户端i下载当前加密全局模型
。
-
本地解密:
(若SK在客户端)。
-
用本地数据计算梯度
。
-
-
加密上传:
-
客户端用PK加密梯度:
。
-
上传
至服务器。
-
-
同态聚合:
-
服务器执行密文加法(无需解密):
-
更新全局模型(密文操作):
(需HE支持标量乘法)
-
-
广播新模型:
-
服务器将
广播给所有客户端。
-
客户端解密后进入下一轮训练。
-
五、关键技术挑战与解决方案
1. 计算开销优化
问题 | 解决方案 |
---|---|
密文计算速度慢(10³~10⁶倍) | 方案选型:优先选加法同态(如Paillier)或近似计算(CKKS) |
通信带宽压力大 | 梯度压缩:稀疏化/量化后再加密 |
客户端资源受限 | 层级优化:仅加密敏感层(如最后一层梯度) |
2. 隐私-效率平衡
需求 | 推荐方案 |
---|---|
高精度整数计算 | BFV/BGV(如金融特征权重) |
浮点数机器学习 | CKKS(支持近似计算,适合CNN/RNN梯度) |
低延迟场景 | Paillier(仅加法,聚合速度最快) |
3. 安全性增强
-
客户端验证:结合零知识证明(ZKP)验证客户端上传参数合法性。
-
多密钥HE:允许不同客户端使用各自公钥加密(需服务器转换密文)。
4 优点
- 隐私保护:数据始终以密文形式处理,避免泄露原始信息。
- 安全性:即使攻击者获取密文和计算过程,也无法推断明文。
- 适用性:适合外包计算、联合分析等场景。
5 缺点
- 计算开销:尤其是全同态加密,计算复杂度比明文高几个数量级。
- 通信成本:密文体积膨胀(如FHE密文可达明文的千倍)。
- 功能限制:部分同态仅支持特定操作,全同态仍需优化实用性。
六、同态加密常见问题
(1)PK公钥的作用?
在同态加密,将公钥(PK)广播给客户端的主要目的是为了让客户端能够使用它来加密他们自己的敏感数据,然后再将加密后的数据发送给服务器进行处理。
-
数据加密
-
客户端需要PK来加密数据: 同态加密方案是公钥加密的一种。公钥(PK)就是专门设计用来加密数据的密钥。
-
加密目标: 客户端拥有需要保护的原始明文数据(例如,医疗记录、财务信息、位置数据等)。他们需要使用接收到的公钥(PK)对这些明文数据进行加密,生成对应的密文(Ciphertext)。
-
加密后的数据: 只有使用对应的私钥(SK,由数据所有者或授权方秘密持有)才能正确解密这些密文,恢复出原始明文。服务器或其他任何仅持有公钥(PK)的实体都无法解密这些密文。
-
-
支持同态操作
-
同态特性的基础: 公钥(PK)不仅仅是用来加密的,它本身也包含了执行同态操作所需的信息结构。当服务器接收到用这个特定PK加密的密文后,它可以在这个PK定义的“框架”下,对密文执行特定的计算操作(如加法、乘法等)。
-
确保操作正确性: 使用同一个PK加密的所有密文,在服务器端执行同态运算时,能够保证运算结果(另一个密文)在用正确的私钥(SK)解密后,等同于在原始明文数据上执行了相同的运算。PK为这种密文上的运算提供了数学基础。
-
广播的必要性:
-
方便多个客户端: 在典型的场景中(如云服务),往往有多个客户端需要向同一个服务器(或计算服务)提交加密数据。广播PK意味着一次性将这个公钥发送给所有潜在的客户端(或使其可公开获取),而不是为每个客户端单独发送一次。这极大地简化了部署和管理。
-
公开性: 公钥(PK)本身是设计为可以公开的。即使被攻击者获取到PK,它也不能用来解密任何用该PK加密的密文(这是公钥加密的基本安全属性)。因此,广播PK本身不会引入额外的安全风险。
-
效率: 广播是一种高效的分发方式,尤其适用于客户端数量众多或动态变化的场景(如Web服务)。
-
-
(2)为什么是“广播”而不是其他方式?
-
非秘密性: PK(公钥)不需要保密。
-
可获取性: 服务器希望所有需要提交数据的客户端都能轻松、可靠地获得这个PK。广播(例如,放在服务器的公开API端点、下载页面、或包含在客户端SDK中)是最直接、最可靠的方式确保所有客户端都使用同一个正确的PK进行加密。如果每个客户端需要单独申请PK,会增加复杂性和延迟。
-
标准化: 广播公钥是公钥基础设施(PKI)和大多数加密通信协议(如HTTPS/TLS)中的标准做法。客户端在连接时就能方便地获取公钥。
(3)私钥保管方法
硬件安全模块(HSM) 使用专用硬件设备存储私钥,HSM提供物理隔离和防篡改保护,避免私钥被非法访问或泄露。HSM通常支持高安全级别的加密操作和密钥生成。
多重签名方案 将私钥分片并分散存储,需多个分片组合才能恢复完整私钥。例如,采用Shamir秘密共享方案,将私钥拆分为多个部分,分发给不同可信方保管。
最小权限原则
服务器仅需执行密文计算,无需解密权限。私钥由客户端控制,符合最小权限原则,降低系统攻击面。
(4)如果广播公钥的过程中,被攻击者获取了公钥,并且上传一个攻击者的公钥,那么客户端是怎么区分这个公钥是谁传的呢?
防止公钥替换估计的机制
公钥替换攻击(即中间人攻击)可以通过以下方法进行防范:
数字证书与CA信任链:客户端依赖数字证书和证书颁发机构(CA)的信任链验证公钥的真实性。合法服务器的公钥会由受信任的CA签名,生成包含域名、公钥和CA签名的证书。客户端验证证书的签名是否来自可信CA,并检查域名是否匹配。
#使用Python验证证书(简化版)(ai所得)
import ssl
context = ssl.create_default_context()
context.verify_mode = ssl.CERT_REQUIRED
context.check_hostname = True
公钥指纹或固定: 应用预先存储合法公钥的指纹(如SHA-256哈希),在连接时对比接收到的公钥指纹。若指纹不匹配,则终止连接。
DANE:通过DNS记录(TLSA)发布服务器的公钥或证书哈希,客户端查询DNS验证公钥的合法性。这需要DNSSEC确保DNS响应未被篡改。
Web of Trust(PGP模型): 在PGP等系统中,用户通过第三方签名构建信任网络。公钥的真实性由其他可信用户的签名数量决定。
TLS协议增强 现代TLS(如1.3):要求服务器证书在握手时发送,且支持OCSP Stapling实时验证证书状态,减少依赖CRL的延迟。
(5)总结流程与PK
-
密钥生成: 数据所有者(或可信的密钥管理服务)生成一对密钥:公钥(PK)和私钥(SK)。SK被严格保密。
-
广播PK: 服务器(或服务提供者)将PK广播给所有需要提交数据的客户端。PK可以被公开访问。
-
客户端加密: 客户端使用获取到的PK对自己的敏感明文数据进行加密,得到密文。
-
客户端提交: 客户端将加密后的密文发送给服务器。
-
服务器计算: 服务器在不解密密文的情况下,利用同态加密的特性,使用PK(或相关的评估密钥)在收到的密文上执行指定的计算(如搜索、统计、机器学习推理等),得到计算结果密文。
-
返回结果(可选): 服务器将计算结果密文返回给客户端或数据所有者。
-
解密结果: 拥有私钥(SK)的客户端或数据所有者对计算结果密文进行解密,得到最终的计算结果明文。