哈希算法
- 哈希函数:
在密码学中,哈希函数H是一个公开函数,用于将任意长的消息M映射为较短的、固定长度一个值H(M),作为认证符,称函数值H(M)为哈希值或哈希码或消息摘要。哈希函数的安全性要求给定数据容易计算出哈希值,但给定哈希值不能计算出数据。哈希码提供了一种错误检测能力。 - 使用哈希函数提供消息认证有6种基本使用方式:
(1)消息与哈希码链接后用单钥加密算法加密(2)用单钥加密算法仅对哈希码加密(3)用公钥加密算法和发方的秘密钥仅加密哈希码,这种方法提供了数字签名(4)消息的哈希码值用公钥加密算法和发送方的秘密钥加密后与消息链接,再对链接后的结果用单钥加密算法加密,这种方法提供了保密性和数字签名。(5)通信双方共享一个秘密值S,A计算消息M和秘密值S链接在一起的哈希值,并将此哈希值附加到M后发往B。(6)在(5)中消息与哈希值链接后再增加单钥加密计算,提供保密性。 - 哈希函数需要的条件:
- 函数的输入可以是任意长的。
- 函数的输出是固定长的。
- 已知x,求H(x)较为容易
- 已知h,求使得H(x)=h的x在计算上是不可行的,,满足这一性质称为的哈希函数为单向哈希函数。
- 已知h,求使得h(x)=h的x在计算上是不可行的,满足这一性质称为若单向哈希函数。
- 找出任意两个不同输入的x,y,使得h(x)=h(y)在计算上是不可行的,满足这一性质称为强单向哈希函数。
- 与哈希函数有关的攻击:
第I类生日攻击
第II类生日攻击
- 哈希算法:
哈希函数也称为哈希算法,目前常见的哈希算法有MD5
哈希算法、SHA
哈希算法等。现在常见的哈希算法都是迭代结构。伪代码如下:
CV0 = IV = n比特长的初始值
CVi = f(CVi-1, Yi-1); 1 <= i <= L
H(M) = CVL
MD5哈希算法
算法输入为任意长的消息,分为长为512比特的分组,输出为128比特的消息摘要。
- 对消息填充。使得其比特长在模512下为448。
- 附加消息长度。用留下的64比特以
little-endian
方式表示消息被填充前的长度。 - 对MD缓冲区初始化。算法使用128比特长的缓冲区已存储中间结果和最终哈希值,缓冲区表示为4个32比特长的寄存器ABCD,其初始值A=01234567,B=89ABCDEF, C=FEDCBA98,D=76543210。
- 以分组为单位对消息进行处理。每一分租都要经过压缩函数H(哈希函数)MD5的处理,H是算法的核心。其中又有4轮处理过程,如下
- MD5的压缩函数
安全哈希算法SHA
算法输入是小于2^64比特长的任意消息,分为512比特长的分组,输出为160比特长的消息摘要。算法框图与MD5一样,但哈希值的长度和链接变量为160比特。
算法步骤如下:
- 对消息填充。与MD5一样。
- 附加消息长度。与MD5类似,不同之处在于以
big-endian
方式填充。 - 对MD缓冲区初始化。算法使用160比特的缓冲区存储中间结果和最终的哈希值,缓冲区可表示为5个32比特长的寄存器ABCDE,其初始值为A=67452301,B=EFCDAB89,C=98BADCFB,D=10325476,E=C3D2E2F0。
- 以分组为单位对消息进行处理。框图和MD5相似。
MD5算法实现
SHA算法实现