Hash算法
Hash(哈希或散列)算法,又常被称为指纹(fingerprint)或摘要(digest)算法,可以将任意长度的二进制明文串映射为较短的(通常是固定长度的)二进制串(Hash 值。
哈希算法特性
- 正向快速:给定原文和 Hash 算法,在有限时间和有限资源内能计算得到 Hash 值;
- 逆向困难:给定(若干)Hash 值,在有限时间内无法(基本不可能)逆推出原文;
- 输入敏感:原始输入信息发生任何改变,新产生的 Hash 值都应该发生很大变化;
- 碰撞避免:很难找到两段内容不同的明文,使得它们的 Hash 值一致(即发生碰撞)。
MD 算法
- MD4(RFC 1320)是 MIT 的 Ronald L. Rivest 在 1990 年设计的,其输出为 128 位。
MD5(RFC 1321)是 Rivest 于 1991 年对 MD4 的改进版本。它对输入仍以 512 位进行分组,其输出是 128 位。
SHA
首个实现 SHA-0 算法于 1993 年问世,1998 年即遭破解。
- 随后的修订版本 SHA-1 算法在 1995 年面世,它的输出为长度 160 位的 Hash 值,安全性更好(已被碰撞破解)。
- NIST 后来制定出更安全的 SHA-224、SHA-256、SHA-384,和 SHA-512 算法(统称为 SHA-2 算法)。
-
SM3
中国密码管理局于 2010 年 12 月 17 日发布了GM/T 0004-2012 《SM3 密码杂凑算法》,建立了国内商用密码体系中的公开 Hash 算法标准,已经被广泛应用在数字签名和认证等场景中。
数字摘要
数字摘要是对原始的数字内容进行 Hash 运算,获取唯一的摘要值。利用 Hash 函数抗碰撞性特点,数字摘要可以检测内容是否被篡改过。有些网站在提供文件下载时,会同时提供相应的数字摘要值。用户下载原始文件后可以在本地自行计算摘要值,并与所提供摘要值进行比对,以确保文件内容没有被篡改过
哈希算法攻击
Hash 算法并不是一种加密算法,不能用于对信息的保护。
Hash的应用场景
hash算法具有逆向困难的特性,利用 Hash 的防碰撞特性,后台数据库可以仅保存用户口令的 Hash 值,这样每次通过 Hash 值比对,即可判断输入口令是否正确。即便数据库泄露了,攻击者也无法轻易从 Hash 值还原回口令。
Hash的攻击
有时用户设置口令的安全强度不够,采用了一些常见的字符串,如 password、123456 等。有人专门搜集了这些常见口令,计算对应的 Hash 值,制作成字典。这样通过 Hash 值可以快速反查到原始口令。这一类型以空间换时间的攻击方法包括字典攻击和彩虹表攻击(只保存一条 Hash 链的首尾值,相对字典攻击可以节省存储空间)等。
Hash攻击的解决方案
采用加盐(Salt)的方法。保存的不是原文的直接 Hash 值,而是原文再加上一段随机字符串(即“盐”)之后的 Hash 值。Hash 结果和“盐”分别存放在不同的地方,这样只要不是两者同时泄露,攻击者很难进行破解。
加解密算法
加解密算法是现代密码学核心技术,从设计理念和应用场景上可以分为两大基本类型 现代密码学算法的安全性是通过数学难题来提供的,并非通过对算法自身的实现过程进行保。
加密过程
现代加解密系统的典型组件包括算法和密钥(包括加密密钥、解密密钥)。 一般来说,密钥需要在加密前按照特定算法随机生成,长度越长,则加密强度越大。
| 算法类型 | 特点 | 优势 | 缺陷 | 代表算法 |
|---|---|---|---|---|
| 对称加密 | 加解密的密钥相同 | 计算效率高,加密强度高 | 需提前共享密钥,易泄露 | DES、3DES、AES、IDEA |
| 非对称加密 | 加解密的密钥不相同 | 无需提前共享密钥 | 计算效率低,存在中间人攻击可能 | RSA、ElGamal、椭圆曲线算法 |
对称加密算法
加密和解密过程的密钥是相同的。 优点:加密和解密过程的密钥是相同的。 缺点:参与方需要提前持有密钥,一旦有人泄露则系统安全性被破坏;
非对称加密算法
加密秘钥和解密秘钥是不同的,分别被称为公钥(public key)和私钥(private key) 优点:优点是公私钥是分开的,无需安全通道分发秘钥。 缺点:处理速度相对对称加密算法慢,加密强度不如对称加密;
数字签名
签名的过程
利用非对称加密算法的特性,
- 对文件内容进行一次摘要(接收方对比摘要)。
- 利用非对称加密特性(公私钥),用发送方的私钥对摘要内容进行加密,把签名和原文件一同发送给接收方。
- 接收方收到签名和原文件后,使用发送方的公钥获取摘要内容(步骤一中的摘要内容)。
- 接受方自己对文件进行摘要,然后对比自己摘要的内容和发送方的摘要内容是否相同。
