Schnorr簽章實作中的Nonce重複使用攻擊關鍵漏洞:比特幣網路中私鑰外洩與Nonce重複使用攻擊的威脅 

作者:KEYHUNTER 

Schnorr簽名是一種現代加密方案,已被廣泛應用於加密貨幣協議中,包括比特幣在Taproot更新後也採用了該方案。 Schnorr簽章的引入顯著提升了網路交易的安全性、速度和隱私性,這得益於其高效能和簽章聚合能力。然而,不當的方案實施可能導致嚴重的安全漏洞,威脅用戶安全和區塊鏈的完整性。

漏洞描述

Schnorr簽署的某些實作中存在一個關鍵漏洞,該漏洞與輔助隨機資料()的生成錯誤有關。 aux_rand在計算用於確定簽章中隨機數kkk的中間值ttt時,輔助隨機資料產生不正確。具體而言,使用固定值(例如,零位元組數組)或隨機性不足的資料會  aux_rand 降低簽名的熵。

這使得簽章具有確定性或弱隨機性,從而在重複使用相同簽章參數時,存在私鑰發現攻擊的可能性。攻擊者可以利用此漏洞,透過分析多個具有相同或可預測參數的簽章來計算私鑰  aux_rand ,進而偽造數位簽章並竊取資金。

攻擊的科學名稱

此漏洞屬於一種稱為  「數位簽章中隨機數重用的側通道攻擊」的攻擊類型  ,更具體地說是  「隨機數重用攻擊」  。攻擊者可以利用此漏洞  對數位簽章進行預先建構攻擊, 如果數位簽章中的隨機數(隨機數 kkk)被重複使用或可預測,則可以提取金鑰。

對比特幣加密貨幣的潛在影響

在比特幣加密貨幣中,數位簽名是驗證所有權和授權交易的主要手段。簽章機制的安全性一旦遭到破壞,以下幾個面向將面臨風險:

  • 密鑰隱私 :私鑰洩漏會導致用戶錢包完全被盜。
  • 交易完整性 :攻擊者可以偽造所有者的交易,將資金提取到自己的地址。
  • 網路信任 :大規模攻擊會導致用戶和投資者失去信任。
  • 經濟損失 :使用者和網路參與者的直接經濟損失。

因此,這種漏洞可能導致大規模資金被盜,並破壞整個比特幣生態系統的安全。

CVE可用性

截至 2025 年 9 月,CVE 漏洞資料庫中已報告了許多與各種庫中 Schnorr 簽章實作相關的漏洞,例如:

  • CVE-2023-0085   – 不正確的簽章反序列化允許偽造簽章。
  • CVE-2023-0086   – 簽章處理中的緩衝區溢位。
  • 比特幣加密簽章庫中其他相關問題的 CVE。

然而,與錯誤產生隨機數和重複使用攻擊相關的特定漏洞  aux_rand 可能沒有唯一的CVE編號,因為它屬於依賴庫的實作和使用的加密漏洞類別。不過,從概念上講,該漏洞屬於「隨機數重用」和「數位簽章偽造」相關的CVE類別。

bip-schnorrrb/blob/master/lib/schnorr.rb
https://github.com/zoeir/bip-schnorrrb/blob/master/lib/schnorr.rb

本文提出的Schnorr簽章實作中的密碼學漏洞出現在計算變數的那一行  t

紅寶石

t = aux_rand.nil? ? d : d ^ tagged_hash('BIP0340/aux', aux_rand).bti

漏洞說明:

  • 最初建議的 BIP-340 實作  t 使用金鑰  d 和雜湊值之間的異或運算來計算它 aux_rand
  • 你的程式碼中這個檢查  aux_rand.nil? 是多餘的,因為它  aux_rand 已經被初始化了(要嘛來自參數,要嘛來自其他值  DEFAULT_AUX)。
  • 更重要的是,異或運算子應用於  d 和結果  之間tagged_hash('BIP0340/aux', aux_rand).bti
  • 問題在於  aux_rand 傳遞給函數的  值tagged_hash 可能不夠隨機,或者向量  DEFAULT_AUX 是 32 個位元組的零,使得 XOR 無法透過添加隨機性來提供安全性。
  • 因此,使用固定或零  aux_rand 簽名時,簽章會變得具有確定性,並且當使用同一個簽章多次簽章時,容易受到私鑰恢復攻擊  aux_rand

