閃電小費

顯示具有 Multisig 標籤的文章。 顯示所有文章
顯示具有 Multisig 標籤的文章。 顯示所有文章

2026年8月23日 星期日

比特幣自我託管與單點故障(Single Point of Failure, SPOF)

 

主題: 比特幣自我託管與單點故障(SPOF) 出處: Keystone (@keystonewallet) on X ↗

沒有人會第二次弄丟自己的比特幣。

再讀一次。

在自我託管中,沒有第二次機會。沒有密碼重設。沒有客服工單。一次失敗,餘額就永遠歸零。
這意味著自我託管中最重要的問題,不是「我的安全性有多強?」
而是「當某件事出問題時,會發生什麼?」

如果你誠實的答案是「我會失去一切」,那你根本沒有安全設置,只是有一個單點故障(Single Point of Failure, SPOF)。

而單點故障之所以危險,是因為它們有三種形式,而大多數持有者只防禦其中一種。請繼續看下去,因為第三種甚至會讓最謹慎的人中招。


SPOF #1:金鑰

你的助記詞是通往一切的主鑰。遺失它、損壞它、暴露它。三種不同的錯誤,結果完全一樣:資金消失。

大多數人只做一份備份,因為簡單:一句助記詞、一張紙、一個藏匿處。乾淨又簡單。然後一場火災就能讓你血本無歸。

📌 真實案例:

  • 2013年,威爾斯的 IT 工作者 James Howells 把存有約 7,500 BTC 金鑰的硬碟丟掉,至今仍埋在垃圾掩埋場。
  • 舊金山程式設計師 Stefan Thomas 有一個存有超過 7,000 BTC 金鑰的 IronKey 硬碟,多年前就忘了密碼。硬碟只允許有限次數的猜測,之後就永久鎖定。

這些不是新手,他們是清楚知道自己握有什麼的技術人員。

所以明顯的解法是多做幾份備份,對吧?

錯了。這就是陷阱。

同一份助記詞每多一份副本,就多一次被發現的機會。你降低了遺失風險,卻增加了被盜風險。使用單助記詞錢包,你並沒有消除失敗,只是在選擇你比較能接受哪一種失敗。

真正的出路是多重簽名(Multisig):

在 2-of-3 的設置中,任何單一金鑰遺失、被盜或損毀,你的資金都不會動。竊賊拿著一把金鑰什麼都得不到;你握有兩把金鑰就仍能掌控一切。有冗餘,卻不會增加暴露風險。

它甚至改變了「扳手攻擊(物理威脅)」的數學。只有一把助記詞時,上門的攻擊者能帶走一切;金鑰分散在不同地點時,現場什麼都解不開,上門的理由直接崩解。

所以多重簽名解決了問題。買三台裝置、把金鑰分開,就完成了?
還沒那麼簡單。因為不久前,成千上萬人用慘痛的方式學到了第二個單點故障。


SPOF #2:供應商

這個以前只是理論。

7月30日,Coinkite 披露了 Coldcard 硬體錢包的韌體漏洞。這個 bug 從 2021 年 3 月起就悄悄存在於程式碼中。受影響的裝置在產生助記詞時跳過了硬體隨機數產生器,熵從 128 位元崩塌到舊型號上大約只有 40 位元。

攻擊者不需要惡意軟體、不需要釣魚、不需要實體接觸。他們離線產生弱助記詞、推導地址,然後把已入金的資金掃走。

約 2,000 BTC 被盜,數千個地址受害——這是比特幣史上最嚴重的冷儲存失敗之一。

而最讓人夜不能寐的是:它擊中了那些一切都按規矩做的人。 氣隙(Air-gapped)裝置、信譽良好的供應商、開源韌體、助記詞妥善備份……全部沒用。他們安全的每一層都建立在單一供應商的金鑰產生上,當那一層失敗時,上面的一切也跟著失敗。

現在看看誰安然無恙:

Unchained 的事後檢討發現,多重簽名在事件中保護了數千 BTC。混合不同製造商金鑰的金庫在結構上是安全的。被攻破的 Coldcard 金鑰只是三把中的一把,單一把金鑰什麼都花不了。即使在混亂中,多重簽名也為用戶爭取了容錯能力和輪換時間。

Jameson Lopp 說得很直白:「如果你想對沖供應商和供應鏈風險,答案就是多供應商多重簽名(Multi-vendor Multisig)。」

注意「多供應商」這個詞。這是大多數持有者忽略的細節。

同一品牌的三台裝置組成 2-of-3,並不是分散風險,那只是把同一個賭注下了三次。如果你現在持有 Ledger 或 Trezor,再加一台 Keystone 當共同簽名者,不是換隊,而是確保沒有任何單一製造商的錯誤能變成你的錯誤:不同硬體、不同韌體、不同安全元件、不同供應鏈。

一個供應商的 bug 變成麻煩,而不是訃聞。

到這裡你可能覺得已經覆蓋了:多把金鑰、多個供應商。還有什麼會壞?
看看一切都放在哪裡。


SPOF #3:地點

這是藏在眼前的失敗。

三把金鑰放在同一間房子裡,不是三把金鑰。那只是一把多了幾個步驟的金鑰。

一場火災會一次帶走全部。入室盜竊也是。洪水也是。

冗餘只有在「失敗彼此獨立」時才算數。金鑰和備份必須放在不同地點,距離遠到沒有單一事件能同時影響到超過一把。家裡、銀行保管箱、另一座城市的可信家人。具體組合沒那麼重要,原則才是:地球上沒有任何一個地址能終結你的整個設置。

同樣的邏輯也適用於備份媒介:紙會燒,鋼不會。如果兩份備份會在同一場災難中一起死掉,它們從來就不是兩份備份。


💡 真正的教訓

安全性不是讓失敗變得不可能。

裝置會有 bug、房子會燒、聰明人會忘記密碼或把硬碟丟掉。真正的安全性,是確保一次失敗永遠不會變成全面失敗。

🚨 現在立刻做這份審計:

  • 如果今晚你的助記詞被摧毀,你還有幣嗎?
  • 如果明天你的供應商披露關鍵漏洞,你有暴露風險嗎?
  • 如果下週你的家沒了,你的資產還能倖存嗎?

任何「否」都是你的單點故障。Coldcard 的受害者用慘痛的方式找到了他們的。

2026年8月19日 星期三

分水嶺之後:從 Coldcard 漏洞事件看比特幣自託管的認知鴻溝與防禦重構

 

今年 7 月發生的 Coldcard 韌體亂數弱化事件,無疑在比特幣社群中劃出了一道極為鮮明的分水嶺。這次的震盪非同小可——受害者不再只是不小心點進釣魚連結的散戶,而是自認恪守最高自託管標準的硬核玩家。

這場風暴過後,我觀察到社群迅速分化成兩個極端:一大批人因為親歷資產損失、或是被「下一個可能是我」的恐懼所吞噬,徹底動搖了自主保管的信心,倉皇將幣撤回交易所或託管機構;然而,另一群人卻選擇在焦慮中直視本質,更加堅定地重整架構,將自託管防禦等級推向全新高度。

在我看來,這兩群人的根本差異,絕不僅僅是「技術操作」的熟練度差距,而是對「抗審查性」與「交易對手風險」的底層認知有著本質的不同。

我的觀察核心:退回託管機構的人,往往是在用「不可控的長期生殺大權」,換取「眼前的省事與心安」;而升級防禦的人則明白,一旦妥協了抗審查性,比特幣就失去了它存在的根本價值。

一、 兩類持有者的心態與認知剖析

比較維度 退回託管機構 / 交易所 升級自託管防禦等級
自託管的定義 工具依賴型:認為只要買了聲譽最好的硬體,安全問題就一勞永逸解決了。 第一性原理型:自託管是一整套可驗證的密碼學流程,硬體只是其中一個環節。
單點故障意識 把對交易所的盲目信任,平移給了單一硬體廠商。 深刻意識到「單一硬體、單一韌體、單一隨機數源」本身就是致命單點。
風險定價 害怕未知的技術 Bug > 交易對手風險
寧可承擔帳戶被凍結、破產倒閉或被監管審查的隱性風險。
交易對手風險 > 技術實施成本
堅信只要失去了抗審查與無許可主權,比特幣便毫無價值。
事件歸因 「自託管門檻太高、太反人性,個人根本對抗不了韌體漏洞。」 「這是單簽與內部熵源的結構性缺陷,絕非自主保管哲學的失敗。」

二、 我所觀察到的兩大深層盲點

1. 是「信任轉移」,還是真正的「信任消除」?

很多退回中心化機構的人,當初離開交易所時只是跟風喊著「Not your keys, not your coins」,骨子裡依舊是「委託信任」的思維。他們把對幣安或 Coinbase 的信任,無差別地轉移到了 Coldcard 或特定品牌上。

當品牌神話破滅,他們的信任防線便徹底潰堤。但真正的比特幣信仰是 "Don't Trust, Verify"。只要是人寫的程式碼,就有出錯的可能;我們的目標從來不是尋找一個永遠不會出錯的「神級廠商」,而是建立一個即使任何單一廠商出包、也無法威脅資產安全的架構。

2. 致命的「隱性風險」與刺眼的「顯性風險」

託管機構(慢性的不可逆風險):
平時風平浪靜,但面臨政策轉向、司法長臂管轄、平台挪用或資產凍結時,剝奪是 100% 且無法抗辯的。
自託管(可被工程化化解的挑戰):
漏洞帶來的衝擊固然劇烈,但透過數學架構、多簽機制與物理熵源,這些風險完全可以被主動隔離與化解。

退回中心化懷抱的人,本質上是用「未來的生殺大權」換取「眼前的省事」。但他們忽略了:一旦失去抗審查性,比特幣與傳統銀行戶頭裡的數位法幣又有何異?

三、 我們該如何重構自託管防線?

這次事件並未擊垮我對自託管的信心,反而促使我徹底審視並升級防禦策略。要消除單點隱患,我認為以下二項實踐至關重要:

  1. 擁抱手動物理熵(Dice Rolls):
    不再盲信硬體內建的隨機數生成器(TRNG/PRNG)。在生成助記詞時,透過擲骰子(如 100 次擲骰)引入物理世界的真實隨機性,從根源上粉碎韌體演算法弱化的攻擊路徑。
  2. 跨廠商、跨晶片架構的多簽(Multisig / Miniscript):
    將資產託管升級至多簽架構(例如 2-of-3),並強制分散硬體品牌(如 Keystone + Trezor + BitBox02 或 Ledger)。在這種架構下,即使其中一家廠商的隨機數或晶片被完全攻破,攻擊者依然連一個聰(sat)都動不了。

結語:主權從來不是免費的

這場 7 月的分水嶺事件,本質上是一場針對整個社群的「主權壓力測試」。它篩掉了那些只享受比特幣上漲、卻未曾做好承擔完全自主責任準備的投機者;但也同時淬鍊了我們。

自由與抗審查從來不是唾手可得的,它的代價就是持續的警惕與對安全工程的敬畏。交出私鑰換取虛假的安寧,永遠是最危險的妥協。

2026年8月17日 星期一

Taproot 金庫:非託管式比特幣借貸究竟如何運作(Taproot Vaults How Non-Custodial Bitcoin Lending Actually Works)

 

Taproot 金庫(Vaults):非託管式比特幣借貸究竟如何運作

重點摘要(TL;DR)

過去十年間,每一種比特幣抵押貸款的運作方式都如出一轍:你把比特幣交給貸方,由他們持有,你只能祈禱他們會還給你。Celsius 沒有還、BlockFi 沒有還、Voyager 也沒有還。客戶的比特幣變成了別人的抵押品、別人的槓桿、別人的虧損。

但其實有另一種做法:把你的比特幣鎖進比特幣區塊鏈上的一段腳本(script),這段腳本精確定義了這筆資產「可以發生什麼事」——合作還款、自動清算,或者在貸方消失時你自己的逃生門。沒有裁量權、沒有資金混同、沒有再質押(rehypothecation),任何運行比特幣節點的人都能驗證。讓這一切成為可能的技術是 2021 年 11 月啟用的 Taproot,而將其用於借貸的方式,就稱為「Taproot 金庫」。

一、不斷摧毀比特幣貸方的那件事

每一家倒閉的比特幣貸方,死法都一樣:他們以「資金池託管」的方式持有客戶比特幣——把所有人的存款混進同一張資產負債表,然後做銀行會做的事:把它借出去。借給對沖基金、借給自家交易部門、借給關係企業、借給出價最高的任何人。

這種做法叫做「再質押」(rehypothecation)。它在幾乎所有地方都是合法的,幾乎所有傳統銀行都這樣運作,也是部分準備金制度的來源。在正常銀行環境中它能運作,是因為有存款保險、有央行作為最後貸款人、有數十年的監管基礎設施防止整個把戲崩盤。

但在加密借貸領域,這些全都不存在。音樂停止時,你那筆特定的比特幣已經沒了,混進了殘骸之中。你變成破產法庭上的無擔保債權人,有時只能拿回零頭,有時一等就是好幾年。

這不只是 Celsius 或 BlockFi 的問題,而是任何「由貸方自由裁量託管你抵押品」的借貸產品的結構性缺陷。唯一真正能修復它的方式,就是徹底移除裁量權。這正是 Taproot 金庫的用途。(如果你還沒管好自己的私鑰,建議先閱讀我們的冷儲存指南。)

二、Taproot 究竟為比特幣帶來了什麼

比特幣一直都有腳本。從第一天起,每個比特幣輸出(output)都由一支小程式鎖定,內容是「想花掉我,你必須證明這些事」。簡單錢包的腳本是「證明你知道這個公鑰對應的私鑰」;多簽錢包的腳本是「證明你持有 N 把指定金鑰中 M 把的簽名」。

在 Taproot 之前,複雜腳本有三個問題:

  • 公開:輸出可被花費的所有條件,從建立那一刻起就在鏈上完全可見。
  • 昂貴:複雜腳本佔用更多區塊空間,手續費更高。
  • 受限:比特幣腳本語言被刻意限制。

2021 年 11 月啟用的 Taproot 改變了這一切。一個 Taproot 輸出在鏈上看起來就像一把單獨的公鑰;複雜腳本被藏在一棵由可能的花費條件組成的 Merkle 樹裡,只有你實際使用的那條分支會在花費時被揭示。你只為用到的分支付費,其他分支保持不可見,而撰寫這些分支的語言(Tapscript)比舊版更有表達力。

實務上,你可以建立一個帶有 5 條、10 條甚至 50 條花費條件的比特幣輸出,每條各自綁定不同政策;在你真正動用某條分支之前,它在鏈上看起來就和普通的單鑰付款一模一樣。這正是「金庫」得以實現的原因。

三、金庫的概念

先忘掉實作細節。「金庫」到底是什麼意思?

金庫是一個可以用多種方式花費的比特幣輸出:每條花費路徑在不同條件下觸發,且有權觸發各路徑的當事人各不相同。

舉個簡單例子:想像一個存放家庭儲蓄的金庫,有三種花費方式:

  • 你的伴侶簽名,資金轉到雙方共同控制的提款地址;
  • 你單獨簽名,資金轉到你控制的地址,但要等 30 天的時間鎖;
  • 一位信任的家庭成員連同公證人簽名,資金可轉到任何指定地址——僅限緊急情況。

三扇門,各自有自己的政策。比特幣借貸金庫的運作邏輯完全相同。

四、比特幣借貸金庫的三扇門

一個非託管比特幣抵押貸款金庫通常有三條花費路徑:

門一:合作還款

借款人以美元(通常是穩定幣)償還貸款。貸方的簽名基礎設施驗證還款後,共同簽署一筆釋放抵押品的交易,借款人在建立金庫時指定的提款地址拿回比特幣。絕大多數貸款都應該走這條路——相當於還清房貸後拿回地契。

門二:清算

借款人的抵押品價值跌破清算門檻,或貸款到期未還。這扇門由貸方基礎設施簽名,不需要借款人簽名。腳本強制規定這條路徑只能把資金送往特定的清算地址,而不是貸方想去的任何地方。資金到達後進入荷蘭式拍賣(價格從高開始逐步下降,直到有買家接手)。價格不由貸方決定,由市場決定。拍賣所得用於償還貸款,剩餘部分退還借款人。

門三:單邊退出

這才是關鍵的一扇門。如果貸方消失了(破產、被駭、被監管消滅、或單純人間蒸發),借款人可以自行動用退出門:不需與貸方協調、不需法律程序、不需破產法庭。他們用公開工具構造交易、廣播到比特幣網路,資金就會回到自己的錢包。

有個但書:這條路徑受相對時間鎖(relative timelock)限制,通常約一年。存款後必須經過足夠時間才能走這條路。時間鎖給了貸方一個很長的窗口,在正常營運下使用門一或門二。實務上門三幾乎永遠不該被用到——它是煙霧警報器,不是大門。但這扇門確實存在、由比特幣腳本強制執行,任何人都無法推翻。

這才是比特幣抵押借貸語境下「非託管」的真正含義:不是「貸方承諾會還幣」、不是「貸方有保險」、也不是「貸方使用受監管的託管機構」——而是「即使經營貸方的所有人明天全部消失,你仍然只需一個比特幣節點和一套公開軟體,就能取回你的比特幣」。

五、上鎖的門:NUMS 技巧

每個 Taproot 輸出還有第四條我們尚未談到的路徑,稱為「密鑰路徑花費」(key-path spend)。

