- SignalDesk3小时前
anthropic.com – 16 Oct 26 Claude reveals ECDSA curve origins The decades-old mystery of the origins of one of the most popular cryptographic standards has been explained. [!quote]+ “这只是时间戳”:关于最流行密码标准之一起源的数十年谜团已被解释。 我们追查了密码学界长期以来的未解问题,以解决对ECDSA的关切,ECDSA是我们最广泛使用的密码标准之一。 读者应将此视为有趣的结尾章节,标志着多年猜测的结束。没有什么行动可以采取,也没有什么可以改变的做法。大多数研究人员已经信任这些曲线。请欣赏。 ECDSA是最广泛使用的椭圆曲线密码学标准。2000年,NIST采纳了该标准,作为 FIPS 186-2数字签名标准 的一部分,该标准列出了一组不同大小和安全级别的标准椭圆曲线。对于素域和二元域上的曲线,规范中发布了一个“种子”参数,其哈希值用于定义曲线系数b。这些种子的来源一直是个长期存在的问题,因为NSA提供了这些种子,没有任何解释或正当理由。举例来说,NIST P-256曲线种子没有说明其来源信息。 SEED = C49D3608 86E70493 6A6678E1 139D26B7 819F7E90 尼尔·科布利茨 和 阿尔弗雷德·梅内塞斯 撰写了一篇关于这场争议的精彩总结,《 包裹在谜 团中的谜语》,讨论了种子价值的历史和相关问题。这个谜团引发了 业余调查种子的来源 ,并悬赏寻找任何 能找到它们的人 。 最精彩的故事是,长期担任NSA员工的杰瑞·索利纳斯用一个幽默的暗语拼凑出了这些种子: “我记得是计数器而不是多重哈希,但我不清楚细节。信息大意是“给鲍勃和杰瑞加薪”或者“鲍勃和杰瑞规则”之类的。实际上是鲍勃·赖特写了代码,他也不记得细节。我们也找不到那么久以前的档案。如果它们存在,毫无疑问就放在约柜附近的硬盘上。” 杰瑞·索利纳斯,2015年 不幸的是,Jerry于2023年去世,当时的其他同事也没有回应,这也让这些种子最初来源的问题变得悬而未决。 [!quote]+ Claude 找到了种子 几位Anthropic员工在听到关于这句幽默短语的杂烩后,试图追逐这些种子,但未能成功。事实证明这是错误的。2026年10月,一位好奇的Anthropic员工询问内部研究模型,是否能在不指向线索的情况下推断出这些种子是如何产生的。 不到半小时 ,克劳德就发现了NIST的P-192、P-224、P-256、P-384和P-521种子的起源。这些都不是任何哈希算法的结果,而是C库随机数生成器的输出,并植入了Unix时间戳! lrand48 所用算法会从随机数生成器(RNG)中采样,RNG由Unix时间戳( t )初始化,进行若干次迭代( n )。每次迭代将抽取20字节作为候选种子。所以,前20字节是候选1,接下来的20字节是候选2,依此类推。例如,P-256需要1842次迭代才能输出标准化种子。 https://cdn.sanity.io/files/4zrzovbb/website/56865322bd9974c7be23abf7d654fb5a79155791.mp4 这意味着什么 这不是密码学破解、新攻击或ECDSA曲线的弱点。事实上,这让我们更有信心,这些曲线的选择没有任何后门或有意的弱点。多年来,人们一直对NIST曲线参数的起源持怀疑态度。这些文件在提交给NIST时未提及其被选中方式,让人怀疑是否被故意设置了后门。这些发现使得这种说法变得不太可信。种子的生成方式非常简单:一个由时钟初始化的通用伪随机数生成器,现在任何人都可以复制。这大大减少了颠覆的空间,我们也能确信这些界限是安全的。 发现过程 基于谣言搜索这个词,但一无所获。克劳德尝试了另一种角度:预判生成曲线的软件是如何工作的。Claude猜测该软件使用了1990年代C库附带的伪随机数生成器(PRNG)。这些老PRNG的输出能力足够弱,可以被识别。识别该输出将揭示所使用的PRNG,并可能恢复其初始化状态。 Claude编写了一个扫描器,逐位滑动每个已发布的种子,测试相邻的块是否是1990年代老式生成器的连续输出。扫描涵盖了34种发生器和输出片的组合。这时,克劳德注意到一些种子顶部的部分出现了一个规律:它们全是零。它写成五个32位字,十个种子中有四个在20个词的顶位都是0。这会是偶然发生的,概率是1/5810。这是线性全余生成元 lrand48 的一个签名,它只返回48位状态的前31位。一旦你知道要去找,这个图案就能用肉眼看到。为了恢复状态,Claude 取第一个词,尝试 17 个隐藏位中所有 2¹⁷ 的值,并检查接下来的四个字是否跟上。这对讨论中的四个种子都有效。 素数曲线种子来自同一个lrand48生成器,但保留的每个输出比特更少。克劳德必须从这些比特中恢复PRNG的内部状态。事实证明,恢复截断线性全余生成元的状态是一个教科书上的格点问题,可以通过 Lenstra–Lenstra–Lovász(LLL) 基约算法求解。Claude不知道种子可能显示的状态部分,所以它对每个窗口都进行了求解器运行。五个NIST素曲线种子以及ANSI X9.62标准中的另外五个种子均出现相同的模式:lrand48() >> 23。每个恢复的48位状态都会重生成其种子的全部160位,这绝非偶然发生。 这个线性全余生成元可以顺向运行,所以对于每个种子,Claude 将状态倒退,直到达到 srand48 初始化的形式,最低 16 位等于 0x330E。该形态的内部PRNG状态每65,536步出现一次,因此达到一个阶段本身并不算证据。 然而,对于这十个素数曲线种子,每个srand48初始化都是Unix时间戳,代表1997年5月至1998年4月之间的日期。他们使用的是由Unix时间戳植入的弱PRNG。四个二进制曲线初始化显示为1984年2月。时间戳加倍后,他们对应到1998年4月17日,即P-224运行两周后。所以,这个项目可能把时间减半了。 当时克洛德的内心想法是: 这令人震惊:它解开了这个25年前的谜团。嗯,等等。让我怀疑一点:我是在某种模拟/测试环境中吗?…种子与我对实际数值的记忆相符…嗯,现实中这合理吗?据我所知…悬赏未解。…所有顶部部分清空——20位,概率1e-6。所以确实是现实世界的。哇,真是个大发现。 嗯,等等。让我谨慎考虑其合理性:这么显而易见的事情25年后才被发现,这是否值得怀疑?我这边通过直接计算验证:32位种子匹配160位+小索引:没有巧合(10位×160位)。这是真的。 [!quote]+ Claude 也找到了一些基础点 但等等,还有更多…每条曲线还带有一个基点G,即每个ECDSA公钥的不动点,每个ECDSA公钥都是它的倍数。上述种子并不决定这个G,因此又出现了一个问题:这些基点是如何生成的? 在检查种子时,克劳德还发现了一些基础点的来源。1997年5月生成的六条曲线(P-192和五条ANSI X9.62示例曲线prime192v2、prime192v3和prime239v1到v3)的基点来自 FreeLIP 中的随机数生成器,即 Arjen Lenstra 的长整数算术软件包。 Victor Shoup 的 NTL 库 早期版本也使用了相同的代码。 这里的配方很简单: 给生成器添加一个小整数。 扔掉七个输出。 从26位输出mod p的缩减中生成候选的x坐标。 重复第三步,直到x在曲线上。 Claude发现,生成种子分别是P-192的20000,prime239v1到v3的20420、20507和20509,prime192v2和v3的20512和20517。 据我们所知,之前没有解释过NIST的基点。P-224、P-256、P-384和P-521的基点不符合该配方;我们无法解释他们是如何被选中的。 开放问题 并非每个20字节候选种子都能生成可行的曲线,我们观察到有些潜在可行的曲线被跳过。对于P-256,已发表的种子是候选1842,但同一批次的候选876也给出了一条大小合适且参数选择方式相同的素阶曲线。P-224的运行经过了三条这样的曲线,而ANSI X9.62示例曲线后方的两条则通过了另外七条(见图)。我们不知道可能使用了哪些标准,也不知道这是否是一个无意的瑕疵。 由于被跳过的候选人数较少,我们认为选择了弱化曲线的可能性不大。这意味着弱化曲线很常见且容易找到。理论上仍可想象,这些曲线是通过对随机数生成器的时间戳进行搜索,选择了具有特定性质的。不过,只有当你打算公开时间戳作为种子无害生成的证据时,才需要这样做。数据中没有显示有多少分。 还有一颗种子我们无法回收。第五种二种子B-163完全符合克劳德尝试过的任何东西,也无法解释。最后,我们不知道P-224、P-256、P-384和P-521的基础点是如何生成的。NIST的二元曲线也是如此。 赏金 寻找种子的36,864美元将捐赠给 互联网安全研究组 。 1 个帖子 - 1 位参与者 阅读完整话题
- 情报分类:硬件与数码
- 分类依据:内容涉及硬件、数码产品或通信卡
- 信息来源:服务器 / LINUX DO - 最新话题
- 发布时间:2026/10/17 07:48:20
- 暂无回复