微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么验证比签名快得多? 输出:

如何解决为什么验证比签名快得多? 输出:

我尝试通过运行以下命令来测量 rsa 算法的性能

$:openssl speed rsa

输出

                sign    verify    sign/s verify/s
rsa  512 bits 0.000048s 0.000003s  20923.5 355236.0
rsa 1024 bits 0.000102s 0.000007s   9757.6 152852.6
rsa 2048 bits 0.000676s 0.000022s   1479.2  46028.3
rsa 3072 bits 0.002385s 0.000041s    419.3  24407.0
rsa 4096 bits 0.005083s 0.000069s    196.7  14392.3
rsa 7680 bits 0.041772s 0.000234s     23.9   4281.9
rsa 15360 bits 0.231628s 0.000960s      4.3   1041.6

正如我们从这个命令的输出中看到的,verify 操作比 sign one 花费的时间更少 谁能解释一下为什么验证比签名快得多? 提前致谢!

解决方法

这里我只讨论 RSA 签名。

首先,RSA 公钥是一对 (n,e),其中 n 是模数,e 被称为公共指数。

常见的 RSA 公共指数是 {3,5,17,257 或 65537}。原因很简单;验证成本可以控制在最低限度。例如,如果您选择 3,那么它将需要 1 次乘法和 1 次平方以及快速 moduluar squaring algorithm。如果您选择 65537 = 2^16+1,则需要 16 次平方和 1 次乘法。

现在,一旦您选择了您的公钥,私有指数 d 是一个随机整数 e *d = 1 mod φ(n),出于安全考虑,我们希望采用这种方式。我们不想要小 d,因为它不安全。阅读本文 Twenty Years of Attacks on the RSA Cryptosystem 中有关攻击的更多信息。

由于 d 是随机的,如果我们使用 Euler's totient function φ,那么它平均需要 φ(n)=(p-1)(q-1) 平方和 φ(n)/2 乘法。这就是验证和签名成本差异的核心原因。

在没有适当填充的情况下绝不能使用 RSA,对于签名,它必须与 RSA-PSS 一起使用(类似地用于加密 OAEP 或 PKCS#5v.5 填充)


注意事项;

  1. 我们实际上使用 Carmichael function 而不是 Euler 函数,因为 it always produces the smallest d

  2. RSA 可以使用 CRT 将私钥操作速度提高 4 倍,而 OpenSSL 就是这样使用的。

  3. RSA 签名不是解密,如上所述,安全 RSA(不是教科书 RSA)必须使用适当的填充。

  4. 是的,首先我们选择公钥,然后确保 GCD(φ(n),e ) =1,如果没有选择新的质数 pq where n=p * q

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。