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存储库上找到。

评论

所有评论

推荐阅读

  • Tornado Cash 开发者 Alexey Pertsev 被判处 64 个月监禁

    荷兰法官在斯海尔托亨博斯法院裁定,Tornado Cash 开发商 Alexey Pertsev 犯有洗钱罪。法庭判处Pertsev 64 个月监禁。 2022 年 8 月,Tornado Cash 被美国政府列入黑名单后,该开发商首次在荷兰被判入狱。当时,美国财政部声称 Tornado Cash 是朝鲜黑客组织 Lazarus 的关键工具。 Lazarus 集团与 Axie Infinity 旗下 Ronin Network 遭受的价值6.25 亿美元的黑客攻击以及其他重大加密货币盗窃案有关。

  • 荷兰法院裁定Tornado Cash创始人Alexey Pertsev洗钱罪名成立

    由三名法官组成的荷兰法庭判定Tornado Cash开发者Alexey Pertsev犯有在加密货币混合平台上清洗12亿美元非法资产的罪行,预计合议庭也将在周二对居住在荷兰的31岁俄罗斯人Alexey Pertsev进行宣判,Pertsev的律师将有14天的时间对法官的判决提出上诉。专家表示,这一判决将重塑去中心化金融领域的隐私保护进程,对为用户提供金融隐私保护工具的开源软件的开发产生 "寒蝉效应"。

  • Equalizer黑客已盗取2353枚EQUAL、2500枚spLP等代币

    Fantom 生态 DEX Equalizer 今日遭到黑客攻击,到目前为止,黑客已盗取用户大约 2353 枚 EQUAL 和其他代币。该黑客的钱包地址是 222 天前建立的,并一直在接收被盗用户的资金。 攻击开始于 5 月 14 日 12 点 10 分左右,2500 个 SpookySwap 流动性代币(spLP)被耗尽,导致许多其他代币从用户那里被盗。到目前为止,被盗代币包括: 2353 枚 EQUAL; 510,579 枚 FantomStarter(FS); 2500 枚 spLP; 600 万枚 AnyInu(AI); 985,565 枚 ChillPill(CHILL); 5 万枚 WigoSwap(WIGO: 25 枚 multiDEUS(DEUS)。

  • 跨境洗黑钱集团清洗8800万港元8人被捕

    香港警方商业罪案调查科于2023年11月锁定一个跨境洗黑钱集团,调查发现集团于2023年9月至2024年3月期间,招揽内地人到香港开设傀儡银行户口,透过不同类型骗案,如电话骗案、裸聊骗案、投资骗案、求职骗案等去诈骗受害人。受害人根据骗徒指示,将骗款存入犯罪集团控制的傀儡户口,之后集团会从傀儡户口以现金方式提取骗款,并到加密货币场外交易所(OTC)购买加密货币,同时又会在海外加密货币平台上以虚假身份开设户口,并存入由骗款所购买的加密货币,再转移至多个加密货币钱包,以清洗犯罪得益。 警方又指集团利用72个本地开立的银行傀儡户口,清洗超过8800万港元犯罪得益,其中670万港元是与48宗骗案有关。至昨日,警方于全港拘捕7男1女,年龄介乎26至51岁,涉嫌串谋洗黑钱,他们分别报称救生员、摄影师、电话程式员、销售员及无业,其中6人为骨干成员,2人为傀儡户口持有人。

  • 纽约Sharp Alpha Advisors筹集2500万美元早期软件公司基金

    纽约市的风险投资公司Sharp Alpha Advisors已经为其第二个基金筹集了2500万美元,该基金的主要投资领域是体育、游戏和娱乐行业的早期软件公司。该基金计划在15家初创公司中每家投资100万至200万美元,投资对象包括面向体育博彩、幻想体育、流媒体平台和视频游戏的技术公司。该基金最近投资了总部位于伦敦的技术初创公司C15 Studio,该公司运营和分发F1和One Championship的流媒体频道。Sharp Alpha基金会创始人Danzig声称,该基金会的投资者包括一家大型美国金融公司、美国职业体育俱乐部的所有者、家族办公室、基金和与体育、游戏和娱乐产业相关的上市公司。然而,Danzig拒绝透露任何具体的个人或公司名称。该基金是Fund I的后续基金,Fund I在2021年筹集了1000万美元,主要来自高净值人士和家族办公室。Sharp Alpha在第一期基金中进行了20项投资,平均交易规模约为25万美元。

  • Vitalik提出以太坊改进提案EIP-7706,旨在为calldata添加一个独立的gas类型

    以太坊创始人Vitalik Buterin提出一个新的以太坊改进提案(EIP-7706),旨在为calldata添加一个独立的gas类型,并将三种gas类型整合到一个协调的系统中。Buterin希望这一提案能够使关于“多维度gas”概念的讨论变得更加具体。

  • Coinbase:故障现已完全排除

    加密货币交易所Coinbase表示,故障现已完全排除。

  • 菲律宾央行批准Coins.ph试点菲律宾比索支持的稳定币PHPC

    菲律宾央行在监管沙盒下批准Coins.ph试点一种以菲律宾比索为后盾的稳定币。该试点将评估稳定币在“实际应用中”的效益。Coins.ph表示,菲律宾央行已批准其试点名为PHPC的菲律宾比索稳定币。该项目将在BSP的监管沙盒框架下进行,由Coins.ph在菲律宾银行账户中持有的现金和现金等价物支持。Coins.ph计划将稳定币整合到向菲律宾汇款的国家的汇款平台中。

  • Ripple提交寻求封存并修订部分SEC诉讼文件的动议

    5月14日消息,Ripple在5月13日的最后期限前提交了一项动议,要求对救济动议的简报和某些证据进行狭义的修订。该公司表示,其密封请求是合理的,并与法院在诉讼的简易判决阶段批准的密封请求一致。在周一提交动议之前,Ripple的律师与美国金融监管机构进行了磋商。美国SEC表示,其接受Ripple的一些请求,并可能对其他请求提出异议。 根据文件,Ripple试图编辑若公开披露可能对公司、无辜第三方和Ripple员工造成伤害的信息,寻求对包含其审计财务报表和相关文件进行狭义的修订。

  • Cointime 5月12日要闻速递

    1.交易员预测比特币价格将达到35万美元2.vladilena.eth从Zircult中赎回1930枚weETH,疑似卖出 3.华夏和嘉实确认正在推动构建基于加密货币现货ETF的抵押金融产品 4.加密货币总市值:22,550.18亿美元,24小时交易量为376.18亿美元 5.昨日Solana链上DEX交易量超以太坊、BSC、Arbitrum等五个链之和6.RSS3 VSL锁仓量近两日出现激增已接近2亿美元7.friend.tech平台Club Key交易量突破100万8.Lido已支付质押奖励超51.6万枚ETH,约合15.1亿美元9.Justin Sun将12万枚eETH存入Swell L2,价值3.76亿美元10.过去7天有1707.36枚BTC从Binance流出