论文笔记:Automatic generation of HCCA-resistant scalar multiplication algorithm by proper sequencing of field multiplier operands
Poulami Das · Debapriya Basu Roy · Debdeep Mukhopadhyay
Received: 5 February 2018 / Accepted: 28 July 2019 / Published online: 8 August 2019
© Springer-Verlag GmbH Germany, part of Springer Nature 2019
IIT Kharagpur, Kharagpur, India
CONTRIBUTIONS
- 提出了一种对策,可以将现有的ECC统一算法以防御HCCA(Horizontal collision correlation analysis)。
- 该对策将统一算法转换为更安全的形式,从而无法利用基于操作数共享属性的乘法的边通道泄漏之间的关系。需要通过文章提出的算法确定安全序列。
- 在实现上没有额外的时序和区域开销。
Target algorithm
椭圆曲线加密算法1:
(来源于SM9第一部分总则,虽然文中并未给出具体ECC的加密实现,但是大部分ECC的实现都是基于这个算法。别的常见算法也可以参考该总则。)
Horizontal collision correlation analysis(HCCA)
如算法一所得,点倍操作对应的循环是从密钥位的高位到地位执行的,因此对于密钥位10110来说,该算法做的操作是:
0: DBL
1: DBL ADD
1: DBL ADD
0: DBL
1: DBL ADD
与论文中图一所述一致。图中提到X1Y2与X2Y1对应的功耗曲线相关性很低,但是X1Y1与X1Y1对应功耗曲线的相关性却很高。
Pearson correlation coefficient:
proposed countermeasure
- 左上角第一张图,将算法中所用到的模乘分为三级。(分为三级的原因是:第二级会使用第一级乘法的结果,第三级会用第二级乘法的结果。)
- 每一级生成一个图(create graph),将该图使用相关系数重新生成一个图(complement islands),即相关性高的两个结点进行相连。
- 最后一个图中,当虚线结点从X1Y1转变为X2Y2时,此时它俩之间的相关性系数就降低了,所以此时边断开。这个时候就起到了盲化的作用。
此时,如下图5起到了盲化作用。
ALGORITHM 2: Safe_sequence_converter() : Algorithm to determine safe operand ordering of multiplication pairs
- 使用安全序列实现盲化算法的攻击:将这种问题抽象为多项式时间内可归约的图着色问题1。
- 这两个问题的相似点在于,盲化后加密算法生成的图结点的相关性如图4(1),相关性用边表示,边连接两边的图结点肯定不是属于同一密钥位,即两个结点不能图同一个颜色。
- 综上,安全序列问题和图着色问题是一致的。依次可用图着色问题解决安全序列问题。而图着色问题是一个很常见的算法,这篇文章将复杂问题简单化,恢复了密钥位。
Experimental & result
- ECC scalar multiplication
- Edwards & Weierstrass(HCCA)
- a pair of multiplications which shares both the operands during execution of point doubling
- SASEBO-GII
- The cost of the implementation was 5664 slices, 16 DSPs with the frequency of 125 MHz.
- collect around 600 EM traces of scalar multiplication.
advanced:
- 基于每次执行加法运算时基点的随机化,因此从两个加法运算中选择的任何两个乘法都不受操作数共享属性的影响。 同样,基点的随机化导致中间乘法器操作数的随机化。
Rearranging attack
- 常规算法:每次迭代都计算加倍和加法运算。考虑两个寄存器来存储每次迭代的中间结果。在连续迭代中观察到的两个寄存器的值取决于密钥,因此导致检索秘密密钥。
- 另一种方法:一种针对ECC算法的增量密钥检索过程,其中基于秘密的已检索部分和当前迭代的猜测密钥位,为第i次迭代创建模板跟踪。
- 在本文的实现中,算法3对标量乘法中的每个加法(加倍)操作使用不同的随机值;因此,不能利用基于先前确定的密钥位值的数据依赖性。
- 故用重排攻击
step
- 从相关部分操作提取迹,然后按表示LIM(A,B)计算的顺序排列;
即从LIM(B,A)的迹入手,重构LIM(A,B)的迹(按照算法1) - 用HCCA攻击,可从pair{LIM(A,B),LIM(C,D)}区分
修改算法2
算法2(上面序列算法)输出包含乘法的集合S’,其中LIM的操作数需要以相反的顺序发送。对于集合S’中的所有乘法,乘法应计算为LIM’(B,A),其中算法LIM将长度为w/2的单词作为输入,其余与LIM相同。 通过此修改,LIM’(B,A)将生成部分乘积:
这将产生相同的最终输出,但是会更改所有单个部分的结果。 因此,重新安排攻击将不再起作用。 对S’集合中的乘法使用LIM算法进行更通用的修改,以使各个部分乘积与LIM(A,B)中的乘积不同,从而解决了重排攻击问题。
相邻两端的结点不能着相同的颜色,给定颜色种类N,输出涂色序列。 ↩︎