随着BDK和LDK等软件开发套件的出现,构建比特币钱包从未如此简单。然而,尽管需要更轻松的开发,但以默认情况下保护用户安全和隐私的方式进行构建也很重要。例如,轻钱包如何连接第三方服务器来接收和发送交易数据是一个需要解决的重要问题。
我认为比特币钱包需要块过滤器来尊重用户的隐私。为什么?这是防止数据泄露到服务器的唯一方法,这将允许服务器将用户的交易数据链接到公开可用的数据之外。
在本文中,我们将通过首先查看有多少比特币用户运行完整节点,探讨为什么比特币钱包需要块过滤器,API钱包如何提供良好的用户体验,但最终导致所有交易链接在一起,布隆过滤器如何未能保护隐私、块过滤器如何成为唯一的轻量级钱包网络隐私解决方案,以及最后如何使用仅 Tor 通信来实现这一切,同时保护用户的 IP 地址。
只有少数用户运行完整节点
运行和使用比特币节点是您能做的**的事情,因为您是网络的一部分,并且不需要任何中介来接收和广播交易数据。然而,很明显,运行全节点并不适合所有人;轻客户端(简单支付验证)的存在和需求甚至是中本聪在比特币白皮书中设想的。
我们无法知道有多少用户正在运行一个全节点,我们只能知道有多少个节点。如Bitnodes.io网站上所示,保守估计仅计算侦听节点的数量约为 16,000 个。对侦听和非侦听节点进行计数的更准确估计(例如Luke Dashjr 的节点计数工具)使该数字更高,约为 53,000 个。

了解完整比特币节点数量的历史背景也很重要。根据Luke Dashjr的比特币节点计数历史记录,我们可以观察到比特币节点的使用量远未达到峰值。2018年1月13日,人数达到205,000。这与比特币几周前达到历史新高密切相关。到了2021年,我们可以观察到随着价格的上涨,节点数也有所增加,但也仅仅达到了接近9万个。

我们可以确认,运行比特币节点的用户很少,并且这个数字不会随着时间的推移而增加。轻钱包比比特币节点更容易使用,我们需要找到合适的网络隐私解决方案来实施。我们来看看当今最常用的技术,即API钱包。
API钱包服务提供商默认收集您的数据
大多数比特币钱包使用 API(应用程序特定接口)来发送和接收用户交易数据。该技术具有高度可扩展性,并且可以提供**的用户体验,因为请求是即时的。然而,它有一个固有的隐私警告。让我们详细分析一下它的工作原理以及服务提供商默认情况下如何收集您的数据。
当您初始化标准比特币钱包时,您可以导入或创建助记词种子短语并设置所需的派生路径(通常是自动的)。这将为您提供一个主公钥,通常称为 xpub。它看起来是这样的:
xpub6CUGRUonZSQ4TWtTMmzXdrXDtypWKiKrhko4egpiMZbpiaQL2jkw1icqYh2cfDfVxdx4df189oLKnC5fSwqPfgyP3hooxujYzAu3fDVmz
完成后,xpub 会自动发送到服务提供商的服务器,在间隙限制内派生比特币地址(在服务器停止扫描资金之前将检查多少个余额为零的未使用地址)。在服务器的索引中查找这些地址,如果找到交易,则将它们发送到用户的客户端。如果发生新交易,则会监视这些地址。此外,当用户发送交易时,它也是通过相同的通信通道发送的。
很明显,这个过程非常高效,并且允许 API 钱包提供快速、简单的用户体验。但是,服务提供商将能够将我们的所有交易链接在一起,从而默认收集您的私人信息。幸运的是,许多 API 钱包允许用户通过 Tor 连接,因此至少用户的 IP 地址受到保护。
现在让我们研究一种不依赖于单个服务器的替代方法,即在轻钱包上使用布隆过滤器。
为什么布隆过滤器不能保护隐私
一些钱包允许用户通过布隆过滤器接收和发送交易数据。这种通信方式是在BIP37中引入的,最初被认为是私有的。在本节中,我们将详细介绍布隆过滤器是什么以及为什么它们实际上不利于隐私。
布隆过滤器是概率数据结构,用于测试元素是否是集合的成员。在比特币上下文中,布隆过滤器由轻客户端创建并发送到网络对等点,测试地址(元素)和区块链数据(集)之间是否匹配。如果匹配,交易数据将发送到轻客户端。它是概率性的,因为存在误报,但这些误报随后被轻客户端丢弃。
人们认为误报率足够高,以至于网络对等方无法辨别哪些交易是真正的,哪些是假的。然而,由于实施错误,误报率实际上降低了。
此外,轻客户端可以为同一个钱包创建不同的布隆过滤器,如果网络对等点收集了两个或多个布隆过滤器,则可以计算交集以消除误报。最后,如果分析区块链数据并且用户没有加入硬币或使用硬币控制,则网络对等方可以推断出哪些地址不属于该用户。
比特币钱包需要块过滤器来保护隐私
早在 2018 年,这个问题还没有真正的解决方案,块过滤器还没有出现。幸运的是,它们在次年的BIP157和158中被引入,现在已在多个钱包和比特币软件中实现,例如Wasabi、Blixt、Breez、LND和LDK。它们通常被称为中微子。在本节中,我们将研究它们的工作原理以及为什么它们是网络隐私的正确解决方案。
区块过滤器压缩区块数据,通过下载特定区块而不是查找单个交易,帮助钱包接收来自对等方的交易,而不会损害隐私。
块过滤过程通常涉及三个步骤。首先,用户从 Breez 的网络对等点下载代表区块链的块过滤器,或者在 Wasabi 的情况下从协调器服务器下载代表区块链的块过滤器。然后,轻客户端检查间隙限制内的地址是否与块过滤器匹配。最后,如果有匹配,则下载相应的块。
因为我们下载的是整个区块而不是单个交易,并且存在误报率,所以区块过滤方法可以保护用户的隐私免受网络同行的侵害。与布隆过滤器和 API 钱包不同,除了区块链上公开的信息之外,它无法找出(或不直接收集)用户交易之间的联系。
块过滤器是网络隐私解决方案的一部分,但还需要其他东西来完成这一任务。
TOR 是解决网络隐私问题的最后一步
Tor 和比特币齐头并进,与块过滤器一起,可以解决轻量级客户端的网络隐私问题。Tor 通过节点网络路由用户的 IP 地址,从而对目标服务器隐藏用户的 IP 地址。由于通信的多层性,这种机制被称为洋葱路由。
Tor 和块过滤有一个共同点。它们都是会降低性能的进程,而且会很明显并降低用户体验。有些人认为你必须接受这一点,但我认为它可以改进到几乎不被注意到的程度。
例如,Tor 社区实施了名为Conflux的通信可靠性解决方案。客户端不是发出单个请求,而是使用两个不同的 Tor 电路发出两个请求,以增加快速完成的可能性。再加上区块过滤器的钱包加载创新(例如Wasabi 钱包上的Turbosync),将引领我们走向一个用户不必在可用性和隐私之间做出选择的未来,而是可以享受两者。