Cointime

扫码下载App
iOS & Android

解析针对比特币和以太坊的无格半半攻击

项目方

作者:Sylvain Pelissier 编译:Cointime.com 237

公共区块链在其ECDSA签名方面存在长期的攻击历史。由于所有交易都是公开可见的,这为密码学攻击提供了一个完美的实验场。最近发布了一种名为“半比特币ECDSA随机数的好奇案例”的格攻击,并对比特币进行了实验。作为热爱半比和半比奶酪火锅的瑞士团队,我们必须调查这种攻击。我们发现我们先前的攻击,“多项式随机数”,也适用于这种生成ECDSA随机数的方式。我们在本文中解释了如何操作,并展示了我们与论文所得结果的对比。

先前的攻击

为了签署一条消息,ECDSA使用一个称为随机数(nonce)的值。随机数必须是随机生成的,并且对于每个要签名的消息都必须是唯一的。对于比特币和以太坊的secp256k1曲线,典型的随机数值如下:

ECDSA存在一个众所周知且广为研究的常见陷阱,即随机数(nonce)重用。顾名思义,如果一个随机数在不同的签名中被重复使用,那么私钥可以从这些签名中恢复出来;显然,首先应用于区块链的攻击就是随机数重用攻击。只要两条不同的消息使用相同的随机数进行了签名,私钥就会泄露。通常通过按照RFC 6979生成确定性随机数来解决这个问题。

然而,ECDSA随机数非常关键,即使在它们的生成过程中有偏差也会导致私钥被恢复。因此,后来在公共区块链上应用了更巧妙的基于格的攻击。这些攻击可以恢复比预期长度更短的随机数,长度分别为64、110、128和160位。例如,像下面这样生成的随机数容易受到基于格的攻击的影响:

随机数越小,用于攻击的格的维度就越小,成功攻击所需的签名数量也越少。根据《偏差随机数》论文,两个128位随机数和一个3维格给出了75%的成功概率(私钥恢复)。当使用三个170位随机数和一个4维格时,我们可以获得95%的成功概率,以此类推。攻击的变体还适用于发现具有共享前缀和后缀的随机数。例如,像下面这样生成的随机数同样容易受到前述攻击和常见后缀构造的影响:

Polynonce

攻击ECDSA的另一种方式是假设随机数之间存在代数关系。我们团队提出了Polynonce攻击,它假设未知系数a_i间存在一个多项式关系,形式如下:

k_{n+1} = a_1 k_n + a_0

或者

k_{n+1} = a_2 k_n^2 + a_1 k_n + a_0

然后,Polynonce攻击能够以100%的成功概率通过代数方法恢复私钥,但线性情况下需要4个签名,二次情况下需要5个签名,以此类推。该攻击主要依赖于解多项式方程,因此与基于格的攻击相比非常快速。有关更多详细信息,该攻击将在即将举行的DEFCON会议上进行介绍。

单个签名

所有先前的攻击都需要至少两个来自同一私钥的不同签名。然而,像Ledger这样的钱包会使用单个私钥签署交易,然后更换私钥。这可以解释为什么现在很多比特币公共地址只使用一次。下面是一个以对数刻度绘制的比特币转账数据图(截至2022年9月5日,区块752759)限定为P2PKH交易:

这显示了92%用于P2PKH交易的公钥仅使用一次。此功能主要是为了保护隐私,但间接地也保护了免受先前攻击的影响。对于以太坊而言,情况有些不同。我们分析了1759432087个签名,来自151429561个唯一密钥,并制作了线性刻度图:

这是相当不同的情况:42%的公钥仅用于单个签名,22%用于两个签名,13%用于三个签名,以此类推。因此,似乎隐私保护方法在以太坊上的应用较少或不适用。

半半随机数

最近出现了一种新的攻击方法,当随机数使用消息哈希的上半部分与私钥的上半部分连接时,会产生一些问题。换句话说,随机数k可以表示为:

k = h_{msb} || d_{msb}

这种攻击的创新之处在于,它允许从单个签名中恢复出私钥d。类似于先前的基于格的攻击,将随机数k的表达式注入到ECDSA公式中,并重新排列以形成一个隐藏数字问题的实例。然后使用BKZ算法解决该实例。这项技术非常强大,因为只需要一个签名,就能对仅使用一次的私钥发出的交易进行攻击。经过优化的攻击版本能够在0.48秒内以99.99%的成功率恢复私钥。这相当强大,但作者花费了49个CPU年的时间在比特币区块链上运行该攻击。

