Hash算法在信息安全方面的应用主要体现在以下的3个方面:
文件校验:我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。MD5 Hash算法的”数字指纹”特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法。
数字签名:Hash算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。对Hash值,又称”数字摘要”进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。而且这样的协议还有其他的优点。
鉴权协议:鉴权协议又被称作挑战–认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。
常见哈希函数
MD5和SHA1可以说是目前应用最广泛的Hash算法,而它们都是以MD4为基础设计的。
MD4(RFC 1320)是MIT的Ronald L.Rivest在1990年设计的,MD是Message Digest(消息摘要)的缩写。它适用在32位字长的处理器上用高速软件实现——它是基于32位操作数的位操作来实现的。
MD5(RFC 1321)是Rivest于1991年对MD4的改进版本。它对输入仍以512位分组,其输出是4个32位字的级联,与MD4相同。MD5比MD4来得复杂,并且速度较之要慢一点,但更安全,在抗分析和抗差分方面表现更好。
Hash,一般翻译做散列,也有直接音译为哈希,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。
这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。
数学表述为:h=H(M),其中H单向散列函数,M任意长度明文,h固定长度散列值。
概括来说,哈希(Hash)是将目标文本转换成具有相同长度的、不可逆的杂凑字符串(或叫做消息摘要),而加密(Encrypt)是将目标文本转换成具有不同长度的、可逆的密文。从数学角度讲,哈希和加密都是一个映射。下面正式定义两者:
一个哈希算法R=H(S)是一个多对一映射,给定目标文本S,H可以将其唯一映射为R,并且对于所有S,R具有相同的长度。由于是多对一映射,所以H不存在逆映射S=J(R)使得R转换为唯一的S。
一个加密算法R=E(S,KE)是一个一一映射,其中第二个参数叫做加密密钥,E可以将给定的明文S结合加密密钥KE唯一映射为密文R,并且存在另一个一一映射S=D(R,KD),可以结合KD将密文R唯一映射为对应明文S,其中KD叫做解密密钥。