vlambda博客
学习文章列表

哈希算法在以太坊中的妙用


哈希算法是区块链成功的必要条件

区块链不仅仅是形容区块的一种链式结构,还指代了一套基于密码学的技术组合。中本聪在设计比特币后,在比特币中提取区块链概念。从而让区块链成为数字货币技术的代名词。

在区块链技术体系中,哈希算法、加密算法、签名算法、点对点通信技术等等都缺一不可。这篇短文将介绍哈希算法以及哈希算法在以太坊中的使用。

什么是哈希算法呢?简单地讲,他是一种为任意大小信息创建一种非常小且固定长度的指纹的方法。哈希算法也称作散列函数。

毫不夸张的说,没有哈希算法就没有区块链的成功,它是区块链的基石。
在区块链中信息的指纹高频率的作为信息的指针使用。根据指纹就可以锁定信息,既可以保证信息的不可篡改性,也能用于定位信息,方便读取和校验信息。



哈希算法的特性如下:


  1. 唯一性:任何信息都可以被哈希成一个简短的指纹;(基本不会被碰撞)

  2. 雪崩效应:即使一个极小的改变都会产生几乎完全不同的哈希值;

  3. 单向性:仅根据指纹是无法反向推导出被哈希的内容的;

哈希算法在以太坊中的妙用

哈希算法在以太坊中的妙用

最早出现并经常出现在大家视线中的是 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 值就是是一个哈希二叉树的根值,一个根值就代表了一整颗树的完整数据。这颗树可能是无限大的,但是通过小小的哈希值就可以把整棵树所代表的数据提供了正确性证明。

上图中,绿色的连接线都是通过哈希值进行连接。这一条一条细小的连接就完整的勾画区块链的整体数据表达形式。庞大的数据被切分成无数的小数块。方便了传播、存储、局部更新等等。

这一切的功能全归哈希算法。


来源:登链社区
网址:https://learnblockchain.cn/article/867