SSL工作原理( 四 )


SSL工作原理

文章插图
 
图1 伪造公钥
2.3 消息完整性验证为了避免网络中传输的数据被非法篡改 , SSL利用基于MD5或SHA的MAC算法来保证消息的完整性 。
MAC算法是在密钥参与下的数据摘要算法 , 能将密钥和任意长度的数据转换为固定长度的数据 。利用MAC算法验证消息完整性的过程如图2所示 。发送者在密钥的参与下 , 利用MAC算法计算出消息的MAC值 , 并将其加在消息之后发送给接收者 。接收者利用同样的密钥和MAC算法计算出消息的MAC值 , 并与接收到的MAC值比较 。如果二者相同 , 则报文没有改变;否则 , 报文在传输过程中被修改 , 接收者将丢弃该报文 。
SSL工作原理

文章插图
 
图2 MAC算法示意图
MAC算法具有如下特征 , 使其能够用来验证消息的完整性:
l 消息的任何改变 , 都会引起输出的固定长度数据产生变化 。通过比较MAC值 , 可以保证接收者能够发现消息的改变 。
l MAC算法需要密钥的参与 , 因此没有密钥的非法用户在改变消息的内容后 , 无法添加正确的MAC值 , 从而保证非法用户无法随意修改消息内容 。
MAC算法要求通信双方具有相同的密钥 , 否则MAC值验证将会失败 。因此 , 利用MAC算法验证消息完整性之前 , 需要在通信两端部署相同的密钥 。MAC密钥的部署方法请参见“2.4 利用非对称密钥算法保证密钥本身的安全” 。
2.4 利用非对称密钥算法保证密钥本身的安全
对称密钥算法和MAC算法要求通信双方具有相同的密钥 , 否则解密或MAC值验证将失败 。因此 , 要建立加密通道或验证消息完整性 , 必须先在通信双方部署一致的密钥 。
SSL利用非对称密钥算法加密密钥的方法实现密钥交换 , 保证第三方无法获取该密钥 。如图3所示 , SSL客户端(如Web浏览器)利用SSL服务器(如Web服务器)的公钥加密密钥 , 将加密后的密钥发送给SSL服务器 , 只有拥有对应私钥的SSL服务器才能从密文中获取原始的密钥 。SSL通常采用RSA算法加密传输密钥 。
SSL工作原理

文章插图
 
图3 密钥交换示意图
SSL工作原理

文章插图
 
l 实际上 , SSL客户端发送给SSL服务器的密钥不能直接用来加密数据或计算MAC值 , 该密钥是用来计算对称密钥和MAC密钥的信息 , 称为premaster secret 。SSL客户端和SSL服务器利用premaster secret计算出相同的主密钥(master secret) , 再利用master secret生成用于对称密钥算法、MAC算法等的密钥 。premaster secret是计算对称密钥、MAC算法密钥的关键 。
l 用来实现密钥交换的算法称为密钥交换算法 。非对称密钥算法RSA用于密钥交换时 , 也可以称之为密钥交换算法 。
 
利用非对称密钥算法加密密钥之前 , 发送者需要获取接收者的公钥 , 并保证该公钥确实属于接收者 , 否则 , 密钥可能会被非法用户窃取 。如图1所示 , Cindy冒充Bob , 将自己的公钥发给Alice , Alice利用Cindy的公钥加密发送给Bob的数据 , Bob由于没有对应的私钥无法解密该数据 , 而Cindy截取数据后 , 可以利用自己的私钥解密该数据 。SSL利用PKI提供的机制保证公钥的真实性 , 详细介绍请参见“2.5 利用PKI保证公钥的真实性” 。
2.5 利用PKI保证公钥的真实性PKI通过数字证书来发布用户的公钥 , 并提供了验证公钥真实性的机制 。数字证书(简称证书)是一个包含用户的公钥及其身份信息的文件 , 证明了用户与公钥的关联 。数字证书由权威机构——CA签发 , 并由CA保证数字证书的真实性 。
SSL客户端把密钥加密传递给SSL服务器之前 , SSL服务器需要将从CA获取的证书发送给SSL客户端 , SSL客户端通过PKI判断该证书的真实性 。如果该证书确实属于SSL服务器 , 则利用该证书中的公钥加密密钥 , 发送给SSL服务器 。
验证SSL服务器/SSL客户端的身份之前 , SSL服务器/SSL客户端需要将从CA获取的证书发送给对端 , 对端通过PKI判断该证书的真实性 。如果该证书确实属于SSL服务器/SSL客户端 , 则对端利用该证书中的公钥验证SSL服务器/SSL客户端的身份 。


推荐阅读