概述
2022年所写
简介
CrypTen是Facebook在2019年10月开源的多方安全计算(MPC)框架,基于PyTorch构建,为隐私保护机器学习提供了完整的解决方案。
项目资源:
仓库:https://github.com/facebookresearch/CrypTen
教程:https://github.com/facebookresearch/CrypTen/tree/main/tutorials
文档:https://crypten.readthedocs.io/en/latest/
核心特性
隐私保护计算 - 数据和模型在加密状态下进行训练和推理
PyTorch兼容 - 完全兼容PyTorch API,学习成本低
多方协作 - 支持多个参与方在不泄露原始数据的情况下协同计算
GPU加速 - 针对GPU进行了深度优化
应用场景
MPC通过将数据分片给多个参与方来实现加密:
每个参与方只能看到数据片段,无法获取完整信息
所有计算在加密状态下进行
最终结果与明文计算完全一致
参与方无法从结果反推原始数据
示例: Alice有数据5,Bob有数据7,实际原始数据是12。双方各自乘以3后合并得到36,但都无法知道原始数据12。
系统架构
核心组件
ONNX导入器 - 支持从现有ML平台导入神经网络
import torchvision.models as models
import crypten
# 导入预训练模型
model = models.resnet18(pretrained=True)
model_enc = crypten.nn.from_pytorch(model, sample_input).encrypt().cuda()
# 加密推理
for image in dataset:
image_enc = crypten.cryptensor(image).cuda()
output_enc = model_enc(image_enc)
result = output_enc.get_plain_text()CrypTensor - 核心数据结构,实现PyTorch张量API
# PyTorch风格
x = torch.tensor([1, 2, 3])
y = torch.tensor([4, 5, 6])
z = x + y
# CrypTen风格
x_enc = crypten.cryptensor([1, 2, 3])
y_enc = crypten.cryptensor([4, 5, 6])
z_enc = x_enc + y_enc多方计算协议
算术秘密分享:适用于矩阵乘法、卷积等数学运算
二进制秘密分享:适用于逻辑运算,效率更高
实现原理
数据加密
基本用法
import crypten
import torch
crypten.init()
# 直接加密
x_enc = crypten.cryptensor([1, 2, 3])
# 从PyTorch张量加
y = torch.tensor([1.0, 2.0, 3.0])
y_enc = crypten.cryptensor(y)秘密分享机制
PRZS协议(伪随机零分享)
以3方为例,P1为数据源:
P1.share = 原始数据 + R3 - R2
P2.share = R1 - R3
P3.share = R2 - R1
聚合时随机数相互抵消,恢复原始数据。
分享类型转换
# 算术分享转二进制分享
x_binary = x_enc.to(crypten.mpc.binary)
# 二进制分享转算术分享
x_arithmetic = x_enc.to(crypten.mpc.arithmetic)数据解密
x = torch.tensor([1.0, 2.0, 3.0])
x_enc = crypten.cryptensor(x) # 加密
x_dec = x_enc.get_plain_text() # 解密解密过程:
1. 聚合所有参与方的分片数据
2. 通过FixedPointEncoder还原数据类型
算术运算
加法/减法
与公开值运算 - 仅主节点参与计算
与私有值运算 - 所有节点参与,随机数在聚合时抵消
乘法运算
采用Beaver三元组协议:
三元组生成方式:
TFP:可信第一方(默认)
TTP:可信第三方
HE:同态加密(暂不支持)
运算步骤:
1. 获取随机分享 [a], [b] 和 [c] = [a × b]
2. 用 [a], [b] 隐藏 [x], [y]
3. 公开 ε = [x] - [a] 和 δ = [y] - [b]
4. 计算 [z] = [c] + ε×[b] + [a]×δ + ε×δ
性能优化
GPU支持
整型与浮点映射优化
CUDA库深度集成
高性能通信原语(Gloo/NCCL)
通信优化
支持多进程并行计算
高效的参与方间数据交换
可信第三方辅助计算
实际应用
联邦学习场景
多个机构在不共享原始数据的情况下:
协同训练机器学习模型
保护各方数据隐私
获得与集中式训练相当的效果
隐私保护推理
模型提供方不泄露模型参数
数据提供方不泄露输入数据
双方协作完成推理任务
参考资料
[1] Knott B, Venkataraman S, Hannun A, et al. Crypten: Secure multi-party computation meets machine learning. Advances in Neural Information Processing Systems, 2021.
[2] CrypTen GitHub Repository: https://github.com/facebookresearch/CrypTen
[3] Facebook AI Blog: Crypten - A new research tool for secure machine learning with PyTorch