作者:VLS
摘要
- 閃電網絡錢包和閃電網絡服務商(LSP)的現狀,究竟什麼是真正的 “非託管”。
- 在比特幣 Layer 1 上,持有密鑰就意味著自主保管。而在閃電通道中,即使你持有密鑰,如果你的簽名器會盲目地許可支付請求而不驗證,節點被攻陷也可能導致你資金丟失 —— 這是共享託管模式。
- 盲目簽名既不是非託管,也不安全。它創造了兩個故障點(節點和簽名器)。只要任何一個被攻陷了,資金都會丟失。
- “VLS(帶驗證的閃電通道簽名器)” 為分離私鑰和節點提供了真正非託管的解決方案。節點被攻陷也不會導致資金丟失。
閃電錢包的承諾與問題
你仔細地研究和挑選 “非託管的” 閃電錢包,因為你相信 “無私鑰,即無幣”。你精心地保護你的種子詞
直到有一天,你起床後發現自己的通道已經關閉了,應當屬於你的比特幣被髮送到了你不知道的地址。而程序的日誌顯示你的簽名器授權了所有東西。你的比特幣就這麼飛走了。你的 “自主保管的” 錢包就這麼欺騙了你。
閃電錢包承諾要在即時支付上實現比特幣的自治原則。但有些地方出了問題。
你的錢包軟件可能會自稱是 “非託管的”, 因為 “你自己持有私鑰”,然而,如果你的簽名器會盲目地許可請求而不驗證,那到底是誰控制著你的錢?
這就是盲目簽名的真相,是閃電錢包的骯髒秘密。
什麼是閃電錢包裡的 “盲目簽名”?
閃電錢包裡有兩個模塊:
- 節點,負責提議狀態變更(增減餘額);
- 簽名器,決定這些更新是否可以安全地簽名(許可)。
在一個妥當的非託管裝置中,簽名器會根據協議的規則和用戶條款,在簽名之前驗證每一次請求。
而在 “盲目簽名” 模式中,閃電錢包的私鑰本身與節點隔離,然而,簽名器會盲目地許可節點的請求,也就是完全不驗證請求的內容。這是因為,盲目簽名器可以在格式正確的交易上簽名,但並沒有足夠的信息來分辨安全的請求和不安全的請求。
將一個盲目簽名器標榜為 “非託管的”,就好像一家銀行說自己是非託管的,因為它不知道你的銀行卡口令。不設驗證的簽名器不是控制器,而是威脅。
用戶有權知道真相:盲目簽名模式是共享託管,它實際上比一些託管解決方案還要危險一些。多年來,閃電錢包技術公司一直將盲目簽名的解決方案偽裝成 “非託管” 或 “自主託管”。
硬件錢包測試
設想一個比特幣硬件錢包,它會簽名任何交易而不檢查找零地址、手續費和支付目的地。你會管這樣的錢包叫 “非託管” 錢包嗎?你會信任它?
這就是閃電錢包的盲目簽名模式。
為什麼盲目簽名比熱錢包還要糟糕?
純託管:1 個攻擊點(託管商)盲目簽名:2 個攻擊點(節點 + 盲目簽名器)熱錢包:1 個攻擊點(設備)VLS:1 個加強後的攻擊點(帶有驗證程序的簽名器)盲目簽名,讓你可能受到攻擊的界面倍增(字面意義上的倍增),而且依然是託管的。只要節點或者簽名器被攻陷,你就可能丟失資金。我們專門指出這一點,是因為用戶有權利知道真相。
熱錢包的用戶至少知道自己在承擔風險。盲目簽名的用戶卻因為 “自己控制著私鑰” 而誤以為自己是安全的。
可能的攻擊形式
每一種爆破都從某個點開始。以下是漏洞如何轉化為盜竊:
場景 1:供應鏈 -> 攻陷節點 -> 惡意關閉通道
攻擊者修改節點的依賴項,獲得節點的控制權 ->
節點請求:“關閉通道,將資金髮送到攻擊者的地址” ->
盲目簽名器:無法驗證地址 -> 許可 ->
資金被盜
場景 2 :社會工程學攻擊 -> LSP 訪問權 -> 陳舊狀態
攻擊者假裝成用戶,向服務支持團隊聲稱自己需要 “緊急修復” ->
獲得節點訪問權,廣播舊的通道狀態 ->
盲目簽名器:無法識別這是陳舊狀態 -> 許可 ->
懲罰交易取走所有資金
場景 3:內部威脅 -> 手續費操縱
惡意僱員或已被攻陷的基礎設施 ->
節點為每一筆交易設置超量的手續費 ->
盲目簽名器:無法驗證數額 -> 許可 ->
資金被緩慢吸乾
帶有驗證程序的簽名器將拒絕所有這些請求,而盲目簽名器會同意所有這些請求。
為什麼閃電錢包的託管模式與比特幣錢包的不同
在比特幣 Layer 1 上,自主保管是非常直接的。你的硬件錢包(冷錢包)通過檢查地址、手續費和找零地址來檢查每一筆交易,然後才簽名。這種驗證程序與對私鑰的控制相配合,使之成為自主保管的。你的私鑰舊意味著你的錢幣。
比特幣的冷錢包模式無法直接移植到閃電錢包中,因為:
- 通道狀態會持續更新:與比特幣錢包中地址保持靜態不同。
- HTLC 有截止時間:錯過這個截止時間意味著丟失資金。
- 懲罰需要快速響應:如果對手廣播過時的通道狀態,己方必須立即響應。
- 路由支付需要在亞秒級時間內完成簽名:冷錢包太慢了。
這些要求意味著,早期的閃電錢包實現都要求你運行自己的節點並使用熱私鑰(即兩者是合在一起的),這對用戶來說太複雜,也有風險。
LSP:創造了新問題的解決方案
“閃電網絡服務供應商(LSP)” 是為著解決閃電錢包的易用性危機而出現的。運行一個閃電節點需要專門的技術知識、持續監視、同蓋茨管理和流動性提供。LSP 可以為用戶處理所有這些複雜性,也確實值得讚譽。這是一個巨大的用戶體驗升級。
然而,為了使用 LSP,同時保持 “非託管”,整個行業採用了盲目簽名模式。這個補丁很簡單:由 LSP 來運行你的節點,而你保管你的私鑰。有私鑰、就有幣,不是這樣的嗎?
根本不是。當你的私鑰會盲目簽名 LSP 的節點請求而不加驗證時,你實際上是在信任 LSP 不會偷你的錢。這不是自主保管,充其量是共享保管。
諷刺之處在於:LSP 讓閃電錢包變得可用,而盲目簽名又讓它變得不安全,比熱錢包和託管服務都要不安全。你得到的是沒有控制桿的複雜性。
好消息是:LSP 的便利不是非付出這樣的代價不可。帶驗證的簽名就可以解決這個問題。
譯者注:文中所述的這種對 LSP 的用法,應該只是其中一種,甚至可能不是主要的用法。
VLS 如何修復這個問題
“VLS(帶驗證的閃電錢包簽名器)” 實現了每個閃電錢包簽名器都應該做到的事:在簽名之前先驗證。
在簽名任何東西之前,VLS 都會檢查:
協議兼容性
- 這是一個陳舊的狀態嗎?是 -> 拒絕
- HTLC 的餘額匹配嗎? 是 -> 通過
- 交易的手續費數額合理嗎? -> 檢查限制
- 支付目的地得到過許可嗎?是 -> 通過
用戶條款
- 支付數額在限制之內
- 關閉通道的支付地址在許可列表上
- 阻擋不常見的使用模式
- 大額交易需要額外許可
獨立驗證
- 專門驗證區塊鏈狀態
- 獨立跟蹤通道狀態
- 監視時間鎖過期
- 交叉檢查節點聲明
VLS 在行動
| 盲目簽名器 | VLS | |
|---|---|---|
| 節點 | “關閉通道,將資金髮送到地址 X” | “關閉通道,將資金髮送到地址 X” |
| 簽名器動作 | “收到!簽名!” | “X 是不是白名單上的地址?交易表示最新狀態嗎?數額對不對得上?” |
| 結果 | 資金可能被盜 | 惡意請求被阻攔,資金安全 |
證明這真的有用:Blockstream Greenlight 錢包
Greenlight 證明了 VLS 可以大規模應用:
- 架構:Blocsteam 運行節點,用戶通過 VLS 控制驗證
- 跟蹤記錄:沒有資金因為節點被攻陷而丟失
- 安全性:節點被攻陷也無法盜竊資金
- 性能:亞秒級驗證,不影響用戶體驗
- 用戶:數千名用戶用上了真正的自主保管
這種模式證明了你可以獲得 LSP 的便利性,並且在託管上無需犧牲。這裡更加詳細了講解了為什麼 Greenlight 選擇了 VLS 以及他們的集成經驗。
閃電錢包的四種託管模式
瞭解你用的閃電錢包落在光譜的哪個位置,是極為關鍵的:
1. 完全託管
你持有:空氣
他們持有:私鑰 + 節點
保管程度:0%(他們控制著所有東西)
攻擊界面:1 個點(託管商)
案例:絕大部分交易所錢包
適合用戶:初次嘗試用閃電網絡來買杯咖啡的用戶
2. 共享託管:盲目簽名
你持有:私鑰,但它盲目簽名
他們持有:請求籤名的節點
保管程度:大約 50%,共享託管:雙方都需要對方,但是節點可以欺騙簽名器
攻擊界面:2 個點(節點 或者 簽名器 被攻陷 = 資金丟失)
案例:許多 “非託管的” LSP 錢包
事實檢查:比完全託管更糟 —— 更復雜、更多攻擊界面、依然需要信任
3. 自主保管的熱錢包
你持有:私鑰 + 節點,放在同一個設備上
他們持有:無
保管程度:100%(你控制著所有東西)
攻擊界面:1 個點(你的設備)
案例:Zeus(使用本地節點模式)、Phoenix(自主保管)
適合用戶:習慣熱錢包風險的專業用戶
4. 使用帶驗證簽名器(VLS)的自主保管錢包
你持有:私鑰 + 驗證邏輯
他們持有:節點(但無法偷盜)
保管程度:100%(節點可以提議,但只有你才能許可)
攻擊界面:1 個加強點(帶有驗證邏輯的簽名器)
案例:Blockstream 的 Greenlight,使用 VLS
適合用戶:任何投入具有重要意義資金數量的用戶
現狀:誰是真正的非託管?
以下是關於閃電錢包和 LSP 在託管模式光譜具體位置的表格。你可以看看多少 “非託管” 的服務實際上使用了盲目簽名模式。營銷口號不一定跟技術事實相匹配!
(表格請見原文,此處不附。)
如何檢查你當前使用的錢包是什麼模式
詢問你的閃電錢包供應商以下幾個問題:
問題 1:“如果你的 服務器/節點 今天被劫持了,攻擊者能否偷走我的錢?”
“不能,因為驗證程序保護了它” -> 帶有驗證的簽名器的自主保管錢包
“不能,因為私鑰在你手上” -> 盲目簽名錢包警告
“是的,你會丟錢” -> 至少他們是誠實的
問題 2:“簽名器在簽名之前,會執行哪些具體的檢查?”
詳細的驗證清單 -> 真正的自主保管
“它會簽名你授權的東西” -> 盲目簽名
含糊其辭的安全口號 -> 盲目簽名
問題 3:“我的通道關閉時,剩餘的餘額可以發送到任何地址嗎?”
“只能發送到你限定的地址” -> 帶有驗證
“將發送到你簽了名的任何地址” -> 盲目簽名
為你的資金選擇正確的託管模式
“買一杯咖啡的錢”
- 完全託管錢包也沒啥 —— 簡單,而且在信任模式上是誠實的
- 避免盲目簽名模式 —— 這是不必要的複雜性
“日常開支”
- 熱錢包,如果你懂技術的話
- 如果你不懂技術,選擇高質量的託管 LSP
- 明確規避盲目簽名的風險
“不小的錢”
- 只使用帶有驗證簽名器(比如 VLS)的自主保管錢包
- 熱錢包也可以,只要你確定自己知道相關的風險
- 永遠不要使用盲目簽名錢包
企業用戶/交易所保證金:
- VLS 是唯一負責人的選擇
除非錢的數目小到你丟了也無所謂,否則就不要使用盲目簽名模式。它會讓攻擊界面倍增,比其它選擇都更危險。
呼籲開發者行動:不要發佈盲目簽名器
使用哪種裝置?
我是一家企業或者 app 的開發者,只想要一個安全的閃電錢包裝置,不想做繁重的基礎設施
-> 使用一個由 VLS 賦能的帶設施非託管供應商:Blockstream 的 Greenlight 或者 Breez SDK。
我希望控制我自己的閃電節點,但不希望從頭開發所有東西
-> 使用 CLN + VLS ;安全又靈活,無需完全定製的插件。
我希望完全控制權以及深入的集成靈活性
-> 使用 LDK + VLS ;適合定製化的部署。
- - -
使用哪種閃電錢包技術棧?
選擇你的起點:
使用我們的
vls-hsmd插件來轉發來自 Core Lightning 節點的簽名請求。通過
vls-proxy庫,集成到你的基於 LDK 的節點。使用 Docker 運行 CLN + VLS + Bitcoind 。非常適合測試。
LND 或 Eclair
尚未支持 VLS 。請幫忙向 LND 和 Eclair 請求支持 VLS:
沒有技術上的藉口再使用盲目簽名器了。VLS 是 Apache 許可的開源軟件,而且準備好進入生產環境了。
你的行動:要求真正的自主保管
閃電錢包生態已經將持有私鑰與控制資金混淆了太久了。盲目簽名是帶有額外步驟的共享託管,並非自主保管。
VLS 證明了,真正的自主保管閃電錢包是可以做到的。不要再找藉口,不要再用盲目簽名模式。
前進的道路
閃電網絡的未來取決於我們對待託管模式的誠實。我們請求:
用戶:
- 理解你真正信任的東西
- 選擇與你的風險偏好相匹配的託管模式
- 向錢包供應商要求透明性
- 用你的聰投票:支持真正的自主保管
開發者:
- 別再把盲目簽名叫做 “非託管”
- 實現驗證邏輯,或者在託管模式上誠實
- 在真正的安全性上競爭,而不是打營銷戰
- 區分出真正的非託管產品
閃電網絡生態:
- 將帶驗證簽名確定為行業最低標準
- 指出盲目簽名的實質:共享託管
- 用戶將真正的自主保管放在優先地位的項目
- 完全淘汰盲目簽名
現在你知道真相了:那麼你會怎麼做呢?
- 今天:使用我們的問題來檢查你當前使用的錢包
- 這周:如有需要,移動資金到帶有驗證的非託管錢包
- 未來:要求透明性,支持真正的解決方案。
沒有驗證,你的私鑰就不控制你的錢幣。請做出明智的選擇。
(完)



