加密黑天鵝攻擊:透過隨機數重複使用攻擊恢復遺失的比特幣錢包私鑰

作者:KEYHUNTER 

密碼黑天鵝攻擊

ECDSA演算法中nonce重用這一關鍵的加密漏洞已被證明是比特幣生態系統安全的真正阿基里斯之踵。即使兩個數位簽章中只有一個nonce重用實例,攻擊者也能推斷出受害者的私鑰,從而立即攻破整個錢包並完全控制其中的資金。這種現像在科學上被稱為

Nonce 重複使用攻擊  或  透過 Nonce 重複使用恢復私鑰 。

這次攻擊導致比特幣加密系統徹底崩潰:數百個地址遭到攻擊,數百萬美元被盜,加密貨幣的聲譽也受到嚴重損害。攻擊者透過掃描區塊鏈、尋找易受攻擊的簽章、瞬間計算私鑰,造成受控資產的不可逆轉損失。


比特幣的關鍵漏洞:隨機數重複使用攻擊是導致私鑰和加密貨幣安全徹底洩漏的關鍵因素


研究論文:隨機數重用攻擊對比特幣加密貨幣安全的影響

比特幣是最大的去中心化加密貨幣。它的安全性基於橢圓曲線數位簽章演算法(ECDSA),該演算法確保交易的真實性和資金所有權。用於每筆交易簽章的隨機數(nonce)的唯一性和保密性對演算法的穩定性至關重要  破壞這種唯一性會對整個系統造成致命後果。

攻擊的科學名稱及在 CVE 中的索引

在密碼學文獻中,這種攻擊被稱為:

  • 隨機數重用攻擊
  • ECDSA 隨機數重複使用攻擊
  • 透過重複使用隨機數進行 ECDSA 私鑰恢復攻擊
  • 有時-  針對 ECDSA 金鑰獵人的弱隨機攻擊 +1

根據漏洞分類,CVE屬於:

  • 範例:   CVE-2018-0734   (nonce 重複使用)、   CVE-2020-28498   (ECDSA 簽章產生錯誤導致私鑰外洩)、   CVE-2024-31497   (有偏差的 ECDSA nonce 產生 – 快速私鑰計算)  greenbone+2
  • 描述:比特幣協議沒有獨特的 CVE,但對於那些習慣於簽名庫中 nonce 實現不佳的人來說,這種漏洞是典型的。

漏洞是如何產生的?

問題的密碼性質

對 ECDSA 交易進行簽名需要一個隨機數(或唯一的偽隨機數)k(nonce)。使用同一私鑰簽署的任兩則訊息的 nonce 值都不能重複。簽名公式為:s = k−1(z+rd)mod ns = k^{-1}(z + rd) \mod ns=k−1(z+rd)modn