技術上,Taproot 輸出由一把單獨的公鑰鎖定,腳本路徑只是掛在旁邊的備案。大多數 Taproot 錢包把密鑰路徑當作便宜且隱私的轉帳方式,由各方持有對應私鑰的份額並協作簽名。

但在比特幣借貸金庫中,密鑰路徑是危險的。如果貸方和借款人共享一把可以繞過三扇門直接花費輸出的密鑰,金庫的意義就蕩然無存——貸方的簽名基礎設施可能串謀(或被攻破),在約定規則之外動用資金。

解法是使用 NUMS 內部密鑰。NUMS 代表「Nothing Up My Sleeve」(袖裡無乾坤)。做法是構造一把公鑰,並能證明沒有任何人知道對應的私鑰。標準做法是對一個已知的字串(例如「SURGE-NUMS」或「BIP-341-NUMS」)取 SHA-256 雜湊,用該雜湊值作為公鑰的 x 座標。任何人都能驗證這把密鑰確實由此生成;而沒有人能從雜湊輸出反推私鑰,因為那等於要攻破 SHA-256——那也等於攻破整個比特幣。

實際效果:構造正確的借貸金庫,其密鑰路徑花費可被證明是無用的。花費輸出的唯一方式,就是走三條腳本路徑之一。貸方即使想繞過規則也做不到。這正是區分「真正的非託管產品」與「行銷話術」的細節。在把比特幣託付給任何 Taproot 金庫之前,務必確認其密鑰路徑已被禁用。

六、誰來簽名:門檻簽名(Threshold Signatures)

門一和門二都需要貸方簽名。如果貸方是一家只有一把簽名金鑰的公司,那你只是把託管模式多包了幾層皮。金鑰外洩、內部員工舞弊、或監管機構扣押貸方基礎設施,全都成為單點故障。

解法是門檻簽名:把貸方的簽名金鑰拆分給多個獨立方,必須達到門檻人數才能產生有效簽名。3-of-5 門檻意味著 5 位簽名者中任意 3 位可共同簽署交易,但 2 位不行。簽名者之間不需要互相信任,只需遵循協議。

比特幣有幾種可用的門檻簽名方案,最常見的兩種是 FROST(Flexible Round-Optimized Schnorr Threshold)和 Lindell 2024:

  • FROST:研究充分、實作廣泛,產生的 Schnorr 簽名在鏈上與單方簽名無法區分。
  • Lindell 2024:較新,具備「可識別中止」(identifiable abort)的特性:若某位簽名者在簽名過程中作弊,協議會產生密碼學證據指明是誰幹的——當你想在經濟上懲罰作弊的簽名者時,這點很重要。

對任何宣稱採用門檻簽名的貸方,更難的問題是:簽名者到底是誰?如果 5 位簽名者全是同一家公司的員工,3-of-5 就毫無意義。要尋找獨立營運、地理分散、聲譽各自獨立的簽名者。如果貸方尚未公布簽名者名單,在去中心化主張兌現之前,先把它當作「待驗證」。

七、這對身為借款人的你意味著什麼

如果你正在考慮比特幣抵押貸款,上述架構改變了你評估產品的方式:

  • 託管是可驗證的:你應該能在比特幣區塊鏈瀏覽器(mempool.space 就可以)查到你的金庫地址,看到你的抵押品作為一筆普通 UTXO 靜靜躺在那裡。你應該能驗證腳本、看到三條花費路徑、確認密鑰路徑已禁用。如果貸方無法讓你在鏈上看到抵押品,你就回到了託管模式。
  • 再質押不可能發生:你的比特幣不在資金池裡、不會被借給交易員、從存入到取回之間完全不動——除非三扇門之一被觸發。你隨時可以在鏈上驗證這一點。
  • 逃生門是真實的:貸方消失時,你可以自己取回抵押品。事先測試它:在測試網金庫上運行單邊退出工具,確認它有效。不要只聽貸方的說詞。
  • 信任假設轉移了:你不再信任貸方的償付能力、託管安排或保險,而是信任:比特幣腳本確實如其所言運作、門檻簽名設置有足夠多的獨立簽名者以防串謀、以及(如果貸方使用的話)EVM 信貸合約已經過審計。
  • 智能合約風險是真實的:大多數非託管比特幣借貸產品用 EVM 鏈做信貸記帳層。比特幣這一側可能滴水不漏,EVM 那一側卻可能有漏洞。兩側的審計狀況都重要。
  • 清算行為不同:在託管型貸方那裡,清算通常意味著「貸方以內部能拿到的任何價格賣掉你的 BTC」;在非託管金庫中,清算通常意味著「你的 BTC 進入公開荷蘭式拍賣」。拍賣機制更透明,但也更慢。

八、真實世界的實作:Surge Credit

目前對上述架構發展最完整的實作是 Surge Credit——一個比特幣抵押的美元信用額度產品,於 2026 年 4 月上線主網公開測試版。

Surge 構建的 Taproot 金庫完全採用本文描述的三門模式:合作還款、在 Base(Coinbase 的以太坊 L2)上透過荷蘭式拍賣自動清算、以及附約一年 CSV 時間鎖的單邊退出。密鑰路徑使用由字串「SURGE-NUMS」的 SHA-256 雜湊派生的 NUMS 內部密鑰予以禁用。門檻簽名方案是 Lindell 2024,在「分散式託管網路」(Distributed Custody Network)上採簡單多數門檻。信貸記帳運行在 Base 上,USDC 透過 Circle 的 CCTP v2 跨鏈流動。

協議層的工作正由 Brandon Black(reardencode)審計——他是 BIP-349(OP_INTERNALKEY)的共同作者、BitGo 前 Taproot 錢包工程師。截至撰稿時,EVM 合約也在審計中。治理結構採雙實體模式(Amby Inc. 負責開發軟體,Surge Foundation 負責治理協議),類似 Aave 和 Morpho。

就本教學而言,Surge 是目前展示 Taproot 金庫模式如何落地為可用產品的最清晰範例:金庫構造有原則、密鑰路徑禁用正確、門檻簽名方案選擇得當、逃生門真實且可測試。類似架構的其他實作將會陸續出現,也應該出現。關於利率、條款、目前實績以及使用測試版產品的真實取捨,請參閱我們完整的 Surge Credit 評測。

九、評估任何比特幣抵押貸方時該看什麼

評估任何宣稱「非託管」的產品時的快速檢查清單:

  1. 你能在鏈上看到自己的抵押品嗎? 在 mempool.space 或任何比特幣瀏覽器查你的金庫地址。它應該是一筆由 Taproot 腳本控制的普通 UTXO,而不是貸方內部帳本上的一個數字。
  2. 密鑰路徑被禁用了嗎? 直接問貸方。答案應該是「是」,且他們應能指出 NUMS 構造方式。如果答案是否定的,或他們不知道你在說什麼,那這個金庫就不是真正的非託管。
  3. 單邊退出路徑存在嗎?你能測試嗎? 索取退出工具,若有測試網金庫就跑一遍,驗證時間鎖長度,驗證該路徑完全不依賴貸方基礎設施也能運作。
  4. 門檻簽名設置透明嗎? 有幾位簽名者?具名嗎?獨立嗎?未來有新簽名者加入的管道嗎?
  5. 審計狀況如何? 誰審計了比特幣腳本側?誰審計了 EVM 側?報告公開嗎?發現的問題修復了嗎?
  6. 清算時會發生什麼? 荷蘭式拍賣、內部出售、還是中心化訂單簿?拍賣所得流向何處?剩餘部分退還借款人嗎?
  7. 貸方的金鑰放在哪裡? 硬體安全模組(HSM)?熱錢包基礎設施?多雲?地理分散?
  8. 治理結構是什麼? 協議可升級嗎?誰控制升級金鑰?有基金會嗎?團隊除了對創投負責之外,還對誰負責?

在上述任一項失分的貸方不一定是壞貸方,但每一個缺口都是你在決定投入多少資金前應該了解的。今天在整份清單上表現良好的貸方很少見,未來幾年會逐漸變多。

十、前沿與尚待解決的問題

Taproot 金庫模式尚未完成,走向主流之前還有幾件事需要成熟:

  • 分散式託管網路(DCN)的規模化去中心化: 目前的分散式託管網路通常很小(3 到 10 位簽名者),且身分往往不透明。擴展到數十甚至數百位具公開聲譽、有經濟利害關係的獨立簽名者,仍是未解之題。
  • 跨鏈依賴: 大多數非託管比特幣貸方使用 EVM 鏈作為信貸引擎,因為單靠比特幣腳本難以處理利息累計、浮動利率計算或多資產記帳。如果信貸鏈停擺,日常借款流程就斷了——單邊退出路徑仍然可用,但即時體驗會降級。減少這種依賴是活躍的研究方向。
  • 比特幣原生的法幣出口: 目前大多數產品輸出的是 EVM 鏈上的穩定幣 USDC,要從 USDC 換成銀行帳戶裡的法幣,仍需中心化交易所或 MoonPay 這類服務。比特幣原生的法幣出口需要成熟,體驗才能像託管型貸方一樣順暢。
  • 稅務與法律明確性: 以比特幣為抵押品的非託管貸款,在法律分類上不同於傳統擔保貸款,各國稅法下的處理方式尚未塵埃落定。借款人應諮詢自己的稅務顧問。
  • 跨金庫隱私: 目前每個金庫在鏈上看起來都略有不同,老練的觀察者可能根據腳本模式或交易圖譜,把某家貸方的所有金庫聚類在一起。改善鏈上匿名集是持續進行中的工作。

結語

比特幣抵押貸款市場正處於轉型之中。定義了 2020–2022 週期的託管模式,已經吞掉了它最大的三個玩家。下一個週期建立在不同的地基上:貸方的承諾,被一段人人都能驗證的腳本和一扇沒有人能推翻的逃生門所取代。

它尚未完成:去中心化的故事還有缺口、使用者體驗還有摩擦、審計基礎設施仍在成熟。但方向是對的,而且這是唯一正對「比特幣貸方為何一再爆雷」根本原因的方向。如果你打算用比特幣借款,先搞清楚自己用的是哪種模式;如果你打算借出比特幣(或以比特幣為擔保的穩定幣),先搞清楚金鑰到底在誰手上。正確做這件事的技術今天已經存在,正確使用它的產品仍然稀少。但差距正在縮小,而「相信我們」這個答案,每經過一個週期就愈來愈不可接受。


常見問題(FAQ)

什麼是 Taproot 金庫?

Taproot 金庫是一個由 Taproot 腳本鎖定、具有多條可能花費路徑的比特幣輸出;每條路徑在不同條件下觸發,並由比特幣腳本(而非託管人)強制執行。在比特幣抵押借貸的語境中,典型金庫有三條路徑:合作還款、自動清算,以及貸方消失時借款人的單邊退出。金庫地址就是一筆普通的比特幣 UTXO,可在 mempool.space 等任何區塊鏈瀏覽器上查到。

什麼是再質押(rehypothecation)?為什麼對比特幣貸款重要?

再質押是指貸方拿走你的抵押品並用於自己的目的:借給交易員、作為自己貸款的抵押品、或以其他方式讓它暴露在風險中。這在幾乎所有地方都合法,幾乎所有傳統銀行都這麼做。在加密借貸中,它正是讓 Celsius、BlockFi 和 Voyager 破產的機制——當貸方的賭注失敗,你那筆特定的比特幣就沒了,混進他們資產負債表的殘骸裡,你成為破產法庭上的無擔保債權人。非託管 Taproot 金庫設計讓再質押在結構上不可能發生,因為你的比特幣從不離開腳本。

什麼是 NUMS 技巧?

NUMS 代表「Nothing Up My Sleeve」。在 Taproot 借貸金庫中,密鑰路徑花費是第四種可能動用資金的方式,會讓各方繞過腳本路徑。為禁用它,開發者用已知字串(如「SURGE-NUMS」或「BIP-341-NUMS」)的 SHA-256 雜湊來構造內部公鑰。任何人都能驗證這把密鑰確實如此生成,而沒有人能從雜湊輸出推出私鑰,因為那需要攻破 SHA-256。結果就是:密鑰路徑被證明無用,貸方即使串謀也無法繞過腳本。

在 Taproot 金庫中,我的比特幣可能在我不同意的情況下被動用嗎?

只能透過明確的腳本路徑,絕不會透過任何人的裁量。合作還款需要你先償還債務,然後雙方共同簽名。清算只有在你的抵押率跌破清算門檻時才會發生,且即便如此,資金也必須流經指定的清算地址和荷蘭式拍賣。除這兩種情況外,剩下的唯一路徑是你自己的單邊退出——受約一年的相對時間鎖限制。不存在任何「讓貸方直接拿走你比特幣」的路徑。

審計真的有用嗎?

有用,但僅限於公開的、近期的、由真正理解被審計技術的人所執行的審計。對 Taproot 金庫借貸產品,你至少需要兩份審計:一份針對比特幣腳本側,由比特幣協議專家(而非泛泛的加密審計公司)執行;一份針對處理信貸記帳的 EVM 智能合約側。兩份報告都應公開,且所有發現都應有修復紀錄。如果貸方聲稱有審計卻拿不出報告,就把這個說法當作未經證實。

FROST 與 Lindell 2024(Lin24):哪個門檻簽名方案更好?

兩者都在鏈上產生與單方簽名無法區分的有效 Schnorr 簽名。FROST 較老、研究更廣泛,是大多數門檻簽名部署的預設選項。Lindell 2024 較新,具備「可識別中止」特性:若簽名者在簽名過程中作弊,協議會產生密碼學證據指明是誰——當你想在經濟上懲罰作弊者時這點很重要。對借款人來說,兩者都是合理選擇,也都強過單一簽名金鑰。對任何貸方而言,更難的問題是「簽名者到底是誰」,而不是「用哪個方案」。

為什麼大多數非託管比特幣貸方使用 Base 或其他 EVM 鏈?

因為單靠比特幣腳本難以處理利息累計、浮動利率計算、多資產記帳或荷蘭式拍賣,而 EVM 鏈可以。分工是:比特幣負責在 Taproot 金庫中持有抵押品,EVM 鏈(通常是 Coinbase 的以太坊 L2 Base)負責運行信貸引擎,USDC 透過 Circle 的 CCTP 跨鏈流動。代價是 EVM 側真實的智能合約風險,以及日常借還款對該鏈正常運作的依賴。即使 EVM 鏈停擺,單邊退出路徑仍然可用。

如果貸方消失,我能取回我的比特幣嗎?

可以——如果金庫構造正確的話。單邊退出路徑正是整個設計的核心。經過相對時間鎖(通常約一年)後,你可以用公開的退出工具自行構造比特幣交易、廣播到比特幣網路,資金就會回到你的錢包。不需與貸方協調、不需破產法庭。你應該事先在測試網金庫上測試退出工具、確認它有效,而不是只聽信貸方的說詞。

2026年8月9日 星期日

