赞
踩
联合多个参与者的共同样本的不同数据特征进行联邦学习,即各个参与者的训练数据是纵向划分的,称为纵向联邦学习,纵向联邦学习也称为样本对齐的联邦学习(Sample-Aligned Federated Learning),即纵向联邦学习的参与者的训练样本是对齐的
纵向联邦逻辑回归举例:
https://fate.readthedocs.io/en/latest/federatedml_component/logistic_regression/
纵向联邦xgboost流程图:
https://fate.readthedocs.io/en/latest/federatedml_component/ensemble/
联合多个参与者的具有相同特征的多行样本进行联邦学习,即各个参与者的训练数据是横向划分的,称为横向联邦学习。图2给出了一个横向划分表格的示例。横向联邦使训练样本的总数量增加。
横向联邦训练流程:
步骤1:各参与方在本地计算模型梯度,并使用同态加密、差分隐私或秘密共享等加密技术,对梯度信息进行掩饰,并将掩饰后的结果(简称为加密梯度) 发送给聚合服务器。
步骤2:服务器进行安全聚合(secure aggregation)操作,如使用基于同态加密的加权平均。
步骤3:服务器将聚合后的结果发送给各参与方。
步骤4:各参与方对收到的梯度进行解密,并使用解密后的梯度结果更新各自的模型参数。
全同态加密(Fully Homomorphic Encryption,FHE)是一种加密技术,允许在加密的状态下对密文进行运算,最终得到的结果在解密之后与原始明文的运算结果是完全相同的。这种加密技术可以实现云计算中的数据隐私保护,同时保持数据可用性。
传统的加密技术只能在明文状态下进行运算,而全同态加密技术允许在密文状态下进行运算,因此可以避免在计算过程中泄露敏感信息。它可以实现一系列复杂的计算操作,如加法、减法、乘法、逻辑运算等。
全同态加密是一项非常重要的技术,但是在实际应用中,由于其计算复杂度很高,导致效率问题仍然存在。因此,目前的研究方向是如何提高全同态加密的效率,以便更广泛地应用于实际场景中。
ckks 全同态代码示例
import tenseal as ts # 初始化加密参数 context = ts.context(ts.SCHEME_TYPE.CKKS, poly_modulus_degree=8192, coeff_mod_bit_sizes=[60, 40, 40, 60]) context.global_scale = 2 ** 40 # 创建秘钥 sk = ts.context.NTTVector(secret=True, context=context) sk.uniform(1.0 / context.max_scale) # 创建加密器和解密器 public_key = sk.copy() public_key.make_unit_vector() encryptor = ts.encryptor(context, public_key) decryptor = ts.decryptor(context, sk) # 加密明文 a = [3.14159265359] b = [2.71828182846] enc_a = encryptor.encrypt(ts.plain_tensor(a)) enc_b = encryptor.encrypt(ts.plain_tensor(b)) # 密文加法 enc_c = enc_a + enc_b # 解密结果 dec_c = decryptor.decrypt(enc_c) result = dec_c[0][0] print(result)
半同态加密是一种加密技术,它可以对一些运算进行加密,使得加密后的结果仍然可以在密文状态下进行某些操作,而不需要解密密文。半同态加密可以支持一些简单的加法和乘法运算,但是不支持复杂的运算如多项式求解和逻辑运算等。
https://en.wikipedia.org/wiki/Paillier_cryptosystem
Paillier半同态加密的示例代码:
import random from phe import paillier # 生成密钥对 public_key, private_key = paillier.generate_paillier_keypair() # 明文加密 a = 42 b = 37 enc_a = public_key.encrypt(a) enc_b = public_key.encrypt(b) # 密文加法 enc_c = enc_a + enc_b # 解密结果 dec_c = private_key.decrypt(enc_c) print(dec_c)
差分隐私 (differential privacy) 是一种保护个人隐私的方法,它可以通过对原始数据添加一些随机噪声,来使得不同数据集之间的差异不至于泄露个人隐私。简单来说,差分隐私是一种加噪声的隐私保护技术,可以在保护个人隐私的同时,尽可能地保留数据的有用信息。
具体来说,差分隐私会在对数据进行处理前,将其添加一些随机噪声,以使得处理后的结果不会直接泄露原始数据。这些噪声通常是随机生成的,或者可以基于某些统计模型生成。添加的噪声的强度可以通过隐私参数 epsilon来控制,这个参数越小,噪声就越强,隐私保护就越好,但是对数据的有用信息的保留就越少。相反,隐私参数越大,噪声就越弱,隐私保护就越差,但是对数据的有用信息的保留就越多。
差分隐私可以应用在许多场景中,例如数据挖掘、机器学习、社交网络等。其中,最典型的应用是在隐私保护数据发布上。通过差分隐私技术,我们可以在不泄露原始数据的前提下,发布处理后的数据,以供其他人使用。
差分隐私的 Python 代码示例,使用了 PyDP 库:
from pydp.algorithms.laplacian import BoundedMean from pydp.algorithms.laplacian import BoundedSum from pydp.distributions import Laplace # 加噪声示例 def add_noise(data, epsilon): # 设置数据范围和隐私参数 lower, upper = 0, 100 sensitivity = upper - lower # 生成拉普拉斯分布 laplace = Laplace(0, sensitivity / epsilon) # 生成加噪声器 noise = laplace.sample() # 对数据加噪声 noisy_data = data + noise # 对加噪声后的数据进行截断 return max(lower, min(noisy_data, upper)) # 计算平均数示例 def compute_mean(data, epsilon): # 设置数据范围和隐私参数 lower, upper = 0, 100 sensitivity = upper - lower # 初始化差分隐私算法 bounded_mean = BoundedMean(lower, upper, epsilon=epsilon) # 对数据进行处理并加噪声 result = bounded_mean.quick_result(data) # 对加噪声后的结果进行截断 return max(lower, min(result, upper)) # 计算和示例 def compute_sum(data, epsilon): # 设置数据
不经意传输(oblivious transfer)是一个密码学协议,在这个协议中,消息发送者从一些待发送的消息中发送一条给接收者,但事后对发送了哪一条消息仍然oblivious(不知道),这个协议也叫茫然传输协议。
协议执行过程分为4个步骤:
1.Alice有n条消息,则产生n个RSA公私钥对,并将n个私钥保留,n个公钥发送给Bob。
2.Bob随机产生一个大整数key,假定Bob想要获得第t条消息,则Bob用收到的第t个RSA公钥加密大整数key,加密计算结果为s,Bob将s发送给Alice。
3.Alice用保留的n个RSA私钥,依次解密s,获得n个解密结果,依次为{key1,key2,…,keyt,…,keyn};利用对称加密算法,利用key1keyn,加密对应的消息m1mn,得到密文消息M1Mn,将M1Mn发送给Bob。
4.Bob利用自己掌握的大整数key作为密钥,对第t条密文Mt进行对称解密,则得到想要的第t条原始明文消息mt。
设x为私钥,其值为整数,随机且均匀的从区域[1,q-1]中选取,y为公钥。参考前述定义,离散对数问题(DLP)可描述为给定公共参数域(p,q,g)和y,确定x的问题。具有以下关系
RSA盲签名是指使用RSA签名算法进行签名,但在签名过程中使用了盲化技术,以保护签名者的隐私和匿名性。
盲化技术是指在签名过程中,对签名者的输入数据进行处理,使得签名者的输入数据不被直接暴露在签名中,从而保护签名者的隐私和匿名性。
具体而言,RSA盲签名的过程可以分为以下步骤:
签名者选择一对RSA密钥,并将公钥公开。
签名者将要签名的消息进行盲化,即对消息进行一定的处理,使得签名者的输入数据不被直接暴露在签名中。
签名者使用盲化后的消息进行签名,得到签名值。
签名者将签名值进行反盲化,得到最终的签名结果。
验证者使用签名者公开的RSA公钥进行验签。
RSA盲签名的优点在于,它可以保护签名者的隐私和匿名性,因为签名中不包含签名者的输入数据。同时,它也具有RSA签名算法的优点,即安全性高、速度快等优点。
RSA盲签名可以应用于匿名投票、数字版权保护等领域。
椭圆曲线是一种在数学和密码学中广泛使用的数学结构。在密码学中,椭圆曲线常用于实现公钥密码体制中的数字签名、密钥协商、身份认证等功能。
椭圆曲线是一个满足特定数学方程的点的集合。具体而言,椭圆曲线是一个二元三次方程的集合,其数学形式为:
y^2 = x^3 + ax + b
其中,a和b是曲线方程中的参数,通常取值于一个有限域。对于任意两个在椭圆曲线上的点,它们可以通过曲线上的运算(加法、减法、倍乘等)得到另一个点。这些点的集合构成了一个群,称为椭圆曲线上的点群。
在密码学中,椭圆曲线的安全性基于离散对数难题,即给定曲线上的两个点P和Q,求解满足P=kQ的正整数k的难度。如果椭圆曲线的参数选择得当,该问题是非常困难的,因此可以用于实现各种加密和签名算法。
椭圆曲线相比于传统的RSA算法等其他公钥密码算法,具有更高的安全性和更小的密钥长度,因此在一些资源受限的场景下得到了广泛应用。
https://fate.readthedocs.io/en/latest/architecture/
https://blog.csdn.net/qq_45503700/article/details/127593073?spm=1001.2014.3001.5502
https://www.yuque.com/secret-flow/admin/mqx1p9
Rosetta
https://github.com/LatticeX-Foundation/Rosetta
五、前景
横向联邦主要用样本扩展,多应用于医疗行业,主要难度在于特征对齐
纵向联邦使用分布式的部署方式,本地隐私数据不出库,使用同态加密隐私保护技术,加密中间计算,各方保护自己的模型,主要应用于金融,大数据行业。用于模型扩展和提升
安全查询,安全求交是很大的一个方向
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。