8月28日,在第七届中阿博览会技术转移与创新合作交流会上,中阿技术转移中心正式面向阿拉伯国家推出500项先进适用技术成果,标志着中阿峰会“绿色创新共同...
2025-08-29 0
安全多方计算(MPC)允许多个参与方在不泄露各自私有数据的前提下协同完成计算任务,是隐私保护领域的核心技术之一。以下将介绍 3 个主流开源框架的详细特性,并通过代码实例演示其使用方法。
假设有两个参与方(Alice 和 Bob),分别拥有特征数据和标签数据,希望联合训练线性回归模型而不泄露各自数据。
import torchimport cryptenimport numpy as np# 1. 初始化CrypTen环境(指定参与方数量,这里模拟两方计算)crypten.init()crypten.set_default_protocol(crypten.mpc.protocol.SecureNN) # 使用SecureNN协议# 2. 模拟两方私有数据(实际场景中由不同参与方各自持有)# Alice拥有特征数据X(私有)X = torch.tensor([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])# Bob拥有标签数据y(私有)y = torch.tensor([3.0, 7.0, 11.0]) # 实际关系:y = 1*X1 + 1*X2# 3. 数据加密:将数据转换为加密张量(CrypTensor)# 注意:在真实场景中,加密操作在各自本地完成,不会传输明文X_enc = crypten.cryptensor(X, src=0) # 参与方0(Alice)加密自己的数据y_enc = crypten.cryptensor(y, src=1) # 参与方1(Bob)加密自己的数据# 4. 定义加密模型(线性回归)class LinearModel(crypten.nn.Module): def __init__(self): super().__init__() self.linear = crypten.nn.Linear(2, 1) # 输入维度2,输出维度1 def forward(self, x): return self.linear(x)# 5. 初始化模型并加密model = LinearModel()model.encrypt() # 加密模型参数# 6. 定义损失函数和优化器(均在加密状态下运行)criterion = crypten.nn.MSELoss()optimizer = crypten.optim.SGD(model.parameters(), lr=0.01)# 7. 加密训练(核心:所有计算在密态下进行)model.train()for epoch in range(1000): # 前向传播(加密数据输入加密模型) outputs = model(X_enc) # 计算损失(加密状态下的MSE) loss = criterion(outputs, y_enc.reshape(-1, 1)) # 反向传播与参数更新 optimizer.zero_grad() loss.backward() optimizer.step() if (epoch + 1) % 200 == 0: # 解密损失值用于监控(仅泄露损失,不泄露原始数据) print(f"Epoch [{epoch+1}/1000], Loss: {loss.get_plain_text().item():.4f}")# 8. 解密模型参数(得到联合训练的结果)model.decrypt()print("训练得到的权重:", model.linear.weight.data)print("训练得到的偏置:", model.linear.bias.data)
三个参与方分别持有私有数值,希望计算它们的平均值而不泄露各自数值。
1、准备工作:安装 MP-SPDZ 并编译
git clone https://github.com/data61/MP-SPDZ.gitcd MP-SPDZmake -j8 # 编译核心组件
2、编写 MPC 程序(.mpc 文件):定义多方计算逻辑
创建average.mpc文件:
# 定义参与方数量(3个参与方)N = 3# 每个参与方输入自己的私有数值a = sint.get_input_from(0) # 参与方0的输入b = sint.get_input_from(1) # 参与方1的输入c = sint.get_input_from(2) # 参与方2的输入# 计算总和(加密状态下)total = a + b + c# 计算平均值(加密状态下)avg = total / N# 所有参与方获取结果(解密)avg.output_all() # 输出到所有参与方
3、生成预处理数据:MP-SPDZ 需要预计算一些加密材料(如乘法三元组)
./Scripts/setup-ssl.sh # 生成SSL证书(用于通信加密)./gen_input_avg # 生成输入文件模板(自动创建Player-Data目录)
4、设置输入数据:在Player-Data目录下为每个参与方设置输入
5、运行 MPC 计算:启动 3 个参与方进程
# 终端1:参与方0./mascot-party.x 0 average# 终端2:参与方1./mascot-party.x 1 average# 终端3:参与方2./mascot-party.x 2 average
6、输出结果:三方均会收到结果10((5+10+15)/3=10),但始终不知道其他方的输入值
两个参与方(银行和电商)分别持有用户的不同特征(银行有收入数据,电商有消费数据),希望通过 MPC 计算特征交叉项(收入 × 消费)用于联合建模。
import secretflow as sffrom secretflow.data.vertical import VDataFramefrom secretflow.preprocessing.scaler import StandardScalerfrom secretflow.utils.simulation.datasets import load_linear# 1. 初始化SecretFlow环境(模拟两方计算)sf.init(['alice', 'bob'], address='local') # alice和bob为参与方名称alice, bob = sf.PYU('alice'), sf.PYU('bob') # 创建参与方对象# 2. 加载垂直分割数据(模拟银行和电商的数据)# 数据格式:id为用户标识,alice_data含收入特征,bob_data含消费特征data = load_linear(partitions={alice: [0, 1], bob: [0, 2]}, # 0为id列,1为收入,2为消费 label=3, # 标签列(假设由bob持有) num_samples=1000)vdf = VDataFrame(data) # 垂直数据帧,自动管理各方数据# 3. 数据预处理(各方本地标准化,不泄露数据)scaler = StandardScaler()vdf_scaled = scaler.fit_transform(vdf)# 4. 使用MPC进行特征交互(计算收入×消费的交叉项)# 选择SPU作为MPC计算引擎(SecretFlow的安全计算单元)spu = sf.SPU(sf.utils.testing.cluster_def(['alice', 'bob']))# 将特征发送到SPU进行加密计算income = vdf_scaled['1'].to(spu) # alice的收入特征(加密)consumption = vdf_scaled['2'].to(spu) # bob的消费特征(加密)# 加密状态下计算交叉项(收入×消费)cross_term = income * consumption # MPC乘法操作# 5. 获取计算结果(解密交叉项,仅用于后续建模)cross_term_plain = cross_term.to(alice) # 将结果发送给alice(也可发送给bob)print("前5条交叉项结果:", cross_term_plain.values[:5])
框架 | 优势场景 | 技术门槛 | 性能表现 | 生态成熟度 |
CrypTen | 隐私保护机器学习 | 低(PyTorch 用户) | 中(适合小规模模型) | 中等 |
MP-SPDZ | 通用安全计算 | 中(需了解 MPC 协议) | 高(C++ 优化) | 高 |
SecretFlow | 工业级隐私计算应用 | 中(高阶 API 降低门槛) | 高(分布式优化) | 高 |
通过上述框架,开发者可在保护数据隐私的前提下实现多方协同计算,满足金融、医疗、政务等敏感领域的合规需求。
相关文章
8月28日,在第七届中阿博览会技术转移与创新合作交流会上,中阿技术转移中心正式面向阿拉伯国家推出500项先进适用技术成果,标志着中阿峰会“绿色创新共同...
2025-08-29 0
8月29日上午,辛巴妻子初瑞雪在丈夫宣布退网后首次开播。这场直播预约人数超800万,开场十几分钟观众就突破200万。辛巴本人通过电话连线简单露面,表示...
2025-08-29 0
亲,这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是好牌,而且好像能看到-人的牌一样。所以很多小伙伴就怀疑这...
2025-08-29 0
甘肃礼县大堡子山,一个曾因农民挖"龙骨"而引发盗墓狂潮的普通土包,最终被证实是失落千年的秦国祖坟。这一发现不仅改写了秦史,更被专家评价为"比兵马俑还震...
2025-08-29 0
这个七夕,华为乾崑车云用一个创意视频,让我们看到了科技的浪漫和温度。在这条视频中,男主角轻踢轮胎触发车辆“哨兵模式”告警,女主角随即通过手机APP接收...
2025-08-29 0
您好:这款游戏可以开挂,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是好牌,而且好像能看到-人的牌一样。所以很多小伙伴就怀疑这...
2025-08-29 0
今天下午,小米举办了备受瞩目的发布会,正式推出了新一代小米澎湃 OS 3 系统,发布会以 “事事顺心” 为主题,为用户带来了诸多令人惊喜的更新。从性能...
2025-08-29 0
发表评论