修改后的 SHA256 用于 PRNG 播种

Modified SHA256 for PRNG seeding

我可以这样做吗

1. Copy SHA hash constants to eight 32bit work variables.
2. Expand message.
3. Mix work variables (SHA inner loop).
4. Output work variables to PRNG state. 

而不是正常程序(单个消息块)

1. Pad message block.
2. Copy SHA hash constants to hash.
3. Read hash into eight 32bit work variables.
4. Expand message.
5. Mix work variables (SHA inner loop).
6. Add work variables to hash. 
7. Output hash to PRNG state. 

如果我只想对一些输入熵进行良好的位混合以播种非加密 PRNG?安全性完全无关紧要。我所需要的只是从时间戳和一些硬件位(8 字节时间戳,来自硬件的 56 字节)中生成一个良好的 PRNG 状态。

虽然我不确定您希望如何简化事情的具体细节,但通常为非加密目的简化加密算法就可以了,只要您非常清楚地记录您对加密原语的使用并不意味着生成的代码中有任何加密强度。

通常情况下,您可能会实施确切的规范,以便您可以根据第三方参考对其进行验证(确保代码按预期连接并且没有数据被丢弃等),然后减少数量轮所以它走得更快。

这样做的一个常见动机是当您可以访问加密算法的硬件加速时。

但是,如果您的输入是固定长度的 64 位,那么 sha256 通常比它的价值更麻烦。

您没有指定 PRNG 状态的大小。如果它大于 64 位,那么你可能只想用你的种子播种一个简单的 64 位 PRNG,然后迭代地使用它来填充更大的 PRNG 状态缓冲区。如果它恰好是 64 位,那么类似 MurmurHash 的混合函数可能就足够了。