咚咚咚,Cashu和Bitch@来了

INSIDER 发布于 2025-07-21 阅读 89

本文深入分析了Bitchat与Cashu的结合,实现基于比特币的离线支付。Bitchat使用蓝牙mesh网络、Noise协议和临时身份ID实现私密通信;Cashu则通过P2PK和DLEQ实现离线ecash转账。文章指出,离线交易仍需一方在线确认,但信任场景下可完全离线。技术细节丰富,包含代码示例。

bitcoin++ 是一个国际性的比特币开发者会议系列。“内部版”是我们的新闻编辑室,报道 bitcoin++ 宇宙及其周边动态。

技术见解

咚咚,敲门的是 Cashu,Bitch@

Calle 展示了一个原生支持 Cashu 支付的 Bitchat 应用。它是如何工作的?

我觉得互联网上正在酝酿着一些事情。好吧,还有成千上万的人也这么觉得,但我还是要先声称是我们最先预见的。

如果你在使用 Nostr 或是那个“鸟”应用,你可能已经看到了 Jack Dorsey 新发布的 Bitchat 应用。它迅速走红,并引起了该领域许多开发者的注意。Cashu 的创造者 Calle 一直在构建 Bitchat 的 Android 实现,并且…… 你猜对了:

一个原生的 Ecash 钱包被内置 在了 Bitchat 移动应用中。

Bitchat 与 Chaumian E-cash 相结合,有潜力创造出一种在移动设备上进行匿名、离线支付的新工具。过去需要鸽子传递的东西,现在可以利用噪声协议;过去需要纸币的东西,现在可以利用 Chaumian E-cash。

我的看法是:Bitchat 和 Cashu 是用于匿名、离线比特币支付的一种有前景的工具。这存在权衡,但在某些情况下,它们可以为用户提供一种便捷的离线价值传输方式。在危机时刻,这甚至可能成为关键基础设施。

有趣的是,就在公告发布前几个小时,我们的团队还在讨论这种组合的能力。这篇文章正是那些讨论的反映。

解析 Bitchat

Bitchat 是一款点对点消息应用,它使用蓝牙向附近的同伴发送消息。其技术栈构建在三个不同的层面之上:用于消息收发的蓝牙 Mesh 网络层、用于私有通信的噪声协议,以及用于确保身份仅提供给信任之人的临时对等体 ID。

蓝牙 Mesh 网络

首先是蓝牙 Mesh 网络层。Mesh 网络是在本地、共处的对等体之间创建的本地网络。不同的节点(带有蓝牙芯片的手机或笔记本电脑)会相互发现并连接。一旦通过蓝牙和网络协议连接,它们就可以在彼此之间传输数据。

在 Mesh 网络中,每部手机既是数据包的发送者,也是中继者。这意味着一个设备既可以是某数据的接收者,也可以将该数据中继到网络中的另一个接收者。单个蓝牙的范围是有限的,因此这种本地对等体中继功能扩展了网络中每个对等体的覆盖范围,使其超出设备自身的能力。

这里有一个简单的例子。Alice 需要给 200 码外的 Charlie 发送一条消息。在他们之间的 Bob 离每人都有 100 码远。Alice、Bob 和 Charlie 都在同一个 Mesh 网络中。Alice 通过广播频段发送消息,Bob 中继它,Charlie 接收它。一旦 Charlie 拥有数据,他就可以解密并读取里面的内容。

对于在网络中中继的数据包的加密和解密,Bitchat 使用了噪声协议。

噪声协议

噪声协议 由 OpenWhisper Systems 创立,该公司也是加密聊天应用 Signal 的创始人。该协议作为一个框架,用于在两个想要交换私密消息的对等体之间建立加密通信。

它主要是一种“握手协议”,允许两个对等体使用 Diffie-Hellman 密钥交换来建立一个安全、加密的连接,用于持续的私密通信。仅使用 Diffie-Hellman 密钥交换,噪声协议就能实现端到端加密、前向保密、身份隐藏和身份验证。

