认证
即通信双方如何认证对方身份。
这种情况存在问题:trudy可以伪造A的IP地址。就算带上密码也可能被截获,用于重放攻击。
解决重放攻击的办法是随机数挑战,每次认证时,B都发一个挑战码给A。A加密后再传给B,如果B可以解密,那么就可以完成认证。
注意,加密可以使用对称密钥体系,也可以使用公开密钥体系。如果是堆成密钥体系,那么必须保证双方在这之前就完成了安全的密钥分发。如果是公开密钥体系,那么必须保证A获得的确实是A的公开密钥。这就引发了两个问题,第一个密钥分发问题,第二个是证书问题。
报文完整性
这涉及到三个问题:报文没有被伪造、接收方可以验证报文是发送方发的,发送方不可抵赖自己发了报文。
这需要用到数字签名技术。
A用自己的私钥对报文或者报文摘要(报文摘要算法一般是MD5或者SHA)进行签名(加密),然后将报文和签名的东西发给B,B用A的公钥解密签名,然后和原始报文或者以同样方法计算的报文摘要进行对比,如果一致,则保证了报文完整性。这样就可以证明报文没有被伪造,接收方验证报文是发送方发的,发送方不可抵赖自己发了报文,因为B可以把签名和原始报文出具给第三方,第三方用A的公钥核对正确,就认定是A发的。
注意这里的前提是B可以确定公钥是A的。这也涉及证书的问题。
密钥分发与证书
在认证和报文完整性中,提到了密钥分发和证书的前提。密钥分发指的是如何安全的将密钥分发给通信双方,证书是第三方颁发的,用于验证公钥与密钥所有者的真实性。
对称密钥分发
一般通过密钥分发中心KDC实现,KDC是各方认可的第三方机构,前提是各方与KDC间通过密钥(这个密钥是可靠的)通信。
证书
证书由认证机构CA颁发,证书内容可以简单的理解为注册实体E与公钥的绑定。之后其他实体就可以通过CA获得E的公钥,这个公钥就一定是E的。当然了,这个公钥是被CA的私钥签署了的,需要拥有CA的公钥才能获取到,CA公钥的获取通过的是另一种机制,叫做CA认证树,你甚至可以认证别人网站,通过不断的认证得到了如今的整个互联网认证树结构。
大多数现代操作系统和浏览器都内置了受信任的根证书存储。当您访问使用有效SSL证书保护的网站时,这些内置的根证书会自动用于验证网站的证书。