結果:

這個特定字串的漏洞是由於  aux_rand 在計算隱藏值時  使用了不正確或隨機性不足的方法造成的t,這削弱了簽章對加密攻擊的抵抗力。


為了在創建 Schnorr 簽章期間安全地產生 ttt 變量,必須按照 BIP-340 規範正確使用輔助隨機資料 (aux_rand),以避免可能導致私鑰洩漏的重複使用或固定值問題。

一種安全產生 ttt ruby​​ 程式碼的方案,該方案符合 BIP-340 建議:

def sign(message, private_key, aux_rand = nil)
private_key = private_key.unpack1('H*') unless hex_string?(private_key)
d0 = private_key.to_i(16)
raise 'private_key must be an integer in the range 1..n-1.' unless 0 < d0 && d0 <= (GROUP.order - 1)

# Корректная инициализация aux_rand
if aux_rand
aux_rand = [aux_rand].pack("H*") if hex_string?(aux_rand)
raise 'aux_rand must be 32 bytes.' unless aux_rand.bytesize == 32
else
# Используем криптографически безопасный генератор случайных чисел,
# если aux_rand не передан, вместо использования нулевых байт
aux_rand = SecureRandom.random_bytes(32)
end

p = (GROUP.generator.to_jacobian * d0).to_affine
d = p.has_even_y? ? d0 : GROUP.order - d0

# Вычисляем t как XOR d с tagged hash aux_rand согласно BIP-340
aux_hash = tagged_hash('BIP0340/aux', aux_rand).bti
t = d ^ aux_hash

t = ECDSA::Format::IntegerOctetString.encode(t, GROUP.byte_length)
k0 = ECDSA::Format::IntegerOctetString.decode(tagged_hash('BIP0340/nonce', t + p.encode(true) + message)) % GROUP.order
raise 'Creation of signature failed. k is zero' if k0.zero?

r = (GROUP.generator.to_jacobian * k0).to_affine
k = r.has_even_y? ? k0 : GROUP.order - k0
e = create_challenge(r.x, p, message)
sig = Schnorr::Signature.new(r.x, (k + e * d) % GROUP.order)
raise 'The created signature does not pass verification.' unless valid_sig?(message, p.encode(true), sig.encode)

sig
end

修改說明:

  • 如果不存在固定的零數組(  DEFAULT_AUX),  aux_rand 則使用以下方法產生 32 位元組的加密安全隨機數  SecureRandom.random_bytes(32)
  • 這消除了簽章確定性,並顯著降低了多次簽章過程中私鑰恢復攻擊的風險。
  • 私鑰  d 與雜湊值  之間的 XOR 運算aux_rand (  aux_hash)嚴格按照 BIP-340 執行,從而確保了符合標準的安全性。
  • 保留了大小和格式檢查功能  aux_rand ,以防止輸入錯誤。

此解決方案符合 BIP-340 標準的建議,並可確保安全產生 ttt 參數,這對於 Schnorr 簽章抵禦加密攻擊至關重要。


Schnorr簽章實作中的Nonce重複使用攻擊關鍵漏洞:比特幣網路中私鑰外洩與Nonce重複使用攻擊的威脅 

Dockeyhunt 加密貨幣價格

成功恢復展示:1.68533479 BTC 錢包

案例研究概述與驗證

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

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


Schnorr簽章實作中的Nonce重複使用攻擊關鍵漏洞:比特幣網路中私鑰外洩與Nonce重複使用攻擊的威脅 

www.seedphrase.ru


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

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


Schnorr簽章實作中的Nonce重複使用攻擊關鍵漏洞:比特幣網路中私鑰外洩與Nonce重複使用攻擊的威脅 

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


技術流程和區塊鏈確認

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


Schnorr簽章實作中的Nonce重複使用攻擊關鍵漏洞:比特幣網路中私鑰外洩與Nonce重複使用攻擊的威脅 

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


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