对半半随机数应用Polynonce

在阅读关于半半攻击的内容时,我们发现Polynonce也可以用于恢复使用半半随机数的私钥。对于一个ECDSA签名(r, s),一个消息哈希h和一个私钥d,我们有以下与随机数相关的关系:

k = s^{-1}(h + rd) mod q

如果我们有两个使用先前的半半公式生成的随机数k_0和k_1,它们的差值为:

k_0 - k_1 = s_0^{-1}h_0 - s_1^{-1}h_1 + (s_0^{-1}h_0 - s_1^{-1}h_1)d = h_{0,msb} - h_{1,msb}

我们发现了d的一个线性方程,其中所有其他值已知。这提供了一种非常快速解决方程和恢复私钥d的方法。然而,使用Polynonce需要两个随机数和来自同一私钥的两个签名。相比之前的攻击,我们失去了一个巨大的优势。尽管如此,由于这种攻击变体非常快速,可以首先对具有多个签名的公钥使用它,然后再对剩余的签名使用基于格的攻击。

由于我们方程中的随机数差值仅取决于h_{0,msb} - h_{1,msb},这使我们能够恢复使用公式k_i = h_{i,msb} || c(其中c是一个(秘密)常量)生成的所有随机数。这更加通用,但对于比特币来说稍微有些复杂。从ECDSA签名(r, s)出发,相同消息的不同签名(r, -s)也是有效的。由于比特币拒绝具有最大s值的签名以避免伪造签名,这意味着我们必须同时计算-k和k。因此,在我们的攻击中,我们必须猜测每个随机数的符号。

这种构造应该也被先前对共享后缀进行格攻击的研究所发现,但成功率只有75%。

结果

我们对比特币区块链转储文件进行了分析,该文件是我们之前分析中使用的(截至2022年9月5日的第752,759个区块)。我们分析了至少具有2个签名的3400万个公钥。在一台16核心、2.7 GHz时钟的AMD处理器上,耗时10分23秒。

我们成功找到并恢复了110个唯一的私钥。例如,地址

18zg6FG5pu8Bpq73L54AYvB8phTw3qCCR7

的交易

f3151fc1b29c117f1e4b67045b2d2901e7c289f596c242d7de123243fb623981

和

f7bf1edf9d9cefa8421322c53bb00ecf118f99489171da72a9c11cf8d02b65f8

使用半半方法生成随机数。我们的脚本能够恢复该地址的私钥:

如果我们重新计算此类交易的随机数,我们将得到:

我们清楚地看到随机数的最低有效一半等于私钥的最高有效一半。然而,如上所述,我们能够恢复其他有趣的案例;对于同一个地址,我们发现了两个随机数:

在这种情况下,私钥并没有涉及,因为我们实际上是找到了另一个未知的常数。我们还能够证实先前的发现,一些使用这种随机数的密钥是小密钥:d = {1, 2, 4, 7, 11, 24, 75, 77, 87, 128, 144, 549, 897}。因此,这些密钥可以通过穷举法轻松恢复,类似于网站https://privatekeys.pw上所做的工作。我们没有找到余额非零的账户,我们认为这些账户被机器人监控,并在余额变动时被清空。

由于这种攻击非常快速,我们还对半半随机数生成的其他变体运行了相同的攻击:k = h_{lsb} || d_{msb}、k = d_{msb} || h_{msb}和k = d_{msb} || h_{lsb},但我们没有发现额外的结果。

我们还对之前攻击期间收集的以太坊数据集运行了相同的攻击。该攻击在同一台机器上耗时49分11秒。这次攻击没有恢复任何私钥。

过去各种创造性的随机数生成构造方法非常有趣,我们想知道是否还存在其他奇特的构造方法。尽管这些新攻击没有恢复新的私钥,并不意味着先前的交易中没有使用其他弱随机数生成算法,也不意味着可以通过类似的方法进行恢复。如果发现此类问题,保护资金的最佳方式是将其转移到之前未用于交易的新地址,并将存在漏洞的地址保持空置。我们的攻击脚本和我们获得的结果可在Polynonce攻击的Github存储库上找到。

评论

所有评论

