首頁LBank 新聞中心
Coldcard 比特幣漏洞解析:熵、金鑰生成方式,以及位元為何重要
coldcard-bitcoin-exploit-explained-entropy-keys-bits
Coldcard 比特幣漏洞解析:熵、金鑰生成方式,以及位元為何重要
Coldcard 錢包的一個缺陷讓比特幣持有人損失超過 1 億美元,並重新引發了關於你是否能信任骰子的舊爭論。
2026-08-04 來源:decrypt.co

重點摘要

  • 一個韌體錯誤導致Coldcard錢包從軟體偽隨機產生器而不是為此設計的硬體晶片產生種子。
  • 此錯誤有效地將舊型號的搜尋空間從128位元縮小到大約40位元。
  • 以下是這一切的意義,以及它如何導致超過1.3億美元的比特幣被盜。

有人一直在清空那些本不應該被觸及的比特幣錢包。

這些幣儲存在Coldcard設備上,這是一種來自加拿大製造商Coinkite的硬體錢包,它們從不接觸網路。沒有釣魚連結。沒有惡意軟體。沒有被盜的筆記型電腦。攻擊者只是設法計算出了私鑰。

Galaxy Research現已追蹤到超過1,596枚比特幣在三波已證實的攻擊中被盜,另有一波疑似攻擊可能將總數推高至約2,055枚比特幣——按目前價格計算約為1.3億美元。其中一次掃蕩在41分鐘內轉走了7,000萬美元。Coinkite表示至少有15個不同的攻擊者參與其中。

該公司於8月1日發布了一份技術背景說明,解釋了問題所在。這是一份異常坦誠的文件,簡單來說,就是這個錢包八年來一直在擲加載的骰子,卻沒有人注意到。

零仍具意義

2021年,Coinkite將Coldcard的加密技術遷移到libsecp256k1,這是比特幣核心(Bitcoin Core)所使用的相同函式庫。這是一個明智的決定。然而,問題出現在整合過程中。

這次遷移悄悄地將種子生成從Coldcard自己的硬體亂數產生器,轉移到MicroPython的軟體備援方案——一個名為Yasmarang的小型演算法,它適用於完全沒有亂數晶片的設備。

🚨LOSSES FROM COLDCARD HACK EXCEED $100M

High confidence 1,596 BTC has been stolen from ~7300 addresses across 3 confirmed waves + more 14 smaller incidents.

If we add suspected (but unconfirmed), the total balloons to $130m (2k BTC).

More in the thread below 👇 pic.twitter.com/RAl3ib67qa

— Galaxy Research (@glxyresearch) August 3, 2026

Coldcard有亂數晶片。它只是不再被呼叫了。

原因幾乎難以置信。一個編譯守護(build guard)使用了#ifndef,它檢查一個設定是否存在,而不是它是否已開啟。Coinkite將該設定定義為零,表示「關閉」。因為零仍被視為已定義,所以安全檢查通過,編譯完成。這兩個版本的函數有相同的簽名,因此沒有任何錯誤跡象。

「COLDCARD上大部分的亂數來自一個我不知道實際存在於原始碼中的PRNG,」Coinkite寫道,這裡指的是偽隨機數產生器——一種軟體,它產生看起來隨機但實際上遵循從起始值開始的固定配方生成的數字。

如果輸入相同的起始值到這個配方,你每次都會得到相同的輸出。

在運行韌體4.0.1至4.1.9的Mk2和Mk3設備上,該起始值來自晶片的序列號和其時鐘。Coinkite估計由此產生的搜尋空間約為40位元。新型號混合了一些安全元件的熵,將其提升到大約72位元。

兩者都未能達到目標的128位元。

這個差距比看起來更重要。位元是指數。一個128位元的搜尋空間包含的組合比可觀測宇宙中的原子還要多,沒有人能夠搜尋它。而40位元大約是萬億個組合——一個不錯的筆記型電腦就能夠處理。你每失去一位元,工作量就會減少一半。

Block的工程團隊發布了自己的分析報告,指出新型設備的有效安全元件搜尋空間為2^32個候選,平均約2^31次嘗試。他們對舊型主機板的評估更為直接:對於已知的設備ID、計時器狀態和呼叫歷史,錢包的生成是確定性的。

而確定性與隨機性相反,隨機性對於密碼學至關重要。

不是「弱」,而是可預測

Coinkite懷疑這個錯誤是被機器發現的。「我們必須假設有人利用AI審查了我們以前的韌體版本,並偶然發現了這個問題,」該公司寫道,並補充說他們最近也用目前最好的AI模型檢查了相同的程式碼,卻一無所獲。「攻擊者和防禦者都擁有相同的AI工具,但今天它沒有幫助我們,反而只幫助了壞人。」

