比特币钱包的种类

  • jimpo_
  • 发布于 2018-03-25 19:19
  • 阅读 35

本文详细介绍了多种比特币钱包的类型,包括全节点钱包、SPV钱包、Electrum钱包、客户端过滤钱包以及托管钱包,分析了它们的安全、隐私、资源需求和优缺点。

即使是技术水平很高、长期支持加密货币的倡导者,使用比特币也很困难。在你遇到保护和备份私钥的问题之前,你必须在众多的钱包中做出选择。如果你不相信我这很难,可以听听Andreas Antonopoulos,他是这项技术最知名、最能言善辩的宣传者之一,也是《精通比特币》的作者。一个有用的资源是bitcoin.org上的钱包比较页面,但为了保持信息量的可管理性,它只是简短说明了需要大量背景知识的钱包特性。

对这个领域的新手可能会想,为什么有这么多选择,为什么没有明显的赢家。一些钱包特性,如SegWit和BIP 70支付协议支持,能够通过足够的工程努力被添加到任何钱包,但还有一些涉及网络架构的其他考虑。钱包访问和验证区块链数据的方式在安全性和便利性之间强加了一个基本的权衡,没有应用能在这两方面都做到最好。钱包设计之间最重要的区别之一为:

  • 存储要求
  • 计算/能量使用
  • 带宽消耗
  • 财务隐私
  • 攻击向量
  • 费用估算的有效性
  • 信任程度和中心化

有几种一般的钱包类别在这些属性之间寻求不同的平衡。让我们从最安全的钱包开始,逐步走向更便利的钱包。

完整节点

一个完全验证节点是比特币点对点(P2P)网络中的一个参与者,它下载区块链历史中的所有区块和交易,并根据协议指定的共识规则对其进行验证。该节点最基本的责任是检查所有交易是否正确签名,并确保没有双重消费。

Bitcoin Core QT客户端是一个集成在完整节点中的钱包实例。该钱包使用完整节点的内部API和数据存储,以获取区块链状态并广播交易。

在测试网络上运行的Bitcoin Core 0.16钱包

运行完整节点为你提供了对资金最大的控制权和可能的最佳安全性。缺点是高资源需求、较长的初始同步时间和选项不足。虽然Bitcoin Core是最知名、整合了GUI钱包的完整节点,但它并不以用户友好而闻名。由于对稳定性的强烈追求、去中心化的开发模式以及2009年代码基的技术债务,该项目缓慢融入新功能。

与集成钱包架构的替代方案是去耦设计,其中钱包与网络节点分开,并安全地连接到受信任的完整节点以获取区块链数据。该钱包是一个独立的代码库,运行在单独的进程中,甚至是主机中,并可能索引存储在节点中的重复交易或区块数据。这本质上是一种客户端-服务器架构,钱包作为完整节点的客户端,通过P2P或RPC网络接口进行通信。主要好处在于模块化允许对客户端进行更大的自定义和选项多样性。Armory Wallet使用了这种架构,我们的定制钱包后端服务在Coinbase也如此。

资源

关于存储和带宽,完整节点下载并在磁盘上存储自区块链创世以来的所有区块,截至目前为513,400个,总大小为176 GiB。还要注意,使用SSD会大大提高同步区块链的时间,SSD比HDD更贵。节点还会收到关于网络上所有新的有效交易的通知,即使这些交易未得到确认。从计算上看,完整节点必须执行相对昂贵的签名验证,通常每个交易需验证超过一次。

减少完整节点存储要求的一个选项是验证后丢弃旧块(这对带宽或计算使用没有影响)。Bitcoin Core支持将存储数据修剪到约3.5 GiB的选项。修剪的缺点是你的节点无法为试图从创世同步的新节点提供历史区块数据,但钱包功能基本不受影响。

隐私

