密码学中RSA与DH批量处理及高速实现方法解析
1. 批量Diffie - Hellman(Batch - DH)的性能提升
在密码学领域,对于使用缩写指数的Diffie - Hellman(DH)算法,其性能提升与模数大小紧密相关。当采用最小尺寸的缩写指数(对应$o(1) = O$)时,对于512位模数,相关方法能带来1.6倍的性能提升。随着模数尺寸的增加,提升因子也会相应增大,在接近2000位模数大小时,提升因子可达2.0。而对于更保守的缩写指数(对应$\tilde{ (1)} = 1$),该方法对512位模数能实现2.4倍的提升,在接近2000位模数大小时,可达到3.0倍的提升。
需要注意的是,任何针对使用缩写指数的DH攻击方法的改进,都会使得本文所提出的方法更具吸引力。不过,要实现图3所示的最大可能提升效果,每当密码服务器查看其队列时,至少需要有$b$个请求等待服务。但在实际情况中,服务请求的时间分布并不均匀,更适合用泊松过程来建模。因此,要确保服务器队列中始终有$b$个输入,同时还要对服务请求与其关联响应之间的延迟保持合理的性能约束,是比较困难的。
为了缓解这一问题,可以不仅预先计算大小为$b$的批次,还计算$b/2$、$b/4$等大小的批次。这样,当队列中的请求少于$b$个时,相较于直接进行$n$位指数运算,至少能有一定的性能提升。但需要注意的是,当批次大小小于4时,使用标准的缩写指数DH可能会更高效。基于我们所构建的处理场景,我们可以灵活地在不同技术之间切换,仅在并行方法具有优势时使用它。当请求数量较少时,效率不是非常高也没关系,只要不超过已安装的计算能力即可。
2. 为何不采用批量RSA(Batch - RSA)
批量DH和批量RSA在实时计算需求方面具有可比性。然而,在响应时间至关重要的系统(如上述便携式通信系统)中用于密钥协商时,批量RSA会引入不可接受的延迟。
使用批量RSA或批量DH时,需要将指数动态分配给服务请求,以便在保持适当响应时间的同时,使预计算变得可管理。要使用批量RSA,$j$必须使用相同的模数$N_j$和不同的短指数$e_i$(这里不存在安全漏洞),而对应的秘密指数$d_i$则是全尺寸的。在RSA中,网络必须将其公钥发送给便携式设备,便携式设备使用公钥对信息进行加密,然后将结果发送给网络,网络再计算逆函数。因此,在网络传输其公钥信息与网络开始进行秘密计算之间,存在一个随机延迟(取决于便携式设备的响应时间)。而对于DH,不存在这样的随机延迟,网络一旦收到来自便携式设备的公钥,就可以立即开始进行秘密运算。
如果采用批量方法,DH允许网络一次性定义并计算一个批次。而RSA则要求网络先定义一个批次,发送信息,然后等待批次中所有便携式设备返回响应后才能开始计算。这会不可接受地降低整体性能,因为批次中所有成员的响应时间都依赖于批次中响应最慢的便携式设备。所以,在便携式通信系统的密钥协商协议中,不适合使用批量RSA。
3. RSA方案的高效实现
为了实现RSA加密方案的高速处理,通常需要提高模幂运算的速度,而模幂运算可以通过迭代模乘法来完成。因此,寻找加速512位或更长整数模乘法的技术就显得尤为重要。
3.1 高效的模乘法电路
考虑模乘法$R = A \cdot B \mod N$(其中$N$、$A$、$B$、$R$为$k = m \cdot n$位整数),我们将$A$用二进制表示,$B$和$R$用基数$x = 2^m$表示:
- $A = A_{k - 1} \cdot 2^{k - 1} + A_{k - 2} \cdot 2^{k - 2} + \cdots + A_1 \cdot 2 + A_0$
- $B = B_{n - 1} \cdot x^{n - 1} + B_{n - 2} \cdot x^{n - 2} + \cdots + B_1 \cdot x + B_0$
- $R = R_{n - 1} \cdot x^{n - 1} + R_{n - 2} \cdot x^{n - 2} + \cdots + R_1 \cdot x + R_0$
其中$A_{k - j} \in {0, 1}$($j = 1, \cdots, k$),$B_i, R_i \in {0, 1}^m$($i = 0, \cdots, n - 1$)。
模乘法可以通过连续执行以下两个算法来计算:
-
算法1A
:
-
输入
:$A_0, \cdots, A_{k - 1}$;$B_0, \cdots, B_{n - 1}$;$N$
-
输出
:$R_{0, 0}, \cdots, R_{0, n - 1}$
其中$dw_m(Z) = Z \mod 2^m$,$Upa(Z) = (Z - dw_m(Z)) / 2^m$。
该模乘法电路的主要部分实现了算法1A,其各部分电路的实现方式如下:
-
乘法
:乘法器通过与门实现,仅当$A_{k - j}$为1时输出$B_i$,因此乘法器的电路规模较小。
-
加法
:加法器由4输入加法函数实现,输入包括来自乘法器的$A_{k - j} \cdot B_i$、来自模约简电路的$E_{j - 1, i}$、$D_{j - 1, i} \cdot 2$和$C_{j - 1, i - 1}$。由于$A_{k - j} \cdot B_i$和$E_{j - 1, i}$为$m$位,$D_{j - 1, i}$为$(m - 1)$位,且$C_{j - 1, i - 1}$小于$m$位,所以加法器输出进入寄存器的值为$(m + 2)$位,$C_{j, i}$为3位。当$m \geq 3$时,与整个寄存器电路规模相比,进位位寄存器的电路规模较小,因为每$m$位相加结果只有2个进位位。
-
模约简
:可以容易地看出,3位进位$C_{j, i}$不会取$[111]$的值。余数$E_{j - 1, i}$($i = 0, \cdots, n - 1$)由$C_{j - 1, n - 1}$根据表达式(4)推导得出。由于$C_{j - 1, n - 1}$取$[000]$、$[001]$、$\cdots$、$[110]$(除$[111]$外)的3位值,所以每个$E_{j - 1, i}$只有7种模式,包括$E_{j - 1, 0} = 0$。这些余数模式可以通过图2中的选择器$S$进行选择,因此模约简的延迟时间较短。使用该电路,模约简处理得到了简化,无需比较除数和被除数,也无需处理负数。而且,由于$E_{j - 1, n - 1}$是真实值,这些值可以直接输入到加法电路中。
电路的输出$R_{0, 0}, \cdots, R_{k, n - 1} \in {0, 1}^{m + 1}$需要通过一个辅助小电路进行修改,以补偿$R_{k, i}$中的进位位,使最终计算后所有进位位都为零,并将$R$的最终值修正为小于$N$。这样的小电路对整体处理速度影响较小,因此在图2中省略。
3.2 电路规模和处理速度
假设所提出的电路采用C - MOS技术制造,根据富士通标准单元的电路规模进行评估。当$k$等于512且$m$等于4时,大约可以实现25K门的模乘法电路(余数$E_0, E_1, \cdots, E_{n - 1}$由另一个电路根据表达式(4)从$N$的值计算并设置)。由于使用C - MOS门实现1个时钟所需的处理时间约为20 - 30 ns,图2中的电路执行一次模乘法$R = A \cdot B \mod N$大约需要13$\mu s$。因此,当密钥$e$和$N$均为512位时,使用该模乘法电路进行RSA加密的处理速度可以达到50Kbps。此外,如果将从$N$推导得到的6个非零$E_{j, i}$值用作公钥,而不是模数$N$,则可以消除$E_{j, i}$所需的预处理。
以下是一些RSA方案实现的相关信息表格:
| 参考 | 波特率 | 位数 | 门数 | 效率(bps/门) |
| ---- | ---- | ---- | ---- | ---- |
| [Miya83] | 50K | 512 | 280K | 约0.18 |
| [KMT87] | 70K | 512 | 160K | 约0.44 |
| [Mori90] | 80K | 512 | 50K | 1.6 |
| [TAA87] | 100K | 256 | 445K | 约0.22 |
| [Til A ASS] | 500K | 512 | 640K | 0.78 |
| [IWDS91] | 64K | 512 | 50K | 约1.28 |
| 本文提出电路 | 50K | 512 | 25K | 2.0 |
从表格中可以看出,本文提出的电路效率达到了2.0 bps/门,比之前的[Mori90]电路(效率为1.6 bps/门)更高效。而且,由于[Mori90]中的模乘法电路需要布斯算法的电路,本文所提出电路的控制和计算算法相对更简单。因此,图2中的模乘法电路实现了迄今为止最有效的RSA方案。
4. 用于RSA方案的脉动阵列
4.1 设计用于模乘法的脉动阵列的方法
模乘法$R = A \cdot B \mod N$可以通过从$j = 1$到$j = k$的递归执行来计算,其中$D_0$为0,$E_{j - 1}$是表达式(4)所示的余数。
我们可以使用数据依赖图来表示通过按$m$位切片获得的递归版本。图3展示了这样一个图,其中每列$n$个单元执行表达式(6),$k$列这样的单元行表示递归执行过程。下面直观地解释一下脉动阵列的关键思想:
- 输入$B$沿着水平箭头从左向右流动,输入$A$沿着垂直箭头向下流动。
- 每个单元的计算结果被分为最低有效$m - 1$位$D$和其余位$C$(进位位)。
- $D$左移1位(即$D$的两倍)输入到同一行右侧下一列的单元。
- $C$左移1位(即$C$的两倍)输入到上一行右侧两列位置的单元。
- 对于顶行的每个单元,进位位$C$被转换为余数$E$,$E$会影响右侧下一列的单元。这种设计是为了避免每个单元处理的数据规模不断增大,确保形成规则且高效的流水线结构。
观察发现,每对连续列之间除了$B$的流动外,还有$D$、$C_1$和$C_2$三种类型的数据流动。对于每列,$C_1$表示该列产生的$C$类型,$C_2$表示通过该列的$C$类型。每列可以实现为一个如图5所定义的单个处理元素(PE),$k$列这样的单元行可以通过连接$k$个PE来实现。第$j$个PE在其内部寄存器中保存$A_{-j}$的值。图3中某列顶部单元产生的进位位$C$保存在图5中相应PE的一个寄存器中。
下面是一个简单的mermaid流程图,展示模乘法在脉动阵列中的数据流动:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(输入A):::process --> |垂直流动| C(单元计算):::process
B(输入B):::process --> |水平流动| C
C --> D(结果分为D和C):::process
D --> |D左移1位| E(右侧下一列单元):::process
D --> |C左移1位| F(上一行右侧两列单元):::process
F --> |转换为E| G(影响右侧下一列单元):::process
综上所述,在密码学的实际应用中,对于不同的场景,如对响应时间要求较高的便携式通信系统,应谨慎选择合适的批量处理方法。批量DH在这种场景下表现出明显的优势,而批量RSA则存在不可接受的延迟问题。同时,通过高效的模乘法电路和脉动阵列的设计,能够显著提高RSA方案的实现效率,为密码学的实际应用提供更强大的支持。
密码学中RSA与DH批量处理及高速实现方法解析
5. 脉动阵列实现的优势与特点
脉动阵列在RSA方案的模乘法实现中具有独特的优势。它利用了并行处理和流水线操作的特点,使得计算能够高效地进行。
从并行处理的角度来看,每个处理元素(PE)可以独立地进行部分计算,多个PE同时工作,大大提高了整体的计算速度。例如,在图3的数据依赖图中,每一列的单元都可以并行执行表达式(6),这样在同一时间内可以完成多个部分的模乘法计算。
流水线操作则进一步增强了计算的效率。通过将计算过程划分为多个阶段,每个阶段由不同的PE完成,数据可以像流水一样在各个PE之间传递和处理。在脉动阵列中,输入数据$A$和$B$按照特定的顺序依次进入各个PE,经过一系列的计算和数据传递,最终得到模乘法的结果。这种流水线操作减少了计算的空闲时间,使得计算资源能够得到充分利用。
另外,脉动阵列的结构规则且易于实现芯片化。由于每个PE的结构和功能相对简单,并且它们之间的连接和数据流动具有规律性,因此可以方便地在芯片上进行布局和制造。而且,随着芯片数量的增加,RSA的处理速度可以成比例地提高,这为实现高速的RSA加密提供了一种可扩展的解决方案。
6. 不同实现方法的比较与分析
为了更直观地了解不同RSA实现方法的性能差异,我们对之前提到的几种实现方法进行了综合比较。
| 实现方法 | 波特率(Kbps) | 门数(K) | 效率(bps/门) | 灵活性 | 特点 |
|---|---|---|---|---|---|
| [Miya83] | 50 | 280 | 约0.18 | 低 | 实现较为传统,电路规模大,效率低 |
| [KMT87] | 70 | 160 | 约0.44 | 一般 | 性能有一定提升,但效率仍有待提高 |
| [Mori90] | 80 | 50 | 1.6 | 一般 | 效率相对较高,但需要布斯算法电路,控制和计算稍复杂 |
| [TAA87] | 100 | 445 | 约0.22 | 低 | 对于256位指数和模数,效率不高 |
| [Til A ASS] | 500 | 640 | 0.78 | 低 | 处理速度高,但电路规模大,效率一般 |
| [IWDS91] | 64 | 50 | 约1.28 | 一般 | 效率处于中等水平 |
| 本文高效电路 | 50 | 25 | 2.0 | 较高 | 电路规模小,效率高,控制和计算算法简单 |
| 本文脉动阵列 | - | - | - | 高 | 可并行处理和流水线操作,易于芯片化扩展 |
从表格中可以看出,本文提出的高效电路在效率方面表现出色,以较小的电路规模实现了较高的处理速度。而脉动阵列虽然在表格中未给出具体的波特率和门数等指标,但它具有很高的灵活性和可扩展性,能够根据实际需求通过增加芯片数量来提高处理速度。
不同的实现方法适用于不同的应用场景。如果对效率要求极高,且对电路规模有严格限制,那么本文提出的高效电路是一个不错的选择。如果需要处理大量数据,并且希望能够方便地扩展计算能力,那么脉动阵列则更具优势。
7. 实际应用中的考虑因素
在实际应用密码学算法时,除了考虑算法的性能和效率外,还需要考虑其他一些因素。
7.1 安全性
密码学算法的安全性是至关重要的。无论是RSA还是Diffie - Hellman算法,都需要保证密钥的安全性和算法的抗攻击性。在使用批量处理方法时,要确保指数的动态分配不会引入新的安全漏洞。例如,在批量RSA中,使用相同的模数和不同的短指数时,需要严格验证这种方式不会导致信息泄露或被攻击。
7.2 响应时间
对于一些对响应时间要求较高的系统,如便携式通信系统,选择合适的算法和处理方法尤为重要。如前面所述,批量DH在这种场景下具有明显的优势,因为它不存在像批量RSA那样的随机延迟问题。在设计系统时,需要根据实际的响应时间要求来选择合适的密码学算法和批量处理方式。
7.3 资源限制
实际应用中,系统的资源通常是有限的,包括计算资源、存储资源等。在选择RSA的实现方法时,需要考虑电路规模和处理速度之间的平衡。如果系统的计算能力有限,那么选择电路规模小、效率高的实现方法可以更好地利用资源。同时,还需要考虑算法的预计算和存储需求,避免因资源不足而影响系统的正常运行。
8. 总结与展望
通过对批量Diffie - Hellman、批量RSA以及RSA方案的高效实现和脉动阵列的研究,我们可以得出以下结论:
- 批量Diffie - Hellman在响应时间要求较高的系统中具有明显的优势,能够有效地提高计算效率,而批量RSA由于存在随机延迟问题,不适合用于便携式通信系统的密钥协商。
- 通过设计高效的模乘法电路和采用脉动阵列结构,可以显著提高RSA方案的实现效率。本文提出的高效电路在效率方面优于之前的一些实现方法,而脉动阵列则具有灵活性和可扩展性的特点。
未来,随着密码学技术的不断发展和应用需求的不断增加,我们可以期待在以下方面取得进一步的进展:
- 研究更加高效的批量处理方法,进一步提高Diffie - Hellman和RSA算法的计算效率,同时保证安全性。
- 探索新的电路设计和实现技术,降低RSA实现的电路规模和功耗,提高系统的资源利用率。
- 加强对密码学算法在实际应用中的性能评估和优化,以满足不同场景下的需求。
下面是一个mermaid流程图,展示在实际应用中选择密码学算法和处理方法的决策过程:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A(应用场景):::startend --> B{对响应时间要求高?}:::decision
B --> |是| C{选择批量DH}:::process
B --> |否| D{考虑批量RSA或其他}:::process
C --> E{需要高速RSA实现?}:::decision
D --> E
E --> |是| F{选择高效电路或脉动阵列}:::process
E --> |否| G{选择合适传统实现}:::process
总之,密码学在现代通信和信息安全领域中起着至关重要的作用,不断探索和改进密码学算法的实现方法,对于保障信息安全和提高系统性能具有重要意义。
371

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



