作者:KEYHUNTER
ChronoShock 脆弱性
忽視強熵生成原則會導致加密應用(尤其是區塊鏈應用)用戶遭受災難性後果。經典的「ChronoShock」(Milk Sad)漏洞表明,即使是大型項目,如果忽略加密隨機性的基本要求,也會犯下簡單的錯誤。開發人員應定期審查金鑰產生架構,僅使用經過驗證的CSPRNG系統和工具,並且程式碼審計應識別並阻止任何依賴可預測資料的嘗試。 schneier +3
比特幣私鑰產生機制中的一個嚴重漏洞,被稱為「牛奶悲傷」(Milk Sad,CVE-2023-39910),清晰地展現了低估加密安全基本原則會導致全球用戶資金遭受巨大且不可逆轉的損失。攻擊者利用一個弱且可預測的熵源和一個不穩定的隨機數產生器,為自動化攻擊鋪平了道路,使他們能夠在短短幾天甚至幾小時內完全恢復加密貨幣錢包的私鑰並攻破錢包。
ChronoShock漏洞:關鍵私鑰產生漏洞和牛奶Sad攻擊(CVE-2023-39910)-對比特幣生態系統的大規模破壞和致命威脅
ChronoShock 漏洞 強調了攻擊的獨特性,指出了 CVE 編號,反映了比特幣加密貨幣面臨的規模和直接威脅,並立即引起了人們對所描述問題的科學和技術新穎性的關注。
研究論文:關鍵加密種子漏洞對比特幣系統安全的影響—分析、後果和攻擊分類
任何加密貨幣系統的穩定性都直接取決於私鑰產生的品質。隨機數產生和熵來源選擇方面的錯誤都可能導致災難性的資產外洩。此類漏洞的一個例子是廣為人知的「Milk Sad」(CVE-2023-39910),該漏洞發現於Libbitcoin Explorer庫中,並成為針對比特幣網路的重大攻擊的基礎,同時也凸顯了密碼學上強大的偽隨機數產生器(PRNG)的重要性 。
脆弱性的出現與機制
技術分析
Libbitcoin Explorer(版本 3.0.0–3.6.0)使用梅森旋轉演算法產生器 (MT19937) 產生私鑰,僅使用 32 位元系統時間值(以奈秒或毫秒為單位)進行初始化。 此
程序按如下方式執行:
- 種子值取自目前系統時間。
- 密鑰不是在 128-256 位元的空間內產生的,而是在 32 位元的空間內產生的。
- MT19937產生器本身並不具備加密安全性(可以輕易地從輸出資料中復原) 。 reddit
攻擊是如何實施的
這類攻擊被稱為 「時間種子偽隨機數產生器攻擊」 ,或用通俗的說法, 稱為「牛奶悲傷攻擊」 (與 CVE 名稱類似), 在容錯研究中 也被稱為 「時空衝擊」 。 github +3
- 錢包創造時間收集 -攻擊者使用間接資料(交易分析、區塊鏈標籤)來確定大致時間視窗。
- 暴力破解分析 -嘗試 MT19937 的 2^32 個可能的種子變體,即使在 PC 上,也能在數小時或數天內獲得私鑰。
- 交易分析 -將產生的地址與區塊鏈進行比對,以查找活躍餘額。
- 資金被盜 ——一旦檢測到餘額,資金就會立即提取。 algosone +3
對比特幣生態系統的影響
規模和後果
- 截至2023年8月,比特幣及其他加密貨幣(狗狗幣、以太幣、Zcash等仍易受攻擊)的損失已超過90萬美元。 attacksafe +3
- 此次安全漏洞影響了數十款使用 Libbitcoin 的應用程式和擴充功能創建的錢包。 納斯達克+2
- 大規模自動化攻擊使用可預測私鑰的錢包。 reddit +2
風險及長期影響
- 任何由存在漏洞的工具產生的私鑰都應自動被視為已洩漏 。 nvd.nist+1
- 損失不可逆轉——區塊鏈重組是不可能的。 納斯達克
攻擊的科學分類
- 此攻擊的科學名稱 是「針對偽隨機數產生器的可預測種子密碼分析攻擊」。
- 官方 CVE 編號 : CVE-2023-39910 (Milk Sad 漏洞)。 milksad +3
- 專業術語 :「時間種子暴力破解攻擊」、「時空衝擊」、「弱熵鍵空間掃描」。 milksad+1
結論
偽隨機數產生機制的實現有缺陷,該機制依賴一個弱且可預測的熵源,這為攻擊比特幣加密貨幣的基本安全原則打開了方便之門。已經發生的「Milk Sad」攻擊(CVE-2023-39910)有力地提醒我們,安全始於合理的設計、原始碼驗證以及強制使用加密強度高的隨機數產生器 。
加密漏洞
libbitcoin 程式碼中的加密漏洞:易受攻擊字串的分析
嚴重漏洞
易受攻擊的線路位於第 48-49 行:
cpp:thread_local auto twister = std::make_unique<std::mt19937>(
std::mt19937(possible_narrow_sign_cast<uint32_t>(
high_resolution_clock::now().time_since_epoch().count())));
詳細的漏洞分析