根据钱包的使用模式,可能有可能分析区块链上的资金流动,从而提取出更多的财务信息。例如,假设Alice为某件商品支付了Bob0.1 BTC,然后Bob创建了一笔总额为100 BTC的交易,其中一个输入使用了Alice的输出。Alice可以合理地假设,Bob有100 BTC,这可能是他不想透露的信息。通过链上交易模式泄露信息是所有钱包都面临的问题,我在这里不会关注这个问题。

钱包对泄漏到网络节点的额外信息有更多的控制力。通过Tor运行的完整节点在网络上具有最佳的隐私,因为节点无法判断它是否正在托管一个钱包或只是转发其他节点中继的交易。

攻击

完整节点提供了针对区块链攻击的最佳安全性,因为所有区块都是在本地完全验证的,不过仍然存在两种攻击的可能性。第一种是51%攻击,矿工或矿工卡特尔占网络哈希率的50%以上,创建一个具有更多工作证明的区块链分叉,并对已确认的资金进行双重消费。由于协议中的经济激励,这在比特币历史上从未发生过。

在发生网络范围的51%攻击之前,下一种最坏情况是所谓的eclipse攻击。攻击者控制了_所有_节点的网络对等体,可以理论上执行一次双重消费攻击,通过发布一个工作量较少但仍然有效的区块链,借此进行在主链上双重消费的交易。尽管如此,这要求攻击者创建多个非常昂贵的工作证明,如果节点仅有一个诚信连接的对等体,则该攻击将被阻止。

在去耦架构的情况下,主要考虑问题是确保客户端与服务器之间的通信安全,特别是如果它们位于不同主机之间。由于网络节点是一个完全受信任的组件,拥有中间人攻击能力的攻击者可能会向钱包报告完全无效的交易。在这方面一个挑战是比特币的P2P传输协议当前未经身份验证,虽然BIP 150151如果被采用能提供本地解决方案。目前现有的替代方案包括SSH隧道和网络访问控制。

费用估算

完整节点可以使用最近区块和内存池中的交易费用来估算市场费用率和确认时间。

SPV钱包

尽管可以在标准桌面和笔记本电脑上运行比特币完整节点,但资源需求对移动设备来说太大,并且同步在最佳情况下要花费几个小时。幸运的是,比特币协议优雅地设计以支持仅下载与它们相关的交易的客户端应用,并具备高度安全性。这些应用通常被归类为light clients。中本聪原始白皮书的第8节描述了一种称为简化支付验证(SPV)的模式,其中网络客户端仅下载区块头,并依赖于完整节点提供的交易包含性紧凑证明。

在2012年,Android比特币钱包的首席开发者提出了一项协议扩展,以支持SPV轻客户端。BIP 37向P2P协议添加了新消息,允许节点获取部分块,仅包含完整区块中的一些交易。为了让完整节点知道它关注哪些交易,客户端在连接时发送与其所有地址相关的Bloom过滤器,然后节点会过滤出支付到或从它们支出的交易。由于比特币头部包含默克尔树承诺交易数据,节点可以证明交易已被包含在区块中,前提是其头部及少量默克尔分支是可用的。BIP 37轻客户端只需从其对等体获取和验证所有块头,向它们上传Bloom过滤器,然后仅下载与它相关的交易。尽管客户端未根据所有共识规则验证块,但它假设网络大多数哈希算力正在开采有效块,因为经济激励的存在。

在Android上可用的经典比特币钱包是第一个BIP 37客户端

资源

存储和带宽需求非常小,因为仅下载和存储区块头和相关交易。每个区块头的大小为80字节,截至目前,总大小约为40 MiB。执行的计算也大幅减少,因为不验证区块和交易签名。应用程序甚至可以丢弃在钱包创建日期之前的所有区块头。

隐私

在隐私和带宽使用之间存在权衡,用户可以通过调整Bloom过滤器的假阳性率来进行调节。理论上,更多的假阳性会为客户端请求的数据创造更大的匿名集,但代价是下载更多的数据。然而实际上,已经证明由于实现缺陷,Bloom过滤机制提供几乎没有隐私来以直接形式暴露账户所需的一组地址。

