1. 简介
2. 摘要算法
2.1 定义
摘要算法: 摘要算法是一种对“信息”进行【摘要化】处理的算法。(好比一篇论文的摘要部分。通过了解文章的【摘要】,简要了解下文章的主要内容)数据摘要算法也被称为哈希(Hash)算法或散列算法。
2.2 特点
(1)无论输入的消息有多长,计算出来的消息摘要的长度总是固定的。例如:应用 MD5 算法摘要的消息有 128 个比特位,用SHA-1 算法摘要的消息最终有 160 个比特位的输出,SHA256 可以产生 256 个比特位的消息摘要。一般摘要的最终输出越长,该摘要算法就越安全。变长输入,定长输出。
(2)只要输入的消息不同,对其进行摘要以后产生的摘要消息也必不相同;但相同的输入必会产生相同的输出。如果输入改变了,输出也改变。
(3)消息摘要是单向、不可逆的。只能进行正向的信息摘要,即无法从摘要中恢复出任何的原始消息,甚至根本就找不到任何与原信息相关的信息。当然,可以采用强力攻击的方法,即尝试每一个可能的信息,计算其摘要,看看是否与已有的摘要相同,如果这样做,最终肯定会恢复出摘要的消息。但实际上,要得到的信息可能是无穷个消息之一,所以这种强力攻击几乎是无效的。
(4)好的摘要算法,没有人能从中找到“碰撞”,虽然“碰撞”是肯定存在的。即无法找到两条不同消息,使它们的摘要相同。从理论上来说,不管使用什么样的摘要算法,必然存在 2 个不同的消息对应同样的摘要。因为输入是一个无穷集合,而输出是一个有限集合,所以从数学上来说,必然存在多对一的关系。但是实际上,很难或者说根本不可能人为的造出具有同样摘要的 2 个不同消息。
2.3 作用
(1)消息摘要保证了消息的完整性。接收者在事先知道消息的原始摘要的前提下,如果发送者发送的消息,在传输过程中被篡改,那么接收者收到消息后,同样的摘要算法计算其摘要,如果新摘要与发送者原始摘要不同,那么接收者就知道消息被篡改了。
(2)使用摘要算法作为数字签名算法。通过数字签名还能实现对信源的身份识别(认证),即确定“信源”是否是信宿意定的通信伙伴。 数字签名应该具有唯一性,不可伪造性,不可逆性。
2.4 种类
常见的信息摘要算法有:MD2/4/5;SHA1/SHA224/SHA256/SHA384/SHA512;SM3算法;MAC算法等。
2.4.1 MD(Message Digest)——消息摘要
MD 算法在网络应用上也比较常见,比如:在某个网站上下载一个文件,通常它会标识该文件的 MD5 值,当下载者完成下载文件到本地之后,使用工具对下载的文件执行 MD5 计算,求出一个 MD5 摘要值,与网站上给出的参考 MD5 值进行对比;如果两者相等,则表示下载的文件是可靠的,没有被篡改过的;反之,如果 MD5 值对不上,则表明下载的文件是被篡改过的,可能是网络攻击者投放的病毒携带文件或者是在下载的过程中文件出现了损坏等情况,此时应该对文件进行删除操作。
如上图:可计算一个压缩文件的 MD5 值。
MD 系列的算法主要有 MD2、MD4、MD5,数字值越大表示 MD 算法的版本越高,从安全性上说:MD5 > MD4 > MD2。
MD系列的信息摘要算法,输出的信息摘要长度都是固定的 128bits(16字节),当不同的信息输入时,产生的信息摘要也不相同;反之,当信息摘要相同,可以认为信息的明文是相同的。
2.4.2 SHA(Secure Hash Algorithm)——安全散列
SHA系列的算法从版本上划分有 SHA-1 和 SHA-2。它们两者之间在构造上和签名的位数上都有不同和签名的位长。
SHA-1 就是我们常见到的 SHA1;SHA-2 主要有 SHA224、SHA256、SHA384、SHA512等,不同的数字代表信息摘要输出的位数。与 MD 系列算法类似,数字值越高表示摘要算法的安全性越高,计算的复杂性也越大;但不同于 MD 算法,SHA 算法每个算法输出的信息摘要长度是不一样的。
2.4.3 SM(Shangyong Mima)——国密算法(商用密码)
国密即国家密码局认定的国产密码算法,即商用密码。 在国密算法的列表中,SM3 算法就是实现了类似 MD 算法和 SHA 算法的信息摘要算法。它和其他 2 种摘要算法一样,都是不同长度的信息输入,产生固定长度的摘要输出。不同的是,它输出的信息摘要长度固定为 256bits,即 32 字节。在实际使用过程中,SM3 算法比较少会单独使用,而是配合SM2【非对称加密算法】配合使用,实现数字验签和消息验签的应用。
2.4.4 MAC(Message Authentication Code):消息认证码
MAC 算法是带密钥的 Hash 函数:消息的散列值由只有通信双方才知道的秘密密钥 Key 来控制。
MAC 算法是一个统称,它很多种实现,在 POS 行业,常用的 MAC 算法有 CUP 模式、EMV2000 模式、或者自定义形式的MAC 算法。MAC 算法的核心是如何将输入数据分组,利用 MAC KEY 做一些 XOR、移位、加密等操作,使得输入数据散列化,最后再利用 MAC KEY 执行加密操作(通常为对称加密)得到 MAC 值。
2.5 各种摘要算法的比较
信息摘要算法 | 信息输入长度 | 摘要输出长度 | 密钥 | 安全性 |
MD5 | * | 128bits(16字节) | 无 | 低,有被碰撞的可能性 |
SHA1 | <2^64 | 160bits(20字节) | 无 | 低,有被碰撞的可能性 |
SHA224 | <2^64 | 224bits(28字节) | 无 | 较高 |
SHA256 | <2^64 | 256bits(32字节) | 无 | 高,推荐使用,最长使用 |
SHA384 | <2^128 | 384bits(48字节) | 无 | 高,推荐使用 |
SHA512 | <2^128 | 512bits(64字节) | 无 | 高,高安全性场景下推荐使用 |
SM3 | * | 256bits(32字节) | 无 | 高,推荐使用 |
MAC | * | 不同的MAC算法不同,有的是8字节,有的是16字节 | 有 | 高,除非密钥被破解 |
参考
1.消息摘要及其算法扫盲贴 2.常见的信息摘要算法 3.数字签名与数字证书技术简介