在信息安全领域中,常见的信息保护手段大致可以分为保密和认证两大类。目前的认证技术分为用户的认证和对消息的认证两种方式。用户认证用于鉴别用户的身份是否合法,本书将在第4章中介绍。消息认证主要是指接收方能验证消息发送方的真实性及所发消息的内容未被篡改,也可以验证消息的顺序和及时性。消息认证可以应对网络通信中针对消息内容的攻击,如伪造消息、篡改消息内容、改变消息顺序、消息重放或者延迟。
消息认证与数字签名的区别在于,当收发者之间没有利害冲突时,消息认证对于防止第三者的破坏来说是足够的;但当收者和发者之间有利害冲突时,单纯用消息认证技术就无法解决他们之间的纠纷,此时需借助满足前述要求的数字签名技术。
在消息认证过程中,消息认证码(Message Authentication Code,MAC)是一个重要概念,产生消息认证码是消息认证的关键。消息认证码通常可以通过常规加密和散列函数产生。
如图3-7所示,用对称密钥加密消息得到的密文就可作为消息认证码。因为,消息的发送方和接收方共享一个密钥,对于接收方而言,只有消息的发送者才能够成功将消息加密。当然,在这种方式下的消息认证码无法将消息与任何一方关联,也就是发送方可以否认消息的发送,因为密钥由双方共享。
如图3-12所示,发送方用自己的私钥对消息加密得到的密文(签名)也可作为消息认证码。但是前面分析过,对整个信息内容进行加密,在实际应用中代价过高,因此不可行。
如图3-13所示,通过散列函数对明文消息计算得到的消息摘要可以作为消息认证码。目前,基于散列函数的消息认证码(HMAC)是常用的生成方式,HMAC已被用于安全套接字层/传输层安全和安全电子交易(Secure Electronic Tansaction,SET)等协议标准中。
将散列函数用于消息认证通常有以下几种方法:
1)用对称密钥对消息及附加在其后的散列值进行加密。
2)用对称密钥仅对散列值进行加密。对于不要求保密性的应用,这种方法能够降低处理代价。
3)用公钥密码中发送方的私钥仅对散列值进行加密(签名)。这种方式不仅可以提供认证,还可以提供数字签名。
4)先用公钥密码中发送方的私钥对散列值加密(签名),再用接收方的公钥对明文消息和签名进行加密,如图3-14所示。这种方式比较常用,既能保证保密性,又具有可认证性和不可否认性。