一些轻钱包提供通过连接到受信任的完整节点来提高隐私的选项,这是一种真正SPV和上述去耦完整节点架构之间的混合。

攻击

由于SPV客户端下载所有头部并依循工作量最大的链,攻击方法与完整节点相同:51%攻击和eclipse攻击。但是SPV客户端的风险更大,因为成功的攻击者不仅可以双重消费,还可以伪造完全无效的交易。这意味着控制所有客户端对等体的攻击者可以不被捉住地使用从无中创造出来的资金向受害者发起交易。最佳的保护就是等待的确认数超过完整节点所需的,以增加攻击成本。

BIP 37还允许针对轻客户进行另一种攻击,其中完整节点可以省略与客户端过滤器匹配的数据。虽然对于普通钱包来说风险有限,但一些智能合约应用,如闪电网络节点,重度依赖于检测某些交易的能力。

费用估算

由于轻客户端无法访问历史区块信息或完整的交易内存池,动态费用估算是一个重大挑战。目前最佳策略是从受信任的服务获取预计费用率,或要求用户自己输入,并在必要时通过Replace-by-Fee(RBF)提高费用。

Electrum

Electrum是一个流行的比特币钱包,也使用SPV验证交易,但与专用服务器连接,而不是直接连接到比特币P2P网络。服务器连接到本地运行的比特币完整节点,并索引额外的信息,以便快速响应客户端请求。由于该软件是开源的,因此服务器是由多个参与者运行,而不是某个中央实体。

客户端随机连接到选定的Electrum服务器,从中下载比特币区块头和相关的交易数据。类似于BIP 37客户端,Electrum钱包会验证来自所有连接服务器的头部,跟踪最长的工作证明链。然后钱包选择一个主服务器从中检索区块数据,并将所有钱包地址发送给它。服务器利用按地址索引的交易,通知钱包区块链中发送到或从它们支出的交易。通过每次通知,钱包下载任何新的相关交易以及默克尔包含证明。

总体而言,这种架构与BIP 37类似,但由于有更少的Electrum服务器而更集中,因为服务完整节点的Electrum服务器的数量较少。

显示连接的服务器的Electrum钱包

资源

带宽使用更为高效,因为地址集上没有假阳性匹配,但存储和计算相似。

隐私

隐私取决于信任Electrum服务器操作员不保留日志,客户端甚至无法获得Bloom过滤器提供的弱隐私。再加上更大的中心化,整体隐私表现非常糟糕。

攻击

相同的51%和eclipse攻击针对BIP 37 SPV客户端是可行的,虽然根据对抗方的假设,执行难度可能有所不同。一方面,攻击者需要攻破的服务器数量更少,以向钱包提供无效的头链。另一方面,Electrum使用TLS来验证服务器,而比特币P2P连接未经身份验证,因此攻击者在执行中间人攻击时将面临较大困难。从本质上讲,这将更多的信任放在服务器上,而不信任网络。

费用估算

Electrum钱包从主服务器获取费用估算,尽管用户可以按需调整该数值。在最坏的情况下,恶意的Electrum服务器可能会强迫客户端支付过高的费用。

客户端侧过滤钱包

如上所述,由于当连接到故障对等体时,SPV客户端可能未被通知交易的情况,会给闪电节点带来重大问题。具体来说,闪电节点正在不断监视区块链,以查找其对手方通过发布过去的通道状态进行欺骗的证据。错过这样的交易可能会导致资金损失。

为了解决这个问题以及BIP 37的其他一些问题,闪电开发者提出了一种替代轻客户端模式的提案,正在社区中获得关注。该概念是客户端不是向服务器发送其地址的Bloom过滤器并下载匹配的交易,而是通过服务器向客户端提供确定性Bloom-like块内容过滤器,后者可以决定下载完整块或跳过它们。假设客户端能够获取正确构建的过滤器,它们不会受到对等体省略交易的漏洞,并且通过从多个来源下载区块提高隐私。

