Summary
- RFC 1750 指出,输出很长、统计上也像随机数的密钥,仍可能只来自少数几个可猜的种子。知道机器大约何时启动的对手,试的是时钟候选值,而不是整片密钥空间。
- 时钟精度、硬件序列号、键盘与鼠标动作、网络分组到达时间,各自能提供不同的材料;真正要核查的是对手能否预知或操纵这些材料,以及程序究竟采到了什么。
一把密钥写满几行十六进制字符,看着很能唬人。现在把镜头移到生成它的前一秒:程序读了系统时钟,把读数塞进算法,随后隆重地打印出那几行字符。来偷钥匙的人不用逐位破解。他只要知道机器大约几点开机。
1994 年 12 月的 RFC 1750正是从这里切入。当时软件密码技术越来越多地进入网络,口令、密钥等秘密量成为安全设计的基础。三位作者追问一个比算法名字更朴素的问题:秘密材料从哪里来?如果来源只有一个大致可推算的时间窗口,再精巧的后续运算,也只是把这个小窗口装饰成一条长长的数字河。
文件先把两个经常混淆的概念拆开。传统伪随机序列可以通过统计检验,看上去分布均匀;但若初始状态已知,序列就能重现。RFC 甚至拿公开的 CRC 表作例子:数字的统计性质可以很好,秘密性却约等于把答案贴在墙上。密码系统需要的是对手猜不到,而不是人类盯着数字看不出花纹。
时钟尤其擅长扮演“随机”。接口声称有微秒精度,开发者便容易把那些小数位当作惊喜。RFC 1750 提醒,不同系统的低位可能长时间不变;有些读数的逐次增加还出自操作系统的补偿逻辑。硬件序列号也会骗人。它或许能区分设备,却含有厂商和生产批次等结构;独一无二与不可预测是两回事。字段占了多少位,不能直接兑换成多少位真正的秘密。
那就去听机器周围的声音?文件讨论了鼠标动作、敲键间隔,以及网络分组到达时间。这些确实可能带来更难猜的变化,但采样路径同样要经得起追问。键盘缓冲可能抹平时间差;反复输入的内容会重复;远端对手甚至可能影响网络分组抵达的节奏。若程序只拿到了已经被缓冲、规整或操纵的值,漂亮的原始现象也帮不上忙。
RFC 1750 最尖锐的一节谈“复杂处理的谬误”。设想一个设计精良的生成器,种子却是当前时钟。对手掌握大约的启动时间,就可以列出可能的时钟读数,逐一运行同样的生成器。机器越勤快地输出,验证候选值所需的材料反而越多。算法把一粒种子变成一片森林;它没让这粒种子从对手的视野里消失。
作者还用当时的 USENET 数据库举例。如果对手手里也有那份庞大资料,从中取一段字节作秘密,资料的总量就不等于秘密量。真正藏起来的是从哪个位置开始取。RFC 在特定的 1994 年假设下,给那个位置选择估了约 25 位的上限。这是那个例子的账,不是给今日数据库贴上的通用标签。大仓库里藏一枚针,若对手拥有同一座仓库,秘密仍只落在选针的动作上。
因此,采集不可预测的输入、混合输入、生成足够多的输出,是三份不同的工作。物理噪声或环境事件可以带来新材料;混合函数处理它;生成器再把已有的秘密状态扩展给应用使用。最后一道工序再高明,也无法替前一道工序凭空造出尚未采到的意外。
2005 年的 RFC 4086取代了 RFC 1750,补进振荡器、熵池以及当时操作系统随机数机制的讨论。十年里工具变了,审问的方向没变:先查种子的来历,再欣赏密钥的长度。小偷已经走到门口了;别把时钟也挂在那里。
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance





