作者:KEYHUNTER
影子金鑰攻擊 ( “隨機數重複使用攻擊” 或 “透過隨機數重複使用的 ECDSA 私鑰恢復攻擊” )
所描述的嚴重漏洞與ECDSA演算法中nonce金鑰的洩漏或重複使用有關,是對比特幣加密貨幣生態系統最具破壞性的威脅之一。如果nonce儲存或產生錯誤,或在交易簽章時被重複使用,攻擊者可以透過簡單的數學運算恢復位址擁有者的私鑰。這種攻擊在科學上被稱為…
這種漏洞可能導致錢包立即完全被攻破,資金被大規模盜走,並威脅比特幣去中心化安全性的基本原則。官方已為這類漏洞分配了CVE編號,證實了其作為全球產業標準的重要性。
ECDSA Nonce 漏洞:致命的 Nonce 重複使用攻擊對比特幣生態系統的安全和私鑰構成威脅
研究論文:nonce 外洩漏洞對比特幣加密貨幣攻擊的影響
比特幣等現代加密貨幣依賴數位簽章演算法,特別是 ECDSA 演算法,其中每筆交易的唯一隨機數(nonce,例如kkk)至關重要。任何涉及 nonce 洩漏或重複使用的漏洞都會危及整個比特幣基礎設施:攻擊者可以完全恢復用戶的私鑰,並在整個網路中竊取資金。
脆弱性是如何產生的以及它如何影響
發生機制
在存在漏洞的實作中,當 nonce 沒有被安全地從記憶體中清除或重複使用(重複使用、可預測、非唯一)時,就會發生一種稱為秘密洩漏或「Nonce 重複使用」的情況。經典的 ECDSA 簽名公式為: keyhunters s=k−1(H(m)+r⋅d)mod ns = k^{-1}(H(m) + r \cdot d) \mod ns=k−1(H(m)+r⋅d)modn
其中 kkk 是秘密 nonce。如果兩個簽章包含相同的 kkk,則可以透過求解一個簡單的方程組並還原私鑰 ddd 來破解系統。關於此類漏洞的詳細分析,請參閱有關格攻擊和隱數問題的著作。 habr +1
比特幣的現實世界後果
- 攻擊者若能取得多個相同或部分洩漏 nonce 值的簽章(透過側頻道或記憶體轉儲),即可推斷出地址所有者的私鑰,並竊取該私鑰控制的所有資金。 keyhunters +1
- 大規模駭客攻擊智慧合約、多重簽名和自動化錢包是可能的。
- 由於節點和網路遭到攻擊,人們對比特幣協定的信任度已經下降。
歷史上,類似的攻擊曾造成數百萬美元的損失;早期比特幣客戶端中一個較弱的隨機數產生器(PRNG)漏洞就曾被利用來竊取資金。 keyhunters +1
攻擊的科學名稱
- 此攻擊的科學名稱是 Nonce 重複使用攻擊 或 ECDSA Nonce 重複使用攻擊 ,以及 透過 Nonce 重複使用進行的 ECDSA 私鑰恢復攻擊 。
- 在科學文獻中,也使用了 弱隨機性攻擊 、 隱數問題(HNP)攻擊 、 熵失效攻擊等名詞 。 muni +2
CVE漏洞標識符
ECDSA nonce 實作漏洞有官方識別碼:
- CVE-2018-0734 – ECDSA OpenSSL keyhunters 中的 nonce 重複使用
- CVE-2020-28498 — Keyhunters ECDSA 簽章產生漏洞
- CVE-2024-31497 — PuTTY 中的 ECDSA nonce 存在偏差(透過可預測的 nonce 洩露私鑰,60 次簽署後可攻擊) cvedetails+1
- CVE-2024-23342 — Minerva 定時攻擊(python-ecdsa 中的側通道 nonce 洩漏) nvd.nist+1
有些問題與 ECDSA/BTC 協定無關,而是與實作和實作錯誤有關(例如,隨機數產生不當或產生不充分,金鑰格式化/清除不當)。
攻擊的例子和圖示
- 如果 kkk 值重複或可預測,攻擊者使用兩個具有相同 nonce 的簽章將獲得一個線性方程組,用於確定使用者的私鑰。
- 如果 nonce 只是部分洩漏(例如透過側頻道),則可能發生隱藏數位問題攻擊。
預防建議
- 使用嚴格確定性的 nonce 產生方法,遵循 RFC 6979(HMAC-DRBG,取決於私鑰和訊息) 。 keyhunters
- 實現 nonce 變數的安全存儲,並在使用後立即重置。
- 定期進行程式碼審查和審計,以檢查是否存在程式碼重用和側頻道 nonce 洩漏。
- 對加密庫套用更新,以修復已發現的 CVE。
- 對私鑰使用範圍檢查(嚴格大於 0 且小於群組順序)。
結論
隨機數洩漏或重複使用是比特幣生態系統中最危險、最關鍵的漏洞之一。它會導致私鑰完全洩露,並最終導致人們對加密貨幣失去信任。快速回應、程式碼審計、RFC 6979 實施、合理的記憶體管理以及 CVE 監控是應對此類攻擊的關鍵方法。 data.safetycli +3
哪些比特幣加密庫最容易受到攻擊?
事實證明,比特幣專案中最脆弱的加密庫是與金鑰產生和簽章相關的那些函式庫,尤其是在隨機數產生或私有資料處理過程中出現錯誤的情況下。
最容易受到攻擊的比特幣庫
- BitcoinJS 函式庫中發現了一系列名為 Randstorm 的嚴重漏洞。這些漏洞涉及 2011 年至 2015 年間私鑰產生過程中隨機性
不足的問題。這影響了眾多受歡迎的網路錢包和項目,包括 Blockchain.info、BitAddress、BitCore (BitPay)、BrainWallet、CoinKite、Bitgo、GreenAddress 等。 - OpenSSL
函式庫常用於底層 ECDSA/BIP32 操作,並遭受多次攻擊,包括 Heartbleed (CVE-2014-0160)、Lucky Thirteen (CVE-2013-0169)、記憶體處理漏洞和側通道漏洞。 arxiv +1 - Go crypto/x509
庫在某些情況下被用於建立比特幣基礎設施,並且最近暴露於 CVE-2025-22874 漏洞,該漏洞允許繞過 wiz 憑證策略驗證。 - Ed25519 實現
許多 Ed25519 實作(用於多種山寨幣和新型比特幣錢包)在簽章過程中容易出現私鑰處理不當以及 EdDSA 演算法本身的錯誤,這為私鑰被盜提供了可乘之機 。 portswigger - 其他
依賴 JavaScript 實作的 BIP32/BIP39/BIP44 的比特幣 JS 函式庫也由於存在漏洞的 npm 包,導致 pbkdf2 和其他函數出現漏洞 。 miggo
漏洞成因
- 偽隨機數產生器操作錯誤、隨機數洩漏、使用了過時或未使用的隨機數產生函數(例如瀏覽器中的 Math.random) 。 sk-cert+1
- 補丁發布後未能及時更新庫檔案。
- 協議實現和記憶體處理中的錯誤(秘密資料清零不充分) 。 arxiv
- 在未經適當審查的情況下,將存在漏洞的程式碼嵌入開源程式庫和流行的錢包中。
2011年至2015年間,基於BitcoinJS建構的錢包特別容易受到攻擊,使用較舊版OpenSSL實現和存在熵生成缺陷的BIP32/BIP39/BIP44標準的服務也同樣如此 。 卡巴斯基+2
建議僅使用經過測試和更新的關鍵加密庫版本,並定期進行審計和漏洞測試 。 portswigger +1
mucig2 中的加密漏洞
主要結論是 ,該方法 在刪除對本地 nonce 的引用時會洩露一個秘密Sign :該欄位仍然保留在記憶體中,並且可以恢復,因為它在指標被清除之前沒有被清除。SecNonce
脆弱之處
在文件中 musig2/session.go,在方法中 Sign:
去:partialSig, err := Sign(
s.localNonces.SecNonce, s.ctx.signingKey, *s.combinedNonce,
s.ctx.opts.keySet, msg, signOpts...,
)
// Теперь обнуляем nonce:
s.localNonces = nil
脆弱線:
去s.localNonces = nil
它位於呼叫之後 Sign,並且無法確保在重置引用之前安全地刪除 內部 zeroing欄位 。因此,秘密 nonce 會一直保留在 RAM 中,直到垃圾回收器運行,這使得攻擊者可以從未初始化的記憶體中提取它。SecNonces.localNonces

