IPSec VPN 国密协议详解:GM/T 0022 与 GM/T 0023 的握手流程、消息格式与密钥体系
概述
IPSec VPN 是工作在网络层的虚拟专用网络技术,通过密码技术在公共网络(如互联网)中构建安全隧道,为上层应用提供保密性、完整性、身份鉴别和抗重放攻击等安全保护。与 SSL VPN 不同,IPSec VPN 对应用层协议完全透明,保护的是主机之间或网段之间的整条通信链路。
国密 IPSec VPN 协议由两项行业标准定义:
| 标准编号 | 标准名称 | 对应国家标准 | 主要内容 |
|---|---|---|---|
| GM/T 0022-2014 | IPSec VPN 技术规范 | GB/T 36968-2018 | 协议流程、密钥交换、安全报文格式 |
| GM/T 0023-2014 | IPSec VPN 网关产品规范 | — | 产品功能、性能、安全、检测要求 |
协议架构
整体框架
IPSec VPN 的协议架构由两大核心组件构成:
┌─────────────────────────────────────────────────┐
│ IPSec VPN 协议栈 │
├─────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ ┌──────────────────┐ │
│ │ IKE 协议 │ │ 安全报文协议 │ │
│ │ (密钥交换) │ │ │ │
│ │ │ │ ┌────────────┐ │ │
│ │ · IKE_SA_INIT │ │ │ AH 协议 │ │ │
│ │ · IKE_AUTH │ │ │(认证头) │ │ │
│ │ · CREATE_CHILD │ │ ├────────────┤ │ │
│ │ · INFORMATIONAL│ │ │ ESP 协议 │ │ │
│ │ │ │ │(封装安全 │ │ │
│ │ │ │ │ 载荷) │ │ │
│ └─────────────────┘ │ └────────────┘ │ │
│ └──────────────────┘ │
├─────────────────────────────────────────────────┤
│ ┌──────────────────────────────────────────┐ │
│ │ 安全策略数据库 (SPD/SAD) │ │
│ └──────────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘- IKE(Internet Key Exchange)协议:负责协商安全关联(SA),建立和管理密钥材料。对应 GM/T 0022 和 RFC 4308(IKEv2)。
- AH(Authentication Header)协议:提供数据源身份鉴别、完整性校验和抗重放保护,但不提供保密性。对应 GM/T 0022 和 RFC 4302。
- ESP(Encapsulating Security Payload)协议:提供保密性、数据源身份鉴别、完整性校验和抗重放保护。可单独使用,也可与 AH 嵌套使用。对应 GM/T 0022 和 RFC 4303。
与 RFC 标准的映射关系
| IPSec 组件 | RFC 标准 | GM/T 0022 对应章节 | 国密扩展 |
|---|---|---|---|
| IPSec 架构 | RFC 4301 | 第 4 章 | 增加 IPv6 支持 |
| AH 协议 | RFC 4302 | 第 5 章 | SM3 用于 ICV 计算 |
| ESP 协议 | RFC 4303 | 第 6 章 | SM4 用于数据加密 |
| IKEv2 协议 | RFC 4308 | 第 7 章 | SM2 用于签名和密钥交换 |
| 加密算法 | RFC 4309 | 第 6.1 节 | SM4-CBC/GCM |
| NAT 穿越 | RFC 4306 | 第 8 章 | 保持与国际标准一致 |
IKE 握手流程
GM/T 0022-2014 定义的 IKE 握手流程遵循 IKEv2 的基本框架,但在算法支持、证书格式和密钥计算方面进行了国密适配。整个握手过程分为两个阶段。
第一阶段:IKE_SA_INIT
发起方 响应方
│ │
│──── IKE_SA_INIT 请求 ──────────────────────>│
│ · SAi1 (发起方安全关联提案) │
│ · KEi (发起方密钥交换载荷) │
│ · Ni (发起方随机数) │
│ │
│<─── IKE_SA_INIT 响应 ────────────────────────│
│ · SAr1 (响应方选定的安全关联) │
│ · KEr (响应方密钥交换载荷) │
│ · Nr (响应方随机数) │
│ · [CERTREQ] (可选:证书请求) │
│ │
│──── 双方计算 SKEYSEED ──────────────────────>│
│ SKEYSEED = prf(Ni | Nr, g^ir) │
│ (g^ir 为 SM2 密钥交换的共享密钥) │
│ │
│ 派生密钥材料: │
│ SK_d = prf(SKEYSEED, Ni | Nr | 0) │
│ SK_ai = prf(SK_d, Ni | Nr | 1) │
│ SK_ar = prf(SK_d, Ni | Nr | 2) │
│ SK_ei = prf(SK_d, Ni | Nr | 3) │
│ SK_er = prf(SK_d, Ni | Nr | 4) │
│ SK_pi = prf(SK_d, Ni | Nr | 5) │
│ SK_pr = prf(SK_d, Ni | Nr | 6) │国密适配要点:
- 密钥交换算法:使用 SM2 椭圆曲线密钥交换协议替代传统的 Diffie-Hellman。KE 载荷中包含 SM2 公钥和随机数。
- 伪随机函数(PRF):使用 HMAC-SM3 作为 PRF,替代 RFC 4308 中定义的 HMAC-SHA 系列。
- 加密算法:SK_e 使用 SM4 算法保护后续消息。
- 完整性算法:SK_a 使用 HMAC-SM3 保护消息完整性。
第二阶段:IKE_AUTH
发起方 响应方
│ │
│──── IKE_AUTH 请求 ─────────────────────────>│
│ · IDi (发起方身份标识) │
│ · [CERT] (发起方证书) │
│ · [CERTREQ] (可选) │
│ · AUTH (身份鉴别数据) │
│ · SAi2 (子 SA 提案) │
│ · TSi (发起方流量选择器) │
│ · TSr (响应方流量选择器) │
│ · [N] (可选:通知载荷) │
│ │
│<─── IKE_AUTH 响应 ───────────────────────────│
│ · IDr (响应方身份标识) │
│ · [CERT] (响应方证书) │
│ · AUTH (身份鉴别数据) │
│ · SAr2 (选定的子 SA) │
│ · TSi, TSr (选定的流量选择器) │
│ │
│──── 双方完成认证,建立 IPSec SA ────────────>│身份鉴别方式:
GM/T 0022-2014 规定身份鉴别必须采用数字证书方式,不再支持预共享密钥(PSK)方式。AUTH 载荷的计算方式:
AUTH = Sign(SK_pi, <IDi | CERTi | ... )签名算法为 SM2 数字签名算法,签名数据包含身份标识、证书和协商参数。
子 SA 协商(CREATE_CHILD_SA)
发起方 响应方
│ │
│──── CREATE_CHILD_SA 请求 ──────────────────>│
│ · SA (安全关联提案) │
│ · KEi (可选:新密钥交换) │
│ · Ni (随机数) │
│ · TSi, TSr (流量选择器) │
│ │
│<─── CREATE_CHILD_SA 响应 ────────────────────│
│ · SA (选定的安全关联) │
│ · [KEr] (可选) │
│ · Nr (随机数) │
│ · TSi, TSr (选定的流量选择器) │子 SA 协商用于建立实际的 IPSec 数据保护通道,也可用于密钥更新(Rekey)。
安全报文协议
AH 协议(认证头)
AH 协议提供数据源身份鉴别、完整性校验和抗重放保护。在国密场景下,完整性校验值(ICV)使用 SM3 算法计算。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│ 下一个头 │ 载荷长度 │ 保留 │
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│ 安全参数索引 (SPI) │
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│ 序列号 (Sequence Number) │
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│ │
│ 完整性校验值 (ICV) — SM3 计算结果 │
│ (长度取决于 SM3 输出: 32 字节) │
│ │
└─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┘ICV 计算范围:
ICV = SM3(ESP/AH 载荷 | 填充 | 填充长度 | 下一个头 | SPI | 序列号)注意:ICV 字段本身在计算时置零。
ESP 协议(封装安全载荷)
ESP 协议提供保密性、数据源身份鉴别、完整性校验和抗重放保护。在国密场景下,数据加密使用 SM4 算法。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│ 安全参数索引 (SPI) │
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│ 序列号 (Sequence Number) │
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│ │
│ 载荷数据 (加密) — SM4 加密 │
│ │
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│ 填充 │ 填充长度 │ 下一个头 │
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│ │
│ 完整性校验值 (ICV) — SM3-HMAC │
│ (长度: 32 字节) │
│ │
└─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┘SM4 加密模式:
GM/T 0022-2014 支持以下 SM4 工作模式:
| 模式 | 说明 | 适用场景 |
|---|---|---|
| CBC | 密码分组链接模式 | 通用数据加密 |
| GCM | 伽罗瓦/计数器模式 | 需要认证加密的场景 |
封装模式
IPSec VPN 支持两种封装模式:
隧道模式(必备):
┌──────────┬──────────┬──────────────────────────────┐
│ 新 IP 头 │ ESP/AH 头 │ 原始 IP 数据包(加密) │
└──────────┴──────────┴──────────────────────────────┘传输模式(可选):
┌──────────┬──────────┬──────────────────────────────┐
│ 原始 IP 头 │ ESP/AH 头 │ 上层协议数据(加密) │
└──────────┴──────────┴──────────────────────────────┘双证书机制
GM/T 0022-2014 的一个核心特性是强制要求双证书支持。在国密 PKI 体系中,每个用户持有两张证书:
| 证书类型 | 用途 | 密钥管理 |
|---|---|---|
| 签名证书 | 身份鉴别、数字签名 | 用户自行生成密钥对 |
| 加密证书 | 密钥协商中的对称密钥加密保护 | 密钥管理中心(KMC)生成并托管 |
- 在 IKE 第一阶段的密钥交换中,必须使用加密证书的公钥对交换数据进行加密保护,不能使用签名证书的公钥。
- 身份鉴别(AUTH 载荷的签名)使用签名证书的私钥。
- 这一设计确保了加密密钥的可托管性(满足合规审计需求),同时签名密钥由用户自主控制(保证不可否认性)。
密钥体系
GM/T 0022-2014 定义了三层密钥体系结构:
┌─────────────────────────────────────────────────────┐
│ 第一层:设备密钥 │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ 签名密钥对 │ │ 加密密钥对 │ │
│ │ (SM2) │ │ (SM2) │ │
│ │ │ │ │ │
│ │ 用途: │ │ 用途: │ │
│ │ · IKE 第一阶段 │ │ · IKE 第一阶段 │ │
│ │ 身份鉴别 │ │ 交换数据保密 │ │
│ │ · 数字签名 │ │ · 数字信封 │ │
│ └─────────────────┘ └─────────────────┘ │
├─────────────────────────────────────────────────────┤
│ 第二层:工作密钥 │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ 加密工作密钥 │ │ 完整性工作密钥 │ │
│ │ (SM4) │ │ (HMAC-SM3) │ │
│ │ │ │ │ │
│ │ 用途: │ │ 用途: │ │
│ │ · IKE 第二阶段 │ │ · IKE 第二阶段 │ │
│ │ 数据保密 │ │ 完整性+鉴别 │ │
│ └─────────────────┘ └─────────────────┘ │
│ │
│ 来源: IKE 第一阶段密钥协商派生 │
├─────────────────────────────────────────────────────┤
│ 第三层:会话密钥 │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ 加密会话密钥 │ │ 完整性会话密钥 │ │
│ │ (SM4) │ │ (HMAC-SM3) │ │
│ │ │ │ │ │
│ │ 用途: │ │ 用途: │ │
│ │ · 用户数据加密 │ │ · 用户数据完整性│ │
│ │ · MAC 值加密 │ │ · 数据源鉴别 │ │
│ └─────────────────┘ └─────────────────┘ │
│ │
│ 来源: IKE 第二阶段密钥协商派生 │
└─────────────────────────────────────────────────────┘密钥生命周期:
| 密钥层 | 生成方式 | 更新周期 | 存储位置 |
|---|---|---|---|
| 设备密钥 | 初始化时生成 | 按证书有效期(通常 1-3 年) | 密码模块安全存储 |
| 工作密钥 | IKE 第一阶段派生 | IKE SA 生存期(通常数小时) | 内存 |
| 会话密钥 | IKE 第二阶段派生 | IPSec SA 生存期(通常数小时或按流量) | 内存 |
NAT 穿越
GM/T 0022-2014 支持 NAT 穿越(NAT-T),当 IPSec 通信路径中存在 NAT 设备时,ESP 报文被封装在 UDP 4500 端口报文中传输:
┌──────────┬──────────┬──────────┬──────────────────────┐
│ IP 头 │ UDP 头 │ ESP 头 │ 加密载荷 │
│ │ :4500 │ │ │
└──────────┴──────────┴──────────┴──────────────────────┘NAT 穿越检测在 IKE 交换中通过 NAT_DETECTION_SOURCE_IP 和 NAT_DETECTION_DESTINATION_IP 载荷完成。检测到 NAT 后,后续所有报文自动切换为 UDP 封装模式。
安全策略数据库
IPSec VPN 的安全策略由 SPD(Security Policy Database)和 SAD(Security Association Database)管理:
SPD(安全策略数据库):
┌──────┬──────────────┬──────────────┬──────────┬──────────┐
│ 优先级 │ 源地址范围 │ 目的地址范围 │ 协议 │ 动作 │
├──────┼──────────────┼──────────────┼──────────┼──────────�
│ 1 │ 10.0.1.0/24 │ 10.0.2.0/24 │ ANY │ PROTECT │
│ 2 │ 10.0.1.0/24 │ 10.0.3.0/24 │ TCP │ PROTECT │
│ 3 │ 0.0.0.0/0 │ 0.0.0.0/0 │ ANY │ BYPASS │
└──────┴──────────────┴──────────────┴──────────┴──────────┘- PROTECT:匹配的流量需要 IPSec 保护,触发 IKE 协商或查找已有 SA。
- BYPASS:匹配的流量直接放行,不做任何处理。
- DISCARD:匹配的流量直接丢弃。
┌───────┬──────────┬──────────┬──────────┬──────────┬──────────┐
│ SPI │ 源地址 │ 目的地址 │ 协议 │ 加密算法 │ 完整性算法│
├───────┼──────────┼──────────┼──────────┼──────────┼──────────┤
│ 0x1234 │ 10.0.1.1 │ 10.0.2.1 │ ESP │ SM4-CBC │ HMAC-SM3 │
│ 0x5678 │ 10.0.1.2 │ 10.0.2.2 │ ESP │ SM4-GCM │ (内置) │
└───────┴──────────┴──────────┴──────────┴──────────┴──────────┘与 SSL VPN 的对比
| 维度 | IPSec VPN (GM/T 0022) | SSL VPN (GM/T 0024) |
|---|---|---|
| 工作层次 | 网络层(L3) | 应用层与传输层之间(L4-L5) |
| 保护粒度 | 主机/网段级 | 应用/端口级 |
| 透明性 | 对应用完全透明 | 需要应用集成 |
| 部署模式 | 网关到网关、端到网关 | 端到站到网关到网关 |
| 密钥体系 | 三层(设备/工作/会话) | 三层(设备/预主/工作) |
| 身份鉴别 | 必须数字证书 | 支持证书+动态口令等 |
| 典型场景 | 站点间互联、远程接入 | 移动办公、Web 应用接入 |
| 对应标准 | GM/T 0022-2014 | GM/T 0024-2014 |
参考来源
- GM/T 0022-2014《IPSec VPN 技术规范》
- GM/T 0023-2014《IPSec VPN 网关产品规范》
- GB/T 36968-2018《信息安全技术 IPSec VPN 技术规范》
- RFC 4301: Security Architecture for the Internet Protocol
- RFC 4302: IP Authentication Header
- RFC 4303: IP Encapsulating Security Payload (ESP)
- RFC 4308: Cryptographic Suites for IPsec
- GM/T 0002-2012《SM2 椭圆曲线公钥密码算法》
- GM/T 0004-2012《SM3 密码杂凑算法》
- GM/T 0001-2012《SM4 分组密码算法》
相关实践
- 如需了解国密 SSL VPN 协议的握手流程,请参阅《国密 TLS 1.1 协议详解:GM/T 0024 与 RFC 8998》
- 如需了解国密算法在工程中的实现细节,请参阅《SM2 椭圆曲线公钥密码算法》