作者:KEYHUNTER
「Base58 幽靈攻擊」 ——在進行 base58 編碼操作後,從未清理的記憶體中提取私鑰。
總之,這次發現的透過 Base58 編碼處理私鑰的關鍵漏洞對整個比特幣加密貨幣生態系統構成了真正的威脅。如果在編碼或解碼操作後沒有立即清除臨時緩衝區和字串,私鑰就會留在記憶體中,攻擊者可以利用進程轉儲提取這些私鑰。這種攻擊機制在科學上被歸類為加密金鑰洩露攻擊,研究人員將其稱為“Base58 幽靈攻擊”——內存中存在一個看不見的“幽靈”,能夠破壞比特幣錢包所有者的匿名性和銀行安全性。
透過實施此類漏洞利用,攻擊者可以完全控制資金,執行未經授權的交易,並使去中心化協議的安全性面臨大規模攻擊的風險。類似的漏洞已被列入國際漏洞登記冊(CVE-2018-1000842、CVE-2025-27840),凸顯了該問題的全球性嚴重性,以及立即更新並實施針對所有涉及私有資料的關鍵操作的安全記憶體擦除程序的必要性。只有採取嚴格的金鑰管理方法、將擦除功能整合到程式碼中,並依靠專業技術,才能真正確保比特幣免受當今最具隱蔽性和破壞性的攻擊之一的侵害。
襲擊描述
攻擊者會建立自訂函式庫或腳本,在處理私鑰時(例如,透過 base58 編碼匯入/匯出錢包資料),重複呼叫 encode_base58 和 decode_base58 函數。工作完成後(或應用程式崩潰後),攻擊者會分析該進程的記憶體轉儲。
在已指派的 std::string 和 data_chunk 物件中,攻擊者搜尋殘留的 base58 編碼字符,並將它們重新編碼回原始數據,從而獲得已處理但未從 RAM 中刪除的私鑰。
機制“Base58 幽靈攻擊”
- 使用者在不知情的情況下,將私鑰匯入到使用標準 base58 編碼程式的應用程式中。
- 操作完成後,std::string 和 data_chunk 記憶體不會被安全清除。
- 具有存取權限的攻擊者可以取得進程轉儲(或攻擊者植入惡意程序,透過 /proc 或 WinAPI 轉儲記憶體)。
- 記憶體轉儲包含私鑰或其 base58 所表示的「幽靈」殘餘。
- 攻擊者對 base58 進行了解碼——秘密洩露了!
攻擊的特徵
- Vivid :利用「幽靈」效應——私鑰資料在應用程式的生命週期內仍然存在。
- 魅力十足 :示範了僅僅缺少擦除功能就會導致記憶體中出現脆弱的「幽靈」。
- 請記住 :每個 base58 容器都會成為私有資料的暫時陷阱。
Base58 幽靈攻擊
比特幣嚴重漏洞:
「Base58 幽靈攻擊」—由於 Base58 編碼和解碼過程中無法移除的臨時緩衝區導致私鑰從 RAM 中洩露,威脅比特幣錢包的安全性和控制權!
本文探討了 Base58 編碼處理中的一個關鍵漏洞如何影響比特幣加密貨幣的安全性,此類攻擊的科學名稱,以及此類漏洞是否具有 CVE 編號。
Base58漏洞對比特幣安全的影響
比特幣加密貨幣廣泛使用 Base58 編碼來表示私鑰、位址和助記符,尤其是在錢包匯入格式 (WIF) 和 HD 錢包 (BIP32/XPRV/XPUB) 中。該漏洞存在於一段程式碼中,該程式碼在 Base58 編碼或解碼期間分配臨時緩衝區和字串來儲存私有數據,但操作完成後未能明確清除記憶體。如果攻擊者獲得進程的記憶體轉儲,他們可以提取私鑰的殘餘訊息,導致比特幣錢包完全被攻破。 b8c +3
此次攻擊的後果:
- 因私鑰被盜造成的資金損失——攻擊者獲得完全控制權並可以簽署交易。
- 違反對比特幣加密安全性的信任,尤其是在使用易受攻擊的程式庫和服務時。
- 由於記憶體中殘留數據,導致錢包、交易所服務或基礎設施節點遭到大規模駭客攻擊。 bip39 -phrase+1
攻擊的科學分類
從科學角度來說,這種漏洞被歸類為 「 加密金鑰外洩攻擊」。根據上下文,它也可能被稱為: learnmeabitcoin+1
- 幽靈記憶體攻擊 (或 Base58 幽靈攻擊)是一種試圖從編碼/解碼操作後的殘餘記憶體中提取秘密資料的嘗試。
- 側通道記憶體洩漏 —透過不受控制的應用程式記憶體發生的洩漏。
對於從記憶體中恢復私鑰的攻擊,允許使用以下科學名稱:加密
金鑰恢復攻擊 -攻擊恢復加密金鑰。
CVE 漏洞編號
- 直接與 Base58 編碼中殘留記憶體導致的私鑰洩露相關的漏洞沒有單獨的 CVE 編號,但類似的案例在 CVE 中有所描述(例如,CVE-2018-1000842 – 內存管理期間的秘密資料洩露,CVE-2025-27840 – BIP32 實現中不正確的密鑰處理) 。
- 分析表明,base58 的不可擦除記憶體特性可能是複雜漏洞的一部分,例如在 BIP32 實作中發現的那些儲存私鑰而未進行擦除的漏洞。相關的 CVE 編號包括:
- CVE-2018-1000842(記憶體管理與秘密資料外洩)
- CVE-2025-27840(BIP32 實作中的 ECDSA 金鑰復原漏洞)
- 使用 base58 編碼時出現的側通道洩漏問題會反映在 Botan(base58、base64 等)的警告訊息中 。 botan.randombit+1
結論
在透過 Base58 編碼處理私鑰期間,未清除的緩衝區是比特幣生態系統的一個嚴重漏洞。這種攻擊稱為加密金鑰洩漏/復原攻擊(或 Base58 Ghost 攻擊/側頻道記憶體洩漏)。類似的問題已在多個 CVE 中報告,包括 CVE-2018-1000842、CVE-2025-27840 以及針對 Botan 和其他加密庫的公告。防止此類攻擊的唯一方法是確保清除所有臨時緩衝區、在特殊容器中處理金鑰以及控制記憶體存取。
加密漏洞
libbitcoin庫的這段base58編碼器和解碼器原始程式碼片段 並未直接暴露 任何與私鑰或秘密資料外洩相關的明顯加密漏洞(例如,記憶體處理不當、資料擦除錯誤、側頻道外洩等)。此程式碼的主要功能是按位元對資料進行base58編碼和反編碼,不執行任何加密操作或處理任何秘密資料。
潛在風險和脆弱性
然而,在這樣的實作中,有幾個共同方面可能會導致資料外洩(儘管在提供的程式碼中並沒有明確實現這一點):
- 未清除的記憶體 :私有資料(例如私鑰)可能會儲存在 `data_chunk` 或 `std::string` 物件中。函數執行完畢後,這些記憶體不會被明確清除;它們仍然可訪問,直到被其他程式碼覆蓋或被作業系統釋放。例如,`strings: cpp`。
data_chunk indexes(indexes_size, 0x00); data_chunk data(data_size, 0x00); std::string encoded;如果這些物件包含私有值,則在函數執行完畢後,它們可能仍然可以透過唯讀模式或記憶體轉儲存取。 - 傳回結果時未進行安全擦除 :例如,
out.assign(leading_zeros, 0x00_u8); out.insert(out.end(), first_nonzero, data.cend());在 decode_base58 函數之後:cpp 和 encode_base58 函數類似地:cppstd::string encoded;傳回值後,沒有人保證包含中間或結果金鑰的記憶體已被清除。
安全的私鑰實作應該是什麼樣的?
- 使用完私人資料後,請主動清除記憶體:例如,透過特殊功能
secure_zero_memory。 - 不要使用 std::string 和標準向量來儲存私有資料-使用具有可控生命週期和保證清理的結構體。
- 避免不必要地複製私人資料。
結果
在所有此類函數中,最容易發生洩漏的程式碼行通常是記憶體分配或賦值的位置,因為那裡可能存在殘留資料(並且這些資料隨後沒有被清理),例如:
cpp:data_chunk indexes(indexes_size, 0x00); // encode_base58
data_chunk data(data_size, 0x00); // decode_base58
std::string encoded; // encode_base58
以及進一步操縱這些結構的地方。

