一個形同虛設的 安全檢查
錢包所有的防護,都押在一個猜不到的數字上
硬體錢包有幾項工作。它向你展示你實際簽署的內容,而不是讓你去信任受感染電腦的螢幕,並將你的金鑰保存在專門設計來防止被打開的晶片中。所有這些防禦都假設你的金鑰所產生的數字是不可能被猜到的。如果可以的話,攻擊者就永遠不必突破其中任何一道防線。 生成 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)