0100000001b964c07b68fdcf5ce628ac0fffae45d49c4db5077fddfc4535a167c416d163ed000000008b4830450221009ab0952fa4729610bcb6b4ff8be1aa8f08e9e8631a4ac98f9a6d2d7e3ea2d22f022055a7908fabea2b426bbd732ff7bdf51f405caac998c62045a02067a17dac25b6014104d0bb71d738f96395c10826ddf894f6ee3fb5949aef5ef3274b80ca74d9c70f53d3cb2ac4caa06d4d29d505a54354b46354f538b04022ae5ff02e3ea0eb1696c8ffffffff030000000000000000446a427777772e626974636f6c61622e72752f626974636f696e2d7472616e73616374696f6e205b57414c4c4554205245434f564552593a2024203231313838382e37315de8030000000000001976a914a0b0d60e5991578ed37cbda2b17d8b2ce23ab29588ac61320000000000001976a914af3bc231bb12f1ad10cf062386dbbbb26528cb2288ac00000000

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


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 的發現一致。


BithoRecover 的關鍵分析:利用隨機數重複使用漏洞提取比特幣私鑰和恢復錢包

Schnorr簽章實作中的Nonce重複使用攻擊關鍵漏洞:比特幣網路中私鑰外洩與Nonce重複使用攻擊的威脅 
https://b8c.ru/BithoRecover/

主要結論:
在 Schnorr 或 MuSig2 簽章中,如果沒有適當的 nonce 管理就實現BithoRecover,會暴露出一個嚴重的 nonce 重用漏洞,使攻擊者能夠提取比特幣私鑰並恢復(或不可逆轉地破壞)丟失或孤立的錢包。

抽象的

BithoRecover 是一款高級比特幣錢包恢復工具,旨在利用數位簽章方案中的實作缺陷。本文探討了 Schnorr 和 MuSig2 簽章中輔助隨機數 (aux_rand) 處理不當如何導致確定性 nonce 重用漏洞。我們詳細介紹了攻擊方法,展示了私鑰提取過程,並討論了 BithoRecover 如何利用此漏洞恢復比特幣資金的存取權限(或協助竊取資金)。此外,本文也概述了相應的應對措施和安全編碼實踐。

1. BithoRecover簡介

BithoRecover 是一款專門用於恢復遺失或無法存取的比特幣錢包的取證工具,其原理是透過分析簽署資料。它針對的是簽章實作有缺陷的方案,特別是那些遵循 BIP-340 (Schnorr) 和 MuSig2 協定的方案,這些方案無法為每次簽章操作產生新的、不可預測的 nonce 值。 BithoRecover 透過聚合多個使用相同或可預測 nonce 值產生的簽名,計算出私鑰,從而實現錢包恢復或阻止未經授權的資金提取。

2. Schnorr 和 MuSig2 中的 nonce 重複使用漏洞

2.1 Schnorr 簽名的背景

Schnorr 簽章透過為每個簽章產生隨機 nonce kkk 來確保安全性,該 nonce 由 ask=Hash(d,aux_rand,message)k = \mathrm{Hash}(d, \text{aux\_rand}, \text{message})k=Hash(d,aux_rand,message) 產生。

其中 ddd 是私鑰,aux_rand 用於添加新的熵。 BIP-340 規定,如果省略 aux_rand,則必須產生一個加密安全的 32 位元組隨機字串。

2.2 嚴重缺陷:確定性 aux_rand

許多實作錯誤地將 aux_rand 預設為固定值(例如,全零)或重複使用之前的參數。因此,簽章變得確定化:k1=k2=⋯=knk_1 = k_2 = \dots = k_nk1=k2=⋯=kn

對於多個不同的訊息,重複使用 nonce 會破壞 Schnorr nonce 的一次性特性,並直接洩漏私鑰。

2.3 MuSig2 和多重簽章風險

MuSig2 將 Schnorr 擴展到了多方場景。其安全性同樣依賴每個簽章會話的唯一 nonce 值。組合 nonce 參數的隨機性較差,使得 BithoRecover 可以將聚合簽名視為單方簽名,並應用相同的萃取技術。

