Bloodline's Blog Notes and thoughts from Bloodline

区块链学习笔记(二)——比特币如何实现去中心化

Comments

本文是对 coursera 的 Bitcoin and Cryptocurrency Technologies课程笔记。

2.1 Centralization vs. Decentralization

去中心化不代表“什么都没有”。

比特币的去中心化可以分解成以下五个问题:

  1. 谁来维护账本?

  2. 谁能够验证交易的合法性?

  3. 谁创造新币?

  4. 谁决定系统的变化规则?

  5. 比特币如何实现交易价值?

主要注意:

在比特币协议之上,可以存在交易所,钱包,服务商等具有中心化性质的事物。

比特币的设计:

  • 点对点网络 (Peer-to-peer network)。

  • 采矿 (Mining)。虽然每个人都能进行,但实际目前来讲采矿的成本已经很高,使得比特币具有一些中心化。

  • 软件更新。比特币系统的代码是开源的,开发者也都由社区信任。当然,这也有一定程度上的中心化。

2.2 分布式一致性 (Distributed Consensus)

比特币的关键技术挑战之一为:分布式一致性 (Distributed Consensus),或分布式共识。

分布式共识协议两个属性:

  • 协议中止时,所有正确节点都要承认结果 value。

  • 结果 value 由某一正确的节点产生。

例如:Alice 对 Bob 的支付,实际上是 Alice 向点对点网络中发出广播,声明此次支付。即便 Bob 没有在网络中,或者暂时没有在线,也不影响支付的有效性。

比特币系统中,在任意时刻:

  • 网络中的所有节点拥有一系列已达成共识的区块账本。

  • 每个节点用一堆没有被打包进区块的交易(这些交易已经发生并广播),此时每个节点所接收到的交易并不完全一致。

每隔一段时间之后,每个节点会把自己接收到的交易产生为区块作为输入,让其他节点来达成共识。这个共识很难完成,无法保证其他节点的可信任性。当然这个区块并不一定需要包含当前所有交易,未包含的交易可以在下一区块进行打包。

问题是,存在恶意节点以及不完美网络的情况下,如何达成一致。

传统上有 Byzantine generals problemFischer-Lynch Paterson 理论(系统中只要有一个损坏节点便不可能达成共识),并且著名的 Paxos 协议能避免产生不一致的结果,但是有时协议会死机卡住无法运行。

比特币运行的比理论要好得多。同时理论也很重要,可以预防可能的问题和攻击。

比特币的不同之处:

  • 奖励机制(这可能因为比特币是一种货币的原因)。

  • 包含随机性。

比特币不纠结于共识的起点和终点。而是通过较长的时间完成——一个小时左右。实际上是随着时间越久,确定的概率越大。

2.3 无需身份的共识 —— 区块链

身份机制在 p2p 网络中是不安全的,同时,匿名制 (Pseudonymity) 也是比特币的目标之一。

弱假设:

在系统中可以随机选择一个节点。这个理论稍后证明。

隐性共识 (implicit consensus)

简化的共识算法:

  1. 新交易被广播给所有节点。

  2. 每个节点都监听网络并将监听到的交易放进区块。

  3. 每一轮都会随机选中某个节点,将它的区块广播给其他节点。

  4. 其他节点只有在验证交易有效(加密签名过)后才会接受区块。

  5. 节点会通过把受到的区块的哈希值放进其产生的下一个区块中,来表示对此区块的认可。

Alice 被随机选中,可以广播自己产生的区块,于是她想发起攻击:

  • Steal Coin

Alice 想要盗取比特币,根据 PayCoins 的原则,也就是需要创造一个交易,来消耗掉比特币,同时要被币的所有者签名表示认同。而只要签名机制是良好的,就无法实现这个攻击。

  • Denial of Service

Alice 想要攻击 Bob,故意不把跟 Bob 相关的交易放进区块。这并不是问题,因为其他的节点在之后发起区块时,Bob 的交易会被写入。

  • Double-spending attack

Alice 用比特币购买 Bob 的商品,Alice 广播交易之后,交易被诚实节点监听到,写入到区块中,并广播出来。

这个区块包含有 Alice 的签名,支付币给 Bob 公钥地址的信息和一个哈希值。这个哈希值指向这个币之前的一笔交易记录。

Decentralization-01

注意,两种哈希指针的概念:

一种哈希指针是指向前一個随机选中的节点提出的区块,形成区块链;

另一种哈希指针是指,区块中的多条交易记录,每条记录都包含哈希指针指向此币的前一笔交易。

至此,Bob 会认为交易完成。但如果下次随即被选中的节点正好是 Alice 的节点,那她不仅可以忽略掉这个区块,还可以产生包含新交易的区块,这个交易的包含指向前一笔交易的哈希指针和支付给 A’(这个地址其实也是 Alice 的)的信息,产生了双重支付攻击。

Decentralization-02

此时将有两个区块,哪一个区块被达成共识将决定于谁被纳入长期共识链(long-term consensus block chain)。

所有的诚实节点都只会延长最长的有效分支链。

这两条分支链在技术上都是有效的。实践中,节点通常是延长最先监听到的区块。但由于延迟或其他原因,是有可能选择包含双重支付的分支链进行延长的。这样,Bob 的支付便会失效。

从 Bob 来看这笔交易,他可以选择等待,在几个回合之后,如果包含此交易的区块被纳入了长期共识链,那他再确认收到比特币。在这种情况下,双重支付需要恶意节点连续被选中才能成功。

Decentralization-03

双重支付的成功率随着确认的数目的增加而指数级变小。一般认为 6 个确认之后,可以认为已经被纳入长期共识链。

