形同虛設的 安全檢查
錢包所有的防護,都押在一個猜不到的數字上
硬體錢包有幾項職責。它向你展示你實際簽署的內容,而不是讓你去信任一台受感染電腦的螢幕,並將你的金鑰保存在一個抗開蓋攻擊的晶片中。所有這些防禦措施都建立在一個前提上:生成你金鑰的數字是無法被猜測的。如果可以被猜測,攻擊者根本不需要突破任何防禦。 24 個單字組成的助記詞,其隨機池中的組合大約相當於觀測宇宙中每千個原子對應一個數字。如此龐大的數字池是無法被暴力破解的。這就是整個安全性模型的基礎。
12 個單字承載 128 位元的熵,24 個單字承載 256 位元,再加上由該熵經過 SHA-256 計算出的校驗和。BIP-39 將結果延伸為 BIP-32 主金鑰。
12 個單字承載 128 位元的熵,24 個單字承載 256 位元,再加上由該熵經過 SHA-256 計算出的校驗和。BIP-39 將結果延伸為 BIP-32 主金鑰。
COLDCARD 不再從那個數字池裡抽數
2021 年的一項韌體更新悄悄停止了錢包向其專用亂數晶片索取該數字的行為,改由普通軟體計算出一個替代。並排對照之下,這就是整起事件的全貌:
這並非降低三分之二的安全性。每一個位元都會使工作量倍增,因此少掉 88 個位元會將破解難度縮小 2⁸⁸ 倍。對人類而言,一兆是一個大數字,但對租用高效能機器來進行窮舉破解的人來說,這只是一個小數字。
種子生成從 ckcc.rng_bytes() 被修改為 ngu.random.bytes()。Coinkite 估計 Mk3 上剩餘的搜尋空間約為 40 位元,Mk4/Mk5/Q 上約為 72 位元,而目標是 128 位元。Block 的獨立分析得出相同數量級(小於 2⁴⁰·⁷ 和小於 2⁷³·³),並發現了導致殘存空間更小的更嚴格條件。2
種子生成從 ckcc.rng_bytes() 被修改為 ngu.random.bytes()。Coinkite 估計 Mk3 上剩餘的搜尋空間約為 40 位元,Mk4/Mk5/Q 上約為 72 位元,而目標是 128 位元。Block 的獨立分析得出相同數量級(小於 2⁴⁰·⁷ 和小於 2⁷³·³),並發現了導致殘存空間更小的更嚴格條件。2
因為軟體無法做到真正的隨機
想想看是什麼讓拋硬幣變得無法預測。投擲的力度、地心引力、空調吹出的微風、地面的微幅震動。幾十種你能說出的影響因素,以及幾十種你說不出來的因素。沒有人能計算出拋硬幣的軌跡,所以沒有人能預先喊出結果。 軟體運作的方式不同。它對少數幾個初始值執行固定的公式,並產生固定的答案。在這裡,這些初始值是晶片的序號以及設備開機運行了多長時間。掌握了這套配方和原料的攻擊者可以直接重新計算出輸出結果,而不需要去猜測。
在硬體 RNG 被停用的情况下,rng_get() 連結到了 MicroPython 的 Yasmarang PRNG,並從非機密狀態(UID、SysTick、RTC)中取得種子,此後便没有收集新的熵源,因此候選金鑰可以在離線狀態下被窮舉枚舉。Coinkite 認為,混合了 50 次或以上公平、私密隨機投擲的種子不會單純因為這個問題而面臨風險:50 × log₂6 ≈ 129 位元。3
在硬體 RNG 被停用的情况下,rng_get() 連結到了 MicroPython 的 Yasmarang PRNG,並從非機密狀態(UID、SysTick、RTC)中取得種子,此後便没有收集新的熵源,因此候選金鑰可以在離線狀態下被窮舉枚舉。Coinkite 認為,混合了 50 次或以上公平、私密隨機投擲的種子不會單純因為這個問題而面臨風險:50 × log₂6 ≈ 129 位元。3
而旨在阻止此事的檢查機制問錯了問題
建構版本中原本有一個防護機制,專門用來阻止在沒有硬體生成器的情况下發布韌體。它檢查的是某個設定是否存在,而不是該設定是否被啟用。 該設定確實存在,而且它是關閉的。防護機制保持沉默,建構系統回報沒有錯誤,韌體就這樣發布了。
#ifndef 僅檢查是否有被定義。主機板設定將 MICROPY_HW_ENABLE_RNG 定義為 0(即已定義但被停用),因此 #error 從未觸發,連結器將 rng_get() 解析為軟體備用方案。3
#ifndef 僅檢查是否有被定義。主機板設定將 MICROPY_HW_ENABLE_RNG 定義為 0(即已定義但被停用),因此 #error 從未觸發,連結器將 rng_get() 解析為軟體備用方案。3
引自原始碼的缺陷程式碼。3
五年來,一切看起來都毫無異狀
一個脆弱的恢復助記詞看起來和一個強壯的助記詞完全一樣。二十四個普通的單字、正確的校驗碼,以及一台運作正常的設備。螢幕上没有任何警告,建構過程中也沒有任何錯誤。 原始碼自始至終都是公開的。但要讀懂它,仍然需要有人去打開那個特定的檔案。
輸出的長度、非零性以及不重複性在微弱的 PRNG 上全都能通過檢查,因此常規的冒煙測試也無法發現它。
輸出的長度、非零性以及不重複性在微弱的 PRNG 上全都能通過檢查,因此常規的冒煙測試也無法發現它。
本頁面並非慶功之舉。
Coinkite 公開了此漏洞,發布了技術報告並推送了修補程式。由於 COLDCARD 是開源的,外部研究人員才能夠還原當時發生的經過。
關於估計值的一個提醒:它們描述的是在當前假設下攻擊者面臨的猜測難度,而不是碼錶計時。沒有人能告訴你破解某個特定錢包需要花費多長時間。2
在進行任何操作前請先閱讀本文
你需要採取什麼行動取決於你首次創建恢復助記詞時使用的是哪款設備,而不是你今天手頭上拿著哪款設備。
請假設這種情况仍在發生。這些助記詞在 2021 年變得可以被猜測,而該方法現在已經公開,因此任何人都可以運行相同的搜尋。没有任何修補程式可以從外部修復這個問題,攻擊者也没有理由停手。如果你受到影響,最安全的假設是:時間是你與攻擊者之間唯一的緩衝。
Mk2 與 Mk3:立即轉移你的加密貨幣
受影響的韌體版本範圍為 4.0.1 至 4.1.9。版本 4.2.0 修正了新助記詞的生成方式,但任何更新都無法回溯為既有的助記詞補足隨機性。請在您信任的裝置上建立新錢包,並將資金轉移過去。1
Mk4 與 Mk5:檢查韌體版本
如果助記詞是在低於 5.6.0 版本的韌體(或 Edge 版本的 6.6.0X)上創建的,請更新韌體,在更新後的韌體上建立全新錢包,然後轉移你的資金。單純更新韌體並不會修復舊的助記詞。1
Q:同樣,分界線為 1.5.0Q
請更新至 1.5.0Q 或更新版本(Edge 組建則為 6.6.0QX),建立新錢包、抄寫並測試備份、發送一筆小額測試交易,接著再轉移其餘資金。1
更新 COLDCARD 韌體能修復我已有的助記詞嗎?
我要怎麼查出我的 COLDCARD 助記詞是用哪個韌體版本建立的?
我該如何檢查我的地址是否受到這起事件波及?
擲骰子或密語(Passphrase)能否保護 COLDCARD 的助記詞?
Coinkite 的官方公告涵蓋了所有受影響的 COLDCARD 嗎?
所有 OneKey 裝置皆未受影響
我們發布過的任何型號都不存在這個問題。我們的韌體不包含任何 libngu、Coinkite、COLDCARD 或 CKCC 的依賴項,因此出問題的程式碼路徑根本不存在,你可以在我們的開源儲存庫中親自檢查。在我们當前的硬體中,金鑰來自經過認證的安全元件內部的真正隨機數生成器,絕不是來自主處理器上的軟體。這種替代行為正是此次故障的根源。
我們對此也沒有盲目信任。當消息傳出時,Anzen Lab 端到端地追蹤了我們的隨機數生成過程(它的來源、是什麼在呼叫它,以及決定哪個版本最終到達你設備上的建構設定),並公布了他們檢查的確切檔案。12
閱讀 Anzen Lab 的重新檢驗報告這種事會發生在 OneKey 身上嗎?
這個故障需要三個獨立的條件同時成立。在 OneKey 上,這三個條件都不成立,而且你可以親自檢查這三點。
那麼,OneKey 的隨機數 究竟從何而來?
於 EAL 6+ 認證晶片內部產製
您的金鑰是在專用、具備抗篡改能力的晶片內建立與保存,而非執行其他一般運作的通用處理器。EAL 6+ 是支付卡與身分證所採用的安全保證等級。
具備自我檢測機制的隨機數
該晶片從真實的物理噪聲中生成隨機數,並持續對自身的輸出進行自我測試。如果隨機數開始出現異常,晶片會立即察覺,而不是默默地繼續運作。
我們回頭重新檢驗了自己
在 COLDCARD 的消息傳出後,Anzen Lab 全程追蹤了我們自己的隨機數生成機制(它來自哪裡、是什麼在呼叫它,以及決定哪個版本進入你設備的建構設定),並公布了他們檢查的確切檔案。11