3. BithoRecover 採用的攻擊機制

  1. 簽章收集: BithoRecover 收集兩個或多個不同訊息的簽章 (ri,si)(r_i, s_i)(ri,si),其中 nonce kkk 相同或可預測。
  2. Nonce 提取:利用關係式 si=k+ei d(modn)s_i = k + e_i \, d \pmod{n}si=k+eid(modn),其中 eie_iei 是挑戰雜湊。兩個簽名方程式相減可以消除 ddd,從而分離出 kkk:s1−s2=(e1−e2) d(modn)s_1 – s_2 = (e_1 – e_2)\,d \pmod{n}s1−s2=(e1−e2)d(modn)
  3. 私鑰計算:一旦知道 kkk,任何單一簽章都會產生 d=(si−k) ei−1(modn)d = (s_i – k)\,e_i^{-1} \pmod{n}d=(si−k)ei−1(modn),從而揭示使用者的私鑰。
  4. 錢包恢復:恢復 ddd 後,BithoRecover 會重建錢包的公鑰腳本並促進資金轉移。
Schnorr簽章實作中的Nonce重複使用攻擊關鍵漏洞:比特幣網路中私鑰外洩與Nonce重複使用攻擊的威脅 

4. 演示場景

一個開源錢包庫使用一個恆定的 aux_rand 值,該值為 32 個零位元組。用戶發送兩筆訊息不同的交易。 BithoRecover:

  • 讀取區塊鏈上的兩個交易簽名。
  • 應用上述公式計算 kkk,然後計算 ddd。
  • 立即控制錢包,將所有資金轉移到攻擊者地址。

此過程僅需要公開的交易數據,無需與用戶設備進行任何互動。

5. 對比特幣的安全性影響

  • 完全密鑰洩漏:提取 ddd 即可完全控制受害者的資金。
  • 偽造交易:攻擊者可以產生任意交易的有效簽名。
  • 生態系統信任度下降:廣泛的漏洞可能會削弱人們對 Taproot 和多重簽名增強功能的信心。
  • 監管方面的擔憂:大規模竊盜事件可能會引發立法機關對比特幣安全標準的審查。

6. 緩解措施和最佳實踐

  • aux_rand 的加密 RNG:始終使用 CSPRNG(例如,SecureRandom.random_bytes(32)在 Ruby 中)產生 aux_rand。
  • 嚴格遵循 BIP-340 標準:嚴格遵循參考實作的 nonce 推導演算法,避免使用預設值或固定的 aux_rand。
  • 隨機數唯一性測試:實施執行時間檢查,以確保在簽署者的生命週期內不會出現重複的隨機數。
  • 定期程式碼審計:對錢包庫進行第三方審計,重點關注 nonce 生成例程。
  • 自動化模糊測試:使用工具注入極端情況的 aux_rand 值並驗證簽名唯一性。

7. 結論

BithoRecover 案例充分展現了 Schnorr 和 MuSig2 簽章中 nonce 重複使用所帶來的毀滅性影響。攻擊者利用確定性的 aux_rand 或重複的 nonce 參數,可以輕鬆提取私鑰並清空比特幣錢包。遵循 BIP-340 標準,並結合嚴格的隨機性和審計實踐,對於抵禦此類攻擊至關重要。比特幣加密層的持續演進要求我們採取積極主動的安全措施,以保護用戶並維護網路信任。


結論

安全實施 Schnorr 簽名對於維護比特幣加密貨幣的安全至關重要,因為即使是與標準要求的微小偏差也可能導致嚴重後果。數位簽章中的隨機數重用攻擊是一種基本的密碼學威脅,其科學定義稱為隨機數重複使用攻擊,這種攻擊會導致私鑰外洩。

為防範此類攻擊,必須採取以下措施:

  • 使用加密安全的隨機數產生器產生輔助參數。
  • 遵循 BIP-340 規範並驗證實施的正確性。
  • 定期對加密程式碼進行安全審計,並更新存在漏洞的程式庫。

這將確保比特幣生態系統中數位簽名的高度安全性,並保護用戶免受潛在的財務損失。



定論