Bitchat 使用三步噪声 XX 握手。用户之间建立安全通道(称为噪声会话),此后他们之间交换的所有消息都将是私密通信。

要建立此连接,一个对等体发起握手阶段,另一个对等体响应。在成功进行三步消息握手后,对等体能够使用共享的加密密钥继续通信。

会话在每 10,000 条消息或 1 小时的时间范围内会进行重新加密或“刷新”,以实现强大的前向保密性。

临时对等体 ID

蓝牙允许对等体交换数据包;噪声握手协议允许对等体将消息加密到这些数据包中。现在,你如何知道你在和谁说话,同时又能在长期内保持匿名?

引入临时对等体 ID。

临时对等体 ID 确保对等体 ID 在某个时间范围内轮换。这意味着用户在聊天中的 ID 会在随机间隔内定期更改。在 Bitchat 中,这每 5-15 分钟发生一次,或者在会话终止时发生。Bitchat 的会话管理框架 确保这些对等体 ID 在会话过期后被适当丢弃。

在噪声握手期间,应用程序会链接当前的临时 ID,并将它们映射到各自用户公钥的 SHA256 指纹。这确保即使在会话过期后,已经验证过关系的用户也能为彼此保留持久身份。用户还可以为已验证关系的同伴分配社交名称。

用户可以与他们的同伴保持安全关系,同时防止在更广泛的网络中被追踪。

Bitchat 实现完全离线的私有数据传输

通过蓝牙实现 Mesh 网络,通过噪声协议实现加密通道,以及通过临时 ID 实现身份管理,Bitchat 使用户能够通过更广泛的点对点网络进行连接并发送加密消息。除非建立了安全连接,否则用户不会向网络参与者透露自己。

Bitchat 可在广泛的场景中发挥作用。它可以在互联网基础设施和手机基站无法运行的场景中使用。或者,它也可以用在更平凡的场景中——比如当你在音乐会现场,手机信号不好时。

对于注重隐私的人来说,它提供了基于互联网的加密聊天的替代方案。通过蓝牙连接意味着你不会向本地手机基站暴露你的位置。

要是我们在发送比特币时也能保持这种级别的安全运维就好了……

将其与 E-cash 结合

Calle 昨天展示了 Bitchat 的另一个用例:在离线状态下跨 Mesh 网络传输由比特币支持的代币。

Calle 在 2022 年发明了 Cashu 协议,这是一种 Chaumian e-cash 支付协议,允许用户使用不记名代币来转移资金。Chaumian 支付系统依赖于一个铸币厂,该铸币厂持有基础资产以换取用户可以用作支付工具的 e-cash 代币。以比特币计价的 e-cash 铸币厂持有用户的链上比特币存款。铸币厂运营商被期望保护资金安全,直到 e-cash 代币持有者赎回,并保持铸币厂中的不记名代币与基础资产Hook。铸币厂也有责任不发行超过其比特币持有量的 e-cash 代币。预计流通中的 e-cash 代币价值与铸币厂的链上比特币余额保持 1:1 对应。通过消除对链上托管的担忧,e-cash 铸币厂降低了为朋友、家人和社区设立比特币托管服务的门槛。

Cashu 协议提供了一项用于离线支付的功能。如果发送方没有互联网连接,他们仍然可以通过通信渠道发送代币来使用 e-cash 进行交易;蓝牙或 NFC 都是发送 e-cash 代币的常见本地通信渠道。但是,离线使用 e-cash 有一个问题:支付中的一方需要在线才能最终完成交易。

示例 1:接收方离线,发送方在线

如果接收方没有互联网访问权限,发送方可以将代币锁定到接收方的公钥上。Cashu 的“支付到公钥”(P2PK)功能允许用户将 e-cash 代币锁定到接收方的公钥上。只有接收方的私钥才能生成有效的签名来解锁 e-cash。

让我们通过文档中的一个例子来走一遍流程。当接收方离线时,发送方构建一笔交易,支付到离线接收方的公钥。然后发送方将这笔交易转发给铸币厂,交易中嵌入了接收方的公钥作为秘密。随后,铸币厂对该秘密提供盲签名,强制只有接收方才能解锁资金。发送方拿到这个由铸币厂盲签的交易,并将其发送给接收方,接收方可以唯一地生成签名来解锁 E-cash 代币。

