比特币简化支付验证(SPV)是什么

SPV节点

许多比特币客户端被设计为在空间和功率有限的设备(智能手机,平板电脑等)上工作。简化支付验证(SPV)方法用于允许此类设备在不存储完整区块链的情况下运行这些类型的客户端称为SPV客户端或轻客户端随着比特币采用率的增加,SPV节点正成为比特币节点的最常见形式,尤其是对于比特币钱包而言。

SPV节点仅下载块标题,而不下载每个块中包含的事务。链比完整的区块链小1000倍。SPV节点无法了解网络上的所有交易,因此无法创建所有可用支出的UTXO的完整表示。SPV节点使用稍微不同的方法来验证交易,该方法依赖于对等方按需提供区块链相关部分的部分视图。 

“简化支付验证”通过引用交易在区块链中的深度而非高度来验证交易。当一个完整的区块链节点构建成千上万的区块的完整验证链,并且将交易链(及时返回)到达创世区块时,SPV节点将验证所有区块(而非所有交易)的链并将其链接到有关交易。

例如,当检查第300,000个块中的交易时,一个完整的节点会将所有300,000个块链接到创世块,并创建一个完整的UTXO数据库,从而确定交易的有效性并确认UTXO未被使用。SPV节点无法验证是否未使用UTXO。相反,SPV节点将使用Merkle path 在事务和包含该事务的块之间建立链接。 

因此,SPV节点等待,直到看到放置在包含事务的块上方的从300.001到300.006的六个块,并通过在300.006到300.001的块下面建立深度来进行验证。网络上的其他节点接受了第300,000个区块,并需要在其上生产另外六个区块的工作这一事实,证明了该交易不是双花。

无法说服SPV节点某个交易存在于一个块中(如果未包含在其中),但是可以从SPV节点中隐藏交易的存在,这可以证明该交易存在,但不能验证该交易是否存在。双花的情况下,它不存在(因为它不存储所有事务)。此漏洞可用于拒绝服务攻击或双花攻击。 

为了解决这个问题,SPV节点随机连接到多个节点,以增加与至少一个诚实节点接触的可能性;反过来,这又使SPV节点容易受到网络分区攻击或Sybil攻击,因为它们连接到虚假节点或虚假网络,并且无法访问诚实节点或真实的比特币网络。对于大多数实际目的,连接良好的SPV节点非常安全,可以在资源使用,安全性和便利性之间取得平衡。由于SPV节点检索特定交易以有选择地验证它们,因此会带来隐私风险:通过请求特定数据,他们可能无意间泄露了其钱包中的地址(监视网络的第三方可能会跟踪SPV节点上钱包所请求的所有交易。并使用它们将比特币地址关联到用户的钱包,从而破坏其隐私)。

引入SPV节点后不久,比特币开发人员添加了一项称为Bloom Filter的功能,以规避SPV节点的隐私风险。这些筛选器允许SPV节点在不准确显示其感兴趣的地址的情况下接收交易的子集。这是通过使用概率而非固定模式的筛选机制完成的。

布隆过滤器

这些用于过滤SPV节点从对等方接收的事务(以及包含它们的块),仅选择该节点感兴趣的事务,而不显示受影响的地址或密钥。SPV节点会将布隆过滤器设置为空(在这种状态下,过滤器不匹配任何模式)。然后,SPV节点创建它感兴趣的所有地址,密钥和哈希的列表,从其钱包控制的UTXO中提取公钥哈希,哈希脚本和交易ID。然后,SPV节点将其中的每一个都添加到筛选器中,以便它可以匹配事务中是否存在这些模式而不会泄露它们。 

SPV节点将过滤器负载消息发送到对等方,其中包含要在连接中使用Bloom过滤器在同级上,将针对每个传入事务检查筛选器。完整节点对照过滤器检查事务的不同部分,以查找包含以下内容的匹配项:

交易ID;

来自每个事务输出的块脚本的组件数据(脚本中的每个键和哈希);

每个交易输入;

来自签名输入(或见证脚本)的每个组件数据。

通过检查所有这些组件,可以使用过滤器来匹配公钥,脚本,OP_RETURN值,签名中的公钥或将来的组件(如智能合约或复杂脚本)的哈希建立过滤器后,对等方将针对它测试每个事务,仅转发匹配的事务。网络协议和布隆过滤器机制在BIP-137中进行了描述。

加密和身份验证的连接

新来者认为,比特币网络内节点之间的通信是加密的:在最初的实现中,它们是完全未加密的。如上所述,这对于完整节点而言不是问题,但对于SPV节点而言则是一个大问题。为了增加隐私,已提出了两种解决方案来加密通信:

TOR传输:洋葱路由网络是一个项目,它通过提供匿名性,不可追溯性和私密性的随机网络路径提供数据的加密和封装(Bitcoin Core提供了几种配置选项,允许运行在其上传输数据流量的比特币节点。 TOR网络,并且还提供了隐藏服务,该服务允许其他TOR节点直接通过TOR连接到节点。

P2P身份验证和加密(BIP-150 / 151):这两个BIP定义了可以通过兼容节点提供的可选服务。BIP-151为支持BIP的节点之间的所有通信启用协商加密;BIP-150提供可选的对等身份验证,允许节点使用ECDSA和私钥对身份进行身份验证(截至2017年1月,它们尚未在Bitcoin Core中实现,但在另一个名为bcoin的客户端中实现)。这两个BIP允许SPV节点使用加密和身份验证连接到受信任的完整节点,以保护SPV客户端的隐私。此外,身份验证可用于创建受信任的比特币节点网络并防止中间人攻击。最后,P2P加密(如果被广泛使用)会增强比特币对数据流量分析和监视的抵抗力,尤其是在监视和监督Internet的国家。

比特币网络中的几乎所有节点都维护一个临时的未确认交易列表,称为内存池(或交易池)。节点使用此池来跟踪网络已知但尚未包含在区块链中的交易。随着事务的接收和验证,它们被添加到内存池中并转发到相邻节点以在网络上传播。

一些节点实现还维护一个单独的孤立事务池。如果事务的输入引用的是未知事务(例如丢失的父级),则孤立事务将临时存储在孤立池中,直到父级事务到达为止。将事务添加到内存池后,将检查孤儿池中是否有引用此事务输出的孤儿(子代),并验证相应的孤儿。 

如果有效,则将它们从孤立池中删除并添加到内存池,从而完成从主事务开始的链。根据新添加的事务(不再是孤儿),将以递归方式重复该过程,以寻找更多的孩子,直到找不到更多的后代。通过这个过程,父亲交易的到来触发了整个相互依存交易链的级联重建,使孤儿与父母在整个链中重新团聚。 

内存池和孤立池(已实现)都存储在本地内存中,而不保存在永久内存中相反,它们是由传入的网络消息动态“填充”的(在节点启动时,两个池都是空的,并逐渐填充网络上收到的新事务;当前,某些版本的Bitcoin Core在节点关闭时将内存池保存在磁盘上)并在启动时进行检索)。

Click to rate this post!
[Total: 0 Average: 0]

人已赞赏
名家说小白百科每日优选

公链vs联盟链,哈耶克与凯恩斯之争

2019-12-31 17:57:25

名家说小白百科每日优选

加密货币和面部识别技术

2019-12-31 17:57:30

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索