更正(2026年10月27日):本文先前版本稱這個缺陷始於 Coldcard 韌體 4.0.0,只列出 Mk4、Mk5 與 Q 的修正韌體,並稱以 BIP39 密語保護的種子不受威脅。Coinkite 的安全通告指出,Mk2/Mk3 第一個受影響的版本是 4.0.1,這兩款機型的修正版本是 4.2.0;通告也提醒,強度不足的密語可能被猜中,並建議密語使用者同樣盡快遷移。通告也沒有提供 Mk2/Mk3 種子的熵位元數。我們已更正相關段落。最新指引請以 Coinkite 的安全通告與 COLDCARD 安全狀態頁面為準。
2026 年 7 月 31 日 01:31 UTC,比特幣開始從一批錢包中流出,而這些錢包的主人什麼也沒有做。到了 01:56——二十五分鐘之後——約 594 BTC、價值約 3,800 萬美元的資產,已從大約 500 個單簽名錢包中被掃空。Galaxy Research 的後續分析與 Chainalysis 的相關報導,更將受影響範圍連結到分布於約 1,196 個地址、總計最多約 1,083 BTC 的資金。沒有人被釣魚,沒有人安裝惡意軟體,也沒有人批准過任何一筆交易。受害者唯一的共同點,是錢包的建立日期——因為真正失效的是錢包的熵:助記詞賴以生成的隨機性,在錢包誕生的第一秒便已定型。
這些錢包都是在 Coldcard 硬體裝置上生成的,而其背後的缺陷,已在正式出貨的韌體裡潛伏了五年多。本文將說明事情的經過、這類漏洞為何得以長期隱形、它對硬體錢包說明了什麼、又沒有說明什麼——以及面對任何錢包的隨機性時該問哪些問題,包括我們自己的錢包在內。
2021 年埋下的缺陷,在 2026 年被兌現
根據 Coinkite 的安全通告,一個韌體缺陷削弱了 Coldcard Mk2 與 Mk3 韌體 4.0.1 至 4.1.9 的種子生成——這個區間始於 2021 年 3 月發布的 4.0.1——也影響了執行修正版本之前韌體的 Mk4、Mk5 與 Q。Coldcard 的安全狀態頁面將修正描述為移除亂數路徑中的一個軟體回退機制。一組 BIP39 助記詞本應編碼 128 位元的熵——即 2¹²⁸ 種可能的種子,一個任何攻擊者都無法窮舉的空間。通告指出,受影響的 Mk4、Mk5 與 Q 種子約有 72 位元的熵,較舊的 Mk2/Mk3 則受影響更嚴重;通告沒有提供這兩款機型的具體位元數,因此本文對受影響 Mk3 種子採用的約 40 位元只是估算,並非出自通告的數字。2⁴⁰ 大約是 1.1 兆個候選——對人類而言是天文數字,對機器而言卻完全可以窮舉。這就是 Coldcard 漏洞的一句話解釋:種子生成悄悄失去了大部分隨機性,而表面上沒有任何跡象洩露這一點。
有兩類人受到的影響小得多。強度足夠且獨一無二的 BIP39 密語會增加一道獨立屏障:通告指出,僅憑被削弱的種子熵不足以觸及密語錢包。但過短、常見、有規律或重複使用的密語可能被猜中,而且任何密語都無法修補底層的弱種子,因此 Coinkite 建議密語使用者同樣盡快遷移。以至少 50 次公平、獨立、私下進行的擲骰結果生成的種子,僅就此問題而言不受威脅;擲骰次數不足或紀錄不確定者,廠商建議遷移。Coinkite 披露了問題並發布了修正後的韌體——Mk2 與 Mk3 為 4.2.0;標準版通道上 Mk4 與 Mk5 為 5.6.0,Q 為 1.5.0Q;Edge 通道上為 6.6.0X 與 6.6.0QX。而在這中間的五年裡,受影響的錢包運作得完美無瑕,看起來與安全的錢包毫無二致。執行這次掃空的人自始至終不需要接觸任何一位受害者:窮舉薄弱的金鑰空間、推導地址、與鏈上資料比對,然後在一個 25 分鐘的視窗內把一切轉走。
無聲的熵退化:為什麼這些種子看起來很隨機
令人不安之處在於,受影響的種子從頭到尾沒有任何看得出的異樣。一個由 40 位元可預測輸入建構出來的種子,產出的依然是十二個再普通不過的 BIP39 單詞,帶著有效的校驗碼。錢包接受它、推導地址、簽署交易;每一個畫面顯示的,都與一個強種子錢包所顯示的一模一樣。
統計檢定同樣無能為力:一個以可預測資料為種子的確定性產生器,輸出依然能通過隨機性測試——位元分布良好,只是取自一個小得災難性的可能序列集合。這個弱點藏在一項任何輸出都無法揭露的性質裡:除它之外,本來還可能生成多少個其他種子。這個答案,只有生成程式碼本身知道。
薄弱的種子看起來並不薄弱。2¹²⁸ 與 2⁴⁰ 的差別,只存在於產出那些單詞的程式碼裡。
這正是這類漏洞得以存在多年的原因,也是 Coldcard 事件並非孤例的原因。Libbitcoin bx 工具的 Milk Sad、Trust Wallet 瀏覽器擴充功能的 MT19937 產生器、Cake Wallet、靚號地址工具 Profanity,以及早期瀏覽器錢包的 Randstorm,全都共用同一種形態:CSPRNG(密碼學安全亂數產生器)被一個可預測的來源無聲取代——沒有錯誤、沒有警告、沒有任何可見的差異,直到有人窮舉了那個金鑰空間。
令人不安的教訓
「硬體錢包」描述的是一種產品形態,而不是一種保證。7 月 31 日被掃空的錢包,都是在專為簽名打造的硬體上建立的——而失效的偏偏不是這一層。決定生死的,是一項在多年前就已定型的性質:錢包建立當天,種子是如何生成的。下游的一切——冷儲存、氣隙簽署、仔細驗證——保護的都是金鑰不被偷走。如果金鑰可以被重新生成出來,這一切都無濟於事。
同樣重要的是,Coinkite 及時披露了缺陷並發布了修正韌體。這不是一個關於粗心廠商的故事;這是一種整個行業在硬體與軟體上都反覆重蹈的失效模式。任何錢包——包括我們的在內——距離同一類漏洞都只差一次無聲回退。誠實的問題不是「哪家廠商能夠免疫?」,而是「這個錢包會以什麼方式失效?失效時會有人察覺嗎?」
關於任何錢包的隨機性,該問的五個問題
你不需要是密碼學家,也能提高標準。五個問題就足以把錢包做出有意義的區分:
- 熵的來源是什麼?種子應來自 CSPRNG,而不是時間戳、裝置識別碼,或任何外人有辦法重建的東西。
- 如果該來源失效會發生什麼?可接受的答案是硬性報錯、中止錢包建立。不可接受的答案是悄悄找替代品——無聲回退正是這類漏洞的標誌性特徵。
- 生成路徑是否開源、可驗證?薄弱的熵在輸出中無從察覺,因此程式碼審查是唯一能抓住它的地方。
- 錢包是否支援 BIP39 密語?密語加入了裝置產生器從未經手的秘密材料。在受影響的 Coldcard 上,強度足夠且獨一無二的密語,代表僅憑被削弱的種子無法觸及資金——但弱密語或重複使用的密語可能被猜中,而且任何密語都無法修補弱種子。
- 在多簽中,金鑰是否在彼此獨立的裝置上生成?獨立的裝置意味著獨立的隨機性:一個有缺陷的產生器危及的是一把金鑰,而不是整組門檻。
Ownbit 如何生成熵
這樣的問題,也理應得到關於我們自家產品的具體回答。Ownbit 的助記詞生成分為兩層。在應用層,generateMnemonicRandom(entropy, langIndex) 呼叫標準 bip39 函式庫的 generateMnemonic——預設 128 位元的熵,支援八種 BIP39 詞表:英文、簡體與繁體中文、日文、法文、義大利文、韓文與西班牙文。在函式庫層,bip39 的 randomBytes 取自 crypto.getRandomValues——即平台的 CSPRNG。
這裡真正要緊的,是當該來源不可用時會發生什麼:函式庫會直接拋出錯誤。它不會去查詢時鐘、晶片識別碼或任何次要來源——程式碼中不存在回退路徑。它的失效模式是在建立當下大聲報錯,而絕不是一個悄悄變弱的種子。這項性質——大聲失敗、絕不回退——正是 Coldcard 事件、Milk Sad 與 Randstorm 背後那個缺陷的完全反面:在那些案例裡,生成流程從一個可預測的來源默默繼續了下去。
我們不會宣稱這讓 Ownbit 對程式錯誤免疫;沒有任何誠實的廠商能這麼說。它從結構上移除的,是這一種失效形態:不存在任何一條程式路徑,能讓 Ownbit 錢包悄悄生成一個薄弱的種子。其餘的安全模型,都寫在我們的安全頁面上。
為什麼獨立生成的金鑰能挺過這類漏洞
7 月 31 日的掃空襲擊的是單簽名錢包:一個種子、一個簽名,資金就此消失——正是《你的助記詞是一個單點故障》的教科書案例。多簽改寫了這道算術。在 Ownbit 的多簽錢包中,每一把金鑰都是一組獨立的標準 BIP39 助記詞,在該參與者自己的裝置上生成。假設其中一台裝置恰好帶有這一類缺陷。在2-3 錢包中,窮舉了薄弱金鑰空間的攻擊者只握有一把金鑰——低於門檻。什麼也動不了。一把薄弱的金鑰變成一項維護工作——輪換它——而不是一場損失。
這份保護來自獨立性,而不是來自「多簽」這兩個字。三把在同一款有缺陷裝置上生成的共同簽名金鑰,會一起失守。而三把誕生於真正不同裝置的金鑰——你的日常手機、一支離線保存、以 QR 碼簽名的閒置手機冷錢包、一位家人的裝置——不依賴同一台裝置的產生器,因此一個有缺陷的產生器只會削弱一把金鑰,而不是三把。但這種獨立性並非絕對:執行同一套錢包軟體或同一個函式庫的裝置,仍可能共用同一種失效模式,所以生成程式碼與硬體同樣重要。同樣的邏輯也解釋了強度足夠且獨一無二的 BIP39 密語為何保護了受影響的 Coldcard 使用者:密語是裝置亂數產生器從未產出的秘密材料,因此僅僅窮舉被削弱的種子並不足以動用資金。這道屏障的強度取決於密語本身,底層種子依然薄弱——這也是廠商仍建議遷移的原因。
如果你持有受影響的 Coldcard
三個行動。Coinkite 的安全通告始終是權威來源,並會隨調查進展持續更新:
- 更新韌體,並確認你的機型與發布通道。Coinkite 安全通告中列出的最低修正版本:Mk2 與 Mk3 為 4.2.0(這兩款機型的最終版本);標準版通道上 Mk4 與 Mk5 為 5.6.0,Q 為 1.5.0Q;Edge 通道上為 6.6.0X 與 6.6.0QX。這些只是最低版本,未必是目前建議的版本;完整的最新對照表請見 COLDCARD 安全狀態頁面。在安裝更新之前,請勿在受影響的機型上生成新種子。
- 把資金轉移到在修正韌體上新生成的種子。更新只保護未來的種子,無法強化既有的種子。一個生來只有約 40 位元的種子,永遠都可以被窮舉——請徹底棄用它,絕不再使用,也絕不再把資金轉回它的地址。密語錢包同樣適用:Coinkite 建議密語使用者盡快遷移。請依照官方遷移指南從容進行——先核對新備份與一個收款地址,送出一筆小額測試交易,再轉移其餘資金,並在遷移確認完成前保留舊備份。
- 絕不要把現有的助記詞輸入任何聲稱能「檢查」它是否受影響的網站。把種子輸入任何連網的東西,正是殘餘資金被取走的途徑;每逢這類事件之後,「檢查工具」網站都是屢見不鮮的釣魚套路。
常見問題
什麼是錢包的熵?
錢包的熵,是用來建立助記詞的隨機性。一組標準的 12 字 BIP39 種子編碼了 128 位元的熵——即 2¹²⁸ 種可能的種子。如果產生器是可預測的,實際可能的種子數量便會急遽塌縮,攻擊者就能將其窮舉——無論種子事後被保存得多麼妥當。
我的 Coldcard 受影響嗎?
根據 Coinkite 的安全通告,在韌體 4.0.1(2021 年 3 月)至 4.1.9 上生成的 Mk2 與 Mk3 種子受影響;在 5.6.0(Edge:6.6.0X)之前的 Mk4 與 Mk5,以及 1.5.0Q(Edge:6.6.0QX)之前的 Q 上生成的種子同樣受影響。以至少 50 次公平、獨立、私下進行的擲骰結果生成的種子,僅就此問題而言不受威脅。強度足夠且獨一無二的 BIP39 密語會增加一道獨立屏障,但弱密語可能被猜中,底層種子也依然薄弱,因此廠商建議密語使用者同樣盡快遷移。請在 COLDCARD 安全狀態頁面確認你的機型與發布通道,完成更新,並把資金轉移到新生成的種子。
薄弱的種子能靠肉眼看出來嗎?
不能。薄弱的種子照樣產出十二個正常的單詞與有效的校驗碼,統計測試也無法揭露可預測的來源。強度是生成程式碼的性質,而不是單詞本身的性質——這正是受影響的錢包五年多都無人察覺的原因。
多簽能防範薄弱的熵嗎?
從結構上說,能——前提是各把金鑰在彼此獨立的裝置上生成。一把薄弱的金鑰只給攻擊者一個簽名——低於 M-N 門檻——資金因此不會移動。在同一款有缺陷裝置上生成的金鑰可能一起失守,這正是獨立性與門檻同等重要的原因。
我該停用硬體錢包嗎?
不必。這次的教訓更為具體:「硬體錢包」這個詞本身不是保證——種子如何生成才是。請繼續使用維護良好的裝置、及時套用韌體更新、在支援的裝置上加上強度足夠且獨一無二的 BIP39 密語,並把大額資產放在多簽門檻之後,而不是任何單一種子之後。
如果這次事件讓你重新檢視自己的配置,結構性的解法是:不再讓任何單一種子獨自站在你的資金與攻擊者之間。Ownbit 的多簽錢包把 M-N 門檻架設在多把於獨立裝置上生成的金鑰之上,每一把都是標準的 BIP39 助記詞。每位新使用者都享有 7 天免費試用,而無論如何,你的金鑰始終屬於你。
