比特币区块链简析

叁叁肆2018-09-19 13:44


本文来自网易云社区

作者:司徒诚颢


比特币是一种去中心化的加密数字货币系统,这篇文章简单介绍一下比特币系统中用到的各项技术。


比特币使用的密码学技术


比特币作为数字货币,他的安全性需要通过技术手段来保证,而不是像传统货币那样依赖中央机构。

比特币主要用到了哈希算法和数字签名这两项技术。

哈希算法

哈希算法是指将任意长度的字符串映射为固定长度的值,这个值就是哈希值。

要使哈希函数能达到密码安全,还需要有三个附加特性:

  1. 碰撞阻力
  2. 隐秘性
  3. 谜题友好

碰撞阻力和隐秘性比较直观:碰撞阻力是说如果无法找到两个值使得他们的哈希值一样,那么这个哈希函数就具有碰撞阻力;隐秘性是说无法从哈希值反推出输入值。 谜题友好是指对于一个谜题不存在一个解决策略,比只是随机尝试会更好,这点对比特币的区块生成很重要。

比特币采用的哈希算法是SHA-256。

数字签名

数字签名是非对称加密的一个使用场景,使用私钥签名消息,然后将消息和签名发送给对方,对方使用公钥验证签名。 比特币采用的签名算法是ECDSA,这里不得不提一下,我们平常使用的RSA算法,能同时用于加密和签名,但是ECDSA只能用于签名。


比特币的账本系统


那么比特币是如何使用这些加密算法的呢?现在就来看一下比特币账本的数据结构:区块链和梅克尔树。

区块链

区块链本质上是一个链表,但是每个节点的指针不是普通的指针,而是哈希指针:哈希指针除了指向链表中的节点,同时还是指向的该节点的哈希值。 哈希指针使得区块链具有防篡改的特性:如果有人修改了区块K的数据,那么区块K+1的哈希值就会不匹配,因此他需要修改区块K+1的数据,直到链表的头部,只要能保证头部指针无法被修改,就能保证整个链表不会被修改。 比特币就是使用区块链来作为整个货币系统的账本,区块链的头部指针被称为创世区块。

梅克尔树

梅克尔树本质上是一个二叉树,但是每个节点的指针是哈希指针。 同区块链一样,梅克尔树也具有防篡改的特性。 每个区块链的节点都是一颗梅克尔树,树中的每个节点就代表了一笔交易。

比特币的区块链大致如下图:


区块链维护

比特币是一个去中心化的系统,因此他的账本并没有一个类似银行的中心机构来维护,而是靠每个客户端来达成共识来维护区块链。

分布式共识

分布式共识需要靠一致性协议来达成,常见的有Paxos,ZAB等,这些协议已经在互联网应用中发挥了重要作用。

但是比特币作为一个货币系统,在达成共识时有其特殊性:

  • 引进了奖励的理念,人们会为了金钱的奖励变得诚实
  • 引入随机性,共识是通过一段较长的时间达成的

比特币的共识算法如下:

  1. 新的交易被广播到所有节点
  2. 每个节点都将新的交易放进一个区块
  3. 在每个回合,一个随机的节点可以广播它的区块
  4. 其他节点可以选择接受这些区块
  5. 节点们可以把以上区块的哈希值放进自己的区块,以此表示对新区块的确认

双重支付

双重支付,顾名思义,就是一个用户把同一笔钱支付给了超过一个人。 比特币的共识算法中,恶意用户的确可以构造双重支付交易,但是只要增加确认的数目,双重支付攻击的成功率会呈指数级降低。 目前一般会等待6个确认。

奖励机制

比特币中有两种奖励机制:区块奖励、交易奖励。 区块奖励是指创建区块的节点可以在这个区块中加入一笔特别的交易,这笔交易就是一个造币的交易。 这是新比特币被允许创造出来的唯一途径,没有任何其他新增币的机制,这就是通常所说的挖矿了。根据比特币的规则,每生成21万个区块,区块奖励就会减半,比特币的总量为2100万。

交易奖励是指任何交易的制造者都可以选择让交易输出值比输入值小。第一个创建区块把交易放进区块链的节点可以获得这个差额,作为交易费。 随着区块奖励逐渐发完,交易费会变得越来越重要。

区块生成

通过不断尝试随机数,把这个临时随机数、前序块的哈希值还有要填进这个区块的交易列表连接起来,组成一整串字符,然后用哈希函数计算这一整串字符的输出值,这个输出值正好要落在一个相对于这个哈希函数所有可能的输出中很小的目标区间内。 如果找到了这样一个随机数,就可以说找到了一个新的区块,如果这个区块被区块链接受,就能得到相应的奖励。



网易云免费体验馆0成本体验20+款云产品!

更多网易研发、产品、运营经验分享请访问网易云社区