原文标题:《THE NOSTR PRIVACY PARADOX》
撰文:Wendy
编译:DAOrayaki
Nostr,全称「通过中继传输的笔记和其他内容」,是由闪电网络开发者 fiatjaf 于 2021 年开发的一种新的通信协议,它是由 LNBits 开发者 Ben Arc 的一个名为 Diagon Alley 的完全去中心化市场的尝试发展而来。与其他通信解决方案不同,大多数通过哑客户端(dumb client)和智能服务器运作,Nostr 提供了智能客户端和哑服务器(dumb server),从而提高了用户的抗审查能力。
在 Nostr 中,所有数据都存储在用户本地,仅通过中继进行分发,而不是存储在像 Twitter 这样的中央服务器上。在社交媒体的情况下,Nostr 增加了抗审查能力,因为用户可以完全拥有自己的内容和个人资料。鉴于近期围绕 Twitter 的审查政策引发的争议,用户开始向联邦通信解决方案 Mastodon 迁移。然而,在 Mastodon 中,对内容和个人资料的所有权掌握在用户注册的 Mastodon 服务器的运营者手中。虽然像 Mastodon 这样的联邦系统提供了比中央服务器更多的抗审查能力,因为用户可以在遭到审查时简单地注册到另一个服务器,但也有人对 Mastodon 可能通过服务器所有者实施审查提出了批评。
2022 年 12 月,Nostr 社区获得了 Twitter 创始人杰克·多尔西提供的 14 BTC 的资助,这为该协议带来了前所未有的关注。随着建立在 Nostr 上的应用不断发展,移动客户端 Damus 在中国 iOS 应用商店的社交网络类别中排名第一,并因此被禁止。为了遏制 #MarchOffTwitter 运动,Twitter CEO 埃隆·马斯克很快禁止发布与 Nostr 相关的内容,并禁止其他第三方平台(如 Instagram),但没有取得成功。
尽管 Nostr 本身并不是一个隐私协议——默认情况下,客户端会将用户的 IP 地址泄露给中继——但 Nostr 协议可能会提高比特币的隐私性。
提升 BIP47 的隐私性和可扩展性
BIP47 是一项比特币改进提案,旨在为重复支付创建可重复使用的支付代码,同时保护用户的隐私。如果没有 BIP47,为了避免地址重用,用户需要手动费力地生成新地址。当用户将一个地址重复用于交易时,任何观察区块链的人都可以轻松将所有属于该地址的交易聚合起来,形成用户的付款历史和净值图。因此,在比特币中,防止地址重用是隐私的最佳实践,并且已经在许多比特币钱包中默认实施。然而,当用户试图与另一方建立重复支付关系,例如在商户和客户之间的关系时,频繁生成新地址可能会不方便。
通过 BIP47,客户可以为商户生成一组用于支付的地址。如果客户每月购买产品,商户每月都需要向客户发送一个地址。通过 BIP47,客户为商户创建了一个专用的支付代码,类似于扩展公钥。这允许客户自动生成用于商户的新地址,而不需要商户为客户创建地址。
BIP47 使用通知地址,这些地址由 HD 钱包监控以获取输出。在通知交易中,商户通过 OP_RETURN 字段向客户发送盲化的公钥和链码,以及一个共享密钥,用于在公共区块链上保持共享地址的私密性。由于比特币网络的架构,这种交换会产生几个问题。前两个问题是经济问题:一个通知交易由 80 个字节组成,在比特币网络的交易费高时,对用户来说可能变得昂贵。此外,通知交易会创建无法发送的输出,随着时间的推移会使 UTXO 集膨胀。这增加了比特币节点的计算负载,因为它们目前需要存储整个 UTXO 集,即每个未用作新输入以确保交易有效的比特币输出。
通知交易会创建所谓的「有毒找零」。当用户从通知交易中收到找零并将其支付给第三方时,任何观察区块链的人都能够将用户的重复支付与非重复支付进行关联,即使地址没有重用。一个通知地址每个钱包只存在一次。如果一个商户希望与 10 个客户建立重复支付关系,任何观察区块链的人都能够了解到商户的客户基础,因为所有 10 个客户都需要为商户创建到同一个通知地址的通知交易。
与其使用通知交易在商户和客户之间交换支付代码,支付代码可以通过 Nostr 进行交换。与其他通信方法不同,Nostr 适用于交换 BIP47 支付代码,因为不存在可能对消息交换进行审查的中央机构。同时,Nostr 上的所有直接消息默认都是加密的,无需计算共享密钥。通过通过 Nostr 使用 BIP47,用户可以避免通过无法花费的输出创建 UTXO 集的膨胀,并通过避免有毒找零和通知地址的重复使用来消除重复支付与非重复支付之间的关联,以及通过避免公开客户基础来消除客户基础的发布。
注意:通过实施 UTreeXO,可能会在未来消除比特币节点存储整个当前 UTXO 集的需要。UTreeXO 将证明交易是否使用有效的 UTXO 的负担转移给 UTXO 的所有者,将存储需求从几个 GB 减少到几 KB。
Nostr Pay-To-EndPoint
在比特币中,区块链分析服务使用「共同输入拥有权」这个启发式规则将交易映射到身份。根据这个规则,包含不同公钥作为输入的交易被分类为属于同一个人。由于比特币协议采用基于 UTXO 的架构,通过该架构,交易的输入和输出是相互关联的,因此比特币协议也容易受到子集求和分析的影响。在子集求和分析中,攻击者能够计算出输入和输出属于同一实体的概率,即使不同的公钥被用作一个交易的输入。例如,如果一笔交易的输入是 1、4、7、23 和 6,输出是 5 和 36,就可以推断出输入 1 和 4 以及输入 7、23 和 6 属于同一个实体。
来源:2021 年《加密货币交易中的知识发现:一项调查》作者:Xia Fan Lu 和 Xin-Jiang Jang
Pay-to-EndPoint(P2EP)是对中本聪的 Pay-to-IP(P2IP)进行隐私保护的重新设计,编码进原始比特币客户端中。P2EP 交易的一种形式是 PayJoin 交易,旨在打破共同输入拥有权的启发式规则。在 PayJoin 交易中,发送方和接收方都提供输入以打破共同输入的启发式规则。使用 PayJoins,用户可以通过任何通信渠道(如 Tor Onion 作为终点)交换有关将用作输入的 UTXOs 的信息,以构建部分签名的比特币交易(PSBT)。一旦双方同意条款并签署交易,PayJoin 交易在区块链上看起来就像任何其他比特币交易一样。由于涉及方同时扮演发送方和接收方的角色,PayJoin 交易不仅打破了共同拥有权的启发式规则,还打破了子集求和分析:各方可以提供输入为 3 和 5,而交易生成的输出为 6 和 2。
来源:Adam Fiscor 的《Pay To EndPoint》,2018 年
问题:PayJoin 交易的协调相当复杂,因为参与者必须同时在线,无论是使用明网域名还是 Tor Onion 终点。如果用户发起了一个 P2EP 交易,例如关闭了他们的计算机或者网络连接中断,交易就无法进行通信。在 Nostr 中,通信是异步的:用户在网络连接恢复后从中继获取信息。通过使用 Nostr 密钥而不是 Tor Onion 作为 P2EP 交易的终点,可以更容易地协调 P2EP 交易。
另一个 P2EP 的实现是备受争议的 LNURL。通过 LNURL,用户无需为每个交易繁琐地生成新的发票,而是可以接收一个指向 Web 服务器的静态终点,自动生成新的发票。然而,由于 Web 服务器依赖全局域名服务(DNS),使用 LNURL 的用户不可避免地向托管提供商透露了他们的身份,如果没有采取适当的预防措施,还会向收款方透露他们的 IP 地址。广泛采用 LNURL 将对闪电网络的匿名性造成损害。用户可以使用 Nostr 密钥作为 LNURL 交易的终点,以隐藏他们的身份,而不是使用 Web 服务器作为 LNURL 的终点。
Nostr 用于 CoinJoin
虽然 PayJoin 很好地打破了共同所有权启发式和子集和分析,但 PayJoin 无法为发送方和接收方提供对合作方的隐私保护。PayJoin 实质上是两方 CoinJoin,限于两个参与者,这意味着发送方和接收方都知道自己的输入和输出,使其合作伙伴的输入和输出可识别。除非使用 CoinJoined 交易来促成 PayJoin,否则用户有泄露其钱包余额以及过去和未来交易给 PayJoin 合作伙伴的风险。
在像 Wasabi Wallet 的 CoinJoin 协调协议(WabiSabi)这样的匿名金额凭证系统中,Nostr 密钥可以作为协调 CoinJoin 交易的通信终点。这使得 CoinJoin 交易的发送方和接收方可以交换参与 CoinJoin 轮次所需的凭证,从而在 CoinJoin 中实现一种离散支付形式。通过在 CoinJoins 中使用 Nostr 密钥作为终点,合作方在人群中隐藏,对其对手的余额和交易保持不知情。同时,使用 Nostr 密钥作为 CoinJoin 交易的终点有助于 PayJoin 用户节省费用,通过在 CoinJoin 中直接进行支付,而不是通过 CoinJoin 来促进支付。
Nostr 在 CoinJoins 中的另一个用途是协调者的发现。虽然大多数 CoinJoin 协调者在 Tor 后面运行以掩盖 CoinJoin 参与者的身份,但用户目前无法轻松地发现新的协调者,除非是 JoinMarket(面向更高级的 CoinJoin 用户的 CoinJoin 市场)。虽然 CoinJoin 用户可以向 Wasabi Wallet 添加自定义协调者(在后台交换 URL 一样简单),但由于缺乏发布平台,没有办法自动更新协调者的过程。因此,为了发现新的协调者,用户必须手动搜索社交媒体和论坛(如 Reddit 或 Twitter)以添加协调者。然而,通过社交媒体或论坛发布协调者服务可能会对协调提供者构成风险,这取决于服务所应用的政策,因为某些页面可能会轻易关闭。
如果 Tor 是匿名中继服务器,即一种在同行之间促进匿名转发和接收消息的协议,Nostr 可以充当匿名公告板。CoinJoin 协调者可以通过 Nostr 事件类型发布他们的服务,而 CoinJoin 钱包可以启用自动从这些中继服务器中获取信息并在其客户端中显示。通过 Nostr 广播协调器服务器,例如通过 BTCPay 的 Servers CoinJoin 插件和在基于闪电网络的 CoinJoin 软件 Vortex 中提出的方法,可以消除在 CoinJoin 客户端中手动搜索和添加 CoinJoin 协调者的需求,进一步分散 CoinJoin 协调景观。
通过 NOSTR 绕过 IP 要求
正如之前提到的,Nostr 协议最初的概念是实现一个完全去中心化的市场,称为 Diagon Alley。随着 Nostr 协议的发展,Diagon Alley 变成了 LNbits 的扩展 NostrMarkets:一种原生支持 Nostr 的市场,使商家和客户能够通过中继运行和互动在线商店。在 NostrMarkets 中,客户可以订阅商家的公钥,从中继获取产品,而不是通过网店访问商家的网站。这增加了在线商店的抗审查性,因为商家不依赖可查封的网站,而是商家的商店由其与之通信的所有中继托管。即使商家的服务器被查封,商店也可以轻松地在不同位置设置,因为所有产品都存储在 Nostr 网络上的中继上。NostrMarkets 通过加密的 Nostr 直接消息处理订单和付款协调,而付款则通过闪电网络进行。
除了具有抗审查性,LNbits 的扩展 NostrMarkets 还实现了完全匿名的市场。商家和客户不向全世界公开他们的 IP 地址,而只向他们连接的中继公开,而这可以通过在 Tor 后面运行客户端或商店来轻松解决。完全在 Tor 后面运行商店的好处是,商店只能通过 Tor 浏览器和.onion 网页访问,NostrMarkets 可以在任何 Web 浏览器或智能手机上运行,提高了保护隐私的客户端 – 服务器通信的用户体验。由于支付是通过加密的 Nostr 直接消息进行协商,并通过闪电网络实现,只要商店的闪电节点在 Tor 后面运行,NostrMarkets 中的付款将保持相对私密,因为付款协调直接消息与 Nostr 中的其他直接消息无法区分。
另一种绕过服务器客户端通信中 IP 地址要求的方法是 NOSTREST。REST 代表「表述性状态转移」,它是世界范围 Web 的软件架构的一部分,用于通过 GET、POST、PUT、DELETE 和 PATCH 请求在服务器和客户端之间进行通信。但是,当客户端向服务器发送 REST 请求时,IP 地址会被公开,可能会泄露个人身份信息。在 GitHub 上,__escapee__提出了一个建立在 Nostr 上的 REST API 桥接,名为 NOSTREST。通过使用不带身份验证头的 Nostr 密钥,用户和服务器运营者无需知道对方的 IP 地址。因此,NOSTREST 的实现可以改善使用 REST 的比特币应用程序的隐私,因为服务器不需要客户端的 IP 地址。
其中一个例子可以是运行托管的 Chaumian e-cash 铸币厂,这是一种匿名金额凭证系统。在 e-cash 铸币厂中,铸币厂运营商不知道其用户的余额或交换的价值。然而,由于当前的 REST 架构,除非默认情况下在 Tor 后面运行(例如在 e-cash 系统 Cashu 中),否则它会得知用户的 IP 地址。但是,实现和管理 Tor 支持是繁琐的。通过 NOSTREST 桥接,项目可以轻松保护用户的隐私。通过在 Tor 后面运行 e-cash 铸币厂,并使用 NOSTREST 在服务器和客户端之间进行通信,可以实现异步通信,而服务器运营者和用户只会了解彼此的公钥,消除了通过 IP 进行识别的风险。