文章背景
基于神经网络的机器学习在很多领域表现出巨大的潜力,但是当数据从用户那里收集过来的时候,隐私敏感的数据的泄露会引起严重的隐私担忧。但是用于隐私保护的工具比如安全多方计算和同态加密都不能提供高效的方法来构建隐私保护机器学习模型,同时都支持训练和推理阶段。
文章目标
为了解决上述问题,我们提出了一个CryptoNN框架使用函数加密来替代安全多方计算和同态加密来实现在加密数据上训练神经网络。同时还构造了一个支持基本算术操作的函数加密方案以实现提出的CryptoNN框架。
本文贡献
- 提出一个算术操作的函数加密方案来支持在加密数据上的基本操作;
- 提出一个安全矩阵运算,在此矩阵中的所有元素都是被函数加密方案保护的;
- 提出一个构建在安全矩阵组件的通用CryptoNN框架,在加密数据上训练神经网络模型。CryptoNN包含了安全的前向传播不走和安全的反向传播过程。
- 分析了安全性,精度跟原来模型的精度。
背景和前置知识
函数加密
用到的一些符号表示:
本文使用的函数加密方案:
- Setup函数:生成群元素的相关信息,以及一个长度为 η \eta η的的数组s,这个数组s根据后文来看,是为了生成对应的解密密钥的 s k f sk_f skf,所以这里的主公钥 m p k = ( g , h i = g s i ) i ∈ [ η ] mpk=(g,h_i=g^{s_i})i \in [\eta] mpk=(g,hi=gsi)i∈[η], 主密钥为 m s k = s msk=s msk=s。
- KeyDerive密钥生成, s k f = < y , s > sk_f=<y,s> skf=<y,s>
- Encrypt加密过程:随机选择一个 r r r,计算 c t 0 = g r ct_0=g^r ct0=gr,并对进行加密 c t i = h i r ⋅ g x i ct_i=h^r_i · g^{x_i} cti=hir⋅gxi,密文是 c t = ( c t 0 , ( c t i ) i ∈ [ η ] ) ct=(ct_0, (ct_i)i \in [\eta]) ct=(ct0,(cti)i∈[η])
- Decrypt解密函数:
g
<
x
,
y
>
=
∏
i
∈
[
η
]
c
t
i
y
i
/
c
t
0
s
k
f
g^{<x,y>}= \prod _{i \in [\eta]} ct^{y_i}_i/ct_0^{sk_f}
g<x,y>=∏i∈[η]ctiyi/ct0skf
(最后提到,当<x,y> 远小于 r 时,是有可能使用相同的基底g来恢复内积<x,y>的结果。
神经网络
常见的计算操作
- 内积:隐藏层常见的操作,隐藏层的参数和上一层的输出进行内积。
- 权重和函数:卷积层,有一个卷积核,计算输入与卷积核的权重和。
- 池化函数:在池化层中,最大值,均值,最小值等可能被计算。
- 激活函数:比如ReLu函数,sigmoid函数和tanh函数等等。
- 代价函数:在输出层中,神经网络的输出层被一个特别的代价函数来度量。
CrytoNN架构
相关实体:
- 权威者:负责设立密码学参数比如公钥mpk,主密钥msk,然后分发给客户端和服务器;另外也负责生成解密密钥 s k f sk_f skf
- 客户端:将数据映射到矩阵或者向量,然后对数据进行加密,加密之后发送给服务器。
- 服务器:服务器收集加密数据,获取解密密钥
s
k
f
sk_f
skf,对数据进行解密计算,进行之后的模型训练。
输出X使用函数加密方案进行保护的,最后服务器能够得到WX计算的结果。标签Y为了防止推理攻击,必须被先映射到一个随机数,才能进行加密。不同客户端的所有数据都由相同的公钥进行加密。
函数加密基本操作
可以使用函数加密在矩阵上进行点积计算,但是缺少元素化的计算。所以提出了支持基本操作的函数加密方案。
f
Δ
∈
[
+
,
−
,
∗
,
/
]
(
x
,
y
)
=
x
Δ
y
f _{\Delta \in [+,-,*,/]}(x,y)=x \Delta y
fΔ∈[+,−,∗,/](x,y)=xΔy,具体的加密方案如下:
- Setup函数:先生成群元素,随机选择一个s,,最后设置主密钥msk=s,公钥mpk=(h,g), 此处h= g s g^s gs
- KeyDrive密钥生成:根据具体的操作生成解密密钥 s k f Δ sk_{f \Delta} skfΔ,其中cmt= g r g^r gr(这个r是加密的时候选择的)
- Encrypt函数: c t = h r ⋅ g x ct= h^r · g^x ct=hr⋅gx
- Decrypt函数:根据具体的计算操作进行解密
(正确性非常容易验证)
安全矩阵运算
其实这里就是把点积和基本算术操作打包在一起,假如是点积的话,那就要对X的每一列进行操作,而进行基本的算术操作的话,就要对每个算术进行操作。这里主要讲的是解密密钥生成和加密的过程。
CryptoNN框架
有两轮安全计算:
- 先使用加密的数据[[x]]跟权重一起计算点积,得到第一层的输出。
- 使用第一层的输出结果,进行前向传播。
- 到最后一层的时候又进行一次安全计算,这里用到了标签[[Y]]和第
l
l
l层的输出,最后计算偏导,进行反向传播,计算梯度,更新参数。
具体的CryptoNN框架
使用LeNet-5进行举例,讲了两个步骤,一个是安全前向传播,一个是安全反向传播。前向传播中提到padding操作,反向传播提到softmax函数,并说明怎么计算偏导,得到的结果也可以视为是点积计算
安全分析
对提出的函数加密基本操作方案进行安全性分析,其安全是建立在DDH假设之上的。由于DDH是安全的,那么FEBO也就是安全的。反证法,假如有一个能破解FEBO的敌手,那么就能用这个敌手来构造另一个敌手破解DDH假设。