上一篇文章作为开篇介绍了区块链的历史。而这里区块演义的第二篇,将为大家介绍区块链最核心的部分。
有请区块链自我介绍。
“大渣好,我是区块链,我姓区块,不是区喔,名叫块链。”
不开玩笑了,入正题。
正题的第一步,你需要了解单向函数。
“给定任意两个集合X和Y。 函数f:X Y 称为单向的,如果对每一个x属于X,很容易计算出函数f(x)的值,而对大多数y属于Y, 要确定满足y=f(x)的x是计算上困难的(假设至少有这样一个x存在)。”
不想看数学定义的看这儿,单向函数就是给定一条二进制序列,例如0100010101110101001010101001010101,输出一个固定长度的,通常比输入短的二进制序列,例如根据上述输入,函数生成100101001。
厉害的单向函数有一个名叫牵一发动全身的性质,就是把输入序列改动一点点,例如上面输入序列随便一个位数从零改成一,那么函数输出与100101001相差甚远,例如输出立刻变成101110000。厉害的单向函数世界上还果真有!他们就是MD-5和SHA-256 安全散列。
单向函数的性质可以做什么呢?数字摘要!也就是利用单向函数,根据文件(本质是二进制序列)生成一段很小位数的二进制数列。如果单向函数厉害,我们利用牵一发动全身效应,可以防止文件被串改。
不考虑实现电子货币和其他功能的实现,最简单的区块链只是一个数据结构,如下图:
注:此图来自中本聪的论文
图中叫block的就是区块,说白了就是由0到1组合成的一大段二进制码。而block中会有一段二进制码是上一个区块的HASH值(HASH是一种很厉害的单向函数,忘记了可以看看本文的开始处)。区块中还有一段二进制码名叫NONCE,暂且在这儿理解为待定代数X。TX暂且理解为区块的大段二进制码的其他内容,根据设计者就区块链技术要实现的目标功能而安排不同的内容。
有了HASH函数在,block与block之间便产生一个可验证的关系,即区块链,且一环扣一环。只要有一个block其中的位数被篡改了,后面的block的hash值自然对不上,于是大家都知道这一条链中的某block被篡改过。
这就是单独一条区块链的静态不可篡改性。
到这儿,区块链的静态特点已经说完了,到目前,至少我们拿到一条区块链,从第一个区块开始,我们就可以验证它有木有被篡改过。
那么如何保证网络上只对一条区块链形成共识呢?而不是多条?这就要用另外一种机制来保障了,这是区块链在生成中的动态防篡改机制了。这个话题留给下一篇文章。
总结,区块链的不可篡改性分两个:1.静态防篡改(hash实现)。2.动态防篡改(即维持只有一条是公认的链,预先透漏一个,交由挖矿实现)。
欢迎关注经济怪谈,长按二维码进入公众号
领取专属 10元无门槛券
私享最新 技术干货