学海无涯,回头是岸

从零搞懂区块链:Hash函数概述

22 12月
作者:Ayan|分类:区块链

哈希算法是通过对数据进行哈希运算,用固定的哈希结果值验证信息是否被篡改。所采用的安全哈希算法(Secure Hash Algorithm,SHA)是由美国国家安全局研发,由美国国家标准与技术研究院(NIST)发布的一系列密码哈希函数,包括SHA-0、SHA-1、SHA-2和SHA-3等系列。比特币的区块链使用的是SHA-256哈希加密算法,属于SHA-2分支。

哈希算法的特点是只要是相同的数据输入,一定会得到相同的结果,如果输入数据稍有变化,将得到一个千差万别的结果。SHA256还是一个单向不可逆的算法,即根据一个输入数算SHA256的结果很容易,但根据SHA256的结果反算输入数几乎是不可能。

哈希是区块链安全性和不变性的基础。

Hash函数可以用 h=H(M) 来表示,其特征为:

  1. H可用于任意长度的消息

  2. H产生的Hash值是固定长度的

  3. 对于给定的消息x,很容易计算H(x)的值

  4. 单向性:对于给定的h,要找到M使H(M)=h在计算上是不可行的

  5. 抗弱碰撞性:对于给定的消息M1,要发现另一个消息M2,使H(M1)=H(M2)在计算上是不可行的

  6. 抗强碰撞性:找任意一对不同的消息M1和M2,使H(M1)=H(M2)在计算上是不可行的

  7. 消息对应的Hash值的每一比特应与消息的每一比特有关联。当消息原文发生改变时,Hash值必定变化。

区块与 Hash 是一一对应的,每个区块的 Hash 都是针对“区块头”(Head)计算的。

Hash = SHA256(区块头)

区块头包含很多内容(包括上一个区块的Hash、当前区块体的Hash等)。这意味着,如果当前区块的内容变了,或者上一个区块的 Hash 变了,一定会引起当前区块的 Hash 改变。

如果有人修改了一个区块,该区块的 Hash 就变了。为了让后面的区块还能连到它,必须同时修改后面所有的区块,否则被改掉的区块就脱离区块链了。Hash 的计算很耗时,同时修改多个区块几乎不可能发生,除非有人掌握了全网51%以上的计算能力。

正是通过这种联动机制,区块链保证了自身的可靠性,数据一旦写入,就无法被篡改。这就像历史一样,发生了就是发生了,从此再无法改变。

比如我们对一张借条进行哈希,借条的内容是“本人张三,借给李四100万人民币,5年后还本息共计156.45万元人民币”。则:

Hash(本人张三,借给李四100万人民币,5年后还本息共计156.45万元人民币) = AC4635D34DEF。

账本上就记录了AC4635D34DEF这样一条记录。

从中可以看出哈希函数的4个作用:

  1. 简化信息,哈希后的信息变短了,简化后的信息也称为消息摘要或消息指纹。

  2. 可以使用AC4635D34DEF来标识原始信息,摘要信息也称为原始信息的ID。

  3. 账本是AC4635D34DEF这样一条记录,原始信息被隐匿。

  4. 假如李四在还款时欺骗说,张三只借给李四10万,双方可以用AC4635D34DEF来验证原始信息。(改动任一字符,Hash结果都会面目全非)

例如:

sha256(我叫王木犊,我妹子叫王冒敦木犊冒敦碰一担,冒敦喊木犊。)= 6df8aa078e76be9c5be14f7a9fdfad77cdce3eb2409734accfca1c7581eae9fc

sha256(我叫王木犊,我妹子叫王冒敦木犊冒敦碰一担,冒敦喊木犊。)= d7824dffdcae50f7822a05ec4eebabb36aa76d577cd8a5c68b4abccd1ae6eab4

上述例子中,仅改变一个标点符号,输出的哈希值完全没有相似性。

以上对哈希函数做了简单介绍,大家应该可以理解哈希函数的作用了。比特币系统对哈希函数进行了充份利用,保证了加密过程不可逆,数据指纹无法篡改。下次我们将对哈希函数中的重要分支SHA256进行介绍,欢迎大家持续关注,谢谢!


浏览116 评论0
返回
目录
返回
首页
区块链到底是做什么的? 时间序列模型的实际用处?

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。