解決比特幣自主託管的三難困境 (Solving Bitcoin's Self-Custody Trilemma)

解決比特幣自主託管的三難困境 (Solving Bitcoin's Self-Custody Trilemma)

作者:Luke Childs | 發布時間:2026 年 8 月 7 日 | 原文來源:lu.ke

上週,攻擊者開始清空 Coldcard 錢包。由於一個韌體漏洞導致其隨機數生成器(RNG)變得可預測,攻擊者完全不需要接觸實體設備,就能重新推算並生成種子詞(seed phrase)。目前損失金額已超過 1.3 億美元,且仍在持續上升。

我的種子詞最初就是在受影響的 Coldcard 上生成的。我之所以沒有損失畢生積蓄,唯一的理由是:多年前在設定該設備時,我拒絕完全信任它的隨機數生成器。我當時在 MacBook 上生成了 256 位元的熵(entropy),拋硬幣 256 次,並將這些熵全部混合輸入到 Coldcard 本身的熵之中。在此之前,我還做了一次測試演練,從頭重寫了 Coldcard 的種子衍生邏輯,以驗證我的額外熵來源會被正確地組合。

15:57 接下來幾天我會逐漸把資金轉過去
15:57 在 Node.js REPL 中用 JavaScript 重寫了 Coldcard 的種子衍生邏輯,包括加入擲骰子功能
15:58 然後做了一次模擬演練,將種子短語複製到 Node.js REPL 中,檢查擲骰子數值是否被可驗證地加入,最後在我的筆電上得到了相同的種子
15:58 接著清除所有資料,並在完全不輸入進筆電的情況下進行了正式操作
15:58 獲得了一個由 Coldcard 生成的 256 位元種子
15:59 然後從筆電的系統隨機數生成器(SRNG)生成了 256 位元的熵,編碼為 99 個 1-6 的字元,並輸入到 Coldcard 的擲骰子區塊
15:59 接著拋硬幣 256 次,正面輸入 1(相當於骰子點數 1),反面輸入 2(相當於骰子點數 2)
16:01 因此,我的最終種子短語是由三個完全獨立的 256 位元熵來源雜湊組合而成的:
• 來自 Coldcard 內部 SRNG 的 256 位元
• 來自 MacBook 透過 Node.js crypto.randomBytes 生成的 256 位元
• 來自宇宙(拋硬幣)的 256 位元
16:02 整個過程中我也把窗簾拉得嚴嚴實實,以防那些討厭的間諜衛星(笑)
【圖解翻譯】5 年前創建 Coldcard 種子時發給朋友的對話記錄

要避免損失畢生積蓄,居然需要達到這種「偏執狂(paranoid schizophrenia)」級別的防範,這簡直荒謬至極。任何人都不應該被逼著做到這種地步。

直接原因是一個韌體 bug。但根本原因是:我們整個加密貨幣行業的標準建議,把使用者的全部積蓄都押在單一設備上,並盲目祈禱該設備的硬體、韌體、供應鏈和隨機數生成器永遠完美無瑕。

大家現在都在問:我們要如何防止這種悲劇再次發生?要回答這個問題,你必須先理解為什麼目前的每一種方案都是有缺陷的。

比特幣自主託管的三難困境 (Bitcoin's Self-Custody Trilemma)

今天,你只能三選二。市場上沒有任何一個自主託管方案能夠同時滿足這三個特性。讓我們逐一檢視現有的選擇:

安全 (SECURE) 易用 (EASY TO USE) 無須信任 (TRUSTLESS)
【圖解】自主託管三難困境基本模型

1. 單簽 (Singlesig: 熱錢包或單一硬體錢包)

單簽具備無須信任與易用性(一台設備,點擊即可支付)。但它存在巨大的單點故障(Single Point of Failure)。一次漏洞、一次偷竊,或一次不良的備份,就會導致資產全毀。上週絕大多數 Coldcard 受害者都位於三角形的這條底邊上,並因此損失了畢生積蓄。

安全 (SECURE) 易用 (EASY TO USE) 無須信任 (TRUSTLESS) 單簽 (Singlesig)

2. 多廠商多簽 (Multivendor Multisig)

多簽兼具安全性與無須信任。但它的使用體驗極其痛苦:需要管理多台設備、多個種子詞備份、多個安全存放地點、多個 PIN 碼,還要每年進行巡禮以檢查設備是否損壞。如果把這種方案推薦給普通人,因操作失誤和帳號鎖死造成的資金損失,最終會比駭客盜竊的還多。這對大多數人來說不是一個現實的選擇。

安全 (SECURE) 易用 (EASY TO USE) 無須信任 (TRUSTLESS) 多簽 (Multisig)

3. 協同託管 (Collaborative Custody,如 Casa, Bitkey)

協同託管(例如 Casa 和 Bitkey)讓事情變得有趣。Casa 讓多簽變成了普通人真正能用的產品。Bitkey 在用戶體驗上更近一步:無種子詞,手機可以在硬體預先授權的限額內直接支出,只有大額提款才需要碰硬體錢包。這是感覺像熱錢包的冷儲存。

問題在於信任模型。託管服務商持有其中一枚協同簽署金鑰,且控制著手機 App 的更新管道。一次惡意 App 更新,他們就能掌握 3 枚金鑰中的 2 枚。我並不是說這很可能發生——他們顯然是聲譽良好的公司。但試想一下,如果發生類似行政命令 6102(Executive Order 6102,強制沒收黃金/資產)的事件,私有託管被定為非法,政府強制要求公司配合沒收資產,他們的員工是不會為了保護我的資產而替我去坐牢的,我也不能這樣要求他們。

安全 (SECURE) 易用 (EASY TO USE) 無須信任 (TRUSTLESS) 協同託管 (Collaborative)

三角形的三條邊,代表了目前所有解決方案被迫做出的三個妥協。這就是自主託管的三難困境。

介紹 Anzen:破解三難困境

自 Coldcard 事件爆發以來,我和許多人一樣徹夜難眠。我一直在思考如何徹底防止此類事件再次發生。我相信我設計出了一種全新的錢包架構,機能同時滿足自主託管三難困境的三個頂點。

Anzen 的設計目標是極度易用且極難出錯——幾乎不可能弄丟資金。它具備與「2-of-3 多廠商多簽」同等的安全性,使用體驗卻像熱錢包一樣簡單,同時保持完全的無須信任(Trustless),無需任何第三方參與。

安全 (SECURE) 易用 (EASY TO USE) 無須信任 (TRUSTLESS) ANZEN

這是一個金庫(Vault)架構,完全可以在當前的比特幣網路上運行。不需要第三方協同簽署者、不需要伺服器、不需要軟分叉、不需要新的 Opcode。完全由比特幣的共識規則進行無須信任的強制執行。

Anzen 只使用兩枚金鑰:一台手機,和一個硬體錢包。金庫就是你的冷儲存;手機則同時充當日常熱錢包與金庫的協同簽署者。攻擊者必須同時攻破這兩枚金鑰才能盜走資金。

Anzen 金庫腳本邏輯(Vault Script):
手機 + 硬體錢包 ───> 立即解鎖 (Immediately) 或 (OR) 手機單獨 ───> 14 個月後解鎖 (after 14 months) 或 (OR) 硬體錢包單獨 ───> 15 個月後解鎖 (after 15 months)

Anzen 金庫透過組合上述腳本與一系列預簽名的時間鎖交易鏈(Presigned Timelocked Transactions),實現了比特幣初衷中的可程式化貨幣功能。它支援:

  • 每月額度 (Monthly allowances): 每個月,有一筆預先設定好的固定金額釋放出來。手機可以單獨將其從冷儲存中提取到內建的熱錢包中。
  • 緊急提款 (Emergency access): 手機可以隨時發起預先設定的大額提款。提款觸發後需要等待 1 週的延遲(1-week delay),在此期間可以隨時被撤銷。如果偷車賊偷了你的手機並觸發緊急提款,這只相當於響起了長達一週的警報,讓你隨時可以關閉並阻斷提款。
  • 撤銷機制 (Revocations): 每一個預授權的每月額度都可以被隨時、永久地撤銷,並將資金回滾重置回冷儲存中。

可以把這想像成支票帳戶與儲蓄帳戶:熱錢包是你的支票帳戶,金庫是你的儲蓄帳戶。每月額度就像是每個月 1 號從儲蓄帳戶自動轉帳固定金額到支票帳戶。緊急提款就像是一筆需要 1 週時間審核交割的大額轉帳申請,在此期間你可以隨時取消。

每年一次(最好在每年同一天),你在硬體錢包上重新核准金庫政策。這會自動觸發手機與硬體錢包之間的簽署儀式,滾動更新金庫(重置時間鎖),並預先授權未來一整年的支出額度。

年度簽署儀式 (Annual Ceremony) 手機 + 硬體錢包 · 每年一次 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月 緊急提款 1 週延遲 【圖解】任何預授權均可隨時撤銷,回滾回冷儲存

在一年的其餘 364 天裡,你只需要使用手機。這就是核心價值所在:擁有熱錢包的操作體驗,同時享有冷儲存的背後保障。

為什麼這些主張成立? (Why the claims hold)

我這裡做出了非常強烈的主張,但我相信每一個主張都是精確且相對容易驗證的:

安全性媲美 2-of-3 多簽: 在 2-of-3 多簽中,攻擊者需要攻破 2 台設備。安全性取決於你最脆弱的兩台設備。Anzen 要求攻擊者同時攻破位於完全獨立設備上的兩枚完全獨立的金鑰。這是相同的門檻,但需要管理的設備更少。且與 2-of-3 多簽一樣,Anzen 在單一金鑰丟失或洩漏時依然安全。Anzen 甚至具備可選的社交恢復路徑,即使兩台設備同時遺失也能恢復。這比 2-of-3 多簽具備更強的抗遺失能力。

發生何種異常狀況 (What goes wrong) 你該怎麼做 (What you do) 攻擊者能獲得什麼 (What the attacker gets)
手機遺失、損壞或被盜 從加密雲端備份復原,幾分鐘內搞定 一台鎖定的手機。什麼也拿不到。
硬體錢包遺失或被盜 靠每月額度維持生活;待手機的 14 個月時間鎖到期後,恢復整個金庫 一個鎖定的設備。什麼也拿不到。
手機金鑰遭攻破/洩漏 從備份復原,取消所有懸而未決的提款,轉移資產至新金庫 最多只能拿到當時已存在手機熱錢包內的餘額
硬體錢包金鑰遭攻破/洩漏 你的手機解鎖日期比攻擊者早整整一個月(14 個月 vs 15 個月)。直接轉移資金,你在競賽中獲勝 什麼也拿不到(只要你在這一個月的領先期內採取行動)
兩台設備同時遺失 使用可選的社交恢復路徑復原 無
兩枚金鑰同時被同一個攻擊者在同一時間視窗內攻破 資產全失(這是所有頂級架構人都會失守的極限門檻) 全部資金

你真的必須非常「努力」才有可能在 Anzen 中弄丟資產。只要你不要蒙著眼睛、張開雙臂走在大街上,一手拿著解鎖的手機,另一手拿著解鎖的硬體錢包,你就是安全的。

無須信任 (Trustless): 沒有第三枚金鑰、沒有協同簽署伺服器、沒有掌握資金控制權的公司更新管道。連恢復機制都不增加任何信任假設:雲端備份是你的手機金鑰,並經過加密,只有你的硬體錢包可以解密。社交恢復只是在雲端增加另份副本,加密至信任聯絡人的金鑰:他們不持有任何資產,甚至不知道自己是你的恢復聯絡人,直到你告訴他們。他們僅僅是協助你解密雲端備份。即使恢復出了金鑰,仍需等待金庫的時間鎖到期。

所有資金流向均寫入你可以親自審閱的比特幣腳本中,或由你自己的硬體簽署。沒有任何人能被法院傳喚來沒收你的錢包,因為沒有其他人參與其中。

易用 (Easy to use): 設定良好後,硬體錢包每年只需要核准一次。其餘所有操作都在手機上完成。這比單簽硬體錢包還要省力(單簽硬體錢包每次支出都需要手持設備)。日常使用中,Anzen 的體驗無限接近行動熱錢包。

「但是預簽名交易聽起來很複雜」

底層技術確實複雜:年度簽署儀式會將金庫拆分為多個區塊,並預先簽署一整套結構嚴密的交易。但這些複雜性完全不需要呈現在使用者面前。這純粹是一個工程問題,且完全可解。就像沒有人需要理解 Diffie-Hellman 金鑰交換演算法才能透過 HTTPS 瀏覽網頁一樣,也沒有人需要理解如何管理預簽名交易鏈才能核准 Anzen 金庫政策。

真正的缺口在於硬體:目前的硬體錢包都不支援這類設計,因為它們都是圍繞著「簽署這筆交易(sign this transaction)」這一原語建立的。我們需要的原語是:「核准此政策(approve this policy)」。手機草擬計劃,硬體錢包的螢幕用通俗易懂的語言顯示全部內容。硬體錢包上的金庫政策審核畫面,對於 Anzen 的意義,就像瀏覽器網址列上的綠色鎖頭對於 HTTPS 的意義一樣。

【圖解畫面】按下一個按鈕即可預先簽署一整年的交易
以下為硬體錢包輸出的預簽名交易結構 (Output Structure)
鏈上 UTXO: 12 個月額度 (各 0.1 BTC) 預簽名交易鏈
1 月額度 (0.1 BTC) 1月1日生效 │ 隨時可撤銷 (立即生效)
2 月額度 (0.1 BTC) 2月1日生效 │ 隨時可撤銷 (立即生效)
3 月額度 (0.1 BTC) 3月1日生效 │ 隨時可撤銷 (立即生效)
... (4月 至 11月 邏輯完全相同) ...
12 月額度 (0.1 BTC) 12月1日生效 │ 隨時可撤銷 (立即生效)
鏈上 UTXO: 0.9 BTC (剩餘儲蓄金庫) 緊急處置套件
1. 緊急觸發交易 (Emergency Trigger): 立即生效
✔ 0.5 BTC 緊急提款: 觸發後 1 週解鎖生效 [提款]
✖ 0.5 BTC 緊急取消: 1週延遲期間隨時可阻斷撤銷 [攔截]
0.4 BTC 找零資金: 找零返回金庫 (Change back to vault)

金庫未來十二個月所需的所有交易,均透過一次按鍵完成簽署:每月額度、可取消額度的撤銷交易,以及緊急交易包。手機加密儲存這些交易並用其運行金庫,硬體錢包則放回抽屜,直到明年同一天前都無需使用。

我們下一步該怎麼走? (Where do we go from here?)

這不僅僅是一個想法。我已經在主網(Mainnet)上運行了一個概念驗證原型,使用真實資金,完全實現了所有金庫功能與恢復路徑。雖然尚未達到生產級標準(還很早期),但如果你想用少量資金進行測試,它已經可以使用了。

此外還有一套在 regtest 上運行的端到端測試套件,以及一個互動式 CLI 工具,可完整模擬手機、硬體錢包及它們之間的所有操作。

這是我的主網金庫地址,熱烈歡迎大家嘗試去攻擊它:
bc1pvaultn3953ns47dw6rpm6ahfpz449vcnns5rpnr5v2d0u55fekxq39v257

我非常歡迎同行進行技術審查(Peer review),也樂於接收任何反饋。目前專案庫還很簡陋,但歡迎讓你的 AI Agent 對準 github.com/lukechilds/anzen 並請它帶你瀏覽整個架構設計。

雖然目前它還只是一個 CLI 工具,但我將致力於開發 Anzen 的全棧參考實現,以完整展示其 UX 可以多麼流暢。這很可能是一個 iPhone App 加上一個自訂的側載 Companion Ledger App。

『譯注:這句話翻譯過來是: 「這(參考實現)很可能會包含一個 iPhone App,以及一個專為 Ledger 硬體錢包開發、可供使用者自行『側載』安裝的搭配程式。」

白話一點來說,作者(Luke Childs)的意思是:

為了向大家展示這套系統到底可以做得多順手,他計畫開發兩個互相搭配的軟體:

  1. iPhone 上的 App(手機端): 你日常使用的主要介面,就像一般的行動銀行或熱錢包,用來查看餘額、領取每月額度或發起緊急提款。
  2. Ledger 硬體錢包裡的專用小程式(硬體端): 因為目前市面上的硬體錢包(如 Ledger)預設都不支援這種「核准金庫政策」的新功能,所以他必須自己寫一個裝在 Ledger 裡的配套小程式,用來跟手機溝通,完成每年一次的核准儀式。

關鍵字淺白拆解:

  • Companion(搭配 / 配套): 指這個 Ledger 小程式是專門用來跟 iPhone App 湊成一組、互相配合運作的。
  • Sideloadable(可側載 / 手動安裝): 「側載」是指繞過官方應用商店。一般人下載 Ledger 小程式都是透過官方軟體(Ledger Live)直接搜尋安裝;但因為這是作者自己寫的原型測試版,還沒通過 Ledger 官方審核上架,所以使用者必須透過傳輸線,把軟體檔案手動「燒錄/安裝」進自己的硬體錢包裡。』

我的目標是同時開發參考實現與開放的 Anzen 協議。這個想法是讓任何人都能實現該協議。如果我能透過參考實現驗證其使用場景,並且大家看到了其中的價值、獲得了一些關注,那麼未來我們可能會看到:你可以在原生 Ledger 搭配 Ledger Live 上創建 Anzen 金庫;或者使用 Trezor 作為硬體簽署端、BlueWallet 作為熱錢包端;甚至是 Bitkey 支援可選的主權模式(Sovereign mode),將他們的協同簽署者替換為 Anzen 基於共識的替代方案。

Anzen 是作為個人副業專案開發的,與 Umbrel 無關,採 MIT 開源授權。

致謝:感謝 Casa、Bitkey 與 Liana 將比特幣自主託管帶入現代。Anzen 的設計深受這三個團隊開創的技巧啟發。

結語 (Final thoughts)

Coldcard 的狀況極其令人痛心,因為 Coldcard 用戶做對了一切。就我而言,產業標準建議一直都是單簽硬體錢包。雖然這次問題表現為 Coldcard 的韌體漏洞,但這歸根結底是比特幣技術社群的一次慘痛失敗。我們辜負了使用者,未能提供優質、高水準的自主託管工具。

事件發生後,我看到有人宣稱自主託管不適合大多數用戶;我看到有人宣稱每個人都應該轉向多廠商多簽;我看到有人宣稱用戶有責任自學安全的隨機數生成法。這令人失望,我們正在重複同樣的錯誤。

比特幣的腳本能力雖然有限,但遠未到束手無策的地步。金庫(Vault)類型的架構長期以來被嚴重低估與忽視。

我們擁有構建更好自主託管方案的工具,現在只需要開始動手構建。

2026年8月3日 星期一

SLP97 — 每款比特幣硬體錢包都很爛 (Every Bitcoin Hardware Wallet Sucks)

SLP97 — 每款比特幣硬體錢包都很爛 (Every Bitcoin Hardware Wallet Sucks)

來賓 (Guest): Michael Flaxman

日期 (Date): 2019-08-08

時長 (Duration): 01:53:09


[00:00] STEPHAN: Michael,歡迎來到節目。

[00:04] MICHAEL: 嗨。很高興來到這裡。謝謝你邀請我。

[00:09] STEPHAN: Michael,覺得你是那些真正被低估或關注度不夠的大神之一。許多資深的比特幣玩家(Hardcore Bitcoiners)都認識你,但還有很多人不了解你。你要不要向大家自我介紹一下?

[00:26] MICHAEL: 沒問題。我平時比較低調,這對我來說挺好的,所以我暫時沒打算改變。簡單介紹一下背景,我曾創辦過三家獲得風險投資的公司。最著名的是我的第一家公司 thumbtack.com,上週它剛登上新聞,因為它的估值達到了 17 億美元,這真的很棒。我的下一家公司是 Y Combinator 孵化的,雖然沒有第一家那麼成功,但依然在營運。到了 2013 年,我迷上了比特幣,並開了一家比特幣公司,不過很快就倒閉了。現在回想起來,在我掌握了所有比特幣知識後,覺得當時挺尷尬的。當你對新事物感到興奮時,就會想做點什麼。那時我們以為「冷儲存即服務(Cold storage as a service)」是個絕妙的主意。但現在我要告訴大家,為什麼你們應該自己保管比特幣。我從 2013 年開始開發比特幣應用程式,曾是 pycoin 的次要貢獻者。2015 年,我寫了 BlockCypher 的區塊瀏覽器,我不確定現在還有沒有在維護,但我知道現在還是有人用它來查東西。我應該去查看一下流量數據,因為我應該還有 Google Analytics 的權限。上次看的時候,每月的頁面瀏覽量達到八位數(數千萬),這太狂了。不過我已經很多年沒有參與這個專案了。2016 年,我寫了他們的命令列錢包(command line wallet),這些年我也寫過不少比特幣錢包。BlockCypher 的命令列錢包純粹是寫好看的,不建議用來放真正的資產,不過它支援測試網(testnet),所以我推薦可以用來當測試網錢包。它最大的特點是程式碼行數是所有比特幣錢包中最少的。在當時它還實現了一些很酷的高級功能,在 2016 年就能做手續費偏好設定(fee preference)真的很前衛。

[02:42] STEPHAN: 那絕對是超前時代了。

[02:46] MICHAEL: 你能從中真正看到比特幣是如何運作的。現在資源豐富多了,你可以去上 Jimmy Song 的 Programming Blockchain 課程,或者 Justin Moon 的 Buidl Bootcamp。有非常多的資源教你怎麼做。但在以前,你只能去讀比特幣 Core 的程式碼(那非常難懂且冗長),或者在網路上漫無目的地摸索。所以能有資源教你如何生成比特幣地址、如何給交易簽名,這些真的很酷。

[03:23] STEPHAN: 太棒了。我知道你最近也在 Jimmy 的 Programming Bitcoin 課程擔任助教,提供技術審查和反饋。

[03:34] MICHAEL: 對,我在 Jimmy 還沒成為加密貨幣大師(如果可以用這個詞的話)之前就認識他了。2013 年我們都是 Richard Kiss 的 pycoin(Python 比特幣庫)的次要貢獻者。2014 年 2 月我們在德州比特幣大會上見面,這挺奇妙的。後來我們還一起在 Paxos 工作過。他寫的程式碼真的很優秀,作為軟體工程師,跟他合作非常愉快,他非常有天賦。有時候覺得他現在不怎麼寫程式了還挺可惜的。也不能說完全不寫,他還在教學,也會寫一些其他的東西,但他真的很有天分。看到我和他現在都沒有全職寫程式,其實有點小感傷。總之這就是我認識 Jimmy 的經過,我讀過他的第一篇部落格文章,之後的每一篇幾乎都看過。看到他現在擁有 10 萬(甚至更多)的 Twitter 追蹤者、經營 YouTube 頻道、世界各地巡迴教學比特幣,覺得太棒了。我幫他當過幾堂課的助教,但這從來不是我的事業,我是免費幫忙的。我的原則就是商務艙機票加肋眼牛排大餐,這樣我就很樂意去其他城市見見比特幣社群的人,這很有趣。我同時也是他出版的 O'Reilly 書籍的技術審稿人。

保護比特幣安全的難點 (Difficulty of securing Bitcoin)

[05:10] STEPHAN: 太棒了。那我們來進入今天的正題:硬體錢包,以及為什麼很多硬體錢包其實並不安全。當然我們後面會聊到一些緩解措施,但首先讓我們聊聊其中涉及的一些困難點。為什麼保護比特幣安全會這麼難?

[05:31] MICHAEL: 在我們開始這一集全力痛批硬體錢包之前——雖然我立場堅定地支持這個觀點,但對於大多數人來說,硬體錢包依然是最好的選擇。如果你擁有比特幣,我強烈建議你自己掌握私鑰;除非你是專家,否則你應該使用硬體錢包。如果你是專家,你應該用開源軟體和自己採購的設備來組裝你自己的硬體錢包,但那已經超出我們今天的討論範圍了。對大多數人來說,就易用性、安全性和合理價格而言,硬體錢包仍是首選。我們談論的是 100 美元左右的設備,但它們依然非常難搞。我不想把大家嚇得去使用更不安全的方案,但你必須睜大眼睛清楚知道:比特幣世界裡沒有救濟機制。沒有撤銷按鈕。如果你搞砸了,你的錢就沒了。這真的很殘忍。許多入行很久、經驗豐富的比特幣老手,都有過自己的血淚史,比如「幾年前我弄丟了……」數字可能是 0.1 個比特幣,但有很多人跑來跟我說他們丟了 100 個比特幣,我只能心疼地說:「糟糕,這太慘了。」 請善用測試網(testnet),所有操作先在測試網上做一遍。多試幾次,重置你的設備,嘗試恢復。測試網是非常棒的資源,因為它的運作機制一模一樣,只是上面的代幣一文不值,所以你可以盡情練習。請先使用硬體錢包在測試網上操作。

話說回來,你剛才的問題是:為什麼即使使用硬體錢包,儲存比特幣依然這麼難?歸根結底,你得思考搞砸這件事的機率有多大?機率其實非常低。如果只是使用普通硬體錢包,不需要任何特別技能,只要保持警惕和謹慎來發送交易,我猜失誤丟錢的機率大概在 0.01% 到 0.1% 之間。這數字非常低。如果我告訴你,你點擊 Facebook 的讚按鈕,只有 0.01% 或 0.1% 的失敗率,你根本不會去想:「我用的是什麼瀏覽器?我有驗證軟體嗎?我點按的方式對嗎?我要按住多久?」你只會直接按下去,因為那無傷大雅。而且如果讚沒點成功,你也不會在意。

但是,如果你正在轉移一筆對你極其重要的資金,也許你要離開家鄉,這是你一生的積蓄,卻發現有 0.01% 的機率會失去所有財產,這絕對是無法接受的。這把我們帶到了一個奇怪的境地:如果你跟我說,只要多付 0.01% 的交易手續費,就能保證絕對不會出事(這只是假設,現實中沒有絕對的保證)。如果真有這種保證,我大概會說:「沒問題,這筆手續費我付定了。」 如果能拿到這個保證,就算直接損失 0.01% 我也願意。但不幸的是,如果你正好碰上了那 0.01% 的不幸事件,那就是 100% 的打擊。這就是為什麼這件事如此令人恐懼。

如果你曾經做過大額電匯,比如買房,你可能會打電話給產權公司確認:「嘿,這是電匯資訊,我收到這個人的郵件,以為他是產權專員,但我還是打總機確認一下這是不是家真實公司。」 就算電匯根據不同情況可能還有挽回的餘地,你都會有那種時刻。而在比特幣的世界裡,你同樣有這種恐懼,而且它是專為儲存巨額價值而設計的,所以這種恐懼會放大。每個人在打開冷儲存進行交易簽名時,都會經歷那種極度恐懼的時刻。如果沒有,那他們可能太魯莽了。很多人當初沒有領取 Bcash 或其他分叉幣的空投,就是因為覺得「為了那 10% 的收益,我才不敢動我的冷儲存」。無論當時分叉幣價值多少,對某些人來說,承擔風險根本不值得。這真的很難。

回到你的問題,關於你必須做對的事情:這段程式碼是否如我所想地在運作?以及,我執行的到底是不是我想執行的程式碼?這兩件事都極難驗證。歷史上有太多著名的駭客攻擊和 Bug 案例,多到指不勝指。許多演講都列舉過這些例子。重點是,你必須保持謹慎和偏執,因為這真的很難。

2013 年 SecureRandom 的 Bug (SecureRandom bug in 2013)

[11:14] MICHAEL: 我最喜歡的一個例子是,2013 年 Android 在 Java 的 SecureRandom 實現中出現了一個 Bug。顧名思義,SecureRandom 是一個用於安全獲取隨機位元資料的函數。在比特幣簽名中,你需要一個隨機組件,這是 ECDSA 簽名證明的一部分。如果那個數值是隨機的,你就永遠不需要再去理會它。你可以把它想像成一個 Nonce(只使用一次的隨機數),它只是用來證明你擁有該私鑰。但如果那個 SecureRandom 資料實際上「不隨機」,那麼其他人就能瞬間推導出你的私鑰。從任何角度來看,這都不是什麼高難度的攻擊。網路上有很多開源程式碼,只要看到你的簽名就能做到。只要他們看到交易簽名被廣播,就能立刻知道你的私鑰,這太可怕了。2013 年,許多使用 Android 錢包的人因此損失了資金。這種事情是任何人都不可能提前預防的。開發者使用了名為 SecureRandom 的官方隨機數庫,他們做了正確的事。然後突如其來地,你的錢就沒了。這就是典型的例子。雖然他們在 2013 年後修復了這個漏洞,但這反映了問題所在。

2015 年 BitGo 恢復腳本的 Bug (BitGo recovery script bug in 2015)

[12:48] MICHAEL: 還有 BitGo,這是一家聲譽非常好的公司,我並不是要針對他們說壞話。他們提供了一個恢復腳本,以便在他們倒閉時讓用戶能夠提取資金,這本來是非常好的舉措。腳本是開源的,他們雇用了非常聰明的軟體工程師,公司成立很久,程式碼也公開了很久。結果有人執行了那個腳本,直接丟失了 85 個比特幣。那是 2015 年 4 月的事。值得表揚的是,BitGo 承擔了責任,自己掏腰包補償了那個人的損失。但想想看,前一秒你還在執行程式碼想著:「好,我要把錢發出去」,下一秒你卻驚呼:「我的 85 個比特幣去哪了?」,這真的太痛了。你永遠不該經歷這種時刻。飛機起降時,我們不會說:「墜機機率只有 0.1%,你大概會沒事的。」 我們有各種冗餘機制和檢查清單。這完全是兩碼事。雖然比特幣領域還沒達到那種嚴謹度(目前還是快速迭代、允許出錯的階段),但它運作得越來越好,每年都在進步。

2018 年 Electrum 的漏洞 (Electrum bug in 2018)

[14:14] STEPHAN: 有些例子是無心之過,但有些則完全是出於惡意,有駭客試圖通過各種方式入侵,誘騙你執行可能含有惡意軟體的程式碼。

[14:29] MICHAEL: 沒錯。比如 2018 年 12 月在 Electrum 上發生的事件。Electrum 是一款優秀的軟體,我很推薦它,我不是說它不好。但有人發現了一個機制,如果你運行一個 Electrum 伺服器(補充一下,我們不知道是誰在運行這些伺服器,可能很大一部分是 Chainalysis 運行的,大家最好假設連接 Electrum 伺服器時就是在連接政府的地址資料庫)。如果你使用 Electrum,強烈建議運行自己的 Electrum 伺服器,雖然這很麻煩。總之,當你連接到伺服器時,伺服器可以向你發送任何訊息。當時有惡意伺服器發送了極具欺騙性的訊息:「嗨,你的 Electrum 版本過舊,請點擊此處更新。」 而你下載的所謂更新版本,其實是偷錢的惡意 Electrum 軟體。這個漏洞直到今天仍在以一種奇怪的方式影響著 Electrum。現在,新版的 Electrum 伺服器無法再發送那種惡意訊息了。而且為了強制用戶升級,Electrum 伺服器會拒絕連接舊版的 Electrum 客戶端,所以你必須升級你的 Electrum 客戶端,否則你只能連上那些惡意伺服器。

安全地安裝比特幣軟體 (Securely installing Bitcoin software)

參考資料: Luke Dashjr 關於如何安全安裝 Bitcoin Core 的文章: https://medium.com/@lukedashjr/how-to-securely-install-bitcoin-9bfeca7d3b2a

[16:06] STEPHAN: 我的聽眾水平各异,有初學者,也有中高級玩家。但在那個例子中,理論上大家在下載新軟體時,應該要進行 GPG 簽名驗證,對吧?大家應該驗證發行的軟體是否由已知開發者(例如 Thomas Voegtlin)的私鑰簽名。理論上,人們應該檢查更新簽名是否匹配,但實際上沒多少人會這麼做。

[16:38] MICHAEL: 沒錯。這就是私鑰管理變得極其困難的地方。對於每一件事,你可能會想:「算了,應該沒事吧,我是在 Electrum 官網下載的。」 但你真的能確定嗎?那是真正的 Electrum 官網,還是山寨網站?當時有 SSL 證書嗎?如果沒有,是不是有中間人攻擊(Man-in-the-middle)向你提供了一個惡意複製版的 Electrum 客戶端?這些都不是遙不可及的科幻攻擊。駭客有極強的經濟動機去做這件事。如果你是一個有天賦的駭客,又不是幫公司做防禦的白帽駭客,你想做黑帽駭客去偷錢,那加密貨幣絕對是最佳目標。

以前如果入侵了別人的電腦,你頂多只能給他們的朋友發垃圾郵件說:「嘿,快來買這個勞力士。」 幾乎沒人會上當,因為太明顯是垃圾郵件了。就算他們發送了幾十億封郵件,絕大多數都會被垃圾郵件過濾器攔截;剩下的一小部分人中,只有極少數會用 iTunes 禮品卡去買假勞力士。那種將惡意軟體變現的方式太艱難了。但現在,聰明的駭客會直接盯上人們的比特幣軟體。攻擊手段太多了。我可以給某人提供一個惡意比特幣錢包,讓他們完全受我控制。或者做一些更隱蔽的手腳,比如竄改顯示介面,讓用戶以為那是自己的接收地址,但實際上是攻擊者的地址。這是非常常見的攻擊。或者干擾他們的隨機數來源。雖然用戶還是在運行軟體,但沒有獲得正確的隨機性。

每一步你都必須極其小心。你絕對應該驗證所運行軟體的簽名,但這恰恰說明了這有多難。你只能提高系統安全的「機率」,永遠無法達到 100%。但當你進行比特幣交易時,往往是因為你依賴它來儲存資產,你極度渴望 100% 的安全性。

我們接下來要聊的就是「多重簽名(Multisig)」。多重簽的好處在於,如果你使用兩個不同的硬體錢包或兩種不同的設定,並且需要兩個簽名(具體門檻可以自訂,例如 3-of-5、4-of-5、2-of-3)。只要你使用超過一個簽名,攻擊者就必須同時破解這多個配置中的漏洞。你可以把一個成功率 99.9% 或 99.99% 的方案(比如 Trezor),結合另一個方案(比如 Coldcard)。多重簽名會產生疊加效應,現在駭客必須同時攻破這兩套系統。這不僅僅是難度翻倍,而是呈指數級增加。這就是我們待會要討論的——多重簽名的強大力量。

在硬體錢包上核對比特幣地址 (Checking Bitcoin addresses on the hardware wallet)

[20:27] STEPHAN: 讓我們梳理一下駭客試圖入侵的幾種常見方式。另一個例子可能是,惡意軟體讓你複製了錯誤的地址,並貼上了駭客自己的接收地址。這應該也是個典型案例。

[20:45] MICHAEL: 這個非常常見。對此,有一點非常重要:你必須永遠在最安全的地方——也就是你的硬體錢包上——核對地址。最簡單的攻擊就是誘騙你在電腦上複製貼上錯誤地址,然後直接在硬體錢包上按發送。但實際上,硬體錢包螢幕上記錄的才是你必須確認的。你應該打電話給對方,或者通過安全的管道溝通:「嘿,我要轉帳給你了。我在硬體錢包螢幕上看到的地址是這個,這是你的地址嗎?」

高明的攻擊者很聰明。他們會生成開頭幾位和結尾幾位完全相同的地址,因為人類很懶惰,習慣依賴直覺捷徑。沒人想去核對整串比特幣地址。大家往往覺得:「嗯,前 5 個字元一樣,後 5 個字元也一樣,那就是它了。」

[21:56] STEPHAN: 生成這種客製化地址(Vanity address)在計算上有多難?比如 Andreas 名下有個「1andreas」開頭的地址。生成包含特定字元的地址難度更高。如果駭客試圖利用這種心理捷徑,讓前幾位和後幾位字元匹配,你能告訴我們這對駭客來說難度增加了多少嗎?

[22:29] MICHAEL: 比特幣地址生成的底層邏輯是,背後有一個隱藏的指數(私鑰),這是一個介於 1 到 2^256 之間的龐大數字。這個數字大到難以想像,比宇宙中的原子總數還要多。如果有人能猜中這個數字,就能偷走你的比特幣,但因為數字太大了,就算算到宇宙毀滅也猜不到其中一小部分。這擁有極高的熵(Entropy)。你從私鑰開始,進行一連串操作,包括用 SHA-256 哈希兩次,用 RIPEMD-160 哈希一次。如果是早期的非原生 SegWit 地址,還會進行 Base58 編碼,加上校驗碼(Checksum),最後輸出一個看起來完全隨機的地址。

如果有人想生成像 Andreas 那樣的客製化地址,他們只需要進行海量的試錯組合。這在概念上非常類似工作量證明(Proof of Work),即嘗試大量組合,看看哪個區塊哈希開頭有一堆零。區塊哈希開頭總是有很多零,因為那是以十六進制表示的大數,前面的零就是達到比特幣難度門檻的算力證明。

客製化地址也是類似的概念,只是你不是在湊難度數值,而是在湊「能否拿到包含這幾個指定前綴或後綴的地址」。難度是字元數量的函數。每增加一個字元,難度就會呈指數級上升。這就是為什麼我們能看到「1andreas」,但看不到「1andreasantonopoulos」。我不敢說絕對不可能,因為這需要精確計算,但憑直覺來說,要湊出那麼長的指定字元幾乎是不可能的。通常我們看到的客製化地址最多大概到 9 個字元左右,再多增加一個字元成本都極其昂貴。雖然你可以把核對門檻設高一點,但最安全的還是把「整個地址」完整讀一遍。人眼容易出錯,可能會漏掉某些字元。如果攻擊者很聰明,給你的地址前 4 個字元有 3 個正確,後 4 個字元也有 3 個正確,你大概率就會上當。這真的很難防。

[25:30] STEPHAN: 這太硬核了。謝謝你的解答,因為這確實是很多人常用的簡化核對方式。

[25:39] MICHAEL: 你永遠應該假設攻擊者比你更聰明,擁有比你更多的硬體設備,因為你不是他們唯一的目標。他們是在撒網攻擊所有人。他們可能用 GPU 在批量生成客製化地址,當你看著地址想:「哇,這 8 個字元都對上了,不可能這麼巧吧」,但這可能恰恰是他們最擅長的事——利用龐大的財務誘因去湊齊這 8 個字元。

供應鏈風險 (Supply chain risk)

[26:13] STEPHAN: 這太可怕了。那供應鏈風險呢?這也是大家經常討論的一個大因素。

[26:21] MICHAEL: 供應鏈風險絕對令人毛骨悚然,因為它完全超出你的控制範圍。你可以採取一些措施來將風險降到最低。比如你說:「我只在硬體錢包公司親自出席的活動上直接向他們購買。」從該公司的員工手中接過設備,勝算肯定比在 eBay 上買二手貨要高得多(絕對不要買二手的)。這是降低風險的一種方式,但你無法得知上游供應鏈的風險。他們不是在自家地下室手工製造的,而是外包給第三方,使用現成的商業元件。上游留下了太多製造漏洞的空間。

最可怕的情境是:假設存在一個漏洞(我不是說現在一定有,但我們應該假設所有東西都已被破解),作為攻擊者,你在經濟上有強烈的動機去「等待」。讓大量的資金注入到你知道私鑰的硬體錢包 A、B 或 C 中。等到總金額積累得足夠大,比如超過 1 億美元時,就是實施「退休式攻擊」的時候了。你同時洗劫所有資金然後人間蒸發。沒有人能查出是誰幹的。晶片製造商會推卸給軟體,軟體開發商會推卸給韌體。大家互相甩鍋,真相永遠成謎。整個信任體系都會崩潰。

外面的世界很危險。我做盡了各種錫箔帽級別(極度偏執)的防護,但我依然假設自己所做的一切並非 100% 安全。我認為真正改變整個安全方程式本質的,是多重簽名。

硬體錢包支援多重簽名的好處 (Benefits of multisignature support on hardware wallets)

[28:24] STEPHAN: 一個優秀的硬體錢包應該是什麼樣子?覺得最好的切入點就是「多重簽名支援」。多重簽名究竟是如何提供幫助的?

[28:33] MICHAEL: 多重簽名剛出現時,很多應用場景集中在保護企業內部的私鑰資產和營運流程上。這意味著你可以把一把鑰匙放在家裡,一把放在辦公室,一把埋在你最喜歡地方的藏寶圖裡。如果你需要三把鑰匙中的兩把才能動用資金,那麼即使有人闖入你的家、你的辦公室,或者找到了你埋藏的寶藏,他們也拿不到你的比特幣。這是一個使用場景。

另一個場景是公司營運:假設你們公司有三個人,採用 2-of-3 模式,需要三個人中的兩個人授權才能動用資金。或者你可以透過像 BitGo 這樣的託管服務進行跨機構合作,設定 2-of-3,其中一把鑰匙由 BitGo 掌握……或者舉個更好的例子:Unchained Capital(如果我沒記錯的話,他們好像是你們讚助商)。

[29:43] STEPHAN: 對,沒錯。

[29:47] MICHAEL: 他們總部就在奧斯汀。假設 Unchained 掌握一把鑰匙,你掌握一把,另一個託管商掌握一把。在 2-of-3 的架構下,必須有兩個實體同時被駭才會出事。這確實是事實,多重簽名能為此提供保障。

但我對多重簽名真正感到興奮的是:你可以擁有**獨立的硬體和軟體技術棧**。這些簽名可以來自放在你桌上的兩個硬體錢包。但如果一個是 Trezor,另一個是 Coldcard,攻擊者現在必須同時破解這兩家公司的供應鏈。攻擊者必須同時攻破這兩家公司的軟體實現。既然這些設備存在的意義就是「不信任主機電腦」,它們就應該自己驗證一切。這對你的安全性大有裨益。

使用硬體錢包時,這是一個非常重要的思考點:我們之所以使用硬體錢包,是因為我們**預設主機電腦已經感染了惡意軟體**。這才是我們買硬體錢包的原因。如果我們認為桌上型電腦絕對安全,我們根本不需要硬體錢包。硬體錢包提供了那一層額外的防禦。抱歉,我好像有點偏離你的問題了。

[31:10] STEPHAN: 沒關係,講得很好。你剛才提到的另一個重點是「你必須把所有事情都做對」。如果只用單一硬體錢包,你必須保證每個環節都萬無一失才能獲得安全性。你能詳細聊聊多重簽名在這方面是如何提供幫助的嗎?舉例來說,假設你同時使用 Trezor 和 Coldcard,而在公司不知情的情況下,其中一個團隊的軟體或底層程式碼出現了漏洞,在 2-of-3 的機制下,用戶為什麼依然是安全的?

[31:52] MICHAEL: 這通常被稱為 $m$-of-$n$ 門檻機制。在總共 $n$ 個可能的簽名中,你需要 $m$ 個簽名。這是可以由用戶自由配置的。你可以選擇 2-of-3,這是市面上最常見的組合。你會說:「好,我有這三個硬體設備(比如一個 Trezor、一個 Coldcard 和一個 Cryptosteel 備份),我需要三者中的兩個來簽名。」嚴格來說,不是設備本身簽名,而是這些設備所持有的公鑰進行簽名。你擁有這三個設備,需要其中 2-of-3 進行簽名。

即使其中一個設備被**徹底破解**——不是那種只在極端情況下出錯的輕微漏洞,而是直接把你的私鑰發回駭客的伺服器,讓他們可以為所欲為;甚至遠端更新了設備,讓駭客能直接控制它。這是擺在你桌上的一塊完全被控制的硬體,最壞最壞的情況。但因為你的門檻是需要 2-of-3 簽名,單靠這一個設備對駭客來說根本毫無用處。他們必須同時攻破第二個設備。

發生第一種極端情況的機率已經很低了;要同時發生第二種,更是難上加難。你不太可能成為那種專門的個人目標。駭客並非精心策劃了一套不可思議的方案專門來破譯你的比特幣積蓄。他們是在對大眾進行無差別攻擊,因為最好的攻擊是那種可以在異國遠端實施、完全不需要物理接觸的攻擊。

如果有人闖入你家,因為他們拿到了一把鑰匙,還需要第二把,這對他們來說風險太高了。雖然仍有可能(所以你不該告訴別人你的比特幣放在哪,可能還需要裝警報器或準備槍支)。但這與有人說「嘿,我可以在這裡植入惡意軟體直接偷走幾千萬美元」完全是不同層級的攻擊。對於缺乏實體入侵能力或不想冒險實體作案的駭客來說,網路攻擊太有誘惑力了。這是完全不同的風險型態。

[34:31] STEPHAN: 另一個要素是,不同的硬體錢包之間是否存在某些共同的軟體底層?據你的經驗,它們大部分是獨立隔離的,還是有共同風險?

[34:43] MICHAEL: 這點其實挺嚇人的,因為代碼複製貼上的現象非常嚴重。密碼學真的很難。如果在你使用的程式語言中有一個現成的庫,你很可能會大量借用它。不幸的是,幾乎所有的硬體錢包都是用 Python 和 MicroPython 寫成的。這並不理想,但我認為這是次要問題。

同樣地,你可以追求極致安全的系統,用三種不同的語言編寫。我生成的每一個接收地址,都會用兩種不同的程式語言進行驗證。我只是不想對自己是否擁有該地址的私鑰產生任何懷疑。但這種做法可能很不主流。我希望有一天能有足夠多的硬體錢包,你可以直接選擇「嘿,我要一個用兩種不同語言開發的組合」,並且依然有五種優質產品可選。但很遺憾,我們現在還沒生活在那樣的世界裡。

[35:48] STEPHAN: 關於軟體和硬體之間的互動,據我了解,很可能軟體層面沒問題,但硬體層面出了差錯。硬體並沒有執行你以為它在做的事。你以為自己在軟體層很安全,但實際上在硬體層就被攻破了。也有這種情境對吧?

[36:20] MICHAEL: 對,這是非常棘手的問題之一。如果軟體編寫具備防禦性,那麼每個模組都不會盲目信任其他模組。例如,早期我們習慣直接信任 `/dev/random`(電腦上的隨機數源)來獲取隨機性。這本該是 SecureRandom 在做的事。後來我們學到,可以在簽名中使用決定性的 $k$ 值(Deterministic $k$-values),它們看起來是隨機的,但並不依賴隨機數生成器。例如在簽名時,你可以編寫軟體來規避硬體隨機數生成器劣質的風險。

在簽名時是這樣。但在生成私鑰時,你必須有隨機性來源。現在有些硬體錢包具備很酷的功能,允許你自己輸入隨機性,因為隨機性具有疊加性。你可以對位元進行 XOR(異或)操作,將自訂隨機性疊加到隨機數生成器上,這百利而無一害。

在我那個很短的 bcwallet(BlockCypher 命令列錢包,再強調一次不建議實際資金使用,僅供學習)中,我會要求用戶在鍵盤上亂敲。因為我假設電腦的隨機數生成器已被破解,所以讓用戶敲擊鍵盤提供額外的熵。我把用戶提供的隨機性與硬體隨機性結合起來,這樣即使硬體糟糕,軟體也能進行彌補。

理論上可以採用很多聰明的技巧。另一個常見的做法(據我所知 Coldcard 支援)是擲骰子。你甚至可以確定性地做這件事,雖然你需要擲很多次骰子,這很累也很麻煩。但如果你要接收大量比特幣,花幾塊錢買幾個骰子坐在那裡擲,這是另一個聰明的作法。

硬體與軟體互動的方式多不勝數。甚至硬體內部的硬體之間也是如此,硬體錢包裡可能有一個微控制器(MCU)和一個安全晶片(Secure Element)。如果你的 MCU 可以直接指揮安全晶片做事,那麼安全晶片其實沒有提供任何額外安全性,因為不安全的微控制器可以控制它。這就像一個無底洞,越挖越深。

再次強調,解決方案就是**來自兩個不同設備的兩個簽名**。為了說明這種疊加好處:假設我持有巨額比特幣,但我不想處理多重簽名的複雜性(不想多保管一份備份、不想記住它、不想交代家人如果我出事該去哪裡找),我只是想確保軟體正常運作,那我會選擇 2-of-2 模式。

對於第二個簽名,我可以使用一個並不怎麼安全的金鑰。我可以把它放在桌上,貼個大標籤寫著「2-of-2 密鑰在此」。它可以是一個沒有密碼(Passphrase)的助記詞。甚至可以是短長度的助記詞(不過最好還是用完整的 24 字)。我可以複製很多份,家裡放一份、公司放一份、家人那放一份、保險箱放一份,因為這只是 2-of-2 中的其中一把鑰匙。除了我的第一把核心簽名外,我用這把鑰匙來做第二個簽名。

儘管大家會說:「嘿,這太不安全了,明文放在桌上,完全沒好好保管」,但**在 2-of-2 中增加第二個不安全的簽名,比單簽名 1-of-1 更加安全**。如果你把你誓死守護的 1-of-1 設定,加上第二個看起來不安全的簽名,你反而提升了整體安全性,這是一個非常違背直覺的事情。想著「我要做一個很不安全的行為,結果卻增加了安全性」。我不是鼓勵大家不重視安全,但如果你對多重簽名猶豫不決,哪怕增加一個看似不嚴謹的多重簽名,你的狀況都會變好,因為攻擊者現在必須同時攻破兩個獨立的系統。

物理隔離 / 空氣隔離 (Air gaps)

[41:24] STEPHAN: 另一個話題是空氣隔離(Air gapping)。實現這一點有不同的方法。我知道 Coldcard 提供了 MicroSD 卡的選項,基本上可以用它在連線電腦和硬體設備之間傳輸未簽名或已簽名的交易。你能聊聊空氣隔離的概念嗎?為什麼它很重要?它有什麼幫助?

[41:52] MICHAEL: 當設備連接到網際網路時,我們稱之為「熱機器(Hot machine)」。當斷開網路連線時,我們稱之為「冷機器(Cold machine)」。你的筆記型電腦可能介於兩者之間,因為它大部分時間連網,但很容易拔掉網線。

熱機器非常危險,因為它的軟體可能會自動接收更新。假設攻擊者攻破了該服務的某個分發系統。想像一下,硬體錢包或軟體錢包公司的離職員工攻破了他們的 GitHub 帳號或發布管道,發布了受污染的軟體(這是完全做得到的)。然後他們可以推卸說:「天啊,是第三方幹的,跟我沒關係。」 如果他們做到這一點,而你的電腦正好連著網,自動下載並安裝了更新,你基本上什麼都沒做就被攻破了。

空氣隔離是第一道也是最重要的一道防線。你必須使用良好的空氣隔離,因為如果你的電腦是永久隔離的(從不連網、放在家裡、只安裝過一次軟體)。在那唯一一次安裝時,你用最好的方式(例如 PGP 簽名驗證,或者先在乾淨機器上下載)進行了驗證,那麼未來他們的軟體供應鏈發生什麼事都不重要了,因為你的機器壓根沒連網。空氣隔離非常強大。

核反應爐採用空氣隔離是有原因的。他們不希望有人點擊郵件附件安裝了病毒從而干擾核反應爐。大家都喜歡這種系統,但即使是空氣隔離也有漏洞。最著名的攻擊是 2010 年美軍發動的 Stuxnet(震網病毒),用來癱瘓伊朗的核反應爐。這簡直就像詹姆斯龐德電影裡的情節。他們把惡意軟體裝進數百萬個 USB 隨身碟裡,連接到普通電腦時什麼都不做,所以沒人注意到;但當它連接到特定系統(已知運行該核設施硬體和軟體的電腦)時,就會釋放惡意軟體。這據信讓伊朗的核計畫大幅倒退。成功了,他們用 USB 隨身碟跨越了空氣隔離。

如果這種技術已經存在,政府能做到,那麼個人攻擊者也能製造出能跨越空氣隔離的 USB 隨身碟。Coldcard 的 SD 卡空氣隔離是目前市面上能買到最好的現成空氣隔離產品。我玩過一些即將上市的新硬體錢包原型,他們使用 QR Code 進行空氣隔離,我迫不及待想等這些公司推出了,因為太棒了(譯注:2026年有提供QR Code 進行空氣隔離的硬體錢包已經非常多)。目前如果你想要適當的 QR Code 空氣隔離,幾乎只能用 Electrum 或者自己組裝。那不是很理想,你得把筆電倒過來去掃另一台筆電上的 QR Code。介面不夠友善,但 QR Code 極難被遠端用溢位漏洞攻擊;相比之下,SD 卡雖然機率極低,但理論上仍有可能。

最糟的就是直接把硬體錢包插進熱機器裡。再次強調,我們預設熱機器已被惡意軟體感染。這正是我們使用硬體錢包的原因。我們不是為了它好看的螢幕、按鍵或慢吞吞的處理器而用它,我們用它是因為它是隔離的,結果我們卻把它直接插進被感染的機器裡。目前的常見做法並不理想。QR Code 很棒,SD 卡也不錯。

如果這是你唯一的簽名來源,我會非常不安。但如果你有多重簽名,其中一個採用這種方式,我可以理解其價值。進行空氣隔離時要記住一點:你可以把主機電腦當作「完全被惡意軟體感染」來處理。這沒關係,因為空氣隔離設計初衷就是安全隔離。如果你透過 QR Code 將資料從受感染的機器傳輸到隔離的硬體錢包,其實沒有太大危險。它無法對你的離線機器做什麼。

當然你不該留著一台有惡意軟體的電腦,但我們可能多少都有。因此,如果你能把安全防護集中在空氣隔離的私鑰管理方案上(無論是硬體錢包還是自建方案),把所有防禦精力放在那裡,其餘部分就可以相對隨意一點。這是很好的「易用性與安全性」的權衡。你要集中精力保護最安全的核心,不需要太糾結熱機器或是否點錯了郵件連結(當然最好別點,但萬一點了,你的私鑰依然離線)。

PSBT 部分簽名比特幣交易 (PSBT BIP 174)

參考資料: BIP 174 規範: https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki

[48:17] STEPHAN: 聊到這個話題,我們必須提到 PSBT(Partially Signed Bitcoin Transactions,部分簽名比特幣交易)。Michael,能告訴我們為什麼這很關鍵,PSBT 對我們有什麼幫助嗎?

[48:31] MICHAEL: PSBT 也被稱為 BIP 174,它只是一種傳輸未簽名比特幣交易的標準化方式。表面上看它沒什麼令人興奮的,它只是一個編碼格式,標準化了「這是一個 2-of-3 交易」、「這是尋找此地址的推導路徑(Derivation path)」等資訊的傳遞方式。

硬體錢包通常不儲存真實數據,它們是無狀態(Stateless)的。你可能有一個種子(Seed),所有的私鑰都從中推導出來,但要找到對應的私鑰其實很難,因為一個種子可以生成幾十億個密鑰。如果我想找到與某個 UTXO 交易的密鑰,我不想把每一種組合都試一遍,我想知道該在樹狀結構的哪個路徑下尋找。

PSBT 或 BIP 174 的諸多好處之一,就是提供了一套標準指令:「嘿,使用你的擴充公鑰(xpub),這是找到你私鑰的推導路徑。」現在你有了一個可以推導私鑰的種子,順著路徑就能極快地推導出私鑰(大概只需要 50 到 100 毫秒)。

你的主機電腦(再次強調,可能已被惡意軟體感染)將這些指令發送給硬體錢包進行驗證:「是的,我在那裡有一個地址;是的,交易結構是這樣;是的,這個格式合規;這是手續費;這個找零地址屬於我;我可以計算輸入、輸出和找零的總和,算出我花了多少錢。」它可以非常直觀地展現給用戶。

我們常把比特幣交易簡化為「我發送 1 個比特幣給你」,但實際上可能包含 10 個輸入和 2 個輸出。作為人類,你很難在大腦裡快速計算「輸出總和減去輸入總和是多少?哪些是我控制的,哪些不是?」 如果有一個標準格式將這些資訊轉達給硬體錢包,讓硬體錢包能夠無信任地理解和驗證,硬體錢包就能直接顯示:「嘿,這是要簽名的交易,發送 1 個比特幣到地址 A。」你只需要確認地址 A 確實是對方的,這很容易,然後按下確認即可。

無論門檻是 2-of-2、2-of-3 還是 2-of-5,它都能顯示:「嘿,這是 2-of-5,你是其中之一。」不過這裡有一個小缺陷(希望未來能改進):存在一種新型攻擊。假設是 2-of-2 模式,我打開硬體錢包,顯示「需要兩個密鑰,你是其中之一」。我怎麼知道另一個密鑰是誰的?風險在於,另一個密鑰其實是攻擊者的。

我把資金發送到一個 2-of-2 地址,我擁有一把鑰匙,但攻擊者也有一把。雖然目前還沒聽說現實中有這種案例。當攻擊者在區塊鏈上看到這筆交易時,他們會說:「哈哈,你的錢被我綁架了。如果你想拿回資金,我很慷慨,跟你五五分」或者其他博弈論下的勒索方案。這會是很可怕的事。

有些錢包在這方面做得比較好,Trezor 會顯示「嘿,這是 2-of-2,你擁有其中一個」。Ledger 則直接顯示「祝你好運,請信任你那被感染的電腦」。這簡直瘋了,我真心希望他們修復這個問題,他們目前的立場非常愚蠢。多重簽名確實帶來了這一個新的潛在負面因素,但未來 UI 會改進,你可以驗證那是否真的是你的密鑰。(譯注:文章中提到 Ledger 當時「祝你好運,請信任你那被感染的電腦」的愚蠢立場,早已在幾年前透過韌體升級與比特幣 App v2 升級被修復。只要使用者有落實在 Ledger 螢幕上核對並註冊多簽錢包的步驟,這類勒索/綁架攻擊在硬體層面上就無法成立。)

[53:20] STEPHAN: 正如你所說,你應該使用硬體設備上顯示的地址,而不是電腦上顯示的。目前的困難之一是,早期的硬體錢包螢幕非常小,不一定有足夠的空間顯示所有細節。希望隨著新錢包和新產品……我知道 Crypto Advance 的 Stepan Snigirev(我之前的來賓之一)談過這個想法,即擁有更大的螢幕,可以顯示所有細節:「這些輸入、這些輸出、2-of-2 結構」。所有細節一目了然,讓用戶在簽名設備上記錄下到底簽署了什麼。

[54:12] MICHAEL: 對,我對一些新產品感到興奮。我看過他們的一些原型,Stepan 非常聰明。你跟他錄的那集很精彩。他做過一些關於硬體錢包漏洞的優秀演講,我非常推薦,之前也推特轉發過,我們可以放在節目連結裡。

你需要一個足夠大的螢幕來進行驗證。現實是,你不需要巨大的螢幕來做交易驗證,只要能清晰顯示「發送 1 個比特幣到地址 X,手續費為 Y」就夠了。如果你提供了足夠的資訊(PSBT 就是一個向硬體錢包提供資訊的好格式),硬體錢包就能驗證其餘的一切。

可驗證的資訊量其實很微妙。例如,如果你簽署的是 SegWit 交易,你會對輸入值進行簽名。你可以驗證輸入和所有輸出都在交易中,從而驗證手續費。但如果你簽署的是非 SegWit(Pre-SegWit)交易,驗證輸入值的唯一方法就是在區塊鏈上查詢它們。有些錢包會提供證明說:「這是你正在簽名的內容。」有些錢包則會覺得這太難了,因為資料量太大。

想像一下,你簽署的輸入恰好是一個挖礦區塊獎勵(Coinbase transaction)的輸出。那個交易給礦池發放收益,包含了 1,000 個接收者。我們必須向你展示這 1,000 個接收者的交易,才能向你證明你正在簽署的前一個輸出是什麼。這變得極不切實際。結論就是:「如果你要用硬體錢包,你應該使用 SegWit 錢包,因為那更好。」

因為 SegWit 在 BIP 143 中改變了序列化格式,使得你簽署的輸入同時包含了簽名內容和其數值的冗餘副本。硬體錢包可以檢查並確認:「嘿,我簽署的這個輸入裡有多少比特幣?」否則網路會拒絕它。SegWit 裡有很多聰明的設計是大多數人不知道的,因為之前的行銷太扭曲了(以為只是 Roger Ver 宣傳的那樣)。他們不知道 SegWit 修復了交易可變性(Transaction malleability),允許硬體錢包更精確地簽署輸入,而且它還相當於一次區塊擴容。

扯遠了,重點是,你希望硬體錢包盡可能驗證所有能驗證的東西。螢幕能提供一部分幫助,但很多細節隱藏在實現過程裡。如果錢包不驗證找零地址是你的還是攻擊者的,螢幕再大也沒用,你根本不知道發生了什麼。如果不驗證輸入和輸出,你就不知道手續費是多少。魔鬼都在細節裡,老實說,沒有哪一款錢包做到完美。**兩個錢包就是你的答案**,因為這樣攻擊者就必須同時欺騙它們兩個。即使其中一個沒做到完美,另一個希望不會有完全相同的漏洞。

助記詞與密碼短語 (Mnemonics and passphrases)

[57:49] STEPHAN: 我們來聊聊助記詞和密碼短語(Passphrases)。用戶在初始化錢包時,會寫下 24 個單字的種子。也許他們會設定一個密碼短語,設備可能還有 PIN 碼。用戶可能面臨的困難是,如果需要恢復錢包,顯然不想把種子輸入到連網且可能帶有惡意軟體的電腦上。對此你有什麼建議?怎樣才是良好的做法?

[58:30] MICHAEL: 你的助記詞就是你的比特幣。擁有比特幣意味著擁有控制至少一個 UTXO 的私鑰,而助記詞讓我們能擁有一個分層確定性錢包(HD Wallet),從而管理海量的私鑰。在 HD 錢包出現前,我們使用「金鑰池(Key pools)」,那簡直是災難。金鑰池就像是:「我先生成 100 個地址和 100 個私鑰,做好備份,然後用它們交易。隨著交易增加,我再生成更多地址。」問題是,如果我在第一天創建了 100 個地址並做了加密備份,存放在保險箱、交給律師和家人,然後我進行了第 101 次交易。現在我的備份就過期了,我必須重新做一次備份。

解決方案就是 HD 錢包,這太棒了,現在每個錢包都應該是 HD 錢包。但問題是,我該如何記住我的主私鑰(xpriv)?它太長了,有 512 位元,你不可能記住。但 24 個單字的助記詞可以確定性地映射到你的主私鑰,這是可以背下來的。我們現在幾乎所有錢包使用的核心就是助記詞。通常是 24 個單字(雖然也可以更短,但除非你非常專業,否則別考慮更短的選項,堅持標準長度)。

有了這 24 個單字後,你可以選擇性地加上第 25 個單字——密碼短語(Passphrase)。這個密碼短語最酷的地方在於它賦予了你「合理的推諉性(Plausible deniability)」。如果有人用槍指著你的頭說:「快輸入密碼」,你可以輸入 `12345`,裡面有 1 個比特幣,劫匪拿走錢就跑了。但如果你輸入 `678910`,裡面其實有 10 個比特幣,你可以設定另一個密碼,甚至多個密碼。這是個很巧妙的功能,實現方式也很聰明。

不過覺得這有點太「詹姆斯龐德」化了。現實中最經典的攻擊是「5 美元扳手攻擊」——有人拿扳手抽你直到你吐出密碼為止。如果你想靠這種偽裝方案硬扛攻擊,祝你好運。我忘了是哪位名拳手說過:「每個人都有一個計畫,直到臉上挨了一拳。」

[01:01:21] STEPHAN: 麥克·泰森(Mike Tyson)。

[01:01:25] MICHAEL: 對,泰森說的。密碼短語是個好東西。它的核心價值在於保護你免受劣質硬體或軟體的害處。想像一下,如果你的安全晶片(在某些情況下由 PIN 碼保護)儲存了你的密碼短語,這是一種機制。另一種機制是像 Trezor 那樣沒有安全晶片,其設計初衷就是「不儲存密碼短語」。如果攻擊者拿到你的 Trezor 實體,他們依然需要手動輸入你的密碼短語。這非常巧妙。

這相當於雙重驗證:你需要你擁有的東西(Trezor)和你所知道的東西(Passphrase)。為了提升安全性,我非常推薦使用密碼短語。但那個「偽裝資金」的功能,噱頭大於實用。你應該牢記一個密碼短語,而不是記 10 個不同的……

[01:02:46] STEPHAN: 誘餌金額。

[01:02:50] MICHAEL: 對,否則你大概率只會自己忘掉。

[01:02:54] STEPHAN: 這又是安全性和易用性的權衡。你設定的獨立密碼短語越多,你需要備份的東西就越多。你的家人必須知道這些,而且得區分哪個是誘餌、哪個是真的。你可能有多套配置,複雜度呈指數級上升。

[01:03:19] MICHAEL: 俗話說,複雜是安全的天敵。我最初非常排斥多重簽名,因為它增加了複雜度,我不喜歡複雜。如果你用一個應用程式存放微不足道的比特幣,你可能會說:「就算有 0.01% 的機率丟錢我也無所謂,因為我只是用來做日常頻繁交易。」但現實是,比特幣主要被用來儲存價值,裡面的金額對你很重要。對於安全的冷儲存,你確實需要多重簽名。

過去多重簽名的另一個缺點是需要兩個簽名,這大幅增加了交易的位元組體積,而礦工是按位元組收取手續費的。多重簽名的交易手續費更高,這是系統現實帶來的遺憾代價。但有了 SegWit 後,我們獲得了「見證折扣(Witness discount)」。見證(簽名資料)在礦工計算是否打包交易時獲得了折扣。這背後的原理與運行全節點的激勵有關。現在,只要你使用支援 SegWit 的錢包,你就可以享受多重簽名,而不需要支付更高昂的手續費。

測試備份 (Testing backups)

[01:05:03] STEPHAN: 我們聊到了助記詞和密碼短語。用戶經常想做的一件事是測試備份。他們想假裝「我的 Trezor 丟了,Coldcard 也丟了,我能否用 24 個單字和密碼短語恢復?」 但難點在於,我不希望把這 24 個單字輸入到電腦上,因為可能有惡意軟體偷走它。你有什麼建議嗎?

[01:05:39] MICHAEL: 我會建議,在進行任何真實交易前,先在硬體錢包上使用**測試網(testnet)**進行演練。「嘿,這台電腦可能完全被惡意軟體感染了,如果有人偷走了我的免費測試網代幣,算他們厲害,我也就知道我的系統不安全了,而且我毫無損失。」你可以進行演練,完全不用擔心私鑰洩漏。

因為如果是真金白銀,你每做一步都會反覆確認:「我做對了嗎?是這個步驟嗎?為什麼問我這個?這句話是什麼意思?」 但如果是在測試網上,用著毫無價值的代幣,你可以操作得非常快。你可以嘗試四次不同的方法:「如果我輸入不同的密碼短語會怎樣?這裡為什麼有通知?現在來試試多重簽名吧。」在測試網上盡情嘗試,沒有任何成本。

對於大多數沒有安全晶片的設備(比如 Trezor),直接重置設備非常簡單。生成一個助記詞,故意不安全地記錄下來(存放在 iPhone、Android 或雲端都可以,因為只用來放測試代幣)。重置設備,發送一些測試幣給自己,看看能否恢復設備,更改密碼短語看看會發生什麼,一遍又一遍地測試。嘗試多重簽名,在測試網上盡情實驗。

覺得目前業界對測試網的支援太少了,這非常遺憾,因為它是極其寶貴的資源。過去比特幣手續費上漲時,有人說這對比特幣的推廣很不利,因為大家習慣直接在主網上操作,根本不在乎手續費。他們用比特幣做一些不需要抗審查的事情,純粹是因為簡單好用。當他們剩下一些比特幣時,就慢慢習慣了。最經典的故事就是,他們在絲路(Silk Road)上買東西,剩下一些找零:「這挺有趣的,怎麼運作的?」 但其實,你完全可以在測試網上獲得一模一樣的體驗——發送交易、瞭解運作原理、試錯破壞。等你到了主網,你根本不需要做頻繁交易去擔心手續費,因為你已經在測試網上免費做過 20 次演練了,主網上你只需要做一次正式交易。去玩測試網吧,它絕對是你的好幫手。

查詢第三方服務 (Querying a third party service)

[01:08:48] STEPHAN: 接下來聊聊「我們是否在向第三方服務發送查詢請求」。常見的例子:假設我使用標準的 Trezor 軟體,現在 Trezor 公司就知道我的 xpub(主公鑰)了。如果我使用標準的 Ledger 介面,也是一樣,Ledger 會知道我的餘額等資訊。據我所知,解決這個問題主要有兩種思路:使用 Electrum Personal Server(或 ElectrumX、Rust 寫的 Electrs);另一種是 Bitcoin Core 搭配硬體錢包介面(HWI)。你能聊聊這兩者及其好處嗎?

[01:09:32] MICHAEL: 這涉及個人隱私,也涉及安全問題——「這個 IP 地址擁有大量比特幣」,相當於在自己背上畫了個靶子。此外還有技術細節:如果錢包將擴充公鑰(xpub)發送給官方伺服器,不僅可以用來生成你的所有地址(對隱私極其不利),而且還有一個已知風險。

我不想稱之為漏洞,因為這是系統設計的一部分:如果我擁有的 xpub,再加上你的任意一個子私鑰,我就能推導出該 xpub 下的**所有子私鑰**。這聽起來沒那麼可怕,因為第三方怎麼會拿到你的子私鑰呢?但你可以想像這種情境:有人說「嘿,你的硬體錢包出問題了嗎?我幫你診斷。去硬體錢包高級設定裡,導出一個已花費地址的私鑰。別擔心,資金已經花掉了,沒風險。或者生成一個新私鑰給我。」這就足夠讓你破產了。

這些第三方服務可怕的地方在於,你拿著 xpub 去查詢硬體錢包數據,我假設他們會留存這些資料。也許他們的商業模式就是把數據賣給 Chainalysis。甚至可能有人在中間攔截這些資訊。你的 xpub 可能已經洩漏了。此時如果再洩漏一個子私鑰(雖然不該發生,但萬一發生了),你所有的資金都會面臨風險。這就是為什麼不應該查詢第三方服務的原因,它兼具隱私和安全風險。

你提到的兩個解決方案是 Bitcoin Core 和 Electrum。關於 Electrum,預設情況下,最大的兩家 Electrum 伺服器營運商是 Chainalysis(至少離職員工是這麼說的,如果他們不運行才奇怪,因為這樣就能以極低成本去去匿名化海量的比特幣流量,如果不做就是失職)以及 Bread Wallet(它作為 SPV 客戶端,過去運行了大量伺服器)。你不需要註冊帳號,系統就能運作,就是因為別人在背後運行伺服器。這太可怕了,你直接把隱私交給了雲端的陌生人。

你可以自己運行 Electrum 伺服器,可以是為了造福大眾,也可以只供自己私密連接,但這非常麻煩。你得運行一個完整的 Bitcoin Core 節點,上面再疊加 Electrum 來索引所有地址,還要設定 SSL 證書之類的東西。現在可以用 Docker 來做,簡單了很多。如果你懂 Docker,會覺得輕鬆不少,但這依然工程浩大。

不過,這是目前實現「多硬體錢包、多重簽名」最好的 UI 介面。你可以使用 Electrum,把它放在可能感染惡意軟體的熱機器上運行,這沒問題。你可以選擇是否運行自己的 Bitcoin Core 節點(不运行的話當然有缺點),現在就能實現多硬體錢包的多重簽名。

另一個選擇是 Bitcoin Core。有個東西叫 HWI(Hardware Wallet Interface,硬體錢包介面),這是個非常酷的專案。你之前邀請過相關的來賓。我非常喜歡它的地方在於,你能獲得 Bitcoin Core 的所有好處:驗證共識規則、確保收到的比特幣是真的、以最佳方式生成交易。你在參考實現(Reference implementation)中操作,享受優先級 RBF(可替換交易)、手續費加價(Bump fee)、找零地址隨機化、幣種控制(Coin control)等功能。你能獲得 Bitcoin Core 的所有最佳實踐,同時又不需要把私鑰安全性寄託在電腦上,因為私鑰是獨立隔離的。

目前這套方案依然偏向駭客和折騰玩家,還沒達到大眾普及的程度。我寄望於 BIP 174 能夠改變現狀,因為 BIP 174 提供了標準化的通訊規範,可以建構在 Bitcoin Core 之上。每個硬體錢包都應該支援 BIP 174。

我希望普及大眾的方式是透過 BIP 174,雖然 BIP 174 本身沒有突破性的新技術,它只是設備間通訊的標準,但現在所有硬體錢包都應該遵守這個標準,而不是自立門戶。任何不遵守標準的錢包,覺得未來可以直接說:「這跟比特幣不相容,這只是一個山寨幣錢包。你應該用比特幣錢包來存比特幣,這個只配拿去玩山寨幣。」我期待這一天的到來,相信他們很快就會跟進更新,因為這並不難。

[01:16:00] STEPHAN: 太棒了。在這個系列中,我也會邀請 Andrew Chow 來聊聊他在 HWI 方面的工作。那我們進入下一個主題。我們前面提到過,不要簽署未經用戶驗證的內容。比如螢幕不夠大帶來的困難。確認找零地址:硬體錢包擁有主種子(xpriv),可以為不同地址生成私鑰。當你生成發送比特幣的交易時,你要確保找零會回到你控制的地址上,也就是你有對應私鑰的地址。這樣總結對嗎?

[01:16:59] MICHAEL: 對。這會是一個非常巧妙的攻擊:我想花費比特幣,發送 0.1 個比特幣給你,找零發回給我自己。我的熱機器生成了一筆交易(記住熱機器已被惡意軟體感染),它把 0.1 發給你,找零發給我——但找零其實發給了攻擊者。我看著硬體錢包螢幕想著:「嗯,只有 0.1 個比特幣,看起來沒錯,我的資產沒被偷。」我點擊了確認,隨後卻發現所有的找零都跑到了攻擊者的口袋裡。

在任何優秀的硬體錢包實現中,這都是絕對不該發生的。據我所知,除了 Ledger 之外的所有錢包都會檢查這一點。Ledger 居然直接說「請自行驗證輸出」,這簡直瘋了,完全理喻不能,不知道他們怎麼想的。

覺得部分原因在於 $m$-of-$n$ 的複雜性。退一步說,假設是 2-of-2,我的錢包顯示我是兩把金鑰之一,但另一把金鑰其實是攻擊者的,他們可以藉此勒索我的資金。或者在 2-of-3 中,我是其中一把,但另外兩把都是攻擊者的,他們能直接搶走資金。Ledger 就覺得「這太複雜了,我們懶得處理」。因此他們把責任推給最終用戶去驗證輸入和輸出,而不是利用現有工具來自動驗證交易。這非常奇怪。在他們更新軟體之前,我強烈建議**不要使用 Ledger 進行多重簽名交易**,這基本上等於「不要使用 Ledger」。這真的很傻,因為如果他們支援了這個功能,它會是一個有競爭力的產品。

[01:19:15] STEPHAN: 在這個系列中,我也會採訪 Ledger 團隊的人,屆時我會試著提出這個問題。

[01:19:28] MICHAEL: 我不是故意要黑他們,我是希望他們做出一款更好的產品,逼著其他競爭對手也做出更好的產品。最早期的 Ledger HW1 甚至連螢幕都沒有。你能想像沒有螢幕的硬體錢包嗎?那還有什麼意義?你那感染了惡意軟體的電腦問:「你想把比特幣發送到這個地址嗎?」你在沒有螢幕的設備上按下按鈕,默默祈禱它執行了電腦叫它做的事,並且祈禱那是正確的事。現在我們有螢幕了,情況完全不同了。

開源硬體 (Open source hardware)

[01:20:15] STEPHAN: 我們現在生活在未來,硬體錢包都有螢幕了。關於硬體錢包還有其他要補充的嗎?關於「開源硬體」這一點,你怎麼看?因為知名硬體錢包之間存在不同的理念。Trezor 以開源硬體聞名,Coldcard 也非常推崇開源硬體。而 Ledger 則因使用閉源的安全晶片而聞名。你的觀點是什麼?

[01:20:52] MICHAEL: 終極聖杯是一個「開源的安全晶片」。這是大家夢寐以求的,但目前還不存在。我聽過最合理的解釋是,開發這東西需要花費 1000 萬到 2000 萬美元,目前還沒有人願意花這筆錢去開源一個安全晶片。如果真的有人做出來了,大家肯定會蜂擁而至。也許未來我們回頭看會說:「天啊,敢信我們以前用的比特幣錢包居然沒有開源安全晶片嗎?」

目前你要麼選擇在通用微控制器上運行開源軟體(沒有安全晶片),要麼選擇一個理論上非常安全的安全晶片。安全晶片有它的好處(我待會會講),但我們無法驗證它裡面到底運行了什麼,甚至看不到它的程式碼。這就是權衡所在。

我對這個問題的答案是:如果你在理念上偏向任何一方,那就選你支持的。但你完全可以**兩種各買一個,並要求兩者共同簽名**。現在攻擊者必須同時破解這兩者,這對我來說聽起來棒極了。

我對閉源的安全晶片有點排斥,因為任何閉源的東西都是極具吸引力的攻擊目標。宣稱在做一件事,結果背地裡在做另一件事。在我看來這需要盲目信任,但我依然很樂意把它作為多重簽名的一部分。這正是多重簽名的魅力所在——它只有疊加好處。你可以把一個好的錢包和一個差的錢包組合起來,這依然比單用一個好錢包要安全得多。而且你可能根本分不清哪個好、哪個差。明年我們可能會在某款主流硬體錢包中發現漏洞,原本以為很棒的東西變得不怎麼樣,而以為不好的東西反而更可靠。能夠混合使用多種設備,才是未來的趨勢。

[01:23:23] STEPHAN: 這個觀點很好。那軟體中的韌體以及程式碼審查呢?有種說法是「關注程式碼的人越多越好」,因為有更多雙眼睛盯著,發現 Bug 或惡意軟體的機率就越高。

[01:23:45] MICHAEL: 比特幣最酷的地方在於,它是全球最大的漏洞賞金計畫(Bug bounty program)。如果比特幣內部存在惡意軟體或漏洞,人們有強烈的經濟誘因去利用它,無論是為了名聲還是為了巨額財富,它都是全球最大的目標。至今沒出大事說明它運作得非常好,這給了我們更多安全感。比特幣每多存在一年,我們就可以說「這東西變得更難被破譯了」。

一般來說,軟體錢包的使用者越多、盯著的人越多、企業在其上建構的基礎設施越多,我們就可以說「它可能越安全」。如果明天有人推出了一款全新的硬體錢包,我們從未聽說過,我會非常懷疑,絕不敢把畢生積蓄放進去。

但多重簽名再次改變了遊戲規則。第二個簽名(甚至第三個簽名)帶來的疊加安全力量是如此巨大,以至於我寧願要一個「糟糕的第二簽名」,也不要單一金鑰簽名。我希望這是聽眾能帶回家最重要的訊息。

如果一個錢包無法與其他錢包良好相容、不接受簡便的安全提升,對我來說這就是個糟糕的產品。我希望隨著 BIP 174 的普及,大家都能採用它。一年後我們回頭看會覺得:「哇,不敢相信以前比特幣曾經這麼危險。」

這讓我想起了開頭想說但沒說的話:為什麼這件事如此重要?我們很容易陷入鑽牛角尖,討論各種可能被攻擊、被破解或丟失比特幣的極端情況。但通常這種討論的結果是,大家會說:「聽起來太難了,我還是用 Coinbase 吧。」

這太糟糕了!你最不該做的事就是把比特幣交給別人保管,因為那一刻起你擁有的不再是比特幣,而是「比特幣欠條(IOUs)」。Mt.Gox 的用戶給所有人上了慘痛的一課。「Not your keys, not your bitcoin(不是你的私鑰,不是你的比特幣)」,這是比特幣中最重要的一課。

我們很容易困在「我不知道怎麼運行自己的全節點、我不懂命令列、我不懂這個那個」的迷茫中。但如果演變成沒有人真正擁有比特幣,大家都只有比特幣欠條,只剩下少數像我這樣的怪人想自己管理私鑰,那我們將面臨三大危機:

  1. 託管損失 (Custodial losses): 這會不斷發生。怪異的是,超大型持有者在安全方面面臨著「規模不經濟」。對於你最初的 1000 萬到 1 億美元加密貨幣,你有很強的動力去好好儲存它。如果每年花 1 萬美元硬體成本、雇用頂尖顧問或工程師,為了保護這 1 億美元,你很樂意每年花幾十萬美元確保一切萬無一失。但如果你託管了 50 億美元(2017 年牛市頂峰時,某些大型託管商的資金量常被提及),你將成為一個超級大靶子。攻擊者只要能偷走你 50 億資產中的 1%,就是 5000 万美元。你將面臨來自各個角落的攻擊,你的員工隨時會萌生邪念(如果還沒有的話),他們會收到巨額賄賂。事實上,交易所最狂的事之一就是試圖去釣魚或賄賂自己的員工,看看他們會不會上鉤,這說明他們防備心有多強,這樣做很好。但靶子實在太大了。
  2. 回到傳統金融的弊端: 回顧黃金的歷史,黃金之所以被掌控,部分原因就是出現了可信第三方替你儲存黃金,這徹底改變了遊戲規則。追溯到羅馬帝國,他們可以削減黃金成色、印製沒有足夠黃金背書的硬幣,實行部分準備金制度。你還會遇到像 Coinbase、PayPal 甚至銀行那樣的帳戶凍結和交易報告。我們不希望比特幣變成那樣,所以自己掌握私鑰極其重要。
  3. 治理攻擊 (Governance attacks): 我們在 SegWit2x 事件中見識過了,當時有巨頭聲稱:「我們代表了所有比特幣持有者,我們來決定他們的比特幣是什麼。我們要支援一種新幣,並把他們所有的比特幣賣掉換成 SegWit2x。」他們敢這麼說,是因為他們確實掌握了相當大比例的比特幣託管權。這是非常可怕的事。想像一下未來出現了 ETF (譯注:比特幣現貨ETF已於2024年1月上市),該 ETF 控制了兩位數比例的比特幣供應量。他們說:「我們想改變比特幣,我們不喜歡 2100 萬上限,覺得對挖礦經濟不好,我們要修改它,並把所有比特幣賣掉換成新的挖礦幣。」這將引發多麼混亂的世界。也許比特幣能挺過去,因為私鑰持有者和全節點營運商會說:「那不是我的比特幣,我不在乎。祝你好運,你要賣我就低價回收你的比特幣。」相信我們能挺過風暴,但託管機構所佔經濟份額越低、我們自主掌控的份額越高,他們的威脅就越小。這不僅僅是理論探討,也不僅是為了你個人安全(雖然這是你會採納建議的主要原因),這真的對整個生態系統大有裨益。

[01:31:22] STEPHAN: 說得太好了,邏輯非常嚴密。歸根結底,市場上必須有足夠多的人親自掌握私鑰、運行自己的節點。你剛才提到的另一點是,即使你還沒運行自己的節點,至少先掌握自己的私鑰,情況也會好很多。我也一直是這麼認為的。正如 Andreas 所說,比特幣第一法則:Not your keys, not your coins。第二法則:Not your node, not your rules(非你節點,非你規則)。我們引導大家的方式(我的聽眾可能大多是中高級玩家)應該是循序漸進的。你不能要求人們直接從「資產放在交易所」一步跨越到「完美運行全節點」。你得引導他們:「邁出下一步:先提現到單個硬體錢包;現在有了硬體錢包,我們試試配置多重簽名硬體錢包;現在再來試試運行全節點。」這正是我們希望大家走的成長路線。

[01:32:40] MICHAEL: 完全正確,而且美妙之處在于人們會自發地走這條路。我在每個階段都會接到諮詢電話。我常見的典型路線是:有人在 Coinbase 或 Square Cash 的下單頁面上,問我:「我要把我的銀行帳號或簽帳卡 PIN 碼輸進這個網站,這是詐騙嗎?」我說:「這取決於你怎麼定義。你大概率能拿到比特幣,應該沒事。」然後他們說:「嘿,我在這網站上有 1 萬美元,感覺有點不踏實,我應該自己保管嗎?」我說:「當然,這裡有各種方法。」於是他們買了硬體錢包。這期間比特幣價格漲了,他們又跑來問:「嘿,這個硬體錢包知道我所有的交易記錄啊。」我說:「是的,這不理想,你應該配合自己的全節點來運行。」現在我們還會告訴他們:「而且你還需要第二個簽名。」人們會自然而然地這麼做,因為大家都不傻。我們不需要要求他們一步到位,只要比什麼都不做有所進步就很棒了。

[01:34:07] STEPHAN: 我同意,但這可能存在倖存者偏差。主動跑來問你的人本來就是有積極性的人,而不積極的人就把資產扔在交易所不管了。

[01:34:23] MICHAEL: 是的,我說的只是那些跑來找我的人。傳聞 Coinbase 在幕後託管著天文數字般的加密貨幣。

10x 比特幣安全指南 (10x Security Bitcoin Guide)

參考連結: https://btcguide.github.io/

[01:34:36] STEPHAN: 這確實是個挑戰,但關鍵在於如何簡化資訊,並提供他們所需的知識。你最近建了一個非常棒的網站 https://btcguide.github.io/。我會把連結放在節目註解裡。Michael,告訴我們你建這個網站想達成什麼目標?

[01:35:02] MICHAEL: 說來有些幼稚,這純粹是我個人極度熱愛的領域。多年來我一直渴望一款優秀的硬體錢包,不敢相信 10 年過去了,覺得市面上的產品依然相當平庸。就我個人而言,如果要推薦一款,我會說選 Coldcard。它是「最不爛的」,但絕不是那種你媽媽用了會說「哇,這太好用了」的產品。你必須具備一點技術背景才能使用它,而且我不太喜歡 SD 卡的設計,但它確實能用。我是透過這個研究過程發現它的,以前玩過但沒深入。(譯注:2026年8月的當下,我們知道Coldcard剛剛犯了一個致命的錯誤,讓許多使用者失去了他們的比特幣)

我發了一連串推文,表達我對硬體錢包缺乏安全產品必備功能的失望:多重簽名支援、空氣隔離、允許用戶自主輸入並進行無信任運行驗證、以及能從自己的全節點獲取數據的隱私機制。對於一個專為安全而生的設備來說,這些要求並不過分。

大家紛紛留言:「嘿,你沒提到我的錢包,我的錢包其實很好用。」我回復說:「細節很複雜,你的錢包有優點,但也存在致命的缺陷。」然後我開始一一整理這些資訊。所有的資訊原本散落於推文和回覆中,很難系統化。

於是我建立了這個對比網站(也許我該買個獨立網域)。網站根據這些標準,對主要硬體錢包進行星級評分。KeepKey、Ledger、Trezor 和 Coldcard 在多重簽名支援、空氣隔離、用戶輸入、隱私和無信任性方面都接受了評估。

當然還有其他硬體錢包。有人問:「你怎麼沒提到約翰·麥克菲(John McAfee)宣稱不可破解的 Android 手機錢包?」那種評分會低得可憐。我列出了未收錄某些錢包的原因。看到大家的關注點真的很有意思。

有個叫 Cobo Vault 的錢包,擁有漂亮的 QR Code 掃描功能,但它是為山寨幣設計的,對比特幣支援不佳,而且不支援與其他硬體錢包進行多重簽名。這其實不難,但他們就是不做。如果他們支援了,我倒不介意他們支援山寨幣,那只是附加功能,而且他們的 QR Code 螢幕真的很美。雖然很貴(大概 500 美元),但看起來很棒。我不想公開背書說它很棒,但它的 QR Code 和螢幕確實很讚,目前沒人做到這點。(譯注:Cobo Vault就是keystone 3 pro的最早期產品,經過6年的發展與改良,keystone 3 pro已經有了BTC 專屬韌體、非常棒的多重簽名支援、且價格低廉(149美元),還支援最多三個錢包私鑰,也就是一機抵3機,是我目前最推薦的冷錢包,可以從這個推薦連結來了解選購https://bit.ly/4nIoNH5。)

市面上各種產品琳瑯滿目。有些產品把「信用卡大小」當作主打賣點(比如 CoolWallet S)。你會想:「但我只在乎安全性,根本不在乎形狀是不是像信用卡。」網站詳細列出了它們在各個指標上的評分,滑鼠懸停可以看到原因,還有 Q&A 拆解了我們今天聊的大部分內容。

我的目標是促使大家開發出更好的硬體錢包。我想讓拿高分變得更加困難。我希望未來形成一種標準:不支援與競爭對手透過 Bitcoin Core 進行多重簽名的,就不配叫硬體錢包。不支援這個簡直不可思議。你必須有體面的空氣隔離(至少像 SD 卡那樣,目前只有一家支援)。你必須允許用戶輸入種子和助記詞,KeepKey 只有一個按鈕,太瘋狂了;Ledger 有兩個按鈕,極難使用,如果要手動輸入會讓人發瘋,結果大家乾脆不輸入了,然後忘記內容。從隱私角度來看,它們都應該透過 BIP 174 直接連接到 Bitcoin Core。沒有理由做一款不與比特幣直接相容的硬體錢包。

公平地說,BIP 174 出現也才一年左右,我們需要給時間。但只要有兩家率先整合,我會公開點名其他人,讓他們的評分直下三千尺。我知道有兩款開發中的新硬體錢包會在發表時原生支援 BIP 174。他們說還有幾個月發表,誰知道呢,硬體開發很難,也許要更久,但我迫不及待了。我相信一年後回頭看,我們會說:「以前日子真艱難,現在終於變好了。」

[01:41:02] STEPHAN: 太棒了。我特別喜歡滑鼠懸停在星星上時顯示的解說。對於試圖理解「什麼是硬體錢包、為什麼這樣評分」的新手來說,這非常關鍵。適度的篩選管理很重要。市面上可能有幾十種硬體錢包,但你只需要列出大家熟知的主流產品。關於硬體錢包還有其他想補充的嗎?我們聊了很多,也許可以聊聊「選擇性 Nonce 攻擊(Chosen nonce attack)」?

選擇性 Nonce 攻擊 (Chosen nonce attack)

[01:42:02] MICHAEL: 如果有任何錢包在單金鑰簽名模式下實現了針對「選擇性 Nonce 攻擊」的防禦,它就會成為必買的硬體錢包。我們前面聊過隨機性和硬體隨機數生成器。這是 ECDSA 的客觀現實。ECDSA 是比特幣採用的橢圓曲線數位簽章演算法。你可能聽說過 RSA,那是另一種非對稱加密演算法(以 Rivest、Shamir 和 Adleman 三位數學家命名),你在瀏覽 HTTPS 或 SSL 網站時運用的就是 RSA。

在 ECDSA 中,簽名中的隨機性問題一次次浮出水面。在選擇性 Nonce 攻擊中,攻擊者以某種方式指定了 Nonce(密碼學中只使用一次的隨機數)。攻擊者挑選了那個隨機數,就能從你的簽名中輕而易舉地反推導出你的私鑰。這太可怕了。目前我們還無法證明你的硬體錢包沒有使用攻擊者指定的 Nonce。

關於這種攻擊已有論文發表,過程非常簡單直接。其中一篇就是你之前的來賓 Stepan Snigirev 寫的,他是個量子物理學家,極其聰明。關於這種攻擊我要說明一點:我必須看到你的簽名,且必須指定了你的 Nonce。我如何看到你的簽名?很可能是你在比特幣網路上廣播了交易,此時我得跟你賽跑去實施雙重支付(Double spend)。從這個角度看,它可能不算很強的即時攻擊。但如果我的惡意軟體感染了你的主機電腦,並且在與你的硬體錢包通訊,你可能直接把簽名發給了我。不需要拿到私鑰,只要拿到簽名,因為我指定了 Nonce 並攻破了你的硬體錢包,我就能輕鬆推導出私鑰。

[01:44:21] STEPHAN: 內容真多。澄清一下,在這種情況下,駭客反推出來的是單個地址的私鑰,還是主私鑰(xpriv)?

[01:44:37] MICHAEL: 在這種情況下,他們推導出的是單個私鑰。但假設他們能做到這一點,且手中擁有你的主公鑰(xpub),配合這個子私鑰,他們就能算出『所有的子私鑰』。

這種攻擊的嚴重程度取決於實施方式。在一種情境下,你廣播交易,他們在網路上看到,知道你的 Nonce 和私鑰,試圖以更高的手續費廣播競爭交易進行「雙花」。但他們起步已經落後了,還要看你原始交易是否開啟了 RBF。這種攻擊不是最強的,但利潤極高。如果你發現了某款硬體錢包簽名時使用的 Nonce 漏洞,直接執行攻擊即可。

但一旦漏洞暴露,大家就會喊:「不要再用這款硬體錢包了,快升級或更換!」攻擊者只有很短的時間窗口去攔截傳輸中的交易。但如果他們同時掌握了你的 xpub,就能從那個子私鑰生成所有其他子私鑰,直接竊取你存放的所有資金,那就慘多了。

這是一個複雜且微妙的問題。針對選擇性 Nonce 攻擊有各種用戶體驗和計算難度層面的防禦手段。我預計未來會看到相關防禦,但目前**最好的防禦依然是多硬體錢包的多重簽名**。因為就算攻擊者對其中一款硬體錢包瞭如指掌,將其完全攻破,但只要需要兩個簽名,你依然是安全的。這就是它的神奇之處。我們可以深入討論這些可怕而隱蔽的攻擊細節,它們可能會影響你,也可能不會;但只要你擁有兩個來自不同廠商的硬體錢包並實施 2-of-2 簽名,你就能獲得巨大的安全屏障。

安全晶片的重要性 (Importance of having a secure element)

[01:47:12] STEPHAN: 安全晶片是必需品嗎?還是說它的重要性遠不如多重簽名支援?

[01:47:19] MICHAEL: 對我來說,多重簽名是**絕對必須**的。如果一款硬體錢包設計初衷不支援多重簽名,那它就不是安全產品。我不在乎它宣稱有什麼其他安全功能,它採摘的是最低垂的果實。支援多重簽名既不昂貴也不複雜。不支援多重簽名,等於在說:「我們的商業模式不是做安全產品,而是把你鎖定在我們的平台上。可能因為我們靠山寨幣交易賺最多錢,支援幾千種代幣,內建了 Shapeshift 兌換,或者有管道讓你向我們購買比特幣和山寨幣。」

這不是壞事,你想這麼做是你的權利,雖然我沒興趣,但完全沒問題。問題在於你賣的不再是安全產品,而我只想要安全產品。

我喜歡 Coldcard 的原因之一是他們不支援山寨幣,因為「複雜是安全的天敵」。硬體錢包運行的程式碼越多、功能越多,出現 Bug 或漏洞的機會就越多。保持簡單才是王道。這就是為什麼我前面提到,我的開源命令列錢包是所有比特幣錢包中程式碼行數最少的。到現在依然如此,發布時更是遙遙領先。覺得這很酷,展示了底層邏輯,讓大家更容易看出是否有異常。雖然不保證絕對安全,但這是一個優秀的特性。

我喜歡 Coldcard 這點,但 Trezor 支援很多山寨幣,我也很樂意使用 Trezor。多重簽名才是最重要的核心。至於安全晶片,如果有開源的我全力支持;既然沒有開源的,覺得有也不錯,但我沒有強烈偏好。**混合使用兩者吧**。

給終端用戶的建議 (Advice for end users)

[01:49:59] STEPHAN: 對於想要提升安全等級的聽眾,假設他們想在家里運行 Bitcoin Core 搭配 HWI,配置多重簽名硬體錢包並進行分散保管。這是個好目標嗎?你有什麼建議?

[01:50:21] MICHAEL: 目前就安全與易用性的權衡而言,如果你想做多硬體錢包的多重簽名,**你應該使用 Electrum**。我不太喜歡這個建議,因為 Electrum 在隱私和強制執行共識規則方面有缺點,但你可以額外運行自己的 Electrum 伺服器。

如果你轉用 Electrum 進行多硬體錢包多重簽名,會比直接使用廠商給的預設 App 安全得多(預設 App 毫無隱私可言,把所有資訊上交,連在熱機器上非常危險)。Electrum 對空氣隔離支援得非常好,你想用空氣隔離隨時可以切換。雖然多硬體多重簽名不一定非要空氣隔離,但如果你擔心,可以加上。我知道很多大戶在 Electrum 空氣隔離架構上記錄著八位數(數千萬美元)級別的交易。目前我推薦使用 Electrum。

但我希望很快能推薦「透過你自己的 Bitcoin Core 節點進行 PSBT (BIP 174)」,我看到相關開發正在蓬勃發展。那是運行 Bitcoin Core 更好得多的方式,因為你不用偏執地擔心:「這是我運行的真實 Bitcoin Core 嗎?作業系統有漏洞嗎?防火牆配置對嗎?」

如果私鑰留在硬體錢包裡,你運行 Bitcoin Core 的唯一風險僅限於隱私和可能處於錯誤的共識規則下。這些雖然不是小風險,但跟「直接丟錢」完全是兩碼事。現在你可以首先集中精力在硬體錢包端確保「不丟錢」,然後再根據意願集中精力在熱機器端選擇作業系統、驗證級別。人們應該有權選擇適合自己的防護等級。

但首要任務是保護好資產。資產損失對整個生態系統的打擊太大了。雖然作為持有者,別人丟錢客觀上讓總量減少,我能獲得一點微小的資產增值好處,但這不利於新手加入,讓大家覺得就算投資成功了也可能隨時血本無歸。

[01:53:14] STEPHAN: 關鍵在於讓普通人也能輕鬆保護比特幣,達到合理安全,而不是要求每個人都像擁有龐大資源的億萬富翁那樣去做防護。

[01:53:31] MICHAEL: 類比網站服務的 SLA(服務級別協議)可用性,大家常說「追求 9 的數量」。做到 99% 可用很容易,99.9% 也不難;99.99% 需要付出努力,但可實現;要做到 99.999%(5 個 9),你得非常專業;6 個 9 意味著一年只能停機幾秒鐘。

比特幣安全也是一樣的邏輯,只是方向相反:「我丟錢的機率是多少?」也許你覺得 0.1% 的風險可以接受,針對這筆金額你願意做這麼多功課。但如果你希望機率降到 0.01%、0.001% 甚至 0.0001%,你就必須做足每一個額外步驟。

從防範損失的角度來看,Bitcoin Core 是你最後才需要擔心的事。每個人都運行全節點固然很棒,但為了防止丟錢,你首先要聚焦在**硬體錢包端**,其次才是 Bitcoin Core 端。

我也希望現在就能告訴大家:「技術已經成熟了,你可以輕鬆在樹莓派(Raspberry Pi)上運行 Bitcoin Core,不需要任何命令列知識就能做多硬體錢包多重簽名。」相信一年後可以實現,但今天還做不到。(譯注:2026年的今天,已經可以輕鬆完成多硬體錢包多重簽名)

[01:55:24] STEPHAN: 太棒了,非常感謝。那我們為聽眾總結一下:兩大核心要點,第一,**多重簽名具有疊加效應**,儘量使用它;第二,**善用測試網**,讓自己對交易操作完全熟悉和安心。

沙米爾秘密分片方案 (Shamir’s Secret Sharing scheme)

參考資料:
* How to Share a Secret (Shamir 原始論文, 1979): http://web.mit.edu/6.857/OldStuff/Fall03/ref/Shamir-HowToShareASecret.pdf
* How to Share a Secret, Infinitely (論文): https://eprint.iacr.org/2016/194.pdf
* SLIP-39, Satoshi Labs 助記詞的沙米爾秘密分片規範: https://github.com/satoshilabs/slips/blob/master/slip-0039.md

[01:55:59] MICHAEL: 對,測試一切,測試網交易完全免費。還有一個很少人在用、但覺得很多人應該用的免費技術——**沙米爾秘密分片方案(Shamir’s Secret Sharing scheme)**。這是建構在硬體錢包和備份策略之上的工具,跟多重簽名有點像但又不太一樣。如果有時間我們可以聊聊。

[01:56:35] STEPHAN: 來吧,我們把它補充完整。

[01:56:39] MICHAEL: 沙米爾秘密共享方案源自 Adi Shamir 1979 年的論文。他就是 RSA 加密演算法中的「S」。他是密碼學界的神級元老,而且至今活躍(Merkle tree 的 Ralph Merkle 也還在)。Adi Shamir 在 1979 年發表了這篇只有兩頁紙的論文《How To Share a Secret》,閱讀並理解它非常快。

核心思想是:你可以設定一個 $m$-of-$n$ 的門檻來拆分你的秘密。這個秘密可以是比特幣私鑰、密碼短語、通用助記詞,或是解鎖存放所有秘密的 USB 隨身碟密碼。你可以把秘密拆分成若干碎片(Shares),只要收集到 $m$ 個沙米爾碎片,就能重構出秘密;但如果只拿到 $m-1$ 個,就**什麼都拿不到**。

這絕對優於任何粗暴切分密碼的做法(比如「我把紙切成兩半,一半放家裡,一半放公司」)。首先,切成兩半的話,丟失任何一半你就完蛋了,你顯然更想要 2-of-5 而不是 2-of-2。其次,切半並不安全,假設密碼有 16 個字元,兩邊各 8 個,拿到 8 個字元的人可以暴力破解剩下的 8 個字元;而沙米爾方案中,少一個碎片就完全無法暴力破解。

這是一個非常聰明的演算法,在比特幣邊緣領域應用了很久,但尚未普及。我常問比特幣玩家一個問題:「如果你被公車撞了,你的比特幣會怎樣?」對大多數人來說,答案是比特幣隨他們灰飛煙滅。這很悲傷,特別是如果你有家人的話。

另一種極端是有人把助記詞明文放在家裡保險箱、床墊下或藏寶圖裡。任何人只要看到那個種子(如果沒設 Passphrase),就能直接拿走資金。你需要備份以防火災、洪水或硬碟損壞,比如用 Cryptosteel 金屬板;但對於密碼短語(Passphrase),最聰明的拆分方式就是沙米爾秘密分片方案。

你可以把密碼短語拆分後交給值得信任的親朋好友,設定門檻(比如 2-of-5 或 11-of-20)。如果你不幸出事,只要他們沒有同時罹難(達到法定人數),他們就能拼湊出密碼短語。結合你在銀行保險箱裡留下的實體種子,你的比特幣就能被成功恢復。未來我們會看到這項技術被廣泛採用,畢竟過去比特幣玩家多為年輕小夥子,總覺得自己長生不老、不會出事。

[02:01:09] STEPHAN: 如何把沙米爾方案整合到硬體錢包多重簽名架構中?比如 Casa 採用無種子(Seedless)方案:他們的 3-of-5 包含三個硬體錢包、一個手機端錢包、以及 Casa 託管的恢復金鑰,沒有種子備份。但另一種思路是自己做 3-of-5 多重簽名硬體錢包,那沙米爾秘密共享應該放在哪個環節?

[02:01:48] MICHAEL: 這裡最棘手的依然是「複雜是安全的天敵」。而且繼承人得處理這一切,而你當時已經不在人世無法指導他們。當繼承人打開保險箱看到 Cryptosteel 金屬板,完全一頭霧水;聽到其他人手裡有沙米爾碎片,又搞不懂沙米爾的 $m$-of-$n$ 和多重簽名的 $m$-of-$n$ 是什麼關係。目前這方面的體驗非常混亂。

Trezor 提出了一個 SLIP-0039 草案,試圖標準化密鑰拆分的沙米爾方案。我希望看到類似 WIF(錢包導入格式)那樣標準化的序列化格式,掃描 WIF,任何錢包都能識別並導入私鑰。但在多重簽名和 HD 錢包架構下,情況極其複雜。比如:「我現在拿著一個 2-of-3 HD 錢包種子的沙米爾碎片,這是 6-of-10 沙米爾架構中的一片,我進行到哪一步了?我還需要什麼?資料齊全嗎?」

終極目標是將資料導入 Bitcoin Core,系統就能自動識別並顯示「我知道怎麼讀取,這是你的資產」。目前現狀還很混亂,這種複雜性甚至在逼著人們走向中心化託管。因為雖然 Coinbase 沒大肆宣傳,但法律上他們有義務將資產轉交給遺產繼承人(雖然過程據我所知非常繁瑣,但確實成功過)。

我們應該有更好的非託管解決方案。我知道有一家託管公司正在開發新標準:他們掌握一把鑰匙,你掌握兩把(2-of-3 模式)。憑死亡證明,他們可以用他們的鑰匙結合你剩下的一把鑰匙來恢復資產。你只需要確保家人能拿到剩餘的一把鑰匙。這時候就可以用沙米爾方案把那一把鑰匙拆分給多個家人。這樣即使家人合謀,也只有一把鑰匙,依然無法偷錢。

你可以把一份給律師,一份給託管機構,剩下的拆分給親友。不過這也會帶來奇怪的人性博弈:買人壽保險,受益人有動機殺你;把遺產的沙米爾碎片發給朋友,朋友也有動機殺你。所以,請選擇不會殺你的朋友。😂😂

[02:05:31] STEPHAN: 這絕對是金玉良言。

[02:05:35] MICHAEL: 而且門檻要設高一點,需要大多數人合謀才行。

[02:05:42] STEPHAN: 雖然有點複雜,但重要的是大家開始邁出第一步。目前很多人還把資產留在交易所,他們只需往前走一步,這正是我們製作這個 Podcast 的初衷。今天內容非常豐富,未來一定會再邀請你來。最後,請告訴聽眾可以在哪裡關注你和閱讀你的文章。

[02:06:28] MICHAEL: 我偶爾會在 Twitter 和部落格發布比特幣相關內容。我的 Twitter 是 @mflaxman,這是最方便找到我的地方。個人網站是 michaelflaxman.com。

[02:06:40] STEPHAN: 太棒了。非常感謝你,今天的內容非常有教育意義,相信聽眾收穫頗豐。

[02:06:50] MICHAEL: 謝謝你,希望我帶給大家的幫助多過困惑。

精選文章

Blockstream SPAC 破局與治理爭議

  調查報告摘要評析:Blockstream SPAC 破局與治理爭議 本案為做空調查機構(NatInfoSec)針對 Adam Back、Blockstream 及其金庫公司 BSTR(Bitcoin Standard Trea...

熱門文章