跳到主要内容

消息摘要算法总结

消息摘要(Message Digest)又称为数字摘要(Digital Digest)。它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向 Hash 加密函数对消息进行作用而产生。如果消息在途中改变了,则接收者通过对收到消息的新产生的摘要与原摘要比较,就可知道消息是否被改变了。因此消息摘要保证了消息的完整性。

消息摘要采用单向 Hash 函数将需加密的明文"摘要"成一串固定位数(如 128bit)的密文,这一串密文亦称为数字指纹(Finger Print),它有固定的长度,且不同的明文摘要成密文,其结果总是不同的,而同样的明文其摘要必定一致。这样这串摘要便可成为验证明文是否是“真身”的“指纹”了。

消息摘要具有不可逆性,在消息摘要生成过程中,会丢失很多原文的信息,而且无法找回。一个好的摘要算法,是极难产生 Hash 碰撞的,也就是找到另一段明文经计算后产生相同的摘要。

MD5

MD 是应用非常广泛的一个算法家族,尤其是 MD5(Message-Digest Algorithm 5,消息摘要算法版本 5),它由 MD2、MD3、MD4 发展而来,由 Ron Rivest(RSA 公司)在 1992 年提出,目前被广泛应用于数据完整性校验、数据(消息)摘要、数据加密等。MD2、MD4、MD5 都产生 16 字节(128 位)的校验值,一般用 32 位十六进制数表示。MD2 的算法较慢但相对安全,MD4 速度很快,但安全性下降,MD5 比 MD4 更安全、速度更快。

目前在互联网上进行大文件传输时,都要得用 MD5 算法产生一个与文件匹配的、存储 MD5 值的文本文件(后缀名为 .md5 或.md5sum),这样接收者在接收到文件后,就可以利用与 SFV 类似的方法来检查文件完整性,目前绝大多数大型软件公司或开源组织都是以这种方式来校验数据完整性,而且部分操作系统也使用此算法来对用户密码进行加密,另外,它也是目前计算机犯罪中数据取证的最常用算法。与 MD5 相关的工具有很多,如 WinMD5 等。

SHA

SHA(Secure Hash Algorithm)是由美国专门制定密码算法的标准机构——美国国家标准技术研究院(NIST)制定的,SHA 系列算法的摘要长度分别为:SHA-1 为 20 字节(160 位)、SHA-224 为 32 字节(224 位)、SHA-256 为 32 字节(256 位)、SHA-384 为 48 字节(384 位)、SHA-512 为 64 字节(512 位),由于它产生的数据摘要的长度更长,因此更难以发生碰撞,因此较之 MD5 更为安全,它是未来数据摘要算法的发展方向。由于 SHA 系列算法的数据摘要长度较长,因此其运算速度与 MD5 相比,也相对较慢。

目前 SHA1 的应用较为广泛,主要应用于 CA 和数字证书中,另外在目前互联网中流行的 BT 软件中,也是使用 SHA1 来进行文件校验的。

MAC

MAC 算法 (Message Authentication Codes 消息认证码算法) 含有密钥的散列函数算法,兼容了 MD 和 SHA 算法的特性,并在此基础上加上了密钥。因此 MAC 算法也经常被称作 HMAC 算法。消息的散列值由只有通信双方知道的密钥来控制。此时 Hash 值称作 MAC。

经过 MAC 算法得到的摘要值也可以使用十六进制编码表示,其摘要值得长度与实现算法的摘要值长度相同。例如 HmacSHA 算法得到的摘要长度就是 SHA1 算法得到的摘要长度,都是 160 位二进制数,换算成十六进制的编码为 40 位。

流程分析:

甲乙双方进行数据交换可以采取如下流程:

1.甲方向乙方公布摘要算法(就是指定要使用的摘要算法名)

2.甲乙双方按照约定构造密钥,双方拥有相同的密钥(一般是一方构造密钥后通知另外一方,此过程不需要通过程序实现,就是双方约定个字符串,但是这个字符串可不是随便设定的,也是通过相关算法获取的)

3.甲方使用密钥对消息做摘要处理,然后将消息和生成的摘要消息一同发送给乙方

4.乙方收到消息后,使用甲方已经公布的摘要算法+约定好的密钥 对收到的消息进行摘要处理。然后比对自己的摘要消息和甲方发过来的摘要消息。甄别消息是否是甲方发送过来的。