主要安全問題
1. 利用時間作為熵來源 reddit+2
程式碼使用時間 high_resolution_clock::now().time_since_epoch().count()初始化隨機數產生器。這創建了一個可預測的熵源,因為:
- 時間值可以很容易地猜測或計算出來 cwe.mitre+1
- 時間變化具有可預測性,並且在短時間視窗內可能的值數量有限 ubiqsecurity+1
2. 限制為 32 位元 milksad+2
該函數 possible_narrow_sign_cast<uint32_t>()強制將熵減少到 32 位,這表示:
- milksad+1 的初始狀態最多有 2^32 (≈43 億) 種可能。
- 我們得到的不是加密強度高的 256 位元熵,而是 32 位元 milksad+1。
- 在普通電腦上,幾天之內就能發動完全暴力破解攻擊 milksad+1
3. 梅森旋轉演算法在密碼學上不安全 simonrs+2
MT19937 存在已知的密碼學弱點:
- 在觀察了 624 個連續的 schutzwerk+1 輸出後,很容易預測結果。
- 並非用於加密目的 。 ycombinator+1
- 易受 GitHub+1 狀態復原攻擊
實際意義
Milk Sad 漏洞 (CVE-2023-39910) github+2
libbitcoin 函式庫中也發現了同樣的漏洞,並導致了:
- 超過90萬美元的加密貨幣被盜 inhq+1
- 數千個比特幣錢包 在HQ+1遭到入侵
- 攻擊者恢復 milksad+1 私鑰的能力
攻擊機制
- 攻擊時間視窗:攻擊者知道stackoverflow+1 錢包的 大致創建時間 。
- 遍歷值 :遍歷此視窗中所有可能的時間值 usenix+1
- 金鑰復原:對於每個時間值,產生對應的inhq+1 私鑰。
- 活動檢查 :檢查產生的位址是否已在 milksad+1 區塊鏈中使用
漏洞修復
要消除此漏洞,您必須:
- 使用加密強度高的熵源 :
cpp:std::random_device rd;
std::seed_seq seed{rd(), rd(), rd(), rd(), rd(), rd(), rd(), rd()};
std::mt19937 generator(seed);
- 使用加密強度更高的偽隨機數產生器 (PRNG) 代替 MT19937 zerolynx+1
- 確保足夠的熵 (加密金鑰至少需要 128-256 位元) ubiqsecurity+1
此 漏洞 表明,在加密應用中正確實現隨機數產生至關重要,尤其是在為加密貨幣錢包產生私鑰時。 reddit +2

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

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

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

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

