用于差错控制的报文检验是根据冗余位检查报文是否受到信道干扰的影响,与之类似的报文摘要方案是计算密码检验和,即固定长度的认证码,附加在消息后面发送,根据认证码检验报文是否被篡改。设M 是可变长的报文,K 是发送者和接收者共享的密钥,报文摘要为MD=CK( M)。由于报文摘要是原报文唯一的压缩表示,代表了原报文的特征,所以也叫作数字指纹。
散列(Hash)算法将任意长度的二进制串映射为固定长度的二进制串,这个长度较小的二进制串称为散列值。散列值是一段数据唯一的、紧凑的表示形式。如果对一段明文只更改其中一个字母,随后的散列变换都将产生不同的散列值。要找到散列值相同的两个不同的输入在计算上是不可能的,所以数据的散列值可以检验数据的完整性。通常的实现方案是对任意长的明文M 进行单向散列变换,计算固定长度的比特串,作为报文摘要。对Hash 函数h=H ( M)的要求如下:
(1)可用于任意大小的数据块。
(2)能产生固定大小的输出。
(3)软/硬件容易实现。
(4)对于任意m,找出x,满足 H(x)=m,是不可计算的。
(5)对于任意x,找出y≠x,使得 H(x)=H(y),是不可计算的。(www.xing528.com)
(6)找出(x,y),使得 H(x)=H(y),是不可计算的。
显而易见,前3 项要求是实际应用和实现的需要。第4 项要求是所谓的单向性,这个条件使得攻击者不能由窃听到的m 得到原来x。第5 项要求是为了防止伪造攻击,使得攻击者不能用自己制造的假消息y 冒充原来的消息x。
如图9.15所示为报文摘要使用的过程。在发送端,明文M 通过报文摘要算法H,得到报文摘要MD,报文摘要MD 经过共享密钥K 进行加密,附在明文M 的后面发送。在接收端,首先将明文M 和报文摘要MD 分离,将加密过的报文摘要进行解密,得出原始MD。后将明文M 通过报文摘要算法H 得到报文摘要,与原始MD 进行比较,如果一致,说明明文M 没有被篡改,反之,明文M 被篡改。
图9.15 报文摘要过程
当前使用最广泛的报文摘要算法是MDT。安全散列算法(Secure Hash Algorithm,SHA)是另一个众所周知的报文摘要函数。所有这些函数做的工作几乎一样,即由任意长度的输入消息计算出固定长度的加密检验和。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。