传输模式下ESP包的装包与封包过程

传输模式下ESP的装包与拆包过程 

  一、传输模式与隧道模式区别  

IPsec工作在传输模式时,新的IP头并不会被生成,而是采用原来的IP头,保护的也仅仅是真正传输的数据,而不是整个IP报文。在处理方法上,原来的IP报文会先被解开,再在数据前面加上新的ESP协议头,最后再装回原来的IP头,即原来的IP包被修改过再传输。

二、传输模式下ESP包的结构

传输模式下ESP包的装包与封包过程_第1张图片

传输模式下ESP包的装包与封包过程_第2张图片


 1、装包过程

1. 在原IP报文末尾添加尾部(ESP trailer)信息。如上图所示,尾部包含三部分。由所选加密算法可能是块加密,那么当最后一块长度不够时就需要进行填充(padding),附上填充长度(Pad length)方便解包时顺利找出用来填充的那一段数据。而Next header则用来标明被加密的数据报文的类型,例如TCP 

传输模式下ESP包的装包与封包过程_第3张图片

2. 将原IP报文以及第1步得到的ESP尾部作为一个整体进行加密。具体的加密算法与密钥由SA给出。 

传输模式下ESP包的装包与封包过程_第4张图片

3. 为第2步得到的加密数据添加ESP头部。如上图所示,ESP头由两部分组成,SPI和序号(Sequence number)。加密数据与ESP头合称为“enchilada”。 

4. 附加完整性度量结果(ICVIntegrity check value),采用MAC算法。对第三步得到的“enchilada”做摘要,得到一个完整性度量值,并附在ESP报文的尾部,即ESP MAC 

5、拿到原本的IP头。这样就可以发送了。

2、拆包过程 

拆包过程,即处理接受到的数据包。  接收端在收到一个 ESP包之后,若不对这个包进行处理,就无法得知它究竟处于隧道模式,还是传输模式。根据对这个包进行处理的SA,便可知道它到底处在什么模式下。  如果收到的IPSec包是一个分段,必须把它保留下来,直到这个包的其他部分收完为止。 我们不能对一个不完整的IPSec包进行处理,因为可能会导致对它施行的初次校检失败。  收到 ESP包后,进行的第一件事情是:检查处理这个包的SA是否存在,这是基本的 IPSec要求,而不是ESP专有的。如果没有SA,这个包就会被丢弃。只有在SA存在的情况下,才可开始进行输入处理。一旦验证通过了一个有效的SA,就可用它开始包的处理。 

 首先检查序列号。如果这个包的序列号是有效的—也就是说,它不是一个重复(重播)的包,也不是出现在包含在S A中的序列号窗口的右边—就开始进行处理。由于E S P身份验证密文而不是明文,接下来进行的便是对这个包进行身份验证。利用恰当的密钥,把这个完整的ESP包(当然除开身份验证数据)传递到验证器那里(它取自SA)。如果其结果能与“身份验证数据”字段中包含的数据相符(将身份验证算法可能需要的任何分段考虑在内),就可对这个包进行身份验证。接下来是解密。通过取自SA的密钥和密码算法,就可对 ESP包进行解密,这个ESP包在载荷数据开始之处到下一个头之间。判断解密成功的一个最简单的测试是检验其填充。由于填充内容具有决定意义—要么是一个从1开始的单向递增的数,要么通过加密算法来决定—对填充内容进行验证将决定这个包是否已成功解密。  传送身份验证和解密检查成功之后,就可对结果数据包进行初步的有效性检验。如果用 来处理这个数据包的SA表明在某一特定模式下—要么是通道模式,要么是传送模式—只 能处理ESP包,那么还必须检验这个包的适用性。如果这个包与要求的模式不符,就必须把它丢弃。 

 对传送模式而言,上层协议头与IP头是同步的,ESP头的下一个头字段被复制到IP头的协议字段中,并计算出一个新的IP校验和;而对通道模式而言,就抛开外部IP头和ESP头—我们需要的是这个解开封装的包。这时,必须进行另一个有效性检验。 

 如果它是一个传送模式包,就会转让到一个高一级的协议层—比如TCP UDP—由它们对这个包进行处理。 

 

具体步骤:

1. 接收方收到数据报文后,发现协议类型是50,故知道这是一个IPsec包。首先查看ESP头,通过里面的SPI决定数据报文所对应的SA 

2. 计算“enchilada”部分的摘要,与附在末尾的ICV做对比,如果一样的话说明数据是完整的。否则可以断定所收到的报文已经不是原来的报文了。

 3. 检查Seq里的顺序号,保证数据是“新鲜”的,防止回放攻击。 

4. 根据SA所提供的加密算法和密钥,解密被加密过的数据,即“enchilada”。得到原IP报文与ESP尾部(trailer)。 

5. 根据ESP尾部里的填充长度信息,我们可以找出填充字段的长度,删去后就得到原来  IP报文。 

 6. 最后转让到一个高一级的协议层—比如TCP UDP—由它们对这个包进行处理。

 

参考资料:

传输模式下的ESP拆包装包过程

http://wenku.baidu.com/link?url=sVT2hrVmnJbr5HOupJAjJAKBPJ_8DPO6UOQV5eo88-dEafMMjGbqX9cTZgML_M9sGR8-_B9kS85V3-7PWNem4_GZaZKoniVw9S1Hzct4Hlq

 

http://blog.sina.com.cn/s/blog_64ffd1280101egtj.html


你可能感兴趣的:(传输模式下ESP包的装包与封包过程)