概述
本文提出了SLALOM,以一种将神经网络的线性层外包给GPU,非线性层在可信执行环境TEE中进行。想要使一个网络使用SLALOM需要三个步骤,下面将一一阐述。
1.输入和权重被量化并嵌入到场F中
SLALOM首先将神经网络所有的输入和权重转化为整数。将整数嵌入到整数域 Zp 中,其中 p 是一个素数,且比深度神经网络(DNN)评估中计算出的所有值都要大,以避免环绕。
对于输入x采用顶点表示法:
x
′
=
r
o
u
n
d
(
2
l
∗
x
)
x^{'} = round(2^{l}*x)
x′=round(2l∗x)
其中l为设定常数。
对于权重W:
w
′
=
r
o
u
n
d
(
2
l
∗
w
)
w^{'} = round(2^{l}*w)
w′=round(2l∗w)
对于偏置b:
b
′
=
r
o
u
n
d
(
2
2
l
∗
b
)
b^{'} = round(2^{2l}*b)
b′=round(22l∗b)
最后将输出缩放到
2
−
l
2^{-l}
2−l并且重新舍入为整数。这样就完成了第一步。
2.线性层外包并使用Freivalds算法进行验证
Freivalds算法思想
A
∗
B
∗
r
=
C
∗
r
A *B *r=C *r
A∗B∗r=C∗r 其中r为随机值,则
A
∗
B
=
C
A *B =C
A∗B=C不成立的概率小于0.5,重复判断k次,则错误率就小于
1
2
k
\frac{1}{2^{k}}
2k1
本文使用该算法其实就是为了验证外包出去线性层的完整性。从下图可以看到每个从服务端返回的结果都要进行验证。
3.线性层的输入使用预先计算的伪随机流进行加密,以保证隐私
TEE使用加密伪随机数生成器生成盲因子。预计算的非致盲因子 被加密并且存储到非可信环境中。在线阶段TEE使用相同的PRNG种子重新产生盲因子,并且使用预先计算的解盲因子对外包线性层的输出进行解密。
限制
1.只能进行推理而不能进行训练
2.仅实现了tensorflow框架下的DNN