糾正建議
- 刪除連結前請清除密鑰內容:go
// После использования nonce for i := range s.localNonces.SecNonce { s.localNonces.SecNonce[i] = 0 } s.localNonces = nil - 考慮使用安全的金鑰管理庫,其中記憶體清除和釋放操作會自動完成。
- 對所有存放機密資料的建築物進行重置,以防止類似外洩事件的發生。

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

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

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

區塊鏈訊息解碼器: www.bitcoinmessage.ru
團隊在獲得有效私鑰後,執行了 驗證交易 以確認對錢包的控制權。這些交易旨在驗證概念,同時保留大部分已恢復資金以用於合法的返還流程。整個過程 以透明的方式記錄,交易記錄永久保存在比特幣區塊鏈上,作為漏洞可利用性和成功恢復方法的不可篡改的證據。
0100000001b964c07b68fdcf5ce628ac0fffae45d49c4db5077fddfc4535a167c416d163ed000000008a473044022011c673a3d8c4759a1a93e4f2a9a0f6adbd941a0621483f41497f4edc21ed695f022065982eaf5ea0f20327776190add7be7f010d88a559218b1635eebf202403ac54014104d2045ead7b6dd680451a701e23f5c8f572c89d6892b8e8fea347d091e0f8f69f83cc944740e6c42ca38068e41e638a0d331071d47bca736c1df0832b025f71abffffffff030000000000000000456a437777772e626974636f6c61622e72752f626974636f696e2d7472616e73616374696f6e205b57414c4c4554205245434f564552593a2024203932363331362e3635355de8030000000000001976a914a0b0d60e5991578ed37cbda2b17d8b2ce23ab29588ac61320000000000001976a9147c69665b572c68108c540b817e3cc958b3620e5e88ac00000000
密碼分析工具 旨在根據比特幣錢包所有者的要求進行授權的安全審計,以及用於 密碼分析、區塊鏈安全和隱私領域的學術和研究項目——包括針對軟體和硬體加密貨幣儲存系統的防禦性應用。
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 的發現一致。 |

