cc
发布于 2025-12-30 / 3 阅读
0
0

Facebook CrypTen 学习指南

概述

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


评论