SM2算法的抗侧信道攻击

SM2 算法中底层模块抗侧信道

   标量乘 ( [ k ] G [k]G [k]G) 运算过程中需要用到大量的倍点运算与点加运算。传统倍点运算与点加运算之间由于需要的运算次数不同,功耗存在明显区别,攻击者可以通过功耗波形特征分析密钥信息。传统算法如下图所示:
标量乘的传统算法
   在传统算法中, d i d_i di 等于 0 0 0 1 1 1 对应不同的执行指令,图中符号 Π 0 \Pi_0 Π0 代表倍点运算,符号 Π 1 \Pi_1 Π1 代表点加运算。可参考侧信道原子算法,调整点加和倍点运算过程中寄存器运算顺序,采用原子块形式将点加运算和倍点运算都划分为若干个原子小块,每个小块先进行模乘运算,再进行模加运算,最后进行模减运算,其结构表示为 Γ \Gamma Γ。用 '☆’表示不影响最终结果的一次加/减的空操作。如此,实际计算过程中总在执行一组组相同操作,点加和倍点之间的功耗曲线将变得更加连续,从而达到抗SPA攻击的目的。以固定参数倍点运算和固定点加运算为例,如表1所示是改进的原子小块点加运算,如表2所示是改进的原子小块倍点运算。

表1 改进的原子小块点加运算
改进的原子小块点加运算

表2 改进的原子小块倍点运算
改进的原子块倍点运算

SM2 算法中标量乘抗侧信道模块

   NAF 标量乘法算法是标量乘法算法的一种增强,该算法使用了非邻接形式(Non-Adjacent Form)表达,减少了算法的期望运行时间。下面是具体算法细节:
   将 标量表示为 k = ∑ i = 0 l − 1 k i × 2 i k =\sum_{i=0}^{l-1}k_i\times 2^i k=i=0l1ki×2i,其中 k i ∈ { 0 , + , − } k_i\in \{0,+,-\} ki{ 0,+,}。一个十分有用的有符号整数表达,规定 k l − 1 ≠ 0 k_{l-1}\neq 0 kl1=0,且没有两个相邻的 k i = 0 k_i = 0 ki=0
   NAF 表示有如下性质

  • 每个正整数 k k k 都有独一无二的 NAF 表达。记作 N A F ( k ) NAF(k) NAF(k)
  • N A F ( k ) NAF(k) NAF(k) 有所有 k k k的有符号表达最少得非零数字;
  • N A F ( k ) NAF(k) NAF(k) 的长度最多比二进制表达多1位;
  • 如果 N A F ( k ) NAF(k) NAF(k)长度为 l l l,那么有 2 l 3 < k < 2 l + 1 3 \frac{2^l}{3}<k<\frac{2^{l+1}}{3} 32l<k<32l+1;
  • 在所有长度为 l l l 的 NAF中,非零系数的概率约为 1 / 3 1/3 1/3

N A F ( k ) NAF(k) NAF(k) 能够通过以下算法计算
输入 : 正整数 k k k
输出 : N A F ( k ) NAF(k) NAF(k)
i ← 0 i\leftarrow 0 i0
k ≥ 0 k \geq 0 k0 执行
   若 k k k 为奇数,则
      k i ← 2 − ( k m o d    4 ) k_i\leftarrow 2-(k \mod 4) k

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_74043383

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值