区块链技术与概念通俗介绍

一、区块链的含义

区块链现在在金融行业中是一个非常热门的概念,但是当它刚出现时并没有什么人知道它。2008年,中本聪发表了一篇论文,名字叫《比特币:一种点对点的电子现金系统》,在这篇论文里他第一次提出了一种去中心化的数字货币,也就是比特币,比特币是人类历史上第一个不需要依赖任何第三方中介机构就可以实现转账和交易的货币。区块链正是比特币的一种底层技术,正因为有了区块链这种技术,比特币才成为可能。后来因为比特币逐渐发展壮大,人们发现比特币运行的非常好,才逐渐关注到它的这种底层技术,发现它不仅可以应用到比特币,还可以应用到很多其它的地方,之后我们就用区域链来代指这种技术。

区块链是一种不依赖第三方、通过自身分布式节点就可以进行数据的存储、验证、传递和交流的一种去中心化的数据库。我们可以把它理解为一个大型的分布式账本,它没有一个中心的管理员,每个人都可以在这个账本上记账,通过一些特殊的技术确保每个人记的账都是正确的,而且账本之间可以保持同步和一致。

为了理解区块链,我们需要理解一些基本的概念:

二、哈希函数

第一个概念是哈希函数。哈希函数也叫散列函数,它是计算机科学中经常会碰到的概念,也是区块链技术的一个基础。它有四个特性:第一个特性是它可以把任意长度的输入变换成一个固定长度的输出,比如在常见的SHA256算法中,它可以把任意长度的输入转化成一个256位的二进制数,无论这个输入是一个单词,还是一个10个G的电影,通过哈希函数转化后,都会变成一个固定长度的字符串。第二个特性是对于不同的输入X,它的输出Y有极大的概率是不相同的,因为我们把一个任意长的字符串转化成一个有限长的字符串,所以理论上会出现两个不同的输入会对应一个相同的输出,但是根据哈希函数的算法,这种可能性非常低,可以认为几乎不可能,这种特性我们称为碰撞阻力,所以当我们看到两个数据的哈希值是不同的,我们可以认为原来的数据也是不同的。第三个特性是输入只要发生微小的变化,输出也会发生极大的变化,比如在原来的字符串加一个点都会导致输出完全不一样。第四个特性是哈希函数正向算容易,反向算极为困难,也就是当我们知道输入的时候可以非常快的算出输出,但是当我们知道输出的时候,我们很难算出来输入是什么,唯一的方法就是就是用不同的输入去试,只到试出来我们想要的结果。

三、区块

第二个概念是区块的概念。所谓区块是对一段时间内形成的数据进行打包,并对这些包打上一些唯一的标签。比如说,对于比特币,就会每10分钟对所有的交易数据进行打包,每个包的大小大约为1M,可以存储大约4000条交易数据。根据区块链设计的不同,每个区块的打包的时间间隔、大小以及存储的内容都会有所不同,不过一般都包含两个方面,分别是区块头和区块体,区块体就是这个区块想要记录的数据,在比特币中就是交易的数据,但也可以是其它任何数据;区块头是一些标示这个区块的信息,包含创建区块的时间、上一个区块的哈希值,以及这个区块本身的哈希值等等。这里我们可以看到,通过在区块头中包含上一个区块的哈希值,我们就可以把每个区块按照创建的先后顺序链接在一起,这也就是区块链这个名称的由来。假如我现在想要修改某个区块的内容,它就会导致这个区块的哈希值的变化,进而导致之后所有区块的哈希值的变化,这个修改就可以被轻易的发现。这也就是为什么我们会说区块链中的数据一旦写入就不能够修改的原因。 IMG

四、共识算法

第三个概念叫共识算法。前面我们说可以把区块链理解为一个分布式的账本,每个加入的人都可以记账,但是大家都记账,就存在一个以谁的账本为准的问题,这个决定以谁的账本为准,并且在所有参与者中形成共识的算法就叫做共识算法。常见的共识算法有工作量证明(POW)、权益证明(POS)等等,这里我只简单介绍下工作量证明这个共识算法,这也是比特币中使用的共识算法。

当我们形成了某些数据,就需要把这些数据广播到整个区块链中,同时我们也会接受其它人广播出来的数据,每隔一段时间我们要把这些数据打包形成区块,但是同时也有其它人在打包同样的数据,为了尽可能避免多个人同时打包了同样的数据,我们要求每个人在打包数据的时候需要解一个非常困难的数学题。这个数学题就是要求以区块头和区块体的信息为输入算出来的哈希值必须满足特定的条件,比如说要求哈希值的前多少位必须是零。当我们打包数据形成区块时,在计算区块的哈希值时我们需要在输入中加入一个随机数,这样通过改变随机数,就可以改变区块的哈希值。比如说最开始选的随机数是1,算出来的哈希值不满足要求,然后我们就把这个随机数加一再试一下,仍然不满足要求,这样的不断重复下去,直到得到一个满足要求的哈希值,整个过程才结束,你就可以获得这个区块的记账权,得到一定的奖励,然后你就可以把这个区块广播出去,其它人就会放弃记账,以你记的这个账为准,形成了共识。上面这个过程我们俗称挖矿,很多比特币玩家会购买昂贵的设备来挖矿,就是为了争夺记账权,获得丰厚的奖励。 IMG

结合上面三个概念,我们就可以明白为什么区块链数据一旦写入就不能修改了。假如我现在想要修改一个区块中的数据,这就会导致这个区块以及之后所有区块地哈希值的变化,变化后的哈希值不满足工作量证明的要求,所以是无效的。假设我的设备有特别强的计算能力,我们把这个区块以及之后所有区块重新进行挖矿,让他们变成有效的。但是问题在于,整个账本是分布式,其它人那里都有账本的备份,我重新挖出来的区块和它们保存的区块的哈希值也不一致,所以我的修改仍然是无效的。除非我拥有整个区块链网络超过51%的计算能力,从而能够修改超过一半的区块链,这种情况下我的修改才能通过。但是拥有超过51%的算力是非常困难的,而且加入区块链网络的人越多,就会越困难。

五、数字签名

第四个概念是数字签名。它的基本原理并不复杂,假设我现在一份文档,我想把它通过网络发送给别人,发送的过程中要保证这份文档的内容不被其他人看到,不会被别人篡改,而且接受文档的人需要知道这份文档确实是我发送的。这里需要用到我们前面进过的哈希函数和非对称加密的技术,我们首先用我们的私钥对文档进行加密,同时使用哈希函数求出这个文档的哈希值,用私钥对这个哈希值加密,并且把这个加密后的哈希值附到加密后的文档上。然后我们就可以通过网络发送这个文件,因为文档和哈希值都是加密的,网络上的其它人就算截获了这个文件,也无法知道其中的内容。当接受者收到这个文件后,他就可以使用和我们的私钥相对应的公钥对这份文档进行解密,同时求出它的哈希值,然后用公钥对我们附上的哈希值进行解密,如果解密后的这个哈希值和使用文档算出来的哈希值是一样的,接受者就可以确认这份文档确实是我发送的,同时这份文档没有被篡改,因为如果它被篡改了,哪怕只改了一个标点符号,它的哈希值也会是完全不同的,也就和原来的哈希值对不上了。 IMG

通过上面的介绍,我们可以发现数字签名和现实中的签名类似,它也有三个功能:第一个功能是确认消息发送者的身份,这就类似我们在合同上盖章,只有我有这个章,所以这个合同是经过我同意的。第二个功能是保证信息的完整性,防止他人篡改,这就类似于我们在合同上盖骑缝章,如果有人修改合同,我们就会发现骑缝章有问题,数字签名也一样,如果有人修改消息,我们也会发现。数字签名的第三个功能是可以对我们传送的消息进行加密,防止其他人的窃听。在区块链中,每个参与者都有一个数字签名,所以他人无法冒充他的身份,也无法修改他发出来的信息,如果一个信息经过了数字签名,我们就可以确认这个消息确实他发出来的,他也不能否认。比如,在比特币中,A向B付了一个比特币,这个消息就会经过A的数字签名广播到整个比特币网络中,其它人看到A的数字签名,就知道这个转账消息确实是A发出来的,A事后也不可以抵赖说他没有付这个比特币。

六、智能合约

第五个概念是智能合约。智能合约是写入到区块链的一种合约,它实际只是一段代码,约定在满足相应的执行条件时就会自动执行。因为区块链不可修改,不可抵赖的特性,所以写入到区块链上的智能合约也是不可修改,不可抵赖的。智能合约的加入,确保了贸易行为中交易双方或多方不会出现违约的情况,确保各方能够如约履行义务,使交易顺利可靠的进行,这提高了交易双方的信任度和交易效率,并有效的管控履约的风险。 IMG