Coldcard 比特幣漏洞解析:韌體錯誤如何壓縮金鑰熵並導致 1.3 億美元失竊
重點速覽
- •建置設定錯誤讓 Coldcard 錢包改用軟體偽隨機數產生器,而非原本設計的硬體亂數晶片,導致 Mk2 與 Mk3 裝置的熵從 128 位元降至約 40 位元。
- •Galaxy Research 已確認至少有 1,596 BTC 在三波攻擊中被盜,若計入疑似第四波,總損失可能達約 2,055 BTC,約 1.3 億美元。
- •儘管 Coldcard 的原始碼是公開的,這項漏洞仍約莫 8 年未被發現。
- •Coinkite 已為所有受影響機型釋出修補韌體,但無法修復既有種子,使用者必須重新生成錢包並手動轉移資金。
- •Coinkite 懷疑攻擊者是透過 AI 協助的程式碼分析發現漏洞,而公司自己近期用 AI 檢視同一份程式碼時並未找出問題。

韌體錯誤導致 Coldcard 硬體錢包在生成種子時,使用了軟體偽隨機數產生器,而不是為此設計的專用硬體亂數晶片。這個缺陷實際上把搜尋空間從 128 位元縮小到舊款機型約 40 位元,使攻擊者得以計算私鑰,並清空原本不應可觸及的錢包。
這些資金存放在 Coldcard 裝置上——這是由加拿大公司 Coinkite 製造的硬體錢包,設計上應保持離線。Coldcard 一直在比特幣安全社群中被廣泛推薦,特別是因為它的 air-gapped 設計與透明架構,因此對於正是因為安全聲譽而選用該裝置的用戶而言,這次失誤尤其重大。事件中沒有釣魚連結、惡意軟體或失竊裝置,攻擊者只是推算出了私鑰。
Galaxy Research 目前已追蹤到三波已確認攻擊中共被盜超過 1,596 BTC,另有疑似第四波,若計入則總量約升至 2,055 BTC,以當前價格計約 1.3 億美元。單次掃空行動在 41 分鐘內轉走了 7,000 萬美元。Coinkite 表示,至少有 15 名不同攻擊者參與其中。大多數大規模加密貨幣失竊都依賴社交工程、交易所入侵或智慧合約漏洞;而這次能讓攻擊者僅憑裝置中繼資料計算金鑰的弱點,屬於完全不同的攻擊面。
該公司於 8 月 1 日發布了一份技術背景說明,解釋出錯原因。這份文件罕見地坦率;簡而言之,就是這個錢包在 8 年內等於一直在掷灌鉛骰子,卻沒有人注意到。
零仍然是某種值
2021 年,Coinkite 將 Coldcard 的密碼學遷移到 libsecp256k1,也就是 Bitcoin Core 使用的同一套函式庫。問題就出在這個整合過程。
這次遷移在不顯眼的情況下,把種子生成從 Coldcard 自己的硬體亂數產生器,改到了 MicroPython 的軟體後備方案——一個名為 Yasmarang 的小型演算法,原本就是為完全沒有亂數晶片的裝置而設計。
🚨COLDCARD 攻擊損失超過 1 億美元
高信心顯示,已有 1,596 BTC 自約 7,300 個地址被盜,分布在 3 波已確認攻擊,加上另有 14 起較小事件。
若把疑似但未確認的部分計入,總額將膨脹至 1.3 億美元(2k BTC)。
更多內容見下方串文 👇 pic.twitter.com/RAl3ib67qa
— Galaxy Research (@glxyresearch) August 3, 2026
Coldcard 確實有亂數晶片,只是它不再被呼叫。
原因小到幾乎難以置信。某個建置保護條件使用了 #ifndef,它檢查的是某個設定是否存在,而不是是否已開啟。Coinkite 將該設定定義為零,代表「關閉」。由於零仍然算是已定義,安全檢查因此通過,建置也順利完成。函式兩個版本的簽名完全相同,所以看不出任何異常。這類建置設定錯誤——也就是前處理器指令靜默地選錯程式路徑——在 C 與 C++ 開發中是已知缺陷類型,但也極難透過測試發現,因為編譯後的二進位在所有可觀測行為上都會正常運作。
「COLDCARD 上大部分的隨機性,原來來自一個我不知道實際存在於原始碼庫中的 PRNG,」Coinkite 寫道,這裡指的是偽隨機數產生器——一種看起來像隨機、但其實是從某個起始值依固定規則產生數字的軟體。只要每次輸入相同的起始值,輸出就會完全一樣。
在執行 4.0.1 到 4.1.9 韌體的 Mk2 與 Mk3 裝置上,這個起始值來自晶片序號與時鐘。Coinkite 估計因此形成的搜尋空間約為 40 位元。較新的機型則混入少量 secure element 熵,將搜尋空間提升到約 72 位元。
兩者都沒有達到 128 位元,也就是目標值。
這個差距比表面看起來更重要。位元是指數。128 位元的搜尋空間,其組合數量比可觀測宇宙中的原子數還多,因此暴力搜尋幾乎不可能。40 位元則大約只有一兆個可能值——一台普通筆電就能處理。每少一個位元,攻擊者需要做的工作就減半。
Block 的工程團隊也發布了自己的分析,認為較新裝置的有效 secure element 搜尋空間為 2^32 個候選值,平均約需 2^31 次嘗試。對較舊板子的判斷更直接:在已知裝置 ID、計時器狀態與呼叫歷史的情況下,錢包生成是可預測的。可預測性正好是加密所必須避免的狀態。
不是「弱」,而是可預測
Coinkite 懷疑這個漏洞是透過自動化程式碼分析被找到的。「我們必須假設,有人使用 AI 來檢視我們先前版本的韌體,並意外發現了這個問題,」公司寫道,並補充說他們最近也用市面上最好的 AI 模型之一跑過同一份程式碼,結果沒有發現任何問題。「攻擊者與防禦者使用的是同樣的 AI 工具,但今天它沒有幫到我們,反而只幫了壞人。」
所有受影響機型都已釋出修正版韌體。但它無法修復既有種子;那些錢包必須重新生成,資金也必須移走。Decrypt 先前曾報導這類攻擊後 air-gapped 儲存的變化,並追蹤損失攀升至 1.14 億美元以上。相關報導與損失追蹤均有說明。
熵到底是什麼
熵衡量的是攻擊者不知道多少。換句話說,也就是以位元計算的不確定性。1 個位元就是一次擲硬幣:兩種結果,猜中率是 50%。10 個位元代表 1,024 種結果。每增加 1 個位元,猜測者的工作量就加倍。
比特幣錢包本質上是一個被保密的巨大數字。人們收款所用的地址,是從這個數字以數學方式推導出來,而且這個推導只有單向——可以從金鑰推到地址,但無法反推回去。
因此,每個錢包的安全性都回到同一個問題:攻擊者需要嘗試多少個數字?如果這個數字是以 128 位元熵選出的,答案就是「多到物理極限都不允許」。如果是 40 位元,答案就是「給我一點時間」。
這也是量子運算威脅值得討論的原因——量子機器會攻擊金鑰與地址之間的數學關係。Coldcard 的漏洞根本不需要那麼複雜,它在數學發揮作用之前,就已經讓金鑰變得可猜測。
這裡的術語很容易混淆。偽隨機產生器輸出的數據會通過隨機性的統計測試,也就是說,它通常不會被試算表之類的工具標記異常。但這種輸出仍完全由其種子值決定,看起來像隨機,其實不是。
統計上的隨機性與密碼學上的不可預測性是不同的屬性。Coldcard 的輸出會輕鬆通過前者,卻會在後者完全失敗。
真正的隨機性必須來自物理雜訊:電路中的電氣抖動、熱波動、放射性衰變。這正是 Coldcard 上那顆硬體晶片原本要提供的功能,也正是建置旗標把它切掉的那顆晶片。
然後 Luke Dashjr 提起了骰子
當使用者忙著重新生成種子時,許多人轉向最直觀的低科技修補方式。Coldcard 允許使用者實際擲骰,再把結果當作熵輸入。Coinkite 自己的指引認為,只要以至少 50 次獨立且私密的擲骰建立的種子,就不會受到這個漏洞影響。
這聽起來或許很蠢,但公司真的還販售一袋「100 cute and tiny little dice」,讓整個流程更方便。
在 7 月 31 日,Bitcoin Core 開發者 Luke Dashjr 發出警告:「不少人建議/使用骰子來緩解 Coldcard 漏洞。要注意,普通骰子並不是為密碼學安全而設計的。如果你要這麼做,最好買精密賭場骰。而且即使如此,也還應該再有另一個熵來源。」
Bitcoin Twitter 對此並不平靜。
一名使用者寫道:「lol 現在連骰子都不能擲了,」並補了一句「自我託管完蛋了……」。另一位則問,是否應該雇用一位罹患帕金森氏症的人來擲骰子。
should I hire someone with parkinsons to throw the dice? — Murern (@Bitcoin_Murern) July 31, 2026
最有技術含量的回應是帶著算式來的。開發者 Justin Sharp 算出一顆品質不佳的骰子到底會損失多少熵:
「太誇張了。完美的 d6 每次擲出提供 2.585 位元。明顯有偏差的骰子,例如某一面有 20% 機率而不是 16.7%,仍大約提供 2.55 位元。99 次擲骰下來,差別大約是 256 位元與 252 位元熵。」
256 位元裡少了 4 位元。這就是一顆肉眼可見不公平骰子的全部代價。
Dashjr 說便宜骰子存在可測量偏差,並不是錯的——注塑形成的點痕會讓每一面被削去的塑膠量略有不同,這也正是賭場使用填平式精密骰的原因。他對物理是對的,但對風險規模的判斷是錯的。從 256 位元掉 4 位元,剩下還有 252 位元;Coldcard 的漏洞卻把使用者留在 40 位元。
不過,他的建議背後其實藏著更尖銳的論點,而且不在於製造公差,而在於不要信任任何單一熵來源。Coldcard 的失敗不是因為它的隨機性只有輕微偏差,而是因為其中一個元件悄悄停止提供貢獻,卻沒有人察覺。
該怎麼處理
如果你曾在受影響的 Coldcard 上生成種子,且沒有使用擲骰子(真的)或強力的 BIP-39 密語,那麼這組種子應視為已遭入侵。
建議步驟是:更新韌體、生成新種子、驗證指紋、先發送一筆測試交易,然後再移轉全部資金。Coinkite 的公告按不同型號逐一說明了流程。匯出的種子會把缺陷一併帶走——把受損種子匯入另一個錢包應用,並不能解決問題。
對其他人來說,這起事件的重點不是硬體錢包有問題,也不是骰子是陷阱,而是「隨機」本身是一種主張,而主張需要驗證。Coldcard 的原始碼一直都是公開的,原本應該使用的硬體 RNG 也確實存在於二進位檔中。審查者確認它存在,卻從未確認種子產生器真的有呼叫它。Coldcard 所擁抱的開源模式,前提正是社群審查能在攻擊者之前找出缺陷。8 年的審計看對了程式碼,卻沒有人檢查它到底有沒有被執行。