同态加密在机器学习中的应用:密文下计算

FreeGuideOnline 最新 2026-06-20

python

使用 TenSEAL(对 SEAL 的 Python 封装)演示

import tenseal as ts import numpy as np

1. 创建上下文,配置 CKKS 方案

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

2. 客户端加密数据

x = np.array([0.5, -0.3, 1.2]) # 明文特征 enc_x = ts.ckks_vector(context, x) # 加密

3. 服务器持有明文权重和偏置(或也可加密)

w = np.array([0.8, 0.1, -0.5]) b = 0.2

执行同态线性组合:y = w·x + b

enc_z = enc_x.dot(w) + b # 内部实现为密文-明文点乘

4. 同态 sigmoid 近似(例如 3 次多项式)

多项式: 0.5 + 0.15z - 0.0015z^3 (示意,非精确近似)

enc_z2 = enc_z * enc_z enc_z3 = enc_z2 * enc_z enc_pred = 0.5 + 0.15 * enc_z - 0.0015 * enc_z3

5. 客户端解密

y_encrypted = enc_pred.decrypt() print(y_encrypted) # 与明文计算结果近似