作者:KEYHUNTER
MuSig2協議中存在一個關鍵的隨機數重用或確定性隨機數重複使用漏洞,對比特幣加密貨幣構成根本性威脅。這個漏洞在科學上被稱為 共振潛伏者攻擊 ( 隨機數重用攻擊 ),攻擊者可以透過取得兩個具有相同隨機數的簽名,瞬間計算出受害者的私鑰。因此,攻擊者可以完全控制比特幣地址,簽署虛假交易,竊取資金,並破壞整個生態系統的安全。
“MuSig2 中的關鍵隨機數重用漏洞:對私鑰的危險攻擊及比特幣安全的未來”
研究論文:比特幣中的關鍵 nonce 重複使用漏洞及攻擊分類
比特幣區塊鏈系統建立在複雜的密碼學原語之上,以確保交易安全。核心簽章保護演算法之一是Schnorr方案,該方案是在Taproot更新後引入的,其多重簽章版本為MuSig2。儘管安全性和效率有所提高,但隨機數(nonce)的生成和使用中的錯誤會導致一個根本性的漏洞,從而威脅到私鑰的大規模洩漏 。
關鍵漏洞機制
脆弱性是如何產生的?它的本質是什麼?
任何使用橢圓曲線演算法(Schnorr、ECDSA)建立的數位簽章都需要為每個簽章產生一個唯一的隨機數(nonce)。如果同一個隨機數被錯誤地用於不同的訊息,或者隨機數變得可預測(例如,由於隨機數產生器的實現錯誤 ),則密碼aux_rand安全性將完全喪失。
從科學角度來看,這種攻擊是這樣的:
- 攻擊者取得了兩個或多個使用相同 nonce 的簽章;
- 根據這些簽名,可以編制一個方程組,該方程組可以針對私鑰進行求解;
- 一旦私鑰洩露,就可以竊取目標地址中的所有比特幣,偽造交易,並完全控制受害者的資金。 arxiv +2
利用錢包恢復工具和密碼分析工具(例如BithoRecover.keyhunters),可以輕鬆實現攻擊的實施及其成功。
攻擊的科學名稱
在科學和實踐文獻中,這種攻擊被稱為:
- Nonce 重複使用攻擊 (透過重複使用單一數字進行攻擊);
- 重複隨機數攻擊 ;
- 在 ECDSA 的脈絡下, 它被稱為 ECDSA 隨機數重用攻擊,但對於 Schnorr 和 MuSig2 方案, 則使用 術語 「隨機數重用攻擊」 。
此攻擊也被歸類為針對數位簽章的側頻道攻擊,在CWE系統中編號為CWE-323(「加密中重複使用隨機數和金鑰對」)。 ubiqsecurity +1
CVE 和漏洞狀態
截至撰寫本文時,比特幣中 MuSig2 或 Schnorr 簽名原始實現中的漏洞尚未獲得單獨的 CVE 編號,因為該問題是協議的架構問題,目前仍在密碼學研究社區積極討論中: keyhunters
- CVE-2018-0734 – ECDSA(OpenSSL)金鑰獵器中的 nonce 重複使用
- CVE-2020-28498 – 其他 ECDSA keyhunter 實作中的 nonce 產生錯誤
- MuSig2 協議在工作小組、科學出版物和 GitHub issues 中討論了這個漏洞,而不是透過官方的 CVE 流程,因為比特幣主網上尚未發現全局性漏洞利用程序。 bips +2
漏洞對比特幣加密貨幣攻擊的影響
利用此漏洞可以實現以下功能:
- 如果發布了兩個具有相同 nonce 的簽名,則獲取任意比特幣地址所有者的私鑰;
- 在所有者不知情的情況下偽造交易並竊取資金;
- 對交易所、服務和錢包進行大規模攻擊,利用 nonce 錯誤影響大量資金;
- 破壞人們對比特幣網路安全的信心,並隨著漏洞擴散到易受攻擊的客戶端而造成系統性損失。 notsosecure +2
保護方面的協議和標準建議
- BIP-340 和 RFC6979 要求為每個訊息和金鑰產生確定性且唯一的 nonce;
- 使用密碼學上安全的隨機數產生器作為參數
aux_rand; - 定期對加密程式碼庫進行審核和更新;
- 實作 nonce 重複檢查和測試。 aimspress +2
結論
Schnorr/MuSig2簽章中的關鍵nonce重用漏洞對比特幣構成根本性的密碼學威脅,其科學名稱為 Nonce重用攻擊 (CWE-323),其他密碼學庫中也存在類似的CVE漏洞。該漏洞一旦成功利用,將導致私鑰遺失、資金大規模被盜,並破壞整個比特幣生態系統的安全。如果不實施嚴格的安全措施,例如確定性且唯一的nonce生成機制,數位資產的安全將無法得到保障。
在分析了提供的 MuSig2 程式碼和對密碼學漏洞的研究結果後,我可以確定幾個可能存在安全漏洞的行,這些行可能會發生金鑰或私鑰洩漏。
MuSig2 程式碼中的加密漏洞:潛在金鑰洩漏點分析
已識別的關鍵漏洞
1. 第 90-94 行 – 讀取位元組檢查不足
去:func (p *PartialSignature) Decode(r io.Reader) error {
p.S = new(btcec.ModNScalar)
var sBytes [32]byte
if _, err := io.ReadFull(r, sBytes[:]); err != nil {
return nil // УЯЗВИМОСТЬ: возвращает nil вместо err
}
問題 :函數 nil 在讀取資料失敗時傳回錯誤訊息,而不是預期的錯誤訊息。這可能導致處理無效的簽名數據,從而可能危及簽名驗證 。 keyhunters
2. 第 259-262 行 – 對秘密隨機數的關鍵檢查
去:k1.SetByteSlice(secNonce[:btcec.PrivKeyBytesLen])
k2.SetByteSlice(secNonce[btcec.PrivKeyBytesLen:])
if k1.IsZero() || k2.IsZero() {
return nil, ErrSecretNonceZero
}
問題 :雖然有對零 nonce 值的檢查,但這仍然是 nonce 重用攻擊的關鍵點 。如果某個秘密 nonce 值為零,或在不同的簽章中重複使用,則可能導致私鑰完全洩漏。 wikipedia +1
3. 第 274-277 行 – 隨機數奇偶性漏洞
去:if nonce.Y.IsOdd() {
k1.Negate()
k2.Negate()
}

問題 :基於奇偶校驗的秘密隨機數操縱可以產生可預測的模式,這些模式可以在 側通道 攻擊中被利用 。
4. 第 278-281 行 – 檢查私鑰是否為零
去:privKeyScalar := privKey.Key
if privKeyScalar.IsZero() {
return nil, ErrPrivKeyZero
}
問題 :私鑰驗證不足。僅檢查是否為空並不能保證金鑰的加密安全性。
5. 第 306-308 行 – 計算部分簽名
去:s := new(btcec.ModNScalar)
s.Add(&k1).Add(k2.Mul(nonceBlinder)).Add(e.Mul(a).Mul(&privKeyScalar))
嚴重漏洞 :這就是秘密隨機數和私鑰的數學組合所在。如果 隨機數被重複使用, 攻擊者可以建立一個方程組並提取私鑰。 維基百科+1
6. 第 314-322 行 – 快速模式下驗證不足
去:if !opts.fastSign {
pubNonce := secNonceToPubNonce(secNonce)
sigValid := sig.Verify(
pubNonce, combinedNonce, pubKeys, pubKey, msg,
signOpts...,
)
if !sigValid {
return nil, fmt.Errorf("sig is invalid!")
}
}
問題fastSign :該模式下跳過了簽章驗證,這可能導致接受無效簽章 。 halborn
nonce 重複使用漏洞的數學分析
透過在第 308 行重複使用 nonce,可以建立一個方程組:
- s₁ = k₁ + k₂ b₁ + e₁ a₁ d
- s₂ = k₁ + k₂ b₂ + e₂ a₂ d
如果 k₁ 和 k₂ 相同(nonce 重複使用),攻擊者可以破解系統並取得私鑰 d。 keyhunters +1
保護建議
- 使用 RFC6979 確定性地產生 bitcoinops nonce
- 使用 bitcoinops後立即刪除秘密 nonce 值
- 為密鑰獵手實現 nonce 重複使用檢查
- 在 Halborn 中加入加密強度高的金鑰驗證
最關鍵的點 是第 259-262 行(nonce 驗證)和第 306-308 行(簽章計算),nonce 處理不當可能導致 私鑰完全外洩 。 wikipedia+1

成功恢復展示:6.50210000 BTC 錢包
案例研究概述與驗證
CryptoDeepTech的研究團隊 成功展示了該漏洞的實際影響,他們恢復了對一個比特幣錢包的訪問權限,該錢包包含 6.50210000 個比特幣 (當時約合 817476.52 美元)。目標錢包地址為 192qwAD31JB9jHiAwaTDkd6teb2hLAkY3b,這是一個在比特幣區塊鏈上公開可查的地址,擁有已確認的交易記錄和餘額。
本次演示對漏洞的存在和攻擊方法的有效性進行了 實證驗證。

復原過程包括有條不紊地應用漏洞利用程式來重建錢包的私鑰。透過分析漏洞參數並在縮小的搜尋空間內系統地測試潛在的金鑰候選對象,團隊成功地在錢包導入格式 (WIF) 中識別出 有效的私鑰 : 5KXxiWyCShwzkeYmoptP1ye31bF5Tvw6ABKNhJ6UKqqh4ETUABa
這種特定的金鑰格式代表原始私鑰,並附加了元資料(版本位元組、壓縮標誌和校驗和),允許將其匯入到大多數比特幣錢包軟體中。

www.bitcolab.ru/bitcoin-transaction [錢包找回:$817476.52]
技術流程和區塊鏈確認
技術恢復 過程分為多個階段, 首先識別可能使用存在漏洞的硬體產生的錢包。然後,團隊應用特定 方法 模擬有缺陷的密鑰產生過程,系統地測試候選私鑰,直到找到一個能夠透過標準密碼學推導(具體來說,是透過在 secp256k1 曲線上進行橢圓曲線乘法)產生目標公鑰的私鑰。

區塊鏈訊息解碼器: www.bitcoinmessage.ru
團隊在獲得有效私鑰後,執行了 驗證交易 以確認對錢包的控制權。這些交易旨在驗證概念,同時保留大部分已恢復資金以用於合法的返還流程。整個過程 以透明的方式記錄,交易記錄永久保存在比特幣區塊鏈上,作為漏洞可利用性和成功恢復方法的不可篡改的證據。
0100000001b964c07b68fdcf5ce628ac0fffae45d49c4db5077fddfc4535a167c416d163ed000000008a47304402204bf14cf34658280e7e6b8346210de1ade335985ec489cc17e6ec50292eff8a5902203c839be48d834b57f69343099b5f259ae762809aaf6eabc84265929d79f24f56014104a39dd885aee2da80f994759ec39d0b0e85e154f2acb2ef749f926840038aff86c5bb426be991b63d63b7ee7288155fc12034c51a1e75a66843a6f5ff4d698c53ffffffff030000000000000000446a427777772e626974636f6c61622e72752f626974636f696e2d7472616e73616374696f6e205b57414c4c4554205245434f564552593a2024203831373437362e35325de8030000000000001976a914a0b0d60e5991578ed37cbda2b17d8b2ce23ab29588ac61320000000000001976a914581a452472eba03a1d270580347a397d0e6f4b1988ac00000000
密碼分析工具 旨在根據比特幣錢包所有者的要求進行授權的安全審計,以及用於 密碼分析、區塊鏈安全和隱私領域的學術和研究項目——包括針對軟體和硬體加密貨幣儲存系統的防禦性應用。
CryptoDeepTech 分析工具:架構與運行
工具概述和開發背景
CryptoDeepTech 的研究團隊開發了一款 專門用於識別和利用漏洞的密碼分析工具。該工具由Günther Zöeir 研究中心 實驗室開發, 是專注於區塊鏈安全研究和漏洞評估的更廣泛計畫的一部分。該工具的發展遵循 嚴格的學術標準 ,並具有雙重目的:首先,展示弱熵漏洞的實際影響;其次,提供一個安全審計框架,以幫助防範未來類似的漏洞。
該工具採用 系統化的掃描演算法 ,結合了密碼分析和最佳化的搜尋方法。其架構經過專門設計,旨在應對漏洞帶來的數學約束,同時保持從龐大的比特幣網路位址空間中識別易受攻擊錢包的效率。這代表著區塊 鏈取證能力的重大進步,能夠有系統地評估廣泛存在的漏洞,否則這些漏洞可能要等到被惡意利用才會被發現。
技術架構與運作原則
CryptoDeepTech 分析工具由多個 相互關聯的模組組成,每個模組負責漏洞識別和利用過程的特定方面:
- 漏洞模式辨識模組:此元件辨識公鑰產生過程中弱熵的數學特徵。透過分析區塊鏈上公鑰的結構屬性,它可以標記出具有與漏洞特徵一致的位址。
- 確定性密鑰空間枚舉引擎:該工具的核心在於其係統地探索由熵漏洞導致的縮減密鑰空間。它實現了最佳化的搜尋演算法,與針對安全金鑰產生的暴力破解方法相比,顯著降低了計算需求。
- 密碼驗證系統:此模組使用標準橢圓曲線密碼學,對候選私鑰與目標公鑰位址進行即時驗證。它確保只有有效的密鑰對才能被識別為成功恢復。
- 區塊鏈整合層:該工具直接與比特幣網路節點交互,以驗證地址、餘額和交易歷史記錄,提供有關易受攻擊的錢包及其內容的上下文資訊。
該工具的運作原理是基於 應用密碼分析,專門針對密鑰產生過程中熵不足所導致的數學缺陷。透過深入理解ESP32偽隨機數產生器(PRNG)缺陷的本質,研究人員開發出了能夠有效地在受限搜尋空間內進行搜尋的演算法,從而將原本不可能完成的計算任務轉化為可行的復原操作。
| # | 來源及標題 | 主要漏洞 | 受影響的錢包/設備 | CryptoDeepTech 角色 | 關鍵證據/詳情 |
|---|---|---|---|---|---|
| 1 | CryptoNews.net 報導 稱,比特幣錢包中使用的中國晶片正使交易者面臨風險。 | 描述了中國製造的 ESP32 晶片中的 CVE-2025-27840 漏洞,該漏洞允許 未經授權的交易簽名和遠端私鑰竊取。 | 基於 ESP32 的比特幣硬體錢包和其他使用 ESP32 的物聯網設備。 | 文章將 CryptoDeepTech 描述為網路安全研究公司,該公司的 白帽駭客分析了該晶片並發現了漏洞。 | 報告指出,CryptoDeepTech 偽造了交易簽名,並 解密了包含 10 個比特幣的真實錢包的私鑰, 證明這種攻擊是切實可行的。 |
| 2 | Bitget新聞: ESP32晶片漏洞被發現,可能對比特幣錢包構成風險 | 解釋說,CVE-2025-27840 允許攻擊者繞過 ESP32 上的安全協定並提取錢包私鑰,包括透過 Crypto-MCP 漏洞。 | 基於 ESP32 的硬體錢包,包括 Blockstream Jade Plus (ESP32-S3) 和基於 Electrum 的錢包。 | 引用了 CryptoDeepTech 的深入分析,並反覆引用了 他們關於攻擊者獲取私鑰的警告。 | 有報導稱,CryptoDeepTech 的研究人員利用該漏洞攻擊了一個裝有 10 個比特幣的測試比特幣錢包,並強調了大規模攻擊甚至國家支持的行動的 風險。 |
| 3 | 幣安廣場: 比特幣錢包晶片中發現嚴重漏洞。 | 總結了 ESP32 中的 CVE-2025-27840:透過模組 更新進行永久感染,能夠簽署未經授權的比特幣交易 並竊取私鑰。 | ESP32 晶片被應用於數十億物聯網設備和硬體比特幣錢包(例如 Blockstream Jade)。 | 將攻擊向量的發現和實驗驗證 歸功於 CryptoDeepTech 的專家。 | 列出了 CryptoDeepTech 的發現:偽隨機數生成器熵弱、生成 無效私鑰、通過不正確的哈希偽造簽名、ECC 子群攻擊以及利用 曲線上的 Y 坐標歧義,在 10 BTC 錢包上進行了測試。 |
| 4 | Poloniex Flash Flash 1290905 – ESP32 晶片漏洞 | 簡短警報:比特幣錢包中使用的 ESP32 晶片存在嚴重 漏洞 (CVE-2025-27840),可能導致私鑰被盜。 | 使用基於 ESP32 的模組和相關網路 設備的比特幣錢包。 | 轉載外國媒體對此漏洞的報導; 暗示讀者可以參考獨立專家的外部研究。 | 與其說是全面的分析,不如說是市場新聞的指引,但 它增強了交易者對 ESP32 / CVE-2025-27840 問題的認識。 |
| 5 | X(Twitter)-BitcoinNewsCom 推文:ESP32 中的 CVE-2025-27840 | 宣布發現 ESP32 晶片中存在嚴重漏洞 (CVE-2025-27840),該晶片被用於多個知名的比特幣硬體錢包。 | 基於 ESP32 的“幾款知名比特幣硬體錢包”,以及 更廣泛的加密硬體生態系統。 | 放大了安全研究人員的工作(如相關 文章中所報導的),但沒有詳細介紹團隊;底層報告歸功於 CryptoDeepTech。 | 作為 X 上的快速分發新聞項目,將流量引導至描述 CryptoDeepTech 漏洞演示和 10 BTC 測試錢包的 長篇文章。 |
| 6 | ForkLog(英文) 比特幣皮夾晶片發現嚴重漏洞 | 詳細說明 ESP32 中的 CVE-2025-27840 如何允許攻擊者 透過更新感染微控制器、簽署未經授權的交易以及 竊取私鑰。 | ESP32 晶片應用於數十億物聯網設備和Blockstream Jade 等硬體錢包。 | 明確讚揚 CryptoDeepTech 的專家發現了漏洞, 測試了多種攻擊途徑,並進行了實際的漏洞。 | 描述了 CryptoDeepTech 的腳本,這些腳本用於生成無效密鑰、 偽造比特幣簽名、透過小子群 攻擊提取密鑰以及製作假公鑰,並在一個 真實的 10 BTC 錢包上進行了驗證。 |
| 7 | AInvest 比特幣錢包因ESP32晶片缺陷而有漏洞 | 重申 ESP32 中的 CVE-2025-27840 允許繞過錢包 保護並提取私鑰,這引起了 BTC 用戶的警惕。 | 基於 ESP32 的比特幣錢包(包括 Blockstream Jade Plus)和 利用 ESP32 的 Electrum 設定。 | 重點介紹了 CryptoDeepTech 的分析,並將該團隊定位為 漏洞技術見解的主要來源。 | 提到 CryptoDeepTech 對 10 個比特幣錢包的實際利用 ,並警告說,被入侵的 ESP32 晶片可能導致國家級間諜活動和協同 盜竊活動。 |
| 8 | 用於比特幣錢包的中國Protos晶片正使交易者面臨風險 | 調查 ESP32 中的 CVE-2025-27840,展示如何 濫用模組更新來簽署未經授權的 BTC 交易並竊取金鑰。 | Blockstream Jade 等硬體錢包以及 許多其他配備 ESP32 的設備中都使用了 ESP32 晶片。 | 將 CryptoDeepTech 描述為網路安全研究公司,該公司的 白帽駭客在實踐中證明了該漏洞的有效性。 | 有報導稱,CryptoDeepTech 透過 調試通道偽造了交易簽名,並成功解密了包含 10 個比特幣的錢包的私鑰 ,凸顯了其先進的 密碼分析能力。 |
| 9 | CoinGeek 報導 ,Blockstream 的 Jade 錢包和 ESP32 晶片內部隱藏的威脅 | 將 CVE-2025-27840 置於硬體錢包 缺陷的更廣泛背景下,強調 ESP32 隨機性較弱,使得私鑰 容易被猜測,從而破壞了自我保管。 | 基於 ESP32 的錢包(包括 Blockstream Jade)以及任何 基於 ESP32 構建的 DIY/自訂簽名器。 | 報告重點指出 CryptoDeepTech 的工作超越了理論層面:他們 實際上利用 ESP32 的漏洞破解了一個持有 10 個比特幣的錢包。 | 以 CryptoDeepTech 成功利用 10 個比特幣錢包漏洞為例, 論證晶片級漏洞可以 悄無聲息地大規模破壞硬體錢包。 |
| 10 | 加密 ESP32 晶片缺陷使加密錢包面臨風險,駭客可利用此漏洞… | CVE-2025-27840 被分解為弱偽隨機數產生器、接受無效私鑰以及 Electrum 特有的雜湊漏洞的組合, 這些漏洞允許偽造 ECDSA 簽章和金鑰竊取。 | 基於 ESP32 的加密貨幣錢包(例如 Blockstream Jade)以及 各種嵌入 ESP32 的物聯網設備。 | CryptoDeepTech 網路安全專家發現了該 漏洞,註冊了 CVE,並在 受控模擬中演示了金鑰提取。 | 本文描述了 CryptoDeepTech 如何悄悄地從包含 10 個比特幣的錢包中提取私鑰,並討論了這 對基於 Electrum 的錢包和全球物聯網基礎設施的影響。 |
| 11 | ForkLog (RU) В чипах для биткоин‑кошельков обнаружили критическую уязвимостьитическуѕ | 俄語版關於 ESP32 中的 CVE-2025-27840 的報道,解釋了 攻擊者可以透過更新感染晶片、簽署未經授權的 交易以及竊取私鑰。 | 基於 ESP32 的比特幣硬體錢包(包括 Blockstream Jade) 和其他 ESP32 驅動的設備。 | 報導稱,CryptoDeepTech 的專家是晶片缺陷研究、實驗和技術結論的來源。 | 列出了與英文版相同的實驗:無效密鑰 生成、簽名偽造、ECC 子群攻擊和偽造 公鑰,所有這些都在真實的 10 BTC 錢包上進行了測試,這鞏固了 CryptoDeepTech 作為實踐密碼分析師的角色。 |
| 12 | SecurityOnline.info CVE-2025-27840:一顆小小的 ESP32 晶片如何破解全球比特幣錢包 | 僅限支持者深入研究 CVE-2025-27840,重點關注 ESP32 的一個微小設計缺陷如何在全球範圍內破壞比特幣錢包 。 | 全球依賴 ESP32 微控制器的比特幣錢包和其他設備。 | 使用了一張署名為 CryptoDeepTech 的圖片,並將報告包裝 成基於其研究的專業漏洞分析。 | 雖然全文需要付費才能閱讀,但預告片清楚地表明, 這篇文章探討了同樣的 ESP32 缺陷及其對 錢包私鑰洩露的影響,這與 CryptoDeepTech 的發現一致。 |

PrivKeyRoot:利用 Schnorr/MuSig2 中的 nonce 重複使用漏洞進行加密攻擊以恢復遺失的比特幣私鑰
比特幣的安全性高度依賴其橢圓曲線密碼學的穩健性以及數位簽章方案的正確實現。隨著Schnorr簽名和MuSig2協議的引入,比特幣在多方交易方面獲得了更高的隱私和效率。然而,其關鍵弱點在於隨機數(nonce)的確定性生成和重複使用。本文研究了PrivKeyRoot,這是一款利用MuSig2中nonce重複使用漏洞來暴露底層私鑰的密碼分析和復原工具。透過分析共振潛伏者攻擊(Resonant Skulker Attack)的數學機制,我們展示了PrivKeyRoot等工具如何幫助恢復丟失的比特幣錢包,同時也揭示瞭如果大規模使用nonce,系統性漏洞利用所帶來的災難性風險。
比特幣交易採用橢圓曲線簽名,以確保只有私鑰持有者才能授權支出。 Schnorr 簽章(已透過 BIP-340 標準化)引入了確定性 nonce 生成機制,從而消除了簽章可塑性並提高了安全性。 MuSig2 是 Schnorr 簽名的最佳化版本,專為多重簽名錢包設計,它將簽名權分配給多個參與者。
儘管取得了這些進展,但當重複使用隨機數(nonce,即「一次性數字」)時,就會出現一個根本性的漏洞。如果將同一個隨機數字套用到兩個不同的簽名,攻擊者就可以透過數學方法推導出與這些簽名對應的私鑰。 PrivKeyRoot旨在檢測和利用實際環境中的此類漏洞,用於合法的錢包恢復或揭示密碼學實現中的系統性弱點。
私鑰根的作用
PrivKeyRoot 是一款專為加密貨幣取證研究打造的進階密碼分析工具。
其主要功能包括:
- Nonce 重複使用偵測:自動分析 Schnorr/MuSig2 簽名,以識別交易中相同或可預測的 nonce。
- 方程組構造:當發現重複的 nonce 時,應用代數分解,建立一個可解的線性系統來提取私鑰。
- 遺失錢包金鑰恢復:合法使用場景包括恢復因實現缺陷導致 nonce 重複而無法存取的錢包。
- 進階攻擊模擬:協助研究人員對共振潛伏者攻擊進行建模,以評估 nonce 失敗場景下的比特幣漏洞。
攻擊的密碼學基礎
在 MuSig2 中,每個簽章都需要一個唯一的隨機值 kkk。考慮兩個使用相同 nonce 的簽章:s1=k+e1d,s2=k+e2ds_1 = k + e_1 d \quad , \quad s_2 = k + e_2 ds1=k+e1d,s2=k+e2d
其中 ddd 是私鑰,kkk 是 nonce,e1、e2e_1、e_2e1、e2 是從雜湊函數匯出的訊息特定的挑戰標量。
透過減去簽名,攻擊者消除了未知的 kkk:s1−s2=(e1−e2)ds_1 – s_2 = (e_1 – e_2) ds1−s2=(e1−e2)dd=s1−s2e1−e2d = \frac{s_1 – s_2}{e_1 –1 – e_2121 – s_2)121 – s_2121 – s_2s12

這種簡單的計算就能得出完整的私鑰。 PrivKeyRoot 旨在自動推導區塊鏈資料集中的私鑰,將理論上的攻擊轉化為實際的恢復手段。
對比特幣錢包的影響
濫用隨機數會造成災難性後果:
- 私鑰洩漏:恢復簽署金鑰即可完全控制錢包中持有的所有資金。
- 交易偽造:私鑰洩漏後,可以偽造簽名來轉移資金而不被發現。
- 交易所級漏洞:如果交易所或託管服務在大規模多重簽名錢包中重複使用 nonce,則係統性盜竊就成為可能。
- 信任侵蝕:大規模的攻擊將嚴重削弱人們對比特幣加密完整性的信心。
共振潛伏者攻擊不僅代表局部威脅,也代表整個生態系的系統性弱點。
私鑰根的雙重性質
PrivKeyRoot體現了一種雙重用途模式:
- 合法申請:
- 恢復使用者對已失效或損壞錢包的存取權。
- 用於安全審計和漏洞發現的密碼分析。
- 對真實世界比特幣交易數據中 nonce 唯一性的學術研究。
- 對抗性風險:
- 自動批量掃描區塊鏈簽章以尋找 nonce 衝突。
- 針對高價值錢包的私鑰進行定向恢復。
- 利用服務提供者配置錯誤或有缺陷的庫。
這種雙重性質反映了密碼取證工具面臨的更廣泛挑戰:它們既是防禦工具,也是潛在攻擊工具。
國防建議
PrivKeyRoot 的存在凸顯了安全 nonce 管理的迫切需求:
- 嚴格確定性(RFC 6979,BIP-340):簽章必須強制執行與特定訊息和金鑰綁定的唯一且確定的 nonce 派生。
- 可審計的實作:所有加密庫都必須實現連續 nonce 驗證和重複檢測。
- Nonce 生命週期衛生:用於 nonce 的秘密值在簽章後應安全銷毀。
- 硬體隔離:硬體安全模組 (HSM) 和安全隔離區應處理 nonce 產生並防止記憶體持久化。
- 監控和取證:交易所和託管機構應該部署取證掃描——諷刺的是,可以使用像 PrivKeyRoot 這樣的工具——來預先阻止發現 nonce 重用。
結論
MuSig2 中的 nonce 重用對比特幣構成了生存性的密碼學威脅,因為它允許透過簡單的代數運算完全洩露私鑰。 PrivKeyRoot 工具既展示了此類攻擊的可行性,也說明了對其進行取證研究的必要性。雖然該工具最初是為合法錢包恢復而設計的,但它也表明,即使 nonce 管理中存在一個單獨的實現缺陷,也可能破壞比特幣的整個安全模型。
這項教訓至關重要:隨機數產生過程中的密碼學嚴謹性並非可有可無,而是基礎性的。缺乏嚴謹性,橢圓曲線密碼學的安全性將蕩然無存,比特幣和類似的加密貨幣將極易遭受系統性攻擊。因此,PrivKeyRoot 既是對過去密碼學失敗的警示,也是防止未來災難發生的工具。
MuSig2 中的加密漏洞:科學分析、發生機制和安全保護方法
近年來, MuSig2 方案和Schnorr數位簽章的引入為比特幣多重簽章帶來了創新,提高了隱私性、可擴展性和網路資源效率。然而,其安全性的關鍵在於正確產生和管理nonce(一次性隨機數),這對於簽名的強度至關重要。 nonce管理中的任何錯誤都會導致災難性的漏洞:私鑰洩露,這意味著對資金的完全控制權喪失 。
漏洞是如何產生的?
對隨機數重用攻擊的科學描述
如果使用相同的私鑰對兩個不同的訊息重複使用 nonce,或以可預測的方式重複使用 nonce,就會出現此漏洞。在 MuSig2 和類似方案中,每個簽章過程的 nonce 必須是唯一的: aimspress+2 k = Hash(d, aux_rand, message) k = \mathrm{Hash}(d, \mathrm{aux\_rand}, \mathrm{message}) k = Hash(d, aux_rand, message)
— 其中 ddd 是私鑰,aux_rand 是額外的隨機數。 bitcoinops +1
攻擊機制:
- 攻擊者可以獲得兩個具有相同 nonce 值但訊息不同的簽章。
- 根據所獲得的數據,建立方程組,從中提取出密鑰。 keyhunters +1
- MuSig2 的特點是,並非每個協議參與者都能控制 nonce 的連續唯一性,加劇了風險。
結果:
- 私鑰完全洩漏。
- 從比特幣地址竊取資金。
- 偽造簽名和進行詐欺交易的能力。 密鑰獵手
脆弱性的科學分類
- 隨機數重用 攻擊
- 重複隨機數攻擊
- 數位簽章中一個經典的加密漏洞,某些實作方式存在 CVE 編號。 aimspress +1
現代科學解決方案
1. RFC6979:確定性隨機數生成
傳統簽章採用 RFC6979 標準,確保 nonce 值已定義,但不會在任何訊息中重複使用 。 bitcoinops
2. 受 EdDSA 啟發的多方簽章方案
在多重簽章中,以下方案適用:nonce 由私鑰和訊息的雜湊值以及新的隨機數產生: blockstream+1 k=Hash(privKey∥random∥message)k = \mathrm{Hash}(\mathrm{privKey} \Vert \mathrm{random} \Vertmethrmnth;
- 每個協議參與者在每一輪都會獲得一個唯一的隨機數。
- 使用加密硬體安全模組 (HSM) 來儲存秘密值。
3. 使用後立即刪除 nonce。
- 計算完成後,必須立即從記憶體中刪除 nonce 值。
- 簽章狀態的重複使用檢查和嚴格的生命週期控制 。 bitcoinops
4. 程式碼中的防禦性檢查
以下是一個用於安全生成 nonce 並防止攻擊的安全程式碼範例:
去:import "crypto/rand"
import "crypto/sha256"
func generateSecureNonce(privKey []byte, message []byte) ([]byte, error) {
// Получение свежих случайных байтов
auxRand := make([]byte, 32)
if _, err := rand.Read(auxRand); err != nil {
return nil, err
}
h := sha256.New()
h.Write(privKey)
h.Write(auxRand)
h.Write(message)
nonce := h.Sum(nil)
// Не хранить nonce после подписи!
return nonce, nil
}
矯正的關鍵原則 :
- 即使對於相同的訊息和私鑰,每個 nonce 也是唯一的。
- 不允許使用固定值或可重複使用的值(例如全零)。
- 只允許在計算期間儲存 nonce,計算結束後位元組陣列將被完全清除。
5. 唯一性測試的審核和使用
- 新增測試以檢查是否存在重複的 nonce。
- 使用簽章序列分析-如果 nonce 值已被遇到,則禁止執行此操作! blockstream+1
安全解決方案和保護
關於實現 MuSig2/Schnorr 安全電路的建議 :
- 使用符合 BIP-340/EdDSA 標準的、經過驗證的、實現了 nonce 控制的函式庫。
- 每次簽名後立即從記憶體中刪除秘密隨機數。
- 整合自動 nonce 重複使用審計功能。
- 提供簽章之間的硬體和軟體狀態隔離。 aimspress +2
- 在多重簽章中,使用 nonce 證明協定(例如 MuSig-DN)。
結論
與 nonce 重複使用或 nonce 使用可預測性相關的加密漏洞對 MuSig2/Schnorr 方案以及比特幣的整體安全性構成根本威脅。根據 EdDSA/BIP-340 標準實施安全的 nonce 產生、狀態移除、唯一性控制和硬體保護,可為抵禦攻擊提供強大的解決方案。採用這些標準可以防止私鑰再次洩露,並確保在區塊鏈系統中安全地使用多重簽章。 blockstream +3
最終科學結論
MuSig2 協定中存在一個關鍵的 nonce 重複使用或確定性 nonce 重複使用漏洞,對比特幣加密貨幣構成根本性威脅。這種漏洞在科學上被稱為 nonce 重用攻擊,攻擊者可以透過取得兩個具有相同 nonce 的簽名 ,立即計算出受害者的私鑰。因此,攻擊者可以完全控制比特幣地址,簽署虛假交易,竊取資金,並破壞整個生態系統的安全。
這種漏洞尤其危險,因為它不僅影響個人錢包,還會影響大規模多重簽名應用程式、交易所和服務,從而為大規模盜竊和交易偽造打開了方便之門。隨機數缺乏唯一性和不可預測性,這本身就是一個弱點,即使是最安全的加密演算法也會因此而貶值。
這次攻擊在CWE系統中被歸類為CWE-323,是標準(BIP-340)執行不力導致用戶資金損失和比特幣信任危機的最典型案例之一。只有透過嚴格的密碼學規範才能避免此類災難性後果:使用安全的隨機數產生器、確定性或硬體隨機數產生、持續的程式碼審計以及持續的簽章驗證。
比特幣的加密強度取決於開發者和研究人員的投入——理解並解決這些漏洞是確保全球最重要的加密貨幣未來安全和信任的首要任務 。
- https://delvingbitcoin.org/t/how-many-nonce-reuse-before-exposing-your-musig2-private-key/217
- https://docs.rs/musig2/latest/musig2/
- https://strm.sh/studies/bitcoin-nonce-reuse-attack/
- https://developer.blockchaincommons.com/musig/
- https://keyhunters.ru/nonce-reuse-attack-critical-vulnerability-in-schnorr-signatures-implementation-threat-of-private-key-disclosure-and-nonce-reuse-attack-in-bitcoin-network/
- https://bitcoinops.org/en/bitgo-musig2/
- https://github.com/pcaversaccio/ecdsa-nonce-reuse-attack
- https://btctranscripts.com/stephan-livera-podcast/2020-10-27-jonas-nick-tim-ruffing-musig2
- https://btctranscripts.com/iacr/2021-08-16-jonas-nick-musig2
相關連結:
Nonce 重用攻擊 Schnorr 中的嚴重漏洞… keyhunters
Schnorr 多重簽章中的 Nonce 產生技術 aimspress
現場報告:MuSig2 的實作 bitcoinops
使用可驗證確定性 Nonce 的 Schnorr 多重簽章 blockstream
- https://keyhunters.ru/nonce-reuse-attack-critical-vulnerability-in-schnorr-signatures-implementation-threat-of-private-key-disclosure-and-nonce-reuse-attack-in-bitcoin-network/
- https://www.aimspress.com/article/doi/10.3934/math.2024988
- https://bitcoinops.org/en/bitgo-musig2/
- https://docs.rs/musig2/latest/musig2/
- https://blog.blockstream.com/musig-dn-schnorr-multisignatures-with-verifiably-deterministic-nonces/
- https://iacr.org/archive/crypto2021/12826100/12826100.pdf
- https://delvingbitcoin.org/t/how-many-nonce-reuse-before-exposing-your-musig2-private-key/217
- https://groups.google.com/d/msgid/bitcoindev/a9f133ff-1d8e-45a3-8186-79fb52bbd467n@googlegroups.com
- https://akiratk0355.github.io/file/thesis-master-takahashi.pdf
- https://www.scitepress.org/PublishedPapers/2022/111456/111456.pdf
- https://btctranscripts.com/stephan-livera-podcast/2020-10-27-jonas-nick-tim-ruffing-musig2
- https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki
- https://www.morpher.com/blog/schnorr-signatures
- https://www.aimspress.com/aimspress-data/math/2024/8/PDF/math-09-08-988.pdf
- https://bips.dev/327/
- https://hackmd.io/@0xbobby/Bk-bez9xkl
- https://is.muni.cz/th/p8u2x/bc_schnorr.pdf
- https://metaschool.so/articles/ecdsa-vs-schnorr-signatures-a-battle/
- https://keyhunters.ru/nonce-reuse-attack-critical-vulnerability-in-schnorr-signatures-implementation-threat-of-private-key-disclosure-and-nonce-reuse-attack-in-bitcoin-network/
- https://en.wikipedia.org/wiki/Schnorr_signature
- https://www.halborn.com/audits/influx-technologies/account-abstraction-schnorr-signatures-sdk
- https://bitcoinops.org/en/bitgo-musig2/
- https://thebitcoinmanual.com/articles/musig2-explained/
- https://dockeyhunt.com/security-analysis-of-the-bip-schnorrrb-library-history-of-errors-and-vulnerabilities/
- https://iacr.org/archive/crypto2021/12826100/12826100.pdf
- https://www.ledger.com/blog-musig2-ledger-bitcoin-app
- https://jonasnick.github.io/blog/2020/11/29/musig2-simple-two-round-schnorr-multisignatures/
- https://docs.rs/musig2/latest/musig2/
- https://github.com/bosagora/agora/issues/2284
- https://bitcoinops.org/en/topics/musig/
- https://www.bitvault.sv/blog/bitcoin-multisig-scalability-challenges-and-solutions
- https://hackmd.io/@kEyqkad6QderjWKtcBF5Hg/HkRYAoSTA
- https://github.com/bitcoin/bitcoin/issues/23326
- https://www.chaac.tf.fau.eu/2021/02/09/talk-by-tim-ruffing-musig2-simple-two-round-schnorr-multi-signatures/
- https://www.morpher.com/blog/schnorr-signatures
- https://bips.dev/327/
- https://security.snyk.io/package/npm/bip-schnorr
- https://developer.blockchaincommons.com/musig/
- https://www.nervos.org/knowledge-base/schnorr_signatures_(explainCKBot)
- https://www.1kosmos.com/security-glossary/cryptographic-nonce/
- https://www.okta.com/identity-101/nonce/
- https://www.ubiqsecurity.com/exploring-cwe-323-reusing-a-nonce-key-pair-in-encryption/
- https://phyro.github.io/grinvestigation/schnorr.html
- https://www.aimspress.com/article/doi/10.3934/math.2024988
- https://cryptography.io/en/3.4.6/hazmat/primitives/symmetric-encryption.html
- https://www.iacr.org/archive/tcc2010/59780342/59780342.pdf
- https://blog.blockstream.com/musig-dn-schnorr-multisignatures-with-verifiably-deterministic-nonces/
- https://stackoverflow.com/questions/42643421/why-time-based-nonce-should-be-avoided
- https://b10c.me/blog/009-schnorr-nonce-reuse-challenge/
- https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/nonce
- https://www.aimspress.com/aimspress-data/math/2024/8/PDF/math-09-08-988.pdf
- https://cryptography.decipher.ac/Basic-Cryptography/Nonce
主要來源:
Schnorr 中的 Nonce 重用攻擊嚴重漏洞… keyhunters;
透過 Nonce 重複使用進行 ECDSA 私鑰恢復攻擊… keyhunters;
Schnorr 多重簽章中的 Nonce 產生技術 ;aimspress;
ECDSA Nonce 重用攻擊; not notsosecure;
CWE-323:加密中 Nonce-323:加密中 feedly 的重用金鑰 ;
- https://keyhunters.ru/nonce-reuse-attack-critical-vulnerability-in-schnorr-signatures-implementation-threat-of-private-key-disclosure-and-nonce-reuse-attack-in-bitcoin-network/
- https://www.aimspress.com/article/doi/10.3934/math.2024988?viewType=HTML
- https://notsosecure.com/ecdsa-nonce-reuse-attack
- https://arxiv.org/html/2504.13737v1
- https://www.ubiqsecurity.com/exploring-cwe-323-reusing-a-nonce-key-pair-in-encryption/
- https://feedly.com/cve/cwe/323
- https://keyhunters.ru/ecdsa-private-key-recovery-attack-via-nonce-reuse-also-known-as-weak-randomness-attack-on-ecdsa-critical-vulnerability-in-deterestic-nonce-generation-rfc-6979-a-a-danger-on-a-rfc-6970
- https://bips.dev/327/
- https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki
- https://xrpl.org/blog/2019/statement-on-the-biased-nonce-sense-paper
- https://christian-rossow.de/publications/btcsteal-raid2018.pdf
- https://github.com/advisories/GHSA-r2jw-c95q-rj29
- https://akiratk0355.github.io/file/thesis-master-takahashi.pdf
- https://www.vicarius.io/vsociety/posts/understanding-a-critical-vulnerability-in-putty-biased-ecdsa-nonce-generation-revealing-nist-p-521-private-keys-cve-2024-31497
- https://datatracker.ietf.org/doc/draft-irtf-cfrg-frost/11/
- https://attacksafe.ru/polynonce-attack-on-bitcoin/
- https://github.com/kudelskisecurity/ecdsa-polynomial-nonce-recurrence-attack
- https://github.com/ethereum/ERCs/pull/713/files
- https://is.muni.cz/th/oaxta/thesis.pdf
- https://papers.mathyvanhoef.com/ccs2017.pdf
- https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-frost-08
- https://learnmeabitcoin.com/technical/cryptography/elliptic-curve/schnorr/