RSA加密中RNS相关技术及抗攻击策略解析
1. RNS正向转换
在剩余数系统(RNS)中进行任何计算之前,正向转换是关键步骤。对于以基数 - 2w 表示的数 (X = \sum_{j = 0}^{n - 1} X_j2^{wj}),对于所有 (b_i \in B),余数 (x_i) 可通过以下公式获得:
[x_i = |X|
{b_i} = \left|\left|\sum
{j = 0}^{n - 1} \left|X_j\right|\left|2^{wj}\right|
{b_i}\right|
{b_i}\right|
{b_i}]
为了加速RNS硬件模块中的正向转换,会预先计算所有 (i) 和 (j) 的常数 (\left|2^{wj}\right|
{b_i}),以便并行计算所有余数。
2. RNS蒙哥马利幂模运算
RSA实现的核心是对 (x) 进行模幂运算,即计算 (x^e \bmod N),其中 (e) 是私钥指数,此操作需要保护。为应对时序攻击和简单功耗分析(SPA)攻击,采用RNS中的蒙哥马利阶梯幂模算法,具体如下:
2.1 算法1:RNS蒙哥马利阶梯幂模运算
Data: x in A ◦ B, where A = (a1, a2, ..., ak), B = (b1, b2, ..., bk), A = ∏_{i = 1}^{k} ai,
B = ∏_{i = 1}^{k} bi, gcd(A, B) = 1, gcd(B, N) = 1 and e = (en−1...e1e0)2.
Result: z = xe mod N in A ◦ B
1 Pre - Computations: |B mod N|A∪B and |B2 mod N|A∪B
2 A0 = B mod N (in A ◦ B)
3 A1 = MM(x, B2 mod N, N, B, A) (in A ◦ B)
4 for i = n − 1 to 0 do
5 Aei = MM(Aei, Aei, N, B, A) (in A ◦ B)
6 Aei = MM(Aei, Aei, N, B, A) (in A ◦ B)
7 end
8 A0 = MM(A0, 1, N, B, A) (in A ◦ B)
蒙哥马利幂模运算的预计算项包括在基数 (A) 和 (B) 下的 (B \bmod N) 和 (B^2 \bmod N)。操作 (MM(x, y, N, B, A)) 返回在两个RNS基数 (A) 和 (B) 下的RNS蒙哥马利乘法结果 (xyB^{-1} \bmod N)。为加速此关键操作,采用了改进方法,将原始方法加速了18%,通过重新排列所谓的基扩展(BE)内的计算实现。这里采用了快速近似方法,即Posch - Posch方法。
对于在基数 (B) 下 (X) 的元素 (x_i)(其中 (x_i = X \bmod b_i),(i = 1..k)),快速近似方法确保存在一个整数 (\lambda < k)(CRT校正系数),使得:
[X = \left|\sum_{i = 1}^{k} B_i\left|x_iB_i^{-1}\right|
{b_i}\right|
{B} = \sum_{i = 1}^{k} B_i\left|x_iB_i^{-1}\right|
{b_i} - \lambda \cdot B]
(\lambda) 可通过以下公式计算:
[\lambda = \left\lfloor\frac{\sum
{i = 1}^{k} B_i\left|x_iB_i^{-1}\right|
{b_i}}{B}\right\rfloor = \left\lfloor\frac{\sum
{i = 1}^{k} \left|x_iB_i^{-1}\right|
{b_i}}{b_i}\right\rfloor = \left\lfloor\frac{1}{2^w}\sum
{i = 1}^{k} \left|x_iB_i^{-1}\right|
{b_i}\right\rfloor]
在公式中,由于 (b_i = 2^w - c_i) 且 (c_i > 0),(\left|x_iB_i^{-1}\right|
{b_i}/b_i) 可近似为 (\left|x_iB_i^{-1}\right|_{b_i}/2^w)。
2.2 算法2:具有快速近似基扩展的RNS蒙哥马利乘法
Data: x, y in A ◦ B, where A = (a1, a2, ..., ak), B = (b1, b2, ..., bk), A = ∏_{i = 1}^{k} ai,
B = ∏_{i = 1}^{k} bi, gcd(B, A) = 1, 1 * x, y < N, B > 4N and A > 2N
Result: w = xyB−1 mod N (in A ◦ B)
1 Pre - Computations in A: B−1, Bi,jN.B−1 for i, j = 1..k, −B.N.B−1, A−1j for j = 1..k
2 Pre - Computations in B: −N −1B−1i for i = 1..k, Ai,j for i, j = 1..k, −A
3 s = |x.y|B∪A
4 ————————— Base extension 1 ——————————–
5 qbi = |si(−N −1B−1i)|bi for i = 1..k
6 f = ⌊(∑_{i = 1}^{k} qbi)/2w⌋
7 wai = |siB−1 + ∑_{j = 1}^{k} qbj (Bi,jNB−1) − f.B.N.B−1|ai for i = 1..k
8 ————————— Base extension 2 ——————————–
9 qi = |wai(A−1i)|ai for i = 1..k
10 f = ⌊(2w−1 + ∑_{i = 1}^{k} qbi)/2w⌋
11 wbi = | ∑_{j = 1}^{k} qjAi,j − f.A|bi for i = 1..k
RNS蒙哥马利算法需要在RNS基数 (A) 和 (B) 中预先计算一组项。使用算法2进行模幂运算可确保 (X^e \bmod N < 2N)。
3. RNS基数随机化 - LRA对策
差分功耗分析(DPA)攻击通过探索功耗与内部变量之间的关系来恢复私钥的位。抗泄漏算术(LRA)对策提供了一种完全掩盖内部计算的方法,从而在算术层面上抵御差分或相关功耗(或电磁)分析。
在每次模幂运算之前,从一组 (2k) 个整数中随机选择两组基数 (A) 和 (B)(每组大小为 (k))。这样,在蒙哥马利域中表示的模幂运算的中间结果 (w) 在基数 (A) 或 (B) 中有大约 (C_{2k}^k \sim \frac{2^{2k}}{\sqrt{\pi k}}) 种不同的RNS表示,提供了高度的随机性。这些随机选择的RNS基数将在整个计算过程中使用。
3.1 算法3:带有LRA的RNS蒙哥马利幂模运算
Data: x in A ◦ B, where A = (a1, a2, ..., ak), B = (b1, b2, ..., bk), A = ∏_{i = 1}^{k} ai,
B = ∏_{i = 1}^{k} bi, gcd(A, B) = 1, gcd(B, N) = 1 and e = (en−1...e1e0)2.
Result: z = xe mod N in A ◦ B
1 Pre - Computations: |AB mod N|A∪B
2 A0 = MM(1, AB mod N, N, A, B) (in A ◦ B)
3 A1 = MM(x, AB mod N, N, A, B) (in A ◦ B)
4 for i = n − 1 to 0 do
5 Aei = MM(Aei, Aei, N, B, A) (in A ◦ B)
6 Aei = MM(Aei, Aei, N, B, A) (in A ◦ B)
7 end
8 A0 = MM(A0, 1, N, B, A) (in A ◦ B)
在应用LRA对策时,通过在最初的两次蒙哥马利乘法中使用预先计算的项 (AB \bmod N) 来解决蒙哥马利常数 (B \bmod N) 和 (B^2 \bmod N) 的即时计算问题。
RNS蒙哥马利乘法需要与随机选择的RNS基数 (A) 和 (B) 相关的预先计算常数,这些常数必须在每次模幂运算之前即时获得。LRA预先计算的必要常数包括:
- (\left|B_i^{-1}\right|
{b_i} = \left|\prod
{j = 1}^{k} b_j^{-1}\right|
{b_i})
- (\left|A_i^{-1}\right|
{a_i} = \left|\prod_{j = 1}^{k} a_j^{-1}\right|
{a_i})
- (\left|B^{-1}\right|
{a_i} = \left|\prod_{j = 1}^{k} b_j^{-1}\right|
{a_i})
- (\left|A^{-1}\right|
{b_i} = \left|\prod_{j = 1}^{k} a_j^{-1}\right|
{b_i})
- (\left|B\right|
{a_i} = \left|\prod_{j = 1}^{k} b_j\right|
{a_i})
- (\left|A\right|
{b_i} = \left|\prod_{j = 1}^{k} a_j\right|_{b_i})
然后可得到其他相关常数:
1. (\left|-N^{-1}B_i^{-1}\right|
{b_i} = \left|-N^{-1}\right|\left|B_i^{-1}\right|
{b_i}) 和 (\left|-N^{-1}A_i^{-1}\right|
{a_i} = \left|-N^{-1}\right|\left|A_i^{-1}\right|
{a_i}),对于 (i = 1..k)
2. (\left|B_i\right|
{a_j} = \left|B\right|
{a_j} \left|b_i^{-1}\right|
{a_j}) 和 (\left|A_i\right|
{b_j} = \left|A\right|
{b_j} \left|a_i^{-1}\right|
{b_j}),对于 (j = 1..k)
3. (\left|B_iNB^{-1}\right|
{a_j} = \left|B_i\right|
{a_j} \left|N\right|
{a_j} \left|B^{-1}\right|
{a_j}) 和 (\left|A_iNA^{-1}\right|
{b_j} = \left|A_i\right|
{b_j} \left|N\right|
{b_j} \left|A^{-1}\right|
{b_j}),对于 (j = 1..k)
4. (\left|-B\right|
{a_i} = \left|B\right|
{a_i} \left|-1\right|
{a_i}) 和 (\left|-A\right|
{b_i} = \left|A\right|
{b_i} \left|-1\right|
{b_i}),对于 (i = 1..k)
5. (\left|-BNB^{-1}\right|
{a_i} = \left|-B\right|
{a_i} \left|N\right|
{a_i} \left|B^{-1}\right|
{a_i}) 和 (\left|-ANA^{-1}\right|
{b_i} = \left|-A\right|
{b_i} \left|N\right|
{b_i} \left|A^{-1}\right|
{b_i}),对于 (i = 1..k)
模幂运算后,结果需转换回基数表示。对于LRA对策,使用基于中国剩余定理(CRT)的方法进行反向转换需要即时计算以基数 - 2w 形式表示的 (B_i) 和 (B) 的值,复杂度较高。因此,采用混合基数系统(MRS)进行RNS到基数的转换。该方法分两步计算:
1. 使用优化的加纳算法获得 (x_i)((X) 在 (B) 中的RNS表示)的MRS表示,所有预先计算的值(逆元 (\left|b_i^{-1}\right|_{b_j}))的获得与RNS基数随机化无关。
2. 通过应用霍纳法则将MRS结果转换为基数表示。
反向转换涉及基于进位的算术,但与模幂运算相比,这些操作所花费的时间可以忽略不计。
4. 硬件设计
提出的硬件使用一组称为RNS单元的独立数据路径来计算正向转换(基数到RNS)、LRA预先计算、模幂运算和反向转换(RNS到基数),其实现遵循类似于先前提出并改进的架构,即cox - rower架构。
RNS单元包含双端口随机存取存储器(RAM),用于存储LRA预先计算所需的预先计算值,每个RNS单元包含基数 (A) 和 (B) 所有模数的预先计算元素,虽然会增加内存开销,但可加速即时预先计算。
每个RNS单元的核心是算术逻辑单元(ALU),用于计算模加法/减法、模乘积以及反向转换(CRT或MRS)中的基于进位的算术运算。为加速模约简,采用了一种使用伪梅森数 (b_i = 2^w - c_i)(其中 (c_i < 2^{w/2}))的方法。计算 (x \bmod b_i) 时,先执行以下步骤两次:
[x \leftarrow (x \bmod 2^w) + c_i \cdot (x/2^w)]
然后 (x) 将在 ([0, 2^{w + 1}]) 范围内,最后通过有条件地减去 (b_i) 得到余数。系数 (c_i) 也是ALU块的输入。由于RNS基数随机化(LRA)使RNS单元在不同模数下操作,所有 (c_i)((i = 1..2k))存储在只读存储器(ROM)中。每个RNS单元为 (A) 的一个RNS通道和 (B) 的一个RNS通道执行操作,这些通道的选择以及相应的系数 (c_i) 由控制单元的随机索引输入定义。
硬件架构还包含一个加法器块(f块),用于计算两个基扩展中的 (f) 值。该块将所有输入值相加,并返回该和的 (k) 个最高有效位作为 (f)。
硬件对策还依赖于RAM访问保护。根据算法3,在蒙哥马利阶梯的二进制循环中,有四个寄存器((A_0) 在 (A) 中、(A_0) 在 (B) 中、(A_1) 在 (A) 中、(A_1) 在 (B) 中)用于存储模乘法或平方运算的中间结果。为了随机化这些中间结果的存储位置,提出了一种方案,使得在模幂运算过程中,中间值的存储位置不断变化,从而模糊电磁辐射,抑制由于RAM内存寻址导致的侧信道泄漏。
5. 时钟周期和综合结果
| 项目 | RSA无保护 | RSA带LRA | 开销 |
|---|---|---|---|
| RSA - 512时钟周期 - LRA延迟 | 0 | 1060 | 100% |
| 基数到RNS | 48 | 48 | 0% |
| 蒙哥马利幂模运算 | 78210 | 78210 | 0% |
| RNS到基数 | 685 (CRT) | 840 (MRS) | 18% |
| 总计 | 78943 | 80158 | 1% |
| 综合结果 - 4输入查找表(LUTs) | 17124 (28%) | 17769 (29%) | 3% |
| 综合结果 - 切片 | 8717 (27%) | 9510 (30%) | 8% |
| 综合结果 - 18 × 18乘法器 | 104 (100%) | 104 (100%) | 0% |
| 综合结果 - 内存(KB) | 8.5 (5%) | 118 (66%) | 92% |
从这些结果可以看出,LRA对策带来的时间开销仅为1%,但内存开销达到92%,面积开销为3%。
通过上述技术和对策,可以在RSA加密中有效抵御多种攻击,提高加密系统的安全性和鲁棒性。
6. 对电磁分析的鲁棒性
碰撞或选择消息对攻击会利用相同计算的存在来威胁模幂运算。相关电磁分析(CEMA)则通过计算电磁迹与一些猜测的中间值之间的相关性来恢复秘密信息,这些中间值根据指数位由设备进行操作。
为了评估LRA和硬件对策的有效性,首先在无保护的硬件设计(即具有固定基数的RNS - RSA)上应用这些攻击,以设定鲁棒性参考水平。然后,在受保护的实现上重新应用这些攻击,以量化鲁棒性的增强。为了统一采集的电磁迹的表示,定义如下:
[EM(T_E,x,e) = \left[EM(T_M,x,e_{n - 1}), EM(T_S,x,e_{n - 1}), \cdots, EM(T_M,x,e_0), EM(T_S,x,e_0)\right]]
其中 (EM(T_E,x,e)) 是在模幂运算期间所有乘法和平方间隔的集合,指数 (e = {e_{n - 1}, e_{n - 2}, \cdots, e_1, e_0}),输入消息为 (x),且:
1. (EM(T_M,x,e_i)) 是在时间窗口 (T_M) 内,指数位为 (e_i) 时进行模乘法(M)的电磁迹。
2. (EM(T_S,x,e_i)) 是在时间窗口 (T_S) 内,指数位为 (e_i) 时进行模平方(S)的电磁迹。
3. (T_E) 是整个模幂运算的时间窗口。
还定义 (V_{em}(t, x)) 为以 (x) 为输入消息的模幂运算在时间 (t) 时电磁场的变化。
电磁迹通过一个测量平台收集,该平台包括:示波器(带宽:2.5 GHz;采样率:40 GS/s)、带宽为200 MHz的放大器、200 μm的探头、电动平台、FPGA Spartan - 3 XC3S1600板和用于控制整个测量设置的PC。
6.1 电磁碰撞攻击
碰撞攻击类似于简单功耗分析(SPA)攻击,基于选择消息对。攻击者需要测量密码系统处理这两个选择消息期间的功耗或电磁辐射,然后对收集的两个迹应用滑动过程,通过减法检测相同计算的发生。这种碰撞通常出现在模幂运算的平方操作中。文献中提出了几种碰撞攻击,如倍增攻击(DA)和Yen等人的攻击,这些碰撞在平方操作中观察到,适用于从左到右的指数算法;Homma等人的攻击也适用于从右到左的指数算法。
由于蒙哥马利幂模算法是从左到右的算法,因此考虑倍增攻击(DA)。按照DA程序,对电磁迹进行截断、重新对齐和减法操作,确认了相同中间模平方结果的发生。
- 无保护的RNS - RSA设计实验 :当RNS基数固定时,在无保护的RNS - RSA设计上进行了第一次实验。使用电磁平台识别碰撞的发生时,每个选择消息需要一个平均电磁迹(20次试验)。图3(c)显示了在未采取对策的目标RSA - RNS硬件上进行碰撞分析的结果,注意在执行冗余计算的区域(标记为“感兴趣区域”),差分迹的幅度接近零。
- 应用对策后的实验 :图3(d)显示了对具有RNS基数随机化(LRA)的RNS - RSA应用DA时的差分迹。正如预期的那样,当激活对策时,即使使用示波器的平均模式(20次试验),也无法直观地检测到碰撞。
为了证明DA的有效性并量化对策的效果,通过绘制信噪比(SNR)随平均试验次数的变化来定义碰撞检测标准。根据DA,如果指数在 (e_i) 和 (e_{i - 1}) 处出现连续零位,则电磁迹 (EM(T_S,x,e_{i - 1})) 和 (EM(T_S,x^2,e_i)) 表示冗余平方(碰撞)。SNR根据以下公式计算:
[SNR = 20 \cdot \log_{10}\frac{P_{signal}}{P_{noise}} = 20 \cdot \log_{10}\frac{\sigma^2(EM(T_S,x,e_{i - 1}))}{\sigma^2(EM(T_S,x,e_{i - 1}) - EM(T_S,x^2,e_i))}]
其中 (\sigma^2(EM(T_S,x,e_{i - 1}))) 是对应于平方操作的时间窗口 (T_S) 内样本的方差,(\sigma^2(EM(T_S,x,e_{i - 1}) - EM(T_S,x^2,e_i))) 是时间窗口 (T_S) 内差分迹样本的方差。定义 (SNR_1) 为 (EM(T_S,x,e_{i - 1}) = EM(T_S,x^2,e_i))(碰撞)时的情况,(SNR_2) 为 (EM(T_S,x,e_{i - 1}) \neq EM(T_S,x^2,e_i))(无碰撞)时的情况。如图4(a)所示,如果发生碰撞,即使不进行平均,(SNR_1) 也明显大于 (SNR_2),因为公式中的分母几乎为0(碰撞抑制了信号,仅剩下噪声)。而如图4(b)所示,当激活RNS基数随机化对策时,即使对两个信号进行1000次平均,也无法检测到碰撞。
总结
通过对RNS相关技术在RSA加密中的应用以及抗攻击策略的研究,可以得出以下结论:
1.
技术有效性
:RNS正向转换、蒙哥马利幂模运算、RNS基数随机化(LRA)对策等技术的结合,有效地提高了RSA加密系统对各种攻击(如时序攻击、SPA攻击、DPA攻击、电磁碰撞攻击等)的抵抗能力。
2.
性能权衡
:虽然LRA对策带来了较高的内存开销(92%)和一定的面积开销(3%),但时间开销仅为1%,在安全性和性能之间取得了较好的平衡。
3.
硬件设计优势
:提出的硬件设计通过RNS单元的合理配置和相关对策(如RAM访问保护),实现了高效的计算和有效的抗攻击能力。
综上所述,这些技术和硬件设计为RSA加密系统提供了一种可靠的安全解决方案,可在实际应用中有效保护敏感信息。
流程图
graph TD
A[输入消息x和指数e] --> B[正向转换(基数到RNS)]
B --> C[LRA预计算]
C --> D[模幂运算]
D --> E[反向转换(RNS到基数)]
E --> F[输出结果]
G[电磁攻击检测] --> H{是否检测到碰撞?}
H -- 是 --> I[未激活对策时可恢复私钥]
H -- 否 --> J[激活对策,保护私钥]
对比表格
| 攻击类型 | 无保护情况 | 有LRA对策情况 |
|---|---|---|
| 电磁碰撞攻击 | 可通过少量平均迹检测到碰撞,易恢复私钥 | 即使大量平均也难以检测到碰撞,有效保护私钥 |
| 时间开销 | 低 | 增加1% |
| 内存开销 | 低 | 增加92% |
| 面积开销 | 低 | 增加3% |
超级会员免费看
29

被折叠的 条评论
为什么被折叠?



