基于对称密码体制实现的消息认证技术与HMAC,因要求收发双方有共享密钥,因此在应用上有以下局限性。
(1)消息的认证码只可通过自己与指定人检验,不能实现多人检验或公开验证。
(2)消息认证码的生成者与检验者得有相同的利益,不可以互相抵赖与伪造。
(3)第三方不能裁定生成者与验证者的争议。
用公钥密码体制进行消息的完整性认证为信息系统里最常用的方式之一,它一般通过消息的产生者对消息的杂凑值进行数字签名的方法实现。与基于对称密码体制实现的消息认证技术和HMAC比较有以下优势。
(1)在保证消息产生者的公钥真实性和有效性的前提下,可实现消息的公开验证性。
(2)由于消息产生者私钥的私有性,可有效地防止消息产生者的抵赖和任何他人的伪造。
(3)在消息的产生者和验证者之间出现争议时,可由第三方仲裁。
1.公钥密码体制实现的消息认证
设消息或数据为M,H为杂凑函数,H(M)是M的杂凑值。只要将H(M)“安全”地保存,就能实现消息M的完整性验证。具体地,验证者计算M的杂凑值H(M),之后和“安全”保存的H(M)比较,若二者相同,那么验证者相信消息M是完整的,就是说未被修改过。
注意,我们说道杂凑值H(M)要“安全”地保存,那么依靠什么手段来实现消息M的杂凑值的安全保存呢?通常的方法是使用公钥数字签名。具体来说,消息M的拥有者或产生者首先计算杂凑值H(M),之后用自己的私钥对H(M)实施数字签名,再把(M,Sig(H(M)))存储或发送给收方。验证者要想验证消息M的完整性,产生计算M的杂凑值,得到H(M),记为h1。并且用消息M的拥有者或产生者的公钥对Sig(H(M))加密,获得H(M),记成h2。然后看h1和h2是否相同,若相同,那么验证者知道消息M是完整的,也就是未被修改过。
由于使用只有消息M的拥有者或产生者才有的私钥对H(M)进行签名,因此其他任何人没有办法伪造消息M及其签名。
注意,用公钥密码体制达到消息的完整性认证技术对与公开验证有非常明显的优势,缺点是计算量大大高于对称密码体制。
2.数字信封
数字信封不但实现了消息的完整性,还实现了消息的机密性和真实性。
使用的算法是128bit密钥的分组密码算法。协议如下。
第一步,A产生一个128bit会话密钥K计算E(M,Sig(H(M)))和PEB(K),并把{Ek(M,SigA(H(M))),PEB(K)}(一般叫做数字信封)传给B。
第二步,B用自己的私钥脱密PEB(K)产生到会话密钥K,继而再用K对E(M,SigA(H(M)))脱密得到M和SigA(H(M)),用A的公钥加密SigA(H(M))产生H(M),记成h1,且计算M的杂凑值,记成h2,比较h1与h2是不是相等,若相等则接受M。
在该协议中,A、B双方通过会话密钥K的机密性来保证消息M的机密性,而会话密钥K的机密性是用户A用B的公钥加密保护的。用户A用自己的私钥对消息M的杂凑值实施签名来保证消息的完整性,用户B用A的公钥来验证A的签名,以实现消息M的真实性认证。