{
  "amount": 1,
  "secret": "[\"P2PK\",{\"nonce\":\"859d4935c4907062a6297cf4e663e2835d90d97ecdd510745d32f6816323a41f\",\"data\":\"0249098aa8b9d2fbec49ff8598feb17b592b986e62319a4fa488a3dc36387157a7\",\"tags\":[[\"sigflag\",\"SIG_INPUTS\"]]}]",
  "C": "02698c4e2b5f9534cd0687d87513c759790cf829aa5739184a3e3735471fbda904",
  "id": "009a1f293253e41e",
  "witness": "{\"signatures\":[\"60f3c9b766770b46caac1d27e1ae6b77c8866ebaeba0b9489fe6a15a837eaa6fcd6eaa825499c72ac342983983fd3ba3a8a41f56677cc99ffd73da68b59e1383\"]}"
}

在上面的代码片段中,我们有一个“amount”(金额)、一个“secret”(秘密)、一个来自铸币厂的“C”(盲签名)、“id”(ID)和“witness”(见证)字段。

“amount”是交易中花费的 e-cash 金额。在这个例子中,我们的值是 1,对于一个以比特币计价的票据来说,这相当于 1 聪。

“secret”是接收方的公钥。

当发送方将交易发送给铸币厂时,铸币厂会生成一个盲签名,存储在凭证“C”中。只有接收方才能生成有效的签名,以解锁发送到其公钥的资金。

一旦上线,e-cash 代币的接收方会对“secret”中的序列化数据字符串生成一个签名,然后将其添加到见证字段中。

在这个例子中,接收方不确定字段 C 中的盲签名是否真的是来自铸币厂的有效签名。为了证明这一点,我们可以利用 DLEQ(离散对数等价)证明来处理每个签名。这些证明允许我们验证铸币厂的签名是否属于铸币厂的私钥,而无需上线与铸币厂验证签名。接收方可以确信她收到的 e-cash 代币对于该铸币厂来说是有效的代币。

这个例子 要求 发送方 在线 才能发送这笔 P2PK 交易,因为铸币厂需要生成一个锁定到接收方公钥的盲签名。

示例 2:发送方离线,接收方在线

我在审查 Cashu 协议规范时犯了一个错误。我假设离线发送方可以构建一笔 P2PK 交易。这是错误的。以下是在与 Cashu 贡献者讨论后修正的例子。

反过来是否成立?如果 发送方 离线,我们可以利用铸币厂来强制离线转账的支付条件吗?

简短的回答是:不行。发送方无法离线构建自定义凭证。这意味着他们在离线模式下无法构建将 Ecash 锁定到接收方公钥的 P2PK 交易,也无法拆分其代币的面额。

但是,发送方在离线状态下仍然可以发送他们客户端持有的代币。他们获取代币,通过离线渠道将其发送给接收方,然后由 接收方 负责与铸币厂进行兑换。在接收方与铸币厂完成兑换后,交易被视为最终确定。

这其中涉及一些信任。如果接收方没有立即用铸币厂兑换新的 Ecash 代币,发送方可能会进行双花。因此,在发送方离线的情况下,接收方应尽快与铸币厂完成交易最终化。

还有其他一些考虑因素

在这两个例子中,都需要有一方在线才能最终完成支付。离线支付还有一些其他考虑因素:

  • 用户仅限于其钱包中持有的面额。要拆分面额,你需要直接与铸币厂交互以创建不同金额的 e-cash 代币。

  • 用户无法花费新收到的代币,直到他们重新上线并将代币“熔化”到他们的钱包余额中。

  • 如果铸币厂运营商也离线了,我们只能信任他们有必要的备份来重新上线。

  • 如果铸币厂运营商离线,那么对等体之间的任何交易都无法最终确定。

