区块链算是金融科技中的核心技术,其应用有可能将来与每个人息息相关。 我参考此领域相关著作,将重点内容整理出来。提供一个关于区块链、比特币的认识框架,希望能有助于读者对相关概念的理解。
一、比特币技术基础
所有货币都需要通过某种方式控制供给,并需要采用各种安全措施以防止欺骗行为发生。对于法定货币,中央银行控制货币供给,并在实体货币上加上防伪标识,这些安全措施提高了攻击货币的难度,但并非不可能伪造。最终,执法部门仍需要介入,以防止货币系统规则遭到破坏。
数字货币与法定货币的不同在于,其安全规则需要完全通过技术手段实现,而非依赖于中央银行。
数字货币着力采用密码技术。我们不但可以利用密码学防止对系统的干扰,并且能够避免混淆,甚至能够将新货币创造规则编码到数学协议中。密码学的理论比较复杂,幸运的是,比特币只运用了密码学中少量较为浅显的一些理论。主要是哈希算法(Hash)和数字签名(digital signature)技术,这两个基本概念对构建一个数字货币系统非常关键。
1.1哈希指针
哈希指针是一个指向数据存储位置及其哈希值的指针。这里的哈希指的就是哈希函数,是一个数学函数。哈希指针不但可以告诉你数据存储的位置,还可以让你验证数据没有被篡改过。
我们通过哈希指针构建一个链表,并把这个数据结构称为区块链(block chain)。在区块链中,用哈希指针表示上一个区块的指针。因此,每个区块不仅能告诉我们上一个区块的值在哪里,还能够让我们验证这个值没有改变。
区块链具有防篡改特性,如果有人篡改区块中的数据,我们可以检测到。具体来说,对手的目的是让只记得区块链头部哈希指针的人无法检测到篡改行为。为了达到此目的,对手会改变某区块K的数据。既然数据已经被改变,区块K+1存储的哈希指针(即整个区块K的哈希值)将不会匹配。我们能够检测到区块K中的新数据以及区块K+1中的哈希指针的不一致性。当然,对手可以继续尝试,并通过篡改下一个区块的哈希值来掩盖这次篡改。这样一直做下去,直到链表的头部,只要我们将链表头部的哈希指针存储在对手无法改动的地方,对手将不能做到不被检测的前提下,篡改任何区块。
这样一来,我们便知道,仅通过记住一个哈希指针,我们就基本记住了整个链表的防篡改哈希值。
1.2数字签名
数字签名被认为是对纸上手写签名的数字模拟。我们对数字签名有两个特性要求:
1、只有你可以制作你自己的签名,但任何看到它的人都可以验证其有效性;
2、我们希望签名只与某一特定文件发生联系,因此该签名不能用于表明你同意或支持另一份不同的文件。
数字签名方案由以下三个算法构成(为了后面解释的方便,这部分很难略过去):
1、(sk, pk):=generateKeys (keysize) generateKeys方法把keysize作为输入,来产生一对公匙和私匙。私匙被安全保存,并用来签名一段消息;公匙是人人都可以找到的,拿到它,就可以用来验证你的签名。
2、Sig:=sign(sk, message)签名过程是通过把一段消息和私匙作为输入,输出为签名。
3、isValid:=verify (pk,message,sig)验证过程是通过把一段消息和签名与公匙作为输入,如果返回结果是真,证明签名属实;反之,签名为假。
我们要求一下两个性质有效:
1、有效签名可以通过验证,即:
Verify (pk, message, sign(sk, message)) == true
2、签名不可伪造。
其中,generateKeys和sign都采用随机算法。generateKeys需要为不同的人生成不同的密匙。而verify则需要是固定的。这样一来,成功伪造签名信息的概率非常小——小到我们可以假设在实践中从不会发生,也就是说签名方案不可伪造。
在比特币系统里面,公匙就是你的身份。你可以随时制定新的身份——通过数字签名方案中的generateKeys程序,生成新的密匙对:sk和pk。pk是你可以使用的新的公共身份,sk是相应的密匙,只有你自己知道并可以让你代表身份为pk发声。在实践中,由于pk很大,你可以使用pk的哈希即H(pk)作为你的身份。为了验证消息是来自你的身份,人们需要验证:(1)你的身份确是是pk的哈希;(2)信息能通过公匙pk验证。
由此,通过公匙和私匙体系,我们引入了去中心化身份管理的理念。你可以自己作为用户注册,而无须到一个中央机构注册为系统用户。事实上,这就是比特币对待身份的方式。这些身份在比特币语言中被称为地址。
二、比特币如何做到去中心化
比特币并不是完全通过纯技术手段,而是将技术手段与一种明智的激励机制相结合,做到了去中心化。
比特币是个点对点系统,任何人都可以运行一个比特币节点,用户只需要上网下载一个比特币客户端,就可以在其个人电脑上运行一个节点,现在全球有成千上万个这样的节点。当A向B付款的时候,他其实是在向比特币网络上所有的节点广播其交易行为。
在任何时候,所有在比特币网络上的节点都有包含一系列区块的总账本,每个区块中都包含了已经被所有节点达成共识的交易清单。除此之外,每个节点还有一堆没用被打包进入区块的交易,就是那些网络节点已经被通知、交易已经发生,但还没有被写入区块的交易。网络节点对于这些交易还没有达成共识,所以每个节点都有一个略有差异、尚待确认的交易池。
那么,所有的节点是如何对一个区块达成共识的呢?首先来看一下比特币共识算法的简化版:
1、新的交易被广播到所有节点上。
2、每个节点都将新的交易放进一个区块。
3、在每个回合,一个随机节点可以广播它的区块。
4、其他节点可以选择接受这个区块,前提是如果区块里的交易都是正确的(真的有签名)。
5、节点们可以把以上区块的哈希值放进自己的区块里,以此来表示它们对于新区块的认可。
为了避免双重支付(同一笔比特币参与两笔交易),诚实节点会选择延展更长的区块链,称为长期共识链。
2.1奖励机制和工作量证明
前面提到过,比特币去中心化一部分依靠技术手段,另一部分是通过激励设计来实现的,现在来谈谈这个激励设计。
1、区块奖励
比特币里有两种不同的奖励机制。其中一个是区块奖励。根据比特币的规则,创建区块的节点可以在这个区块中加入一笔特别的交易,也就是造币交易,节点可以指定这笔交易的接收地址,当然,节点通常会选择一个属于自己的地址。这可以看做对节点在共识链上进行创建区块服务的奖励。
比特币存在的最初4年,区块奖励为50个比特币,每生成210000个区块,奖励的比特币数就会减半。注意,这是比特币被允许创造出来的唯一途径,按照现在奖励发放的速度,到了2140年比特币区块奖励就发完了,比特币的最终数量是2100万。
记住,奖励只有当区块最终被纳入长期共识链才会实现。因为造币交易和其他每一笔交易一样,只有当它最终被纳入共识链,才会被其他节点接受。这个设计激励所有节点遵循去延展最长支链的规则。这就是比特币的第一个奖励机制。
2、交易费
比特币的第二个奖励机制称为交易费。任何交易的制造者可以选择让交易的输出值比输入值小。第一个创建区块把交易放进区块链的人可以取得这个差额,作为交易费,可以预见,随着区块奖励逐渐发完,交易费会变得越来越重要,几乎是必须的,因为用户需要通过交易费来保障合理的服务质量。
3、挖矿与工作量证明
前面提到过,每个回合由随机节点广播其区块,现在把随机改为根据节点占有某种资源的比例来选取节点,这种资源是没有人可以垄断的,比如说,这个资源是计算能力,那我们称之为工作量证明系统。
为了更好地理解根据计算能力来选择节点到底是什么意思。换个角度,就是允许节点用它们的计算能力来互相竞争,导致的结果是计算能力的比例决定了节点被选中的概率。
比特币是用哈希函数解谜来证明工作量。任何一个提议并创建区块的节点想要制造下一个区块,这个节点必须要找到一个数,我们将其称作临时随机数,当你把这个临时随机数、前面区块的哈希值以及要填进这个区块的交易列表连接起来,组成一整串字符,然后用哈希函数计算这一串字符的输出值,这个输出值要正好落在一个相对于这个哈希函数所有可能的输出值中很小的目标区间内,用公式表示,临时随机数要满足如下不等式:
H (nonce,prev_hash(tx,tx,..))
唯一解出哈希谜题的办法就是去试足够多的临时随机数,直到成功为止。如果目标区域值是所有可能输出值的1%,那你大概要试100次才能成功。当然,实际情况,比1%要小得多。
哈希谜题有三个重要的特性。第一个特性是有一定的难度,而且这个难度是随时间而改变的。2014年,产生一个区块需要做的运算量,超过了商业化笔记本电脑可能的计算范畴。因此,只有一些节点还在不厌其烦地竞争造块。这个不停尝试解哈希谜题的过程,就是我们听说的比特币挖矿,参与挖矿的节点被称为矿工。
第二个特性,,每产生2016个区块之后,所有节点都会自动重新计算目标区域相对于输出范围的比例大小,使得后续的区块产生的时间间隔约为10分钟,2016个区块大概需要两个星期。这就意味着,如果你是个矿工,你花费了一定的成本投资硬件来做比特币挖矿。随着越来越多的矿工加入这个行业,或者是他们部署了运算越来越快的硬件设备。那么,两个星期内被找到的区块要比预期多,然后,节点就会自动调整目标区域使你找到一个区块需要做的工作量增加。这就导致了这样一个结果:任何一个矿工,找到下一个区块的概率,就相当于他控制的计算力占整个全球计算力的比例。
第三个特性,证实一个节点正确地计算了工作量很容易。临时随机数必须作为区块的一部分公布出来,这样其他的节点只需要将其代入前面的公式,证明它的输出值确实在目标区域内。这是个相当重要的特性,因为这样使我们摆脱了中心化管理,我们不需要一个中央权威机构来证明矿工正确地完成了工作。
值得注意的是,如果存在一个在比特币网络里实际掌握了绝大部分挖矿计算能力的51%攻击者,那么人们会对比特币失去信心,比特币汇率会重挫,不过,目前全球所有比特币节点算力之和已经远远超过了所有超级计算机算力之和。也就是说,不可能出现单一节点能控制51%的哈希算力。
---------------------------------
部分图片来自于网上,侵删
本文首于微信公众号:风吹幡动