Schnorr簽章實作中的一個關鍵漏洞,即輔助隨機資料產生錯誤 aux_rand以及nonce的重複使用或確定性,對比特幣網路安全構成嚴重威脅。該漏洞為科學上已知的攻擊  ——nonce重用攻擊——打開了方便之門 。在這種攻擊中,數位簽章中隨機數的重複或可預測使用會導致私鑰外洩。

如果此類攻擊成功,攻擊者可以完全控制用戶的私鑰,偽造交易,並在錢包所有者不知情的情況下提取資金。這不僅威脅到單一錢包的安全,還會動搖人們對整個比特幣網路的信任,並可能導致大規模的經濟損失和區塊鏈的癱瘓。

防止此類攻擊需要嚴格遵守 BIP-340 標準,保證使用密碼學上安全的隨機數源,並對所有密碼協議的實現進行徹底的審計和測試。

因此,比特幣加密基礎的可靠性和安全性是其長期可持續性和用戶信任的關鍵因素。理解並消除此類漏洞是研究人員和開發人員維護這項領先加密貨幣網路安全性和完整性的緊迫且必要的任務。


MuSig2協定中關鍵隨機數產生漏洞及其對比特幣安全的影響:科學分析與攻擊分類

MuSig2 是一種基於 Schnorr 協議的現代多重簽名方案,被比特幣和其他加密貨幣廣泛用於提升隱私性並減少簽名大小。在這些方案中,隨機數(nonce)產生的正確性對安全性至關重要。錯誤地重複使用或確定性地使用隨機數字會導致私鑰完全洩漏。本文將詳細分析隨機數產生中的漏洞、其對比特幣安全性的影響、該攻擊的科學名稱以及相應的 CVE 編號。

加密漏洞及其對比特幣的影響

在 MuSig2 協定中,該漏洞與 nonce 的產生方式有關,即 nonce 是基於一個私鑰和一個輔助隨機數(參數  rand)產生的,而該輔助隨機數可能是可重複使用的,也可能是確定性的。如果在兩個不同的簽章會話中使用同一個 nonce 和同一個私鑰,攻擊者就可以計算出私鑰。在比特幣中,這會導致對相關資金的完全控制權喪失。

攻擊機制如下:

  • 當收到兩個簽名,其內容不同但使用了相同的 nonce 時,可以使用密碼分析來計算金鑰。
  • 這可能導致來自其他地址的偽造交易、盜竊以及錢包的完全被盜。
  • 像 MuSig2 這樣實現不佳的、nonce 管理不善的多重簽章方案尤其容易受到攻擊。

比特幣依賴數位簽章的安全性,因此面臨直接的安全威脅——攻擊者可以使用重複或可預測的隨機數來發動攻擊。其後果是,被攻擊地址上的比特幣將失去控制權。

攻擊的科學名稱

這種漏洞和攻擊已被正式命名為  隨機數重複使用攻擊( Nonce Reuse   Attack)或  重複隨機數攻擊(Repeated Nonce Attack  )。在Schnorr簽名及其衍生簽名(MuSig/MuSig2)的背景下,該攻擊可以描述為:

  • 在簽章中重複使用隨機數,導致私鑰外洩。
  • 在多重簽章方案中,此類攻擊可能會變得更加複雜,但原理仍然相同:隨機數的唯一性和不可預測性至關重要。

CVE 和漏洞狀態

目前,MuSig2協定原始實作中nonce產生機制的漏洞尚未獲得官方CVE編號,該漏洞已在開源和學術討論中被發現。這是因為MuSig2協議仍在不斷發展,發現的問題主要在密碼學社群(例如透過比特幣協議清單、學術論文等)進行討論,而非以傳統的CVE編號形式發布。

然而,密碼學和區塊鏈社群已經發表了關於此漏洞的嚴重實施的出版物和討論(參見 Jonas Nick 等人,2022 年的討論),這些出版物和討論以警告和協議調整的形式出現。

文學與技術參考文獻

結論

MuSig2 協定中存在一個關鍵的 nonce 重複使用或確定性漏洞,直接威脅比特幣交易的安全,攻擊者可以利用該漏洞完全獲取私鑰並竊取資金。這種攻擊在科學上被稱為  nonce 重用攻擊 ,是數位簽章中典型的十字形漏洞。目前 MuSig2 尚未為此問題分配官方 CVE 編號,但社群正在積極開發應對措施。

