刚刚,据Anthropic披露,Claude用 不到半小时 ,查明了五条NIST标准椭圆曲线的种子生成方式。

它能让接收方检查,一份数据是否由声称的签署者签发,以及签署后有没有被修改。2000年,它被美国国家标准与技术研究院NIST纳入FIPS 186-2数字签名标准。

使用这套算法之前,还得先选定一些公共数学参数,包括曲线P-192、P-224、P-256、P-384和P-521。

可以把种子理解为生成曲线参数的起始材料:拿到种子,按照标准规定的步骤运算,就能检查后面的参数是否对得上。

就连当年提供种子的Jerry Solinas也已经记忆模糊,只大致记得,他们曾把一句可能是加薪的玩笑口令转换成数字,再加了计数器。

于是这二十多年来,大家都在往这个方向猜,密码学工程师Filippo Valsorda还发布了 悬赏令 ,高调邀请大家寻找这五组种子的前身。

按照Anthropic的描述,员工在把问题交给内部研究模型时,并没有告知这条加薪口令的线索。

因为这类程序生成的数字看似杂乱,背后却遵循固定规律。只要认出规律,就有机会倒推出生成过程。

随后Claude写了一个 扫描程序 ,把公开种子里的二进制数字一位位挪着检查,测试了34种生成器与输出截取方式的组合。

lrand48内部保存着一个48位整数,每调用一次,它就把这个整数乘上固定常数,再加上另一个常数,最后只保留结果的低48位,作为下一轮状态。

负责初始化的函数叫srand48,它会把输入值放进48位状态的高32位,再把低16位固定设为0x330E,再沿着递推关系往回算,目标指向 Unix时间戳 。

也就是说, 把某一刻的时间变成整数 ,交给生成器,再按固定方式取出数字,就能重新得到标准里的种子。

从这个时间出发运行生成器,取第1842组候选,得到的正是那串以C49D开头的种子。另外四组也能一一对应上。

研究者发现,当年的程序跳过了一些看起来也符合条件的候选曲线,原因仍不明确;B-163的种子,以及部分曲线基点的生成方式,也尚未得到解释。

参考链接: [1] https://www.anthropic.com/research/ecdsa-curve-origins [2] https://x.com/sweis/status/2111165738836717980 [3] https://words.filippo.io/seeds-bounty/

量子位 QbitAI 版权所有©北京极客伙伴科技有限公司 京ICP备17005886号-1