1、哈希是一种加密算法
(1)哈希函数(Hash Function),又叫散列函数、散列算法。 哈希函数是一个公开函数,可以将任意长度的消息M映射成为一个长度较短且长度固定的值H(M),称H(M)为哈希值、散列值(Hash Value)、杂凑值或者消息摘要(Message Digest)。 (2)它是一种单向密码体制,即一个从明文到密文的不可逆映射,只有加密过程,没有解密过程。 (3)它的函数表达式为:h=H(m) 函数说明: m:任意长度消息(不同算法实现,长度限制不同,有的哈希函数(SHA-3)不限制消息长度,有的限制(SHA-2),但即使有限制其长度也非常大,可以认为是任意长度消息) H:哈希函数 h:固定长度的哈希值
无论输入是什么数字格式、文件有多大,输出都是固定长度的比特串。以比特币使用的Sha256算法为例,无论输入是什么数据文件,输出就是256bit
2、Hash函数的特性
一个好的哈希函数必然具备:不定长输入固定长输出、抗碰撞性、不可逆性这三个特点。 (1)不定长度输入,固定长度输出 所谓不定长度输入,固定长度输出,我们在前文中已经讲过了。就是不管输入的数据是多长,是多大,输出的数据长度、格式都是固定的。比如你选择sha256,那么你的输出就是256位。 (2)抗碰撞性 如果x不等于y,但是H(x)等于H(y),那么我们就说H()这个函数不具有抗碰撞性。反之,我们就认为其是具有抗碰撞性的。一个好的hash函数是一定要具有抗碰撞性的。 (3)不可逆性(单项性) 给定哈希函数H()和输入数据,可以很方便的求解出哈希值,但是给定哈希值和哈希函数几乎不能求解出输入数据是什么,这就是不可逆性,也叫做单向性。
一个优秀的 hash 算法,将能实现: (1)正向快速:给定明文和 hash 算法,在有限时间和有限资源内能计算出 hash 值。 (2)逆向困难:给定(若干) hash 值,在有限时间内很难(基本不可能)逆推出明文。 (3)输入敏感:原始输入信息修改一点信息,产生的 hash 值看起来应该都有很大不同。 (4)冲突避免:很难找到两段内容不同的明文,使得它们的 hash 值一致(发生冲突)。
3、哈希函数在区块链中的作用
(1)快速验证。哈希函数在区块链中,生成各种数据的摘要,当比较两个数据是否相等时,只需要比较他们的摘要就可以了。例如,比较两个交易是否相等,只需要比较两者的hash值,快捷又方便。 (2)防止篡改。传递一个数据,要保证它在传递过程中不被篡改,只需要同时传递它的摘要即可。收到数据的人将这个数据重新生成摘要,然后比较传递的摘要和生成的摘要是否相等,如果相等,则说明数据在传递过程中没有被篡改。 (3)用于POW共识算法工作量证明。这个主要是在pow的共识算法中使用。详细说来,就是给定一定的数据,然后让你寻找其他的数据,合并起来计算出来的hash值小于某个值。比特币、目前的以太坊,都是使用的POW共识。
POW简介 Proof of Work,工作证明。 POW共识算法主要是通过计算难度值来决定谁来出块。POW的工作量是指方程式求解,谁先解出来,谁就有权利出块。方程式是通过前一个区块的哈希值和随机值nonce来计算下一个区块的哈希值,谁先找到nonce,谁就能最先计算出下一个区块的哈希值,这种方式之所以被称为计算难度值是因为方程式没有固定解法,只能不断的尝试,这种解方程式的方式称为哈希碰撞,是概率事件,碰撞的次数越多,方程式求解的难度就会越大。比特币就是采用POW共识算法
|