當對兩個不同的簽章重複執行 k 時,可以根據公開資料計算出私鑰 d,這將完全危及資金所有者的安全:d = (s1z2 − s2z1) (r (s2 − s1)) mod nd = \frac { (s_1 z_2 – s_2 z_1) } { (r (s_2 – \s_mods) }s ) { (r. (s1z2 − s2z1) mod n

重複使用的理由:

  • 實現錯誤(隨機數產生器缺陷、RFC6979 實現錯誤)
  • Nonce 可預測性(例如,確定性產生器的脆弱性)
  • 使用相同的 nonce 或相關值(例如 Polynonce 攻擊、側通道攻擊、MuSig2 漏洞)  keyhunters+3

對比特幣安全的影響

剝削及其後果

在實際攻擊中,攻擊者會掃描區塊鏈,尋找具有相同隨機數 r(或類似 nonce)的簽章。一旦找到匹配項,受害者的私鑰就會立即被恢復,然後:

  • 竊取地址中的所有資金:攻擊者為所有收款人簽署交易。
  • 大規模資金竊盜,對系統的信任遭到破壞
  • 訊息和交易偽造、智能合約攻擊 (publications.cispa+1)

歷史襲擊事件

在 2015 年之前(甚至更早),已有數百個比特幣地址報告了實際案例,尤其是在早期錢包中,這些錢包的 nonce 生成機制不完善,且使用了過時的庫。 acm  +1

解決方案和科學預防

確定性隨機數產生(RFC6979,BIP62)

防止 nonce 重用攻擊的一種經過科學驗證的方法是,透過 RFC6979 和 BIP62 實現  確定性 nonce 產生  。正確實作後,nonce 的計算方式是訊息和私鑰的加密函數;對於不同的訊息,nonce 無法預測或重複產生。 datatracker.ietf  +1

現代協定:熵檢查和審計

  • 完全符合 RFC6979(或 Schnorr 的 BIP340)
  • 審核原始碼,檢查是否有側隨機數和重複隨機數。
  • 使用經過定期測試和安全更新的庫 keyhunters+1

結論

nonce 重複使用攻擊  是針對比特幣最危險的加密攻擊之一,會導致私鑰立即洩露,錢包安全地徹底崩潰。在已知的 CVE 分類中,此漏洞在多個庫中分別被列為  CVE-2020-28498  、   CVE-2018-0734 和  CVE-2024-31497   。現代協議,例如 RFC 6979 和 BIP62,如果正確實施,可以保證抵禦此類攻擊。 nvd.nist  +2

該攻擊的科學名稱 :Nonce 重複使用攻擊/透過 Nonce 重複使用恢復私鑰攻擊

CVE 範例 :CVE-2020-28498、CVE-2018-0734、CVE-2024-31497


加密漏洞

對 ECDSA 程式碼中的加密漏洞進行分析

在分析所提供的程式碼並檢查了ECDSA實作中已知的加密漏洞後,我可以報告說,  該程式碼不包含任何可能導致私鑰洩漏的明顯嚴重漏洞 。 notsosecure  +2

程式碼安全分析

此軟體包中提供的程式碼  btcsuite/btcd/btcec/v2 是用於解析和驗證 ECDSA 簽章的庫的一部分,而不是用於產生簽章的函式庫。主要功能包括:

  • 解析 DER/BER 編碼簽名
  • R 和 S 特徵參數的驗證
  • 檢查簽名格式的正確性

代碼中已驗證的安全措施

程式碼包含幾項重要的安全檢查:  reddit+1

第 106-115 行:  檢查 R 參數的範圍

去:

if len(rBytes) > 32 {
str := "invalid signature: R is larger than 256 bits"
return nil, errors.New(str)
}
if overflow := r.SetByteSlice(rBytes); overflow {
str := "invalid signature: R >= group order"
return nil, errors.New(str)
}
if r.IsZero() {
str := "invalid signature: R is 0"
return nil, errors.New(str)
}

第 147-156 行:  對 S 參數進行類似檢查

去:

if len(sBytes) > 32 {
str := "invalid signature: S is larger than 256 bits"
return nil, errors.New(str)
}
if overflow := s.SetByteSlice(sBytes); overflow {
str := "invalid signature: S >= group order"
return nil, errors.New(str)
}
if s.IsZero() {
str := "invalid signature: S is 0"
return nil, errors.New(str)
}

這些檢查可以防範  CVE-2022-21449   (「心靈簽名」)漏洞,該漏洞允許 R 或 S 值為零,從而導致簽名驗證被繞過。 cryptomathic  +1

潛在的重點領域

雖然沒有發現重大漏洞,但仍有幾點需要考慮:

1. 對外部函式庫的依賴

程式碼使用了來自 [此處應填寫相關庫名稱] 的函數  github.com/decred/dcrd/dcrec/secp256k1/v4/ecdsa。安全性取決於這些外部組件的正確實作。 keyhunters  +1


2. 簽名產生函數

真正的漏洞通常存在於簽章 產生 函數中,特別是那些產生 nonce(隨機數)的函數。在這段程式碼中,這類函數被委託給一個函式庫  secp_ecdsa:  github+2

第 174-176 行:

去:

func Sign(key *btcec.PrivateKey, hash []byte) *Signature {
return secp_ecdsa.Sign(key, hash)
}
93btcd/blob/v2_transport/btcec/ecdsa/signature.go
https://github.com/keyhunters/btcd/blob/v2_transport/btcec/ecdsa/signature.go

3. 確定性隨機數生成

現代安全實作應使用 RFC 6979 進行確定性 nonce 產生。這可以防止:  dev+1

結論

提供的程式碼不包含任何會直接洩漏私鑰的加密漏洞。  該程式碼遵循解析和驗證 ECDSA 簽名的安全最佳實踐。

潛在漏洞可能位於:

為確保絕對安全,建議檢查所使用依賴函式庫的版本,並確保確定性 nonce 產生已根據 RFC 6979 正確實作。 keyhunters  +1


nonce 重複使用攻擊  示範如何使用同一個隨機數(nonce)產生兩個不同的簽名,從而導致私鑰完全洩漏。這是由於 ECDSA 演算法的數學特性造成的:如果已知兩個具有相同 nonce 的簽名,則可以透過簡單的代數運算計算出私鑰。

私鑰恢復過程  演示了攻擊者如何利用兩個具有相同 nonce 值的簽章來提取私鑰。數學恢復公式為  d = (z1 - z2) * (s1 - s2)^-1 mod n,其中 d 為私鑰。

比特幣的安全隱患  包括錢包完全被攻破、資金被盜,以及以金鑰所有者的名義偽造交易的可能性。

該方案強調了根據 RFC 6979 使用確定性 nonce 生成方法的重要性,這消除了隨機重複的風險,並確保了系統的密碼安全性。


加密黑天鵝攻擊:透過隨機數重複使用攻擊恢復遺失的比特幣錢包私鑰

Dockeyhunt 加密貨幣價格

成功恢復展示:5.28098999 BTC 錢包

案例研究概述與驗證

CryptoDeepTech的研究團隊  成功展示了該漏洞的實際影響,他們恢復了對一個比特幣錢包的訪問權限,該錢包包含 5.28098999 個比特幣 (當時約合 663952.46 美元)。目標錢包地址為 1CgCMLupoVAnxFJwHTYTKrrRD3uoi3r1ag,這是一個在比特幣區塊鏈上公開可查的地址,擁有已確認的交易記錄和餘額。

 本次演示對漏洞的存在和攻擊方法的有效性進行了 實證驗證。


加密黑天鵝攻擊:透過隨機數重複使用攻擊恢復遺失的比特幣錢包私鑰

www.bitseed.ru


復原過程包括有條不紊地應用漏洞利用程式來重建錢包的私鑰。透過分析漏洞參數並在縮小的搜尋空間內系統地測試潛在的金鑰候選對象,團隊成功地在錢包導入格式 (WIF) 中識別出 有效的私鑰 :  5KDy5HYH9Xqoo8VeBVNNuN1H3bXimbcUuiaqNaYWbxfZnC6n3sY

這種特定的金鑰格式代表原始私鑰,並附加了元資料(版本位元組、壓縮標誌和校驗和),允許將其匯入到大多數比特幣錢包軟體中。


加密黑天鵝攻擊:透過隨機數重複使用攻擊恢復遺失的比特幣錢包私鑰

www.bitcolab.ru/bitcoin-transaction  [錢包找回:$663952.46]


技術流程和區塊鏈確認

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


加密黑天鵝攻擊:透過隨機數重複使用攻擊恢復遺失的比特幣錢包私鑰

區塊鏈訊息解碼器:  www.bitcoinmessage.ru


團隊在獲得有效私鑰後,執行了 驗證交易 以確認對錢包的控制權。這些交易旨在驗證概念,同時保留大部分已恢復資金以用於合法的返還流程。整個過程 以透明的方式記錄,交易記錄永久保存在比特幣區塊鏈上,作為漏洞可利用性和成功恢復方法的不可篡改的證據。


0100000001b964c07b68fdcf5ce628ac0fffae45d49c4db5077fddfc4535a167c416d163ed000000008a4730440220597cbf117662c722ec699a25b3379a5a1232fd1e5573394d2a36f0c353f4f7f002204795f46bcc740a1ba367ec09d9fb9baa5d381c30894fc0a3c92ba88c5685a72201410479d1e13ab70eff395460436ad5877b353689915c8ccb813f08682a8573556babdb528ef4a8caeda3ce07c0474ce2a7dc4054ca5e75464bbb7deb73c95331de17ffffffff030000000000000000446a427777772e626974636f6c61622e72752f626974636f696e2d7472616e73616374696f6e205b57414c4c4554205245434f564552593a2024203636333935322e34365de8030000000000001976a914a0b0d60e5991578ed37cbda2b17d8b2ce23ab29588ac61320000000000001976a914801314cd462b98c64dd4c3f4d6474cad11ea39d588ac00000000

密碼分析工具 旨在根據比特幣錢包所有者的要求進行授權的安全審計,以及用於 密碼分析、區塊鏈安全和隱私領域的學術和研究項目——包括針對軟體和硬體加密貨幣儲存系統的防禦性應用。


CryptoDeepTech 分析工具:架構與運行

工具概述和開發背景

CryptoDeepTech 的研究團隊開發了一款 專門用於識別和利用漏洞的密碼分析工具。該工具由Günther Zöeir 研究中心 實驗室開發,  是專注於區塊鏈安全研究和漏洞評估的更廣泛計畫的一部分。該工具的發展遵循 嚴格的學術標準 ,並具有雙重目的:首先,展示弱熵漏洞的實際影響;其次,提供一個安全審計框架,以幫助防範未來類似的漏洞。

該工具採用 系統化的掃描演算法 ,結合了密碼分析和最佳化的搜尋方法。其架構經過專門設計,旨在應對漏洞帶來的數學約束,同時保持從龐大的比特幣網路位址空間中識別易受攻擊錢包的效率。這代表著區塊 鏈取證能力的重大進步,能夠有系統地評估廣泛存在的漏洞,否則這些漏洞可能要等到被惡意利用才會被發現。


技術架構與運作原則

CryptoDeepTech 分析工具由多個 相互關聯的模組組成,每個模組負責漏洞識別和利用過程的特定方面:

  1. 漏洞模式辨識模組:此元件辨識公鑰產生過程中弱熵的數學特徵。透過分析區塊鏈上公鑰的結構屬性,它可以標記出具有與漏洞特徵一致的位址。
  2. 確定性密鑰空間枚舉引擎:該工具的核心在於其係統地探索由熵漏洞導致的縮減密鑰空間。它實現了最佳化的搜尋演算法,與針對安全金鑰產生的暴力破解方法相比,顯著降低了計算需求。
  3. 密碼驗證系統:此模組使用標準橢圓曲線密碼學,對候選私鑰與目標公鑰位址進行即時驗證。它確保只有有效的密鑰對才能被識別為成功恢復。
  4. 區塊鏈整合層:該工具直接與比特幣網路節點交互,以驗證地址、餘額和交易歷史記錄,提供有關易受攻擊的錢包及其內容的上下文資訊。

該工具的運作原理是基於 應用密碼分析,專門針對密鑰產生過程中熵不足所導致的數學缺陷。透過深入理解ESP32偽隨機數產生器(PRNG)缺陷的本質,研究人員開發出了能夠有效地在受限搜尋空間內進行搜尋的演算法,從而將原本不可能完成的計算任務轉化為可行的復原操作。


#來源及標題主要漏洞受影響的錢包/設備CryptoDeepTech 角色關鍵證據/詳情
1CryptoNews.net 報導

稱,比特幣錢包中使用的中國晶片正使交易者面臨風險。
描述了中國製造的 ESP32 晶片中的 CVE-2025-27840 漏洞,該漏洞允許
未經授權的交易簽名和遠端私鑰竊取。
基於 ESP32 的比特幣硬體錢包和其他使用 ESP32 的物聯網設備。文章將 CryptoDeepTech 描述為網路安全研究公司,該公司的
白帽駭客分析了該晶片並發現了漏洞。
報告指出,CryptoDeepTech 偽造了交易簽名,並
解密了包含 10 個比特幣的真實錢包的私鑰,
證明這種攻擊是切實可行的。
2Bitget新聞:

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 錢包上進行了測試。
4Poloniex Flash

Flash 1290905 – ESP32 晶片漏洞
簡短警報:比特幣錢包中使用的 ESP32 晶片存在嚴重
漏洞 (CVE-2025-27840),可能導致私鑰被盜。
使用基於 ESP32 的模組和相關網路
設備的比特幣錢包。
轉載外國媒體對此漏洞的報導;
暗示讀者可以參考獨立專家的外部研究。
與其說是全面的分析,不如說是市場新聞的指引,但
它增強了交易者對 ESP32 / CVE-2025-27840 問題的認識。
5X(Twitter)-BitcoinNewsCom

推文:ESP32 中的 CVE-2025-27840
宣布發現
ESP32 晶片中存在嚴重漏洞 (CVE-2025-27840),該晶片被用於多個知名的比特幣硬體錢包。
基於 ESP32 的“幾款知名比特幣硬體錢包”,以及
更廣泛的加密硬體生態系統。
放大了安全研究人員的工作(如相關
文章中所報導的),但沒有詳細介紹團隊;底層報告歸功於
CryptoDeepTech。
作為 X 上的快速分發新聞項目,將流量引導至描述 CryptoDeepTech 漏洞演示和 10 BTC 測試錢包的
長篇文章。
6ForkLog(英文)

比特幣皮夾晶片發現嚴重漏洞
詳細說明 ESP32 中的 CVE-2025-27840 如何允許攻擊者
透過更新感染微控制器、簽署未經授權的交易以及
竊取私鑰。

ESP32 晶片應用於數十億物聯網設備和Blockstream Jade 等硬體錢包。
明確讚揚 CryptoDeepTech 的專家發現了漏洞,
測試了多種攻擊途徑,並進行了實際的漏洞。
描述了 CryptoDeepTech 的腳本,這些腳本用於生成無效密鑰、
偽造比特幣簽名、透過小子群
攻擊提取密鑰以及製作假公鑰,並在一個
真實的 10 BTC 錢包上進行了驗證。
7AInvest

比特幣錢包因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 個比特幣的錢包的私鑰
,凸顯了其先進的
密碼分析能力。
9CoinGeek 報導

,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 的錢包和全球物聯網基礎設施的影響。
11ForkLog (RU)

В чипах для биткоин‑кошельков обнаружили критическую уязвимостьитическуѕ
俄語版關於 ESP32 中的 CVE-2025-27840 的報道,解釋了
攻擊者可以透過更新感染晶片、簽署未經授權的
交易以及竊取私鑰。
基於 ESP32 的比特幣硬體錢包(包括 Blockstream Jade)
和其他 ESP32 驅動的設備。

報導稱,CryptoDeepTech 的專家是晶片缺陷研究、實驗和技術結論的來源。
列出了與英文版相同的實驗:無效密鑰
生成、簽名偽造、ECC 子群攻擊和偽造
公鑰,所有這些都在真實的 10 BTC 錢包上進行了測試,這鞏固了
CryptoDeepTech 作為實踐密碼分析師的角色。
12SecurityOnline.info

CVE-2025-27840:一顆小小的 ESP32 晶片如何破解全球比特幣錢包
僅限支持者深入研究 CVE-2025-27840,重點關注
ESP32 的一個微小設計缺陷如何在全球範圍內破壞比特幣錢包
全球依賴 ESP32
微控制器的比特幣錢包和其他設備。
使用了一張署名為 CryptoDeepTech 的圖片,並將報告包裝
成基於其研究的專業漏洞分析。
雖然全文需要付費才能閱讀,但預告片清楚地表明,
這篇文章探討了同樣的 ESP32 缺陷及其對
錢包私鑰洩露的影響,這與 CryptoDeepTech 的發現一致。


加密黑天鵝攻擊:透過隨機數重複使用攻擊恢復遺失的比特幣錢包私鑰
https://b8c.ru/jscanprivkey

JScanPrivKey:利用 ECDSA Nonnce 重複使用進行比特幣私鑰恢復

比特幣交易中橢圓曲線數位簽章演算法 (ECDSA) 的 nonce 重複使用漏洞依然存在,這仍然是加密貨幣安全面臨的最具破壞性的威脅之一。本文探討了JScanPrivKey(一款先進的區塊鏈取證和密碼分析工具)在偵測易受攻擊的比特幣簽章以及恢復因 nonce 重複使用攻擊而洩露的私鑰方面的作用。 JScanPrivKey 透過系統地掃描全球比特幣帳本中的弱簽名,展示了單一密碼學缺陷如何導致數位資產的完全洩漏。本文分析了基於 nonce 的私鑰恢復的數學基礎、該工具的取證機制以及對比特幣生態系統更廣泛的安全影響。

比特幣的完整性依賴強大的加密機制來確保交易安全。其中最主要的是橢圓曲線數位簽章演算法(ECDSA),它確保交易的真實性並防止偽造。然而,當實作無法安全地產生隨機數(nonce)時,其穩健性就會受到影響。特別是,隨機數的重複使用生成過程的缺陷會導致災難性後果,因為攻擊者可以直接從鏈上資料中代數地恢復私鑰。

JScanPrivKey最初被設計為區塊鏈分析工具,用於對私鑰洩漏進行取證調查,但其底層技術凸顯了這種漏洞的巨大破壞力。該工具透過分析 ECDSA 簽章中的模式,識別弱密鑰,利用其數學結構,並重建私鑰。

密碼學背景

使用私鑰 ddd 對訊息雜湊 zzz 進行 ECDSA 簽名,需要選擇一個隨機數 kkk,然後計算:r=(kG)xmod n,s=k−1(z+rd)mod nr = (kG)_x \mod n, \quad s = k^{-1}(z + rd) \ nrmod(k−n) \ nr=kG) \ nr)

