SHA1、SHA-256和SHA-512可以分解为多个核心/线程运行吗?

14

我正在研究不同处理器上 SHA1、SHA-256 和 SHA-512 的速度(计算哈希所需的时间)。

这些哈希算法能否被分解以在多个核心/线程上运行?

1个回答

18

如果你想并行执行计算单个哈希(不管是1、256还是512位)的过程,那么答案是遗憾的,不行。这是因为SHA变换函数的定义方式。它操作固定大小的块,但每个块的转换输出需要下一个块,因此无法并行运行计算。

显然,可以并行运行多个哈希,用于不同的输入字符串,但我假设你已经知道这一点了。

如果你只想使用底层SHA变换生成大输入的摘要,那么可以定义任意方案来分割输入,然后并行为每个段生成摘要块。然后再组合这些块等等。

类似于这样:

 | ------------------ large input ---------------------------------------------|

 |    b0     |    b1    |    b2    |          |          |          |    bn    |

您可以并行生成H(b0),H(b1)... H(bn)

然后,生成H_OUT = H(H(b0)+H(b1)+... + H(bn))(其中+符号可以是连接或简单的异或运算,但这些很可能具有密码学强度)。

这种方法将从多个核心中受益,但H_OUT将不能等价于计算原始大输入的单个哈希。


5
在这里使用异或会很糟糕。黑客可以交换两个块,生成一个与原文件哈希值相同的损坏文件,或者如果文件中有重复块,他可以更改两个块并仍然获得相同的哈希值。如果要使用异或,应该采取H(bn xor n)之类的措施而不是只用H(bn)。 - user1779715
2
如果输入数据太大,您想要并行化最终的连接步骤,可以使用 Merkle 树代替简单的哈希列表。 - Jack O'Connor
我对这个语句感到困惑:_这些很可能不是密码学上强大的_。你的意思是XOR不是密码学上强大的,还是并行哈希的方式不是密码学上强大的? - Nulik
1
@Nulik 不是的。这是使用异或运算。异或是一种可交换的操作。因此,H(b0) XOR H(b1)H(b1) XOR H(b0)相同,因此这不会生成保护块顺序的签名。异或本身不是加密操作,因此“异或不具有加密强度”并没有太多意义。它在密码算法中的使用可以是具有加密强度或没有加密强度。 - Nicolas Dusart
@Leopd -- 你是指使用异或运算符来组合子哈希不具有密码学强度的那一部分吗?我重新阅读了那个短语,我可以看出那仍然不清楚。我的意思是,使用异或运算符不会具有密码学强度,因为顺序不重要,攻击者可以生成冲突。我并不是想说连接操作不具有密码学强度。还是我错过了其他什么? - Mike Dinescu
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接