我想将哈希函数和RSA加密与另一个参数进行比较。 我有一个带有一些散列函数的算法,我想声称这些散列的计算负荷小于一个RSA。
我可以说将它们与乘法参数进行比较,例如它们各有多少乘法?
如何在通讯负载中比较它们?我怎么能说RSA的输出长度是多少?
答案 0 :(得分:0)
听起来你正试图比较苹果和橘子。
通常期望hash function接受任意长的输入,计算它所需的时间通常应与输入的长度成线性比例。因此,hash function performance的有用量度将是“每秒兆字节数”。
(具体来说,这将是throughput的度量,这是散列长输入时的相关度量。对于短消息,更相关的度量是latency,这基本上是最短时间需要对零长度输入进行散列。考虑到吞吐量和延迟,通常可以计算出对任何给定长度的输入进行散列所需时间的相当好的近似值 time = latency < / em> + 长度 / 吞吐量。)
另一方面,RSA只能加密短于模数的消息,模数是在生成密钥时选择的。 (例如,Typical modulus sizes可能是1024到4096位。)要“使用RSA加密长消息”,通常会使用hybrid encryption:首先使用{{3}等对称密码对消息进行加密},使用合适的AES和随机选择的密钥,然后使用RSA加密AES密钥。
相同的长度限制适用于带有RSA的mode of operation消息 - RSA本身只能签署短于模数的消息。这种情况下的标准解决方法是首先对消息进行散列,然后对散列值进行签名。 (还有很多重要的细节,如signing涉及到我不打算进入这里,因为我们不在padding,但这对安全性绝对至关重要。)
重点是,在这两种情况下,无论消息长度如何,RSA操作本身都需要一段固定的时间,因此,对于足够长的消息,大多数时间将由AES或散列函数消耗,不是由RSA本身。所以当你说你想“声称这些哈希的计算负荷小于一个RSA”时,我会说这没有意义,至少除非你为你的哈希修复了一个特定的输入长度。 (如果你这样做了,我的下一个问题是“特定输入长度有什么特别之处?”)