如果在OAEP加密方案和PSS签名方案中使用SHA-256或SHA-512来生成掩蔽/填充功能MGF1,对安全性和效率有什么影响吗?
许多实现似乎也支持SHA-224和支持MGF1的SHA-384。对于需要生成特定大小的掩码(接近RSA密钥大小的掩码),使用这些截断哈希函数是否有意义?或者这会增加不必要的开销吗?
在我看来,SHA-512的效率更高,因为单是输出大小就行了。但是,大多数实现似乎都默认在SHA-1、SHA-256或与用于PSS的数据哈希相同的哈希。
发布于 2019-05-21 16:20:07
由于输入大小是固定的,长度扩展攻击与此无关,所以任何SHA-2函数都可以通过MGF1 1合理地实现OAEP或PSS所假设的随机oracle模型--即使是SHA-1的缺省值也适用于MGF1。
显然,使用SHA-224或SHA-384要比使用SHA-256或SHA-512稍微多一点,因为SHA-224和SHA-384实际上是SHA-256和SHA-512的截断:要获得与(比方说)12个SHA-384调用相同的输出量,每个SHA-512计算量,您可以只支付9个SHA-512计算。因此,截断的选项没有提供任何好处。当然,在64位加法的CPU上,SHA-512比SHA-256更快.
尽管如此,很难想象这会对安全性或性能产生实质性的影响,因为您无论如何都要做一个2048位的模块幂运算,这将是成本的主要部分--但是,当然,在您的应用程序中可以更好地进行这种度量!(一定要选择e = 3,以尽量减少在幂运算中花费的时间。)
发布于 2019-05-25 16:30:02
在Java中快速比较不同的算法,对于在ms中使用RSA-4096的10万个加密操作(在启动后运行到平衡):
RAW : time taken: 42509 milli-seconds
PKCS#1 : Time taken: 43406 milli-seconds
SHA-224: Time taken: 52437 milli-seconds
SHA-256: Time taken: 44140 milli-seconds
SHA-384: Time taken: 51596 milli-seconds
SHA-512: Time taken: 48293 milli-seconds因此,尽管差异并不大,但差异是显而易见的。请注意,这是用于相当有效的公钥加密的时间,而不是RSA模幂比填充要花费更多时间的私钥解密。
当然,上面使用的是MGF1集中的G和H哈希算法和相同的哈希算法的OAEP。
注意,这是在双核i7上使用Java 11实现的,其中一个奇怪的事情是,即使SHA-512运行在64位的机器上,它也会运行得更慢。
https://crypto.stackexchange.com/questions/70724
复制相似问题