来源 | hackernoon

编译 | 张涛

责编 | Carol

出品 | 区块链大本营(ID:blockchain_camp)

什么是哈希?

哈希是将任意长的输入编程加密的固定长度输出的过程。哈希并不等同于加密方法,因为无法解密哈希值来获取原始数据。事实上哈希是一种单项加密函数。

有了哈希函数,就可以将互联网上的数据以固定长度字符串的形式来保存。其中一种方法就是SHA-256(安全哈希算法-256位),SHA-256是SHA-1的后继者,SHA-1的输出是160位的。

哈希是如何应用在区块链中的?

在区块链中,每个区块中都有前一个区块的哈希值,前一个区块叫做当前区块的父区块。由于每个区块都有前一个区块的哈希值,当修改当前区块的任意数据都会导致区块的哈希值发生变化,这会对前一个区块产生影响,因为其中含有前一个区块的地址。

比如,当前有两个区块,一个是当前区块,一个是父区块。当前区块中有父区块的地址,如果需要修改当前区块的数据,就需要对父区块链进行修改。如果只有两个区块就比较好修改数据,但事实上区块链上有很多的区块。

截至2020年1月24日12:32,一共有614272个区块,第614272个区块的哈希值为00000000000000000007a6be31011560f1e3abe8f125e356a31db6051753334e。如果想要修改第614272个区块的数据,那么614271区块的哈希地址就会发生改变,但是修改所有614271个区块的哈希值是不可能的,因此区块链中数据的不可篡改和可信赖的。区块链的第一个区块叫做Genesis(创始)区块。

研究人员对该过程进行了可视化:

如果对输入产生小的修改,都可能会导致输出产生大的改变。

哈希是区块链技术和不可篡改和潜力的核心基础和最重要的方面。哈希维护了记录和查看数据的真实性,区块链的完整性也是这样的。

这也是区块链技术最重要的技术特征的一部分,只有理解了哈希才能了解区块链不可篡改性的潜力和价值。

Merkle Tree(马尔科夫树)是什么?

当有大量数据需要验证时,就需要消耗大量的内存来存储和确保安全,这个过程很难。但是又了马尔科夫树(Merkle tree),就可以轻易解决这些问题。

马尔科夫树是区块链技术的基础,在该结构中,可以很容易地在大量数据中找出哪些数据发生了变化,整个数据验证的过程非常高效。比特币和以太坊中都使用了马尔科夫树。

从上图可以看出,所有的交易都在底部,最顶部的哈希值叫做Root hash或Merkle root(马尔科夫根)。

如上图所示,有4个交易A、B、C、D。A和B哈希后会形成一个哈希值,C和D会形成另一个哈希值,AB的哈希结果和CD哈希结果会组合来形成一个新的哈希值——Root hash或Merkle RootABCD。

Root hash有所有交易的信息。马尔科夫树会重复计算节点对的哈希值,直到只剩下一个哈希值,就是Root hash。

Merkle tree是一个二叉树,所以需要偶数个叶子结点,如果交易数是奇数,那么最后一个哈希值会复制一次来创建偶数个叶子节点。

如上图所示,可以看出奇数值的交易数中有复制的交易进行了哈希,表明Merkle tree会计算奇数的叶子树。

所有交易数据会总结称一个Root hash,保存在区块头(block header)中。数据中有任何改变,整个哈希值就会变化,如果哈希值变化了,Merkle root就会发生变化。Merkle tree可以帮助维护数据的完整性。

Merkle tree的另一个好处是如果想要了解特定交易的状态,无需下载整个区块链,只需要请求竖直证明(vertical proof)和树的特定分支,验证一个特定的交易分支。

如何用哈希来确保数据安全?

哈希还增加了数据的安全性。因为没有加密数据,所以无需也无法解密数据。因为哈希函数是单向加密函数,加密哈希函数需要满足一些关键特征才能保证是有用的,包括:

  1. 每个哈希值都是不同的

  2. 相同的消息会生成相同的哈希值

  3. 无法根据哈希值确定输入值

  4. 输入值的微小变化也会导致整个哈希值的变化

哈希可以帮助确定数据是否被修改过。比如,之前下载了一些重要信息,为确定数据是否被修改过,可以对数据进行哈希计算,并比较数据的哈希值和接收到的数据的哈希值。

如果哈希值相同,就表明数据没有被修改过,如果哈希值不匹配,就表明数据在发送后接收前被修改了。

推荐阅读

  • 区块链的阴暗面

  • 孟岩:疫情带来的暂停,会让区块链与数字经济迎来更大反弹|算力大学视频公开课全文

  • 爱荷华大选 App 投票酿闹剧的反思:为什么我们在软件工程方面如此糟糕?

  • 如何使用5个Python库管理大数据?

  • 一文告诉你,如何使用Python构建一个“谷歌搜索”系统 | 内附代码

  • 云蹦迪:伪风口,真狂欢

老铁们求在看!????

猛戳“阅读原文”,填写中国远程办公-调查问卷

