修改了PRNG种子的SHA256



我可以这样做吗

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的mix函数可能就足够了。

最新更新