Claude半小时破解密码学悬案:NIST椭圆曲线种子源于90年代系统时间
AI技术再次在密码学领域取得突破性进展。Anthropic最新披露,其大模型Claude在不到半小时内,成功查明了五条NIST标准椭圆曲线种子参数的生成方式,解开了困扰业界二十多年的谜团。
这组沿用二十余年的数字已被写入密码学标准,但其初始选择逻辑长期成谜。此前线索曾指向一句“给Bob和Jerry加薪”的口令哈希运算,但Claude的研究结果推翻了这一假设,指出真正的答案源自90年代电脑时钟的时间戳。
ECDSA标准背后的“种子”之谜
此次突破涉及的核心技术是椭圆曲线数字签名算法(ECDSA)。该算法用于验证数据签署者身份及数据完整性,于2000年被美国国家标准与技术研究院(NIST)纳入FIPS 186-2数字签名标准。
在使用ECDSA前,需选定公共数学参数,包括曲线P-192、P-224、P-256、P-384和P-521。争议焦点在于生成这些参数的起始材料——“种子”。
种子是生成曲线参数的基础,通过标准步骤运算即可验证后续参数。然而,为何特定种子被选中,长期无人知晓。即便当年提供种子的工程师Jerry Solinas,记忆也已模糊,仅记得可能涉及将口令转换为数字并添加计数器。
为此,密码学工程师Filippo Valsorda曾发布悬赏令,寻找这五组种子的前身,但多年未有成果。
Claude独立推理:锁定lrand48生成器
Anthropic员工在向内部研究模型提问时,未提供任何关于“加薪口令”的线索。Claude自行推测,这些数字可能源自90年代C语言库中的伪随机数生成器。
Claude编写扫描程序,对公开种子中的二进制数字进行逐位检查,测试了34种生成器与输出截取方式的组合。研究发现,四组种子拆分为五个32位整数后,这20个整数的最高位均为0。
这一特征指向嫌疑人:lrand48随机数生成器。该生成器内部保存一个48位整数,每次调用时乘以固定常数并加上另一常数,仅保留低48位作为下一轮状态,但输出结果仅取高31位,若存入32位空间,剩余位以0填充。
确定生成器后,Claude利用LLL格基约简算法恢复了种子被截取前的状态。
溯源成功:种子源于1997-1998年的时间戳
最后一步是确定初始化输入。负责初始化的函数srand48将输入值放入48位状态的高32位,低16位固定设为0x330E。逆向推导显示,这些初始化输入集中落在1997年5月至1998年4月之间。
这意味着,将某一时刻的Unix时间戳转化为整数交给生成器,按固定方式提取数字,即可复现标准中的种子。
以P-256为例,对应的初始化时刻为1997年8月16日UTC时间01:52:34。从该时间出发运行生成器,取第1842组候选,得到的正是以C49D开头的种子。其余四组曲线也均能一一对应。
结论与遗留问题
Anthropic表示,虽然解开了主要谜题,但历史空白尚未完全补齐。研究者发现,当年程序跳过了一些符合条件的候选曲线,原因不明;B-163的种子及部分曲线基点的生成方式仍有待解释。
不过,新结果证实这些曲线不存在潜在的安全漏洞,公众可继续使用。
参考链接:
https://www.anthropic.com/research/ecdsa-curve-origins
[2]https://x.com/sweis/status/2111165738836717980
[3]https://words.filippo.io/seeds-bounty/

