密态机器学习:基于同态加密的安全训练与推理
FreeGuideOnline
最新
2026-06-28
bash pip install tenseal
### 5.2 密钥与上下文创建
```python
import tenseal as ts
# 定义CKKS上下文(8192次多项式模数,系数模数链)
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() # 用于旋转等操作
5.3 数据加密与模型训练(逻辑回归)
import numpy as np
from sklearn.linear_model import LogisticRegression
# 生成模拟数据
X = np.random.randn(100, 5)
y = (X[:, 0] + X[:, 1] > 0).astype(float)
# 明文训练基线
clf = LogisticRegression().fit(X, y)
# 加密数据
enc_X = ts.ckks_vector(context, X.flatten()) # 注意形状
enc_y = ts.ckks_vector(context, y)
# 定义密态训练逻辑(伪代码,实际需手动实现梯度下降)
# TenSEAL提供了封装好的逻辑回归训练工具
from tenseal.tensors import _logreg
# 建议查阅官方文档获取完整训练API
5.4 加密推理
# 假设已有训练好的加密权重 enc_w
enc_sample = ts.ckks_vector(context, X[0])
enc_pred = enc_sample.dot(enc_w) # 线性部分
# 应用近似sigmoid
enc_prob = enc_pred.polyval([0.5, 0.25, -0.020833]) # 多项式系数
prob = enc_prob.decrypt()