那么,基于 Bitchat 的 Cashu 是一个永久性的、“我们离线好几个月”的解决方案吗?可能不是。但在某些情况下,对于无法访问或不想访问互联网的各方来说,离线发送 E-cash 代币是一个可行的选择。

例子 1:我需要在音乐会现场付钱请朋友喝杯啤酒,但由于有 10000 人,我没有手机信号。他去了另一个人数较少的舞台,那里有信号。所以我只需要通过消息发给他一个价值几千聪的 E-cash 代币,他因为有点信号就可以完成最终确认。

例子 2:一场飓风刚刚来袭,我的家人没有汽油给发电机供电。我需要进城买一些。我进了城,但发现我手机上的钱包里没有任何 E-cash 🤦 所以我通过 Bitchat 与我的妻子和商人开了一个聊天会话,让她将 E-cash 直接转发给商人。加油站有电(他们的发电机开着),所以他们能够连接 WiFi。支付与铸币厂最终确定并添加到商人的钱包中。

无论哪种方式,这两种交易都可以通过 Bitchat 进行通信。发送方不需要互联网连接。而且,由于通过 Bitchat Mesh 网络连接可以扩展离线一方的覆盖范围,还有几十种其他场景,离线发送方或接收方可以使用 Bitchat/Cashu 组合来交换价值。

但我们这里都是亲朋好友……他们真的会双花我吗?

似乎对于 E-cash 交易的一方是否需要在线存在一些误解。昨天,我以为双方都可以离线。但在与 niftyneiTuma 聊天并查阅协议规范后,我发现其中一方需要连接到铸币厂才能确保交易最终确定(如上所述)。

Bitchat 允许用户与他们信任的人建立安全的通信渠道:朋友、联系人等。如果你与你信任的各方进行通信或交易,你们可以在双方都离线的情况下继续交易。只要 e-cash 代币没有被复制,理论上它们可以完全离线交换,并在重新连接后毫无问题地兑换或“熔化”到用户的钱包中。

如果嵌入在 Bitchat 应用中的钱包允许在拥有彼此安全、已验证连接的双方之间进行离线到离线支付会怎样?你必须信任每一方的 Bitchat 应用没有保存转发代币的副本,但这理论上是可行的。

在上面的飓风例子中,如果我和商人都没有互联网连接,我们可以使用 Bitchat 的这种完全离线模式来创建一笔交易,让我支付给商人。当商人重新获得互联网连接时,他再与铸币厂通信来认领代币。

在此场景中,发送方需要保持诚实,并且如果发送方先上线,不能对接收方进行双花。而且,当前的钱包甚至可能不允许发送未“熔化”的票据。但如果它 可以 工作,上面的例子可能成为对等体在一个可信的、社区环境内进行完全离线交易的一种方式。

接受权衡,享受过程,当然,用起来吧(如果你想的话)

通过 Bitchat 使用 E-cash 是一个很酷的实验。离线支付是 E-cash 的巨大突破,与 Bitchat 应用的协同作用也很有前景。

转账中的一方需要在线。通过 Bitchat 的网络能力,我们可以扩展离线一方发起或接收支付的范围。这是一个新领域;不仅对比特币如此,对整个支付应用领域也是如此。

有一个明确的权衡:E-cash 中使用的不记名代币并非原生比特币。我们必须跟随开发者的引导,继续诚实地告诉用户该协议是托管的。但脱离主链使用比特币 总是 涉及到权衡。

在某些情况下,Bitchat 和 Chaumian E-cash 可以提供(有时可能是关键的)临时支付基础设施。对于单纯在一段时间内没有或不想要互联网或蜂窝连接的用户来说,这也是用户体验的改进。离线模式支付将使他们能够以开放(尽管需要信任)的方式进行链下交易。

Cashu 和 Bitchat 并不相互依赖。这两个解决方案都可以继续发展并获得更多采用,完全不受对方成功与否的影响。

但是,拜托,有人通过 Bitchat 发送了 E-cash 代币,这一事实会让一个孩子对未来完全离线支付的实现充满遐想。

你能怪他吗?


  • 原文链接: insider.btcpp.dev/p/knoc...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~

相关文章

0 条评论