推荐阅读

  • ETH突破2300美元

    行情显示,ETH突破2300美元,现报2300.05美元,24小时涨幅达到1.35%,行情波动较大,请做好风险控制。

  • 本周重要事件与数据预告:美国中期选举、非农、中国外储

    11月2日,本周重要事件与数据预告如下: 1. 周一:①数据:中国10月RatingDog制造业PMI;瑞士9月实际零售销售年率;法国、德国、欧元区、英国10月制造业PMI终值;美国10月标普全球制造业PMI终值;美国10月ISM制造业PMI;美国9月营建支出月率;②事件:今日有1万亿隔夜逆回购、560亿元7天期逆回购到期。③财报:苹果(AAPL.O)、Palantir(PLTR.N)等。 2. 周二:①数据:澳大利亚至11月3日澳洲联储利率决定;瑞士10月CPI月率;美国9月JOLTs职位空缺;美国9月工厂订单月率;②事件:澳洲联储公布利率决议和货币政策声明,主席布洛克召开货币政策新闻发布会;2027年FOMC票委、芝加哥联储主席古尔斯比发表讲话;欧洲央行管委拉德夫、穆兰、科赫尔、多伦茨等发表讲话;2026年美国中期选举;③假期:日本东京证券交易所因文化日休市一日;④财报:辉瑞(PFE.N)、AMD(AMD.O)、BioNTech SE(BNTX.O)等。 3. 周三:①数据:美国当周API原油库存;中国10月RatingDog服务业PMI;法国、德国、欧元区、英国10月服务业PMI终值;欧元区10月CPI初值;美国10月ADP就业人数;美国9月贸易帐;美国10月标普全球服务业PMI终值;美国10月ISM非制造业PMI;美国当周EIA原油库存、当周EIA俄克拉荷马州库欣原油库存、当周EIA战略石油储备库存;②事件:欧洲央行管委内格尔、首席经济学家连恩发表讲话;美国财政部发布季度再融资公告;第二十四届中国半导体封装测试技术与市场年会于11月4日-6日在南京丰大国际大酒店举行;③财报:高通(QCOM.O)、Arm(ARM.O)、Uber(UBER.N)、麦当劳(MCD.N)等。 4. 周四:①数据:法国9月工业产出月率;瑞士10月季调后失业率;欧元区9月PPI月率;美国10月挑战者企业裁员人数;英国至11月5日央行利率决定;美国至10月31日当周初请失业金人数;美国10月全球供应链压力指数;美国当周EIA天然气库存;②事件:日本央行公布9月货币政策会议纪要;欧洲央行管委穆兰、执委施纳贝尔等发表讲话; 英国央行公布利率决议、会议纪要及货币政策报告,行长贝利召开货币政策新闻发布会;瑞士央行行长施莱格尔发表讲话;2026年FOMC票委、克利夫兰联储主席哈玛克就稳定币和避险货币汇率问题发表讲话;2027年FO

  • 伊朗外长披露“两天计划” 美方履约方能重启伊美谈判

    当地时间11月1日,伊朗外长阿拉格齐在接受媒体采访时表示,伊朗代表团访问卡塔尔是伊朗与卡塔尔、巴基斯坦等调解方持续沟通的延续。目前,摆在桌面的方案与伊朗此前提出的“七日计划”基本相同。卡塔尔和巴基斯坦等调解方也就此进行了多次磋商和讨论,并提出了比伊朗“七日计划”更具可行性和可操作性的建议。 阿拉格齐表示,卡塔尔提出的建议之一是“将七天期限缩短至五天甚至更短”。目前,伊朗同意一项“两天计划”,即:第一天,美国将采取一系列(履约)措施。第二天,霍尔木兹海峡将开放,海峡交通将恢复到之前的状态。 阿拉格齐指出,现在所有这些问题都摆在了桌面上,只要(美国)遵守伊朗这个为期两天的计划,就能为和平铺平道路,使霍尔木兹海峡恢复正常。在美国履行相关承诺、霍尔木兹海峡开放后,伊朗与美国恢复谈判的道路才会打开。据了解,伊朗提出的美国必须履约的条件包括:确定霍尔木兹海峡通航新航线、解冻伊朗资金、结束包括黎巴嫩在内的地区战争、解除海上封锁、伊朗出口石油豁免权、解除在《伊斯兰堡谅解备忘录》后美国实施的新制裁等。(央视)

  • 以媒:以色列已准备好与美国联手打击伊朗,但具体目标尚不明确

    11月2日,据《耶路撒冷邮报》报道,如果特朗普要求以色列国防军(IDF)在11月3日美国中期选举后参与美军空军对伊朗的军事行动,以军已做好打击准备,但目前局势仍笼罩在诸多不确定性之中。特朗普此前曾在今年8月、10月初及其他多个时点撤回对伊朗发动袭击的威胁,而如今袭击可能性再次上升,部分原因在于各方已尝试通过其他途径争取伊朗让步,特朗普团队中的部分成员也正重新转向支持军事打击。过去一周,超过10架美国军用运输机抵达以色列南部的内瓦提姆空军基地和乌夫达空军基地,似乎是在为一场重大军事行动做准备。另有报道称,美国正向以色列及其他阿拉伯盟友调运防空系统和拦截弹。不过,目前美国在该地区的兵力仍少于此前一些时期的部署规模。但这可能只是部署的开始。美国与以色列对于此类军事行动的具体目标仍存在分歧。(金十)

  • 币安:目前提现量已逐步趋于稳定,提款规模占资产管理规模的比例非常小

    11月2日,据官方消息,币安已于2026年11月1日14:00(东八区时间)起分阶段恢复提现服务。截至20:36(东八区时间),首批涵盖的全部15个网络与资产均已恢复提现。提现量在最初短暂激增后已回落,并如预期逐步趋于稳定,充值量则持续保持较高水平。 11月1日14:00至23:30(东八区时间)期间,我们共处理了46.49亿美元的提现及10.1亿美元的充值,净流出约36.4亿美元。根据截至2026年10月28日最新的储备证明数据,这相当于平台1,710亿美元资产管理总额(AUM)的2.1%。我们已于10月31日08:00(东八区时间)完成新一轮储备证明快照,并启动零知识证明(ZKP)计算。更新后的报告预计将于明日在储备金证明网页站公布。 我们的团队正继续对其余网络与资产进行严格测试。我们深知,安全、可靠地提取资金对您至关重要,并将尽快公布下一阶段的具体安排。请放心,目前市场状况稳定。

  • 币安:目前提现量已逐步趋于稳定,提款规模占资产管理规模的比例非常小

    11月2日,据官方消息,币安已于2026年11月1日14:00(东八区时间)起分阶段恢复提现服务。截至20:36(东八区时间),首批涵盖的全部15个网络与资产均已恢复提现。提现量在最初短暂激增后已回落,并如预期逐步趋于稳定,充值量则持续保持较高水平。 11月1日14:00至23:30(东八区时间)期间,我们共处理了46.49亿美元的提现及10.1亿美元的充值,净流出约36.4亿美元。根据截至2026年10月28日最新的储备证明数据,这相当于平台1,710亿美元资产管理总额(AUM)的2.1%。我们已于10月31日08:00(东八区时间)完成新一轮储备证明快照,并启动零知识证明(ZKP)计算。更新后的报告预计将于明日在储备金证明网页站公布。 我们的团队正继续对其余网络与资产进行严格测试。我们深知,安全、可靠地提取资金对您至关重要,并将尽快公布下一阶段的具体安排。请放心,目前市场状况稳定。

  • 币安:目前提现量已逐步趋于稳定,提款规模占资产管理规模的比例非常小

    11月2日,据官方消息,币安已于 2026 年 11 月 1 日 14:00(东八区时间)起分阶段恢复提现服务。截至 20:36(东八区时间),首批涵盖的全部 15 个网络与资产均已恢复提现。提现量在最初短暂激增后已回落,并如预期逐步趋于稳定,充值量则持续保持较高水平。 11 月 1 日 14:00 至 23:30(东八区时间)期间,我们共处理了 46.49 亿美元的提现及 10.1 亿美元的充值,净流出约 36.4 亿美元。根据截至 2026 年 10 月 28 日最新的储备证明数据,这相当于平台 1,710 亿美元资产管理总额(AUM)的 2.1%。我们已于 10 月 31 日 08:00(东八区时间)完成新一轮储备证明快照,并启动零知识证明(ZKP)计算。更新后的报告预计将于明日在储备金证明网页站公布。 我们的团队正继续对其余网络与资产进行严格测试。我们深知,安全、可靠地提取资金对您至关重要,并将尽快公布下一阶段的具体安排。请放心,目前市场状况稳定。

  • 币安恢复ETH、USDT、USDC、BNB 提现,后续资产逐步开放

    11月1日,币安在 X 平台发布提现更新公告,已恢复部分资产与网络的提现服务: - 以太坊网络:USDC、USDT、ETH - BNB 智能链(BSC):USDC、USDT、BNB 币安表示,完成安全检查之后,会分阶段继续开放更多资产与网络的提现,后续进展将通过币安官方渠道对外发布。

  • BTC突破78000美元

    行情显示,BTC突破78000美元,现报78000.01美元,24小时涨幅达到0.97%,行情波动较大,请做好风险控制。