电子商务和网上银行等应用中必须保证要登录的Web服务器是真实的,以免重要信息被非法窃取。SSL证书利用数字签名来验证通信对端的身份。
非对称密钥算法可以用来实现数字签名。由于通过私钥加密后的数据只能利用对应的公钥进行解密,因此根据解密是否成功,就可以判断发送者的身份,如同发送者对数据进行了“签名”。例如,Alice使用自己的私钥对一段固定的信息加密后发
给Bob,Bob利用Alice的公钥解密,如果解密结果与固定信息相同,那么就能够确认信息的发送者为Alice,这个过程就称为数字签名。
SSL客户端必须验证SSL服务器的身份,SSL服务器是否验证SSL客户端的身份,则由SSL服务器决定。
使用数字签名验证身份时,需要确保被验证者的公钥是真实的,否则,非法用户可能会冒充被验证者与验证者通信。如错误!未找到引用源。Cindy冒充Bob,将自己的公钥发给 Alice,并利用自己的私钥计算出签名发送给Alice,Alice利用“Bob”的公钥(实际上为 Cindy的公钥)成功验证该签名,则Alice认为Bob的身份验证成功,而实际上与Alice通信的是冒充Bob的Cindy。SSL利用PKI提供的机制保证公钥的真实性。
为了避免网络中传输的数据被非法篡改,SSL利用基于MD5或SHA的MAC算法来保证消息的完整性。
MAC算法是在密钥参与下的数据摘要算法,能将密钥和任意长度的数据转换为固定长度的数据。利用MAC算法验证消息完整性的过程。发送者在密钥的参与下,利用MAC算法计算出消息的MAC值,并将其加在消息之后发送给接收者。接收者利用同样的密钥和MAC算法计算出消息的MAC值,并与接收到的MAC值比较。如果二者相同,则报文没有改变;否则,报文在传输过程中被修改,接收者将丢弃该报文。
MAC算法具有如下特征,使其能够用来验证消息的完整性:
消息的任何改变,都会引起输出的固定长度数据产生变化。通过比较MAC值,可以保证接收者能够发现消息的改变。
MAC算法需要密钥的参与,因此没有密钥的非法用户在改变消息的内容后,无法添加正确的 MAC值,从而保证非法用户无法随意修改消息内容。
MAC算法要求通信双方具有相同的密钥,否则 MAC值验证将会失败。因此,利用MAC算法验证消息完整性之前,需要在通信两端部署相同的密钥。