区块链中的哈希到底是什么?相关推荐

  1. 区块链中的哈希是什么?

    哈希是英文Hash的音译,它是一种信息压缩的方法.利用哈希能够将很长的一段文字,压缩成很短的一段乱码,然后获得这段信息的"摘要". 下面讲的是比特币,这个词大家可能都不陌生,很多人 ...

  2. 哈希函数在区块链中的应用

    哈希指针 除了保存结构体在内存中的位置还要保存结构体的哈希值. 好处:不只可以找到结构体的位置,还可以检测这个结构体的哈希值. 区块链和普通链表的主要区别就在于用哈希指针代替了普通的指针. 识别区块数 ...

  3. 区块链中哈希算法c语言代码,解析区块链中的核心技术哈希(Hash)算法

    原标题:解析区块链中的核心技术哈希(Hash)算法 作者:崔利民 区块链是分布式数据存储.点对点传输.共识机制.加密算法等计算机技术的新型应用模式.区块链的关键技术组成主要为:P2P网络协议.共识机制 ...

  4. 解密区块链中的密码学

    在这片文章中,我们总结了区块链会用到的一些密码学原语,那什么是密码学"原语"? 不同于操作系统的"原语"概念,(注:操作系统原语是操作系统或计算机网络用语范畴. ...

  5. 密码学简史(二)--- 区块链中的现代密码学

    文章目录 5. 对称钥匙:DES加密法 6. 非对称钥匙:RSA加密法 6.1 不可逆模运算 --- DH密钥交换 6.2 RSA加密法 6.3 数字签名 6.4 比特币中的密码学 6.5 区块链中的 ...

  6. 从区块链中常见的攻击类型谈区块链的隐私与安全

    本文整理自Parity亚洲技术总监贾瑶琪先生在万向区块链蜂巢学院直播间进行的Web 3.0训练营公开课. 过去几年,从比特币到以太坊,区块链系统从最初的分布式账本功能,慢慢进化到现在类似于分布式计算机 ...

  7. 独家| ChinaLedger白硕:区块链中的隐私保护

    隐私问题一直是区块链应用落地的障碍问题之一,如何既能满足监管,又能不侵害数据隐私,是行业都在攻克的问题.那么,到底隐私问题为何难?有什么解决思路,以及实践创新呢?零知识证明.同态加密等技术,又能否解决 ...

  8. 区块链中的智能合约是什么?

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. "智能合约是一套以数字形式定义的承诺,承诺控制着数字资产并包含了合约参与者约定的权利和义务,由计算机系统自动执 ...

  9. 区块链100讲:区块链中的随机数

    2019独角兽企业重金招聘Python工程师标准>>> 我们生活的环境充满了随机性.一直以来,运气,概率和命运这些概念都与随机性紧紧联系在一起.所有人类无法理解或无法预测的事物往往都 ...

  10. 区块链中的基本概念整理

    区块链中的基本概念整理 区块链本身是由多种技术集合而成,涉及了多方面的内容,而在其组合应用的过程中,同时也产生了很多新的概念.对于这些概念的整理和理解,有助于更加深刻的理解区块链的本质,也可以指导我们 ...

最新文章

  1. python工程师-史上最全Python工程师常见面试题集锦,有这一份就够了
  2. INotifyPropertyChanged 接口
  3. 【转】01Teams的前世今生
  4. 学习开发webpart
  5. MySQL学习之路 一 : MySQL 5.7.19 源码安装
  6. 有赞vant_vue+有赞vant的商品规格sku记录-小程序
  7. 联想y50更换固态硬盘_旧笔记本电脑更换固态硬盘
  8. Python爬虫实践(二) -- 爬虫进阶:爬取数据处理、数据库存储
  9. htc 常见错误和解决方案
  10. 【22/04】Chrome 里的请求报错 “CAUTION: Provisional headers are shown“ 是什么意思?
  11. 国内常见php的CMS建站系统情况分析
  12. 修改系统时区 /etc/localtime
  13. 【CityHunter】服务器端设计思路
  14. WebRTC的拥塞控制和带宽策略
  15. Python + Scrapy 小小爬虫有大大梦想
  16. python _foo __foo
  17. 仿淘宝 打开app时识别淘口令和解析保存到本地的带二维码图片的网址
  18. c# 画刻度尺(支持缩放)
  19. 【实习日志】SSM用户管理系统搭建+更新
  20. python pdf 转换成txt,csv,doc 及doc转换为pdf初级

热门文章

  1. endnote 参考文献加序号_求助endnote 中 文末的参考文献 序号中如何设置成带中括号的 [序号]...
  2. Bribing FIPA
  3. 联想笔记本电脑E570永久禁用触摸板
  4. 虚拟局域网服务器群晖,基于虚拟机的黑群晖NAS+基于虚拟局域网的远程访问
  5. html nav标签无序排列,web前端分享HTML5中的nav标签
  6. SEO关键词产出之词频分析(关键词工具篇)
  7. bootstrap表格自动换行
  8. 高度的思想境界的几个特征
  9. LimeSDR常见问题及解决方法
  10. 淘宝用户分析(步骤详细,数据分析项目)