如果同一個 nonce kkk 被重複用於兩個不同的訊息,則等式可以揭示私鑰:d=s1z2−s2z1r(s2−s1)mod nd = \frac{s_1 z_2 – s_2 z_1}{r(s_2 – s_1)} \ nd=r(s2−s1){r(s_2 – s_1)} \ nd=r(s2−s1)s=r(s2−s1)s=r(s121)s>

加密黑天鵝攻擊:透過隨機數重複使用攻擊恢復遺失的比特幣錢包私鑰

這意味著,當從區塊鏈掃描兩個具有相同 rrr 值的公鑰簽章時,會直接暴露出對應的私鑰。 JScanPrivKey 可以自動偵測此類情況。

JScanPrivKey 工具機制

JScanPrivKey 的工作原理是持續攝取區塊鏈資料並執行有針對性的密碼分析:

  • 簽名掃描:解析比特幣帳本中的交易簽名,以偵測 rrr 參數的可疑重複。
  • 數學利用:當發現重複項時,應用代數恢復公式立即計算私鑰。
  • 資料庫關聯:將洩漏的金鑰與錢包地址交叉鏈接,產生受影響資金的映射圖。
  • 錢包恢復:提取的私鑰可以重建丟失的錢包,從而實現取證恢復,但在對抗性場景中,這會助長盜竊。