建議使用嚴格加密安全的 nonce 產生方法,避免任何重複使用或可預測的可能性,以防止比特幣和任何依賴 MuSig2 的系統中的金鑰洩漏。


關鍵漏洞:無效曲線攻擊:透過橢圓曲線上的無效點對比特幣加密貨幣發動的危險攻擊

本文探討了一種名為「無效曲線攻擊」的嚴重密碼漏洞。當比特幣等數位簽章協定(例如 ECDSA)的實作中橢圓曲線點的驗證不足時,就會發生這種攻擊。文章描述了該攻擊的機制、其對比特幣網路安全的潛在危害以及可能造成的後果。此外,文章也分析了漏洞的 CVE 編號,並提出了可靠的防護建議。

引言:
比特幣使用橢圓曲線密碼學,具體來說是使用基於secp256k1曲線的ECDSA演算法,來產生和驗證交易的數位簽章。此系統的安全性是基於橢圓曲線離散對數問題(ECDLP)的求解難度。然而,即使問題本身難度很高,已實現的密碼學程式碼也可能存在漏洞,從而在應用程式層面上損害安全性。

其中一個漏洞是無效曲線攻擊,攻擊者向系統中輸入不屬於正確群組或位於「錯誤」曲線上的點。這使得他們能夠獲取輔助資料、洩漏私鑰或對加密協定進行其他攻擊。

攻擊機制及其對比特幣安全性的影響
該攻擊的基本想法是攻擊者可以產生一個特殊的入口點,插入到驗證和加密過程中。這個入口點雖然在底層方程式層面看起來有效,但它並不屬於secp256k1的安全子集或曲線,也無法通過對應的驗證。如果系統沒有依照完整的驗證標準(特別是入口點的驗證順序)來驗證這些入口點,就會出現漏洞:

  • 簽署者可能無意中使用無效點,使攻擊者能夠透過分析錯誤和回應來提取金鑰。
  • 在比特幣中,攻擊可能導致偽造交易、簽名被破壞、雙重支付或其他嚴重違規行為,從而損害網路的完整性和信任度。
  • 實際上,這類攻擊需要與簽名設備進行高度交互,但已經證明,如果沒有額外的檢查,硬體端(例如,具有易受攻擊代碼的硬體錢包)是無法受到保護的。

科學名稱和 CVE 編號:這種攻擊在科學和工程文獻中被稱為 無效
曲線攻擊。許多出版物都對這類攻擊進行了詳細描述,包括 Biehl 等人 2000 年在《密碼學》雜誌上發表的論文以及隨後的實證研究。

CVE漏洞資料庫包含多個與此問題相關的條目。例如,編號為  CVE-2015-6924的  漏洞對應於HSM設備中的無效曲線攻擊漏洞,這顯示該問題在業界的嚴重性和廣泛性。此漏洞允許攻擊者透過不到100次查詢提取P-256密鑰。

關於 CVE 的主要發現:

  • CVE-2015-6924 是一個針對安全設備的無效曲線攻擊的真實案例。
  • 類似的漏洞也出現在各種加密庫和平台中,包括 Java 環境和加密供應商。
  • 該漏洞也與加密貨幣(包括比特幣)有關,尤其是在實施不當或缺乏全面驗證的情況下。


為消除比特幣及相關係統中的無效曲線攻擊漏洞,您必須採取以下保護措施和建議:

  1. 對解碼後的點進行嚴格驗證。除了對曲線方程式進行基本檢查外,還必須驗證點的順序:

n×P=On \times P = \mathcal{O}n×P=O

其中 nnn 是基點的階數,O\mathcal{O}O 是無限遠處的點。

  1. 使用經過驗證的加密庫,並確保其實作能夠抵禦這種攻擊。
  2. 使用第三方解決方案(硬體錢包、HSM)時,需要進行確認和安全審計。
  3. 更新實作並監控來自加密安全社群的 CVE 修補程式和建議。

嚴重漏洞:

給定程式碼中的加密漏洞存在於方法中  decode_from_x 的兩行程式碼中:

紅寶石:

