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

aha*_*adz 6 hash multithreading sha

我正在研究不同处理器上SHA1,SHA-256,SHA-512的速度(计算散列的时间)

这些哈希算法可以分解为跨多个核心/线程运行吗?

Mik*_*scu 13

如果你想知道并行化计算单个散列的执行(无论味道1,256或512),那么答案很遗憾.这是因为定义了SHA转换函数的方式.它在固定大小的块上运行,但是下一个需要每个块的转换输出,因此您无法并行运行计算.

对于不同的输入字符串,显然可以并行运行多个哈希,但我认为你已经知道了.

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

像这样的东西:

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

 |    b0     |    b1    |    b2    |          |          |          |    bn    |
Run Code Online (Sandbox Code Playgroud)

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

然后,生成H_OUT = H(H(b0) + H(b1) + .. + H(bn))(+符号可以是串联或简单的异或,但这些很可能不会加密强).

此方法将受益于多个内核,但H_OUT不等同于计算原始大输入的单个哈希.

  • 在这里使用XOR会非常糟糕.黑客可以将两个块交换在一起,制作具有相同散列的损坏文件,或者如果文件中有一个块,他可以只更改两个块并仍然获得相同的散列.如果你使用XOR,你应该做一些事情,比如H(bn xor n)而不仅仅是H(bn), (2认同)
  • 如果输入太大以至于您也想并行化最终的串联步骤,则可以使用 Merkle 树而不是更简单的哈希列表。 (2认同)