密码学可以防止不正当交易,而双重支付的预防完全依靠的是绝大多数节点都诚实的情况下的共识。

2.4 奖励机制(incentive)和工作量证明(proof of work)

由于没有身份机制,无法实现惩罚恶意节点;另一方面,可以奖励创建区块的节点。实现前提:加密货币是有价值的。

区块奖励 (block reward)

  • 创建区块的节点可以在区块中添加一笔特殊的造币交易(special coin-creation transaction),类似于守财奴币中的造币。

  • 可以指定这笔交易的接收地址。

当然节点可以指定为自己的地址,相当于得到创建区块的报酬。

区块奖励每生成 210000 个区块后就会减半(大概为四年一次),当前为 12.5 BTC。

问题:恶意区块也可以造币,如何区别?虽然都可以造币,但是只有当区块被纳入长期共识链时才能被其他节点接受,造币才有意义。所以想要获取奖励,必须努力让其他区块延展自己创造的区块。

Decentralization-04

比特币数量上限:2100 万。

估算过程:等比数列,公比为 2。创世区块包含 50 BTC,而且已知 10 分钟左右产生一个区块,则第一个 4 年产生的比特币数量为:

50 * 4 * 365 * 24 * 60 / 10 = 10512000

即首项 a1 为 10512000。然后根据等比数列求和公式,当然要取极限:

10512000 / (1 - 1/2) = 21024000

比特币奖励最后年限: 2140 年。

比特别最小单位为聪(Satoshi,一亿分之一 BTC),当奖励值比 1 聪小时,就没有意义了。再根据通项公式第 n 项为:

50 * 0.5^(n-1)

第 n+1 项为:

50 * 0.5^n

小于 1 聪的临界值满足条件:

50 * 0.5^(n-1) > 10^-8 > 50 * 0.5^(n)

n 数值为 33 到 34 之间,说明大概在 2141 年和 2142 年之间。

这只是估算,真实情况复杂的多。

问题是:2140 年之后,比特币没有了这种奖励机制,如何保证安全呢?

交易费奖励 (transaction fees)

创建交易时可以让输出值略小于输入值,剩下的就是交易费,这个过程是自愿的。交易费会被当做奖励支付给区块创造者指定的地址。当前的交易基本都要包含交易费了。

遗留的问题:

  1. 如何随机地选取节点?

  2. 如果创建区块几乎没有成本,那所有人都会参与到这个过程中,怎么解决?

  3. 如何避免基于第 2 点的攻击?

工作量证明 (Proof of work)

假设有某种资源无法被垄断(独占),那我们可以依据这种资源的占有比例来进行随机节点的选取。

计算能力的比例:工作量证明(比特币)。

某种币的拥有比例:权益证明(某些加密货币)。

比特币使用哈希函数来实现工作量证明:某个随机数 + 前一个区块哈希值 + 交易列表得到的字符串进行哈希计算,输出值如果能符合我们约定的很小的区间内,那这个随机数便可以作为工作量证明。依据“谜题友好”特性,只能通过暴力测试来获取。很明显这要靠运气,也就是绑定资源稀缺性的随机性。

Decentralization-05

工作量证明的特点:

  1. 有一定的计算难度 (difficult to compute)

当前全球算力为 9211434 TH/s,每产生一个符合条件的随机值大概要计算十分钟,也就是说,需要尝试 9211434 T * 10 * 60 次哈希运算。普通的计算机很难达到这种算力,所以我们将其称为挖矿。挖矿的节点(或控制节点的人) ,我们称为矿工。 这里涉及到了算力的中心化。

  1. 参数化成本 (parameterizable cost)

我们希望可以调整上图的 target space 的概率来调整工作量证明的难度。比特币系统中,每产生 2016 个区块(大概 2 周左右),所有节点会自动重新计算 target space 相对于整个输出范围的比例,使得区块的产生时间间隔为 10 分钟。这就是上面 2100 万比特币和 2140 年结果估算中数值 10 的来历。10 分钟是比特币的约定,可以讨论,但至少是个固定的值。

这样,某人被选中称为下一个节点的概率取决于他控制了多少哈希算力(hash power)。只要以算力为权重的大多数矿工遵循比特币协议,那么攻击就无法发生。

试验符合条件的随机数,可以建立模型伯努利试验(Bernoulli trial),在同样的条件下重复地、相互独立地进行的一种随机试验。

全网节点一次一次的暴力去试验,可近似用泊松过程(Poisson process)表示。其概率密度函数表示为:

Decentralization-06

对于某以矿工来说,发现下一区块的平均时间可以表示为:

Decentralization-07

  1. 易于验证 (trivial to verify)

新产生的区块包含得到的随机数,其他节点很容易就可以进行验证。

2.5 总结

矿工经济 (Mining economics)

Decentralization-08

不确定性:

  • 硬件投资固定,但是电费却随时间变化。

  • 矿工发现区块的速度取决于其算力与全部算力的比例。

  • 比特币汇率。

  • 没有包含挖矿策略的影响。

区块链和分布式共识保证了系统的安全性

一个交易被放进了区块链,实际上指这笔交易被确认了多次,也就是包含那个区块的后面,又产生了多个区块

比特币自举特性 (bootstrapped)

区块链的安全性保证了比特币的价值,比特币处于高价位会刺激矿工挖矿,从而保证挖矿系统的稳定性,稳定性可以避免恶意节点的攻击,从而保证了其安全性。

Decentralization-09

51% 攻击 (51% attacker)

不能破解加密算法,也就无法偷币(Steal coins)。

压制某些交易。通过区块链,屏蔽地址的方式可以攻击。但是无法阻止交易在 P2P 网络中的传播。

无法改变区块奖励。

51% 攻击会摧毁大家对比特币系统的信心。