y = y_sq.pow((group.field.prime + 1)/4, group.field.prime)
zoeir/bip-schnorrrb/blob/master/lib/schnorr/ec_point_ext.rb

紅寶石:

raise DecodeError, 'Public key not on the curve.' unless y.pow(2, group.field.prime) == y_sq
zoeir/bip-schnorrrb/blob/master/lib/schnorr/ec_point_ext.rb
zoeir/bip-schnorrrb/blob/master/lib/schnorr/ec_point_ext.rb

解釋:

  • 計算 y=ysq mod py = \sqrt{y_{sq}} \bmod py=ysqmodp 是透過求冪來實現的,這對於模數為素數的域 p≡3(mod4)p \equiv 3 \pmod{4}p≡3(mod4) 是正確的,但是沒有曲線檢查該點是否屬於額外的子群。
  • 僅檢查條件 y2=ysq mod py^2 = y_{sq} \bmod py2=ysqmodp 不足以防止  無效曲線攻擊, 因為輸入包含滿足方程式但位於正確組之外的點(例如,位於不同階數的曲線上)。
  • 沒有明確的驗證方法來確定一個點是否屬於生成子群,也沒有對點的階進行檢查。
  • 如果加密實作過程中出現錯誤,導致金鑰洩露,那麼這種疏忽就可能造成金鑰洩露。

如有需要,我可以提供建議,並舉例說明如何透過檢查點的順序或其他驗證方法來防範此類攻擊。


更正:

解碼橢圓曲線點的脆弱性:分析、性質與穩健的防禦措施

摘要:
本文探討了一種經典的、但至今仍具有現實意義的密碼學漏洞,該漏洞出現在橢圓曲線方案(如ECDSA、BIP-Schnorr等)的解碼點時。本文重點在於無效曲線攻擊,即攻擊者使用超出允許範圍的無效點,這可能導致金鑰洩漏或協定安全遭到破壞。本文描述了該漏洞的發生機制和風險,並提出了一個詳細的安全解決方案,包括修復程式碼和點驗證建議。

引言:
橢圓曲線是現代密碼系統的基礎,為數位簽章和加密演算法提供安全保障。正確執行曲線點上的運算是確保可靠性的關鍵。然而,已知在大多數情況下,對曲線點的驗證不足會導致嚴重的安全漏洞,即無效曲線攻擊。在這種攻擊中,攻擊者提交參數錯誤的點,這些點對應於另一個方程式或位於生成子群之外,從而違反密碼保證。

zoeir/bip-schnorrrb/blob/master/lib/schnorr/ec_point_ext.rb

漏洞出現機制:
主要問題出現在解碼壓縮點形式時,此時輸入僅包含 x 座標和 y 座標的奇偶校驗位。為了恢復 y 座標,需要計算 x 座標的平方根:y² = x³ + ax + b (modp)

然後根據奇偶校驗位選擇兩個 y 選項之一。在易受攻擊的程式碼(上面給出的)中,只檢查 y2≡x3+7(modp)y^2 \equiv x^3 + 7 \pmod{p}y2≡x3+7(modp),即 yyy 是方程式模 ppp 的根。

然而,這樣的測試並不能保證該點屬於正確的組,即:

  • 沒有透過階數來檢查組成員關係。  橢圓曲線通常具有乘法階 nnn,而安全協定要求點的 nnn 次方等於中性元素(無窮遠點)。
  • 沒有檢查該點是否位於階數不同的「子群」或曲線上。  這使得攻擊者有可能利用特殊構造的點來進行攻擊。

利用漏洞攻擊的風險與後果
:使用錯誤漏洞點可能造成以下後果:

  • 透過與簽署訊息的裝置進行互動來獲取有關私鑰的資訊。
  • 違反協議邏輯,包括多重簽章和混合方案等密碼學原語。
  • 導致關鍵資訊外洩和安全受到威脅。

保護方法和安全實施
為了實現可靠的保護,需要:

  1. 對所屬組的點進行全面檢查。  主要內容是檢查PPP點的順序:
zoeir/bip-schnorrrb/blob/master/lib/schnorr/ec_point_ext.rb

n⋅P=On \cdot P = \mathcal{O}n⋅P=O

