25

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

 4 years ago
source link: https://learnblockchain.cn/article/867
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

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

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

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

哈希算法的特性如下:

  1. 唯一性 :任何信息都可以被哈希成一个简短的指纹;(基本不会被碰撞)
  2. 雪崩效应 :即使一个极小的改变都会产生几乎完全不同的哈希值;
  3. 单向性 :仅根据指纹是无法反向推导出被哈希的内容的;

aYrIjym.png!web

zUF3muE.png!web

最早出现并经常出现在大家视线中的是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,同大家灵活使用。

比特币、以太坊都是一种链式结构的区块链。一个区块信息中包含了上一个区块(父块)的哈希值,从而保证了区块的安全指向。随着区块被更多的子块间接引用,进一步强化了区块的安全性。

mmauAna.png!web

图中的区块1,直接和间接的被区块2、3、4、5、6、7这6个区块引用。意味着着6个区块都承认了区块1的合法性和权威性,是属于多大数人选择的结果。通过哈希值作为区块间的纽带,将一个个区块构成了一条区块链。

32iAbeV.png!web

不仅仅是区块中包含父区块哈希,还有更多的哈希值使用。如区块中有一个Merke Root 值就是是一个哈希二叉树的根值,一个根值就代表了一整颗树的完整数据。这颗树可能是无限大的,但是通过小小的哈希值就可以把整棵树所代表的数据提供了正确性证明。

NB3eYf2.png!web

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

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


Recommend

  • 6
    • www.cxyxiaowu.com 2 years ago
    • Cache

    哈哈哈希冲突的妙用

    点击上方蓝字设为星标 下面开始今天的学习~

  • 33
    • 微信 mp.weixin.qq.com 6 years ago
    • Cache

    golang-event 在以太坊中的使用

  • 22

    以太坊中的 gas(汽油) 是什么意思? 我想使用的一个以太坊应用程序说需...

  • 42

    以太坊 上的应用程序管理财务价值,使安全性变得绝对重要。作为一种新兴的、实验性的技术,智能合约当然也受到了相当多的攻击。 为了防止进一步的攻击,我列出了几乎所...

  • 21

    0x01 以太坊中的两类账户 对以太坊稍微了解一些朋友,应该知道,以太坊中有两类账户,一类是普通的由私钥控制的外部账户,一类是关联有合约代码的合约账户。 ![以太坊地址]( https://uplo...

  • 16
    • www.jinse.com 4 years ago
    • Cache

    科普:以太坊中的网络地址

    在与 Felix Lange 讨论之后,我认为攥写这篇关于在以太坊生态中遇到的各类网络地址及其差异的文章是很有意义的。我自身对它们理解也存在着些误区,因而觉得对其进行阐述会很有价值。 多地址(Multiaddr) 让我们从最早或按...

  • 17
    • learnblockchain.cn 3 years ago
    • Cache

    以太坊中GraphQL简介及使用

    以太坊在去年升级的go-ethereum(geth)1.9.0大版本,除了性能得到大幅提升之外,引入了GraphQL,一种节点接口查询机制,用以补充JSON-RPC。 以太坊在去年升级的go-ethereum(geth)1.9.0大版本,除了性能得到大幅提升...

  • 15

    以太坊在去年升级的go-ethereum(geth)1.9.0大版本,除了性能得到大幅提升之外,引入了GraphQL,一种节点接口查询机制,用以补充JSON-RPC。 ...

  • 1
    • nicodechal.github.io 2 years ago
    • Cache

    以太坊中的合约创建流程

    以太坊中的合约创建流程 - Nicodechal 之前已经提到过,交易有两种类型,其中一种为合约创建,使用 Λ\LambdaΛ 表示,合约创建其实就是创建账户的过程,账户是包含合约代码的账户。 (σ′,g′,A,z,o)≡Λ(σ,s,o,g,p,v,i,e,ζ,w)(\mathbf{\sigma'},g',A,...

  • 2
    • nicodechal.github.io 2 years ago
    • Cache

    以太坊中的消息调用流程

    以太坊中的消息调用流程 - Nicodechal 之前已经提到过,交易有两种类型,一种是消息调用,使用 Θ\ThetaΘ 表示,合约创建其实就是创建账户的过程,账户是包含合约代码的账户。 (σ′,g′,A,z,o)≡Θ(σ,s,o,r,c,g,p,v,v~,d,e,w)(\mathbf{\sigma'},g',A,...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK