从央行官方解读看数字货币(基本概念1:区块链)

作者:水米田  时间:2019-11-02  分类:区块链知识教程  

要理解国家关于区块链和央行数字货币的相关政策,必须要明确区块链数字货币两个基本概念。不幸的是,网络上绝大部分文章都把两个混为一谈,鲜有专业性的解读。在本系列第一部分,我将尽量用通俗的语言解释两个概念。这篇文章是第一部分的第一节,着重介绍区块链

关键技术名词:区块链

从计算机科学的专业角度上看,区块链实际上是一种数据结构数据结构是计算机科学里面的一个术语,那么什么是数据结构呢(专业人士可以忽略本段)?在计算机里面,数据不是揉成一坨随便堆在硬盘或内存里,而是经过精心设计和安排的。在这里,我把数据比作图书馆里面的图书,硬盘或内存就是图书馆里面的书架,而计算机科学家或者程序员就是图书馆里的那个管理员,TA的职责就是把图书分门别类、按照“一定的规则”把这些书安排好,然后指挥实习生们把书放好以供读者快速高效的查阅图书。这个“一定的规则”,就是数据结构。我们设计数据结构的目的,是为了高效并安全的存放或调用数据,就好像图书管理员通常会把常用书放在门口,把不常用的书按照字母或者笔画排序放在库房,再把机密图书放在加了锁的库房并配上警卫等等。沿用这种思想,我们就可以设计出一个优秀的数据结构来存放数据了。

区块链就是一种优秀的数据结构。该数据结构的示意图如下(为了大家在手机上阅读方便,我用竖排版来呈现区块链):

  

区块链通常有一个初始区块(或者创世区块,英文为Genesis Block),这个区块的数据一般是一些随机数据,或者是区块链创造者自己想加入的数据。这个初始区块一般被标记为【区块0】。当这个区块被创造以后,我们会为这个区块的所有数据做一个求解Hash值(哈希值)的操作,并把这个Hash值放在下一个区块(即【区块1】)当中。

在这里,我要解释一下Hash值是怎么回事。我们可以把【求解Hash值】这个动作看作一个特殊的函数,这个特殊的函数通常能够将一坨无比复杂的数据转换成一个符合某种规则(比如固定长度、值域)的值。注意:根据函数的定义,某一个输入有且只能有一个输出,因而对于某一坨数据,只要这个数据没有被篡改过,那么Hash出来的值是唯一的。

在区块链中,大家通常采用一个叫SHA的Hash函数。SHA有好几种类型,这里我以SHA-256为例:这个函数能将任意数据转换成一个256位的二进制数。大家有兴趣可以上这个网站玩一玩SHA-256这个Hash函数:

http://www.ttmd5.com/hash.phptype=9

注意:网站给出的Hash值已经将二进制转换为16进制。

SHA-256这类Hash函数的优点在于以下三点:

1. 不可逆性。给你一个经过SHA-256计算出来的Hash值,除非你明确知道原始数据是啥,否则很难去构造另一个原始数据去得到同样的Hash值。

2. 固定长度。无论输入是啥,输出永远是256位二进制数。

3. 多变性。即使两个原始数据只有一个二进制位不同,计算出的两个Hash值却能差十万八千里。大家有兴趣可以用上面那个链接尝试一下,替换一句话的某一字母,计算出的Hash值就已经完全不一样了,无法找到规律。

现在我们回到区块链这个数据结构。我们之前已经说过,初始区块的数据会被求一个Hash值,然后放在【区块1】中。之后,我们就会把新数据塞入【区块1】中,直到这个区块被塞满。接着,我们对整个【区块1】求一个Hash值,并把新的Hash值放到【区块2】中。这里要特别注意:除了初始区块,每次我们求Hash值的时候,是把整个当前区块的数据都求Hash值,这里Hash函数的原始数据不仅仅包含当前区块的存储数据,也包含前一个区块的Hash值。

大家就要问了,为毛区块链要这么安排啊?前面我们提到,SHA-256这类Hash函数的特点是:如果输入有一点扰动,输出就会变化很大。我们假设某一个黑客想篡改【区块1】的某个数据,然后TA就发现:如果TA不去把【区块2】里面的那个【区块1的Hash值】给改掉,某一天数据库管理员过来查账(区块链系统会定期查账),计算了一下被篡改的【区块1】的Hash值,然后和【区块2】里面的那个Hash值对比一下,就会发现两个Hash值是不同的,这样管理员马上就可以看出【区块1】的数据被篡改了。于是乎,这个黑客需要重新计算【被篡改的区块1】的Hash值,然后用这个新值去替换【区块2】里面对应的Hash值。然后呢,这个黑客就又悲催的发现:TA又必须要去篡改【区块3】里面的那个Hash值,是因为:

这个Hash值的输入是旧的【区块2】的内容:【区块2】的存储数据 【原始区块1】的Hash值;而目前新【区块2】里的数据变成了:【区块2】的存储数据 【被篡改的区块1】的Hash值。两者的区别如下图所示:

  


虽然这个黑客木有篡改【区块2】的存储数据,而且在现实生活中,【区块2】的存储数据远远比Hash值要长很多,但由于【区块2】里面的Hash值变了,这一点小小的扰动足够让SHA-256给【区块2】计算出一个完全不同的Hash值,于是某一天数据库管理员来查账的时候又会发现问题——当前【区块2】的Hash值与【区块3】里面存储的那个Hash值对不上。就这样,这个黑客必须要把这个区块链中所有的【区块1】后面的区块数据都要改掉一遍,直到最后一个区块,这样才不会留下痕迹。
想必大家已经看出,如果是某一个区块链很大,而且存储很分散,没准还在不同的系统里面,那这个黑客的工作量是很大的,会留下大量的痕迹,很容易就暴露的自己的行踪。因而,仅仅一个原始的区块链,就可以提供比传统数据库高得多的安全性。另外,我们可以把区块链存储在【一次性写入存储器】(即【只读存储器】)里面,这样数据的可靠性将大大增强。
那么下一个问题来了,如何恢复数据呢?通常而言,一个数据库系统都会有好几个备份。同样的,一条区块链也会有好几个备份,一个坏掉了可以去找备份。而且由于Hash值的存在,定位被修改过的区块并不是难事(具体操作大家可以想想,不明白没关系,不影响下面阅读)。
故事还没结束。大家如果看过马特·达蒙的纪录片《监守自盗》,就知道一个系统如果内部人自己乱搞,外人是根本看不出来系统是如何造假的。那么问题来了:假如你在某个保险机构买了一个保险,然后保险机构说系统故障,把你的资本金从$100000变成了$10,你咋说理啊?这么大的利润,其实足够让保险机构有动力把自己家的数据库(包括备份)全改了一遍,反正又不花几个电费钱。有人说:我有合同。的确,目前这类问题是用合同来约束。但是,不是所有的交易都有一个合理、清晰、不需要监管和巨额律师费的合同,更何况很多情况是没法弄合同的,你会去为了一个页游的装备和游戏公司互撕吗,或者因为删帖和扎克伯格互撕(床破表示很喜欢)?
因此,基于区块链,并结合分布式系统里面的一些技术,大家发明出来了一个新的概念,叫分布式记账系统(Distributed Ledger)。在这个系统中,和某一坨数据有关的各方都会拥有某一条区块链的备份。这些备份里的数据被分为【有效部分】、【无效部分】和【待定部分】。整个系统的各路参与者会根据一个类似【民主投票】的程序(计算机术语把这种程序叫算法)来决定这些备份的哪一部分是有效、无效还是待定的。这种算法,被称作为共识算法(consensus protocol)。
共识算法不是新鲜玩意,这东西被学术界研究了半个多世纪,原先的主要目的是解决数据一致性的问题。比如说,一个火箭有4个温度传感器,其中某几个可能坏掉了,度数不准,那我们到底采集哪几个传感器的值作为真实值呢?要注意到,这类应用需要绝对保真的数据,而不是简单弄个平均数了事,因为某一个传感器的值可能与真实值差距过大,以至于平均值已经毫无意义了。共识算法在一开始设计的时候并没有考虑到大规模并发的问题,通常系统内只有不到100个节点,所以目前传统的共识算法效率都不是很高,没法应用到上亿个用户这一级别的系统中。这个问题直到现在都没有被学术界或者工业界解决。

这个问题直到现在都没有被学术界或者工业界解决!!!

这个问题直到现在都没有被学术界或者工业界解决!!!

这个问题直到现在都没有被学术界或者工业界解决!!!

到此为止,大家可能就很好奇了,目前主流的数字货币和以上的技术到底有啥关系呢?请阅读下一篇文章。

版权信息
作者:水米田
来源:分布式系统理论与应用

关于我们

联系我们

作者进驻

公众号

Copyright © 2013 比特巴 www.btb8.com
只为您提供客观公正有用的比特币 区块链 加密数字货币新闻、技术教程、行情分析、行业人物资讯
手机版