首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用SHA 256输入散列需要等待多长时间?

使用SHA 256输入散列需要等待多长时间?
EN

Cryptography用户
提问于 2017-06-19 09:52:20
回答 2查看 1.4K关注 0票数 3

我有一个源,它以每秒8-10 bits 的速度产生秘密。我需要利用这个秘密每秒钟给另一个发电机喂食。我想知道,当我每秒连接8位时,我应该等待多长时间,然后使用更长的位作为哈希的输入。

我有两个选择:

  1. 使用8位,我得到的每秒钟,散列,并发送到下一级每秒钟。
  2. 等待10秒,然后散列最后的假设100位。在9秒内,继续使用公共信息发送前100位的散列值。

哪个更安全?我正在使用香港发展基金进行散列。

EN

回答 2

Cryptography用户

回答已采纳

发布于 2017-06-19 11:36:27

有三类随机数发生器(我自己的非正式课程),取决于进出的相对熵:-

  • 类1. Hout < Hin,它是一个真正的随机数生成器(最安全和最好的),例如瑞士公司ID的生成器。这是一个生成器的类,可以用来创建一个时间垫材料。
  • 类2. Hout > Hin,最常见的商业类型,如超高速分束器和表面上的/dev/随机。
  • 类3. Hout >> Hin,它是一个重获成功的psuedo随机数生成器,如/dev/urandom。

其中H是熵。

让我们尝试创建一个最纯净、最安全的第1类类型。

  1. 从你的熵源捕获1MB超过28小时。为什么这么急?
  2. 一个很好的压缩工具,如fp8.exe。
  3. 为了安全起见,压缩熵样本,除以2,您就可以很好地估计来自源的可用密码熵率。这一步对于确定熵率至关重要。不要尝试使用花式Shannon公式,因为如果熵流中存在任何自相关,它将无法工作。
  4. 我不熟悉HKDF的输入宽度,但只需将其除以生成速率,这就是重播之间的时间。
  5. 你不需要PRNG。HKDF虽然过于昂贵,但它将完美地充当熵提取器。

举个例子,如果你使用SHA-256,它需要256位熵作为输入。如果你的原始熵率是10位/s,当你用我的技术测量它时,它可能是4。所以每64秒钟就给SHA-256喂食。

64秒将创建一个类生成器,它是一个真正的随机数生成器。降低饲料率将降低安全性,您将有一个二级,这可能是可以接受的。

PS。我发现使用密码函数作为随机抽取器是个坏主意。这在数学上是不必要的,危险的是,如果熵源行为不当,或者你低估了熵产生率,你永远也不会知道。如果您使用一个简单得多的随机抽取器(如压缩函数/matrix ),您所犯的任何错误都将立即在最终输出的质量上变得明显。HDKF将继续使用任何类型的垃圾输入产生均匀分布的随机数,并且您永远不会知道生成器在其中运行的是哪一类。

PPS。不要遵循NIST的任何指导。它被特别削弱,以避免创建真正的随机数生成器,因此不像可能的那样安全。不幸的是(但并不意外),你会发现在这个论坛上你会对NIST有很大的偏见。如果您需要进一步的指导,请参考欧洲的AIS或ISO标准。也许法国人也是:-

票数 5
EN

Cryptography用户

发布于 2017-06-19 11:09:49

您应该聚合比特,直到有足够的种子位来使用初始种子启动您的DRBG。您的种子至少应该包含128位熵(攻击者的不确定性)。

当你得到它的时候,你可以把比特作为额外的种子添加,或者你可以先聚合一些熵。只有8位每秒的更新速率,您最好直接将熵添加到DRBG中。

要在两边创建相同的伪随机比特流,您应该:

  1. 确保双方都有相同的算法;
  2. 在两边配置相同的DRBG;
  3. 完全同时更新你的熵;
  4. 使用相同的方法和参数从DRBG请求数据。

请注意,HKDF不是伪随机数生成器(PRNG)或确定性随机比特生成器(DRBG,相同的东西)。它可能是一个伪随机函数,但这是不一样的。

HKDF将已经安全的密钥转换为更多的密钥材料,可能会提供更多的信息。HKDF / HMAC可用于构造确定性随机比特发生器。如果你想这样做,那么你需要创建一篇论文,并证明它是正确的。

我建议您看看NIST SP 800-90A (修订1)并从中选择一个DRBG。

票数 10
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/48447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档