
可以看到ESP报文除去原始Payload Data外,由SPI、Sequence Number、IV、Padding、Pad Length、Next Header和Authentication Data 7个部分组成。每部分的作用这里不再赘述(参考RFC4303)。
-----------------------------------------------------------
IPv4 | new IP hdr* | | orig IP hdr* | | | ESP | ESP|
|(any options)| ESP | (any options) |TCP|Data|Trailer| ICV|
-----------------------------------------------------------
|<--------- encryption --------->|
|<------------- integrity ------------>|
参考RFC4303,我们可以看到ESP报文的封装格式,除去原始Payload Data,其中有哪些长度不会变化的字段呢?
32 bit,即4 Bytes。32 bit,即4 Bytes。8 bit,即1 Byte。8 bit,即1 Byte。总计10 Bytes。
Initialization Vector (IV),CBC模式加密算法的作法是对第一块明文投入随机的初始向量(IV),然后将明文与向量运算(比如与或运算)的结果加密,加密的结果再作为下一块明文的向量。这种做法的最终目的是要达到语义上的安全,让攻击者无法从密文中获取能助其破译的相关线索,避免遭受选择明文攻击法(即相同的明文加密结果一致)。在CBC算法中,IV长度根据加密块大小变化。经过对每个算法的实验抓包,Initialization Vector (IV)的长度参考如下,(参考RFC3826、RFC4772、RFC4106):
| Encryption Algorithm | IV Length |
|---|---|
| AES-128/AES-192/AES-256 (CBC) | 16 Bytes (128 bit) |
| DES/3DES (CBC) | 8 Bytes (64 bit) |
| AES-GCM | 8 Bytes (64 bit) |
展开查看IV字段截图:
Authentication Data(或称为ICV,Integrity Check Value),长度根据验证算法变化,经过对每个算法的实验抓包,Authentication Data的长度参考如下:
| Authentication Algorithm | Authentication Data Length |
|---|---|
| MD5/SHA-1 | 12 Bytes (96 bit) |
| SHA-256 | 16 Bytes (128 bit) |
| SHA-384 | 24 Bytes (192 bit) |
| SHA-512 | 32 Bytes (256 bit) |
展开查看Authentication Data(或称为ICV,Integrity Check Value)字段截图:
Padding。
首先我们来简单了解下Padding字段的作用。为对称密钥加密设计的块密码工作模式要求需要加密的明文长度(也就是ESP报文的结构中,IV + Payload Data + Padding + Pad Length + Next Header的长度)必须是块长度的整数倍,事实是无法保证最后一个块的大小正好为块长度要求,因此信息必须填充至满足要求。只要是使用对称密钥的块密码工作模式,均可能需要Padding字段进行填充,如AES-CBC、DES/3DES-CBC(AES-GCM由于使用的是并行加密方式,不需要Padding填充)。
每种CBC加密算法的块大小总结如下,可以看到块大小和IV长度是一致的(原因请参考这里):
| Encryption Algorithm | Block Size |
|---|---|
| AES-128/AES-192/AES-256 (CBC) | 16 Bytes (128 bit) |
| DES/3DES (CBC) | 8 Bytes (64 bit) |