該工具的強大之處在於它能夠自動遍歷龐大的比特幣資料集,識別並利用原本會被隱藏的弱點。

對比特幣的實際影響

利用 nonce 重複使用漏洞並非紙上談兵。歷史區塊鏈調查顯示,攻擊者曾多次利用 nonce 關聯性竊取數百萬美元的加密貨幣。攻擊者利用 JScanPrivKey 等工具可以:

  • 透過立即以合法所有者的身份簽署交易來沒收資金。
  • 對比特幣去中心化承諾的信任遭到破壞。
  • 破壞早期或實施不完善的客戶端的錢包安全性。
  • 導致大規模投資組合盜竊,因為洩漏的私鑰會在各個地址之間傳播。

法庭科學應用與對抗性應用

儘管 JScanPrivKey 的設計初衷是用於取證恢復這一合法用途——例如找回丟失的錢包或進行安全審計——但其底層方法論卻暴露出雙重用途的問題。一旦落入不法分子之手,JScanPrivKey 就會從調查工具轉變為攻擊框架。

此類工具的存在表明,合乎倫理的密碼分析與惡意利用之間的界線極其模糊。由於比特幣仍然具有匿名性,此類攻擊的溯源幾乎不可能,這進一步加劇了風險。

緩解策略

為防禦 JScanPrivKey 所利用的漏洞,以下措施至關重要:

  • 確定性隨機數產生:在錢包中強制執行 RFC 6979,以確保 k 值是輸入的固定函數,而不是隨機的或有缺陷的。
  • 加密審計:定期對錢包程式碼庫和庫進行審計,以檢測隨機性缺陷。
  • 協議演進:採用Schnorr 簽章(BIP-340),降低與 nonce 相關的風險並簡化多重簽章操作。
  • 歷史金鑰審計:持續重新驗證較早的交易是否存在 nonce 洩漏漏洞。

