Hash算法简介
Hash算法性质
Hash算法用于计算消息摘要(Message Digest),可以将任意长的输入信息快速地转换为固定长度的输出。在区块链中主要利用了Hash算法的三种性质:
- 抗冲突性(Collision Resistance):不同的输入经过Hash运算之后很难产生相同的输出,哪怕输入之间只有微小的差别也会对输出造成很大的影响(雪崩效应)。
- 信息隐藏(Hiding):是指很难通过输出的内容联想到输入的内容。
- 谜题友好(Puzzle Friendly):知道了输出想反向计算出原始的输入内容几乎是不可能做到的,需要耗费巨量的计算。
应用场景举例
- 文件校验
p2p软件在下载完成之后,为了防止下载的文件被篡改或者损坏,会对文件用MD5哈希算法进行校验,计算结果和预先得知的哈希值一致才认为下载成功。 - 数字签名
将要传递的信息经过Hash运算之后生成消息摘要(Message Digest),再用自己的私钥对消息摘要进行加密作为附带的签名一起传输给对方。这样一来能实现1.防止信息被截获篡改;2.证明信息确实是来自于哪个人。
常见Hash算法种类
- MD5
MD5(Message Digest 5)是一种被广泛使用的Hash函数,可以生成128位(16字节)的Hash值,用于确保信息传输完整性。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。MD5比MD4更加安全,但过程更加复杂,计算速度要慢一点。MD5已于2004年被成功碰撞,其安全性已不足应用于商业场景。 - SHA1
SHA(Secure Hash Algorithm)家族中第一代哈希算法,SHA1在许多安全协议中广为使用,包括TLS和SSL。2017年2月,Google宣布已攻破了SHA1,并准备在其Chrome浏览器产品中逐渐降低SHA1证书的安全指数,逐步停止对使用SHA1哈希算法证书的支持。 - SHA2
SHA(Secure Hash Algorithm)家族中第二代哈希算法,这是SHA算法家族的第二代,支持了更长的摘要信息输出,主要有SHA224、SHA256、SHA384和SHA512,数字后缀表示它们生成的哈希摘要结果长度。 - SHA3
SHA(Secure Hash Algorithm)家族中第三代哈希算法,之前名为Keccak256算法(读作“ketchak”,被采纳为标准之后改叫SHA3,但在最终SHA3标准改了keccak256中的填充算法,所以两者实际计算的结果是不同的),SHA3并不是要取代SHA2,因为目前SHA2并没有出现明显的弱点,由于对MD5、SHA0和SHA1出现成功的破解,NIST感觉需要一个与之前算法不同的,可替换的加密Hash算法,也就是现在的SHA3。 - RIPEMD-160
RIPEMD-160(RACE Integrity Primitives Evaluation Message Digest-160)是一个160位加密哈希函数。它旨在替代128位哈希函数MD4、MD5和RIPEMD-128。 - SM3
SM3(Shang Mi 3)是国家密码局指定的国密版本的哈希算法,此算法对输入长度小于2的64次方的比特消息,经过填充和迭代压缩,生成长度为256比特的哈希值。