Hash是什么?区块链哈希相关的知识

Hash是什么?

哈希(Hash)算法原先是一种用在资料编码中的技术,最主要分为Hash Function(哈希函数)和Hash Table(哈希表)两个部份,其中hash function是一种将任意资料映射成为固定长度的技术,hash table则是储存(Key,Value)这种对应关系的资料结构,我们会对hash function和hash table做简单的介绍,欲深度了解hash table的可以观看我们文末的参考资料。

Hash Function是什么?

哈希函数Hash Function是一种将输入值映射到另一个值域的技术,Hash Function的底层有非常复杂的数学式,式子中蕴含了一些magic number,有兴趣钻研的可以再去寻找一些论文来研读,这边就不多作介绍,因此在这边可以直接想像Hash Function就是一台转换器,丢输入进去就会产生一个输出,而这种转换有一个很重要的特性就是「单向」,也就是one-way function,输入可以经由转换得到输出,但输出却不可得到输入,具有不可逆的特性。

Hash Table是什么?

哈希表Hash Table是一种储存(Key,Value)的资料结构,通常一个Key就是对应一个Value,Value就是要储存的资料,Key则可以想像成这笔资料的标签,想要找到这笔资料就需要有这笔资料的Key去搜寻,比如有一些资料是许多车主的姓名和车子的厂牌:


Hash Table的范例

很明显的,左边是车主姓名,右边是该车主的车子厂牌,因此我们可以假定Key是车主姓名,Value是车子厂牌,那去寻找key名称为”Michael”的,就可以找到他的Value 、也就是车子厂牌为”Tesla”。而这边提到的Hash Table,Key和Value分别摆放的就是原始输入,以及经由Hash Function转换过的输出。有一个重点要说明,有些Hash Function有可能会发生一种情况:不同输入,结果输出相同,这样放到Hash Table上,就等于有多个Key都可以指到同一个Value,这样今天如果我得到这个Value,我就会分不出来是用哪把Key去呼叫资料的,这种情况称为”冲突Collision”,在比较旧的几种Hash Function,例如MD2、MD5等就有这种冲突的情况,但对于要能用在区块链上的Hash却是不能有这种冲突的情况的,原因有许多例如:没办法作为电子签名的辨别之用,因此使用在区块链的Hash技术比较常用的种类是密码哈希函数(Cryptographic Hash Function)。

Cryptographic Hash Function是什么?

密码哈希函数Hash Function的一种类型,也具有hash function所有的性质,但密码哈希函数得出的输出不会发生冲突(collision)的情况,具有「碰撞抵抗性」(Collision-Resistant),因此可明确分辨输入讯息是否不同,因此在区块链当中,都是使用密码哈希函数作为hash function。

在密码哈希函数中有许多不同的演算法,常见的有MD5、SHA家族,在比特币中使用的hash算法就是使用SHA家族当中的SHA-256演算法。

密码哈希函数例子:


密码哈希式实际例子

例子中可看出多了一个惊叹号,输出结果就会有很大的改变,有兴趣的各位能够上网搜寻线上hash就会有很多网站可以玩玩看各个语词的hash值啰!

SHA是什么?

安全散列演算法SHA(Secure Hash Algorithm)是密码哈希函数的一种安全标准,SHA家族的演算法,由美国国家安全域(NSA)所设计,并由美国国家标准与技术研究院(NIST)发布,是美国的政府标准。

常见的SHA家族有SHA-1、SHA-2当中的SHA-256和SHA-512等等,其中的SHA-256演算法,无论放进任何的输入,经由hash function得到的输出长度都会刚好是256 bits,维基上有提供SHA-256的虚拟码,有兴趣的可以上去看一下:https://zh.wikipedia.org/wiki/SHA-2

小知识:2017年荷兰密码学研究小组CWI和Google正式宣布攻破了SHA-1

Hash常见用途

  1. 档案校验码
  2. 使用者密码储存和比对

可以把要隐藏的资料用Hash的方式加密起来,想要确认该加密密文(见:小知识)的原始资料时也可以用Hash的特性来确认,比如把使用者密码Hash起来再储存,这样资料库中就不会直接储存公开的使用者密码,而今天想要确认使用者输入的密码是否正确只需要把使用者输入的密码Hash起来跟资料库当中储存的密文做比对就可以。

小知识:明文(Plain Text)和密文(Cipher Text)是密码学中的基础名词,概念很简单,明文指的就是加密前原始资料, 明文加密之后就会变密文。比如上方Hash的例子当中,Hi, We are blockbar就是明文,密文就是9cd454c137d2910ea3333d2167b899242b876e5c1fb489f1906f34f680951851。

本文链接地址:https://www.wwsww.cn/jishu/1374.html
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。