所有受影響型號的修復韌體都已發布。它無法修復現有的種子;這些錢包必須重新生成並將資金轉移。Decrypt已經報導了像這樣的漏洞攻擊後,氣隙儲存(air-gapped storage)如何改變,並追蹤了損失已超過1.14億美元。

熵的真實含義

熵是衡量攻擊者未知資訊量的指標。

換句話說,它基本上是不確定性,以位元計算。一位元就像擲一次硬幣:有兩種結果,猜測者有一半的機會猜對。十位元是1,024種結果。每增加一位元,猜測者的工作量就會增加一倍。

比特幣錢包是一個被保密的巨大數字。人們發送幣的地址是從它數學推導而來,而且推導過程是單向的——你可以從私鑰到地址,但永遠無法反向推導。

因此,每個錢包的安全性都取決於一個問題:攻擊者需要嘗試多少個數字?

如果這個數字是透過128位元的熵選取的,答案是「超出了物理學允許的範圍」。如果它是透過40位元選取的,答案是「給我點時間」。

這與量子計算威脅值得爭論的特性相同——量子機器會攻擊將私鑰連結到地址的數學。Coldcard的漏洞從不需要這麼做。它在數學介入之前就讓私鑰變得可猜測。

這就是術語變得模糊的地方。偽隨機產生器產生的輸出能夠通過隨機性的統計測試,因此基本上任何試算表都不會標記它。但該輸出仍完全由其種子值決定。它看起來是隨機的,但實際上並非如此。

統計隨機性和密碼學不可預測性是不同的特性,Coldcard的輸出會通過第一項測試,但會完全無法通過第二項。

真正的隨機性必須來自物理噪音:電路中的電氣抖動、熱波動、放射性衰變。這就是Coldcard上硬體晶片的作用。而那個編譯旗標切斷的就是這個晶片。

然後Luke Dashjr提起了骰子

當用戶爭相重新生成種子時,許多人選擇了明顯的低技術解決方案。Coldcards允許你擲實體骰子,並將結果作為熵輸入。Coinkite自己的指導方針認為,使用至少50次獨立、私密骰子擲出結果製作的種子不受此漏洞影響。

這聽起來可能很愚蠢,但該公司實際上出售一袋「100顆可愛的小骰子」,讓整個過程對你來說更容易。

7月31日,比特幣核心開發者Luke Dashjr發布了一項警告:「有不少人建議/使用骰子來緩解Coldcard的漏洞。請注意,普通的骰子並非設計為密碼學安全的。如果你打算這麼做,你可能應該購買精密賭場骰子。即使如此,也要有另一個熵的來源。」

比特幣推特對此反應激烈。

一位用戶寫道:「哈哈,現在連骰子都不能擲了。」「自託管(Self custody)完蛋了……」另一位用戶問他是否應該雇用帕金森氏症患者來擲骰子。(這不太好聽。)

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位元中減少了四位元。這就是一個明顯不公平的骰子所造成的全部影響。

Dashjr說廉價骰子有可測量的偏差並沒錯——注塑成型的點數會從每個面上移除稍微不同量的塑膠,這正是賭場使用平齊填充的精密骰子的原因。他對物理原理是正確的,但對風險評估是錯誤的。從256位元中損失四位元,你還剩下252位元。而Coldcard的漏洞讓用戶只剩下40位元。

然而,他的建議中隱藏著一個更尖銳的論點,它與製造公差無關。它關乎不要信任任何單一來源。Coldcard的失敗並不在於其熵略有偏差——而在於其中一個組件悄無聲息地停止了作用,卻沒有人發現。

該怎麼辦

如果你在受影響的Coldcard上生成了種子,且沒有使用骰子擲骰(確實如此)或強大的BIP-39密碼短語,那麼該種子已被洩露。

更新韌體,生成新種子,驗證指紋,發送測試交易,然後轉移所有資產。Coinkite的公告逐一型號地說明了操作步驟。匯出的種子會帶有這個缺陷——將有問題的種子移動到不同的錢包應用程式並不能解決任何問題。

對於其他人來說,重點並不是硬體錢包壞了,也不是骰子是個陷阱。

而是「隨機」只是一個說法,而說法需要驗證。Coldcard的原始碼始終是公開的。預期的硬體RNG就存在於二進位檔中。審查者確認了它的存在,但從未確認種子生成器是否實際呼叫了它。

八年來的審計都查看了正確的程式碼。但沒有人檢查它是否實際運行了。