消息的保密性可由密码技术保证,消息的完整性和抗否认性也是消息安全重要的内容。保证消息的完整性和抗否认性主要通过消息认证和数字签名实现。
产生认证符的方法分3类:消息加密,将明文加密后以密文作为认证符;消息认证码,用一个密钥控制的公开函数作用后,产生固定长度的数值作为认证符,也称密码校验和;散列函数,定义函数可将任意长度的消息映射为定长的散列值,以散列值作为认证符。消息认证与数字签名通常都需要与散列函数结合起来使用。
1.消息认证方案
消息认证即验证消息的完整性。当接收方收到发送方消息(报文)时,接收方能验证收到消息是真实的、未被篡改的。这里包含两个含义:一是验证消息的发送者是真正的而非冒充,即数据起源认证;二是验证消息传送过程中未被篡改、重放或延迟。消息认证使接收者能识别消息的来源、内容真伪、时间有效性等。消息认证只在相互通信双方之间进行,不允许第三者进行上述认证。
消息认证码(Message Authentication Codes,MAC)采用共享的秘密密钥,是一种广泛使用的消息认证技术,其原理是:发送方A要发送消息M时,使用一个双方共享的密钥k产生一个短小的定长数据块,即消息认证码MAC=Tk(M);将MAC附加在消息的后面(发送报文的一部分)发送给接收方B;接收方对收到的消息使用相同的密钥k执行相同的计算,得到新的MAC;接收方将收到的MAC与计算得到的MAC进行比较,如相匹配,那么可保证报文在传输过程中维持了完整性。
完整性的含义:①接收者确信报文未被更改过。如修改了消息而不修改MAC,接收者重新计算得到的MAC将不同于接收到的MAC。由于MAC的生成使用了双方共享的秘密密钥,攻击者不能更改MAC来对应修改过的消息。②接收者确信报文来自真实的发送者。因无其他人知道密钥,所以没有人能伪造出消息及其对应的MAC。消息认证过程如图10-7。
图10-7 消息认证码的使用
以上过程,消息明文传送,只提供消息认证而不提供保密功能。机密性可通过使用MAC算法之前或之后的加密来实现。
常用构造MAC的方法:利用已有的分组密码构造,如利用DES构造的CBC-MAC;利用已有的Hash函数构造等。
2.散列函数法
散列函数H(Hash函数),典型的“多到一”函数,其输入为一个可变长x,输出为一个固定长的串h,一般128位或160位,比输入串短,该串h被称为输入x的Hash值,或称消息摘要MD-MessageDigest、指纹、密码校验和或消息完整性校验,记作h=H(x)或MD=H(x)。为防止传输和存储的消息被有意或无意篡改,采用散列函数对消息进行运算生成消息摘要,附在消息之后发出或与消息一起存储。这个方法在报文防伪中起重要的作用。
Hash函数可用于数字签名、消息的完整性检测、消息的起源认证检测等。消息摘要采用一种单向散列算法将一个消息进行换算。在消息摘要算法中,文件数据作为单向散列运算的输入,该输入通过Hash函数产生一个散列值。如文件被改动了,散列值就会相应地改变,接收者即能检测到这种改动过的痕迹。从理论上讲,攻击者不可能制造一个替用的消息来产生一个完全相同的消息摘要。
(1)散列函数的特性
一致性:相同的输入产生相同的输出。
随机性:消息摘要外观是随机的,以防被猜出源消息。(www.xing528.com)
唯一性:几乎不可能找到两个消息产生相同的消息摘要。
单向性:如给出输出,很难确定输入消息。
(2)散列函数用于消息认证
发送者A向接收者B发送消息M,将散列函数用于消息认证的基本过程是:发送者将消息M作为单向散列函数H的输入,得到消息摘要:记作h=H(M)或MD=H(M);A将消息摘要H(M)连消息M一起发送给B;B将消息与消息摘要分离,并利用消息生成消息摘要;比较两消息摘要,如果相同,则消息在传送期间没被更改。
大部分情况下Hash函数不需要密钥,但根据应用不同,可以给Hash函数加密钥,用于保护Hash结果的完整性,如HMAC。
如发送者使用带密钥的Hash函数来产生Hash值,由于攻击者不知道密钥(发送文件时一般不会把密钥附带在文件上),所以,即使攻击者产生了假冒的Hash结果,接收者利用密钥进行验证的时同样会发现文件遭到修改,从而保证传输文件的完整性。利用上述方法产生的Hash结果就成为消息认证码MAC。
目前,常用散列函数有消息摘要4(MD4)算法、消息摘要5(MD5)算法和安全散列函数(SHA)。常用消息摘要产生算法是RSA-MD2和RSA-MD5。
3.MD5算法
MD5被认为是最安全的Hash算法之一,在很多应用中作为标准来使用。
MD5算法按512位进行处理,经过填充后的信息长度为512的倍数。首先对信息进行填充,用首位为1,后面全为0的填充信息填充,填充的信息长度为l~512位,使信息长度等于K倍的512,来填充64位的原始信息的长度。如图10-8所示。
图10-8 MD5算法的主要过程
然后对消息依次且并每次处理512位,每次进行4轮,每轮16步总共64步的消息变换处理,每次输出结果为128位,然后把前一次的输出作为下一次消息变换的输入初始值(第一次初始值算法已固定),这样最后输出一个128位的杂凑结果。如图10-9所示。
图10-9 MD5算法的块处理
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。