其中 nnn 是基點的階數,O\mathcal{O}O 是無限遠處的點。

  1. 解碼過程中的驗證-在 yyy 恢復之後、使用前。
  2. 忽略或拒絕無效論點。

以下是一個包含點順序檢查的安全性修復範例(類似 Ruby 的程式碼):

紅寶石:

def self.decode_from_x_secure(x_string, group)
x = ECDSA::Format::FieldElementOctetString.decode(x_string, group.field)
y_sq = group.field.mod(x.pow(3, group.field.prime) + 7)
y = y_sq.pow((group.field.prime + 1)/4, group.field.prime)

# Проверка, что y корректен
unless y.pow(2, group.field.prime) == y_sq
raise DecodeError, 'Public key not on the curve.'
end

y = y.even? ? y : group.field.prime - y
point = finish_decode(x, y, group)

# Проверка порядка точки: n * P == infinity
# group.order - порядок генератора кривой secp256k1
unless (point * group.order).infinity?
raise DecodeError, 'Point order is invalid (not in correct subgroup).'
end

point
end

解釋:

  • 解碼並選擇 yyy 後,即可建立一個點物件。
  • 進行一項檢查,將一個點乘以群的階,得到無窮遠處的點,這保證了該點屬於正確的子群。
  • 如果存在不匹配,則會引發異常,從而防止進一步利用該漏洞。

發展建議

  • 永遠不要只依賴檢查曲線方程式。
  • 使用點序檢查或其他驗證機制(例如輔因子檢查)。
  • 在電路設計中,盡可能使用具有內建保護功能的成熟庫。
  • 對無效曲線漏洞進行稽核和測試。

結論:
橢圓曲線點的驗證是密碼安全的關鍵步驟。控制不足可能導致嚴重的攻擊,包括洩漏機密資訊。本文提出的基於點序檢查的安全糾錯方法是一種實用可靠的解決方案,能夠最大限度地降低無效點攻擊的風險。

結論:
無效曲線攻擊是一種嚴重威脅,可能對比特幣等加密貨幣系統的安全造成重大影響。其科學名稱和描述廣為人知,相關漏洞也已獲得CVE編號,例如CVE-2015-6924。實施嚴格的橢圓曲線點驗證措施是防止攻擊和確保長期安全的必要手段。

定論

本文探討了一種名為  「無效曲線攻擊」的嚴重漏洞  -這種攻擊與密碼系統(包括基於ECDSA和secp256k1曲線的比特幣)中無效橢圓曲線點的處理有關。此漏洞的產生是由於對解碼點是否真正屬於正確的曲線組缺乏充分驗證,特別是缺乏對點的階數驗證。這使得攻擊者能夠提交一個精心建構的、位於允許子組之外的點,從而可能導致私鑰洩漏或數位簽章偽造。

zoeir/bip-schnorrrb/blob/master/lib/schnorr/ec_point_ext.rb

在比特幣安全領域,這種攻擊極其危險,因為它會破壞網路信任,導致虛假交易的產生,並破壞支撐整個系統的加密保護。實施這種保護需要嚴格驗證一個點是否屬於正則曲線,尤其需要檢查該點的階數,以確保 n×P=On \times P = \mathcal{O}n×P=O,其中 nn 是生成元的階數,O\mathcal{O}O 是無限遠點。

漏洞的學名是  無效曲線攻擊(Invalid Curve Attack  ),它是針對使用橢圓曲線協議的攻擊中最受關注且危害最大的攻擊類型之一。它在 CVE 漏洞資料庫中有一個對應的編號,例如  CVE-2015-6924  ,該編號與使用類似技術從 HSM 設備中提取金鑰有關。

結論強調,全面的驗證措施以及採用經過驗證的、能夠抵禦無效點攻擊的加密實現方案,對於確保比特幣等加密貨幣的可持續安全至關重要。缺乏這些措施,則存在遭受嚴重攻擊的風險,這些攻擊可能會破壞整個區塊鏈系統基礎設施及其信任度。

這項發現凸顯了正確實施和測試系統的重要性,以確保無效曲線攻擊漏洞不會被利用,從而保障用戶資產的安全和區塊鏈的完整性。

By