BitcoinVuln:比特幣生態系統中私鑰產生和可預測熵利用的高階漏洞分析
比特幣生態系統的完整性從根本上依賴安全的私鑰產生。任何偏離密碼學強隨機性的操作都會直接危及價值數十億美元的去中心化資產。近期曝光的ChronoShock (Milk Sad)漏洞(CVE-2023-39910 )揭示了熵初始化缺陷如何導致私鑰被完全恢復,進而造成大規模錢包外洩。 BitcoinVuln框架提供了一種系統化的方法,用於識別、分類和模擬比特幣相關實作中的密碼學弱點。透過檢測熵崩潰、可預測的偽隨機數產生器 (PRNG) 使用情況以及易受暴力破解的確定性序列,BitcoinVuln 有助於繪製密碼故障對區塊鏈安全的影響圖譜。
本文探討了BitcoinVuln的分析方法與 ChronoShock 漏洞之間的交集,重點闡述了結構化的漏洞檢測框架如何評估熵故障的風險並預測其在比特幣中的災難性後果。
背景:比特幣中的熵和偽隨機數產生器漏洞
比特幣的私鑰是均勻分佈在secp256k1金鑰空間中的256位元整數。其主要要求是密鑰必須不可預測。當使用弱偽隨機數產生器(PRNG)時——尤其是使用熵值有限的偽隨機數產生器——攻擊者可以大幅縮小金鑰空間,並透過暴力破解方法恢復私鑰。
- CVE-2023-39910(Milk Sad / ChronoShock)源自 Libbitcoin Explorer(3.0.0–3.6.0),其中 Mersenne Twister RNG 僅使用 32 位元系統時間進行種子。
- 原本可以提供 22562^{256}2256 個可能的密鑰,但有效密鑰空間卻縮減為 2322^{32}232 個種子(≈ 42.9 億種可能性),這在現代 GPU 上很容易透過暴力破解。
- 攻擊者根據區塊鏈元資料重建錢包創建時間,並在很短的時間窗口內迭代所有種子,產生與易受攻擊錢包關聯的確切密鑰。
結果是,攻擊者發動了一次大規模的實際攻擊,在幾個小時內就恢復了私鑰,據報道,全球被盜金額超過 90 萬美元。
BitcoinVuln框架:偵測加密漏洞
BitcoinVuln被設計成一款以取證和研究為導向的工具,用於揭露加密貨幣軟體堆疊中的加密不穩定性。其方法論基於三大支柱:
1. 熵品質評估
- 評估隨機數產生器種子產生中使用的熵源。
- 檢測對可預測的系統時間值或受限的系統熵池的依賴性。
- 標誌熵減少,例如強制轉換為 32 位元整數,這會極大地限制隨機性。
2.偽隨機數產生器密碼分析模擬
- 對 MT19937 等非加密偽隨機數產生器進行建模
rand(),並將其統計分佈與 CSPRNG 進行比較。 - 模擬狀態恢復攻擊,其中對輸出的觀察揭示了生成器的完整狀態。
- 對各種硬體配置進行暴力破解可行性基準測試。
3. 漏洞利用建模
- 重構與 CVE 直接相關的攻擊場景。
- 自動對縮小的種子空間進行暴力破解,並將派生的比特幣地址與區塊鏈進行交叉驗證。
- 根據可擴展性、自動化潛力和利用時間對漏洞嚴重程度進行分類。
透過這種結構化的方法,BitcoinVuln 不僅記錄漏洞,而且量化其在現實世界中的可利用性——這對於安全審計、滲透測試以及對 ChronoShock 等事件的事後分析至關重要。
從比特幣漏洞的角度看 ChronoShock 的影響
將 BitcoinVuln 的方法應用於 CVE-2023-39910,得出以下結論:
- 熵崩潰嚴重性:已確認從 256 位元熵減少到 32 位元值,安全性降低了 22242^{224}2224 倍。
- 暴力破解可行性:攻擊複雜度被認為“低”,在合理的時間窗口內,窮舉搜索需要數小時到數天。
- 可擴展的攻擊:自動化部署完成後,攻擊者可以同時入侵數千個錢包。
- 生態系統影響:除了比特幣之外,任何使用受影響庫的加密貨幣(例如以太坊、狗狗幣、Zcash)在修復之前都仍然存在漏洞。
BitcoinVuln 的分析將 ChronoShock 歸類為大規模入侵漏洞——這個類別表示能夠利用相同的確定性弱點入侵多個獨立用戶和錢包。
長期風險與預防啟示
BitcoinVuln 的框架強調,像 ChronoShock 這樣的漏洞並非孤立事件,而是系統性的加密設計缺陷。持續存在的風險因素包括:
- 開發者錯誤地認為像梅森旋轉演算法這樣的隨機數產生器在密碼學上是「安全的」。
- 過度依賴系統時間或其他低熵環境值。
- 程式碼審計不足,主要著重於熵和鍵空間驗證。
預防性建議:
- 透過 BitcoinVuln 等工具對錢包 RNG 實作進行強制性審計。
- 強制執行密碼學標準(例如 RFC 4086 熵要求)。
/dev/urandom採用透過、getrandom()或基於硬體的 RNG(Intel RDRAND、ARM TRNG)播種的 CSPRNG 。- 區塊鏈取證技術可主動掃描易受攻擊的金鑰範圍並通知用戶。
時空衝擊的科學分類
根據 BitcoinVuln 的分類法,ChronoShock 攻擊的正式定義如下:
- 攻擊類型:可預測種子密碼分析暴力破解
- 向量:時間種子非加密偽隨機數產生器(MT19937)
- 熵減: 256 → 32 位
- 複雜度:多項式時間窮舉法
- 潛在影響:私鑰大規模找回、用戶資產被竊、加密貨幣信任系統遭到破壞
結論
ChronoShock(Milk Sad,CVE-2023-39910)事件凸顯了弱熵產生機制對比特幣和其他加密貨幣構成的致命威脅。借助BitcoinVuln 分析框架,研究人員可以系統地識別、復現和分類此類漏洞,並提供透明的指標來衡量漏洞的嚴重性和實際風險。
最重要的是,這個漏洞凸顯了比特幣的長期韌性並非僅靠協議設計就能保證。作為數位所有權基礎的私鑰安全,高度依賴軟體實作。 BitcoinVuln 漏洞表明,如果沒有嚴格的熵分析、漏洞建模和安全的偽隨機數產生器(PRNG)選擇,災難性的私鑰洩漏不僅可能發生,而且不可避免。

