美文网首页区块链研习社区块链
小白区块链笔记001:初识区块链

小白区块链笔记001:初识区块链

作者: 来吃布丁 | 来源:发表于2019-02-28 22:36 被阅读1次

区块链在近几年愈演愈烈,不断会听到各种关于区块链将如何“颠覆xxx”、“重构xxx”,不免让人有种“要变天了”的感觉。可到底世界该如何改变,为什么区块链能改变,会变成什么样?大多数人可能难免语塞。

作为普通小人物,可以选择事不关己,扭头离开。但如果你这件事抱有好奇心,想安静的做一个吃瓜群众,在各路意见领袖描绘的蓝图中不迷路、不掉队,既要吃得开心,又不会吃过量。作为还没入门的吃瓜积极分子,我会一边吃瓜,一边分享下我学习吃瓜的心得,如能得到前辈乃至大神的指点,必感激涕零。

那么第一个问题就来了,到底这个大瓜——“区块链”是什么?

区块链(blockchain),字面理解,就是一个个区块,组成的链条。那区块又是什么?区块就是我们要记录的数据,把数据分成“块”,再用“链”将这些“块”链接起来,就是对区块链最简单地理解。

区块链简单结构

接下来,有了新问题,用什么把这些“块”链接起来?为什么要“链”起来?要理解这两个问题,有一个概念一定是绕不过去的——哈希函数(Hash Function)。名字直接音译于英文,也可称为散列函数,初次听说会因不知其所云而产生敬畏,但好在作为数学基础不好的群众,我们不需要去理解各种哈希函数的数学表达,我们只需要理解其函数特点即可。

一步一步来,先回顾下初中数学一些基本的函数,如幂函数y=x2。当x=2时,y=4,幂函数y=x3,当x=2时,y=8。再比如,一个简单的分段函数:

分段函数

当x取值大于0时,y的值为1,当x取值小于或等于0时,y的值为0。

简单回顾了一下初中数学以后,现在我们回到哈希函数,哈希函数也是一类函数,只不过比以往学过的函数更复杂一点。哈希函数特点一是,把任意输入值转换为固定长度的输出值。举一个不恰当但易于理解的例子,如前面的分段函数,对于任何大于零的输入者,得到输出值为1,对于任何小于等于零的输入值,其输出值为0,这就是固定长度输出,输出长度为1位。而常用哈希函数的输出值常见的有128位,256位等,这里的位指的是二级制中的位,每一位由0或1表示。

哈希函数有很多种,区块链中使用的哈希函数为密码学哈希函数,这类哈希函数能满足区块链的安全需求(以下统称为哈希函数)。哈希函数的特点二是抗碰撞性碰撞就是指两个不同的输入,产生了相同的输出。抗碰撞性就是找到相同输出的两个输入值是困难的。但从理论上讲,碰撞一定存在,只不过这个碰撞以目前的计算水平难以找到。

仍然通过前面的分段函数做简单理解,由于输出只有1位(两种可能结果),则依次输入3个数,则一定会产生结果相同的情况,即当输入值的个数大于可能的结果的个数时,一定会产生碰撞。再以计算机中的二级制为例,假设输出固定位数为2位,则总共有00,01,10,11四种可能组合,那么当输入的个数大于22=4时,则一定会产生碰撞。再通俗一点理解,比如掷骰子,骰子有6面,即输出结果有六种可能,那么如果我们掷7次,尽管每次的力度和手法都不一样,结果也至少会有1次是重复的输出,也就是产生了碰撞。

实际使用的哈希函数为保证安全,其结果通常有很高的位数,如256位,此时理论上当输入值大于2256时,在结果中一定会产生碰撞。但寻找此类碰撞平均需要计算2128次哈希运算,这依然是一个天文数字,以目前的计算机水平,寻找这类碰撞在时间上是不可行的。

哈希函数的特点三是通过输出值,难以得知输入值,而通过输入值则很容易计算出输出值。这个特点也可以先用上面的分段函数进行简单理解,对于输入值无论是1000还是10000,我们都很容易得到结果为1,但知道了结果为1,却无法知道输入值为多少。而哈希函数的独特之处还在于,对于输入值做任何微小改动,产生的结果也会大不相同,并且难以从输出结果推出输入数据。通过搜索引擎,可以很方便的找到一些常见的在线哈希函数进行计算的工具,如http://tool.oschina.net/encrypt?type=2,如对“你好”通过区块链中常用的哈希函数——SHA256进行运算得到的哈希值如图。

SHA-256哈希函数

对于哈希函数有了这些基本的了解,那么我们就可以回到主题,区块链中的的区块是如何链接的?答案就是通过哈希函数。

在区块链中,除了第一个区块,之后的每一个区块都包含前一个区块的地址和前一区块所包含的数据经过哈希函数运算产生的输出值,每一个区块按照时间顺序依次产生。这样,如果试图更改链上某一个区块的内容,那么根据哈希函数的特性,其产生的哈希值会发生变化,这个值会和其后面的区块中记录的哈希值不一致。区块链将一个个数据块通过记录其地址和数据块通过哈希函数的输出值链接起来。

区块的链接方式

把区块通过哈希函数链接起来有什么好处呢?好处就是,数据块并不是孤立的存在,处于区块链中间的数据块会和其前后的区块产生联系,如果某一数据块不论出于何种因素发生了变化,通过对比哈希值便可以快速定位识别包含错误数据的区块。

到目前为止,我们对区块链有了一个简单的理解:区块链是一种记录数据的方式,把数据按时间顺序分块,新的数据块记录前一个数据块的地址和哈希值,通过这种方式将不同数据块组合成一个“链”。有了这个最基本的认识后,我们便可以更方便的开始下一步区块链的学习。

相关文章

网友评论

    本文标题:小白区块链笔记001:初识区块链

    本文链接:https://www.haomeiwen.com/subject/oejluqtx.html