算术掩码到布尔掩码

目标:已知算术掩码A、r,欲求布尔掩码x',满足

A + r=x'\bigoplus r

参考文献

[1] Coron J S ,Johann Großschädl, Tibouchi M ,et al.Conversion from Arithmetic to Boolean Masking with Logarithmic Complexity[C]//International Workshop on Fast Software Encryption.Springer, Berlin, Heidelberg, 2015.DOI:10.1007/978-3-662-48116-5_7.

解决方案:

1. The Ripple-Carry Adder

算法思想

x'=(A+r)\bigoplus r = (A \oplus r\bigoplus v_{k-1}) \oplus r = A\oplus v_{k-1}

其中,u_{k-1} 是加法进位串,A、r均为k比特的数据。

x_{j},y_{j},v_{j}分别对应A、r、进位串,它们之间的关系为:

即,

v_{k-1}的获取需要k-1次迭代,由此算法的时间复杂度为O(k)。

2. The Kogge-Stone Carry Look-Ahead Adder

算法思想

类似于The Ripple-Carry Adder,其关键在于加法进位串的求取,区别在于此处加法进位串的表达由一个函数模型反复推演引申而来,而非上文的直接推导。其优势为O(log k)的时间复杂度。

推演过程具有一定的复杂性,为了方便记忆,将其摘抄于此:

此处,用c表示进位加法串,关于x+y,

则存在如下关系:

若i从1开始,上述关系可表示为:

\left\{\begin{matrix} c_1 = b_0 = x^{(0)}\wedge y^{(0)}\\ \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, c_i = (a_{i-1}\wedge c_{i-1})\oplus b_{i-1}, \forall i > 1 \end{matrix}\right.

单个比特之间的\wedge等同于模2乘法,单个比特间的异或等同于模2加法,

因此,上述关系又可以表示为:

\left\{\begin{matrix} c_1 = b_0 = x^{(0)}\cdot y^{(0)}\\ \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, c_i = (a_{i-1}\cdot c_{i-1}) + b_{i-1}, \forall i > 1 \end{matrix}\right.

该式的另一种表达方式为Q(m,0),即c_{m+1} = Q(m, 0), 其中

且 函数Q(m,n)具有如下性质:

由此可知,Q(m,0)的计算规模在每一次递归中都可以折半,通过并行,其时间复杂度可以达到对数级别.

如何在不并行的情况下,也能达到对数时间复杂度呢?

[1]作者巧思妙想,作出如下定义:

可知,c_{j+1} = Q(j,0) = G(i,j) \, \, with \, \, j < 2^i.

j\geq 2^{i-1}有:


且:

\left\{\begin{matrix} \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, G_{i,j}=G_{i-1,j} = Q(j,0))\\ P_{i,j} = P_{i-1,j} \end{matrix}\right. \, \, \, \, \, \, \, with\, \, \, 0\leq j< 2^{i-1}

此时,单比特的进位表示只是换了一种递归表达方式,从Q(j,0)到G(i,j),并未看出明显的进步。

[1]作者再次定义如下变量:

促成从单个比特的进位表示向比特串的进位表示的推进。

由于:

相较于之前Q(j,0)和G(i,j)的表达,Gi的计算无需在并行的环境下就能实现对数时间复杂度的计算。

此外,令

n = \left \lceil log_2(k-1) \right \rceil

由于Pi和Gi的初始值分别为:

可得如下伪代码:

补充:

关于Q(m,n),原文的描述如下:


遗留问题:

作者怎么想到从Q(m,n) -> Pi,j & Gi,j -> Pi & Gi 这样的变化呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值