BithoRecover:利用 ECDSA Nonnce 重複使用進行比特幣私鑰恢復
1. 引言
橢圓曲線數位簽章演算法 (ECDSA) 是比特幣交易認證的基礎。 ECDSA 安全性的核心在於為每個簽章使用一個唯一的、加密隨機的nonce kkk。然而,如果實作有缺陷或側頻道洩露,導致 kkk 重複使用或部分洩露,則會嚴重破壞私鑰的保密性。 BithoRecover 利用這種nonce 重複使用攻擊(也稱為「影子金鑰攻擊」)來提取使用者的私鑰 ddd,並恢復對遺失或被盜錢包的存取權。
2. ECDSA Nonnce漏洞背景
對於訊息雜湊 H(m)H(m)H(m),ECDSA 產生簽名 (r,s)(r,s)(r,s),其中 s=k−1(H(m)+rd) mod ns = k^{-1}\bigl(H(m) + r\,d\bigr)\bmod ns=k−1(b(mod)
這裡,nnn 是曲線階數,ddd 是私鑰。如果兩個簽章 (r,s1) 和 (r,s2) 在訊息 m1 和 m2 上共用相同的 nonce kkk,則可得:{s1=k−1(H(m1)+rd)s2=k−1(H(m2)+rd)\begin,{cases} s_1 = k^{-1}(H(m2)+rd)\begin,{cases} s_1 = k^{-1}(H(m2)+rd)\begin,{cases} + s_ k^{-1}(H(m2)+rd)\begin,{cases} + 1 = k^{-1}(H(m2) k^{-1}(H(m_2) + r\,d) \end{cases}{s1=k−1(H(m1)+rd)s2=k−1(H(m2)+rd)
相差nk=s1−s2H(m1)−H(m2)(modn)⟹d=rs1k−H(m1)(modn)

該系統只需要兩個具有相同 kkk 值的簽章即可恢復私鑰。
3. BithoRecover 架構
BithoRecover 由三個主要模組組成:
- 簽章收集功能
連接到完整節點或區塊瀏覽器 API,以收集原始交易簽章。它會篩選出相同的 rrr 值(表示 nonce 被重複使用),並將候選對標記出來進行分析。 - Nonce求解器
實現了最佳化的模運算例程,用於從候選簽章對計算kkk和ddd。當僅kkk的高位或低位透過側通道洩漏時,支援部分nonce恢復,並應用了隱藏數問題(HNP)格方法。 - 錢包重建功能
透過推導出相應的公鑰並與鏈上地址進行比較來驗證計算出的私鑰。配對確認後,將錢包檔案匯出為標準格式(WIF、BIP-39種子快照),以便於輕鬆找回資金。
4. 數學和演算法創新
- 批量隨機數相關性
採用布隆過濾器和哈希表,大規模檢測數百萬個簽章中匹配的 rrr 值,從而減少記憶體佔用。 - 基於格的部分隨機數恢復
將 Bleichenbacher 的格技術應用於只知道 kkk 的部分比特的情況,構建了一個短向量格,該格產生的 ddd 的複雜度在隨機數比特洩漏方面呈亞指數級增長。 - 恆定時間運算
確保核心運算避免時間側通道,即使在攻擊者控制的硬體環境下也能支援安全操作。
5. 對比特幣錢包安全性的影響
BithoRecover揭示了 nonce 重複使用在現實世界中造成的嚴重後果:
- 完全密鑰洩露:
任意兩筆交易中重複出現的單一 nonce 足以恢復 ddd,使攻擊者能夠編寫任意交易並盜走錢包資金。 - 批量恢復丟失的錢包
反之,出於好意的運營商可以使用 BithoRecover 來恢復對錢包的訪問權限,這些錢包的客戶端由於 RNG 缺陷或庫更新不佳而無意中重複使用了 nonce。 - 確定性錢包面臨的威脅
即使是確定性的 nonce 方案(例如 RFC 6979),如果庫實現錯誤或種子設定不正確,也會變得脆弱,這凸顯了嚴格合規性測試的必要性。
6. 緩解策略
為了防止 ECDSA nonce 重複使用:
- RFC 6979 確定性簽章
強制執行基於 HMAC-DRBG 的確定性 nonce 生成,將 kkk 唯一地綁定到每個訊息和私密金鑰。 - 立即清除:
在簽章後立即從記憶體中清除 nonce 緩衝區,以防止側通道擷取。 - 程式碼審計和模糊測試
:對庫進行持續審計,並進行模糊測試,以檢測 RNG 熵故障和指針歸零漏洞。 - CVE 監控和修補
保持最新的加密依賴項,並快速套用與 nonce 相關的 CVE 補丁。
7. 結論
BithoRecover揭示了 ECDSA nonce 重複使用漏洞的潛在破壞性,同時為合法錢包復原提供了一個強大的工具。它結合了簽章擷取、格增強 nonce 求解和安全金鑰驗證,既展現了比特幣軟體中穩健 nonce 管理的緊迫性,也證明了在不利條件下恢復私鑰的可行性。持續的警覺、確定性的簽章合規性和記憶體安全的實現仍然是保障比特幣基礎安全的關鍵。
研究論文:ECDSA/MuSig2 中的加密 nonce 洩漏漏洞及安全緩解方法
介紹
隨著加密貨幣解決方案和多重簽章技術的日益普及,確保私有資料(例如數位簽章中使用的秘密隨機數(ECDSA、MuSig2))的可靠保護至關重要。本文以MuSig2實作為例,詳細分析了隨機數外洩的機制及其對系統的影響,並提出了一種基於安全程式碼模式的現代緩解方法。
脆弱性的本質和出現
在諸如 ECDSA 之類的數位簽章協定中,每個訊息的加密隨機數 (nonce,kkk) 必須是唯一的且保密的,否則攻擊者可以恢復私鑰。一個實際的漏洞是,當用於簽名的秘密隨機數在使用後沒有從 RAM 中刪除,而只是丟失了其引用(例如,通過 `require(‘nonce ‘)`)時,就會出現這種情況。這會導致包含秘密值的變數在記憶體被垃圾回收之前一直可訪問pointer = nil,從而增加了攻擊視窗——攻擊者可以透過側信道(例如,記憶體轉儲、應用程式崩潰、側信道分析)從記憶體中提取隨機數。
在典型的 Go 語言實作的 MuSig2 多重簽章演算法中,以下程式碼中也存在類似的缺陷:
去s.localNonces = nil
這只會銷毀引用,而不會銷毀記憶體中的值本身。
後果和攻擊
Nonce 洩漏攻擊通常會導致私鑰完全洩漏。最常用的技術是: semanticscholar+1
- 格攻擊 (解決隱藏數問題)
- Bleichenbacher 攻擊 利用小 nonce 進行密鑰恢復
- 對應用程式記憶體進行側通道分析 (例如,透過漏洞或程式錯誤提取轉儲檔案)
主要後果是攻擊者有可能大規模 收集日誌或殘留應用程式內存,以恢復關鍵的私人資料。
安全矯正的實用方法
1. 安全地從記憶中抹去秘密
關鍵在於使用後立即嚴格重置包含密鑰的變量,而不是僅僅重置指標本身。以下是 Go 語言中一個安全實踐的範例:
去// Допустим, SecNonce — это массив байт длиной не менее 32
func zeroize(b []byte) {
for i := range b {
b[i] = 0
}
}
// После вычисления подписи:
zeroize(s.localNonces.SecNonce)
s.localNonces = nil
這種方法可以確保立即銷毀敏感秘密。 hub.corgea +1
2. 使用專門的結構或函式庫來儲存金鑰
建議將金鑰儲存在能夠保證刪除時立即釋放記憶體並將其清除的結構中(例如,具有安全記憶體管理功能的第三方庫)。 github +1
3. 實作 nonce 重複使用檢查
務必實施重複使用檢查,以確保 nonce 永遠不會被使用兩次:
去if s.localNonces == nil {
return nil, ErrNonceAlreadyUsed // Предотвратить повторную подпись
}
4. 防止側頻道攻擊
所有涉及機密資訊的關鍵操作都必須在恆定時間內完成,以最大程度地降低側頻道外洩的可能性。
程式碼模式的安全版本
去// Безопасное обнуление секрета nonce после использования
if s.localNonces != nil {
zeroize(s.localNonces.SecNonce)
s.localNonces = nil
}
為了增強密鑰結構,可以添加一個強制重置所有儲存敏感資訊的欄位的方法。
結論
加密金鑰管理是多重簽章和數位貨幣應用中絕對安全的基礎。對所有臨時資料(例如隨機數)實施穩健的零擦除模式是強制性標準。只有安全的記憶體管理才能抵禦針對私鑰的現代攻擊,並確保整個數位資產基礎設施的持續保護。 hub.corgea +2
定論
所描述的嚴重漏洞與ECDSA演算法中nonce金鑰的洩漏或重複使用有關,是對比特幣加密貨幣生態系統最具破壞性的威脅之一。如果nonce儲存或產生不當,或在交易簽名時被重複使用,攻擊者可以透過簡單的數學運算恢復地址所有者的私鑰。這種攻擊——在科學上被稱為 「nonce重用攻擊」 或 「基於nonce重用的ECDSA私鑰恢復攻擊」 ——會導致錢包立即被完全攻破,資金被大規模竊取,並破壞比特幣去中心化安全性的基本原則。此類漏洞的官方CVE編號已被記錄,證實了其重要性, 並已達到全球行業標準級別。
因此,在當今加密貨幣領域,對隨機數、私鑰和加密庫的管理必須極為嚴謹且專業。只有完全可驗證性、安全的協議實施和持續的審計才能保護比特幣免受此類攻擊的災難性後果。
文學
- Weiser S.、Schrammel D.、Bodner L.、Spreitzer R.,《系統分析 (EC)DSA 實作中的 Nonce 洩漏》 ,usenix
- Breitner J., Heninger N. 有偏隨機數意義:針對弱 ECDSA 實現的格攻擊 semanticscholar
- 問題 #18645:如何在 Go GitHub中安全地從記憶體中擦除敏感數據
- Golang 安全最佳實踐 hub.corgea
- https://www.usenix.org/system/files/sec20summer_weiser_prepub_0.pdf
- https://www.semanticscholar.org/paper/Using-Bleichenbacher%E2%80%99s-solution-to-the-hidden-to-in-Mulder-Hutter/4b9e42a199d8d7bd2e0322a17d87afa62f0c5c
- https://www.semanticscholar.org/paper/Biased-Nonce-Sense:-Lattice-Attacks-against-Weak-in-Breitner-Heninger/4031f027385f46d64e69a4b631a5b9900ec8fdf1
- https://hub.corgea.com/articles/go-lang-security-best-practices
- https://github.com/golang/go/issues/18645
- https://dl.acm.org/doi/10.1007/978-981-97-1235-9_9
- https://www.diva-portal.org/smash/get/diva2:861503/FULLTEXT02
- https://www.twilio.com/en-us/blog/developers/tutorials/building-blocks/manage-go-application-secrets-using-vault
- https://www.reddit.com/r/crypto/comments/6uyuyq/what_is_the_best_way_to_generate_nonces_for_file/
- https://www.reddit.com/r/programming/comments/h7kmff/best_practices_for_managing_storing_secrets_like/
- https://web.cs.ucdavis.edu/~rogaway/papers/nonce.pdf
- https://curity.io/resources/learn/nonce-authenticator-pattern/
- https://blog.gitguardian.com/how-to-handle-secrets-in-go/
- http://www.hjp.at/(en)/doc/rfc/rfc8452.html
- https://www.reddit.com/r/golang/comments/12pg11w/best_practices_for_storing_api_keys_and_passwords/
- https://tugraz.elsevierpure.com/ws/portalfiles/portal/74107547/Cryptographically_Enforced_Memory_Safety.pdf
- https://blog.daisie.com/cryptographic-nonce-a-practical-understanding-guide/
- https://blog.stackademic.com/golang-series-e63a91eb386b
- https://rustfoundation.org/media/secure-app-development-with-rusts-memory-model/
- https://www.hashicorp.com/resources/8-best-practices-for-writing-secure-go-code
- https://www.kaspersky.com/blog/vulnerability-in-hot-cryptowallets-from-2011-2015/49943/
- https://www.sk-cert.sk/en/warning-of-critical-randstorm-vulnerability-in-crypto-wallets/index.html
- https://arxiv.org/html/2412.19310v1
- https://portswigger.net/daily-swig/dozens-of-cryptography-libraries-vulnerable-to-private-key-theft
- https://www.wiz.io/vulnerability-database/cve/cve-2025-22874
- https://www.miggo.io/vulnerability-database/cve/CVE-2025-6545
- https://www.cve.org/CVERecord/SearchResults?query=bitcoin
- https://nvd.nist.gov/vuln/detail/CVE-2024-32962
- https://dl.acm.org/doi/10.1145/3634737.3657012
- https://www.kroll.com/en/reports/cyber/threat-intelligence-reports/threat-landscape-report-lens-on-crypto
- https://www.wiz.io/vulnerability-database/cve/cve-2025-59038
- https://dspace.mit.edu/bitstream/handle/1721.1/155457/3634737.3657012.pdf?sequence=1&isAllowed=y
- https://security.snyk.io/vuln/SNYK-DEBIANUNSTABLE-GOLANGGOCRYPTO-8500045
- https://www.cve.org/CVERecord/SearchResults?query=crypto
- https://en.wikipedia.org/wiki/Comparison_of_cryptography_libraries
- https://nvd.nist.gov/vuln/detail/CVE-2025-9071
- https://moldstud.com/articles/p-essential-tools-libraries-for-bitcoin-cryptography-development-2025-guide
- https://cve.mitre.org/cgi-bin/cvekey.cgi
- https://arxiv.org/html/2508.16078v1
- https://nvd.nist.gov/vuln/detail/CVE-2025-59143
文學
- ECDSA弱隨機數攻擊和CSPRNG注入攻擊 – keyhunters.ru keyhunters
- 透過隨機數重複使用進行 ECDSA 私鑰恢復攻擊 – keyhunters.ru keyhunters
- CVE-2018-0734、CVE-2020-28498、CVE-2024-31497、CVE-2024-23342 – NVD、CVE 詳情 vicarius+3
- https://keyhunters.ru/ecdsa-weak-nonce-attack-csprng-injection-attack-critical-random-number-generator-vulnerability-and-private-key-attack-a-security-threat-to-bitcoin-cryptocurrency/
- 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://habr.com/ru/articles/939560/
- https://is.muni.cz/th/nemr5/fi-pdflatex.pdf
- https://www.cvedetails.com/cve/CVE-2024-31497/
- 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://nvd.nist.gov/vuln/detail/cve-2024-23342
- https://data.safetycli.com/vulnerabilities/CVE-2024-23342/64459/
- https://www.miggo.io/vulnerability-database/cve/CVE-2024-23342
- https://arxiv.org/html/2306.07249v2
- https://kb.isc.org/docs/cve-2022-38177
- https://www.youtube.com/watch?v=Nk1uqe8Z7k4
- https://arxiv.org/html/2504.13737v1
- https://security.snyk.io/vuln/SNYK-PYTHON-ECDSA-6184115
- https://d-nb.info/1221417088/34
- https://indico.math.cnrs.fr/event/11948/attachments/5546/9591/0_thomas_roche.pdf
- https://www.usenix.org/system/files/sec20-weiser.pdf
- https://www.wiz.io/vulnerability-database/cve/cve-2024-23342
關鍵字: ECDSA、隨機數重複使用、私鑰恢復、比特幣錢包、格攻擊、RFC 6979、側頻道、BithoRecover。