哈希算法是区块链成功的必要条件
区块链不仅仅是形容区块的一种链式结构,还指代了一套基于密码学的技术组合。中本聪在设计比特币后,在比特币中提取区块链概念。从而让区块链成为数字货币技术的代名词。
在区块链技术体系中,哈希算法、加密算法、签名算法、点对点通信技术等等都缺一不可。 这篇短文将介绍哈希算法以及哈希算法在以太坊中的使用。
什么是哈希算法呢?简单地讲,他是一种为任意大小信息创建一种非常小且固定长度的指纹的方法。哈希算法也称作散列函数。
毫不夸张的说,没有哈希算法就没有区块链的成功,它是区块链的基石。 在区块链中信息的指纹高频率的作为信息的指针使用。根据指纹就可以锁定信息,既可以保证信息的不可篡改性,也能用于定位信息,方便读取和校验信息。
哈希算法的特性如下:
最早出现并经常出现在大家视线中的是MD5,它是一种哈希算法。但是他被证明是不安全的,已出现碰撞。除了MD5,还有SHA1,SHA2,SHA3等等,现在最流行的安全且效率高的哈希算法是 SHA3-256。
在区块链技术中流行的哈希算法是SHA3,SHA3是美国国家标准技术研究所所设计的一套SHA哈希算法,SHA3它不是SHA2的替代品,而是一种有别于SHA2的全新哈希设计方案。在15年8月才最终被才被NIST正式批准的。
我们知道以太坊时在13年开始设计,15年7月30日正式上线公网。在这段时间内容SHA3还没有成为正式标准。那么以太坊是使用什么哈希算法的呢?使用的是一种名为 Keccak 的哈希算法。这个算法来头不小,它是NICI组织的SHA3哈希算法竞赛的胜出者,相当有名气。
可以说Keccak是SHA3正式批准前的名字,但正式批准的SHA3还是和Keccak有许多不一样的地方,我们并不能认为SHA3和Keccak是完全对等的。
在以太坊中,常见的区块哈希、交易哈希、状态哈希等等都使用的Keccak256哈希算法。 256表示创建的信息指纹长度是256位,即32字节。当然以太坊也在慢慢向标准的SHA3算法靠拢,不管你是在开发DAPP还是做其他与要计算哈希值得工作,也建议你使用SHA3,除非你不得不做一些兼容性工作。在 Ether.js中同时提供了Keccak256和SHA256的哈希算法。同样在Solidity中也内置提供了Keccak256和SHA256,同大家灵活使用。
比特币、以太坊都是一种链式结构的区块链。一个区块信息中包含了上一个区块(父块)的哈希值,从而保证了区块的安全指向。随着区块被更多的子块间接引用,进一步强化了区块的安全性。
图中的区块1,直接和间接的被区块2、3、4、5、6、7这6个区块引用。意味着着6个区块都承认了区块1的合法性和权威性,是属于多大数人选择的结果。通过哈希值作为区块间的纽带,将一个个区块构成了一条区块链。
不仅仅是区块中包含父区块哈希,还有更多的哈希值使用。如区块中有一个Merke Root 值就是是一个哈希二叉树的根值,一个根值就代表了一整颗树的完整数据。这颗树可能是无限大的,但是通过小小的哈希值就可以把整棵树所代表的数据提供了正确性证明。
上图中,绿色的连接线都是通过哈希值进行连接。这一条一条细小的连接就完整的勾画区块链的整体数据表达形式。庞大的数据被切分成无数的小数块。方便了传播、存储、局部更新等等。
这一切的功能全归哈希算法。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!