CRT-RSA加密原理
CRT-RSA是由Quisquater和Couvreur推广,CRT-RSA目前是实际中实现RSA的标准方法。
CRT-RSA加密原理
-
通过利用模数的分解,可以降低
RSA解密的计算成本。 -
设是一个有效的公钥,为其对应的私钥,其中指数是模数定义的。
- 对于给定的密文,RSA的标准解密是通过计算恢复明文,即对一个
n位数进行一次模幂运算。 - 由于解密方已知模数中的质数,因此明文也可以通过密文分别取模和进行部分解密,然后再利用中国剩余定理将这些结果结合起来计算出明文。
- 首先我们先能计算:
- 由于这两个质数互素,可以利用中国剩余定理将它们组合以得到明文。例如,使用
Garner算法,明文计算公式为:
- 因此,我们将对一个
n位整数的单次模幂运算替换为两个位整数的模幂运算,外加若干其他操作。如下面所述,标准解密中的单次模幂运算在计算上比备用方法所需的所有计算都更昂贵。
- 对于给定的密文,RSA的标准解密是通过计算恢复明文,即对一个
-
我们将把任何使用中国剩余定理进行解密、以类似上述方法实现的
RSA称为CRT-RSA。 -
此外,我们将把
CRT-RSA的解密方法称为CRT解密,就像我们把标准RSA的解密称为标准解密一样。由于RSA的素数是保密的,这种解密方法当然不能用于加密。CRT-RSA的加密方法和标准RSA相同。- 当私钥指数大于时,可以在每个部分解密中使用一个缩减后的指数。
- 根据费马小定理,和可以在部分解密中替代的使用,下面的和我们称之为CRT指数。
- 由它们的定义以及RSA密钥等式可知,它们还满足:
- 因此存在整数和使得,我们将这些称为CRT方程
- 当私钥指数比每一个素数都小的,这就满足
-
对于
CRT-RSA,我们假设公钥由给出,私钥由给出。在实际中,私钥可能还包含模的逆元即:,这样使用Garner算法合并部分解密结果时就不需要再计算这个逆元了。(例如,参考PKCS#1 v2.1标准)
CRT-RSA的变种
CRT-RSA的指数选择有多种方式,取决于是否需要快速加密或解密。与标准RSA类似,使用较小的指数可以降低计算成本。- 在实际中,几乎总是固定的小公钥指数,例如或。此时,有极高的概率私钥指数以及两个CRT指数通常都是满尺寸的。当素数是平衡素数的时候,我们可以预计,那么
- 使用这样的
CRT-RSA小公钥指数意味着以最大化解密开销代价来最小化加密开销。 - 在某些情况下,可能希望尽量降低解密开销。可以通过使用较小的私钥指数来减少解密开销,但由于私钥指数过小的情形是可以被破解的,所以私钥指数至少应大于,或者比这个界限更大。然而,使用
CRT解密时,Wiener观察到可以使用远小于的CRT指数仍然可以保持加密安全。- 具体来说,在密钥生成算法中,选择不同的小
CRT指数和,然后通过中国剩余定理计算公钥指数,这样高概率下而定的公钥指数仍然是满尺寸的。 - 此外,私钥指数也很可能是满尺寸的。因此,所有针对小私钥攻击都不适用。当然,
CRT指数也不能选得过小,之后会学习相关攻击。 - 以这种方式生成的
CRT-RSA通常称为Rebalanced RSA。有关Rebalanced RSA的密钥生成算法的详细细节,可参见Boneh和Shacham。在Rebalanced RSA中,CRT解密开销被最小化,但代价是加密(以及标准加密)开销被最大化。 - 注:
Rebalanced RSA其实是先生成较小的CRT指数,而私钥指数以及公钥指数都是满尺寸的,并且也都是平衡的。这就使得加密开销非常大,解密开销非常小。
- 具体来说,在密钥生成算法中,选择不同的小
- 典型的
CRT-RSA(使用小公钥指数)和Rebalanced RSA分别代表了在CRT-RSA中最小化(或最大化)加密或解密开销的两种极端情况。也可以生成CRT-RSA实例,使用加密和解密开销更加平衡。例如,可能希望加密和解密的计算量大致相等。Galbraith、Heneghan和McKee,Sun和Wu以及Jochemsz和May提出了几种用于生成任意大小公钥和CRT指数的CRT-RSA密钥生成算法。
CRT-RSA的效率
- 每种
RSA变体的效率都高于使用标准解密的RSA。按照前面的定义,设表示对两个位数在另一个位数模下相乘的复杂度。考虑一个模数为位、私钥指数为的RSA系统。 - 假设私钥指数在二进制表示中
1和0的数量大致相等,则解密的复杂度预计为:。对于CRT解密,复杂度主要由对部分解密和的两次模幂运算决定。这里假设在使用Garner算法时,已预先计算好的逆元。 - 设两个
CRT指数大约为,其中。假设每个CRT指数在二进制中0和1的数量大致相等,则CRT解密的复杂度预计为:,也就是说两次位数的模幂运算是CRT解密主要计算量。 - 因此,
CRT解密预计必标准解密快的倍数为:。由于的复杂度可以在接近线性到二次之间变化,因此这种加速比大约在区间内,。如果CRT解密的部分可以并行完成,那么加速比还可以再增加一倍。 - 下面我们来考虑这种加速在不同
CRT-RSA变体中的表现。当公钥指数较小且私钥指数与CRT指数均为满尺寸时,如果素数平衡,我们有且。这对应的加速比大约在区间内。因此,使用CRT解密的速度至少比标准解密快一倍。 - 当使用
Rebalanced RSA时,CRT指数较小,但私钥指数仍为满尺寸。因此,我们有且。这对应的加速比大约在取决。例如,考虑一个模数为1024位、CRT指数为160位的实例,这对应的加速比大约在之间。 - 将
Rebalanced RSA与典型CRT-RSA实例进行比较,解密开销预计快约倍。在这里,乘法开销相同,唯一不同的是指数的大小。以前面提到的1024位模数和160位CRT指数为例,相比典型的1024位私钥指数实例,加速比约为3.2。在Boneh和Shacham的实现中,使用这些参数,实际中实现的加速约为3.06倍。 - 对于指数平衡的
CRT-RSAS,由于公钥指数小于,私钥指数预计仍为全尺寸。因此,解密加速预计与Rebalancd RSA相等。如果两个CRT指数大约为,则加速比预计在区间之间。实际加速值将取决于模乘运算的具体实现。同样,如果允许部分解密并行进行,这个加速比还会再增加一倍。
破解CRT-RSA
-
我们认为,当
CRT-RSA的模数分解已知时,这个实例(实际上也是一个普通的RSA实例)就被破解了。由于CRT-RSA也是RSA的一个实例,因此所有针对RSA的攻击同样适用于CRT-RSA。特别地,只要计算出私钥指数就足以破解CRT-RSA,因此此时模数可以在多项式时间内被确定分解。 -
计算出CRT指数同样足以破解
CRT-RSA:- 利用CRT指数,注意将CRT方程(CRT等式)
- 将上面两个式子相乘得到,其中左边的所有量都是已知的
- 因此我们能计算出的一个倍数,从而利用
Miller的结果分解模数。 - 此外,由上述方程可知:,是一个有效的标准解密私钥指数,之后可以用它来解密任何密文。或者可以使用一种确定性的基于格的方法,其思路类似于
May和Coron与May的结果,由Maitra和Sarkar提出,可在多项式时间内分解模数。
-
即使只知道一个CRT指数,模数仍然预计可以被轻松分解。假设我们已知。
- 如果私钥指数小于每个素数,使得,那么是的倍数,此时可以利用的结果以概率性方法分解模数。
- 如果私钥指数,大于每个素数,注意到由于因此对于任意明文,都有
- 因此,就有,其中是某个整数,设,当不是素数的倍数时,通过计算
- 当是的倍数时,则有,如果这对所有都成立,那么模数可以被分解,因此只是明文的一个恢复指数,目前尚不清楚这些信息能否用于分解模数。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 iyheart的博客!

