作者:VLS

来源:https://vls.tech/posts/lightning-custody-models/

摘要

  • 闪电网络钱包和闪电网络服务商(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 在托管模式光谱具体位置的表格。你可以看看多少 “非托管” 的服务实际上使用了盲目签名模式。营销口号不一定跟技术事实相匹配!

(本表格收集的信息截至 2025 年 11 月 7 日。)

产品类型保管模式签名器类型密钥位置节点位置
Alby钱包非托管(热钱包)节点用户设备用户设备
Bitkit (Synonym)钱包非托管(热钱包)节点用户设备用户设备
Blockstream App钱包非托管带验证的签名器用户设备 (VLS)供应商
Blockstream GreenlightLSP非托管带验证的签名器用户设备 (VLS)供应商
Blocktank (Synonym)LSP共享托管(盲目签名)盲目签名器用户设备供应商
BlueWallet钱包非托管(热钱包)节点用户设备用户设备
Breez SDKLSP非托管带验证的签名器用户设备 (VLS)供应商
Cash App钱包托管节点托管商供应商
Electrum钱包非托管(热钱包)节点用户设备用户设备
IBEX MercadoLSP托管节点托管商供应商
LightsparkLSP共享托管(盲目签名)盲目签名器用户设备供应商
Muun钱包并非一个闪电钱包N/AN/AN/A
Phoenix (ACINQ)钱包非托管(热钱包)节点用户设备用户设备
RiverLSP托管节点托管商供应商
Strike钱包托管节点托管商供应商
VoltageLSP共享托管(盲目签名)盲目签名器用户设备供应商
Wallet of Satoshi钱包共享托管(盲目签名)盲目签名器用户设备供应商
ZEUS钱包非托管(热钱包)节点用户设备用户设备
BitBox (Shift Crypto)钱包非托管带验证的签名器用户设备 (VLS)供应商
bitmo.me钱包非托管带验证的签名器用户设备 (VLS)供应商
Blink (Galoy)钱包托管节点托管商供应商
Blixt Wallet钱包非托管(热钱包)节点用户设备用户设备
Bringin Wallet钱包非托管带验证的签名器用户设备 (VLS)供应商
Cake Wallet钱包非托管带验证的签名器用户设备 (VLS)供应商
Coinos钱包托管节点托管商供应商
Cowbolt钱包非托管带验证的签名器用户设备 (VLS)供应商
Evomone钱包非托管带验证的签名器用户设备 (VLS)供应商
Flash钱包托管节点托管商供应商
Grimm App钱包非托管带验证的签名器用户设备 (VLS)供应商
Klever Wallet钱包非托管带验证的签名器用户设备 (VLS)供应商
LEXELSP非托管(热钱包)节点Intel SGXIntel SGX
LIGHTNINGPAY钱包非托管带验证的签名器用户设备 (VLS)供应商
lipa钱包非托管带验证的签名器用户设备 (VLS)供应商
Machankura (8333.mobi)钱包托管节点托管商供应商
Mooze Labs钱包非托管带验证的签名器用户设备 (VLS)供应商
Ordermoon钱包非托管带验证的签名器用户设备 (VLS)供应商
PICNIC GROUPS钱包非托管带验证的签名器用户设备 (VLS)供应商
Pouch.ph钱包托管节点托管商供应商
Satoshi App钱包非托管带验证的签名器用户设备 (VLS)供应商
Satsails钱包非托管带验证的签名器用户设备 (VLS)供应商
Shakesco wallet钱包非托管带验证的签名器用户设备 (VLS)供应商
Sorted Wallet钱包非托管带验证的签名器用户设备 (VLS)供应商
Speed Wallet钱包托管节点托管商供应商
Swapso钱包非托管带验证的签名器用户设备 (VLS)供应商
Yopaki钱包非托管带验证的签名器用户设备 (VLS)供应商
ZEBEDEELN App托管节点托管商供应商
Zero HashLSP托管节点托管商供应商

如何检查你当前使用的钱包是什么模式

询问你的闪电钱包供应商以下几个问题:

问题 1:“如果你的 服务器/节点 今天被劫持了,攻击者能否偷走我的钱?”

“不能,因为验证程序保护了它” -> 带有验证的签名器的自主保管钱包

“不能,因为私钥在你手上” -> 盲目签名钱包警告

“是的,你会丢钱” -> 至少他们是诚实的

问题 2:“签名器在签名之前,会执行哪些具体的检查?”

详细的验证清单 -> 真正的自主保管

“它会签名你授权的东西” -> 盲目签名

含糊其辞的安全口号 -> 盲目签名

问题 3:“我的通道关闭时,剩余的余额可以发送到任何地址吗?”

“只能发送到你限定的地址” -> 带有验证

“将发送到你签了名的任何地址” -> 盲目签名

为你的资金选择正确的托管模式

买一杯咖啡的钱

  • 完全托管钱包也没啥 —— 简单,而且在信任模式上是诚实的
  • 避免盲目签名模式 —— 这是不必要的复杂性

日常开支

  • 热钱包,如果你懂技术的话
  • 如果你不懂技术,选择高质量的托管 LSP
  • 明确规避盲目签名的风险

不小的钱

  • 只使用带有验证签名器(比如 VLS)的自主保管钱包
  • 热钱包也可以,只要你确定自己知道相关的风险
  • 永远不要使用盲目签名钱包

企业用户/交易所保证金

  • VLS 是唯一负责人的选择

除非钱的数目小到你丢了也无所谓,否则就不要使用盲目签名模式。它会让攻击界面倍增,比其它选择都更危险。

呼吁开发者行动:不要发布盲目签名器

使用哪种装置?

  • 我是一家企业或者 app 的开发者,只想要一个安全的闪电钱包装置,不想做繁重的基础设施

    -> 使用一个由 VLS 赋能的带设施非托管供应商Blockstream 的 Greenlight 或者 Breez SDK

  • 我希望控制我自己的闪电节点,但不希望从头开发所有东西

    -> 使用 CLN + VLS ;安全又灵活,无需完全定制的插件。

  • 我希望完全控制权以及深入的集成灵活性

    -> 使用 LDK + VLS ;适合定制化的部署。

- - -

使用哪种闪电钱包技术栈?

选择你的起点:

  • CLN + VLS

    使用我们的 vls-hsmd 插件来转发来自 Core Lightning 节点的签名请求。

  • LDK + VLS

    通过 vls-proxy 库,集成到你的基于 LDK 的节点。

  • Docker 沙盒

    使用 Docker 运行 CLN + VLS + Bitcoind 。非常适合测试。

  • LND 或 Eclair

    尚未支持 VLS 。请帮忙向 LND 和 Eclair 请求支持 VLS:

没有技术上的借口再使用盲目签名器了。VLS 是 Apache 许可的开源软件,而且准备好进入生产环境了。

你的行动:要求真正的自主保管

闪电钱包生态已经将持有私钥与控制资金混淆了太久了。盲目签名是带有额外步骤的共享托管,并非自主保管。

VLS 证明了,真正的自主保管闪电钱包是可以做到的。不要再找借口,不要再用盲目签名模式。

前进的道路

闪电网络的未来取决于我们对待托管模式的诚实。我们请求:

用户

  1. 理解你真正信任的东西
  2. 选择与你的风险偏好相匹配的托管模式
  3. 向钱包供应商要求透明性
  4. 用你的聪投票:支持真正的自主保管

开发者

  1. 别再把盲目签名叫做 “非托管”
  2. 实现验证逻辑,或者在托管模式上诚实
  3. 在真正的安全性上竞争,而不是打营销战
  4. 区分出真正的非托管产品

闪电网络生态

  1. 将带验证签名确定为行业最低标准
  2. 指出盲目签名的实质:共享托管
  3. 用户将真正的自主保管放在优先地位的项目
  4. 完全淘汰盲目签名

现在你知道真相了:那么你会怎么做呢?

  • 今天:使用我们的问题来检查你当前使用的钱包
  • 这周:如有需要,移动资金到带有验证的非托管钱包
  • 未来:要求透明性,支持真正的解决方案。

没有验证,你的私钥就不控制你的钱币。请做出明智的选择。

(完)