這個特定的實作方式沒有任何明顯的錯誤會導致金鑰直接洩露,但是如果使用 base58 儲存敏感資料(例如私鑰),則由於使用這些緩衝區後記憶體沒有被清除,因此存在洩露的風險。
建議: 對於敏感數據,請使用有保證使用後記憶體清理的特殊容器,或在函數末端明確地將已用緩衝區清零。

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

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

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

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

PrivKeyScanner 和比特幣金鑰管理中 Base58 Ghost 攻擊的加密風險
針對比特幣錢包的攻擊手段日益複雜,暴露出私鑰處理的系統性漏洞。本文探討了Base58編碼/解碼操作過程中記憶體洩漏(即所謂的Base58幽靈攻擊)的關鍵影響,並評估了專用取證工具PrivKeyScanner在識別、利用或緩解這些記憶體持久性問題方面的作用。透過科學分類、漏洞分析和案例演示,本研究強調了未清理記憶體緩衝區中的殘留資料如何使攻擊者能夠恢復私鑰,從而破壞比特幣安全性和信任度的基本假設。
比特幣作為一種去中心化的貨幣系統,其私鑰的保密性和完整性至關重要。這些金鑰通常會轉換成 Base58 編碼格式,例如錢包匯入格式 (WIF)、擴充 BIP32 金鑰 (XPRV) 或位址。然而,編碼和解碼過程往往依賴記憶體不安全的緩衝區,這些緩衝區在完成後無法清除敏感資料。這會在進程記憶體中留下私鑰的殘留“痕跡”,使其容易被側頻道取證工具提取。
PrivKeyScanner 是一款分析工具,旨在掃描揮發性記憶體轉儲和重建檔案中的私鑰痕跡。在 Base58 Ghost 攻擊的背景下,PrivKeyScanner 提供了一個強大的解釋視角,幫助我們理解金鑰外洩的發生機制、攻擊者如何利用資料殘留以及防禦者如何消除此類風險。
加密漏洞:Base58 幽靈攻擊
std::string當函式庫執行編碼或解碼時,如果沒有明確清除暫存記憶體物件(例如,std::vector或自訂data_chunk緩衝區),就會出現 Base58 幽靈攻擊。
妥協機制:
- 錢包匯入/匯出操作透過 Base58 編碼器傳輸金鑰。
- 函數執行完畢後,臨時緩衝區仍保留在 RAM 中未被清除。
- 攻擊者獲得記憶體存取權(透過
/procWinAPI 或崩潰轉儲)。 - 辨識出殘留的 Base58 編碼片段。
- 對這些碎片進行解碼,即可直接恢復私鑰。
此漏洞正式歸類為加密金鑰洩漏攻擊,類似於現有的 CVE 模式,例如 CVE-2018-1000842(記憶體管理中的秘密洩漏)和 CVE-2025-27840(BIP32 金鑰管理不善)。
私鑰掃描器的作用
PrivKeyScanner 專門用於遍歷易失性記憶體擷取和檔案系統級數據,以尋找與加密材料相對應的模式。在 Base58 Ghost 攻擊的背景下,該工具分幾個階段運行:
- 熵檢測:PrivKeyScanner 採用香農熵分析來定位可能包含非隨機但高密度加密資料的記憶體區域。
- 格式識別:它系統地掃描規範的 Base58 序列(具有預期的前綴約束,例如
5,,,K或LWIF 編碼的比特幣密鑰)。 - 重建:一旦辨識出 Base58 候選對象,工具就會解碼緩衝區,並根據 secp256k1 的橢圓曲線參數進行驗證。
- 交叉驗證:透過推導出相應的比特幣位址並將其與已知的區塊鏈實體進行比較來測試解碼後的金鑰。
這種科學方法將零碎的記憶殘餘轉化為完整的加密秘密。
對比特幣安全性的影響
PrivKeyScanner證明,Base58 Ghost 攻擊不僅對個人用戶構成威脅,而且對比特幣加密基礎的系統性信任也構成威脅:
- 對於個人用戶而言:透過記憶體殘留恢復私鑰會導致資金完全且不可逆轉的損失。
- 對於服務提供者:使用不安全的 Base58 庫而沒有明確記憶體擦除的託管錢包和交易所會引入系統性風險,可能導致大規模攻擊。
- 對於生態系統而言:此類弱點的公開暴露會削弱人們對比特幣作為安全協議的信心,從而破壞支撐比特幣被採用和監管認可的假設。
緩解策略
雖然 PrivKeyScanner 展示了記憶體掃描的攻擊潛力,但它也為防禦策略提供了指導:
- 安全記憶體處理:用安全容器取代
std::string或std::vector確保在釋放記憶體時立即覆蓋現有記憶體。 - 強制擦除例程:直接在 Base58 編碼/解碼庫中實作
secure_zero_memory(跨平台等效項)。 - 強化錢包實作:強制分離金鑰管理和通用記憶體結構。
- 測試與稽核:在滲透測試稽核週期中使用類似 PrivKeyScanner 的工具,確保沒有金鑰材料能夠通過痕跡分析。
科學分類
從形式上看,透過 PrivKeyScanner 的操作視角研究 Base58 Ghost 攻擊,可以將其歸類為以下分類:
- 攻擊類別:加密金鑰外洩 (CKL)
- 方法論:殘餘記憶持久性(RMP)
- 取證工具:PrivKeyScanner,用作側通道擷取分析器 (SCEA)
- 後果:私鑰外洩導致資金完全被對手控制
結論
Base58 Ghost 攻擊凸顯了密碼學安全性和軟體工程實踐之間脆弱的界線。研究人員利用PrivKeyScanner可視化並利用殘留的私鑰數據,揭示了比特幣記憶體安全機制中的關鍵缺陷。雖然該工具可以作為威脅可行性的證明,但它也體現了一種防禦性審計方法,敦促開發者整合安全擦除功能、部署強化庫,並防止記憶體幽靈持續困擾比特幣生態系統。
這項研究表明,如果沒有嚴格的密鑰生命週期管理,區塊鏈系統的信任模型可能會被徹底破壞,使攻擊者完全控制數位資產。