根据BIP157158中的规定,客户端首先从多个对等体中下载头部和创建日期之后的所有块的过滤器。使用类似于区块头自身的链式承诺,BIP 157允许客户端高效检查所有对等体之间对过滤头部的共识,并禁止任何试图提供无效过滤器的对等体。这意味着拥有至少一个诚实对等体提供块过滤器的客户端将有保证地看到所有与其相关的事务。已经有初步实现这种客户端的项目,名为Neutrino,由Lightning Labs创建。

BIP 37与BIP 157协议流的比较

资源

这种轻客户端必须下载钱包创建日期之后每个区块的过滤器,以及每个包含至少一个相关交易的完整区块。基本的块过滤器平均大小约为每个完整区块的~3%。下载的完整区块的数量取决于钱包的活跃程度。此外,与SPV客户端不同,这些钱包无法有效过滤未确认的交易,因此唯一的选择是下载所有未确认的交易或都不下载。比特币网络每分钟平均有250 KB的新交易数据。

虽然带宽使用较高,但客户端可以丢弃大部分下载的数据,因此存储和计算需求与SPV客户端相同。

隐私

该提案的一个主要好处是与SPV客户端相比,隐私有所改善。主要原因是,提供块给客户端的对等体无法确定该客户端真正需要哪个交易。此外,从不同来源下载完整块,因此没有人看到与客户端相关的完整块集,从而抵御交集分析。这是带宽使用和隐私之间权衡的一个例子:下载更多数据为客户端真正关心的数据创造了更大的匿名集。

攻击

不幸的是,这种轻客户端与SPV客户端在51%和eclipse攻击方面同样脆弱。然而,BIP 157确实为阻止节点迫使钱包错过交易提供了一定的保护。

受信任的服务器,局部密钥钱包

如上所述,完整节点要求大量资源,而SPV客户端向不受信任的节点泄露敏感的财务信息,并且更易受到攻击。两个类型的钱包的用户体验也受到影响,因为初始头部同步可能在移动设备上耗时超过15分钟。

针对资源不足的设备,另一种常见的钱包架构是将私钥保留在本地,并连接到受信任的后端服务器以获取区块链数据。这种模式被Copay、Mycellium和Blockchain.info等多个钱包以不同形式使用。当用户想发送资金时,后端服务会生成一个未签名的交易并将其发送到客户端。客户端随后可以验证交易的金额、手续费和目的地并添加签名。由于私钥从未离开客户端,即使后端受到攻击,它们仍然安全; 然而,如下所示,其他攻击依然存在。

对于宁愿信任已知公司的用户而言,这种安全模型可能比SPV安全更令人安心,而这些钱包通常相当容易使用。另一方面,中心化和受信任的服务带来了比特币最初创造时就存在的许多风险。

