新闻中心

News Center

当前位置:主页 > 时时彩新闻 >

从零开始区块链:比特币可以被攻击者破坏么

2018-08-22 13:12 未知

  原标题:从零开始区块链:比特币可以被攻击者破坏么?——比特币经典论文研读 (5)

  如果区块一直增长,会不会占有太多的磁盘空间?比特币设计了磁盘回收机制。具体原则如下:

  (1)如果最新交易已经在足够多的块里,更早的交易数据可以丢弃以节省存储空间,但是为了不影响哈希值的结果,交易以Merkle树的方式存储,在区块中仅存储了根哈希值。其下的子节点可以直接裁剪掉,不需要存储。

  (2)一个不带交易的块头数据约80字节,如果每10分钟生成一个区块,一年生成4.2M的数据量,扔到内存里没有问题。

  什么是Merkle树?这个也叫哈希数,是密码学里常用的数据结构。这种树的每个叶子节点,都是某个数据块的哈希值;每个非叶子节点,都是子节点的哈希值。所以这就是一个层层向上哈希归并的数据结构,数据的完整性层层锁定,修改任意一个地方都会引起后续连串的反应。于是从完整性和节约空间的考虑,可以先存一个根哈希节点即可。

  比特币的各个节点可以没有全网节点的所有信息的情况下,验证支付的有效性,这样可以节省资源与空间。节点只需要存一份最长链的节点的块头数据即可。而如果想要获得最长的头节点,只需要向网络节点请求,直到得到最长的链即可。这样一来,节点就获得Merkle树的结构,知道一个交易被时间戳打包到哪个块中。节点自己无法验证这笔交易,但是知道这笔交易在链上的具体位置,可以确认网络节点已经接受了这笔交易,而且后续的块更是进一步确认了这笔交易。

  如此一来,只要诚实节点控制了网络,验证就是靠谱的。但是如果攻击者拥有更多的算力,这种验证就比较弱。如果攻击者拥有更多的算力,那就可以伪造出交易记录。应对这个风险的策略就是,如果节点发现无效区块,就会发出警告,让比特币客户端软件下载所有的节点数据,对不一致的区块进行验证。对于频繁交易的商业应用,通常会下载全部数据,这样验证更安全,也更快。

  这一节可以理解为一种工程实用上的折衷优化。由于P2P的分布式属性,理论上每个节点保存所有的网络信息是最好的。但是由于各种客观条件与资源限制,无法支持理想的情况,于是这里提出了一种简单支付验证的方式。因为比特币区块的设计属性,正好也支持这种简单验证的方式,所以从流程上具备可行性。但是既然做了简化,必然会有代价,这是工程上的权衡(trade-off)。所以验证在安全性上会有一些折扣,但是遇到突发情况也有应对方案。

  在第1篇文章中,我们谈到了电子现金需要具备的几个属性,其中一个就是可拆分性:

  “(5) 现金可分割。价值为C元的现金,可以拆分为许多更小面值的现金,这些现金加起来,总额与C相等。”

  (1)尽管可以对每一个比特币单独处理,但是这样做会显得过于笨重。为了支持币值的拆分与合并,一笔交易支付多个输入与输出。通常,输入可以来自前一笔交易较大的额度,也可以是小额的多笔交易。但是输出最多两个,一个是用于支付,一个是归还给付方的找零。

  (2)对于“扇出”的情况,作者认为没有必要把交易的所有历史记录抽取出来。扇出就是指一笔交易依赖与多笔交易,然后这些交易又有更多的依赖关系,如此级联。

  在数字电路中,如果一个电路门,需要依靠其他门的输出作为输入,就会称为“扇入(fan-in)”,如果一个电路门的信号,输出到其他门作为输入,就叫“扇出(fan-out)”。

  另外,最近我带着ScalersTalk成长会的小伙伴在读《资本论[17]》,里面提到“金与银非天然为货。

相关文章