首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于ARC4random -ChaCha的LibreSSL PRG

基于ARC4random -ChaCha的LibreSSL PRG
EN

Cryptography用户
提问于 2016-02-28 12:41:55
回答 1查看 473关注 0票数 3

下面是来自于arc4random.c中使用的LibreSSL伪随机生成器的OpenBSD。

它的工作如下:

  1. 从操作系统(PRG种子)获取40个“真正随机”字节;
  2. 使用种子作为密钥和IV生成1024字节的ChaCha密钥流;
  3. 使用密钥流的最后984字节作为PRG输出,使用前40字节作为键和IV生成ChaCha密钥流的下一个1024字节;
  4. 重复,直到密钥流字节总数超过限制为止;然后重新启动(转到步骤1)。

我不太明白第3步的目的(参见链接代码的第135-138行):

代码语言:javascript
复制
/* immediately reinit for backtracking resistance */
_rs_init(rsx->rs_buf, KEYSZ + IVSZ);
memset(rsx->rs_buf, 0, KEYSZ + IVSZ);
rs->rs_have = sizeof(rsx->rs_buf) - KEYSZ - IVSZ;

为什么没有使用作为PRG输出的整个密钥流?为什么“重组”一步会使PRG更加安全?

EN

回答 1

Cryptography用户

回答已采纳

发布于 2016-02-28 13:33:44

这是为了防止两种不同类型的攻击。

  1. 偏见攻击。将来,ChaCha20可能会像RC4那样被破坏,只有在密钥流中有足够的部分时,您才能恢复密钥(或类似的内容)。通过频繁地重新键入,您可以限制每个给定密钥的密钥流长度,从而使这些攻击变得不可能。
  2. 国家恢复攻击。假设攻击者在某个时间点了解PRNG的状态。现在,虽然他仍然可以预测未来的比特,但他将无法预测超过最后一个重键的过去位,因为这样做所需的键已经消失,并且您无法从当前的键中恢复它(如果可以的话,您可以被动地从密钥流的一个短片段中恢复密钥)。
票数 4
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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