這篇文章原本只對知乎專欄「加密參考」的會員開放,現在我把它永久公開。
因為這件事有時效性------受影響的地址正在被批量清掃,每晚一天知道,就多一天暴露。把它擋在付費牆後面,對誰都沒有好處。
請讀完,對照第 6 節確認自己在不在名單上,並轉給任何可能受影響的人。
------------以下為正文------------
41 分鐘,1,196 個地址被清空。受害者的共同特徵是:2021 年之後就沒動過幣。 你為自托管做的一切------離線、分片備份、Passphrase、多簽------保護的都是這把鑰匙的一生;但沒有人回去檢查過它的出生。 而鑰匙的出生現場,不留任何痕跡:熵坍縮在鏈上完全不可觀測,它可以已經為真五年,而你今天查不出來。
那 41 分鐘
2026 年 7 月 30 日,比特幣鏈上出現了一批很怪的交易。
怪不在金額,而在節奏和目標。41 分鐘內,1,196 個地址被清空。這些地址彼此沒有關聯,分散在不同的年份、不同的國家、不同的使用習慣裡。唯一的共同點是:它們的主人大多在 2021 年之後就沒有動過這些幣。冷儲、長期持有、教科書式的紀律。
到 8 月 2 日,Galaxy Research 追蹤到的數字是:約 1,367 枚比特幣、約 8,860 萬美元、超過 4,500 個地址。而事後建立的公共取證站點 coldcardentropy.org 在六個證據等級下一共登記了 6,657 個唯一來源地址------其中首波協同清掃是 500 筆交易、594.47722484 BTC,精確到小數點後八位。
7 月 30 日當天,Coinkite 承認了原因:他們的 Coldcard 硬體錢包,從 2021 年 3 月起,一直在用錯誤的方式生成私鑰。
這句話需要停一下才能理解它的分量。不是錢包被黑了,不是助記詞洩露了,不是有人拿到了設備。是這些錢包在出廠後正常工作的每一天裡,生成的每一把鑰匙,都比它應該的樣子弱了十幾個數量級。而且這件事在 2021 年 3 月就已經是真的了,從那天起到 2026 年 7 月 30 日,沒有任何人、任何鏈上數據、任何設備提示能告訴你它是真的。
絕大多數人------包括很多把自托管當信仰的老玩家------理解的自托管風險是這樣的:私鑰在你手裡,所以風險也在你手裡;只要你不洩露助記詞、不被釣魚、不被換機、不被扳手威脅,幣就是安全的。所有的防禦工事都建在"保管"這個環節上。
我認為更準確的是:自托管最脆弱的地方不在保管,而在生成------在那把鑰匙出生的那一瞬間。而與保管風險不同,生成風險是一種"有時間維度的信任假設":它可以在過去某個時刻就已經為假,並且在此後的任何時刻,你都無法通過觀測發現它。你的冷錢包越冷,暴露期越長。
鑰匙的出生證明
先把技術詞全扔掉。
你的助記詞本質上是一串隨機數。"隨機"這兩個字承載了全部的安全性------因為比特幣的私鑰空間大到沒有邊際,安全不來自任何鎖、任何密碼,只來自一件事:沒有人能猜到你的那一串。
那這串隨機數從哪來?硬體錢包裡有一個專門的晶片,靠物理噪聲產生真隨機數------熱噪聲、電路抖動這類物理世界本身的不確定性。它產生 128 位的隨機性,意味著可能性有 2 的 128 次方種,比宇宙裡的原子還多。這就是為什麼你可以放心地把幣放在一張寫著 24 個單詞的紙上。
而這次的事故是:因為一個編譯開關寫錯了,那個物理噪聲晶片根本沒被調用。設備退回去用一個軟體裡的偽隨機數生成器------一個靠公式算出來的、看起來很隨機但其實完全可以重算的東西。結果是 Mk2/Mk3 型號只產生了大約 40 位的有效隨機性。
40 位是多少?大約一萬億種可能。聽起來很多,但對一台願意跑幾天的普通電腦來說,一萬億是一個下午的事。
打個比方
你買了一個高級保險箱,廠商承諾鎖芯有一百二十八位的組合。你把它放在地下室,焊在牆上,鑰匙分成三份埋在三個城市。五年過去,箱子從來沒被撬過,焊縫完好,三份鑰匙都在。然後有一天你打開地下室,箱子空了。
原因是:廠商的生產線上有個開關設錯了,你那一批箱子的鎖芯實際只有四十位組合。箱子沒有被撬------它是被配鑰匙打開的。而且從出廠第一天起,這件事就是真的。你這五年做的所有防護------焊接、分片、異地------保護的是箱子被撬的可能性,而這個箱子從來就不需要被撬。
更麻煩的一點是:這件事沒有任何徵兆。箱子不會響,鎖不會鬆,你每年去檢查也看不出任何異常。你唯一能知道的時刻,就是它被打開的那一刻。
這就是本期的核心:我們習慣於檢查一把鑰匙的一生,卻從來沒有回去檢查過它的出生。而出生現場不留痕跡。
一個 #ifndef 引發的五年
3.1 裝反了的保險絲
2021 年 3 月,Coldcard 做了一次底層遷移------把加密運算切換到比特幣核心生態裡久經考驗的 libsecp256k1,配套引入了自己的 libNgU 庫。這是一次質量提升,動機完全正當。
問題出在這次遷移帶進來的一段防護代碼上。在 random.c(libngu,第 22--31 行)裡,開發者寫了一道保險:如果編譯時沒有啟用硬體隨機數發生器,就直接報錯、停止編譯。這道保險用的是 C 語言的預處理指令:
#ifndef MICROPY_HW_ENABLE_RNG
#error "需要硬體隨機數發生器"
#endif
#ifndef 的意思是"如果這個宏沒有被定義"。寫這道保險的人想法是:只要有人忘了打開硬體隨機數,編譯就會失敗,事故不可能發生。
而實際的固件配置裡,這個宏被定義了,值是 0。
C 語言的 #ifndef 只問"定義過沒有",不問"值是幾"。定義成 0 也是定義過。於是這道保險判定"已經定義了,一切正常",#error 從未觸發,編譯順利通過------而值為 0 的含義恰恰是"硬體隨機數沒啟用"。
保險絲裝反了。它檢查的是"開關這個零件在不在",而不是"開關有沒有撥到 ON"。
於是編譯器把 MicroPython 自帶的軟體回退 PRNG 編了進去。那段上游代碼本身可以追溯到 2018 年 5 月,在 MicroPython 的語境裡它是個合理的兜底;只是它從來沒打算給比特幣私鑰用。
從這一刻起,每一台運行受影響固件的 Coldcard,在用戶按下"生成新種子"時,跑的都是這個軟體公式,而不是那顆物理噪聲晶片。
3.2 四十位到底有多小
Coinkite 自己的技術復盤給出的數字是:
- Mk2/Mk3 → 有效搜索空間約 40 位(應為 128 位)
- Mk4/Mk5/Q → 有效搜索空間約 72 位(安全元件 SE1/SE2 混入了部分獨立熵,起到了部分緩解)
受影響的固件版本是 Mk2/Mk3 的 4.0.1 至 4.1.9(修復版 4.2.0)、Mk4/Mk5 低於 5.6.0(Edge 線低於 6.6.0X)、Q 低於 1.5.0Q(Edge 線低於 6.6.0QX)。
這裡有一處必須點破的數據分歧
Coinkite 官方口徑說 Mk4/Mk5/Q 是 72 位,而 8 月 3 日 Blockhead 的報導援引的分析說,真正進入最終種子的只有約 32 位。
這兩個數字的差距不是小分歧,是四十個數量級的差別。72 位在今天是安全的------全球算力加起來短期內也窮舉不完;32 位則比 Mk3 的 40 位還要脆弱,是幾分鐘的事。一個數字決定的是"Mk4 用戶可以從容遷移"還是"Mk4 用戶此刻就在被掃"。
到目前為止,觀測到的實際清掃集中在 Mk3 時代的單簽地址上,這在方向上支持 Coinkite 的 72 位口徑。但我要提醒的是:這不構成證明。攻擊者當然會先掃成本最低的那一批。這件事本身就是本期命題的一個注腳------當一個假設不可觀測時,"還沒出事"從來不是"不會出事"的證據。
3.3 開源全程在場,全程沒攔住
這是全文最值得付費讀者停下來的地方。
Coldcard 是開源固件。它有公開的代碼倉庫,有社區審閱,有可復現構建(reproducible build)------按理說,這是安全審計能給出的最高配置了。它全程在場,全程沒攔住。
原因有三層,一層比一層反直覺。
第一層:源碼裡那行代碼看著是對的
審閱者讀到 #ifndef MICROPY_HW_ENABLE_RNG + #error,得到的印象是"這裡有防護"。缺陷不在這一行的邏輯,而在它與另一個文件裡的構建配置之間的關係。代碼審閱是逐文件、逐函數進行的;這個 bug 住在文件與文件的縫隙裡。
第二層:可重現構建證明的是"一致",不是"正確"
可重現構建的承諾是:任何人從同一份源碼,都能編出字節完全相同的二進制,所以廠商沒有偷偷塞私貨。這條承諾在本次事故中完整地兌現了------每個人都能重現出同一個二進制,而那個二進制裡裝的是軟件偽隨機數。可重現構建保證的是"你拿到的就是源碼編出來的",它從不保證"源碼編出來的是你以為的那個東西"。
第三層------這一層最要命:兩個隨機數實現的函數簽名是一樣的
Coinkite 在復盤裡明確寫了這一點:硬件 RNG 和軟件回退 PRNG 對外長得完全一樣。這意味著,即使有人真的去逆向二進制、去查調用路徑,看到的也是同一個函數名、同一組參數。要發現問題,你必須去追符號最終解析到了哪個目標文件------這是一個幾乎沒有人會在常規審計裡做的動作。
Coinkite 的修復方式恰恰印證了這一點:新版本明確排除了 MicroPython 的回退 PRNG 對象,並加入了構建期的 RNG 符號校驗------如果板級目標文件沒有提供 rng_get(),或者回退實現沒有被徹底排除,編譯直接失敗。也就是說,修的不是那行代碼,而是把"不可觀測"變成了"編譯期可觀測"。
還有一個耐人尋味的細節:Coinkite 推測,這個潛伏五年的缺陷可能是被一個 AI 模型在審閱開源固件時發現的。Coinkite 創始人 NVK 的說法是:"AI輔助的代碼審查現在能以超過業內最資深專家的速度,找出潛伏的 bug。"
這句話有兩面。好的一面是:這類沉睡多年的假設缺陷,正在第一次變得可批量發掘。壞的一面是:攻擊者拿到的是同一套工具,而且他們不需要先負責任地披露。所有開源的、長期未變的、涉及密碼學原語的代碼,都剛剛進入了一個新的風險時代。
這出戲一共演過三遍
會員級的重量在這一節。熵坍縮不是加密行業的新發明,它是密碼學工程裡一類反復出現的經典事故,而且每一次的形狀都驚人地相似。
4.1 一行被刪掉的代碼,靜默二十個月
2006 年 9 月,一位 Debian 維護者在打包 OpenSSL 時,刪掉了 md_rand.c 裡的兩行 MD_Update(&m,buf,j);。刪除的動機完全善意:這兩行會讀取未初始化的內存,導致調試工具 Valgrind 和 Purify 不停報警。其中一行的旁邊甚至就寫著註釋 /* purify complains */。
問題是,這兩行在不同的上下文裡做著不同的事。原作者只用 #ifndef PURIFY 保護了其中真正有問題的那一行;維護者把兩行都刪了。
結果:整個隨機數種子池失效,唯一剩下的"隨機"來源是進程 ID。而 Linux 默認的進程 ID 上限是 32,768。也就是說,全世界所有用 Debian 及其衍生版生成的 SSH 密鑰、SSL 證書、加密密鑰,可能性總數只有三萬多種。
這個缺陷在 2008 年 5 月 13 日被 Luciano Bello 發現,靜默了大約 20 個月。在那 20 個月裡,沒有任何一台伺服器報過錯,沒有任何一次握手失敗,沒有任何徵兆。所有生成出來的密鑰,在數學上、在格式上、在使用上,都和真正安全的密鑰一模一樣。
4.2 三十二位的時鐘,靜默六年
這一次直接發生在比特幣身上,而且是最接近本次事故的形狀。
Libbitcoin Explorer(命令行工具 bx)的 3.0.0 到 3.6.0 版本,其 bx seed 命令用梅森旋轉算法(Mersenne Twister)生成種子------而這個 PRNG 只用 32 位的系統時鐘做播種。一次 256 位的種子請求,實際拿到的熵只有 32 位,約 43 億種可能,消費級硬件幾天就能窮舉完。
時間線:2016 年 10 月經 PR#559 引入,2017 年 3 月隨 3.0.0 發布,2023 年 5 月才開始被利用,7 月 12 日發生一次大規模協同盜竊(約 29.65 BTC),7 月 21 日在應急響應中被發現,8 月 8 日公開披露,編號 CVE-2023-39910。
最終在比特幣主網識別出 2,600 多個受影響錢包,跨 BTC、ETH、XRP、DOGE、SOL、LTC、BCH、ZEC 多條鏈被盜超過 90 萬美元。
請注意兩個數字:潛伏六年多;鏈上完全無可見性------在被盜之前,這些錢包看起來和任何一個正常錢包沒有區別。
4.3 這一次,壞在了信任鏈的終點
三次事故的機制幾乎同構:一個善意的工程改動 → 熵源被靜默替換 → 長期潛伏 → 某天被批量收割。但這次有三處實質性差異,而且每一處都往更壞的方向走。
第一,位置變了
Debian 那次壞在操作系統的打包層,Milk Sad 那次壞在一個命令行工具------兩者都還有"上游 / 下游"可言,用戶至少理論上有別的選擇。而 Coldcard 是專門為了消除信任而存在的設備。硬件錢包的整套價值主張就是"不要相信任何軟件環境,相信這塊專用硬件"。當信任鏈的終點本身出問題時,鏈上沒有下一環可以退。
第二,暴露期與用戶行為正相關,而且是反向的
這次的受害者畫像是"2021 年後就沒動過幣的人"------也就是紀律最好、最符合最佳實踐的那一批。你越是把幣鎖起來不動,你的暴露期就越長,你就越可能在名單上。Debian 的密鑰可以輪換,SSL 證書本來就有有效期;比特幣的種子不輪換,一次生成,終身使用。
第三,發現方式變了
Debian 那次靠一位研究者的偶然發現,Milk Sad 那次靠被盜後的應急響應回溯。這次可能是 AI 主動掃出來的。這意味著這類缺陷的發現速率正在結構性上升------好消息是存量地雷會被陸續排掉,壞消息是排雷的人和踩雷的人拿的是同一份地圖。
哪些數字能承重,哪些不能
按強度分四級,公司自述與第三方驗證分開。
第一级 · 經濟驗證(已經發生的鏈上事實,最硬)
- 首波協同清掃 → 41 分鐘內清空 1,196 個地址;500 筆交易、594.47722484 BTC|來源:coldcardentropy.org 取證數據集,2026-07-30
- 截至 8 月 2 日累計 → 約 1,367 BTC、約 8,860 萬美元、逾 4,500 個地址|來源:Galaxy Research 追蹤,經 Blockhead 報導,2026-08-03
- 取證數據集規模 → 六個證據等級下共 6,657 個唯一來源地址|來源:coldcardentropy.org,2026-08
- 受害者畫像 → 集中於 2021 年後未動過的冷儲地址|來源:多家報導交叉,2026-07-31
第二級 · 廠商自述(技術根因,權威但需交叉看)
- 根因 → random.c(libngu,22--31 行)用 #ifndef MICROPY_HW_ENABLE_RNG 守衛,固件把宏定義為 0,#error 未觸發|來源:Coinkite 技術復盤,2026-07/08
- 引入時點 → 2021 年 3 月 libNgU 遷移;上游 MicroPython 回退代碼可溯至 2018 年 5 月|來源:同上
- 熵值 → Mk2/Mk3 約 40 位;Mk4/Mk5/Q 約 72 位|來源:同上
- 審計盲區 → 兩個 RNG 實現函數簽名相同,二進制審查無法區分|來源:同上
- 修復方式 → 明確排除回退 PRNG 對象 + 構建期 RNG 符號校驗,缺失即編譯失敗|來源:同上
第三级 · 存在分歧的關鍵數據(必須自己判斷)
- Mk4/Mk5/Q 的真實熵值 → Coinkite 稱約 72 位,第三方分析稱僅約 32 位進入最終種子|來源:Coinkite 復盤 vs Blockhead,2026-08-03。差四十個數量級,直接決定這批用戶的緊迫性;截至發稿未見雙方公開對賬。
第四級 · 觀點與推測(最軟,不承重)
* Coinkite 推測缺陷可能由 AI 模型審閱開源固件時發現;NVK 稱 AI 輔助審查的速度已超過最資深的人類專家
* 獨立研究者認為,全部由受影響設備組成的多簽仍然脆弱,需要有未受影響的簽名者構成多數------此為第三方判斷,非 Coinkite 官方口徑
一個必須打掉的錯覺
---------
很多人看到"修復固件已發布"就鬆了口氣。Coinkite 自己把話說得非常直白------升級固件不會修改、也不會修復已經生成的種子。固件版本管的是未來生成的鑰匙,不是已經出生的那一把。這是本次事故裡最容易被誤讀的一句話,也是最貴的一句。
6. 按緊迫性排隊:誰必須今天就動
=================
命題再漂亮,讀者的幣先得安全。按緊迫性從高到低。
第一檔 · 立刻遷移
----------
在 Mk2/Mk3 上、用 4.0.1 至 4.1.9 固件生成的單簽種子,且當時沒有加骰子熵、沒有設 BIP39 Passphrase。這一檔就是正在被掃的那一批。判斷依據是生成種子時設備上跑的固件版本,不是你什麼時候買的設備。
第二檔 · 儘快遷移
----------
Mk4/Mk5/Q 上、在各自修復版本之前生成的種子。72 位與 32 位的分歧一天沒有對賬清楚,就按最壞假設行事------這類分歧的正確處理方式永遠是取下界。
第三檔 · 大概率安全,但值得核對
-----------------
* 在別處生成、導入到 Coldcard 的種子------Coinkite 確認不在此次問題範圍內,因為它們不是這台生成器的產物
* 生成時加了至少 50 次公平、獨立、且從未被記錄或泄露的骰子熵------Coinkite 稱僅就本問題而言不受影響
* TAPSIGNER、OPENDIME、SATSCARD 不受影響
* Mk1、Mk2 未被 Coinkite 正式納入說明範圍
多簽用戶請特別注意這一條
------------
全部由受影響設備組成的多簽,並不安全。多簽防的是單點被盜、單點故障、單點脅迫,它防不了"所有簽名者的鑰匙都出自同一台壞掉的生成器"。這是本次事故裡最容易被高估的一層防禦------你需要的是有未受影響的簽名者構成多數,而不是"我有多簽所以我沒事"。
關於遷移本身的三條提醒
-----------
第一,遷移是有風險的動作。Bitcoin Well 的提醒說得很到位:匆忙遷移造成的損失,可能比你想躲的那個問題來得更快。抄錯備份、沒在設備螢幕上核對收款地址,這些錯誤不會因為你的新種子熵值完美而消失。正確順序是:裝好已驗證的修復固件 → 生成全新種子 → 記錄並驗證備份 → 在設備螢幕上核對收款地址 → 先發一筆小額測試 → 確認到賬後再遷移餘額 → 全額確認前不要銷毀舊備份。
第二,不要碰任何"種子恢復服務"。這類事故之後必然出現一批號稱能幫你找回資產的騙子,他們要的東西只有一樣。
第三,可以用 coldcardentropy.org 的本地查詢核對地址------它明確說明查詢在瀏覽器本地完成、不上傳不記錄,只輸入公開地址,永遠不要輸入助記詞、私鑰、Passphrase、PIN 或錢包導出文件。但請記住該站自己的免責:未命中不等於安全。
7. 這次事故把成本轉移給了誰
===============
第一,風險從"用戶的操作"轉移到了"廠商的構建流水線》,但責任沒有跟著轉移
-------------------------------------
用戶能控制的所有變量------保管、備份、離線、紀律------在這次事故裡全部失效。真正決定生死的變量是一個用戶完全無法觀測、也無權審查的東西:廠商編譯時某個宏的取值。而在自托管的敘事裡,損失是用戶自己承擔的:沒有存款保險,沒有客服,沒有回滾。自托管把資產的控制權給了你,也把一部分你根本無法控制的風險一並給了你。
第二,"開源可審計"這塊招牌被重新定價了
--------------------
開源的價值是真實的,但這次事故給它劃了一條清晰的邊界:開源保證的是"代碼可以被看",不保證"該看的地方有人看了"。當缺陷住在構建配置裡、住在兩個同名函數的符號解析裡,社區審閱的默認動作覆蓋不到那一層。以後再看到"開源、可復現構建"作為安全賣點,你應該多問一句:誰在檢查符號解析?有沒有構建期的斷言?
第三,成本被轉移給了最遵守紀律的人
-----------------
這是本次事故最刺人的地方。頻繁交易、經常換錢包、把幣放交易所的人,反而躲過了。而 2021 年生成一次、焊死在地下室、五年沒碰的人,正好是名單上的那一批。當風險的暴露期與持有時長正相關時,長期主義本身成了風險因子。這不是道德問題,是結構問題------但它確實會改變一部分人對"冷儲"的理解。
第四,這不是孤例,而是一條正在成形的趨勢線
---------------------
把 2026 年 7 月整月的事故攤開看:全月約 2 億美元、34 起。其中 AFX Trade 2,415 萬(驗證者密鑰)、Ostium 1,800 萬(預言機簽名者密鑰)、Triple-A 1,180 萬(熱錢包)、WEMIX 625 萬(owner key)------全部是密鑰與權限層;而傳統意義上的合約漏洞類只有 Wanchain 1,000 萬、Bonzo Lend 905 萬、Verus 橋 754 萬。Blockaid 的統計是 2026 上半年加密項目被盜超過 10 億美元。攻擊面已經結構性地從"合約寫錯了"遷移到"密鑰的來源、保管與授權鏈出了問題"。而熵坍縮是這條趨勢線的極端形態:不是密鑰被偷,是密鑰從來就沒有被真正隨機地生成過。
8. 替 Coinkite 說句公道話
===================
把最強的一條反駁完整寫出來。
最強反方:這是一個已被控制的、邊界清晰的工程事故,不足以支撐"自托管風險在生成環節"這麼大的結論
------------------------------------------------
展開是這樣的:缺陷的邊界非常清楚------特定廠商、特定型號、特定固件區間;用骰子熵或 Passphrase 的用戶不受影響;導入的種子不受影響;Coinkite 在事發當天就承認、次日就發了修復固件、公開了完整技術復盤,處置速度在行業裡屬於上乘。更重要的是,這恰恰證明了開源生態在起作用:缺陷被發現、被披露、被修復,整個過程公開可查。而 8,860 萬美元相對於比特幣的總市值、甚至相對於 2026 上半年被盜的 10 億美元,都不算大。至於 Mk4/Mk5/Q,72 位在可預見的未來是安全的,絕大多數用戶其實並不在火線上。
我怎麼看
----
這條反駁的每一個事實我都認,處置速度那一條我甚至認為值得表揚------在這個行業裡,當天承認、次日修復、公開完整根因的廠商是少數。
但它回避了命題真正的那一句:問題不是"這次損失有多大",而是"我們有沒有辦法在下一次損失發生之前知道它已經存在"。
Debian 靜默 20 個月,Milk Sad 靜默 6 年,Coldcard 靜默 5 年。三次事故,沒有一次是被"監控發現異常"找出來的------兩次靠人偶然翻代碼,一次靠被盜之後的回溯,這次可能靠 AI 掃描。在整個靜默期裡,所有的儀表盤都是綠的。這不是運氣問題,是這類假設在設計上就不可觀測:一個熵不足的種子,在鏈上、在設備上、在任何監控裡,都和一個完美的種子長得一模一樣。
所以我的結論不是"硬體錢包不能用"------恰恰相反,硬體錢包仍然是絕大多數人最合理的選擇,我不打算把任何人往交易所趕。我的結論是一個結構判斷:
> 一個系統的安全性,取決於它最弱的那個假設;而一個系統的可管理性,取決於這些假設中有多少是可觀測的。加密世界過去十年把巨大的精力投在"讓攻擊更難",幾乎沒有投在"讓假設失效時能被發現"。熵坍縮只是這個空白裡第一個足夠貴、貴到讓人不得不看的樣本。
騙局檢查(講機制不等於背書,這一節必須寫)
---------------------
Coinkite 是成立多年的加拿大公司,創始人 NVK 實名、長期公開活動,產品開源、有公開代碼倉庫與可復現構建,本次事故當天承認、次日發布修復固件、公布了精確到文件與行號的技術復盤。這裡不存在跑路、匿名團隊或惡意後門的問題------恰恰相反,正因為它是這個行業裡透明度最高的一檔,這次事故才更值得所有人認真對待:如果這樣的工程實踐都會靜默五年,那些不開源、不做可復現構建、不公布根因的廠商,情況只會更差,而且你永遠不會知道。
需要提醒讀者警惕的是事故的次生風險:任何主動聯繫你、聲稱能幫你檢測或找回資產、要求提供助記詞或錢包文件的人,一律是騙子。這次事故創造的最大機會不在鏈上,在社工。
五個問題,照任何一個你要托付資產的系統
這是本期真正要交付的東西。把命題壓縮成五個問題,拿去照任何一個你要托付資產的系統------錢包、橋、預言機、托管方、穩定幣、L2、多簽方案。
第一問:隨機性從哪來?有沒有證據證明它真的被調用過?
不要問"用不用硬體隨機數",要問"如果硬體隨機數沒被調用,系統會怎樣"。正確答案只有一個:編譯失敗或啟動失敗。任何"會靜默退回到軟體實現"的設計,都在等一個五年後的早上。 判據:有沒有構建期或運行期的斷言,而不是只有註釋和文檔承諾。
第二問:源碼正確,編出來的二進制就正確嗎?
可重現構建證明的是"所有人編出來的東西一樣",不證明"編出來的東西對"。這次的缺陷正好活在這條縫裡。 判據:除了可重現構建,有沒有符號級校驗------即驗證關鍵函數最終解析到了哪個實現。尤其要警惕兩個實現共用同一個函數簽名的情況:這是審計的天然盲區。
第三問:有沒有本該動態獲取、卻被寫死的值?
熵源是一類,還有一類是硬編碼常量。上一期我們在穩定幣事故裡見過的"預言機把價格硬編碼為 $1.00",和這次的"回退到固定公式的隨機數",是同一種病:一個本該反映外部真實狀態的量,被替換成了一個永遠不變的量,而系統不會因此報錯。 判據:把系統裡所有"應該會變、但你從沒見它變過"的值列出來,逐個問一遍為什麼。
第四問:誰能簽?這個集合有沒有靜默變過?
簽名者集合、管理員權限、升級密鑰------這些的變更往往不產生任何用戶可見的事件。7 月那批事故裡,AFX Trade、Ostium、WEMIX 全部倒在這一層。 判據:變更有沒有鏈上事件、有沒有時間鎖、有沒有第三方能獨立複核當前集合。
第五問(元問題,最重要):這個假設為假時,系統會不會告訴我?如果不會,它已經為假多久了,我查得出來嗎?
把每一個前四問的答案再過一遍這道篩子。能被觀測到的風險是工程問題,不能被觀測到的風險是存在性問題。前者可以靠監控和響應管理,後者只能靠在設計階段把它變成可觀測的------事後沒有任何補救手段。
這套框架的核心是一次視角轉換:把安全審計的問題,從「代碼裡有沒有漏洞」,換成「哪些假設為假時,系統不會報警」。前一個問題有無窮多個答案,永遠查不完;後一個問題的答案通常不超過十條,而且寫下來之後,每一條都可以被改造成一個斷言。
我可能錯在哪
"其實不新"論證
"弱隨機數導致密鑰被破"是密碼學工程的經典教材內容,Debian 和 Milk Sad 都寫進過案例集。如果本期只講到這一步,就該被"我早知道"測試直接淘汰。增量在三處,讀者可以據此判斷夠不夠格:一是不可觀測性作為一個獨立維度------不是"會不會出錯",而是"出錯了會不會有信號",這個維度在主流的安全討論裡基本缺席;二是可重現構建的邊界------它證明一致性而非正確性,加上同名函數導致符號級盲區,這一點連很多安全從業者都會想當然;三是暴露期與持有時長正相關這個反直覺推論,它直接顛覆"冷儲越久越安全"的直覺。如果這三條你都早就想清楚了,這一期對你確實無效。
最強的替代範式
也許我把因果搞反了:真正的教訓不是"信任假設不可觀測",而是 "不要把 128 位的安全性押在單一實現上"。按這個視角,答案不是可觀測性,而是冗餘------用兩個獨立來源的熵異或、用不同廠商的設備組多簽、用自帶骰子熵。如果未來的行業解法主要沿著冗餘而不是可觀測性 ** 演進,那麼我這套框架的重心就放錯了地方。這是我認為最可能推翻本命題的一條路徑。
三年後回看最可能的死因
AI輔助審計在兩年內把存量的這類缺陷大批量排掉,熵坍縮變成一個歷史名詞,而"不可觀測的信任假設"被證明是一個自我消解的問題------工具進步直接把它變成了可觀測的。這個概率不低。我的辯護是:排雷速度提升的同時,攻擊者的掃描速度也在同步提升,而且他們沒有披露義務。淨效果是好是壞,現在下結論都太早。
哪些當前數據可能是假繁榮
兩個。一是"觀測到的清掃集中在 Mk3 單簽"------這很可能只反映攻擊者的成本排序,而不是 Mk4/Mk5/Q 的真實安全邊際,把它當成"新型號沒事"的證據是危險的。二是 8,860 萬美元這個數字本身------它只統計了已經被搬走的,而不是已經暴露的;coldcardentropy.org 登記的 6,657 個唯一來源地址與最終損失之間的差額,代表的是尚未被收割的存量,不是安全的存量。
十二個月後回來對賬
落進預測賬本。不預測價格,只預測結構行為。
核心預測(12 個月)
未來 12 個月內,行業對"熵與密鑰生成"的處理方式將出現可觀察的結構性變化------至少一家主流硬體錢包廠商公開引入構建期或運行期的熵源斷言(而非僅承諾使用硬體 RNG),並且至少再出現一起由 AI 輔助審計發現的、潛伏三年以上的密碼學原語級缺陷(無論是否造成損失)。同時,2026 全年的重大事故仍將以密鑰 / 權限 / 生成層為主,而非合約邏輯層。
3 個月觀察指標(至 2026-11)
- Coldcard 事件的最終損失是否停在 1,400 BTC 量級,還是繼續向 coldcardentropy.org 登記的 6,657 個地址擴散
- Coinkite 與第三方是否就 Mk4/Mk5/Q 的 72 位 / 32 位分歧公開對賬
- 其他硬體錢包廠商是否發布自查聲明,以及聲明裡是"我們用了硬體 RNG"還是"我們加了構建期斷言"------措辭差別就是本期框架的第一問
- 是否出現針對本次事故受害者的大規模社工詐騙
6 個月觀察指標(至 2027-02)
- 是否有廠商把熵源斷言、符號級校驗寫進公開的構建流程或審計報告
- 多簽方案商是否開始明確要求"簽名者來自不同廠商 / 不同熵源"
- 是否再出現一起潛伏超過三年的熵或密鑰生成類缺陷
12 個月觀察指標(至 2027-08)
- AI 輔助審計發現的歷史缺陷數量是否顯著上升,以及披露方是研究者還是攻擊者先行
- 事故統計裡密鑰 / 權限 / 生成層占比是否繼續高於合約邏輯層
- 是否出現監管或行業標準層對"熵源可驗證性"的要求
證偽條件(寫死,我認帳)
- 未來 12 個月內,主流廠商的應對普遍停留在"更換 RNG 實現 / 加強代碼審查",沒有任何一家引入可公開驗證的構建期或運行期斷言 → 說明"可觀測性"不是行業實際採納的解法,本期框架的重心放錯,命題的實踐價值被高估;
- 未來 12 個月的重大事故重新以合約邏輯漏洞為主(占比超過密鑰與權限層)→ 說明 7 月的樣本只是短期噪聲,"攻擊面結構性遷移"這個判斷方向看反;
- Mk4/Mk5/Q 的爭議最終確定為 32 位且大規模被掃,而我在文中按 72 位口徑判斷其緊迫性低於 Mk3 → 我在最關鍵的一个實操判斷上失誤,即使命題本身成立,也必須公開更正。
免責聲明
本文不預測任何資產價格,不構成任何投資或買賣建議。文中涉及的具體廠商與產品僅用於說明技術機制與風險結構,不代表對其商業評價或推薦,也不代表本文認為其他產品更安全。文中的遷移步驟屬於公開信息整理,不構成個性化安全建議;任何涉及私鑰與助記詞的操作都可能造成不可逆的資產損失,請以廠商官方指引為準,並自行承擔決策責任。任何人向你索要助記詞、私鑰、Passphrase 或錢包導出文件,都是詐騙。
數據與來源
全部數據為 2026 年 8 月核查,廠商自述與第三方報導分欄標註。
廠商自述(一手)
【摘要(純文本,可能為空)】:
- Technical Deep Dive into the Entropy Issue,Coinkite 官方博客 --- random.c(libngu 22--31 行)#ifndef MICROPY_HW_ENABLE_RNG 守衛失效、宏被定義為 0、2021 年 3 月 libNgU 遷移引入、上游 MicroPython 回退代碼可追溯至 2018 年 5 月、Mk2/Mk3 約 40 位、Mk4/Mk5/Q 約 72 位、兩個 RNG 實現函數簽名相同、修復方式為排除回退對象 + 構建期符號校驗:https://blog.coinkite.com/entropy-technical-backgrounder/
- 受影響與修復版本:Mk2/Mk3 4.0.1--4.1.9(修復 4.2.0)、Mk4/Mk5 < 5.6.0(Edge < 6.6.0X)、Q < 1.5.0Q(Edge < 6.6.0QX);"升級固件不會修改或修復已生成的種子":同上及 Coinkite 公告,2026-07-31
第三方報導與取證
- COLDCARD Entropy Incident --- Address Check and Evidence --- 六個證據等級、6,657 個唯一來源地址、首波 500 筆交易 594.47722484 BTC、本地瀏覽器查詢不上傳、"未命中不等於安全":https://coldcardentropy.org/
- A five-year-old Coldcard bug let hackers guess bitcoin wallet keys, Coinkite confirms,Blockhead,2026-08-03 --- 截至 8 月 2 日約 1,367 BTC / 約 8,860 萬美元 / 逾 4,500 個地址,Galaxy Research 追蹤;第三方分析稱 Mk4/Mk5/Q 僅約 32 位進入最終種子:https://www.blockhead.co/2026/08/03/coldcard-hardware-wallets-shipped-with-broken-randomness-for-five-years-coinkite-confirms/
- Coinkite Releases Fixed Firmware After Coldcard Bug; AI Likely Involved In The Breach,Bitcoin Magazine,2026-07-31 --- 修復固件版本、NVK 關於 AI 輔助審查的表述、24 小時內逾 7,000 萬美元:https://bitcoinmagazine.com/business/coinkite-releases-fixed-firmware-after-coldcard-bug-ai-likely-involved-in-the-hack
- Coldcard Hardware Wallet Flaw Linked to $70 Million Bitcoin Theft in 41 Minutes,The Hacker News,2026-08 --- 41 分鐘內 1,196 個地址:https://thehackernews.com/2026/08/coldcard-hardware-wallet-flaw-linked-to.html
- COLDCARD Vulnerability: What Owners Need to Know,Bitcoin Well --- 受影響判定以生成種子時的固件版本為準、導入種子與 50 次骰子熵的例外、TAPSIGNER/OPENDIME/SATSCARD 不受影響、全部由受影響設備組成的多簽仍然脆弱(第三方研究)、遷移步驟與"匆忙遷移風險更大"的提醒:https://bitcoinwell.com/coldcard-vulnerability
歷史先例
- Random Number Bug in Debian Linux,Schneier on Security,2008-05 --- md_rand.c 兩行 MD_Update 被刪、/* purify complains */ 註釋、2006 年 9 月引入、2008 年 5 月 13 日由 Luciano Bello 發現、唯一隨機源退化為進程 ID、Linux 默認上限 32,768:https://www.schneier.com/blog/archives/2008/05/random_number_b.html
- Milk Sad 完整披露(CVE-2023-39910),milksad.info --- Libbitcoin Explorer 3.0.0--3.6.0、bx seed 用梅森旋轉 + 32 位時鐘播種、2016-10 經 PR#559 引入、2017-03 隨 3.0.0 發布、2023 年 5 月開始被利用、2023 年 7 月 12 日約 29.65 BTC 被盜、2023 年 7 月 21 日發現、2023 年 8 月 8 日披露、主網 2,600+ 錢包、跨鏈損失逾 90 萬美元、潛伏六年且鏈上無可見性:https://milksad.info/disclosure.html
趨勢佐證(2026 年 7 月同期事故)
- July 2026 Crypto Hacks: Nearly $200M Lost Across Wallets, DeFi and Bridges --- 全月約 2 億美元、34 起;AFX Trade $2,415 萬(驗證者密鑰)、Ostium $1,800 萬(預言機簽名者密鑰)、Triple-A $1,180 萬(熱錢包)、WEMIX $625 萬(owner key)、Wanchain $1,000 萬、Bonzo Lend 905 萬、Verus 桥 754 萬:https://cryip.co/july-2026-crypto-hacks-nearly-200m-lost-wallets-defi-bridges/
- Blockaid:2026 上半年加密項目被盜超 10 億美元,經 Cryptoticker 周報引述,2026-08:https://cryptoticker.io/en/crypto-news-today-weekly-wrap-august-2026/
本內容僅供參考,不構成任何金融、投資、法律或稅務建議。文中提及的任何活動、獎勵、線上活動或相關資訊,不應被視為對購買、出售或交易任何加密資產的推薦、招攬或邀請。加密資產具有高波動性,存在價值損失風險。WEEX服務、產品及相關活動的可用性可能因地區而異。用戶在參與前有責任確保符合當地適用法律法規。