网络空间安全导论
上QQ阅读APP看书,第一时间看更新

2.3 哈希函数

哈希(Hash)算法(也称散列算法)的特别之处在于它是一种单向算法,用户可以通过Hash算法对目标信息生成一段特定长度的、唯一的Hash值,却不能通过这个Hash值重新获得目标信息。因此,Hash算法常用于不可还原的密码存储、信息完整性校验等。常见的Hash算法有MD2、MD4、MD5、HAVAL、SHA。MD5和SHA-1是最常见的Hash算法。MD5是由国际著名密码学家、麻省理工学院的Ronald Rivest教授于1991年设计的;而SHA-1有美国国家安全局的背景。

2.3.1 MD5哈希算法

MD5是计算机安全领域曾经广泛使用的一种哈希函数,为消息的完整性提供保护。对MD5加密算法的简要叙述是:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位的子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位Hash值。

MD5广泛用于各种软件的密码认证和密钥识别。MD5用的是哈希函数,它的典型应用是对一段消息(message)产生指纹(fingerprint),以防止“篡改”。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。MD5还广泛用于操作系统的登录认证,如UNIX、各类BSD系统登录密码。

MD5哈希算法的总体流程如图2.5所示,表示第i个分组,每次运算都是由前一轮的128位结果值和第i块512位上的值进行运算。

图2.5 MD5哈希算法流程

2.3.2 SHA1哈希算法

SHA1是和MD5一样流行的消息摘要算法。SHA[2]加密算法模仿MD4加密算法。SHA1设计为和数字签名算法DSA一起使用。

SHA1主要适用于数字签名标准里面定义的数字签名算法。对于长度小于264位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。SHA1无法从消息摘要中复原信息,而两个不同的消息不会产生同样的消息摘要。这样,SHA1就可以验证数据的完整性。所以,SHA1是为了保证文件完整性而提出的技术。

SHA1对于每个明文分组的摘要生成过程如下。

(1)将512位的明文分组划分为16个子明文分组,每个子明文分组为32位。

(2)申请5个32位的链接变量,记为A、B、C、D、E。

(3)16份子明文分组扩展为80份。

(4)80份子明文分组进行4轮运算。

(5)链接变量与初始链接变量进行求和运算。

(6)链接变量作为下一个明文分组的输入重复进行以上操作。

(7)最后,5个链接变量里面的数据就是SHA1摘要。

图2.6为SHA1哈希算法流程图。

图2.6 SHA1哈希算法流程

SHA1哈希算法可以采用不超过264位的数据输入,并产生一个160位的摘要。输入被划分为512位的块,并单独处理。160位缓冲器用来保存哈希函数的中间和最后结果。缓冲器可以由5个32位的寄存器(A、B、C、D和E)来表示。SHA1是一种比MD5更安全的算法,理论上,凡是采取“消息摘要”方式的数字验证算法都是会存在“碰撞”的——也就是两个不同的消息算出的消息摘要相同。但是安全性高的算法要找到指定数据的“碰撞”很困难,而利用公式来计算“碰撞”就更困难。

SHA1与MD5的差异主要在于:SHA1对任意长度明文的预处理和MD5的过程是一样的,即预处理完后的明文长度是512位的整数倍,但是有一点不同,那就是SHA1的原始报文长度不能超过264,然后SHA1才能生成160位的报文摘要。SHA1算法简单而且紧凑,容易在计算机上实现。SHA1与MD5的比较如表2-1所示。

表2-1 SHA1与MD5的比较

在安全性方面,SHA1所产生的摘要比MD5长32位。若两种哈希函数在结构上没有任何问题的话,SHA1比MD5更安全。

在速度方面,两种方法都是主要考虑以32位处理器为基础的系统结构。但SHA1的运算步骤比MD5多了16步,而且SHA1记录单元的长度也比MD5多了32位。因此,若是以硬件来实现SHA1,其速度大约比MD5慢了25%。

在简易性方面,两种方法都相当简单,在实现上不需要很复杂的程序或是大量存储空间。然而总体上来讲,SHA1对每一步骤的操作描述还是要比MD5简单。