For ABY Note: Sharing Conversions

less than 1 minute read

Published:

关于论文ABY的阅读笔记。The Conversion Method between Arithmetic, Binary and Yao Sharing –算术共享、布尔共享和混淆电路共享的相互转换

在2015年Daniel Demmler等人在NDSS上发表了ABY,设计了一个共享、布尔共享和混淆电路共享的相互转换的协议。在机器学习的运算中,需要经常在算术(乘法和加法)和二进制(非线性激活函数、最大池化、平均值等)运算之间来回变换。而安全多方计算中的算术共享(Arithmetic Sharing)、布尔共享(Boolean Sharing)、和姚共享(Yao’s Sharing)对于不同算子,如加乘法和比较等各有优势。如何设计更高效的算法、平衡不同技术之间的优势,发挥最好的性能,是文章主要讨论的。

位分解

算术共享 转换为比特秘密共享向量 使得 $ x = \sum^k_{i=1}2^{i-1}x[i] $。每方把输入到布尔电路中求和。为了减少通信轮次和复杂度,转换成。这步无需交互,但是可能通过线性组合可能会泄露信息从而带来安全隐患。 不过由于后续的随机化和$ x_1, x_2, x_3 $的分布,可证明它的安全性。执行三方安全计算二进制秘密共享可以利用$2k$轮计算$\mathsf{RCFA}(\mathsf{RCFA}(x_1,x_2),x_3)$行纹进位全加器 (ripple-carry full adder) 电路实现。为了避免多次通信轮数,采用超前进位加法器(Parallel Prefix Adder, PPA),利用分治算法(Divide and Conquer Algorithm)计算两个输入的总和,需要$\log k$轮通信和$k\log k$个门。这使得在半诚实和恶意模型下两个加法电路的消耗接近单个PPA的成本,通信轮次和通信复杂度降低一半。同样,利用$k$个全加器(Full Adder) ,这里$i \in {0, \cdots, k-1}$,将$x_1 + x_2 + x_3 $ 的计算简化为$2c+s$,其中$c[i], s[i]$ 表示比特串$c$和$s$的第i位。注意,一般由计算两个比特的加法和一个进位链接起一个全加器,这里用全加器的组成把运算单元由3个变成2个,即$(x_1, x_2, x_3)\rightarrow (c,s)$,同时只需一轮通信交互,而不是$k$轮。最终结果可以用一个并行前缀加法器(Parallel Prefix Adder)计算。同样,半诚实模型中,第2方可将$(x_1+x_2)$作为三方计算隐私输入,并得到。两步操作总共增加$1+\log k$轮通信,远少于两倍的交互次数和通信量。

位提取

转化为二进制时,只需要$O(i)$个门和$O(\log k)$轮,在并行前缀加法器中删除了所有不必要的门,逻辑电路只需$2i$个门,这可以实现部分优化。

位组合

转换一个$k$比特长的二进制秘密共享成算术共享,这实际上使用与位分解相同的电路,只是操作顺序略有颠倒。第1、2方输入随机共享,第3方输入随机共享,这是最终秘密共享的一部分,显然前者第1、2方持有,后者第2、3方持有。第1、2方拥有$\text{PRF}$的密钥$\kappa_1, \kappa_2, \kappa_3$,第3方拥有$\text{PRF}$的密钥$\kappa_2, \kappa_3$,可以生成得到。秘密共享定义为,$N$是一个公共的随机数。用同样的方法,依次传递角色可以生成共享。每方先用全加器计算,然后利用并行前缀加法器计算。在半诚实模型下,可以进一步优化,第2方把$(-x_2-x_3)$作为秘密输入,利用并行前缀加法器计算。无论怎样,向第1,3方揭露$x_1$,最后的秘密共享被定义为,需要通信$1+\log k$轮和$k+k\log k$个门。

位插入