支持Copay的Bitcore服务架构(感谢Bitpay工程博客

资源

这些钱包没有显著的资源需求,因为它们向后端服务器查询相关交易,不需要下载头信息。这意味着用户在生成和备份其密钥材料后可以立即使用钱包。

隐私

所有地址都为服务器所知。更进一步,有些钱包如Copay会在服务器上保留HD扩展公钥,从该公钥可以推导出属于该钱包的所有未来地址。

攻击

从安全角度来看,该架构最有趣的问题是如何确保与后端的连接安全。后端的被攻破可能导致钱包看到已确认的交易,而攻击者无须创建任何工作证明。

Mycelium使用Tor隐藏服务和固定证书硬编码到源代码中,这提供了最佳的加密身份验证程度。Copay钱包使用TLS连接到Bitcore后端服务器,后者引入了证书授权。Blockchain.info也依赖于TLS,但攻击者如果窃取了证书,不仅可以拦截传向后端的请求,还能提供恶意Web客户端。这可能导致私钥材料遭到盗取,更别提目前为止已知的任何其他攻击。

费用估算

费用率由受信任的后端服务器在生成未签名交易时设置。

托管账户

最中心化的比特币钱包类型是像Coinbase这样的托管账户(披露:我在这里工作*)。在这里,私钥由完全信任的实体管理,该实体生成、签名并广播交易以满足用户的请求。

在这个类别中,Coinbase仍然是桌面和移动设备上的一个流行选择,尽管有些声明称Coinbase不是一个钱包,但由于它的易用性,仍然受到青睐。许多客户不理解或不愿意自己管理私钥,更愿意使用带有用户名和密码和账户恢复功能的传统服务。另一个显著的好处是,向平台上其他用户发送资金可以在链外进行,不需要缴纳网络费用。

托管账户的隐私和安全信任模型与文中讨论的其他钱包截然不同。像Coinbase这样的安全意识提供商能够将客户资金合并,并将大多数资金存储在高度安全的离线密钥中,称为冷存储。他们还能够雇佣全职的安全和加密货币专家团队来保护客户的资产。然而,中心化的增强也带来了弊端。其一,托管账户必须遵守当地法律法规,可能对所有人都不可用,提供此类服务的公司也被要求实施KYC/AML政策。此外,在高流量或技术问题的情况下,账户的进出转账可能会延误很长时间。在最坏的情况下,始终存在托管人被黑或以其他方式失去资金访问权限的风险,不幸的是,这在比特币历史上曾多次发生。比特币的黄金法则是,如果你不拥有私钥,你就无法控制资金。

资源

这些应用使用最低可能的资源,因为所有工作都转移到了托管服务器上。

隐私

集中隐私模型有利有弊。由于客户资金被合并,个人实际上会获得增强的隐私,防止任何试图通过观察区块链来去匿名化交易的人。例如,如果Alice向Bob的托管账户发送比特币,支出该输出的交易几乎可以肯定_不是_Bob的交易。另一方面,账户提供者可以完全查看所有客户的交易,且根据当地法规,可能会受到政府对特定账户的信息传唤。这本质上是常规银行账户所提供的相同类型的隐私。

攻击

托管账户有两个主要的安全问题:1)单个账户被攻击和2)托管服务被攻击。

账户被攻击可以通过各种方式发生,例如网络钓鱼、电话转发、弱密码等。托管账户服务可以通过要求客户强制使用强密码、提供基于TOTP的双因素验证,及提供用于白名单提取地址或延迟大量资金提取的功能,来帮助客户保护其账户。

除了保护自己的账户之外,务必在开启账户之前对托管人的安全实际和记录进行尽职调查。你可以在这里了解Coinbase实施的一些安全措施。

这是一大堆信息,我尝试在一个表中说明:

大致简化的钱包权衡总结

所以如果所有钱包都有问题,你应该如何选择一个?好消息是你不需要选择-你可以为不同的用例拥有多个钱包!例如,我保留多个钱包:一个用于日常消费的移动钱包(好吧,当费用合理时),更安全一个用于长期持有。重要的是要了解差异并根据自己的需求做出适当选择。最终的决定归结为你对隐私和使用便利性的重视程度,以及你存储多少钱。

可能永远不会出现完美的解决方案,但在设计更好的、保护隐私的、安全的、无信任的和便利的比特币钱包方面还有很长的路要走。请继续关注我的下一篇帖子,了解我们可能会在下一代轻客户中看到哪些功能,以及需要实现这些功能的条件。

*Jim是Coinbase协议团队的一名工程师。此帖子反映的是他自己的观点,而不是公司的观点。也就是说, 我们正在招聘工程师 ,所以你应该申请。

感谢Josh Ellithorpe和Varun Srinivasan阅读此帖草稿。

  • 原文链接: medium.com/@jimpo/flavor...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
jimpo_
jimpo_
江湖只有他的大名,没有他的介绍。