BitRecoverPro 和 ChronoShock 漏洞:弱熵利用和比特幣私鑰恢復的科學分析
比特幣生態系統的穩定性和可靠性從根本上依賴私鑰的安全產生。熵種子錯誤不僅會危及單一用戶,還會危及整個網路。 ChronoShock (Milk Sad)漏洞(CVE-2023-39910)的出現表明,隨機數產生中的關鍵缺陷可能導致廣泛的加密攻擊。在此背景下,BitRecoverPro等專業恢復和分析工具對於研究、偵測和緩解此類漏洞至關重要。雖然這些工具的設計初衷是用於合法的私鑰恢復和取證分析,但當加密漏洞成為攻擊比特幣錢包的途徑時,它們的功能同樣能夠揭示出嚴重的風險。
本文對BitRecoverPro進行了科學分析,重點關注其在分析弱熵攻擊、模擬熵缺陷以及展示 ChronoShock 等關鍵漏洞如何實現大規模私鑰重建方面的作用。透過了解此類工具,研究人員可以對攻擊進行分類、分析其影響,並加強比特幣錢包開發中的安全實踐。
BitRecoverPro:功能概述
BitRecoverPro是一個密碼分析和取證研究框架,旨在支援:
- 從損壞或遺失的加密貨幣錢包安全地恢復私鑰。
- 密鑰產生中的熵分析和隨機性測試。
- 密碼學弱點利用模擬,支持 ChronoShock 等漏洞的科學研究。
- 區塊鏈取證,包括監控被盜金鑰和分析可疑錢包活動。
該平台整合了熵驗證器、偽隨機數產生器分析器和暴力重構模組,共同提供了一套完整的工具包,用於評估諸如 CVE-2023-39910 之類的漏洞。
ChronoShock漏洞和弱熵攻擊
ChronoShock /Milk Sad漏洞暴露了Libbitcoin Explorer(版本3.0.0-3.6.0)的一個根本性設計缺陷:私鑰由梅森旋轉演算法(MT19937)偽隨機數產生器生成,並以系統時間的32位元值作為種子。這使得原本具有加密安全性的金鑰的熵值僅為2^32。
攻擊機制
- 熵弱點:以毫秒或奈秒為單位的時鐘時間可以在秒內預測。
- 種子縮小:限制為 32 位元狀態空間(約 43 億種可能性)。
- 可預測的偽隨機數產生器:MT19937 是一個非密碼學安全的產生器,可以重構。
- 暴力破解可行性:借助平行計算,密鑰空間可以在數小時或數天內耗盡。
一旦重建完成,與易受攻擊的錢包產生器關聯的所有私鑰都可以輕鬆推導出來,並與區塊鏈位址進行匹配。
BitRecoverPro 和 ChronoShock 漏洞利用
在研究環境中,BitRecoverPro提供了一種結構化的方法來展示和分析漏洞:
- 熵重構模組
- 使用時間種子模型模擬弱種子條件。
- 產生與存在漏洞的 Libbitcoin 庫相同類型的可預測私鑰。
- 蠻力引擎
- 實現有針對性的 2^32 搜尋操作和最佳化,大幅縮短攻擊時間。
- 允許研究人員測量性能指標並評估攻擊的可擴展性。
- 區塊鏈驗證層
- 將產生的比特幣地址與區塊鏈資料進行交叉引用。
- 判斷鍵值是否與實際餘額相符。
- 法證恢復報告
- 文件提供了私鑰洩漏的科學證據。
- 為研究、同行評審和漏洞披露提供可重複的實驗。
這些功能表明,可預測的熵如何導致完全的妥協,將學術上的漏洞轉化為現實世界中的錢包被盜。
科學對比特幣安全的影響
將BitRecoverPro整合到漏洞分析中,為比特幣生態系統凸顯了幾個重要的經驗教訓:
- 可預測的熵等於安全性受損:如果私鑰可以追溯到系統時間種子,那麼它們在功能上就等於公鑰。
- 大規模入侵的可能性:攻擊不是孤立的,而是自動化的,同時影響數千個錢包。
- 區塊鏈損失的不可逆性:與傳統金融不同,比特幣沒有機構提供的恢復機制。一旦密鑰洩露,資產將永久遺失。
- 研究必要性:只有透過 BitRecoverPro 等框架測試 PRNG 熵,開發人員才能預先避免災難性缺陷。
風險影響及因應措施
- 重新發現風險:未維護的庫和過時的分支可能會重新引入弱熵種子。
- 法證軍備競賽:合法的研究人員使用復原環境,而攻擊者可能會模仿這些環境進行大規模攻擊。
- 對策設計:
- 強制使用CSPRNG,例如 Fortuna、基於 ChaCha20 的 DRBG 或作業系統級熵來源。
- 將熵審計標準化,作為任何加密貨幣庫安全審查的一部分。
- 鼓勵獨立研究人員使用 BitRecoverPro 等工具進行取證模擬。
結論
ChronoShock (Milk Sad)漏洞(CVE-2023-39910)鮮明地提醒我們,密碼學中最薄弱的環節往往是熵源。僅憑一個 32 位元可預測的種子,比特幣生態系統中整類私鑰就遭到了致命的洩漏。
BitRecoverPro透過其熵分析、暴力破解模擬和區塊鏈驗證模組,既是科學研究的推動者,也是安全警鐘。它能夠在易受攻擊的錢包中重現攻擊,凸顯了弱隨機數產生器的系統性風險。
對於比特幣和更廣泛的加密貨幣生態系統而言,教訓是毋庸置疑的:只有加密強度高、經過徹底審計的熵源和偽隨機數產生器才能保障數位資產的安全。如果不嚴格遵守這些原則,像 ChronoShock 這樣的漏洞將繼續威脅去中心化信任的根基。

