密码学基础(一)——哈希算法
一、常用密码学算法分类
哈希算法:哈希算法不可逆,包括:MD4、MD5、hash1、ripeMD160、SHA256、SHA3、Keccak256、国家标准SM3(国家密码管理局)
加密/解密算法:加密解密算法可逆,但是必须要有秘钥,对称加密,非对称加密,数字签名算法DSA
编码/解码算法:编码解码算法可逆,无需密钥,Base64编码,Base58编码解码。
二、hash定义与特点
定义:把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换称为“压缩映射”,hash值别称:数字摘要,消息摘要。
特点:
正向容易:给定任意一段明文,可在短期(有限时间范围与有限资源内)得到hash值
逆向复杂:不可逆性,不能反向推导出明文
抗差异明显:明文中的小改动,造成结果的大幅度变化
抗碰撞性:不同的明文得到同样的hash值得概率小;同时即使可以得到相同的hash,但是找到这样的hash值的难度大
应用场景:
检测软件、文件是否篡改;伪随机数生成;一次性口令;密码存储;数字签名(数字文件的hash)
三、流行的哈希算法
1. MD系列
- MD-4是Ronald L.Rivest在1990年设计的,MD是Message Digest的缩写,输出为128位。
- MD-5是MD-4的改进版本,输出也是128为,相对更复杂,计算速度慢一些,安全性高。但是MD-5被证明不具备强碰撞性,因此不适用与安全性要求极高的商用场景。目前,在主流的WEB开发中,依然使用它进行密码的保存。
2. SHA系列
- SHA(Secure Hash Algorithm,安全哈希算法)属于hash算法系列。1993年,由NIST(美国标准技术研究所)发布的hash算法。
- 1995年,SHA-1面世,输出为长度160位的hash值,SHA-1与MD-4具有相同的原理,因此最终也被证明不具备强碰撞性。
- 为了提高安全性,NIST设计了SHA-2系列算法,与SHA-1的原理基本类似,包含:SHA-224、SHA-256、SHA-386、SHA-512。
- SHA-3,之前名为Keccak算法,是一个加密杂凑算法,输出长度有512、394、256、224。
- SHA-3的安全性极高,与之前的MD以及SHA系列算法完全不同。
四、哈希安全防御
哈希加“盐”(salt),所谓加“盐”,就是在明文的随机位置加上一串随机的字符串再进行hash,防止彩虹表攻击。
五、哈希算法选型和使用
哈希算法选型
链式哈希结构
区块链提供了难以篡改的可信数据源。由于哈希算法的单向性,可以从前一个数据块原文计算出下一个数据块所用的哈希值输入,但已知一个哈希值输入,难以反推出所有可能的数据块原文。