确定性不等于可供外人预测

生成器从种子建立内部状态,再按算法生成输出和更新状态。给定全部初始材料与相同执行条件,确定性过程可以重现;密码学要求的是缺少受保护输入或状态的攻击者,无法在所声称资源范围内有效预测输出。

这使它不同于每个输出位都直接来自新物理事件的产生方式。NIST的DRBG模型把确定性机制与随机性来源分开说明,实际安全性必须同时看两者,不能只选择一个强哈希函数就忽略怎样初始化。

参考:[1]

输出长度不创造额外熵

种子长度、其中真正不可预测的熵以及生成器支持的安全强度,不是同一个量。用可猜时刻拼出很长种子,不能只凭字节数量证明具有对应强度;持续请求更多输出,也不会把较低强度的实例自动升级为更高强度。

内部状态和用于构造它的秘密材料还需保护。快照、克隆或泄露可能使状态在不该相同的地方重复;健康检查、错误返回与重新播种应按完整机制处理,而不是遇到熵输入失败仍假装成功返回全零或旧缓存。

参考:[1]

回溯抵抗与预测抵抗分开

回溯抵抗关心当前状态泄露后,过去未见输出是否仍受保护;预测抵抗则关心未来输出。单向更新能帮助阻止从新状态倒推旧状态,却不能在攻击者已经掌握当前确定性状态时,凭空阻止它继续向前计算。

NIST据此把有效引入新鲜熵的重新播种与预测抵抗联系起来。统计测试又是另一个层面:通过某些分布测试不能代替生成器的密码分析,也不能单独证明某个部署已正确保护了种子与状态。

参考:[1] [2]