Coldcard 漏洞根源:2021 建置錯誤讓硬體亂數失效五年

Elponcrab
分享
Coldcard 漏洞根源:2021 建置錯誤讓硬體亂數失效五年

硬體錢包 Coldcard 的種子亂數漏洞,技術根源在 8 月初被公開。支付公司 Block(由 Twitter 創辦人 Jack Dorsey 創立)的工程團隊,在收到用戶資金遭竊的通報後,於 7 月 30 日與其他研究者各自定位到問題所在:一段 2021 年 3 月寫入的程式碼,讓裝置的硬體亂數產生器形同被關閉,改用可預測的軟體替代方案,而這個缺陷直到近期才被發現。鏈新聞先前已報導這起亂數漏洞的初步情況與官方韌體修復,這篇聚焦已被公開證實的技術成因。

一個 #ifndef 的判斷之差,硬體亂數被整段跳過

根據 Block 公布的技術分析,問題出在 2021 年 3 月把橢圓曲線運算遷移到比特幣核心的 libsecp256k1 函式庫時,一個建置設定被寫錯。韌體在判斷硬體亂數是否可用時,檢查的是這個開關「有沒有被定義」,而不是「是否被設為啟用」。由於該開關的值被設為 0,也就是關閉,這個判斷卻仍然通過,於是程式改去呼叫 MicroPython 內建的軟體亂數 fallback。這條路徑最早出現在 2021 年 3 月 17 日發布的 v4.0.0 韌體,五年間未被察覺。

問題在於,這個軟體 fallback 並不是真正的隨機來源。它的種子只由晶片的固定序號、計時器與時鐘暫存器推導出來,這些值都可預測、或範圍極小。Block 指出,在 Mk2 與 Mk3 的 v4 韌體上,產生的種子幾乎可以完全重算;在 Mk4、Mk5、Q 等較新型號上,因為多了一次重新植入,理論上最多也只有約 2^32 種可能,遠低於一組助記詞應有的強度。這代表攻擊者只要重算或窮舉這些有限的可能,就有機會還原出私鑰。

廣告 - 內文未完請往下捲動

官方停止出貨,並公布各型號的修復韌體

官方 Coinkite 已發布安全公告,並採取一連串補救措施:停止出貨、銷毀受影響的庫存,並逐一 email 通知已收到裝置的客戶。公告同時列出各型號的修復韌體版本,Mk2/Mk3 需升級到 4.2.0 以上,Mk4/Mk5 需 5.6.0 以上,Q 需 1.5.0Q 以上,並要求用戶在更新前不要用這些型號產生新種子。官方也重申,若種子是用「至少 50 次獨立且私密的擲骰」產生的,就不受這個亂數漏洞影響。

損失規模仍是第三方估計,官方尚未證實

至於實際損失規模,各家鏈上分析的估計差距很大,從約 3,800 萬美元到 8,900 萬美元不等,牽涉數百到逾千個地址。但截至目前,Coinkite 官方並未證實任何一筆用戶損失,Block 也表示「尚未做完整的實測來確認可利用性」。此外,有加密社群成員在 X 上公開個人遭竊經過,其中自稱損失 18.25 枚比特幣的 Jonathan Goodman 引發較多討論;也有研究者示範,用 AI 工具在數分鐘內就從開源程式碼找出這個漏洞。這些都屬於個別說法或示範,官方公告並未把 AI 列為攻擊途徑,實際被盜金額也仍待釐清。

對持有 Coldcard 的用戶來說,官方的建議相對明確:先確認自己的型號與韌體版本,只從官方管道更新到修復版本,再在新韌體上重新產生種子,並把資產轉移到新的錢包地址。

風險提示

加密貨幣投資具有高度風險,其價格可能波動劇烈,您可能損失全部本金。請謹慎評估風險。