因此,距离一个Debian维护者臭名昭著地通过注释未初始化数据的用法使RNG种子变得可预测已经过去了11年多。
这个问题在网上引起了很多激烈的讨论,大部分关注点似乎都集中在批评审查流程或攻击相关开发人员上。
然而,我找不到有关该段代码实际存在的思考过程的任何信息。很多用户认为“最坏情况下,它不会有任何损害”-然而,这对我来说似乎完全违反直觉。
毕竟,从未初始化的内存读取会导致未定义的行为,这可能会导致鼻子恶魔、运行nethack或格式化您的硬盘。因此,我认为将这种逻辑引入任何程序-更不用说加密库-会使您距离彻底失败只有一个侵略性编译器优化的距离。
因此,我的问题是:- 我是否有什么误解?这实际上并没有引发不确定行为,而是在标准下被定义的行为?
- 如果它确实引发了UB,那么为什么最初在OpenSSL中包含了这种行为?