在上篇IPsec in Linux-2.6(一)中,讲述了IPsec 在传输模式(transport mode)两个静态IP建立IPsec 通道的过程。在这一篇文章中主要讲述如何理解IPsec工作原理和过程。
也就是要回答为什么IPsec你能够提供安全的数据通讯通道,或者IPsec 为什么被引入到TCP/IP协议栈中。
其实在原始的TCP/IP模型中,没有包括任何关于网络安全的设计,只要有人接入网络,监控并捕捉你的数据流,就有可能解析出你的数据,泄漏你重要的信息,尤其比如个人安全信息,个人隐私以及安全级别很高的重要信息等等。
那么IPsec引入主要包含了完整的安全机制:
1. 载 荷的加密(IP encapsulating security payload )-----RFC2406http://tools.ietf.org/html/rfc2406
2. 安全认证(IP Authentication) -----RFC2402(http://tools.ietf.org/html/rfc2402
3 Internet密钥管理协议(Internet Key exchange) -----RFC2409http://tools.ietf.org/html/rfc2409)
IPsec 主要利用封包技术实现数据的安全认证,负载的加密等。这里举一个很有意思的例子,来类比IPsec的工作原理。
假设一种通讯方式,在某些紧急时期,只有身份证的人才能写信通讯。比如老张的儿子叫小张,老李的儿子叫小李,老张/老李都有身份证,但是小张和小李没有身份证。如果小张和小李想写信通讯,那么他们最好的办法就是,小张写好自己的信,转交给老张,老张把小张的信装到一个大的信封,并在寄信栏写上自己的身份证号码,收信栏写老李的身份证号码。当老李收到这份信后,打开信封,发现最终收信人是小李,所以转交给小李。这样通过老张/老李这样的类似监护人中转方式使小张和小李完成一次通讯。
从IPsec的角度看,小张/小李写的信,就相当于原始的IP packet;老张/老李封大信封和拆大信封,就相当于给原始的IPsec packet 做二次封包和解包作用。
1. 载荷的加密(IP encapsulating security payload)
如果有好事之徒想偷看小张/小李写的信的内容,这时就需要引进安全机制,小张用暗语表来写信,那么小李就需要用相同的暗语表来读信。前提条件是他们都彼此有相同的暗语表。
同样在IPsec 中,发送端通过对IP载荷用两个host 端都事先约定的公钥,并使用相同的加密算法对IP packet 的payload加密,接收端用相同的公钥解密。
传输模式如下IPV4的IPsec packet 结构:
BEFORE APPLYING ESP
----------------------------
IPv4 |orig IP hdr | | |
|(any options)| TCP | Data |
----------------------------
AFTER APPLYING ESP
-------------------------------------------------
IPv4 |orig IP hdr | ESP | | | ESP | ESP|
|(any options)| Hdr | TCP | Data | Trailer |Auth|
-------------------------------------------------
|<----- encrypted ---->|
|<------ authenticated ----->.
从上图可以看出:EPS Hdr 被插入在IP Hdr 和上层协议TCP中间,因此加密的范围仅包含TCP数据段。
其中ESP Trailer包含Padding,Padding Length以及Next Header 域。
隧道模式IPV4的IPsec packet 结构:
-----------------------------------------------------------
IPv4 | new IP hdr* | | orig IP hdr* | | | ESP | ESP|
|(any options)| ESP | (any options) |TCP|Data|Trailer|Auth|
-----------------------------------------------------------
|<--------- encrypted ---------->|
|<----------- authenticated ---------->|
从上图可以看出,在隧道模式下ESP对整个IP Packet尽心加密。
2. 安全认证(IP Authentication)
对数据加密或许还不够,数据加密尽管是好事之徒不能读懂新的内容,但是他可以伪造一份信,或者把信的内容篡改后给小李。但是小李这边并不知道信被修改过。为了防止信件的篡改,所以可以根据信件内容的原始内容生成特征码,这样收信人很快就可以根据特征码判断新的内容是否被修改过。
在IPsec看来就是引入AH 头通过MD5值来认证内容是否被修改过。
传输模式如下IPV4的IPsec packet 结构:
BEFORE APPLYING AH
----------------------------
IPv4 |orig IP hdr | | |
|(any options)| TCP | Data |
----------------------------
AFTER APPLYING AH
---------------------------------
IPv4 |orig IP hdr | | | |
|(any options)| AH | TCP | Data |
---------------------------------
|<------- authenticated ------->|
except for mutable fields
隧道模式IPV4的IPsec packet 结构:
------------------------------------------------
IPv4 | new IP hdr* | | orig IP hdr* | | |
|(any options)| AH | (any options) |TCP | Data |
------------------------------------------------
|<- authenticated except for mutable fields -->|
| in the new IP hdr |
3. Internet密钥管理协议(Internet Key exchange)
公共密钥。比如小张和小李用暗号写信时双方怎么知道彼此暗语的含义,也就是双方需要相同暗语映射表。