Claude半小时查明NIST五条椭圆曲线种子生成方式
Claude半小时解开密码学悬案,学界集体走偏20年
据Anthropic披露,Claude用不到半小时查明了NIST五条标准椭圆曲线(P-192、P-224、P-256、P-384、P-521)的种子生成方式。Claude在未获提示的情况下猜测种子来自90年代C语言库的伪随机数生成器,写扫描程序测试34种生成器与输出截取方式组合,发现四组种子拆成20个32位整数后最高位全为0,据此锁定lrand48,再用LLL格基约简算法恢复被截取状态,并回溯到1997年5月至1998年4月间的Unix时间戳。以P-256为例,对应初始化时刻为1997年8月16日UTC 01:52:34,取第1842组候选即得到以C49D开头的种子。Anthropic表示部分曲线跳过原因、B-163种子及部分基点生成方式仍未解释。
推荐理由
AI 评分 69
Anthropic披露Claude逆向还原NIST椭圆曲线种子的过程,可看到模型如何用扫描程序与格基约简定位随机数生成器。
主题
正文
量子位 | 公众号QbitAI
全员大逃杀,这次轮到 Claude ——
刚刚,据Anthropic披露,Claude用 不到半小时 ,查明了五条NIST标准椭圆曲线的种子生成方式。
这串业界用了二十多年的数字,一度被写进密码学标准,但最初是怎么选出来的,一直没人能说清。
人们甚至找到了当事人,线索指向一句 “给Bob和Jerry加薪” 的口令哈希运算。
它能让接收方检查,一份数据是否由声称的签署者签发,以及签署后有没有被修改。2000年,它被美国国家标准与技术研究院NIST纳入FIPS 186-2数字签名标准。
使用这套算法之前,还得先选定一些公共数学参数,包括曲线P-192、P-224、P-256、P-384和P-521。
争议就出自它们的 种子 上。
可以把种子理解为生成曲线参数的起始材料:拿到种子,按照标准规定的步骤运算,就能检查后面的参数是否对得上。
但 为什么偏偏是这个种子 ,压根没人知道。
就连当年提供种子的Jerry Solinas也已经记忆模糊,只大致记得,他们曾把一句可能是加薪的玩笑口令转换成数字,再加了计数器。
于是这二十多年来,大家都在往这个方向猜,密码学工程师Filippo Valsorda还发布了 悬赏令 ,高调邀请大家寻找这五组种子的前身。
结果都是无疾而终,直到 Claude 出手了。
按照Anthropic的描述,员工在把问题交给内部研究模型时,并没有告知这条加薪口令的线索。
Claude于是自行猜测,这些数字也许来自 90年代C语言库 里的伪随机数生成器。
因为这类程序生成的数字看似杂乱,背后却遵循固定规律。只要认出规律,就有机会倒推出生成过程。
随后Claude写了一个 扫描程序 ,把公开种子里的二进制数字一位位挪着检查,测试了34种生成器与输出截取方式的组合。
结果发现,四组种子分别拆成五个32位整数后,这20个整数的最高位, 居然全是0 。
破案了,嫌疑人应该是 lrand48随机数生成器 。
lrand48内部保存着一个48位整数,每调用一次,它就把这个整数乘上固定常数,再加上另一个常数,最后只保留结果的低48位,作为下一轮状态。
但输出结果只有其中的高31位,如果放进32位里,剩下的则只能用0来补。
找到了机器后,Claude再借助 LLL格基约简算法 恢复种子被截取状态。
接下来就只剩一个问题,最初是如何启动的?
负责初始化的函数叫srand48,它会把输入值放进48位状态的高32位,再把低16位固定设为0x330E,再沿着递推关系往回算,目标指向 Unix时间戳 。
这些初始化输入,集中落在了 1997年5月至1998年4月 。
也就是说, 把某一刻的时间变成整数 ,交给生成器,再按固定方式取出数字,就能重新得到标准里的种子。
以P-256为例,对应的初始化时刻是:1997年8月16日,UTC时间01:52:34。
从这个时间出发运行生成器,取第1842组候选,得到的正是那串以C49D开头的种子。另外四组也能一一对应上。
当然,A社也表示,这份结果还没有补齐所有历史空白。
研究者发现,当年的程序跳过了一些看起来也符合条件的候选曲线,原因仍不明确;B-163的种子,以及部分曲线基点的生成方式,也尚未得到解释。
不过新结果也意味着这些曲线并不存在任何潜在的安全漏洞,可以放心食用。