一种面向机器学习全流程的隐私保护方法
文献发布时间:2023-06-19 11:11:32
技术领域
本发明涉及人工智能安全隐私保护方法,具体涉及一种面向机器学习全流程的隐私保护方法。
背景技术
机器学习已被证明是一种非常有效的用于产生、预测模型的工具,该预测模型广泛应用于医疗保健,图像分类,财务等应用中。随着训练数据量的增加,这些模型的准确性变得更好。机器学习模型可以通过汇总多个贡献者的数据来获取大量训练数据,但是通常参与机器学习计算的数据具有极高的机密性和价值,因此做到数据存储、数据训练、数据推理的全流程加密是十分必要的。
发明内容
发明目的:针对现有技术存在的问题,本发明的目的是提供一种面向机器学习全流程的隐私保护方法。
技术方案:本发明所述的一种面向机器学习全流程的隐私保护方法,包括以下步骤:
(1)在数据训练阶段,基于隐私保护数据聚合算法进行模型训练,用户数据保留在本地计算训练,仅通过模型参数同中央服务器之间直接交互;
(2)针对模型数据,采用改良的Blowfish分组密码算法来对用户的模型数据进行隐私保护,实现用户模型数据的轻量级加解密;
(3)在推理阶段,基于安全多方计算的智能算法进行隐私保护。
进一步的,步骤(1)具体包括如下内容:
定义有N个参与训练的节点,每个节点的数据在本地进行模型训练,仅将学习到的模型参数发送中央服务器,再通过安全聚合得到主模型;服务器将安全聚合得到的主模型发还回给这些节点,并重复此过程;
其主要步骤为:对N个节点进行选择,在选择结束的报告阶段,服务器将等待每个节点返回训练后的梯度参数;服务器接收到参数后,使用隐私保护数据聚合算法来聚合它们并通知节点下一个请求时间。由每个节点训练的模型在训练过程中不会互相干扰。在每个用户返回梯度之前,需要在测试数据集上运行本地模型,并使用测试准确性来评估模型的精确度,模型的精确度也是用户选择阶段的关键参考指标。该过程重复多次,直到全局模型收敛为止。
进一步的,步骤(2)包括如下内容:
(2.1)在密钥预处理过程,Blowfish算法使用原密钥的p盒与s盒来对输入的密钥进行预处理;
(2.2)在密钥加密过程,Blowfish算法先对待加密的明文数据进行分组,将明文数据分为左右两个块L_0与R_0;第i轮的加密过程依赖于第i-1轮的加密结果:L_i=R_i-1;R_i=L_i-1xor F(R_i-1,K_i-1);
(2.3)在密钥解密过程,由于Blowfish算法的对称特性,其解密过程就是加密过程的逆过程,因此解密过程中使用与加密过程相同的密钥,在解密前也需要对密钥进行预处理。优选的,直接使用加密前密钥的预处理结果来使用。
进一步的,步骤(3)中,用户数据在本地加密后发送给服务器,而服务器直接在密文上进行推理计算,无须解密,推理结果返回给用户,再由用户自动解密,得到推理结果;使用同态加法、同态乘法算法来构造卷积,池化、近似各激活函数,再基于安全共享,进行数据安全交互,构建安全的、隐私保护的机器学习推理。
优选的,步骤(3)中,采用Paillier加密算法,面向加法和乘法采取密文计算。数据完成加密后,数据的传输交互采用SPDZ协议进行秘密共享。使用安全多方计算进行数据安全交互
有益效果:
和现有技术相比,本发明具有如下显著进步:1、本发明所采用的隐私保护数据聚合算法,是一种分布式深度学习解决方案。数据在本地训练,仅仅通过模型参数与中央服务器进行交互,通过数据聚合计算技术很大程度上保护了用户数据训练过程的隐私。2、为了保护用户训练生成的模型隐私,实现模型数据的轻量级加解密,本发明采用Blowfish分组密码算法来对用户的模型数据进行隐私保护方案设计。为满足计算平台对计算效率的需求,本算法通过多线程计算、分段加密、秘钥拆分和S盒比特变换机制,保障了平台在实时响应要求下,快速实现模型数据加解密过程。3、为了保护用户推理数据的隐私,面向六种智能算法的安全多方计算技术是使用同态加法和同态乘法来构造卷积、池化层功能,以及近似模拟各种激活函数例如Sigmoid、ReLU等,再利用了基于安全共享(Secret Sharing)的安全多方计算,以实现进行数据安全交互,从而实现各个机器学习算法的加密预测功能。4、在军事领域具有一定的适用价值。
附图说明
图1为隐私保护数据聚合算法架构图;
图2为隐私保护数据聚合算法效果图;
图3为Blowfish算法加密流程图;
图4为Blowfish算法解密流程图。
图5为基于Blowfish的用户数据轻量级加解密算法架构图;
图6为面向智能算法的加密推理架构图;
图7为面向智能算法的加密推理效果图。
具体实施方式
下面结合附图和具体实施方式对本发明做进一步地说明。
本发明的一种面向机器学习全流程的隐私保护方法,采用面向用户数据的轻量级加解密算法、基于安全多方计算的智能算法设计和隐私保护数据聚合技术保护用户的模型和数据隐私,主要包括以下内容:
(1)针对数据训练阶段的隐私保护。
(2)针对模型数据的隐私保护。
(3)针对推理阶段的隐私保护。
步骤(1)采用的隐私保护数据聚合算法的主要思想是通过用户数据在本地训练,仅通过权重和中央服务器交互从而保护用户数据的训练过程。
本实施例中,虚拟了100个参与训练的节点,每个节点的数据都分散地在其本地训练其模型,仅将学习到的模型参数发送中央服务器,再通过安全聚合等技术得到主模型。然后,服务器将聚合的主模型再发回给这些客户端,并重复此过程,架构图如图1所示。
在这种情况下,本发明准备了一个具有IID(独立同分布)数据,手写数据集MNIST,以演示如何将在不同节点上运行的数百个不同模型的参数与聚合算法结合使用,以及该模型是否会给出合理的结果。手写数据集MNIST数据集包含数量为0到9的28*28像素灰度图像。
在隐私保护数据聚合算法开始后,需要对100个初始参与者节点进行选择。在选择阶段中,服务器将随机或者部分选择参与者参加此轮训练。在训练结束的报告阶段,服务器将等待每个参与者返回训练后的梯度参数。服务器接收到参数后,将使用隐私保护数据聚合算法来聚合它们并通知参与者下一个请求时间。如果有足够多的参与者在超时之前返回渐变,则此轮训练成功,否则将失败。在整个系统中,有一个速度控制模块(PaceSteering),可以管理所有参与者的连接。对于小型联合学习培训,速度控制模块保证在每一轮培训中都有足够的参与者。对于大规模的联合学习培训,速度控制模块将随机分配参与者的请求时间,以避免大量同时请求,这可能会引起问题。由每个参与者训练的模型在训练过程中不会互相干扰。在传统的数据中心设置中,同步和异步方案都常用于并行迭代优化算法,每种方法都有优缺点。同步方案简单且保证了串行等效计算模型,但在设备变化面前,它们也更容易受到通讯掉队者的影响。异步方案是一种减轻异构环境中的掉队问题,特别是在共享内存系统中。在这里我们采用的是FedAvg聚合算法,它是一种基于局部随机梯度下降(SGD)平均更新的方法的同步协议,即每一轮更新过程中所有用户的权重更新都是同步的,先执行完毕的用户会等待之后的用户。平均更新并累积到当前共享模型。
M
在每轮训练任务中,服务端于本轮开始时需要向用户端发送当前模型的超参数以及必要状态数据。之后每个接收到任务的设备根据全局参数和状态数据以及本地数据集执行计算任务,并将更新发送到服务端。所有参与者在每轮训练中都会执行下列公式(2)进行梯度下降。其中η是学习率,b表示批次。
在每个用户返回梯度之前,需要在测试数据集上运行本地模型,并使用测试准确性来评估模型的精确度,模型的精确度也是用户选择阶段的关键参考指标。该过程重复多次,直到全局模型收敛为止。
上述隐私保护数据聚合算法的训练效果如图2所示。
步骤(2)采用的面向用户数据的轻量级加解密算法的主要思想是采用Blowfish分组密码算法来对用户的模型数据进行隐私保护。
Blowfish算法原理如下:
首先是密钥预处理过程:Blowfish算法使用原密钥的p盒与s盒来对输入的密钥进行预处理,在加密过程中,与传统的加密算法不同,该算法并不使用原始密钥来进行加密,而是使用密钥预处理后产生的key_p[18]与key_s[4][256]两个数组。原密钥的p盒与s盒的初始化数据固定的使用π的小数部分每4个字节分配给p[18]和s[4][256]。密钥加密过程:Blowfish算法基于Feistel密码结构,两者都是用于分组加密的对称加密算法,因为其对称特性,两者的加解密过程几乎一致。在加密过程中,算法先对待加密的明文数据进行分组,每组的长度为m bit(m=2n),对每一个明文数据的分组,将其从中间分成左右等长的两部分L(m/2)与R(m/2);假设轮函数为F,K_i为第i轮的子密钥,该算法的加密过程如下:(1)将明文数据分为左右两个块L_0与R_0;(2)第i轮的加密过程依赖于第i-1轮的加密结果:L_i=R_i-1;R_i=L_i-1xor F(R_i-1,K_i-1)。从上述过程可知,由于对称的特性,无论轮函数F如何变换,采用该结构的算法都能保证加密过程的可逆性,因此只需要实现加密过程的逆过程即可实现解密算法。Blowfish算法的加密过程使用16层的Feistel网格加密,过程如图3所示。
Blowfish算法一共进行16轮加密,加密过程中使用密钥预处理过程中生成的子密钥,参数i表示预处理过程中生成的key_p盒中的key_p[i]。密钥解密过程:由于Blowfish算法的对称特性,其解密过程就是加密过程的逆过程,因此解密过程中要使用与加密过程相同的密钥,在解密前也需要对密钥进行预处理,可直接使用加密前密钥的预处理结果来使用,解密过程只需要逆序使用key_p[]中的值进行异或处理即可,主要流程如图4所示。
通过分析研究发现Blowfish算法当前不仅具有不可破解的安全性能,同时相对传统的DES、AES等加密算法,运算速度较快,因此在加解密算法中具有很大的优势。因此,本发明中面向用户的模型数据加解密算法设计则采用了这种轻量级的Blowfish方法,完成了网络化异构计算平台中模型数据加密系统的构建,针对训练完成后的模型数据极易泄露用户和模型隐私的情况,提出了基于Blowfish的轻量化模型数据加密算法。算法架构图如图5所示。
为满足计算平台对计算效率的需求,本算法通过多线程计算、分段加密、秘钥拆分和S盒比特变换机制,保障了平台在实时响应要求下,快速实现模型数据加解密过程。多线程计算是通过使用多个程序计数器并发执行程序不同位置中的指令来加速程序的执行过程的。有些体系结构提供在运行时创建和运行线程的功能,也有些体系结构在变异阶段对线程进行划分和优化。大部分多线程执行模型都需要指令集体系结构(ISA)的支持,以减少动态创建线程的软件开销。分段加密方法的核心思想是:将原始文件划分为不定长度的若干分段,对每个数据段采用随机对称加密算法、随机初始向量和随机密钥进行加密处理,同时创建专用文件保存所有加密信息并通过非对称加密算法进行加密和分发。文件经分段加密处理后,生成加密数据和加密信息两个文件,分别保存分段加密对数据和文件加密信息。加密数据文件中不包含任何加密算法信息,用户只有得到匹配的加密信息文件,才能完成解密操作。密钥拆分方法是指将一个双长度(一个长度密钥为8个字节)的主密钥(MK),对数据进行拆分处理,推导出一个双长度的Blowfish加密密钥(DK)。其DK推导过程如下:
推导DK左半部分的方法是:将分散数据的最右8个字节作为输入数据;将MK作为加密密钥;用MK对输入数据进行3DES运算,得到DK左半部分。推导DK右半部分的方法是:将分散数据的最右8个字节求反,作为输入数据;将MK作为加密密钥;用MK对输入数据进行3DES运算,得到DK右半部分。最后将DK的左右部分各8个字节合并成双长度的DK密钥,即为分散所求得的待使用的Blowfish拆分密钥。我们知道,标准Blowfish算法的秘钥长度为256bit,为了提升安全性,本发明采用秘钥拆分技术,将1024bit的秘钥拆分成4个256bit的秘钥矩阵,并以64bit为单位对明文进行S盒计算,这样做的好处在于算法不需要直接处理很长的明文字段,而是采用拆分的方式,对间隔的明文字段进行加密,进而得到整体的密文。
S盒比特变换的第一步是产生S盒初始数组,首先根据S盒的行标号和列标号组合成16X16的二维数组,行标号作为高4bit,列标号作为低4bit。S盒产生的数组如表1所示:
表1:S盒比特变换产生的数组
而Blowfish算法中的S盒变换则采用多项式除法的方式,具体过程为:
a.初始条件:(R-1)=a;R0=b;(X-1)=1;X0=0;(Y-1)=0;Y0=1;
b.迭代步骤:Rn=(Rn-2)Mod(Rn-1);Qn=[(Rn-2)/(Rn-1)]{(Rn-2)/(Rn-1)的商};Xn=(Xn-2)-(Xn-2);Yn=(Yn-2)-(Yn-2);
c.终止条件:Rn=1时,计算出来的Yn即是结果。如果结果为负数,需要加上模值变为正数。其中,多项式除法的计算规则为:
a.遵循代数基本规则中的普通多项式运算规则;
b.系数运算遵循以2为模的加法和乘法运算;(原话是:系数运算以p为模,即遵循有限域Zp上的运算规则);
c.如果乘法运算的结果是次数大于7(原文:n-1)的多项式,那么必须将其除以某个次数为8(原文:n)的即约多项式m(x)并取余式,对于多项式f(x),这个余数可表示为:即r(x)=f(x)mod m(x)。
这里,采用扩展的欧几里得算法来求解乘法逆元,具体为(b-1)*b mod a=1;=>ax+by=1=gcd(a,b),其次,把a,b用多项式代替,则其形式为b-1(x)*b(x)mod m(x)=1=>m(x)v(x)+b(x)w(x)=1=gcd(m(x),b(x))。直接引用上边求乘法逆元的步骤,用多项式直接替代数值计算:
a、把带求解的字节变换成多项式形式b(x);
b、初始条件:(R-1)=m(x);R0=b(x);(v-1)(x)=1;v0(x)=0;(w-1)(x)=0;w0(x)=1;
c、迭代步骤:Rn(x)=(Rn-2)(x)Mod(Rn-1)(x);Qn(x)=[(Rn-2)(x)/(Rn-1)(x)]即:{(Rn-2)/(Rn-1)的商};vn(x)=(vn-2)(x)-Qn(x)*(vn-2)(x);wn(x)=(wn-2)(x)-Qn(x)*(wn-2)。
d、终止条件:Rn(x)=1时,计算出来的wn(x)即是结果多项式。
e、把wn(x)变换回字节。
上述步骤中,需要专门的多项式乘法、多项式除法、多项式求余运算的实现函数。S盒变换的第二步骤实现完成。随后,根据扩展欧几里得算法,得到的中间状态的S盒如表2所示:
表2:S盒比特变换中间状态的数组
步骤(3)中,采用的基于安全多方计算的智能算法设计的主要思想是将密码学、机器学习、分布式系统等多个领域在隐私保护机器学习中得以联结,将安全多方计算以及同态加密技术应用在六种机器学习算法上(包括卷积神经网络(CNN)、反向传播算法(BP)、逻辑回归算法、支持向量机(SVM)、线性回归算法、多层感知机(MLP))。在分布式计算框架下,实现了用户数据的安全推理计算。架构如图6所示,用户对于整个推理过程无感。训练完备的模型文件事先存放在服务器端,在开启指定算法的推理服务后,接收用户加密数据;用户数据在上传给服务器进行推理之前依据安全多方计算算法被自动加密;而各台服务器之间相互交互,并行地对密文数据做推理预测,计算结果以密文的形式返回给用户;用户端自动解密得到推理结果。整个计算过程只有用户会使用密钥加解密,数据的传输是使用了秘密共享技术(Secret Sharing),保障了全流程的安全。
面向智能算法的安全推理技术利用了经典的Paillier加密算法,可以面向加法和乘法采取密文计算。Paillier同态加密算法如公式(3):
c=Enc(x,r)=g
其中(g,n)作为加密公钥,r是一个大于0小于n的随机数,且r与n互质,g是一个小于n^2的随机数,n通常超过4000bit,因此计算的开销十分庞大。
Paillier同态加法计算公式如(4):
Enc(x,r)*Enc(y,s)
=(g
=g^(x+y)*(r*s)^n mod n^2 (4)
=Enc(x+y,r*s)
Paillier同态乘法计算公式如(5):
Enc(x,r)^w=(g^x*r^n mod n^2)^w
=g^(x*w)*(r^w)^n mod n^2 (5)
=Enc(x*w,r^w)
数据完成加密后,数据的传输交互采用了著名的SPDZ协议进行秘密共享(secretsharing)。我们基于的安全多方计算技术(MPC)是一种加密计算技术,可让多方共同安全地隐藏数据本身的值并且不影响计算功能。
具体来说,安全多方计算技术(MPC)是将一条数据分割为多个编码部分,共享本身不会显示任何原始数据。两个计算参与方对一组密文份额执行相同的操作,然后重新组合它们,就好像该操作是对原始数据执行的。
秘密共享涉及将数据分为两部分,两个参与者双方都使用这些共享,然后重新组合这些共享以获得结果。在计算过程中,两个计算参与方通常需要进行交互,还需要与第三方交互。
私有张量
x=x
x
x
其中r和m均为随机数。
在具体实现时,将设定有两方服务器(P0,P1)和一名辅助服务器(P2),如图6所示,这三台构成计算集群。在具体创建共享份额时,以及在对份额进行任何操作之前,我们需要知道如何进行份额分配。要生成秘密份额,只需将要转换为两个值的数字分开即可。例如,可以将5分为3和2,或8和-3。这时通过P2生成加密安全的随机数,然后减去要共享的内容来完成的。P0和P1双方将彼此交换一半份额,然后他们将使用其份额进行操作并交换结果,然后将其份额重新组合为最终答案。P0将向P1发送a_1,而P1向P0发送b_0。由于P0无法访问b_1,因此无法确定b的值。
加法是我们可以使用秘密共享执行的最简单的操作。各方添加其份额,然后交换结果。加法可以描述如下:
a+b=(a_0+a_1)+(b_0+b_1)
可以用加法交换律和加法结合律重新排列这个公式:
a+b=(a_0+b_0)+(a_1+b_1)
其中P0将求解a_0+b_0,而P1将求解a_1+b_1。这样可以确保P0仅获得b的一部分,而P1仅获得a的一部分。
执行乘法的各方需要在计算过程中进行沟通。可以使用与上述相同的符号来定义使用秘密共享的乘法。
a*b=(a_0+a_1)*(b_0+b_1)
扩展为:
=(a_0*b_0)+(a_0*b_1)+(a_1*b_0)+(a_1*b_1)
可以看到P0可以负责a_0*b_0,而P1可以负责a_1*b_1。
但是,中间的((a_0*b_1)+(a_1*b_0))存在问题,因为任何一方都不能安全地执行,会暴露a和b,这将要求每一方拥有另一份额。例如如果P0想要求解a_0*b_1,他们将需要b_1,但是他们已经有了b_0,这将使他们能够访问b的值。我们想对P0保密b。
解决此问题的方法是所谓的掩码隐藏,在需要掩盖份额时会向各方引入一个新的未知数,当最后把份额合并时,该掩码数将消失。为了维护隐私,需要第三方服务器(P2)生成这些未知数字,这些数字将用于掩盖他们不想与另一方共享的数据。这意味着我们将屏蔽P0中的b_1和P1中的a_0。我们将这些掩码称为s和t,将alpha和beta称为掩码值。
由P0执行的a*b的乘法变为:
z_0=s*t_0+(s_0*beta)+(alpha*t_0)+(alpha*beta)
由P1执行的乘法变为:
z_1=s*t_1+(s_1*beta)+(alpha*t_1)
我们将从第三方(P2)开始,以创建一些掩盖值。P2生成三个新值,然后将它们分成多个份额。前两个数字是随机的,第三个是这两个数字的乘积。
利用这些值的方法是从原始数据中减去它们
alpha=(a_0-s_0)+(a_1-s_1)
beta=(b_0-t_0)+(b_1-t_1)
P2将s_0和t_0的值发送到P0,将s_1和t_1的值发送到P1。s_0和t_0的值可以取任意整数,而s_1和t_1的值直接拿s和t去减去s_0和t_0即可。然后,P0分别创建alpha的(a_0-s_0)部分和beta的(b_0-t_0)的部分,P1分别创建alpha的(a_1-s_1)部分和beta的(b_1-t_1)部分。接下来,P0和P1可以交换其alpha和beta份额,而无需透露有关a或b的任何信息。这是因为a和b的真实值被P2给定的值隐藏了。之后将这些值插入上面的公式中。
P0计算:
z_0=s*t_0+(s_0*beta)+(alpha*t_0)+(alpha*beta)
P1计算:
z_1=s*t_1+(s_1*beta)+(alpha*t_1)
然后合并结果:
z_0+z_1=a*b
综上,我们通过一个案例证明,通过秘密共享(secret sharing)实现了数据的安全交互。使用同态加法和同态乘法即可模拟出所有的表达式(减法用加上负数代替,除法用乘上倒数实现)。同样借助同态加法和乘法的构建,进一步可以支持许多机器学习模型。这两个原语可以实现诸如卷积,池化和近似激活函数之类的层。这足以满足许多计算机视觉算法,线性或逻辑回归等等。具体在实现中,需要对算法功能进行相应改造,CNN、BP、MLP、逻辑回归等主要是激活函数的改写。线性层和卷积(本质上是矩阵乘法),整流线性单位(ReLU),Maxpool,归一化等,这些协议彼此兼容,并且对于给定的推理算法,可以将这些协议有效地组合起来,以提供所需的安全计算协议。
在评估卷积神经网络(CNN)、反向传播算法(BP)、逻辑回归算法、支持向量机(SVM)、多层感知机(MLP)等5种算法的性能时,分别测200个和500个MNIST数据,计算预测正确率,如图7所示。通过比较密文数据推理的预测精确度和模型本身的训练精确度可以得知,同态加密和安全多方计算并没有影响到模型本身的精确度,算法在实现了隐私保护前提下,依旧保持有较好的识别效果。由此可以得出,该面向智能算法的安全推理机制不仅具有良好的性能,还保证了推理的安全性。预测的准确率和模型精度近似一致,样本平均误差率在可接受范围内。
- 一种面向机器学习全流程的隐私保护方法
- 一种面向深度神经网络的基于差分隐私的域适应隐私保护方法