首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ChaCha20作为具有可变长度种子的PRNG

使用ChaCha20作为具有可变长度种子的PRNG
EN

Cryptography用户
提问于 2017-11-19 15:43:26
回答 2查看 2.4K关注 0票数 5

据我所知,ChaCha20密码的密钥流可以用作种子PRNG,其中种子用于设置密钥和当前。正如RFC7539中所描述的,ChaCha20可以与256位( 32字节)密钥和96位(12字节)的nonce一起使用,允许最大352个比特(44个字节)的种子,从而将计数器限制在32位(4个字节)。

我的问题是,如果我想提供一个更大的种子,我如何使用这个PRNG?比方说,我从一个熵源启动PRNG,其中我可以保证每个字节至少有4位熵,并且希望用64字节或更多的字节为PRNG注入种子,以确信它已经被提供了256位的熵。

我认为可以使用加密散列函数(如SHA256或SHA512 )压缩收集的熵字节作为种子,但如果只能使用可用的ChaCha20原语来解决这一问题,则是可取的。

另一种可能是使用ChaCha20来构造Davies单向压缩函数,将可变长度的种子处理为44个字节的块(输入为键,下一个块为nonce ),将最后的44字节输出作为PRNG的输入种子。

戴维斯-迈耶似乎被设计用于分组密码,但ChaCha20是一种流密码。

我的问题是:

  1. 像这样使用Davis-Meyer有什么明显的问题吗?
  2. 有什么明显更好的方法来给这个PRNG提供可变长度的种子吗?
EN

回答 2

Cryptography用户

发布于 2017-11-19 18:00:19

戴维斯-迈耶?这将是一个非常不寻常的方式播种一个PRNG。熵提取的标准方法是使用经过审查的散列算法(如SHAx )。我不太确定你想如何使用你的RNG,而且我也很难破解你想要的多少个片段。我假设你只需要256位熵注入状态。

与普通的PRNG相比,有一个可用的熵源会改变一些事情。在这种情况下你不需要钥匙也不需要现在。你会从熵源收集128个字节。它是NIST建议的两倍64,当使用基于哈希的提取器时,每一位输出熵的输入熵应该加倍。然后通过SHA256运行它,并将其注入到ChaCha中,以代替nonce和key。

此外,我还假设这只是一个PRNG。使用真正熵源的种子,您将无法重复输出序列。从直觉上看,用PRNG做种子是不对的,但我不能用数学来证明这一点。遵循哈希路径,因为这是显而易见的方法,经过了很好的验证,并且可能比滚动自己的递归版本Davies更简单。

票数 2
EN

Cryptography用户

发布于 2017-12-19 19:57:10

ChaCha20是一个PRF,所以您可以使用它作为提取器。k0k1是两个随机的256位键,计算E(k0,E(k1,0)),并使用一半的输出作为键。剩馀的位可以用于当前,但是如果(k0,k1)重复,您可能需要使用一个不同的源来实现这个值,甚至是一个简单的时间戳。

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

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

复制
相关文章

相似问题

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