ASTAR阅读笔记
文章介绍
ASTRA是Harsh Chaudhari等人发布在CCSW’19上文章,链接为: ASTRA: High Throughput 3PC over Rings with Application to Secure Prediction
本文的主要工作是在半诚实和恶意条件下提升安全三方计算的效率,协议在
Z
2
l
\mathcal{Z}_{2^l}
Z2l整数环上实现。
在半诚实条件下,在线阶段每一个乘法门的总通信量是 2 ring elements,这在3PC中是首次实现的;在恶意条件下,在线阶段每一个乘法门的总通信量是 4 ring elements, 通信效率高于ABY3的 5 ring elements。
作者将提出的技术应用到了机器学习的安全推理预测任务上:linear regression, linear SVM regression, logistic regression, linear SVM regression,将输入和计算外包给不合谋的三台服务器,在半诚实和恶意条件下运行性能均是目前最优。
Definitions
考虑三方 P = { P 0 , P 1 , P 2 } \mathcal{P}=\{P_0, P_1, P_2\} P={P0,P1,P2}, f f f表示包含 2 输入加法门和乘法门的电路, D D D表示乘法电路的深度, I , O , A , M I,O,A,M I,O,A,M分别表示输入线、输出线、加法门和乘法门的数量。用 g = ( w x , w y , w z ) g=(w_x,w_y,w_z) g=(wx,wy,wz)表示电路的一个门,其中 w x w_x wx表示左输入线, w y w_y wy表示右输入线, w z w_z wz表示输出线。 { P 0 } \{P_0\} {P0}作为 “distributor”, 执行离线阶段的预处理过程, { P 1 , P 2 } \{P_1, P_2\} {P1,P2}作为 “evaluators”, 执行在线阶段的电路部分。“s” 表示半诚实模式, “m” 表示恶意模式。
Sharing 语义
[
⋅
]
−
s
h
a
r
i
n
g
[\cdot]-sharing
[⋅]−sharing: 将
v
v
v以加法秘密分享的形式分享给
P
1
,
P
2
P_1, P_2
P1,P2, 满足
v
=
v
1
+
v
2
v=v_1+v_2
v=v1+v2。
[
[
⋅
]
]
−
s
h
a
r
i
n
g
[\![\cdot]\!]-sharing
[[⋅]]−sharing:
P
0
P_0
P0持有
(
λ
v
,
1
,
λ
v
,
2
)
(\lambda_{v,1}, \lambda_{v,2})
(λv,1,λv,2),
P
1
P_1
P1持有
(
m
v
,
λ
v
,
1
)
(m_v, \lambda_{v,1})
(mv,λv,1), 其中
v
=
m
v
−
λ
v
,
λ
v
=
λ
v
,
1
+
λ
v
,
2
v=m_v-\lambda_v,\lambda_v=\lambda_{v,1}+\lambda_{v,2}
v=mv−λv,λv=λv,1+λv,2.
线性关系:
[
c
1
x
+
c
2
y
]
=
(
c
1
x
1
+
c
2
y
1
,
c
1
x
2
+
c
2
y
2
)
=
c
1
[
x
]
+
c
2
[
y
]
[c_1x+c_2y]=(c_1x_1+c_2y_1, c_1x_2+c_2y_2)=c_1[x]+c_2[y]
[c1x+c2y]=(c1x1+c2y1,c1x2+c2y2)=c1[x]+c2[y],
[
[
c
1
x
+
c
2
y
]
]
=
(
c
1
m
x
+
c
2
m
y
,
c
1
[
λ
x
]
+
c
2
[
λ
y
]
)
=
c
1
[
[
x
]
]
+
c
2
[
[
y
]
]
[\![c_1x+c_2y]\!]=(c_1m_x+c_2m_y,c_1[\lambda_x]+c_2[\lambda_y])=c_1[\![x]\!]+c_2[\![y]\!]
[[c1x+c2y]]=(c1mx+c2my,c1[λx]+c2[λy])=c1[[x]]+c2[[y]].
Semi-honest security
Protocol Π 3 p c s \Pi_{3pc}^s Π3pcs包括三个阶段: input-sharing, circuit-evaluation和output-reconstruction.
Input-shaing 阶段
Protocol
Π
S
h
s
(
P
i
,
x
)
\Pi_{Sh}^s(P_i, x)
ΠShs(Pi,x)使得三方将输入的
x
x
x分享为
[
[
x
]
]
−
s
h
a
r
i
n
g
[\![x]\!]-sharing
[[x]]−sharing。具体实现为,离线阶段采样
λ
x
\lambda_x
λx, 在线阶段
P
i
P_i
Pi计算
m
x
m_x
mx并发送给
P
1
,
P
2
P_1, P_2
P1,P2.
离线阶段结束后各方持有信息:
i | P 0 P_0 P0 | P 1 P_1 P1 | P 2 P_2 P2 |
---|---|---|---|
0 | λ x , 1 , λ x , 2 \lambda_{x,1}, \lambda_{x,2} λx,1,λx,2 | λ x , 1 \lambda_{x,1} λx,1 | λ x , 2 \lambda_{x,2} λx,2 |
1 | λ x , 1 , λ x , 2 \lambda_{x,1}, \lambda_{x,2} λx,1,λx,2 | λ x , 1 , λ x , 2 \lambda_{x,1}, \lambda_{x,2} λx,1,λx,2 | λ x , 2 \lambda_{x,2} λx,2 |
2 | λ x , 1 , λ x , 2 \lambda_{x,1}, \lambda_{x,2} λx,1,λx,2 | λ x , 1 \lambda_{x,1} λx,1 | λ x , 1 , λ x , 2 \lambda_{x,1}, \lambda_{x,2} λx,1,λx,2 |
Circuit-evaluation阶段
Output-reconstruction阶段
为了重建输出 y y y, 由于每一方均只缺少一个share,因此其他任意一方将确实的share发送给它,就可以计算得到 y = m y − λ y , 1 − λ y , 2 y=m_y-\lambda_{y,1}-\lambda_{y,2} y=my−λy,1−λy,2。
完整协议
Malicious security
与半诚实情况类似,也包括三个阶段。
Input-sharing和output-reconstruction 阶段
在恶意情况下,我们需要保证诚实方拥有的shares是一致的,但是如果
P
0
P_0
P0是腐败方,那么它发送给
P
1
,
P
2
P_1, P_2
P1,P2的
m
x
m_x
mx可能不一致,为了解决这个问题,
P
1
,
P
2
P_1, P_2
P1,P2互换
H
(
m
x
)
H(m_x)
H(mx), 当出现不一致时就abort。
在重建阶段,拥有share的两方分别发送share和hash给第三方用于重建,二者不一致时就abort。
Circuit-evaluation 阶段
Π
A
d
d
\Pi_{Add}
ΠAdd是本地计算,所以不受影响,
Π
M
u
l
s
\Pi_{Mul}^s
ΠMuls则可能面临交互不一致的问题。当
P
0
P_0
P0被腐败时,离线阶段可能存在
γ
x
y
≠
λ
x
λ
y
\gamma_{xy}\neq\lambda_x\lambda_y
γxy=λxλy的问题;当
P
1
(
o
r
P
2
)
P_1(or P_2)
P1(orP2)被腐败,在线阶段交给另外一个诚实方的
m
z
m_z
mz的share可能是错误的,从而重构出错误的
m
z
m_z
mz。
假设
P
1
P_1
P1是诚实方,为了检查它重构的
m
z
m_z
mz是否正确,它向
P
0
P_0
P0发送
m
x
,
m
y
m_x,m_y
mx,my, 由于
P
0
P_0
P0知道
λ
x
,
λ
y
\lambda_x,\lambda_y
λx,λy, 它就可以重构
m
z
m_z
mz并发送给
P
1
P_1
P1用来验证,但是这样会泄露隐私,因此
P
1
P_1
P1发送给
P
0
P_0
P0时需要加上一个掩膜,即
P
1
P_1
P1发送
m
x
∗
=
m
x
+
δ
x
,
m
y
∗
=
m
y
+
δ
y
m_x^*=m_x+\delta_x, m_y^*=m_y+\delta_y
mx∗=mx+δx,my∗=my+δy,
P
0
P_0
P0计算
m
z
∗
=
−
m
x
∗
λ
y
−
m
y
∗
λ
x
+
λ
z
+
2
γ
x
y
.
m_z^*=-m_x^*\lambda_y-m_y^*\lambda_x+\lambda_z+2\gamma_{xy}.
mz∗=−mx∗λy−my∗λx+λz+2γxy.
注意到:
假设
P
0
P_0
P0知道
χ
=
δ
x
λ
y
+
δ
y
λ
x
−
γ
x
y
,
\chi=\delta_x\lambda_y+\delta_y\lambda_x-\gamma_{xy},
χ=δxλy+δyλx−γxy,它就可以计算
m
z
∗
+
χ
m_z^*+\chi
mz∗+χ并发送给
P
1
P_1
P1, 从而
P
1
P_1
P1可以验证
m
z
m_z
mz的正确性。
P
2
P_2
P2同理。
为了使得
P
0
P_0
P0获得
χ
\chi
χ, 如果向
P
0
P_0
P0公开
χ
\chi
χ,那么
P
0
P_0
P0会根据自己的信息推测出
m
x
m
y
m_xm_y
mxmy, 因此我们需要给
χ
\chi
χ加上一个掩码
δ
z
\delta_z
δz, 即计算
δ
x
λ
y
+
δ
y
λ
x
+
δ
z
−
γ
x
y
\delta_x\lambda_y+\delta_y\lambda_x+\delta_z-\gamma_{xy}
δxλy+δyλx+δz−γxy. 让
P
1
,
P
2
P_1, P_2
P1,P2随机采样
δ
x
,
δ
y
,
δ
z
\delta_x, \delta_y, \delta_z
δx,δy,δz, 计算
[
χ
]
P
i
=
χ
i
[\chi]_{P_i}=\chi_i
[χ]Pi=χi并发送给
P
0
P_0
P0,
P
0
P_0
P0相加得到
χ
\chi
χ. 这里引入一个新问题,如果
P
1
,
P
2
P_1, P_2
P1,P2有一个是恶意方,那么需要保证发送的
χ
\chi
χ是正确的。
总结一下,我们遗留下来两个问题:1)当
P
0
P_0
P0作恶时,
γ
x
y
≠
λ
x
λ
y
\gamma_{xy}\neq\lambda_x\lambda_y
γxy=λxλy; 2) 当
P
1
P_1
P1或
P
2
P_2
P2作恶时,
χ
\chi
χ的不正确发送。我们可以用三元组解决这两个问题。令
a
=
δ
x
−
λ
y
,
b
=
δ
y
−
λ
y
,
c
=
(
δ
z
+
δ
x
δ
y
)
−
χ
a=\delta_x-\lambda_y, b=\delta_y-\lambda_y, c=(\delta_z+\delta_x\delta_y)-\chi
a=δx−λy,b=δy−λy,c=(δz+δxδy)−χ。
(
[
[
a
]
]
,
[
[
b
]
]
,
[
[
c
]
]
)
([\![a]\!], [\![b]\!], [\![c]\!] )
([[a]],[[b]],[[c]])是一个三元组 (
c
=
a
b
c=ab
c=ab) 当且仅当
P
0
P_0
P0正确分享了
γ
x
y
\gamma_{xy}
γxy并重构了
χ
\chi
χ。这是因为:
Protocol
Π
p
r
c
\Pi_{prc}
Πprc验证(a,b,c)是否是一个乘法三元组,其中(d,e,f)是一个有效的三元组。
完整协议
ML协议
点积
给定d为向量
p
→
,
q
→
\overrightarrow{p}, \overrightarrow{q}
p,q, 计算其点积
p
→
⨀
q
→
\overrightarrow{p}\bigodot \overrightarrow{q}
p⨀q, 如果直接使用乘法协议,那么其通信复杂度与d线性相关,因此在离线阶段,
P
0
P_0
P0直接以
[
⋅
]
−
s
h
a
r
i
n
g
[\cdot]-sharing
[⋅]−sharing的形式分享
γ
p
q
=
λ
p
→
⨀
λ
q
→
\gamma_{pq}=\overrightarrow{\lambda_p}\bigodot \overrightarrow{\lambda_q}
γpq=λp⨀λq, 而不是对每一维分享
λ
p
i
λ
q
i
\lambda_{p_i}\lambda_{q_i}
λpiλqi. 在线阶段也不是分别重构每一维
m
p
i
q
i
m_{p_iq_i}
mpiqi,而是每一方在本地求和计算,直接重构
m
u
,
u
=
p
→
⨀
q
→
m_u, u=\overrightarrow{p}\bigodot \overrightarrow{q}
mu,u=p⨀q.
比较
给定算数分享
[
[
u
]
]
,
[
[
v
]
]
[\![u]\!], [\![v]\!]
[[u]],[[v]], 要比较
u
,
v
u,v
u,v的大小,通用方法是计算
a
=
u
−
v
a=u-v
a=u−v, 然后提取
a
a
a的最高有效位
m
s
b
(
a
)
msb(a)
msb(a)。我们利用
s
i
g
n
(
a
⋅
r
)
=
s
i
g
n
(
a
)
⊕
s
i
g
n
(
r
)
sign(a\cdot r)=sign(a)\oplus sign(r)
sign(a⋅r)=sign(a)⊕sign(r), 把对a的判断转换为对
r
a
ra
ra和
r
r
r的符号位的判断。