比特币并不是完全使用纯技术手段,而是将技术与激励机制相结合做到了去中心化。
通盘认识去中心化。
比特币的运行机制。
为什么比特币确实是安全的。
1、中心化和去中心化
互联网其实就是一个著名的去中心化系统。 电子邮件通过SMTP(Simple Mail Transfer Protocol)去中心化的系统。IM、短信等这些通信方式往往是一种混合模式,其实并没有一种系统是完全的中心化或完全的去中心化的。虽然比特币系统是区中心化的但是比特币交易所、钱包软件及用户管理比特币软件,可以是中心化的,也可以是去中心化的。
有了以上的考虑,我们把比特币如何做到去中心化这个问题分解为下面5和问题:
谁在维护交易账本?
谁有权利批准哪个交易是正当有效的?
谁在制造新的比特币?
谁在制定系统变化的规则?
比特币是如何取得交易货币的价值的?
比特币从不同方面的不同点涉及了中心化和去中心化。点对点的网络是最接近去中心化的系统。任何一个人都可以运行一个比特币节点,只需要下载一个比特币客户端; 从技术上讲,bitcoin mining(比特币挖矿)挖矿过程也是向所有人开放的,但需要投入很多资金,所以挖矿具有非常高的中心化;比特币运行节点的更新。
2、分布式共识 distributed consensus
建立一个分布式的电子现金系统的关键技术问题就是要达成分布式共识 distributed consensus 。即去中心化。
分布式共识协议
在一个有n个节点的系统中,每个节点都有一个输入值,其中一些节点具有故障,甚至是恶意的。一个分布式共识协议有一下两个属性:
输入值得终止必须经所有诚实节点来确定。
这个输入值必须油诚实节点来生成。
分布式共识在比特币bitcoin中的含义:我们需要记住比特币是点对点的系统,网络上所有节点的交易行为是广播的。
节点到底达成什么样的共识?
网络中有各种各样的用户在想网络广播交易,节点必须对哪些交易可以进行广播和交易发生的次序达成共识,以此系统将形成一个唯一的全球交易总账。在bitcoin中也是将每个区块进行共识处理。
在任何时点,所有在p2p网络上的节点都有包含一系列区块的总账本,每个区块中都包含了已经被所有节点达成共识的交易清单。除此之外,每个节点还有一堆没有被打包进入进入区块的交易,就是那些网络节点已经被通知、交易已经发生,但还没有被写入区块的交易。网络节点对于这些交易还没有达成共识、所以每个节点都有一个略有差异、尚待确认的交易池。
所有节点是如何对一个区块达成共识的呢?
方法一:每隔十分钟,每个节点都提议自己的未被认可的交易成为以达成共识的区块链后面的下一个区块,然后执行共识的协议,每个节点把自己的提议作为输入。但不可避免有写节点是恶意的,存心把不当的交易放进区块,其他节点则是诚实的。如果共识协议能够顺利完成,一个有效的区块会被作为输出。
方法一和bitcoin不完全一样,以上的做法存在的技术问题:
达成共识一般是个难题,因为有些节点会死机或根本就是恶意的节点。
就bitcoin而言,p2p网络是不完美的,并不是所有节点两两相连。
由于交易信息是分布在互联网上的,信息的传递有可能会被延迟
不可能性结论
全球时间上的不统一给共识协议算法带来了很多的限制,有许多关于达成分布式共识具备不可能性结论已经被证实。一个经典的案例“拜占庭将军问题”(Byzantins Generals Problem).
还有一个关于不可能性的结论,是著名的“Fischer-Lynch-Paterson ”不可能性结果。指的是在一定条件下,甚至在只有一个缺陷的过程中,达成共识都是不可能的。比较著名的就是Paxos协议。Paxos能做大不产生不一致的结果。但所做的妥协是死机卡住,从而无法继续运行。
打破传统上的假设
不可能性结论都是在一些特定的情况下成立。bincoin的情况远比理论上告诉我们的要好的多。 bitcoin到底打破了经典模型里的哪些假设?
bitcoin引入了奖励的概念,这对分布式共识来说是个全新的理念。人们为金钱奖励而变得诚实。所以bitcoin并没有真正解决分布式共识的问题,只在bitcoin中解决了这个问题。
bitcoin体系包含随机性这个概念。共识算法很大程度上依赖于随机性。共识是通过一段较长时间而达成。
3、使用区块链达成没有身份的共识
下面探讨的是bitcoin共识算法的技术细节。
bitcoin身份缺失的原因:
p2p网络中没有一个中央的权威机构来发放身份。
化名制pseudonymity 也是bitcoin想达到的一个目标。虽然bitcoin还不能保证真正的匿名,即一个用户做的交易是有办法被最终追踪到的,但bitcoin并没有强迫用户用真实身份加入这是bitcoin的重要特性及核心理念。
隐性共识 implicit consensus
implicit consensus - 对随意节点选择的假设。 implicit consensus 隐性共识解决的问题就是当随机一个恶意节点,我们的应对办法就是implicit consensus,其他节点可以通过隐性的接受或是拒绝随机出来的节点。如果拒绝他们就选择前一个曾经接受的区块。
这个算法的简化假设是,可以随意选择一个节点,这些节点不会受到女巫攻击的影响。
新的交易被广播到所有node上。
每个节点都将新的交易放到一个区块。
在每个回合,一个随机的节点可以广播他的区块
其他节点可以选择接受这个区块,前提是正当交易(即有真的签名)
节点们可以把以上区块的哈希放进自己的区块中,以此表示他们对那个新区块的认可。
窃取bitcoin
由于盗取者要伪造bitcoin拥有者的数字签名,如果数字签名是安全的,他就无法办到
拒绝服务攻击
诚实节点发起区块---->交易记录就会放进区块
双重支付攻击
发起交易--->向整个网络广播这笔交易--->某个诚实节点制造下一个区块,把这笔交易放到区块中。 交易的数据结构包含 数字签名、公钥(地址)的指令和一个哈希值。哈希值是
一个指针,指向前一笔交易的输出并且是以被共识连的某个之前的区块所认可的交易。
我们如何知道是否为双重支付攻击?取决于最后那个区块会被纳入长期的共识链。诚实的节点会遵循在最长有效分支后面延展这一规则,选择下一个区块的节点可以决定建立在其中一个区块上。这个选择就决定了双重支付攻击的成功与否。双重支付攻击的概率将随着确认的数目的增加而指数级降低。
总结,防止不正当的交易完全是用密码学的方法。当这些方法被共识所加强,即一个节点如果想放进一个密码学上不正当的交易,这个交易不会被纳入长期共识链的唯一原因是绝大多数的节点是诚实的。另外,防止双重支付攻击完全依赖于共识,密码学是不起作用。从密码学的角度来看,共识可以决定哪个被放进长期共识链。最后你无法100%保证你感兴趣的交易被放进了长期共识链,但指数级概率保证了不错的结果,6笔交易后,实际你就没有犯错的可能了
4、奖励机制于工作量证明
bitcoin的区中心化一部分通过技术手段,一部分通过激励设计来实现。
区块奖励
bitcoin里有两种奖励机制:
区块奖励。创建区块的节点可以在区块中加入一笔特别的交--造币交易,节点指定这笔交易的接收地址。节点通常都会选择一个属于字节的地址。你可以把这视为节点在共识链上进行创建区块服务的报酬。
交易费。任何交易的制造者都可以选择让交易输出值比输入值小,第一个创建区块把交易放进区块链的人可以取得这个差额。作为交易费。用户需要交易费来保证交易的质量。
挖矿与工作量证明
工作量证明proof of work 的核心理念是把随机选取节点改为根据节点占有某种资源的比例来选取节点,我们希望这种资源是没有人可以垄断的。如果这个资源是计算力 那我们称之为工作量证明系统。或者这个资源可以是某种币的拥有量,我们称之为权益证明proof of stake。
工作量证明proof of work -- 根据计算能力来选择节点到底是什么意思。
允许节点用他们的计算能力来相互竞争导致的结果是:计算能里的比例决定了被动选中的概率。工作量证明还有一种理解方式:把制造新省份的难度适当提高了。这对女巫的攻击是有抑制作用的。
bitcoin是用哈希函数解谜来证明工作量的。任何提议-->创建区块-->制造下一块,都要找到一个临时随机数,当你把临时随机数、前序哈希值、交易列表、组成一整串字符,然后用哈希计算输出值,这个输出值正好在一个相对于这个哈希函数所有可能的输出中很小的目标区间内。这个区块还包含了指向前一个区块的哈希指针。临时随机数是为了适度提高发现符合要求的临时随机数的难度,即包含临时随机数在内的整个区块的哈希值组合在一起,输出结果是一种特定形式。符合谜题友好的特性。那唯一解出哈希谜题的办法就是去是足够多的临时随机数,知道成功。
哈希谜题的三特性:
有一定难度
可参数化成本
易于证实