前一篇《网络安全》主要总结了下网络安全中的基本问题,包括对称密钥和公开密钥密码学、端点鉴别、密钥分发、报文完整性和数字签名。
这里主要总结下我们如何在应用层、运输层、网络层和数据链路层中使用这些安全性工具。为什么要在因特网的多个层次上提供安全性功能呢?仅在网络层提供安全性功能并加以实施还不够吗?这个问题有两个答案。首先,尽管网络层安全性可以通过加密数据报中的所有数据,以及通过鉴别所有数据报的源IP地址,提供“地毯式覆盖”,但是却并不能提供用户级的安全性。例如一个商业站点不能依赖IP层安全性来鉴别一个在该站点购买商品的顾客。其次,在协议栈的较高层次设置新的因特网服务通常较为容易。现在许多应用程序开发者“正在这样做”,并在他们中意的应用程序中引入安全性功能。一个典型的例子就是PGP,它提供了安全的电子邮件。
介绍下安全的电子邮件,邮件的安全特性重中之重是机密性。双方通信的电子邮件不希望被第三方看到。第二特性就是具备发送方鉴别,第三种特性就是报文完整性。提供机密性一般使用对称加密或者非对称加密,但是前者的困难时密钥分发,后者的困难时效率不高,对长报文更是如此。为了克服效率问题,我们利用了会话密钥。操作步骤如下:
第一发送方选择一个随机对称会话密钥Ks,第二用这个对称密钥加密她的报文m,第三用接收方的公钥K+加密这个对称密钥,第四级连该加密的报文和加密的对称密钥形成一个“包”,第五向接收方发送这个包,当接收方收到这个包时,接收方用他的私钥K-得到对称密钥Ks,使用这个对称密钥Ks解密报文m。
关于鉴别和报文完整性的设计(暂不考虑机密性),采用数字签名和报文摘要。具体操作是发送方对要发送的报文m应用一个散列函数H(例如MD5),得到一个报文摘要,用发送方的私钥K对得到的散列签名,从而得到一个数字签名,然后初始报文(未加密)和该数字签名级连起来生成一个包,发送给接收方。接收方用发送方的公钥K+解密被签名的报文摘要,将解密得到的报文摘要与自己对该报文的散列H进行比较。
将这两个设计方式整合就可以为大多数电子邮件用户提供满意的安全性。但是仍有一个重要的问题没有解决。就是发送方和接收方互相分发自己的公钥,不过常用的解决方式就是通过CA验证各自公钥。
具体的PGP,一般使用MD5或SHA来计算报文摘要;使用CAST、三重DES或IDEA进行对称密钥加密;使用RSA进行公钥加密。
TCP的安全性:SSL
SSL通过采用机密性、数据完整性、服务器鉴别和客户机鉴别来强化TCP,经常用于为发生在HTTP之上的事务提供安全性。SSL具有三个阶段:握手、密钥导出和数据传输。
关于握手分为三步骤:第一是创建一条TCP连接,第二验证接收方的真实身份(一般是接收方用自己的CA证书进行响应),第三发送给接收方一个主密钥,该主密钥是发送方和接收方用来生成SSL会话所需的所有对称密钥。
关于密钥导出,原则上说,主密钥能够用于所有后继加密和数据完整性检查。不过每个使用不同密码密钥,通常认为更为安全。一般生成四个密钥:
EB=用于发送方发送到接收方数据的会话加密密钥。
MB=用于发送方发送到接收方数据的会话MAC密钥。
EA=用于接收方发送到发送方数据的会话加密密钥。
MA=用于接收方发送到发送方数据的会话MAC密钥。
关于数据传输,因为TCP是一种字节流协议,一种自然的方法是对SSL在传输中加密应用数据,然后将加密的数据在传输中传给TCP。SSL将数据流分割成记录,为了完整性检查对每个记录附加一个MAC,然后加密该“记录+MAC”。另外介绍下SSL记录格式,该记录包含类型字段、版本字段、长度字段、数据字段和MAC字段组成,其中前三个字段是不加密的,类型字段是用来指出握手报文还是包含应用数据的报文,也能用于关闭SSL连接。
关于真实SSL握手步骤如下:
1、客户机发送它支持的密码算法的列表,连同一个客户机的不重数。
2、从该列表中,服务器选择一种对称算法(如AES)、一种公钥算法(具有特定密钥长度的RSA)和一种MAC算法。它向客户机发送回它的选择,以及证书和一个服务器的不重数。
3、客户机验证该证书,提取服务器的公钥,生成一个主密钥MS,用服务器的公钥加密该MS,并将其发送给服务器。
4、使用相同的密钥导出函数,客户机和服务器独立地从MS和不重数中计算加密和MAC密钥。自此以后,客户机和服务器之间发送的所有报文均被加密和鉴别(使用MAC)。
5、客户机发送所有握手报文的一个MAC。
6、服务器发送所有握手报文的一个MAC。
网络层安全性:IPsec
一般IP安全常被称为IPsec,它是有网络层提供的一组协议,一般处于虚拟专用网(VPN)的核心位置。网络层机密性,就是IP数据报携带的所有有效载荷都被加密了。这种服务可以为所有因特网流量提供某种全面覆盖,进而为我们提供了某种意义上的安全性。IPsec协议族中有两个主要协议:鉴别首部协议(AH)和封装安全性载荷协议(ESP),前者提供源鉴别和数据完整性服务(不提供机密性服务);后者提供鉴别、数据完整性和机密性服务。在这两个协议中,从源主机向目标主机发送安全数据流之前,源主机和网络主机握手并创建了一个网络层的逻辑连接。这个逻辑通道称为安全关联(不过是单工连接)。
鉴别首部协议格式:
IP首部 | AH首部 | TCP/UDP报文段 |
IP首部值是51,表示数据报包含一个AH首部。
AH首部包括几个字段:
下一个首部:表示AH首部之后的数据时TCP还是UDP、ICMP的报文
安全性参数索引:一个任意32比特的值
序号:一个32比特的字段,包含针对每个数据报的序号
鉴别数据:是一个可变字段,包含对该数据报的MAC
封装安全性载荷协议格式:
IP首部 | ESP首部 | TCP/UDP报文段 | ESP尾部 | ESP鉴别 |
IP首部:值为50时,表示后面有ESP报文。
不过IP数据报有效载荷连同ESP尾部都被加密了。