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

时间:2014-06-06 18:18:27

标签: multithreading hash sha

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

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

1 个答案:

答案 0 :(得分:13)

如果您想要并行计算单个哈希的执行(无论风味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))(其中+符号可以是连接或简单的XOR,但这些很可能在加密方面很强。)

此方法将受益于多个核心,但H_OUT不等同于计算原始大输入的单个散列。