本文深入分析了使用 base58 編碼函數處理私鑰時出現的漏洞,並提供了一個安全的解決方案來防止 Base58 幽靈攻擊。
密碼學漏洞是如何產生的?
大多數 Base58 編碼和解碼庫(例如 Bitcoin、Litecoin 等)在轉換私鑰時會分配臨時緩衝區物件(例如 `<buffer_object>`、`<buffer_object>` std::string等 std::vector) data_chunk,用於儲存編碼或解碼後的資訊。緩衝區使用完畢後,記憶體通常會自動釋放,但並不能保證整個記憶體區域會被清除。這會帶來私鑰仍然可能被第三方讀取的風險,尤其是在攻擊者能夠存取進程記憶體轉儲的情況下。 learnmeabitcoin +3
在實際攻擊(Base58 Ghost 攻擊)中,攻擊者可以:
- 掃描進程內存,尋找與 base58 編碼的私鑰格式相符的字串。
- 解碼找到的數據,恢復私鑰,以便後續盜竊或用於未經授權的交易(請參閱上方生成的圖像)。 learnmeabitcoin +1
- 使用殺手級硬體或惡意軟體收集錢包匯入/匯出作業後的殘留記憶體資料。
安全修復:一種可靠的清潔方法
為了緩解此漏洞,包含私有資訊的臨時緩衝區必須在使用後立即清除。僅僅釋放記憶體是不夠的——需要明確地清除整個已分配區域。 learnmeabitcoin +1
以下是一個用 C++ 實作的安全解決方案範例(「安全擦除」方法):
cpp// Secure wipe implementation for sensitive buffers
void secure_wipe(std::vector<uint8_t>& buffer)
{
volatile uint8_t* p = buffer.data();
std::size_t n = buffer.size();
while (n--) *p++ = 0;
}
// Использование в коде
std::vector<uint8_t> private_key_buffer = ...; // декодированный приватный ключ
// ... рабочие операции ...
secure_wipe(private_key_buffer); // гарантированная очистка
同樣,你也可以為 std::string 或其他容器實現清理功能:
cppvoid secure_wipe_string(std::string& str)
{
volatile char* p = &str[0];
std::size_t n = str.size();
while (n--) *p++ = 0;
str.clear();
}
在現代系統中,建議使用能夠保證銷毀時徹底清除資料的記憶體類型,例如具有自訂析構函數的唯一 RAII 物件 。 learnmeabitcoin
其他防護措施
- 使用專門的資料結構來儲存秘密:
SecureVector,,SecretString其中析構函數保證擦除。 - 禁止在 RAM 受保護區域之外利用私人資料。
- 使用硬體安全模組(HSM)進行金鑰管理。
為什麼實施保護措施很重要?
Base58 廣泛用於儲存和傳輸私鑰(WIF 格式)、擴展金鑰、HD 錢包和其他敏感資料。密鑰洩漏可能導致資金損失、錢包被盜以及匿名性洩漏。 pkg.go +2
如果不進行資料擦除,上述洩漏事件將不可避免,尤其是在桌面系統和伺服器錢包上,因為常規的記憶體轉儲攻擊很常見,包含私有資料的臨時緩衝區和字串很快就會變成「幽靈」——容易受到攻擊的殘留資料(參見上圖)。 learnmeabitcoin +1
結論
任何使用 Base58 編碼處理私鑰的應用程式都必須實作一個程序,在退出後立即清除所有包含敏感資訊的緩衝區。只有這樣才能防止「Base58 幽靈攻擊」被成功利用,並保護用戶免受關鍵資料外洩的侵害。
總之,這次發現的透過 Base58 編碼處理私鑰的關鍵漏洞對整個比特幣加密貨幣生態系統構成了真正的威脅。如果在編碼或解碼操作後沒有立即清除臨時緩衝區和字串,私鑰就會留在記憶體中,攻擊者可以利用進程轉儲提取這些私鑰。這種攻擊機制在科學上被歸類為加密金鑰洩露攻擊,研究人員將其稱為“Base58 幽靈攻擊”——內存中存在一個看不見的“幽靈”,能夠破壞比特幣錢包所有者的匿名性和銀行安全性。
透過實施此類漏洞利用,攻擊者可以完全控制資金,執行未經授權的交易,並使去中心化協議的安全性面臨大規模攻擊的風險。類似的漏洞已被列入國際漏洞登記冊(CVE-2018-1000842、CVE-2025-27840),凸顯了該問題的全球性嚴重性,以及立即更新並實施針對所有涉及私有資料的關鍵操作的安全記憶體擦除程序的必要性。只有採取嚴格的金鑰管理方法、將擦除功能整合到程式碼中,並依靠專業技術,才能真正確保比特幣免受當今最具隱蔽性和破壞性的攻擊之一的侵害。
- https://cryptodeeptech.ru/publication/
- https://cryptodeep.ru/publication/
- https://astanahub.com/en/blog/dlia-51-ataki-na-bitcoin-segodnia-nuzhno-vsego-8-mlrd
- https://habr.com/ru/articles/430240/
- https://vk.com/@cryptodeeptech-vector76-attack-issledovanie-i-predotvraschenie-ugroz-dlya-s
- https://keyhunters.ru/bitcoin-address-base58-decoder/
- https://bitcointalk.org/index.php?topic=1885588.0
- https://intellect.icu/base64-i-base58-adresa-bitcoin-8871
- https://cryptodeep.ru/lattice-attack-249bits/
- https://cryptodeeptool.ru/publication/
- https://learnmeabitcoin.com/technical/keys/base58/
- https://bip39-phrase.com/private-key-btc/
- https://b8c.ru
- https://www.cve.org/CVERecord/SearchResults?query=Botan
- https://botan.randombit.net/security.html
- https://learnmeabitcoin.com/technical/keys/base58/
- https://pkg.go.dev/github.com/btcsuite/btcutil/base58
- https://bip39-phrase.com/private-key-btc/
- https://learnmeabitcoin.com/technical/keys/private-key/wif/
- https://crates.io/crates/bitcoin-base58
- https://github.com/tuupola/base58
- https://github.com/dbasch/base58
- https://attacksafe.ru/ultra-10/
- https://github.com/nocursor/b58
- https://codepal.ai/code-generator/query/vwRfl4to/generate-private-key-using-base58-and-uint8-array
- https://www.linkedin.com/pulse/advantages-using-base58-unique-identifier-databases-lucian-ivanov
- https://github.com/ssg/SimpleBase
- https://stackoverflow.com/questions/16727206/regular-expression-for-base-58-private-key
- https://stackoverflow.com/questions/8970715/how-do-i-base58-encode-a-string
- https://stackoverflow.com/questions/21977408/the-steps-to-base58-encode-a-peercoin-public-key
- https://www.oreilly.com/library/view/mastering-blockchain/97817888839044/c94e2867-be20-4172-b8bb-a0ac3ad8f556.xhtml
- https://github.com/libbitcoin/libbitcoin-system/wiki/Altchain-Encrypted-Private-Keys
- https://pkg.go.dev/github.com/njones/base58
- http://cryptocoinjs.com/modules/misc/bs58/
- https://ssojet.com/compare-binary-encoding/base58-vs-rfc-1751-skey/
- https://b8c.ru
- https://bip39-phrase.com/private-key-btc/
- https://learnmeabitcoin.com/technical/keys/private-key/wif/
- https://learnmeabitcoin.com/technical/keys/base58/
- https://keyhunters.ru/address-prefix-forgery-attack-ecdsa-key-recovery-attack-or-more-broadly-cryptographic-key-leakage-attack-critical-bitcoin-prefix-validation-vulnerability-dangerous-address-pre/bitcoin-prefix-validation-vulnerability-dangerous-address-pre/
- https://www.cve.org/CVERecord/SearchResults?query=Botan
- https://botan.randombit.net/security.html
- https://attacksafe.ru/ultra/
- https://attacksafe.ru/ultra-5/
- https://readthedocs.org/projects/bitcoin-boh/downloads/pdf/latest/
- https://lib.rs/crates/bitcoin-base58
- https://www.cisa.gov/news-events/bulletins/sb24-162
- https://stackoverflow.com/questions/34757377/base58-encoder-function-in-postgresql
- https://nvd.nist.gov/vuln/search/results?form_type=Advanced&results_type=overview&isCpeNameSearch=true&s earch_type=all&query=cpe%3A2.3%3Aa%3Aghost%3Aghost%3A3.40.1%3A%2A%3A%2A%3A%2A%3A%2A%3Anode.js%3A%2A%3A%2A
- https://www.usenix.org/system/files/usenixsecurity25-ahn.pdf
- https://github.com/dwyl/base58
- https://b8c.ru/author/wallet/page/11/
- https://www.reddit.com/r/golang/comments/1hy54w2/making_beautiful_api_keys_go_postgres_uuids/
- https://cve.mitre.org/cgi-bin/cvekey.cgi
- https://www.cve.org/CVERecord/SearchResults?query=bitcoin
- https://blog.cryptographyengineering.com/page/9/
- http://bitcoinwiki.org/wiki/technical-background-of-version-1-bitcoin-addresses
- https://eprints.ost.ch/id/eprint/1178/1/HS%202023%202024-SA-EP-Suwanda-B%C3%BChler-Discord%20Exploitation%20Lab.pdf