虽然共享算子之间的转换可以任意组合使用,但设计一个自定义协议直接计算这些组合效率会更高。在逻辑回归和神经网络的训练过程中,激活函数一般是非线性的活着时近似线性的,需要重复上述操作计算线性分段函数或多项式分段函数。这些操作用一个算术共享乘以二进制比特共享,并输出一个算术共享。构建这个协议的困难在于,假设在共享,即$b=b_1 \oplus b_2 \oplus b_3$,输出结果是在上的$c = c_1 + c_2 + c_3 \bmod 2^k$。在半诚实模型下的三方不经意传输(OT)协议,和两方$(1,2)-\text{OT}$一样,也由发送发和接收方组成。另外增加一个不接受任何输出但知道接收方比特选择的辅助方。用函数的方式定义是,有发送方、接收方和辅助方,$((m_0, m_1), c, c) \mapsto (\bot, m_c, \bot)$。ABY3给出了一个信息论安全的方案。发送方和辅助方随机抽样两个串,并且两方都知道这两个值。发送方盲化信息$m_0 \oplus w_0, m_1 \oplus w_1$,并把它们发送给接收方。辅助方知道接收方需要的信息$m_c$。辅助方向接收方发送$w_c$,接受方可以恢复出$m_c$,这个过程产生三次交互。
此计算一般分两种形式,是十进制公开值或者十进制秘密共享乘二进制共享。对于前者需计算是一个公开值,$b \in {0, 1 }$是第1方拥有需要共享的比特。第3方发送者取随机数并定义两个消息。第2方接收者输入$b_2$并获得消息$m_{b_2} = (b_2 \oplus b_1 \oplus b_3)a-r = ba-r$。第1方辅助方也知道$b_2$,可以执行上述的三方协议。各方利用在本地生成重零共享(Replicated Zero Sharing)$(s_1, s_2, s_3)$去计算。为了实现有效的$(2,3)-$门限共享,第2方把$c_2 = ab-r+s_2$发送给第1方。上述过程产生两轮通信。或者,把第3方作为发送方,多执行一次三方协议,把发送给第1方,第1方就在第一轮通信中输入$b_2$得到消息$c_2$。这总共产生$6k$个比特和一轮通信。后者计算。这种情况并行执行两次。这种方式$a$不需要公开,第1方就在第一轮通信中输入$b_2$得到消息$c_2$方可以秘密选择$a$,因此表达式可以写成。第一轮第1方是发送方,第二轮第3方是发送方,每一轮每方通信大小是$4k$比特。
由于第1方可以任意选取$a$的值作为$\text{OT}$的输入,上述半诚实模型不能抵抗恶意攻击。但是为了避免这个情况,需要在$b$的比特串中进行位插入操作。先计算,然后计算。每一方可以在本地计算,这里。可以通过模拟算术电路这些值的,先计算,再计算。这种变换在两轮通信中发送$2k$比特。每方在本地用$a$乘以$b$的秘密共享,计算得到。与前面的位分解相比,这种方法将减少通信轮数和通信复杂度到$O(\log k)$。另一种情况,可以重复操作位插入把转换到,然后用乘法协议计算

联合Yao输入

比特$x$的Yao共享(也叫Garbled Circuit, GC)过程如下,第1方(评估器)持有,另外两方拥有和一个全局随机数使得。GC的转换的一个好吃是双方都知道彼此的输入,比如,第1、2方均知道比特$x$并想得到输出共享。半诚实模型中,显而易见第2方可以在本地生成并把它发送给第1方,第1方用它评估GC。在恶意模型中,则需要第1方在不知道下验证的编码$x$。 第2方生产一个承若(Commitments)哈希值并发给第3方,第2、3方用这同一个随机值生成(在第3方眼中这是一个随机数)发送给第1方,并允许第1方检查它的正确性。第1方验证双方相同的承若并解开承若。这次交互包括两个承诺和一个解除承诺,每次输入比特最多通信一轮。若要共享多个比特(bits),限制承若的上限是 (是一个统计的安全参数)。 在公布秘密之前,第1方需要接受无承若的标签,并计算这些标签中上的随机线性组合 的参数( 上)。第2、3方接受第1方线性组合并计算个组合,从而获得。 和之前的操作一样,第2、3方发送 给第1方,其中一方可以用承若的哈嘻值代替。如果第1方验证两个承若集合是相同的,就解开承若,对所有的$i$恢复出。 第1方收到一个错误的标签,这个测试通过的概率是。另一种情况是第2、3方均知道$x$,他们生成可能不需要通信。利用三方秘密共享之间的随机操作,每方在本地取样,第2、3方定义

Yao2Binary,

ABY文章称,密钥相当于一组序列比特,它的LSB(最低有效位)形成$x$的两方共享,即,这里。 第3方知道 即是持有 。第1,2方本地计算另外一个随机比特$r$,第1方发送给第3方。这就生成了三方复制共享,在这一次交互中,只产生一个比特的通信。恶意模型中,第3方验证第1方发送过来的比特位,用以确保第1方使用了。第1、2方取样,第2方发送给第1方。 第2、3方均发送承若 给第1方,这里。 第1方发送给第3方,并且由第3方验证这个值是否在集合中。第1方验证承诺并解开承若,还验证第2、3方发送过来的是否相同。显然,每方都可以计算三方共享。 第3方为计算。这个转换经历两次通信,最后秘密共享分块的计算需要一轮通信。因此,第一轮之后可以使用秘密分块,只要不泄露随机数。如果验证失败,各方中止协议。

Binary2Yao

,每方使用联合Yao输入共享。 最终的共享可以用乱码电路来计算这三个值的XOR,即。利用,使得各方之间无需任何通信,可以由第1方在本地计算。 半城市模型中,第2方知道$x_2$和 $x_3$,可以在本地计算,并将发送给第1方,第1方可以在本地计算
Yao共享转算术共享

从Yao共享转成算术共享,首先需要把把Yao共享转换成二进制共享,然后执行位组合或位插入(单比特)协议。由于输入的是Yao共享形式,为CRFA加法电路(文章未说明)选择三方计算的Garbled Circuit。 第1、2方取样,第2、3方取样,然后用上述方法进行联合输入。然后使用GC计算,并发送共享给第1、3方。形成了$x$新的算术共享。这需要通信$k$个联合输入比特(只有$x_2$)和$2k$混淆门。半诚实模型中,第3方在本地计算$x_2+x_3$ 并将它作为输入计算,因此,乱码电路的成本降低了一半。
算术共享转Yao共享

每方联合输入的共享并生成。然后用一个GC来生成。半诚实模型中,第2方本地计算$ x_2+x_3 $,并发送给第1方,第1方便用其计算 ,最终计算共享