为什么RSA解密过程需要比加密过程更长的时间?

时间:2010-02-23 05:07:23

标签: cryptography rsa encryption

我知道这是由于一些复杂的计算,但我想知道究竟发生了什么比相应的加密过程花了很长时间。任何链接到网页或纸张都会有很大的帮助。

由于

感谢您的回答,再一次怀疑,签名和验证怎么样?这个时间差异是否也适用于签名和验证?防爆。签名需要比验证更多的时间吗?

8 个答案:

答案 0 :(得分:14)

让我们分别调用 n d e RSA模数,私有指数和公共指数。 RSA解密速度与(log d)(log n) 2 成比例(即模数长度的二次方,以及私有指数长度的线性) 。类似地,RSA加密速度与(log e)(log n) 2 成比例。私钥持有者也知道 n 的因子分解,它可用于将私钥操作加速约4倍(使用Chinese Remainder Theorem)。有关所涉算法的详细信息,请参阅Handbook of Applied Cryptography,尤其是第14章(“高效实施”)。

为了保证适当的安全性,私有指数( d )必须很大;已经表明,如果它小于模数长度的29%( n ),则可以重建私钥。我们不知道避免这些弱点的最小长度是多少,因此在实践中 d 的长度与 n 的长度大致相同。这意味着解密将在 n 的长度内约为立方。

同样的规定不适用于公共指数( e ),只要它符合RSA规则( e n 的所有素数因子 r r-1 必须是相对的素数。因此习惯上选择非常小的 e 。按惯例,有广泛部署的实现无法处理大型公共指数。例如,Windows中的CryptoAPI(连接到具有RSA服务器证书的HTTPS站点时由Internet Explorer使用的那个)中的RSA实现如果 e 不适合32,则无法处理RSA公钥。位。 e = 3 是最好的,但 e = 65537 是传统的(这是一种历史性的错误,因为如果RSA是一个非常小的指数可以诱发感知的弱点没有适当和标准的填充使用,无论如何都不应该做的事情)。 65537是17位长整数,而 n d 的典型长度是1024位或更多。这使得公钥操作(消息加密,签名验证)比私钥操作(消息解密,签名生成)快得多。

答案 1 :(得分:6)

从理论上讲,它不一定是。加密和解密算法基本相同。给出:

d = decryption key
e = encryption key
n = modulus (product of primes)
c = encrypted code group
m = plaintext code group

然后:

  1. 加密c i = m i e (mod n)
  2. 解密m i = c i d (mod n)
  3. 提升功率的常规算法是迭代的,因此所用的时间取决于指数的大小。在大多数情况下,该对使用的解密密钥(通常相当大)比加密密钥大。

    虽然可以扭转局面。仅举一个玩具示例,请考虑:

    p=17
    q=23
    n=391
    

    以下是此特定素数对的一些有效加密/解密密钥对的列表:

    e = 17, d = 145
    e = 19, d = 315
    e = 21, d = 285
    e = 23, d = 199
    e = 25, d = 169
    e = 27, d = 339
    e = 29, d = 85
    e = 31, d = 159
    e = 35, d = 171
    e = 37, d = 333
    e = 39, d = 343
    e = 41, d = 249
    e = 43, d = 131
    e = 45, d = 133
    e = 47, d = 15   
    e = 49, d = 273
    e = 51, d = 283
    e = 53, d = 93
    e = 57, d = 105
    e = 59, d = 179 
    

    在这20个密钥对中,只有一个具有小于加密密钥的解密密钥。在其他情况下,解密密钥的范围从大到两倍到几乎是大的17倍。当然,当模数很小时,生成大量密钥对会很快捷,所以找到一个小的解密密钥相当容易 - 使用真正的RSA密钥,然而,它并不是那么微不足道,我们通常只接受我们找到的第一对。从上面的列表中可以看出,在这种情况下,您最终可能会得到比加密密钥大得多的解密密钥,因此解密最终会比加密慢。当使用~100位数字时,我们必须非常耐心地找到一对解密将会(甚至接近)加密的对。

答案 2 :(得分:2)

加密功率通常选择为2 ^ n + 1(17,63357)形式的素数,这需要相对较少的乘法运算。因此,解密值将是一个更大的数字,因此需要更多的工作来计算。

答案 3 :(得分:2)

这涉及两个因素:

一方面,公共指数可以选择为只有两个1位(通常为3,17或65537)的小数。这意味着RSA加密操作可以通过几个模块化的方形和添加来完成。这是不可逆转的:如果你强制私有指数是一个小数字,系统的安全性显然会被打破。

另一方面,私钥的持有者可以存储从原始素数导出的一些预先计算的值。有了这些,他可以使用CRT algorithm替换单个取幂模数为n位数,其中两个指数模数为n / 2位数。这比天真的方式快大约四倍。

因此,对于具有随机公共指数的RSA密钥对,私钥操作实际上可以更快。但是选择小公共指数的效果远远大于更快算法的效果,因此加密在实践中更快。

答案 4 :(得分:1)

RSA实验室describes why非常好

  

在实际应用中,通常为公钥选择一个小的公共指数。

...

  

使用典型的模幂运算算法来实现RSA算法,公钥操作需要O(k ^ 2)步,私钥操作需要O(k ^ 3)步

答案 5 :(得分:-1)

还要多久?你有确切的细节吗?

任何方式,解密比加密更复杂是有道理的,因为加密不是像123 =>那样的对称方式。 abc和abc> 123。

有关详细信息,我建议您开始here 要了解计算的工作原理,本文似乎非常好http://www.di-mgt.com.au/rsa_alg.html

答案 6 :(得分:-1)

简而言之,“multiply = easy,factor = hard”。

看一下(http://en.wikipedia.org/wiki/RSA#Encryption)引用取幂中的优化(http://en.wikipedia.org/wiki/Exponentiation_by_squaring#Further_applications

我找到的最好的资源是以下关于普林斯顿密码学的讲座(http://www.cs.princeton.edu/courses/archive/spr05/cos126/lectures/22.pdf

答案 7 :(得分:-1)

de是模数phi(n)的乘法逆数。这意味着你选择加密的两个女巫并不重要,而且你可以选择解密。您只需在加密前选择一次。如果您想要快速解密而不是选择较大的加密数。就这么简单。