|
|
|
用于差错控制的报文检验是根据冗余位检查报文是否受到信道干扰的影响,与之类似的报文摘要方案是计算密码校验和,即固定长度的认证码,附加在消息后面发送,根据认证码检查报文是否被篡改。设M是可变长的报文,K是发送者和接收者共享的密钥,令MD=CK(M),这就是算出的报文摘要(Message Digest),如下图所示。由于报文摘要是原报文唯一的压缩表示,代表了原来报文的特征,所以也叫作数字指纹(Digital Fingerprint)。
|
|
|
|
|
|
|
|
散列(Hash)算法将任意长度的二进制串映射为固定长度的二进制串,这个长度较小的二进制串称为散列值。散列值是一段数据唯一的、紧凑的表示形式。如果对一段明文只更改其中的一个字母,随后的散列变换都将产生不同的散列值。因为要找到散列值相同的两个不同的输入在计算上是不可能的,所以数据的散列值可以检验数据的完整性。
|
|
|
|
通常的实现方案是对任意长的明文M进行单向散列变换,计算固定长度的位串作为报文摘要。对Hash函数h=H(M)的要求如下:
|
|
|
|
|
|
|
|
|
|
(4)对于任意m,找出x,满足H(x)=m,是不可计算的。
|
|
|
|
(5)对于任意x,找出y≠x,使得H(x)=H(y),是不可计算的。
|
|
|
|
(6)找出(x,y),使得H(x)=H(y),是不可计算的。
|
|
|
|
前3项要求显而易见是实际应用和实现的需要。第4项要求就是所谓的单向性,这个条件使得攻击者不能由偷听到的m得到原来的x。第5项要求是为了防止伪造攻击,使得攻击者不能用自己制造的假消息y冒充原来的消息x。第6项要求是为了对付生日攻击的。
|
|
|
|
报文摘要可以用于加速数字签名算法,在下图中,BB发给B的报文中报文P实际上出现了两次,一次是明文,一次是密文,这显然增加了传送的数据量。如果改成下图所示的报文,KBB(A,t,P)减少为MD(P),则传送过程可以大大加快。
|
|
|
|
|
|
|
|
|
|
|