0

我想将散列函数和 RSA 加密与另一个参数进行比较。我有一个带有一些散列函数的算法,我想声称这些散列的计算负载小于一个 RSA。

我可以说将它们与乘法参数进行比较,例如它们每个有多少次乘法?

如何比较它们的通信负载?我怎么能说 RSA 中的输出长度是多少?

4

1 回答 1

0

听起来您正在尝试比较苹果和橙子。

散列函数通常被期望接受任意长的输入,并且计算它所需的时间通常应该与输入的长度成线性比例。因此,一个有用的散列函数性能度量是,比如说,“兆字节每秒”。

(具体来说,这将是吞吐量的度量,这是对长输入进行散列时的相关度量。对于短消息,更相关的度量是延迟,这基本上是散列零长度输入所需的最小时间。给定吞吐量和延迟,通常可以计算出散列任何给定长度的输入所需的时间的相当好的近似值,因为时间=延迟+长度/吞吐量。)

另一方面,RSA只能加密比模数更短的消息,模数是在生成密钥时选择的。(例如,典型的模数大小可能是 1024 到 4096 位。)要“使用 RSA 加密长消息”,通常会使用混合加密:首先使用AES等对称密码加密消息,使用合适的操作模式和一个随机选择的密钥,然后用 RSA 加密 AES 密钥。

相同的长度限制适用于使用 RSA 对消息进行签名——就其本身而言,RSA 只能对比模数更短的消息进行签名。这种情况下的标准解决方法是首先对消息进行哈希处理,然后对哈希值进行签名。(还有很多重要的细节,比如涉及到的填充,我不打算在这里讨论,因为我们不在crypto.SE上,但这对于安全性来说绝对是至关重要的。)

关键是,在这两种情况下,无论消息长度如何,RSA 操作本身都会花费固定的时间,因此,对于足够长的消息,大部分时间将由 AES 或散列函数消耗,而不是由 RSA本身。因此,当您说要“声称这些哈希的计算负载小于一个 RSA”时,我会说这是没有意义的,至少除非您为哈希固定了特定的输入长度。(如果你这样做了,我的下一个问题是“那个特定的输入长度有什么特别之处?”)

于 2013-10-14T13:02:46.573 回答