【问题标题】:Why RSA Decryption process takes longer time than the Encryption process?为什么 RSA 解密过程比加密过程需要更长的时间?
【发布时间】:2010-02-23 05:07:22
【问题描述】:

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

谢谢

谢谢大家的回答,还有一个疑问,签名和验证呢?签名和验证也会有这个时差吗?前任。签名比验证需要更多时间?

【问题讨论】:

  • 因为速度较慢(提前道歉)
  • 如果你想要快速解密或签名,你可以使用椭圆曲线密码术代替 RSA。

标签: cryptography rsa encryption


【解决方案1】:

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

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

相同的规定不适用于公共指数 (e),只要符合 RSA 规则 (e),它可以任意小> 对于 n 的所有素因数 r 必须与 r-1 互素)。所以习惯上选择一个非常小的e。这是一种习惯,以至于广泛部署的实现无法处理大的公共指数。例如,如果 e 不适合 32位。 e=3 是最好的,但 e=65537 是传统的(这是一种历史性的错误,因为如果 RSA在没有适当和标准填充的情况下使用,无论如何都不应该这样做)。 65537 是一个 17 位长整数,而 nd 的典型长度为 1024 位或更多。这使得公钥操作(消息加密、签名验证)比私钥操作(消息解密、签名生成)快得多。

【讨论】:

  • 65537 好的另一个原因是它的二进制扩展中只有两个 1,这可以提高一些速度。
【解决方案2】:

理论上,不必如此。加密和解密算法本质上是相同的。给定:

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

然后:

  1. 加密 ci = mie (mod n)
  2. 解密 mi = cid (mod n)

求幂的正常算法是迭代的,因此所用时间取决于指数的大小。在大多数情况下,解密密钥(通常大大)大于加密密钥。

虽然可以扭转这种情况。仅举一个玩具示例,请考虑:

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 位数字时,我们必须非常耐心地找到解密(甚至接近)与加密一样快的一对。

【讨论】:

  • 如果你有一个大的d和一个小的e,只要交换它们,你就会有一个小的d 和一个大的e。拥有一个小的私人指数是微不足道的。重要的是同时拥有一个小的d 一个小的e。此外,在安全性方面,使用较小的 d 是不明智的。
  • @Thomas:是的,两者确实可以互换。我可能应该提到你通常不想(以及为什么)。感谢您的补充。
  • 最后一段没有多大意义。
【解决方案3】:

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

【讨论】:

  • 2^n+1 的形式会导致加速,但主要的加速来自加密能力较小。您关于解密的第二句话暗示了这一点,但我建议将其明确添加到关于加密的第一句话中。
【解决方案4】:

这涉及到两个因素:

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

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

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

【讨论】:

  • 我认为当您声明解密时,您的意思是加密。在实践中,公共指数很小,因此加密在实践中更快。另一方面,私有指数要大得多(需要适当的安全性),因此解密要慢得多。
  • @DerekW:是的,解密应该是加密的。
【解决方案5】:

RSA 实验室describes why 不错

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

...

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

【讨论】:

    【解决方案6】:

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

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

    更多详情,我建议从here开始。
    要了解计算的工作原理,这篇文章似乎非常好http://www.di-mgt.com.au/rsa_alg.html

    【讨论】:

    • 您好,我已阅读有关 RSA 的详细信息。我更感兴趣的是了解解密过程的复杂计算的数学方面。
    【解决方案7】:

    简而言之,“乘法 = 容易,因子 = 困难”。

    看看 (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)

    【讨论】:

    • 加密和解密过程都不涉及因式分解——它们都是幂运算。
    【解决方案8】:

    de 是模 phi(n) 的乘法倒数。这意味着您选择两个用于加密的女巫和一个用于解密的女巫都无关紧要。您只需在加密前选择一次。如果您想要快速解密而不是选择更大的数字进行加密。就这么简单。

    【讨论】:

    • 通常我们使用一个小的数字作为e(导致一个大的d。你也可以使用一个大的数字作为e和一个大的d。你应该怎么做不是使用一个小的d。这会削弱安全性。
    猜你喜欢
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多