Skip to content

同态加密联邦学习

同态加密(Homomorphic Encryption, HE)允许在密文上直接进行计算,是联邦学习隐私保护的核心密码学工具。

同态加密联邦学习

同态加密分类

类型支持运算性能代表方案
半同态 (PHE)加法Paillier
某种同态 (SHE)加法+有限乘法BFV
全同态 (FHE)加法+乘法(无限)CKKS, TFHE

Paillier 加法同态

联邦学习中最常用的半同态加密:

python
from phe import paillier

class PaillierFedAvg:
    def __init__(self, public_key, private_key):
        self.pub_key = public_key
        self.priv_key = private_key

    def client_encrypt(self, model_update):
        """客户端加密模型更新"""
        encrypted = []
        for param in model_update:
            # 将浮点数放大为整数后加密
            scaled = int(param * 1e6)
            encrypted.append(self.pub_key.encrypt(scaled))
        return encrypted

    def server_aggregate(self, encrypted_updates, num_clients):
        """服务端在密文上聚合(无需解密)"""
        aggregated = []
        for params in zip(*encrypted_updates):
            # 同态加法:E(a) × E(b) = E(a+b)
            sum_enc = params[0]
            for enc in params[1:]:
                sum_enc = sum_enc + enc  # 同态加法
            aggregated.append(sum_enc)
        return aggregated

    def server_decrypt(self, aggregated, num_clients):
        """服务端解密聚合结果"""
        result = []
        for enc_val in aggregated:
            decrypted = self.priv_key.decrypt(enc_val)
            result.append(decrypted / (num_clients * 1e6))
        return result

CKKS 方案

CKKS 支持近似计算,适合神经网络的浮点运算:

python
# 使用 TenSEAL 库
import tenseal as ts

context = ts.context(
    ts.SCHEME_TYPE.CKKS,
    poly_modulus_degree=8192,
    coeff_mod_bit_sizes=[60, 40, 40, 60]
)
context.global_scale = 2**40

# 加密向量
vec = [1.0, 2.0, 3.0]
enc_vec = ts.ckks_vector(context, vec)

# 同态加法
enc_sum = enc_vec + enc_vec  # E(v + v)

# 同态乘法
enc_product = enc_vec * enc_vec  # E(v * v)

# 解密
result = enc_sum.decrypt()

性能对比

操作明文PaillierCKKS
加密 1M 参数-30s5s
同态加法0.001s2s0.5s
同态乘法0.001s不支持3s
解密 1M 参数-10s2s

HE 选型建议

  1. 仅需聚合(加法):Paillier 足够
  2. 需要乘法(如模型推理):CKKS
  3. 大规模参数:先压缩/量化再加密
  4. 延迟敏感:考虑 GPU 加速 HE 运算

计算开销

同态加密的计算开销比明文高 100-10000 倍。对于大模型(参数量 > 1B),直接 HE 聚合不可行。必须结合梯度压缩、量化或子采样来减少加密数据量。

相关资源

最近更新