隐私保护的高阶 Bi-Lanczos 方法
隐私保护的高阶 Bi-Lanczos 方法的介绍
隐私保护的高阶 Bi-Lanczos 方法,该方法能够在不泄露用户数据隐私的情况下在云端和雾端进行高阶 Bi-Lanczos 计算。
假设用户需要对一个张量表示的大数据进行 HOSVD 分解,但由于其所拥有的计算设备的存储能力和计算能力有限,用户需要借助云计算与雾计算的存储优势和计算优势来完成以上需求。考虑到用户需要对隐私数据进行保护,所以不想将数据公开上传到雾端和云端,这个时候就需要考虑如何在雾端和云端进行安全的存储与计算操作,这也正是我们接下来需要探讨的问题。如下图所示:
数据采集层:数据采集层由用户的终端设备以及各种智能采集设施等组成,它们对智慧家庭、智慧交通等智能应用中的数据进行采集,并将采集到的数据通过张量进行融合,加密后传输到云端和雾端进行安全的存储和计算工作。
雾计算层:该层由雾计算节点 F 1 , F 2 , ⋯ , F n F_{1}, F_{2}, \cdots, F_{n} F1,F2,⋯,Fn 组成,用于对加密数据进行存储与处理。通常该层会与云计算层进行协同工作。
云计算层:该层由云计算节点 C 1 , C 2 C_{1}, C_{2} C1,C2 组成,通过云计算节点和雾计算节点的相互协作,完成在加密数据上的安全的隐私保护张量运算。
应用层:该层接收雾-云计算层返回的密文结果,解密后可以用在相应的智能应用中。
高阶 Bi-Lanczos 方法的实现
输入: 张量
M
∈
R
I
1
×
I
2
×
⋯
×
I
H
×
I
H
+
1
×
⋯
×
I
S
\text { 输入: }\text { 张量 } M \in R^{I_{1} \times I_{2} \times \cdots \times I_{H} \times I_{H+1} \times \cdots \times I_{S}}
输入: 张量 M∈RI1×I2×⋯×IH×IH+1×⋯×IS
输出: 对角矩阵
B
∈
R
k
×
k
\text { 输出: 对角矩阵 } B \in R^{k \times k}
输出: 对角矩阵 B∈Rk×k
张量
W
∈
R
I
1
×
I
2
×
⋯
×
I
H
×
k
,
其中子张量
W
i
∈
R
I
1
×
I
2
×
⋯
×
I
H
满足两两正交
\text { 张量 } W \in R^{I_{1} \times I_{2} \times \cdots \times I_{H} \times k}, \text { 其中子张量 } W_{i} \in R^{I_{1} \times I_{2} \times \cdots \times I_{H}} \text { 满足两两正交 }
张量 W∈RI1×I2×⋯×IH×k, 其中子张量 Wi∈RI1×I2×⋯×IH 满足两两正交
张量
Q
∈
R
k
×
I
H
+
1
×
I
H
+
2
⋯
×
I
5
,
其中子张量
Q
i
∈
R
I
H
+
1
×
I
H
+
2
⋯
×
I
S
满足两两正交
\text { 张量 } Q \in R^{k \times I_{H+1} \times I_{H+2} \cdots \times I_{5}}, \text { 其中子张量 } Q_{i} \in R^{I_{H+1} \times I_{H+2}} \cdots \times I_{S} \text { 满足两两正交 }
张量 Q∈Rk×IH+1×IH+2⋯×I5, 其中子张量 Qi∈RIH+1×IH+2⋯×IS 满足两两正交
高阶 Bi-Lanczos 算法
算法推导
任意给定一个张量 M ∈ R I 1 × I 2 × ⋯ I H × I H + 1 × ⋯ I S M \in R^{I_{1} \times I_{2} \times \cdots I_{H} \times I_{H+1} \times \cdots I_{S}} M∈RI1×I2×⋯IH×IH+1×⋯IS,高阶 Bi-Lanczos 算法可以将该张量转化为一个对角矩阵 B ∈ R k × k B \in R^{k \times k} B∈Rk×k 与两个张量 W ∈ R I 1 × I 2 × ⋯ I H × k W \in R^{I_{1} \times I_{2} \times \cdots I_{H} \times k} W∈RI1×I2×⋯IH×k 、 Q ∈ R k × I H × I H + 1 × ⋯ I S Q \in R^{k \times I_{H} \times I_{H+1} \times \cdots I_{S}} Q∈Rk×IH×IH+1×⋯IS ,其中,张量 W 的子张量 W i ∈ R I 1 × I 2 × ⋯ I H W_{i} \in R^{I_{1} \times I_{2} \times \cdots I_{H}} Wi∈RI1×I2×⋯IH 满足两两正交,张量 Q 的子张量 Q i ∈ R I H + 1 × I H + 2 × ⋯ I S Q_{i} \in R^{I_{H+1} \times I_{H+2} \times \cdots I_{S}} Qi∈RIH+1×IH+2×⋯IS 也满足两两正交,并且满足公式:
M = W × 1 ( B × 1 Q T ) = ( W × 1 B ) × 1 Q T M=W \times_{1}\left(B \times_{1} Q^{T}\right)=\left(W \times_{1} B\right) \times{ }_{1} Q^{T} M=W×1(B×1QT)=(W×1B)×1QT
可以推导出:
M
∗
S
−
H
Q
=
W
×
1
B
M *_{S-H} Q=W \times_{1} B
M∗S−HQ=W×1B
M
T
∗
H
W
=
Q
×
1
B
T
M^{T} *_{H} W=Q \times{ }_{1} B^{T}
MT∗HW=Q×1BT
注:
其中符号*
N
表示
X
的后
N
阶与
Y
的前
N
阶做多模乘运算
\text { 其中符号* }_{N} \text { 表示 } X \text { 的后 } N \text { 阶与 } Y \text { 的前 } N \text { 阶做多模乘运算 }
其中符号* N 表示 X 的后 N 阶与 Y 的前 N 阶做多模乘运算 ,其中符号
×
m
n
\times_{m}^{n}
×mn 表示张量 X 的第 n 阶和张量 Y 的第 m 阶做单模乘运算。通常将
X
×
1
N
Y
X\times_{1}^{N}Y
X×1NY记为
X
×
1
Y
X\times_{1}^{}Y
X×1Y
对上面两个等式分别进行展开,可得:
M
S
−
H
∗
Q
i
=
β
i
+
1
W
i
+
1
+
α
i
W
i
M^{*}_{S-H} Q_{i}=\beta_{i+1} W_{i+1}+\alpha_{i} W_{i}
MS−H∗Qi=βi+1Wi+1+αiWi
M T ∗ H W = α i Q i + β i Q i − 1 M^{T} *_{H} W=\alpha_{i} Q_{i}+\beta_{i} Q_{i-1} MT∗HW=αiQi+βiQi−1
由于W的子张量
W
1
,
W
2
,
⋯
,
W
k
W_{1}, W_{2}, \cdots, W_{k}
W1,W2,⋯,Wk 两两相互正交,我们可以上面的等式两端分别乘以
W
i
W_i
Wi 和
Q
i
Q_i
Qi, 推导出:
α
i
=
∥
M
T
∗
H
W
i
−
β
i
Q
i
−
1
∥
\alpha_{i}=\left\|M^{T} *_{H} W_{i}-\beta_{i} Q_{i-1}\right\|
αi=∥∥MT∗HWi−βiQi−1∥∥
β i = ∥ M s − H ∗ Q i − α i W i ∥ \beta_{i}=\left\|M_{s-H}^{*} Q_{i}-\alpha_{i} W_{i}\right\| βi=∥∥Ms−H∗Qi−αiWi∥∥
这样子我们就可以得到高阶的 Bi-Lanczos 算法啦!
隐私保护的高阶 Bi-Lanczos 算法
在系统初始化阶段,云节点 C 2 C_2 C2 利用同态加密技术生成公钥 p k pk pk 和私钥 s k sk sk ,并将公钥 p k pk pk 分发给云节点 C 1 C_1 C1 和雾节点 F 1 , F 2 , ⋯ , F n F_{1}, F_{2}, \cdots, F_{n} F1,F2,⋯,Fn,同时自身保留私钥 s k sk sk 。
在用户数据加密阶段,用户终端根据随机生成的扰动 r r r 对所需要处理的数据进行加密,并将加密数据和扰动分开上传到云节点 C 1 , C 2 C_{1}, C_{2} C1,C2以及雾计算节点 F 1 , F 2 , ⋯ , F n F_{1}, F_{2}, \cdots, F_{n} F1,F2,⋯,Fn 中。
云节点 C 1 , C 2 C_{1}, C_{2} C1,C2 以及雾节点 F 1 , F 2 , ⋯ , F n F_{1}, F_{2}, \cdots, F_{n} F1,F2,⋯,Fn 利用之前获得的公钥 p k pk pk 对密文进行进一步的同态加密以及后续处理后,进行下一步隐私保护的高阶 Bi-Lanczos 计算。
云节点 C 1 , C 2 C_{1}, C_{2} C1,C2 以及雾节点 F 1 , F 2 , ⋯ , F n F_{1}, F_{2}, \cdots, F_{n} F1,F2,⋯,Fn 相互配合,结合同态加密技术,实现隐私保护的高阶 Bi-Lanczos 计算。
隐私保护的高阶 Bi-Lanczos 算 法(PPHOBL),其关键点在于利用雾端和云端海量的存储能力和计算能力来执行高阶 Bi-Lanczos 算法,同时保证雾端和云端对用户的数据一无所知并且PPHOBL 方案的计算结果应该等于明文状态下高阶 Bi-Lanczos 算法的计算结果。
安全计算子协议介绍
标量与张量安全乘法协议
标量
[
∣
a
∣
]
[|a|]
[∣a∣] 与张量
[
∣
X
∣
]
∈
R
I
1
×
I
2
×
⋯
I
N
[|X|] \in R^{I_{1} \times I_{2} \times \cdots I_{N}}
[∣X∣]∈RI1×I2×⋯IN 做乘法运算,等价于标量
[
∣
a
∣
]
[|a|]
[∣a∣] 与张量
[
∣
X
∣
]
[|X|]
[∣X∣] 中的每个元素做安全乘,最终可以得到一个同等大小的张量
[
∣
Y
∣
]
∈
R
I
1
×
I
2
×
⋯
I
N
[|Y|] \in R^{I_{1} \times I_{2} \times \cdots I_{N}}
[∣Y∣]∈RI1×I2×⋯IN
Markdown的有些符号无法输出,所以只能用图片了╮(╯-╰)╭
同上,张量的张量与标量安全除法协议、张量与张量安全减法协议、张量与张量间安全的爱因斯坦乘协议、张量安全范数协议我就直接上公式了。
张量与标量安全除法协议
张量与张量安全减法协议
张量与张量间安全的爱因斯坦乘协议
张量安全范数协议
算法实现
输入: 张量
M
∈
R
I
1
×
I
2
×
⋯
×
I
H
×
I
H
+
1
×
⋯
×
I
S
\text { 输入: }\text { 张量 } M \in R^{I_{1} \times I_{2} \times \cdots \times I_{H} \times I_{H+1} \times \cdots \times I_{S}}
输入: 张量 M∈RI1×I2×⋯×IH×IH+1×⋯×IS
输出: 对角矩阵
B
∈
R
k
×
k
\text { 输出: 对角矩阵 } B \in R^{k \times k}
输出: 对角矩阵 B∈Rk×k
张量
W
∈
R
I
1
×
I
2
×
⋯
×
I
H
×
k
,
其中子张量
W
i
∈
R
I
1
×
I
2
×
⋯
×
I
H
满足两两正交
\text { 张量 } W \in R^{I_{1} \times I_{2} \times \cdots \times I_{H} \times k}, \text { 其中子张量 } W_{i} \in R^{I_{1} \times I_{2} \times \cdots \times I_{H}} \text { 满足两两正交 }
张量 W∈RI1×I2×⋯×IH×k, 其中子张量 Wi∈RI1×I2×⋯×IH 满足两两正交
张量
Q
∈
R
k
×
I
H
+
1
×
I
H
+
2
⋯
×
I
5
,
其中子张量
Q
i
∈
R
I
H
+
1
×
I
H
+
2
⋯
×
I
S
满足两两正交
\text { 张量 } Q \in R^{k \times I_{H+1} \times I_{H+2} \cdots \times I_{5}}, \text { 其中子张量 } Q_{i} \in R^{I_{H+1} \times I_{H+2}} \cdots \times I_{S} \text { 满足两两正交 }
张量 Q∈Rk×IH+1×IH+2⋯×I5, 其中子张量 Qi∈RIH+1×IH+2⋯×IS 满足两两正交
1.在用户终端,随机生成一个张量 D ∈ R I 1 × I 2 × ⋯ × I H × I H + 1 × ⋯ I S D \in R^{I_{1} \times I_{2} \times \cdots \times I_{H} \times I_{H+1} \times \cdots I_{S}} D∈RI1×I2×⋯×IH×IH+1×⋯IS , 并通过扰动加密,得到张量 M 的加密形式 [ M ] [M] [M] , [ M ] [M] [M] 包含扰动张量 [ M ] D [M]_{D} [M]D 和加密张量 [ M ] S [M]_{S} [M]S;
2.将 [ M ] D [M]_{D} [M]D 和 [ M ] S [M]_{S} [M]S 分别发送给云节点 C 1 C_1 C1 或 C 2 C_2 C2 ,或雾节点 F 1 , F 2 , ⋯ , F n F_{1}, F_{2}, \cdots, F_{n} F1,F2,⋯,Fn ;
3.将 [ M ] [M] [M] 转化为同态加密张量 [ ∣ M ∣ ] ∈ R I 1 × I 2 × ⋯ I H × I H + 1 × ⋯ I S [|M|] \in R^{I_{1} \times I_{2} \times \cdots I_{H} \times I_{H+1} \times \cdots I_{S}} [∣M∣]∈RI1×I2×⋯IH×IH+1×⋯IS;
4.初始化一个随机张量 W 1 ∈ R I 1 × I 2 × ⋯ I H , 满足 ∥ W 1 ∥ F = 1 , W_{1} \in R^{I_{1} \times I_{2} \times \cdots I_{H}}, \quad \text { 满足 }\left\|W_{1}\right\|_{F}=1, \quad W1∈RI1×I2×⋯IH, 满足 ∥W1∥F=1,同态加密后得到 [ ∣ W 1 ∣ ] ∈ R I 1 × I 2 × ⋯ I H \left[|W_{1}|\right]\in R^{I_{1} \times I_{2} \times \cdots I_{H}} [∣W1∣]∈RI1×I2×⋯IH;
5.初始化一个加密张量
[
∣
Q
0
∣
]
∈
R
I
H
+
1
×
I
H
+
2
⋯
×
I
S
\left[|Q_{0}|\right] \in R^{I_{H+1} \times I_{H+2} \cdots \times I_{S}}
[∣Q0∣]∈RIH+1×IH+2⋯×IS 令
Q
0
=
0
Q_{0}=0
Q0=0;
6.初始化工作完成后,进入 for 循环
7.将同态加密张量
[
∣
W
∣
]
、
[
∣
B
∣
]
、
[
∣
Q
∣
]
[|W|] 、 [|B|] 、 [|Q|]
[∣W∣]、[∣B∣]、[∣Q∣] 转换为
[
W
]
、
[
B
]
、
[
Q
]
[W] 、[B] 、[Q]
[W]、[B]、[Q] ,并发送给用户;
8.在用户终端,对
[
W
]
、
[
B
]
、
[
Q
]
[W] 、[B] 、[Q]
[W]、[B]、[Q] 进行解密,得到结果 W、B、Q。
在运算过程中,只有雾计算节点
F
1
,
F
2
,
⋯
,
F
n
F_{1}, F_{2}, \cdots, F_{n}
F1,F2,⋯,Fn 和云计算节点
C
1
C_1
C1 可以存储用户所上传数据的同态加密密文
[
∣
M
∣
]
[|M|]
[∣M∣] 、中间计算结果的同态加密密文以及 PPHOBL 最终计算结
果的密文
[
∣
W
∣
]
、
[
∣
B
∣
]
、
[
∣
Q
∣
]
[|W|] 、 [|B|] 、 [|Q|]
[∣W∣]、[∣B∣]、[∣Q∣] ,但由于他们没有私钥sk ,所以不能对数据进行解密,云计算节点
[
∣
C
∣
]
[|C|]
[∣C∣] 只存储计算过程中的部分盲化数据或随机数据,即使有私钥sk 也无法获取用户数据。所以基于“雾-云”隐私保护框架的 PPHOBL方案在该模型下是安全的。
分布式实现
为了充分利用云端和雾端的分布式存储与计算优势,我们设计并实现了一个分布 式的隐私保护的高阶 Bi-Lanczos 算法。
张量与张量安全的爱因斯坦乘,是在“雾-云”环境中对张量爱因斯坦乘的安全实现。假设张量爱因斯坦乘的两个张量对象分别为 [ ∣ X ∣ ] ∈ R I 1 × I 2 × … × I M × H 1 × H 2 × ⋯ H N [|X|] \in R^{I_{1} \times I_{2} \times \ldots \times I_{M} \times H_{1} \times H_{2} \times \cdots H_{N}} [∣X∣]∈RI1×I2×…×IM×H1×H2×⋯HN 和 [ ∣ Y ∣ ] = R H 1 × H 2 × … × H N × J 1 × J 2 × ⋯ × J O [|Y|]=R^{H_{1} \times H_{2} \times \ldots \times H_{N} \times J_{1} \times J_{2} \times \cdots \times J_{O}} [∣Y∣]=RH1×H2×…×HN×J1×J2×⋯×JO,它们做爱因斯坦乘后的结果中的每个元素等于 ∑ h 1 = 1 H 1 ∑ h 2 = 1 H 2 ⋯ ∑ h N = 1 H N [ ∣ X ( i 1 , i 2 , ⋯ , i M , h 1 , h 2 , ⋯ , h N ) ∣ ] [ ∣ Y ( h 1 , h 2 , ⋯ , h N , j 1 , j 2 , ⋯ , j 0 ) ∣ ] \left.\sum_{h_{1}=1}^{H_{1}} \sum_{h_{2}=1}^{H_{2}} \cdots \sum_{h_{N}=1}^{H_{N}}\left[ |X\left(i_{1}, i_{2}, \cdots, i_{M}, h_{1}, h_{2}, \cdots, h_{N}\right)\right|] [|Y\left(h_{1}, h_{2}, \cdots, h_{N}, j_{1}, j_{2}, \cdots, j_{0}\right)|\right] ∑h1=1H1∑h2=1H2⋯∑hN=1HN[∣X(i1,i2,⋯,iM,h1,h2,⋯,hN)∣][∣Y(h1,h2,⋯,hN,j1,j2,⋯,j0)∣],即根据每个元素的坐标,固定 i 1 , i 2 , ⋯ , i M i_{1}, i_{2}, \cdots, i_{M} i1,i2,⋯,iM 得到 X 的子张量,固定 j 1 , j 2 , ⋯ , j O j_{1}, j_{2}, \cdots, j_{O} j1,j2,⋯,jO 得到 Y 的子张量,然后两个子张量做内积,最终得到该坐标处的元素值。因为不同坐标处的元素值的计算互不影响,所以我们可以在前 M 阶对 [ ∣ X ∣ ] [|X|] [∣X∣] 进行分块,不同分块之间独立地与 [ ∣ Y ∣ ] [|Y|] [∣Y∣] 进行爱因斯坦乘,当所有分块都计算完成后,按照顺序重新合并为一个大的张量:
[ ∣ X ∣ ] ∗ N [ ∣ Y ∣ ] = ( [ ∣ X ∣ ] 1 ∗ N [ ∣ Y ∣ ] , [ ∣ X ∣ ] 2 ∗ N [ ∣ Y ∣ ] , ⋯ , [ ∣ X ∣ ] k ∗ N [ ∣ Y ∣ ] [|X|] *_{N}[|Y|]=([|X|]_{1} *_{N}[|Y|],[|X|]_{2} *_{N}[|Y|], \cdots,[|X|]_{k} *_{N}[|Y|] [∣X∣]∗N[∣Y∣]=([∣X∣]1∗N[∣Y∣],[∣X∣]2∗N[∣Y∣],⋯,[∣X∣]k∗N[∣Y∣]
如下图所示:
张量安全内积, 计算结果等于 [ ∣ X ∣ ] [|X|] [∣X∣] 中的所有元素与 [ ∣ Y ∣ ] [|Y|] [∣Y∣] 中的所有对应元素做安全乘,然后求和。在这个过程中对应元素之间的安全乘是相互独立的,互不影响,因此可以并行地做运算。同理,张量与张量安全减法、张量与标量安全乘和安全除亦是如此。
个人理解:不知道学过张量切片和展开的小伙伴会不会觉得上面所讲的分布式实现与张量切片和展开极其的相似。没错,在我看来分布式实现所运用到的分块方法就是张量切片与展开的另外一种形式。之前我们学的张量的切片是将一个 N 阶张量选取任意 N-2 个阶固定,对于剩余两阶不固定,所得到的所有元素组成一个张量切片,也就是将我们的张量最后变成了矩阵。在这里分块的操作和张量切片一样,不同的是我们最后的到的结果是将一个大张量变成了三阶张量或者矩阵。为什么我写的是将一个大张量变成了三阶张量或者矩阵呢?其实大部分的情况下,我们会看到很多论文中所描述的是将大张量最后只是分解成了三阶张量,但是我们在进行实际运算的时候还是需要将分解后的三阶张量变成矩阵,经过这样的处理张量之间的运算就变得更加简单
整个分布式体系结构分为两部分。第一部分为中心控制节点,即 Controller。 它负责增加或删除节点、启动与关闭集群、初始化数据、根据负载动态分发 数据、分发指令、合并返回的结果等功能。第二部分为若干个计算子节点,即 Worker。 Worker 启动后总是处于监听状态,一旦接收到 Controller 发送过来的指令和数据,就 根据指令执行相应的计算任务,计算完成后将结果返回给 Controller。如下图所示:
整个算法中的所有运算都可以通过合理的分块、交付给不同节点进行处理、合并并行计算结果这三个步骤来实现分布式计算。对于计算成本,用户终端只需要在将数据发送到云端和雾端之前对数据进行加密,以及在结果返回后对结果进行解密即可。
下期预告:隐私保护的基于张量链的高效 Tucker 分解方法