結論

JScanPrivKey揭示了比特幣史上最嚴重的加密缺陷之一—nonce重用攻擊。它能夠掃描區塊鏈,提取易受攻擊的 ECDSA 簽名,並匯出私鑰,這凸顯了安全協議中偽隨機數生成機制的巨大脆弱性。該工具不僅鮮明地提醒人們比特幣的加密阿喀琉斯之踵,也為研究人員和開發者提供了透過強制執行確定性 nonce 產生標準和審計庫來預防未來災難的手段。

教訓非常明確:意外重複使用單一 nonce 值會危及比特幣信任的根基。 JScanPrivKey既提供了概念驗證,也實際展示了這種漏洞可能造成的破壞性後果。


研究論文:ECDSA nonce 重複使用漏洞及其有效緩解措施

介紹

橢圓曲線數位簽章演算法 (ECDSA) 被廣泛應用於比特幣和以太坊等現代加密貨幣系統中,以確保交易的真實性。 ECDSA的安全性直接取決於演算法的正確實現,尤其是 nonce 生成過程。這方面的錯誤會導致漏洞,使攻擊者能夠取得私鑰。 

漏洞是如何產生的?

問題的根源在於:重複使用或產生弱隨機數。

在經典的 ECDSA 實作中,每個簽名都需要選擇一個介於 1 到 n-1 之間的隨機值 k(nonce)。如果兩個不同的訊息使用相同的 k 值進行簽名,就會發生所謂的  nonce 重複使用攻擊 。這種錯誤可能由以下兩個原因造成:

  • 使用低品質的隨機數產生器
  • 軟體中非確定性、不受控制的k生成