研究論文:比特幣私鑰產生的弱熵加密漏洞:原因、攻擊與預防
產生具有足夠加密強度的私鑰是任何加密貨幣錢包安全性的基礎。然而,歷史表明,即使是知名專案在選擇熵生成演算法時也曾犯下嚴重錯誤,導致數百萬資產成為攻擊者的獵物。本文以 Libbitcoin 專案為例,對一個典型的漏洞(「ChronoShock」)進行了技術分析,並提出了一個包含安全程式碼的可靠解決方案 。
弱熵脆弱性是如何產生的?
利用可預測的熵源
在某些函式庫(例如 2023 年補丁之前的 Libbitcoin)中,私鑰產生使用梅森旋轉偽隨機數產生器 (MT19937),並初始化為目前系統時間(通常為毫秒或奈秒的 32 位元值)。易受攻擊的片段範例: schneier+2
cpp:thread_local auto twister = std::make_unique<std::mt19937>(
std::mt19937(static_cast<uint32_t>(high_resolution_clock::now().time_since_epoch().count()))
);
密碼不穩定的原因
- MT19937 不是一個密碼學安全的偽隨機數產生器 :它的狀態可以從一組輸出值中重構出來,而且它不具備抵抗分析和預測的能力。 nccgroup +1
- 系統時間是一個非常有限且可預測的來源 :在幾秒鐘的時間內,攻擊者可以嘗試所有種子值,從而恢復該時間段內產生的所有可能的私鑰。 codeforces +2
- 將熵減少到 32 位元:比特幣金鑰必須具有 128-256 位元隨機性;32 位元允許 任何人在幾小時或幾天內進行完全暴力破解攻擊。
時空衝擊攻擊:機制與後果
- 破解時間視窗:攻擊者知道或猜測錢包的創建日期後,會在種子中嘗試適當的時間值。 news.ycombinator +2
- 克隆生成器:在暴力破解之後,攻擊者會重新產生一串相同的「隨機」數字,取得私鑰和地址,然後監控區塊鏈上這些地址的比特幣活動。 news.ycombinator +1
- 規模:透過大規模使用相同的演算法,攻擊變得自動化,導致數千個錢包被盜用(Milk Sad、ChronoShock、VulnKeyHunter)。 newsletter.blockthreat +2
極佳且安全的修復方法
安全解決方案的要求
- 僅使用密碼學強度高的隨機數產生器(CSPRNG)
- 熵的來源是作業系統和硬體設備(RDRAND,,
/dev/urandom)getrandom,而不是系統時鐘。 paragonie +1 - 保證每個私鑰至少具有 128–256 位元熵。 paragonie +1
C++安全實作(POSIX/跨平台)
cpp:#include <random>
#include <array>
#include <limits>
// Генерация приватного ключа с использованием системного генератора
std::array<uint8_t, 32> generate_secure_private_key() {
std::array<uint8_t, 32> key{};
// std::random_device читает из /dev/urandom | Windows API | getrandom()
std::random_device rd;
for (auto &byte : key) {
byte = rd(); // std::random_device возвращает 32 бита, используем только младший байт
}
return key;
}
現代 C++ 解決方案
cpp:#include <random>
#include <array>
#include <limits>
std::array<uint8_t, 32> generate_secure_private_key() {
std::array<uint8_t, 32> key;
std::random_device rd;
std::generate(key.begin(), key.end(), std::ref(rd));
return key;
}
最佳實踐:
- 對於關鍵任務,請使用經過驗證的加密庫:libsodium(
randombytes_buf())、OpenSSL(RAND_bytes())、Botan、Crypto++ 等 。 - 絕對不要將
mt19937系統rand()時鐘或其衍生資料用於任何類型的加密活動。 codingnest +2 - 為確定性錢包產生種子時,使用加密強度高的熵,並結合鹽值、額外的使用者輸入等。
結論
忽視強熵生成原則會導致加密應用(尤其是區塊鏈應用)用戶遭受災難性後果。經典的「ChronoShock」(Milk Sad)漏洞表明,即使是大型項目,如果忽略加密隨機性的基本要求,也會犯下簡單的錯誤。開發人員應定期審查金鑰產生架構,僅使用經過驗證的CSPRNG系統和工具,並且程式碼審計應識別並阻止任何依賴可預測資料的嘗試。 schneier +3
作為最終的科學結論,最好強調在密碼強度、實際損害以及無條件實施最佳實踐的必要性方面,絕不容許做出任何妥協:
比特幣私鑰產生機制中的一個嚴重漏洞,被稱為「牛奶悲傷」(Milk Sad,CVE-2023-39910),清晰地展現了低估基本加密安全原則會導致全球用戶資金遭受巨大且不可逆轉的損失。攻擊者利用一個弱且可預測的熵源和一個不穩定的隨機數產生器,能夠發動自動化攻擊,從而在短短幾天甚至幾小時內完全恢復加密貨幣錢包的私鑰並攻破錢包。這次攻擊威脅到整個比特幣生態系統,顯示即使是單一實現錯誤也可能對數百萬人造成致命打擊。該事件凸顯了持續進行原始程式碼審計、使用完全加密安全的生成器以及在全球範圍內傳播區塊鏈系統安全設計方法的重要性。如果不嚴格遵守這些標準,在去中心化科技時代,就無法實現真正的數位獨立,也無法保障金融資產的安全 。
- https://www.youtube.com/watch?v=aBhr4QnjggQ
- https://github.com/demining/Milk-Sad-vulnerability-in-the-Libbitcoin-Explorer-3.x
- https://dcentwallet.ru/milk-sad-vulnerability-in-the-libbitcoin-explorer-3-x-library-how-the-theft-of-900000-from-bitcoin-wallet-btc-users-was-carried-out/
- https://cryptorank.io/news/feed/b0d75-the-milk-sad-vulnerability-and-what-it-means-for-bitcoin
- https://bitcoinmagazine.com/technical/the-milk-sad-vulnerability-and-what-it-means-for-bitcoin
- https://cointelegraph.com/news/newly-discovered-bitcoin-wallet-loophole-let-hackers-steal-funds-slow-mist
- https://www.publish0x.com/cryptodeep/milk-sad-vulnerability-in-the-libbitcoin-explorer-3x-library-xqqmoqd
- https://milksad.info
- https://creators.spotify.com/pod/show/bitcoin-explained/episodes/Episode-83-The-Milk-Sad-Vulnerability-e287jpb
- https://github.com/demining/Milk-Sad-vulnerability-in-the-Libbitcoin-Explorer-3.x/blob/main/README.md
- https://nvd.nist.gov/vuln/detail/CVE-2023-39910
文學/引語:
- https://b8c.ru/author/wallet/page/11/
- https://www.schneier.com/blog/archives/2023/08/cryptographic-flaw-in-libbitcoin-explorer-cryptocurrency-wallet.html
- https://news.ycombinator.com/item?id=37054862
- https://www.nccgroup.com/research-blog/cracking-random-number-generators-using-machine-learning-part-2-mersenne-twister/
- https://www.mecs-press.org/ijitcs/ijitcs-v8-n9/IJITCS-V8-N9-4.pdf
- https://codeforces.com/blog/entry/61587
- https://newsletter.blockthreat.io/p/blockthreat-week-32-2023
- https://paragonie.com/blog/2016/05/how-generate-secure-random-numbers-in-various-programming-languages
- https://codingnest.com/generating-random-numbers-using-c-standard-library-the-problems/
- https://acta.imeko.org/index.php/acta-imeko/article/view/IMEKO-ACTA-09%20(2020)-04-17/pdf
- https://github.com/anneouyang/MT19937
- https://dspace.cvut.cz/bitstream/handle/10467/69409/F8-BP-2017-Molnar-Richard-thesis.pdf?sequence=1&isAllowed=y
- https://www.sciencedirect.com/science/article/pii/S0377042720302594
- https://github.com/libbitcoin/libbitcoin-explorer/wiki/cve-2023-39910
- https://stackoverflow.com/questions/54716465/how-can-i-improve-my-code-to-generate-secure-random-numbers
- https://arxiv.org/pdf/2507.03007.pdf
- https://www.reddit.com/r/learnprogramming/comments/gu43cc/c_best_practice_for_gettingusing_random_number/
- https://www.reddit.com/r/Buttcoin/comments/15n1nfe/be_your_own_bank_is_going_great_libbitcoin/
- https://bitcointalk.org/index.php?topic=5539192.0
- https://www.digitalocean.com/community/tutorials/random-number-generator-c-plus-plus
- https://www.reddit.com/r/cpp/comments/iufxze/im_pretty_sure_theres_a_massive_widespread/
- https://www.ubiqsecurity.com/exploring-cwe-335-incorrect-usage-of-seeds-in-pseudo-random-number-generator-prng/
- https://milksad.info/disclosure.html
- https://cwe.mitre.org/data/definitions/335.html
- https://cwe.mitre.org/data/definitions/337.html
- https://stackoverflow.com/questions/23147385/how-to-exploit-a-vulnerable-prng
- https://blog.inhq.net/posts/milk-sad-vuln1/
- https://milksad.info
- http://simonrs.com/eulercircle/crypto2024/henry-mersenne.pdf
- https://arxiv.org/pdf/1910.06437.pdf
- https://arxiv.org/html/1910.06437v3
- https://www.schutzwerk.com/en/blog/attacking-a-rng/
- https://github.com/deut-erium/RNGeesus
- https://news.ycombinator.com/item?id=25166095
- https://github.com/libbitcoin/libbitcoin-explorer/wiki/cve-2023-39910
- https://www.usenix.org/system/files/conference/usenixsecurity12/sec12-final218.pdf
- https://www.zerolynx.com/en/blogs/news/el-talon-de-aquiles-de-la-criptografia
- https://stackoverflow.com/questions/1397004/better-seeds-than-time0
- https://github.com/anneouyang/MT19937
- https://arxiv.org/html/2410.16965v1
- https://stackoverflow.com/questions/45069219/how-to-succinctly-portably-and-thoroughly-seed-the-mt19937-prng
- https://wiki.sei.cmu.edu/confluence/display/java/MSC02-J.+Generate+strong+random+numbers
- https://stackoverflow.com/questions/77410508/is-it-safe-to-use-stdmt19937-with-fixed-seed-within-unit-tests
- https://www.sciencedirect.com/topics/computer-science/mersenne-twister
- https://github.com/demining/Milk-Sad-vulnerability-in-the-Libbitcoin-Explorer-3.x
- https://github.com/google/randen/issues/7
- https://nvd.nist.gov/vuln/detail/cve-2024-38365
- https://attacksafe.ru/how-hackers-used-the-milk-sad-bug-in-libbitcoin-explorer-3-x-to-steal-900000-from-btc-wallets/
- https://wiki.sei.cmu.edu/confluence/display/cplusplus/MSC51-CPP.+Ensure+your+random+number+generator+is+properly+seeded
- https://stackoverflow.com/questions/1135186/whats-wrong-with-xor-encryption
- https://stackoverflow.com/questions/53751482/c-convert-chronohigh-resolution-clock-to-time-t
- https://www.schneier.com/blog/archives/2023/08/cryptographic-flaw-in-libbitcoin-explorer-cryptocurrency-wallet.html
- https://nvd.nist.gov/vuln/detail/CVE-2023-39910
- http://www.qnx.com/developers/docs/6.6.0_anm11_wf10/
- https://security.snyk.io/vuln/SNYK-UNMANAGED-LIBBITCOINLIBBITCOINEXPLORER-5891151
- https://www.microsoft.com/ru-by/p/bitcoin-timelock-wallet/9nvsbt77l3b2
- https://habr.com/ru/articles/771980/
- https://codeql.github.com/codeql-query-help/java/java-predictable-seed/
- https://dl.acm.org/doi/pdf/10.1145/3715961
- https://service.securitm.ru/vm/vulnerability/fstec/show/BDU:2023-06146
- https://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator
- https://www.boost.org/doc/libs/1_71_0/doc/html/chrono/users_guide.html
- https://arxiv.org/html/2509.09488v1
- https://bitcointalk.org/index.php?topic=5462674.0
- https://stackoverflow.com/questions/34277478/consistent-timestamping-in-c-with-stdchrono
- https://stackoverflow.com/questions/37426832/what-are-the-uses-of-stdchronohigh-resolution-clock/37440647
- https://www.nobsbitcoin.com/milk-sad-vulnerability-disclosure/
- http://en.cppreference.com/w/cpp/chrono/high_resolution_clock.html
- https://codeforces.com/blog/entry/61587?locale=ru
- https://github.com/arvidn/libtorrent/issues/7196
- https://www.reddit.com/r/Bitcoin/comments/15nbzgo/psa_severe_libbitcoin_vulnerability_if_you_used/
- http://en.cppreference.com/w/cpp/chrono/time_point/time_since_epoch.html
- https://www.fox-it.com/nl-en/cracking-random-number-generators-using-machine-learning-part-2-mersenne-twister/
- https://www.reddit.com/r/cpp/comments/e97i6f/i_made_a_cheat_sheet_for_stdchrono_because_i_have/
- https://www.ledger.com/blog/funds-of-every-wallet-created-with-the-trust-wallet-browser-extension-could-have-been-stolen
參考文獻 :
- https://www.nasdaq.com/articles/the-milk-sad-vulnerability-and-what-it-means-for-bitcoin
- https://www.incibe.es/en/incibe-cert/early-warning/vulnerabilities/cve-2023-39910
- https://nvd.nist.gov/vuln/detail/CVE-2023-39910
- https://attacksafe.ru/how-hackers-used-the-milk-sad-bug-in-libbitcoin-explorer-3-x-to-steal-900000-from-btc-wallets/
- https://github.com/libbitcoin/libbitcoin-explorer/wiki/cve-2023-39910
- https://www.reddit.com/r/Buttcoin/comments/15n1nfe/be_your_own_bank_is_going_great_libbitcoin/
- https://github.com/demining/Milk-Sad-vulnerability-in-the-Libbitcoin-Explorer-3.x
- https://milksad.info
- https://algosone.ai/news/hackers-steal-900k-through-newly-discovered-bitcoin-wallet-loophole/
- https://creators.spotify.com/pod/profile/bitcoin-explained/episodes/Episode-83-The-Milk-Sad-Vulnerability-e287jpb
- https://www.youtube.com/watch?v=aBhr4QnjggQ
- https://habr.com/ru/articles/771980/
- https://scholar.afit.edu/cgi/viewcontent.cgi?article=4471&context=etd
- https://www.schneier.com/wp-content/uploads/2017/10/paper-prngs.pdf
- https://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator
- https://milksad.info/posts/research-update-9/
- https://stackoverflow.com/questions/68081216/why-using-a-time-based-pseudo-random-number-is-not-cryptographically-secure
- https://news.ycombinator.com/item?id=37055333
- https://cwe.mitre.org/data/definitions/338.html
- https://cryptodeep.ru/milk-sad-vulnerability-in-libbitcoin-explorer/