作者:d-central.tech
比特币上的 Ecash 是隐私的、托管的电子现金。使用 Chaum 式盲签名,一个铸币厂可以发行以比特币为担保的不记名的 token,但无法窥探谁持有这些 token、各人持有多少、它们如何在用户间转移 —— 因为铸币厂从不存储账户余额或交易历史。在 Cashu 规范下,一家铸币厂只有一个运营者;而 Fedimint 规范则让一个 M-of-N 的联盟来担当运营者,从而单个联盟成员不会独自保管所有担保品。两者都让渡了自主保管属性,换来强健的支付隐私性、即时结算和便宜的小额支付,这使得 ecash 是一种花钱的工具 —— 而不是自主保管的储蓄的替代品。
什么是 Chaum 式 Ecash,为什么它是隐私的?
Ecash 是密码学家 David Chaum 在 1980 年代提出的一种想法,如今在比特币时代复兴。其中的机制是所谓的 “盲签名”。当你要给一个 ecash 钱包注资时,你的软件会生成一个秘密的 token,然后 “盲化” 它们 —— 就是用密码学的方式来遮掩它们 —— 然后把掩饰后的 token 交给铸币厂签名。铸币厂签名的是盲化的 token,从来没见过它们的真身;铸币厂发回签名后,钱包会 “解盲” 这个签名,然后你就得到了一个有效的、可以花费的 token ,也是铸币厂从来没有直接见过的 token 。这种方案有时也被称为 “盲化的 Diffie-Hellman 密钥交换(BDHKE)”。
所以,它的隐私性直接源于数学。因为铸币厂签名的是盲化的数值,他就无法将日后人们找他赎回比特币时提供的 token ,与这个签名的时刻及盲化的数值关联起来。如 Cashu 文档说所,“铸币厂不存储用户账户以及他们的活动的数据库”,这保护用户免遭数据泄露和窃权,并且可以提供更强的抗审查性(相比基于账户的支付系统)。服务器里没有用户名、没有余额、也没有谁给谁支付了的账本记录。
一个 ecash token 就是一个 不记名的支付工具,就跟现实中的钞票一样:拿着它的人就可以花掉它,它在用户之间的转移是即时的,马上就完成,没有 “撤销” 按钮。这种不记名的性质,既带来了 ecash 的绝佳属性(现钞一般的隐私性和结算速度),也带来了割手风险(弄丢了 token 数据,价值就找不回来了,就像弄丢了装着现金的钱包)。这也是 ecash 在个人主权技术栈中应该归属于支付层的原因,它与你用比特币签名设备锚定的自主保管储蓄协同 —— 而不能替代后者。
Cashu:单运营者铸币厂 ecash
Cashu 是一套自由、开源的 Chaum 式 ecash 协议,建立在比特币之上。它有两个活动部分:铸币厂,任何人都能运行;钱包,就是在你的设备上持有你的 token 的客户端 app 。Cashu token 的点对点传输是即时结算的,铸币厂之间的支付则通过闪电网络。
Cashu 铸币厂的工作模式:铸币和熔化
你给铸币厂支付一个闪电发票,铸币厂就会给你发行等价值的 token,你可以用 Cashu 钱包来持有 —— 这个过程就是 “铸币 ”。要退出的时候,就反过来:钱包把 token 交给铸币厂,铸币厂给你支付闪电发票 —— 这就是 “熔化 ”。铸币厂持有支撑这些 token 的价值的比特币和闪电网络流动性; 你的 token 就是对这些储备的请求权。在铸币和熔化之间,token 可以私密地转移。
NUT 规范
Cashu 是由一组叫做 “NUTs” 的开放规范定义的。规则很简单:钱包和铸币厂必须实现必要的 NUTs,可以实现一些可选的规范,从而保持实现之间可以相互操作,但也允许试验。几个比较重要的规范由:
- NUT-00 —— 密码学和数据模式,包括盲签名方案(BDHKE)。强制的。
- NUT-04 —— 通过闪电网络给铸币厂支付,从而铸造 token 。强制的。
- NUT-05 —— 熔化 token ,获得闪电支付。强制的。
- NUT-11 —— 支付给公钥(P2PK),将一个 token 锁定,只有某一个公钥才能花费它。可选的。
- NUT-13 —— 确定性的秘密值,从而一个钱包可以从一个种子复原,而不是只依赖于 token 数据备份。可选的。
Cashu 钱包与 Nostr / NWC
多款 Cashu 钱包都支持 Nostr 协议。Cashu.me 是网页端钱包的参考实现;Nutstash 是一款特性丰富的网页端钱包,支持同时使用多个铸币厂,并且能够通过 Nostr 协议发送和收取 token ;Minibits 是一款移动端钱包,添加了基于 Nostr 的身份和联系方式;eNuts 是另一款移动端钱包。因为 ecash 支付最终是在闪电网络上结算的,Cashu 钱包可以集成 Nostr Wallet Connect(NWC,由 NIP-47 定义),让一个 Nostr app 可以触发从你的 ecash 钱包发起的支付。Minibits 就支持通过 NWC 的远程钱包控制。而 NUTbits 这样的桥接服务,可以充当一个 Cashu 铸币厂的 NUT 与 NWC 接口之间的翻译。如果你刚刚接触这些东西,我们的《NWC 指南》和《Nostr NIPs 参考》解释了 NIP-47 是如何工作的。
托管信任模式
有话直说:Cashu 铸币厂是 托管式 的。铸币厂保管着让你手上的 token 得以有价值的比特币,所以你实际上是在信任这家铸币厂会一直在线、保持偿付能力、并且见票即付。它的隐私性是非常好的 —— 铸币厂无法跟踪你 —— 但资金集中在单个运营者手上,并且原理上,TA 是可以玩失踪、拒绝偿付的。务实的应对措施是像对待皮夹子里的现金一样对待各家铸币厂:只存放少量很快就会花出去的数额,偏向你信任的人或者社区运行的铸币厂,分散使用各家铸币厂的服务。
Fedimint:联盟化的铸币厂
Fedimint 保持了相同的 Chaum 式 ecash 隐私性,但消除了铸币厂单一运营者所带来的弱点。这是一套开源的联盟化 ecash 协议,其中的铸币厂不是由一个人运营的,而是由一个守护者联盟使用门限(M-of-N)签名方案来运营的 ——这种 ecash 模式使用门限盲签名, 也就是单服务器盲签名的联盟版本。
守护者与联盟
守护者就是集体运行一个铸币厂的运营者。在一个联盟中,每一个守护者都持有同一个多签名比特币钱包中的一个密钥,并搭配自己的比特币节点运行一个 Fedimint 节点,一验证和处理交易。没有哪一个守护者持有足够多的密钥材料可以独自移动储备资金。这样的联盟使用了拜占庭容错的共识机制,可以容忍少量守护者出故障或离线,他们的正式指南还给出了具体的数字:一个健壮的联盟至少要有 4 个守护者(从而可以容忍 1 个守护者出故障),7 个守护者则可以容忍 2 个守护者出故障,10 个可以容忍 3 个 —— 大体上,就是每多 3 个守护者,就能多容忍 1 个守护者出故障;最多可以使用 20 个守护者(这是由 Taproot 升级以前的比特币脚本所带来的限制)。这就是 “社区运营” 在现实中的含义:信任是分散的,所以整个联盟可以保持运营,即使一般分守护者出故障或者带有恶意。
闪电网关和 Fedi app
一个联盟通过一个闪电网关与外界互动:这种服务端能够让这个联盟内部的 ecash 与普通的闪电支付相互兑换,这样用户就能给广大闪电网络上的任何人支付。你存入比特币,就能获得保护隐私的 ecash 票据;你可以即时、隐私地转移它(给使用同一个联盟的用户支付),也可以稍后赎回成闪电网络中的资金或链上资金。Fedi app 则是面向消费者的钱包,人们用来获得一个联盟的服务、持有票据和交易;有一个配套的 SDK ,开发者可以在此基础上开发。
联盟信任模式
Fedimint 依然是托管式的 —— 你的比特币由一个联盟托管,不是由你自己托管 —— 只是信任是共享的,不指向单个运营者。想要跑路或者冻结 ecash,需要达到 阈值 数量的守护者勾结或者同时出故障,这比仅有一个运营者的时候困难多了。而有所牺牲的地方是,它添加了复杂性和协作负担,而且现实是一个联盟只能像运行它的人一样可靠。与 Cashu 一样,最好把它理解为隐私的、共享的社区货币,只应持有少量数额。
Cashu vs Fedimint 一览
| 维度 | Cashu | Fedimint |
|---|---|---|
| 信任模式 | 信任一个铸币厂运营者 | 信任一个带有阈值要求(M-of-N)的联盟 |
| 托管模式 | 托管的:一家铸币厂只有一个运营者,持有作为储备的比特币 | 托管的:作为储备的比特币由守护者的多签名钱包持有 |
| 联盟 | 无;靠在多家铸币厂间分散资金来缓解 | 有;单个联盟的成员数量在 4 个到 20 个之间,能容忍故障 |
| 隐私性 | 盲签名;铸币厂看不到余额,也看不到历史 | 门限盲签名;铸币厂看不到余额,也看不到历史 |
| 闪电网络兼容性 | 铸币厂直接通过闪电网络 铸币/熔化 | 一个闪电网关,让 ecash 与闪电支付可以互换 |
| 钱包复原能力 | 原始数据备份;通过 NUT-13 可以实现种子复原 | 票据可以从联盟处复原;没有单个守护者可以冻结票据 |
| 最佳用途 | 小额打赏、付费墙、小额即时支付 | 社区银行和日常余额 |
Ecash 在个人自治技术栈中的位置
Ecash 是比特币工具箱中最方便的隐私支付工具:即时、便宜、支持微小数额、难以监控,而且对新人来说也很简单。但它的隐私性也有代价,你要将自己的托付给一家铸币厂或一个联盟,所以基本原则是,永远不要混淆用来支出的钱和用来储蓄的钱。把长期储蓄放在自主保管装置中、用你自己的硬件来验证它;而 ecash,则应当成皮包里的现金 —— 有用、隐私,但要用意限制数额。这样一来,Cashu 和 Fedimit 就能融合到其它韧性装置中: 锚定在签名设备上的自主保管装置、通过 Nostr 和 NWC 实现抗审查的身份和通信、通过 Reticulum network 实现的断网连接,以及一台保护隐私性的手机(我们的《GrapheneOS 及 CalyxOS 自治指南》有介绍)。想要更加深入的定义,请看我们的字典词条:ecash、Cashu、Fedimint;还可以探索开放的数据中心获得其它参考资料。
常见问题及回答
Ecash 跟自主保管的比特币一样吗?
不是的。“自主保管” 的定义是你直接持有控制比特币的私钥 。而在 ecash 中,你只持有 token ,理论上可以赎回由一家铸币厂(Cashu)或一个联盟(Fedimint)持有的之比特币。你获得了强大的隐私性和即时、低成本的支付能力,但你放弃了直接保管,所以 ecash 应该用来花费小额资金,而不是用来储蓄大额资金。
一个 Cashu 铸币厂能看到我的余额、看到我给谁支付了吗?
不能,因为 token 是用盲签名发行的,所以铸币厂无法将一个即将赎回的 token 与其发行信息关联起来,它无法保留关于用户账户或活动的数据库。它知道自己总共有多少比特币储备,但不知道哪个用户持有多少 token、这些 token 是怎么花出去的。
Fedimint 和 Cashu 铸币厂有何区别?
他们拥有同样的 Chaum 式 ecash 隐私性,但 Cashu 会让资金集中在一个运营者,而 Fedimint 则会让它在一个守护者联盟中分散。在 Fedimint 中,必须有达到阈值数量的守护者(比如,在 4 个守护者中之至少要有 3 个)相互合作才能移动资金,所以消除了一个 Cashu 铸币厂内部的单点故障,代价是更多的启动成本和协作成本。
如果一家铸币厂或联盟消失,我手上的 ecash 会怎么样?
这就是我们说的托管风险。如果一家 Cashu 铸币厂离线了,或者拒绝偿付,那么该铸币厂所发行的 token 就无法再花费了。一个 Fedimint 联盟很更有韧性,因为能够容忍少量故障,出故障或者勾结的守护者必须达到阈值数量才会让整个联盟瘫痪。不论是哪一种情形,你的保护措施都是一样的:只存放少量用于支出的资金;如果你的钱包软件支持确定性复原(NUT-13),应该备份你的钱包种子词。
我能在 Nostr 和闪电 app 中使用 ecash 吗?
可以。Cashu 资金可以赎回成闪电资金,而且多款钱包都支持 NWC(NIP-47),所以一个 Nostr 客户端可以从你的 ecash 钱包触发支付。Minibits 这样的钱包添加了 Nostr 身份和 NWC 远程控制,以及在 Cashu 铸币厂和 NWC 接口之间的桥接工具。详情间我们的 NWC 指南以及 Nostr NIP 。
Cashu 和 Fedimint 是开源、免费使用的吗?
是的。两者都是开源的协议,有公开的规范和多个独立的实现。任何人都可以运行一家 Cashu 铸币厂,可以担当一个 Fedimint 守护者,并且各款钱包都可以自由下载。
再次感谢 David Chuam 最初的盲签名研究,以及将这些系统带给比特币的开源软件开发者们。
(完)