我有一个源,它以每秒8-10 bits 的速度产生秘密。我需要利用这个秘密每秒钟给另一个发电机喂食。我想知道,当我每秒连接8位时,我应该等待多长时间,然后使用更长的位作为哈希的输入。
我有两个选择:
哪个更安全?我正在使用香港发展基金进行散列。
发布于 2017-06-19 11:36:27
有三类随机数发生器(我自己的非正式课程),取决于进出的相对熵:-
其中H是熵。
让我们尝试创建一个最纯净、最安全的第1类类型。
举个例子,如果你使用SHA-256,它需要256位熵作为输入。如果你的原始熵率是10位/s,当你用我的技术测量它时,它可能是4。所以每64秒钟就给SHA-256喂食。
64秒将创建一个类生成器,它是一个真正的随机数生成器。降低饲料率将降低安全性,您将有一个二级,这可能是可以接受的。
PS。我发现使用密码函数作为随机抽取器是个坏主意。这在数学上是不必要的,危险的是,如果熵源行为不当,或者你低估了熵产生率,你永远也不会知道。如果您使用一个简单得多的随机抽取器(如压缩函数/matrix ),您所犯的任何错误都将立即在最终输出的质量上变得明显。HDKF将继续使用任何类型的垃圾输入产生均匀分布的随机数,并且您永远不会知道生成器在其中运行的是哪一类。
PPS。不要遵循NIST的任何指导。它被特别削弱,以避免创建真正的随机数生成器,因此不像可能的那样安全。不幸的是(但并不意外),你会发现在这个论坛上你会对NIST有很大的偏见。如果您需要进一步的指导,请参考欧洲的AIS或ISO标准。也许法国人也是:-
发布于 2017-06-19 11:09:49
您应该聚合比特,直到有足够的种子位来使用初始种子启动您的DRBG。您的种子至少应该包含128位熵(攻击者的不确定性)。
当你得到它的时候,你可以把比特作为额外的种子添加,或者你可以先聚合一些熵。只有8位每秒的更新速率,您最好直接将熵添加到DRBG中。
要在两边创建相同的伪随机比特流,您应该:
请注意,HKDF不是伪随机数生成器(PRNG)或确定性随机比特生成器(DRBG,相同的东西)。它可能是一个伪随机函数,但这是不一样的。
HKDF将已经安全的密钥转换为更多的密钥材料,可能会提供更多的信息。HKDF / HMAC可用于构造确定性随机比特发生器。如果你想这样做,那么你需要创建一篇论文,并证明它是正确的。
我建议您看看NIST SP 800-90A (修订1)并从中选择一个DRBG。
https://crypto.stackexchange.com/questions/48447
复制相似问题