隐私计算-联邦学习

一、纵向联邦学习

联合多个参与者的共同样本的不同数据特征进行联邦学习,即各个参与者的训练数据是纵向划分的,称为纵向联邦学习,纵向联邦学习也称为样本对齐的联邦学习(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:各参与方对收到的梯度进行解密,并使用解密后的梯度结果更新各自的模型参数。

在这里插入图片描述

三、隐私保护协议

3.1 全同态加密

全同态加密(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)

3.2 半同态加密

半同态加密是一种加密技术,它可以对一些运算进行加密,使得加密后的结果仍然可以在密文状态下进行某些操作,而不需要解密密文。半同态加密可以支持一些简单的加法和乘法运算,但是不支持复杂的运算如多项式求解和逻辑运算等。

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)

3.3 差分隐私

差分隐私 (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):
  # 设置数据

3.4 不经意传输OT

不经意传输(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。

3.5 DH密钥交换

设x为私钥,其值为整数,随机且均匀的从区域[1,q-1]中选取,y为公钥。参考前述定义,离散对数问题(DLP)可描述为给定公共参数域(p,q,g)和y,确定x的问题。具有以下关系

在这里插入图片描述

在这里插入图片描述

3.6 RSA, 椭圆曲线 盲签名

RSA盲签名:

RSA盲签名是指使用RSA签名算法进行签名,但在签名过程中使用了盲化技术,以保护签名者的隐私和匿名性。

盲化技术是指在签名过程中,对签名者的输入数据进行处理,使得签名者的输入数据不被直接暴露在签名中,从而保护签名者的隐私和匿名性。

具体而言,RSA盲签名的过程可以分为以下步骤:

签名者选择一对RSA密钥,并将公钥公开。

签名者将要签名的消息进行盲化,即对消息进行一定的处理,使得签名者的输入数据不被直接暴露在签名中。

签名者使用盲化后的消息进行签名,得到签名值。

签名者将签名值进行反盲化,得到最终的签名结果。

验证者使用签名者公开的RSA公钥进行验签。

RSA盲签名的优点在于,它可以保护签名者的隐私和匿名性,因为签名中不包含签名者的输入数据。同时,它也具有RSA签名算法的优点,即安全性高、速度快等优点。

RSA盲签名可以应用于匿名投票、数字版权保护等领域。

椭圆曲线:

在这里插入图片描述

椭圆曲线是一种在数学和密码学中广泛使用的数学结构。在密码学中,椭圆曲线常用于实现公钥密码体制中的数字签名、密钥协商、身份认证等功能。

椭圆曲线是一个满足特定数学方程的点的集合。具体而言,椭圆曲线是一个二元三次方程的集合,其数学形式为:

y^2 = x^3 + ax + b

其中,a和b是曲线方程中的参数,通常取值于一个有限域。对于任意两个在椭圆曲线上的点,它们可以通过曲线上的运算(加法、减法、倍乘等)得到另一个点。这些点的集合构成了一个群,称为椭圆曲线上的点群。

在密码学中,椭圆曲线的安全性基于离散对数难题,即给定曲线上的两个点P和Q,求解满足P=kQ的正整数k的难度。如果椭圆曲线的参数选择得当,该问题是非常困难的,因此可以用于实现各种加密和签名算法。

椭圆曲线相比于传统的RSA算法等其他公钥密码算法,具有更高的安全性和更小的密钥长度,因此在一些资源受限的场景下得到了广泛应用。

四、现有框架,方式及其实现步骤细节

FATE

https://fate.readthedocs.io/en/latest/architecture/

在这里插入图片描述

在这里插入图片描述

Pysyft

https://blog.csdn.net/qq_45503700/article/details/127593073?spm=1001.2014.3001.5502

在这里插入图片描述

Secretflow

https://www.yuque.com/secret-flow/admin/mqx1p9

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Rosetta

https://github.com/LatticeX-Foundation/Rosetta

在这里插入图片描述

五、前景

横向联邦主要用样本扩展,多应用于医疗行业,主要难度在于特征对齐

纵向联邦使用分布式的部署方式,本地隐私数据不出库,使用同态加密隐私保护技术,加密中间计算,各方保护自己的模型,主要应用于金融,大数据行业。用于模型扩展和提升

安全查询,安全求交是很大的一个方向

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值