注:好记性不如烂笔头。参阅《密码编码学与网络安全--原理与实践》(第六版,William Stallings著)和《区块链原理、设计与应用》(作者杨保华、陈昌)。如有错漏,还望斧正。
Hash值在应用中又常被称为指纹或摘要,Hash算法的核心思想也经常被应用到基于内容的编址或命名算法中
常见的Hash算法包括MD5和SHA系列算法
MD5:对输入以512位进行分组,其输出是128位。MD5被证明不具备“强抗碰撞性”
SHA:一个Hash函数族。包括SHA-1(输出为160位的Hash值,不具备“强抗碰撞性”);SHA-2(SHA-224、SHA-256、SHA-384和SHA-512);SHA-3
Hash算法分为计算敏感性(计算资源是瓶颈,主频越高的CPU运行Hash算法的速度也越快)和非计算敏感性(如scrypt算法,计算过程需要大量的内存资源,可以避免算力攻击)
数字摘要:利用Hash函数的抗碰撞性特点,可以确保内容未被篡改
Hash算法不是一种加密算法,不能用于对信息的保护。常用于对口令的保存上,例如用户登录网站需要需要通过用户名和密码来进行验证,网站后台仅保存口令的Hash值。
为了防止以空间换时间的攻击方式,如字典攻击和彩虹表攻击(只保存一条Hash链的首尾值,相对字典攻击可以节省存储空间),采用加盐的方法。保存的不是口令明文的Hash值,而是口令明文再加上一段随机字符串(即“盐”)之后的Hash值。Hash结果和“盐”分别存放在不同的地方,这样只要不是两者同时泄漏,攻击者就很难破解。
算法类型 | 特点 | 优势 | 缺陷 | 代表算法 |
对称加密 | 加解密的密钥相同 | 计算效率高,加密强度高 | 需提前共享密钥,易泄漏 | DES、3DES、AES、IDEA |
非对称加密 | 加解密的密钥不相关 | 无需提前共享密钥 | 计算效率低,仍存在中间人攻击可能 | RSA、ELGamal、椭圆曲线系列算法 |
对于对称加密算法,在不安全信道中提前分发密钥的方式有Diffie-Hellman协议或非对称加密方式
对称加密算法从实现原理上可以分为两种,分组密码和序列密码(又称流密码,代表算法RC4)
对称加密算法不能用于签名场景
非对称加密算法:
RSA,利用了对大数进行质因子分解困难的特性,
Diffie-Hellman密钥交换:基于离散对数无法快速求解,可以在不安全的通道上,双方协商一个密钥
ElGamal:利用模运算下求离散对数困难的特点,被应用在PGP等安全工具中。
椭圆曲线算法(ECC):基于对椭圆曲线上特定点进行特殊乘法逆运算难以计算的特性