每一台 OneKey 都要通過四重檢查, 而每一重都不盲目信任其他三重
任何單一檢查都可能有遺漏,關鍵在於四重檢查同時遺漏同一問題的機率微乎其微——而 COLDCARD 的教訓正是,只要一個沒人覆核的建置設定就足以釀成事故。
你可以實際驗證的開源
我們的韌體和應用程式都在 GitHub 上公開,且我們的建構過程是可重現的,這意味著你可以自己重新建構程式碼,並確認它產生的軟體與運行在你設備上的完全一致。這就是能夠抓出「程式碼對了,版本錯了」問題的關鍵步驟。
GitHub 上的 OneKey
外部機構的有紀錄審查
安全公司 SlowMist 對我們進行了審計並發布了報告。獨立的評估涵蓋了 OneKey Pro、Classic 1S 以及我們的 SDK。我們的安全實踐通過了 ISO/IEC 27001 認證,Pro 和 Classic 1S 產品線也通過了由歐盟指定機構進行的 EN 18031 認證。所有內容均已公開發布,絕非自我評估。13
閱讀 SlowMist 審計彙總專門受薪來破解自家產品的團隊
Anzen Lab 是我們內部的硬體、韌體與應用程式安全工程師團隊,並與輪換的外部研究人員合作。他們的工作就是在產品發布之前破壞硬體錢包(包括我們自己的)。當這個消息爆發時,他們重新徹底檢查了 OneKey 的隨機數生成機制,並公布了他們檢查的確切檔案。11
閱讀 Anzen Lab 分析報告我們付費請外人找出我們的錯誤
任何人都可以透過 BugRap 的公開計畫或直接發送至 [email protected],私下向我們回報漏洞並獲得獎金。漏洞嚴重性決定了發放金額,並依據 CVSS 進行評分。這麼做的核心目的,是讓通報我們變得比出售漏洞更有價值。15
BugRap 上的 OneKey檢測你手上的錢包
哪些錢包可以進行檢查
外部人員是否能夠讀取設備的原始隨機數。這只是一個狹窄的維度。請參閱下方的註解。
這起事件為其他人帶來的思考
OneKey 是否受到 COLDCARD 亂數熵失效事件的影響?
COLDCARD 亂數熵失效影響了哪些硬體錢包?
我可以測試自己錢包的亂數品質嗎?
我該如何判斷某個硬體錢包是否值得信任?
參考資料
以下來源檢索於 2026 年 8 月 6 日。首先是 Coinkite 官方的公告與技術報告,其次是獨立的原始碼層級分析與鏈上統計。損失數字仍在被向上修正:Galaxy Research 在 8 月 4 日確認損失為 1,596 枚 BTC,並估計疑似損失接近 2,055 枚 BTC。
- 1. Coinkite · COLDCARD Mk3 Seed Generation Security Advisory
- 2. Coinkite · Technical Deep Dive into the Entropy Issue
- 3. Block Engineering · Predictable RNG Fallback and 32-Bit Reseed in COLDCARD Firmware
- 4. CoinDesk · Bitcoin cold-wallet attack spreads to 4,500 addresses as losses near $89 million
- 5. CoinDesk · Major bitcoin wallet flaw drains 594 BTC in 25-minute sweep
- 6. Crypto Briefing (Galaxy Research) · Galaxy Research identifies 1,367 BTC drained in attacks on Coldcard addresses
- 7. The Crypto Times (Galaxy Research) · Coldcard hack losses hit $100M with 1,596 BTC stolen in ongoing attack
- 8. The Crypto Times (Galaxy Research) · 15 attackers exploit ongoing Coldcard hack as losses approach $130M
- 9. The Hacker News · Coldcard Hardware Wallet Flaw Linked to $70 Million Bitcoin Theft in 41 Minutes
- 10. Bitcoin Magazine · Coinkite Releases Fixed Firmware After Coldcard Bug
- 11. OneKey Anzen Lab · The COLDCARD Entropy Failure: How a Silent RNG Fallback Cost Users $38 Million
- 12. OneKey · Statement: OneKey devices are not affected by this issue
- 13. OneKey · OneKey has passed a security audit by SlowMist — separate reports cover the Pro, the Classic 1S and the SDK
- 14. SlowMist · SlowMist Audit Report — OneKey Pro
- 15. BugRap · OneKey Bug Bounty Program
- 16. entro.tools · Entropy Check — verify your hardware wallet's randomness (device support matrix)








