这一算法的安全源于其单向性,而不是其内部工作方式的保密性。更严格地说, H(M) 具有以下属性:
给定 M,很容易计算出 h
给定 h,很难计算出满足 H(M) = h 的 M
给定 M,很难找到一则消息 M',使得 H(M) = H(M')
散列法是数字签名的基本部分,将在下面讨论。 RSA 的 Ron Rivest 设计了 MD4(消息摘要)和 MD5(RSA 是一家安全公司的名称,它由该公司创始人 Ron Rivest、Adi Shamir 和 Leonard Adleman 的姓氏首字母组成。MD4 和 MD5 产生一个 128 位散列。SHA (安全散列法算法),由 National Institute of Standards and Technology (NIST) 与 National Security Agency (NSA) 联合设计,它产生一个 160 位散列,用于数字签名算法 (DSA)。SHA-1,在某些文献中简称为 SHA,是 1994 年发表的 SHA 的修订版。SHA 和 SHA-1 都是安全散列标准 (SHS) 的一部分,与 MD4 函数系列有共同之处。MD4、MD5 和 SHA 是单向散列函数的一些示例。
作为一个例子,根据 MD5 算法为外观类似的消息生成了下面的 128 位散列。
表 1. 使用 MD5 的散列值 原始消息 散列值(用十六进制表示)
a quick brown fox jumped over a lazy dog 13b5eeb338c2318b790f2ebccb91756f
a quick blue fox jumped over a lazy dog 32c63351ac1c7070ab0f7d5e017dbcea
a quick brown dog jumped over a lazy fox a4c3b4cd38ade6b5e2e101d879a966f5
对于任意长度的消息,此算法都将生成一个代表该消息的固定长度的散列。从表 1 可以清楚地看出,即使稍微修改消息,也会更改其散列。要找出散列值相同的一个替换消息,将是一件耗费时间的事情。
到目前为止,我们已经讨论了不使用密钥的单向函数。另一方面,消息认证代码 (MAC) 是一种使用密钥的单向函数,可以用它们在系统上或用户之间认证文件或消息。 HMAC(用于消息认证的密钥散列法)就是这种函数的一个例子。
对称密码
对称密码,在与密钥联合应用时,将明文转换为密文。密码也可以使用 相同的密钥将密文恢复为明文。所谓对称性,即指加密和解密使用完全相同的密钥。加密和解密有两个相关的函数,如下所示:
Ek(M) = C,其中 M 是明文,C 是密文,k 是密钥
Dk(C) = M,其中 C、M 和 k 的意义同上