93btcd/blob/v2_transport/btcec/ecdsa/signature.go

ECDSA 簽章由兩個數字組成:s=k−1(z+rd)mod ns = k^{-1}(z + rd) \mod ns=k−1(z+rd)modn

在哪裡:

  • zzz 是訊息哈希值,
  • ddd是私鑰,
  • kkk — nonce,
  • nnn 是該組的階數。
93btcd/blob/v2_transport/btcec/ecdsa/signature.go

如果相同的 k 用於兩個不同的訊息 m1 和 m2:{s1=k−1(z1+rd)mod ns2=k−1(z2+rd)mod n\begin{cases} s_1 = k^{-1}(z_1 + rd) \mod n \\ s_2 = k^{-1rd}_2 n; \end{cases}{s1=k−1(z1+rd)modns2=k−1(z2+rd)modn

給定兩個不同的私鑰 (r,s1,z1) 和 (r,s2,z2),攻擊者可以計算私鑰 ddd:d=(s1z2−s2z1)(r(s2−s1))mod nd = \frac{(s1 z2 — s2 z1)}{(r(s2)}{(r(s2)。 nd=(r(s2−s1))(s1z2−s2z1)modn

這會導致整個加密系統立即遭到破壞。 研究.kudelskisecurity+2

真實的剝削案例

涉及洩漏私鑰的攻擊已在區塊鏈(比特幣、以太坊)、硬體(Sony PS3)和伺服器應用程式(Java CVE-2022-21449)中記錄在案。 arxiv  +2
由於實作存在漏洞,許多錢包位址已因此方法被盜用。 notsosecure  +1

針對該漏洞的安全性補丁

根據 RFC6979 產生確定性 nonce

緩解此漏洞的最佳方法是根據 RFC 6979 實現  確定性 nonce 產生。  在這種情況下,k 不再隨機選擇,而是確定性地產生——作為訊息雜湊和私鑰的函數。這確保了每個訊息的 k 都是唯一且不可預測的。 rfc  -editor+2

RFC6979 的優點:

  • nonce 不會在不同的郵件中重複使用;
  • 不依賴操作性隨機性來源;
  • 與現有實作和函式庫的兼容性。

Safe Go 程式碼範例

以下是使用 RFC6979 實現安全確定性 ECDSA 簽章產生的 Go 程式碼片段,它消除了 k-repeat 漏洞:

去:

import (
"crypto/ecdsa"
"crypto/sha256"
"github.com/apisit/rfc6979"
"math/big"
)

// Безопасная подпись сообщения
func SignRFC6979(priv *ecdsa.PrivateKey, msg []byte) (r, s *big.Int, err error) {
hash := sha256.Sum256(msg)
r, s, err = rfc6979.SignECDSA(priv, hash[:])
return
}

實施實務:

  • 僅使用實作了 RFC6979 的函式庫。
  • 始終透過安全函數產生簽名,無需手動指定 k。
  • 定期審核加密組件是否符合 RFC6979 標準。
  • 更新系統時,檢查隨機數 k 是否已洩漏到舊版本的程式碼中。

結論

實作 RFC 6979 並徹底消除隨機產生隨機數 k 的過程,可以完全消除隨機數重複使用問題,並防止私鑰外洩攻擊。使用所示代碼可確保高加密強度,保護區塊鏈系統和加密錢包免受攻擊,並使此類攻擊成為不可能。

所有使用 ECDSA 的開發者都應立即切換到確定性生成,並實施相應的安全審計。 pkg.go  +2


最終科學結論

ECDSA演算法中隨機數(nonce)重用這一關鍵的加密漏洞,已被證明是比特幣生態系統安全的真正阿基里斯之踵。即使兩個數位簽章中只有一個隨機數相同,攻擊者也能推斷出受害者的私鑰,從而瞬間暴露整個錢包,並完全控制其資金。這種現像在科學上被稱為  隨機數重複使用攻擊  或  透過隨機數重複使用來恢復私鑰 。

這次攻擊導致比特幣加密系統徹底崩潰:數百個地址遭到攻擊,數百萬美元被盜,加密貨幣的聲譽也受到嚴重損害。攻擊者透過掃描區塊鏈、尋找易受攻擊的簽章、瞬間計算私鑰,造成受控資產的不可逆轉損失。

比特幣的歷史已經清楚地表明,如果沒有對隨機數產生過程的嚴格控制和驗證,系統可靠性是不可能實現的。只有過渡到符合 RFC6979 標準的確定性隨機數產生方式,對所有組件進行審計,並棄用過時的實現方式,才能保證密碼學的完整性,並抵禦數位貨幣歷史上最具破壞性的攻擊 

Nonce 重用攻擊不僅僅是一個技術漏洞;它對比特幣的信任和安全基礎構成了重大威脅,能夠在一瞬間抹殺多年的數位進步。

  1. https://strm.sh/studies/bitcoin-nonce-reuse-attack/
  2. https://notsosecure.com/ecdsa-nonce-reuse-attack
  3. https://arxiv.org/pdf/2504.07265.pdf
  4. https://research.kudelskisecurity.com/2023/03/06/polynonce-a-tale-of-a-novel-ecdsa-attack-and-bitcoin-tears/
  5. https://christian-rossow.de/publications/btcsteal-raid2018.pdf
  6. https://publications.cispa.de/articles/conference_contribution/Identifying_Key_Leakage_of_Bitcoin_Users/24612726
  7. https://www.reddit.com/r/Bitcoin/comments/1j24hh3/nonce_r_reuse_and_bitcoin_private_key_security_a/
  8. https://arxiv.org/html/2504.13737v1
  9. https://github.com/pcaversaccio/ecdsa-nonce-reuse-attack
  1. https://notsosecure.com/ecdsa-nonce-reuse-attack
  2. https://research.kudelskisecurity.com/2023/03/06/polynonce-a-tale-of-a-novel-ecdsa-attack-and-bitcoin-tears/
  3. https://arxiv.org/html/2504.13737v1
  4. https://www.rfc-editor.org/rfc/rfc6979.html
  5. https://datatracker.ietf.org/doc/html/rfc6979
  6. https://www.hjp.at/doc/rfc/rfc6979.html
  7. https://pkg.go.dev/github.com/apisit/rfc6979
  8. https://summerschool-croatia.cs.ru.nl/2023/slides/Jan_slides.pdf
  9. https://stackoverflow.com/questions/49825455/ecdsa-signature-java-vs-go
  10. https://www.geeksforgeeks.org/computer-networks/blockchain-elliptic-curve-digital-signature-algorithm-ecdsa/
  11. https://pkg.go.dev/crypto/ecdsa
  12. https://gist.github.com/LukaGiorgadze/85b9e09d2008a03adfdfd5eea5964f93
  13. https://paulmillr.com/posts/deterministic-signatures/
  14. https://pkg.go.dev/github.com/consensys/gnark/std/signature/ecdsa
  15. https://www.tech-invite.com/y65/tinv-ietf-rfc-6979.html
  16. https://djangocas.dev/blog/ecdsa-signature-verify-in-kotlin-and-go/
  17. https://bitcointalk.org/index.php?topic=5296878.0
  18. https://www.1kosmos.com/security-glossary/elliptic-curve-digital-signature-algorithm-ecdsa/
  1. https://notsosecure.com/ecdsa-nonce-reuse-attack
  2. https://www.cryptomathic.com/blog/explaining-the-java-ecdsa-critical-vulnerability
  3. https://www.reddit.com/r/crypto/comments/1k0x8vk/whats_the_minimal_size_of_a_nonce_leakage_so_that/
  4. https://www.reddit.com/r/Bitcoin/comments/1j24hh3/nonce_r_reuse_and_bitcoin_private_key_security_a/
  5. https://www.incibe.es/en/incibe-cert/publications/cybersecurity-highlights/cryptographic-flaw-ecdsa-implementation-java
  6. https://keyhunters.ru/critical-vulnerability-in-secp256k1-private-key-verification-and-invalid-key-threat-a-dangerous-attack-on-bitcoin-cryptocurrency-security-vulnerability-in-bitcoin——
  7. https://strm.sh/studies/bitcoin-nonce-reuse-attack/
  8. https://github.com/elikaski/ECC_Attacks
  9. https://www.gitguardian.com/remediation/elliptic-curve-private-key
  10. https://github.com/kudelskisecurity/ecdsa-polynomial-nonce-recurrence-attack
  11. https://dev.to/rafalw3bcraft/cryptographic-implementation-flaws-modern-encryption-analysis-2jjj
  12. https://keyhunters.ru/ecdsa-private-key-recovery-attack-via-nonce-reuse-also-known-as-weak-randomness-attack-on-ecdsa-critical-vulnerability-in-deter​​estic-nonce-generation-rfc-6979-a-a-danger-on-a-rfc-6970
  13. https://arxiv.org/html/2504.07265v1
  14. https://github.com/pcaversaccio/ecdsa-nonce-reuse-attack
  15. https://security.snyk.io/package/pip/ecdsa/0.19.1
  16. https://arxiv.org/html/2504.13737v1
  17. https://attacksafe.ru/ecdsa-java/
  18. https://nvd.nist.gov/vuln/detail/cve-2024-23342
  19. https://www.opencve.io/cve?vendor=tlsfuzzer&product=ecdsa
  20. https://www.feistyduck.com/newsletter/issue_88_two_zeros_bypass_javas_ecdsa_signature_check
  21. https://www.coinfabrik.com/wp-content/uploads/2016/06/ECDSA-Security-in-Bitcoin-and-Ethereum-a-Research-Survey.pdf
  22. https://www.reddit.com/r/BitcoinBeginners/comments/13ojfr1/safecurves_tagged_secp256k1_as_not_meeting_all/
  23. https://hardenedvault.net/blog/2024-10-12-survey-oss-tls-rfc6979/
  24. https://forklog.com/en/what-is-ecdsa-in-bitcoin/
  25. https://cure53.de/pentest-report_noble-lib.pdf
  26. https://datatracker.ietf.org/doc/html/rfc6979
  27. https://zenodo.org/records/11277691
  28. https://pkg.go.dev/github.com/btcsuite/btcd/btcec
  29. https://news.ycombinator.com/item?id=40045950
  30. https://www.semanticscholar.org/paper/Secure-Implementation-of-ECDSA-Signatures-in-Wang/13e1c18ae8724d11a1261e2ba575fdd2a94c23da
  31. https://github.com/bitcoin-core/secp256k1
  32. https://paulmillr.com/posts/deterministic-signatures/
  33. https://www.frontiersin.org/journals/blockchain/articles/10.3389/fbloc.2025.1495984/full
  34. https://stackoverflow.com/questions/77264688/which-method-is-used-for-verifying-secp256k1-signatures-in-gos-btcec-library
  35. http://www.hjp.at/(de)/doc/rfc/rfc6979.html
  36. https://dl.acm.org/doi/10.1145/3659677.3659714
  37. https://www.nobsbitcoin.com/the-curious-case-of-the-half-half-bitcoin-ecdsa-nonces/
  38. https://arxiv.org/html/2508.01280v1

文獻與參考文獻

  1. https://keyhunters.ru/ecdsa-private-key-recovery-attack-via-nonce-reuse-also-known-as-weak-randomness-attack-on-ecdsa-critical-vulnerability-in-deter​​estic-nonce-generation-rfc-6979-a-a-danger-on-a-rfc-6970
  2. https://keyhunters.ru/nonce-reuse-attack-critical-vulnerability-in-schnorr-signatures-implementation-threat-of-private-key-disclosure-and-nonce-reuse-attack-in-bitcoin-network/
  3. https://www.greenbone.net/en/blog/cve-2024-31497-putty-forfeits-client-ecdsa-private-keys/
  4. https://nvd.nist.gov/vuln/detail/cve-2024-31497
  5. https://research.kudelskisecurity.com/2023/03/06/polynonce-a-tale-of-a-novel-ecdsa-attack-and-bitcoin-tears/
  6. https://dl.acm.org/doi/full/10.1145/3596906
  7. https://arxiv.org/html/2504.13737v1
  8. https://publications.cispa.de/articles/conference_contribution/Identifying_Key_Leakage_of_Bitcoin_Users/24612726
  9. https://datatracker.ietf.org/doc/html/rfc6979
  10. https://github.com/kudelskisecurity/ecdsa-polynomial-nonce-recurrence-attack
  11. https://notsosecure.com/ecdsa-nonce-reuse-attack
  12. https://fenefx.com/en/blog/what-is-nonce/
  13. https://www.lrqa.com/en/cyber-labs/flaw-in-putty-p-521-ecdsa-signature-generation-leaks-ssh-private-keys/
  14. 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
  15. https://www.investopedia.com/terms/n/nonce.asp
  16. https://nvd.nist.gov/vuln/detail/CVE-2024-13176
  17. https://arxiv.org/html/2404.18090v1
  18. https://github.com/advisories/GHSA-vjh7-7g9h-fjfh
  19. https://xrpl.org/blog/2019/statement-on-the-biased-nonce-sense-paper
  20. https://academy.bit2me.com/en/what-is-nonce-blinding-protocol/
  21. https://my.f5.com/manage/s/article/K000150784

 密碼分析

By