首页 › security › 5G SEPP跨域安全与N32握手信令拆解

5G SEPP跨域安全与N32握手信令拆解

一、为什么需要SEPP:从4G SEG到5G应用层安全的范式跃迁

在4G EPS漫游架构中,运营商间信令保护依赖SEG(Security Gateway),基于TS 33.210定义的IPsec隧道实现网络域安全。这种传输层安全模型存在根本性缺陷:IPX中间节点(Hubbing Provider)必须以明文方式处理DIAMETER信令,无法防范中间人攻击。当运营商通过IPX提供商进行Hubbing漫游时,所有敏感数据(IMSI、认证向量、位置信息)对IPX节点完全透明。

5GC采用SBI(Service Based Interface)架构,所有NF间通信基于HTTP/2 + JSON,传统的传输层隧道已无法满足应用层细粒度安全需求。3GPP TS 33.501 Section 9引入SEPP(Security Edge Protection Proxy)作为跨PLMN边界的非透明安全代理,在TS 33.500中详细定义其安全机制。SEPP的核心创新在于消息级安全(Message-Level Security)——对HTTP/2 JSON信令消息中的敏感数据字段逐个加密,同时保留路由所需的HTTP头部和JSON外层结构,使IPX中间节点仍能正确转发消息但无法窥探内容。

graph TD
    subgraph VPLMN["拜访PLMN (VPLMN)"]
        VNF[NF: AMF/SMF/AUSF]
        VSEPP[cSEPP<br/>SEPP]
    end
    subgraph IPX["IPX网络"]
        IPX1[IPX Provider A]
        IPX2[IPX Provider B]
    end
    subgraph HPLMN["归属PLMN (HPLMN)"]
        HSEPP[pSEPP<br/>SEPP]
        HNF[NF: UDM/AUSF/UDR]
    end

    VNF -->|N32f 明文SBI| VSEPP
    VSEPP -->|N32-c 握手<br/>TLS + 证书认证| IPX1
    IPX1 --> IPX2
    IPX2 -->|N32-c 握手| HSEPP
    HSEPP -->|解密后明文SBI| HNF

    style VSEPP fill:#e74c3c,color:#fff
    style HSEPP fill:#e74c3c,color:#fff
    style IPX1 fill:#f39c12,color:#fff
    style IPX2 fill:#f39c12,color:#fff

二、SEPP功能定位与N32双接口架构

2.1 SEPP在网络拓扑中的位置

SEPP是5GC中唯一一个既不属于VPLMN也不属于HPLMN内部而是横跨两个PLMN边界的网元。每个PLMN部署自己的SEPP实例,负责:

  1. 出站保护:将内部NF发出的明文SBI消息转换为N32f保护消息
  2. 入站验证:验证来自对端SEPP的N32f消息完整性与来源真实性
  3. 拓扑隐藏:屏蔽内部NF的URI结构,防止对端推断网络拓扑
  4. 消息过滤:对跨PLMN信令进行策略性过滤和速率限制

2.2 N32接口的双子接口设计

TS 29.573 Section 4.2定义了N32的两个子接口:

接口 全称 功能 协议栈 TS章节
N32-c N32 Connection 安全上下文建立、能力协商、密钥交换 HTTP/2 + TLS 1.3 TS 29.573 §4.2.2
N32-f N32 Forwarding 受保护信令消息转发 HTTP/2 + JWE/JWS TS 29.573 §4.2.3

N32-c在两个SEPP之间建立TLS长连接,在此之上完成安全能力协商和密钥材料交换。N32-f则使用从N32-c协商阶段派生的密钥对实际SBI消息进行应用层保护。

2.3 SEPP角色:cSEPP与pSEPP

根据TS 33.500 Section 6.1的定义:

这个角色划分是每消息级别的——同一个SEPP在不同消息流中可能扮演不同角色。

三、N32-c安全握手信令全流程拆解

N32-c握手是SEPP间安全协作的基石,TS 33.500 Section 6.2和TS 29.573 Section 5.1定义了完整的两步握手流程。

3.1 握手总体时序

sequenceDiagram
    participant cSEPP as cSEPP<br/>(VPLMN)
    participant IPX as IPX中间节点
    participant pSEPP as pSEPP<br/>(HPLMN)

    Note over cSEPP,pSEPP: Phase 1: TLS连接建立
    cSEPP->>IPX: TLS ClientHello
    IPX->>pSEPP: TLS ClientHello (转发)
    pSEPP->>IPX: TLS ServerHello + Certificate
    IPX->>cSEPP: TLS ServerHello + Certificate (转发)
    cSEPP->>IPX: TLS Certificate + Finished
    IPX->>pSEPP: TLS Certificate + Finished (转发)
    pSEPP->>IPX: TLS Finished
    IPX->>cSEPP: TLS Finished (转发)
    Note over cSEPP,pSEPP: TLS隧道建立完成

    Note over cSEPP,pSEPP: Phase 2: N32-c能力协商
    cSEPP->>pSEPP: POST /n32c-handshake/exchange-capability<br/>SecurityCapability negotiate

    pSEPP->>cSEPP: 200 OK + SecCapabilityResult<br/>接受/拒绝/修改

    alt 协商成功
        Note over cSEPP,pSEPP: 安全上下文建立完成<br/>派生N32f保护密钥
    else 协商失败
        pSEPP->>cSEPP: 200 OK + SecCapabilityResult(rejected)
        Note over cSEPP,pSEPP: 无法建立N32f会话
    end

3.2 TLS层证书认证(TS 33.500 §6.2.1)

N32-c建立在TLS 1.3之上(TS 33.210 Section 6.2定义证书Profile)。双向认证流程关键IE:

IE名称 方向 说明
TLS Certificate 双向 X.509 v3证书,包含PLMN ID扩展字段
ServerNameIndication (SNI) cSEPP→pSEPP 携带目标SEPP的FQDN
Certificate Verify 双向 证明持有私钥

PLMN-ID验证:pSEPP必须验证对端证书中的PLMN-ID与N32-c消息中的PLMN-ID一致(TS 33.517 Section 5.2.3)。这是防止证书冒用攻击的关键检查。

3.3 N32-c能力协商消息(TS 29.573 §5.1.2)

TLS隧道建立后,cSEPP发起SecurityCapability协商:

请求消息:POST /n32c-handshake/v1/exchange-capability

{
  "securityCapability": {
    "protectionPolicyIds": ["N32FullProtectionProfile", "N32ClearTextProtectionProfile"],
    "supportedSecInfo": ["IECIES", "AES_GCM"],
    "plmnId": {
      "mcc": "460",
      "mnc": "00"
    },
    "targetPlmnId": {
      "mcc": "001",
      "mnc": "01"
    },
    "n32fPurpose": ["roaming", "interconnect"]
  },
  "retransmitIndicator": false
}

关键IE解析:

IE 类型 说明
protectionPolicyIds array 支持的保护策略列表。N32FullProtectionProfile=加密+完整性,N32ClearTextProtectionProfile=明文+完整性
supportedSecInfo array 支持的加密算法。IECIES=椭圆曲线集成加密方案,AES_GCM=对称加密
plmnId object 本端PLMN标识,必须与TLS证书一致
targetPlmnId object 目标PLMN标识
n32fPurpose array N32f用途标识

3.4 响应消息与安全上下文建立

pSEPP收到请求后执行以下决策逻辑:

  1. 证书验证:验证cSEPP的TLS证书是否由受信CA签发
  2. PLMN-ID匹配:确认plmnId与证书一致
  3. 保护策略选择:从cSEPP提供的列表中选择本端也支持的最强策略
  4. 密钥材料准备:准备用于N32f消息保护的密钥

响应消息:200 OK

{
  "securityCapabilityResult": {
    "selectedProtectionPolicyId": "N32FullProtectionProfile",
    "supportedSecInfo": ["IECIES", "AES_GCM"],
    "plmnId": {
      "mcc": "001",
      "mnc": "01"
    },
    "negotiationResult": "successful"
  }
}

3.5 安全上下文状态机

stateDiagram-v2
    [*] --> Idle: SEPP启动
    Idle --> TLSEstablishing: 发起/接收TLS连接
    TLSEstablishing --> TLSActive: TLS握手成功
    TLSEstablishing --> Idle: TLS握手失败
    TLSActive --> Negotiating: 发送exchange-capability
    Negotiating --> Active: 协商成功<br/>密钥派生完成
    Negotiating --> TLSActive: 协商被拒绝<br/>可重试
    Active --> Active: N32f消息处理
    Active --> Renegotiating: 密钥更新触发
    Renegotiating --> Active: 重协商成功
    Active --> Idle: 连接断开/超时

四、N32-f消息保护机制深度解析

4.1 双保护策略对比

TS 33.500 Section 6.3定义了两种N32f保护策略:

维度 N32 Full Protection N32 Clear-Text Protection
策略ID N32FullProtectionProfile N32ClearTextProtectionProfile
加密 是(JWE) 否
完整性 是(JWS) 是(JWS)
消息体可见性 完全加密 明文可读
IPX可见性 不可读内容 可读内容
适用场景 高安全级别漫游直连 IPX需解析路由的Hubbing场景
TS定义 TS 33.500 §6.3.1 TS 33.500 §6.3.2
性能开销 较高(加解密) 较低(仅签名验证)

4.2 N32 Full Protection消息处理流

这是最安全也是最常见的模式。完整处理流程如下:

sequenceDiagram
    participant NF_c as 源NF<br/>(VPLMN AMF)
    participant cSEPP as cSEPP
    participant IPX as IPX节点
    participant pSEPP as pSEPP
    participant NF_p as 目标NF<br/>(HPLMN UDM)

    NF_c->>cSEPP: HTTP/2 POST<br/>/nudm-sdm/v1/{supi}/am-data<br/>{明文JSON: SUPI, S-NSSAI...}

    Note over cSEPP: 1. 识别敏感数据类型<br/>2. SUPI → IECIES加密<br/>3. 整体JSON → JWE封装

    cSEPP->>IPX: HTTP/2 POST (N32f)<br/>/n32f/v1/relay<br/>JWE Protected Payload

    Note over IPX: IPX只能看到HTTP头<br/>和JSON外层路由字段<br/>无法解密消息体

    IPX->>pSEPP: 转发N32f消息

    Note over pSEPP: 1. JWE解密<br/>2. IECIES解密敏感字段<br/>3. 恢复原始明文JSON

    pSEPP->>NF_p: HTTP/2 POST<br/>/nudm-sdm/v1/{supi}/am-data<br/>{明文JSON}

    NF_p->>pSEPP: 200 OK + 订阅数据
    pSEPP->>cSEPP: 200 OK (N32f保护)
    cSEPP->>NF_c: 200 OK + 订阅数据(明文)

4.3 敏感数据类型加密(Data-Type Encryption)

TS 33.500 Section 6.3.1.3定义了逐数据类型加密机制。SEPP维护一个敏感数据类型列表,对匹配的JSON字段执行IECIES加密:

数据类型 JSON字段 加密方式 原因
SUPI supi IECIES 用户永久标识,最高敏感度
GPSI gpsi IECIES 通用公共订阅标识符
Authentication Vector authType, rand, autn, xresStar IECIES 认证五元组
UDM Subscription Data nssai, subscribedUeAmbr IECIES 订阅策略数据
Location Info tai, ecn IECIES 位置隐私
SUCI suci IECIES 已加密标识(双层保护)
PEI pei IECIES 设备永久标识

IECIES加密过程(TS 33.500 Annex E):

1. 生成临时ECC密钥对 (ephemeral public key, ephemeral private key)
2. ECDH共享密钥 = ephemeral_private_key × pSEPP_public_key
3. KDF(共享密钥) → DEK (Data Encryption Key) + MAC Key
4. Ciphertext = AES-GCM-Encrypt(DEK, plaintext_field_value)
5. 输出: {ephemeral_public_key || Ciphertext || MAC_Tag}

4.4 JWE封装结构

N32f消息体经过JWE JSON Serialization封装后的结构:

{
  "protected": "eyJhbGciOiJFQ0RILUVTK0EyNTZLVyIsImVuYyI6IkEyNTZHQ00iLCJlcGsiOiJ...base64url...",
  "unprotected": {
    "kid": "sepp-hplmn-key-2026-001",
    "iat": 1748304000
  },
  "recipients": [
    {
      "encrypted_key": "base64url_encoded_wrapped_CEK"
    }
  ],
  "iv": "base64url_encoded_initialization_vector",
  "ciphertext": "base64url_encrypted_payload_containing_IECIES_encrypted_fields",
  "tag": "base64url_authentication_tag"
}
JWE字段 说明
protected Base64URL编码的保护头,含加密算法标识
encrypted_key 用pSEPP公钥包装的Content Encryption Key
iv AES-GCM初始化向量
ciphertext 已加密的完整JSON负载(内含IECIES加密的敏感字段)
tag AES-GCM认证标签

4.5 N32 Clear-Text Protection消息处理

当选择明文完整性保护策略时,SEPP使用JWS而非JWE:

{
  "payload": "base64url_original_json_payload_in_cleartext",
  "protected": "eyJhbGciOiJFUzI1NiJ9",
  "signature": "base64url_ECDSA_signature"
}

此模式下IPX节点可以解析消息体内容(用于基于内容的路由),但无法篡改(JWS签名保护)。适用场景包括:

五、SEPP Hubbing多跳场景与安全链

5.1 直连 vs Hubbing拓扑

5G漫游有两种部署拓扑,安全模型截然不同:

graph TB
    subgraph Direct["直连模式 (Direct)"]
        cSEPP1[cSEPP] -->|单一N32-c + N32-f| pSEPP1[pSEPP]
    end

    subgraph Hubbing["Hubbing模式"]
        cSEPP2[cSEPP] -->|N32-c/TLS| IPXA[IPX-A SEPP Proxy]
        IPXA -->|TLS hop-by-hop| IPXB[IPX-B SEPP Proxy]
        IPXB -->|N32-c/TLS| pSEPP2[pSEPP]

        cSEPP2 -.->|端到端N32f保护| pSEPP2
    end

    style cSEPP1 fill:#3498db,color:#fff
    style pSEPP1 fill:#e74c3c,color:#fff
    style cSEPP2 fill:#3498db,color:#fff
    style pSEPP2 fill:#e74c3c,color:#fff
    style IPXA fill:#f39c12,color:#fff
    style IPXB fill:#f39c12,color:#fff

5.2 Hubbing场景的安全挑战

在Hubbing场景中(TS 33.500 Section 7),IPX中间节点作为TLS代理参与逐跳连接:

安全维度 直连模式 Hubbing模式
TLS连接数 1(端到端) N(逐跳,N=中间节点数+1)
证书验证 端到端验证 仅相邻跳验证
N32f保护 端到端JWE/JWS 端到端JWE/JWS(不变)
IPX可信度 不涉及 必须信任IPX提供商
密钥暴露风险 无 IPX可获取TLS层密钥但无法获取JWE层密钥

关键设计:即使在Hubbing场景,N32f的应用层保护(JWE/JWS)始终是端到端的——从cSEPP到pSEPP,中间IPX节点无法解密JWE保护的消息体。这是SEPP相比4G SEG的根本安全优势:传输层安全可以逐跳终止,但应用层安全始终保持端到端。

5.3 cSEPP到IPX的TLS握手(Hubbing特有)

在Hubbing场景中,cSEPP首先与IPX-A建立TLS连接(而非直接到pSEPP):

TLS ClientHello → IPX-A (SNI: ipx-a.example.com)
IPX-A扮演TLS终结点,解密消息后以新TLS连接转发到下一跳
每跳都需要独立的证书验证和N32-c能力协商

IPX节点作为TLS中间人,但无法突破JWE层的端到端加密。这种双层安全模型是3GPP SA3工作组刻意设计的纵深防御策略。

六、N32-f密钥派生层次

6.1 密钥层级结构

SEPP的密钥派生遵循TS 33.500 Section 6.4定义的层次结构:

graph TD
    TLS_TLS["TLS Master Secret<br/>(TLS 1.3握手产出)"]

    TLS_TLS --> N32_SK["N32 Security Context Key<br/>KDF(TLS Master Secret, 'N32-SC')"]

    N32_SK --> CEK["Content Encryption Key (CEK)<br/>用于JWE消息加密<br/>KDF(N32_SK, 'CEK')"]
    N32_SK --> CIK["Content Integrity Key (CIK)<br/>用于JWS签名<br/>KDF(N32_SK, 'CIK')"]
    N32_SK --> DEK["Data Encryption Key (DEK)<br/>用于IECIES字段加密<br/>KDF(N32_SK, 'DEK')"]

    CEK --> JWE_MSG["JWE加密的N32f消息体"]
    CIK --> JWS_SIG["JWS签名/验证"]
    DEK --> IECIES_ENC["敏感数据类型字段加密<br/>SUPI/GPSI/AV等"]

    style TLS_TLS fill:#2c3e50,color:#fff
    style N32_SK fill:#e74c3c,color:#fff
    style CEK fill:#3498db,color:#fff
    style CIK fill:#3498db,color:#fff
    style DEK fill:#3498db,color:#fff

6.2 密钥生命周期管理

参数 值 说明
CEK长度 256 bits AES-256-GCM
CIK长度 256 bits HMAC-SHA-256或ECDSA
DEK长度 256 bits IECIES内部使用
密钥更新周期 可配置(通常24-72小时) TS 33.500 §6.4.3
密钥更新触发 时间到期或消息计数阈值 防止密钥疲劳攻击

密钥更新通过重新执行N32-c协商实现(状态机中的Renegotiating状态)。新旧密钥过渡期间,SEPP使用密钥标识符(kid)区分不同版本的密钥。

七、实战排错:抓包识别N32信令

7.1 抓包特征识别

协议层 特征 Wireshark过滤器
TCP 目标端口443(HTTPS)或指定N32端口 tcp.port == 443
TLS SNI包含sepp相关FQDN tls.handshake.extensions_server_name contains "sepp"
HTTP/2 POST路径包含/n32c-handshake/ http2.headers.path contains "n32c"
HTTP/2 POST路径包含/n32f/ http2.headers.path contains "n32f"
JSON 包含"securityCapability"或"securityCapabilityResult" N/A(TLS加密后不可见)

7.2 常见故障场景

场景1:N32-c握手失败

故障现象:cSEPP日志显示 "N32-c negotiation rejected"
排查步骤:
1. 检查TLS证书是否过期:openssl x509 -in sepp_cert.pem -noout -dates
2. 验证PLMN-ID匹配:证书MCC/MNC vs 消息中的plmnId
3. 检查保护策略交集:两端是否至少有一个共同支持的保护策略
4. 确认CA信任链:pSEPP是否信任签发cSEPP证书的CA

场景2:N32f消息解密失败

故障现象:pSEPP返回 HTTP 401 + "Decryption failed"
排查步骤:
1. 检查密钥标识符(kid):是否使用了已过期的密钥
2. 验证时间同步:两端SEPP时钟偏差应 < 30秒
3. 检查IECIES公钥:pSEPP的公钥是否正确配置在cSEPP侧
4. 抓包对比:消息体是否在传输中被截断或修改

场景3:Hubbing场景消息丢失

故障现象:N32f消息发送后无响应
排查步骤:
1. 检查逐跳TLS状态:每段连接是否都保持Active
2. IPX路由策略:消息中的目标PLMN-ID是否在IPX路由表中
3. MTU问题:JWE封装后消息体增大可能导致分片失败
4. 超时配置:HTTP/2连接超时 vs 信令响应超时不匹配

八、SEPP vs 4G SEG安全架构对比

对比维度 4G SEG (TS 33.210) 5G SEPP (TS 33.500)
保护层级 传输层(IPsec隧道) 应用层(消息级JWE/JWS)
保护粒度 整条隧道所有流量 逐消息、逐字段
IPX可见性 完全可见(明文DIAMETER) 仅HTTP头可见,消息体加密
认证方式 IKEv2预共享密钥/证书 X.509证书 + TLS 1.3
拓扑隐藏 无 有(URI重写)
中间节点信任 必须完全信任IPX 仅需信任TLS层,JWE层端到端
密钥管理 IKE SA手动/自动更新 N32-c自动协商 + 定时更新
灵活性 低(隧道粒度) 高(策略可按消息类型配置)
协议栈 IPsec ESP/AH HTTP/2 + TLS + JWE/JWS

九、Release 18/19增强特性

9.1 Rel-18增强(TS 33.500 V18.x)

Release 18对SEPP机制进行了多项增强:

  1. 增强的密钥更新机制:支持无缝密钥轮换,不中断在途消息处理
  2. SEPP过载保护:N32-c协商新增流量控制参数,防止漫游信令风暴
  3. 多N32-f连接支持:允许同一对SEPP间建立多个并行的N32-f通道,提高吞吐量

9.2 Rel-19演进方向

3GPP SA3工作组在Rel-19中正在讨论的SEPP增强:

  1. 后量子密码学(PQC)迁移:为IECIES和TLS引入抗量子算法
  2. SEPP联邦架构:支持多SEPP实例部署,提高可用性和负载均衡
  3. 增强审计日志:标准化SEPP操作日志格式,满足合规审计需求
  4. 与Network as Code集成:SEPP安全策略可编程化,支持API驱动的安全规则配置

常见问题

Q1: N32-c和N32-f是否可以使用不同的TLS连接? A: 是的。N32-c建立独立的TLS连接用于安全能力协商。N32-f使用自己的HTTP/2长连接,两者在逻辑上分离。N32-f连接使用从N32-c协商阶段派生的密钥进行应用层保护,而非依赖传输层TLS加密(虽然TLS仍然存在)。

Q2: Hubbing场景中IPX提供商能看到哪些信息? A: 在N32 Full Protection模式下,IPX只能看到HTTP/2头部(如目标URI路径、Host头)和JWE封装后的密文。在N32 Clear-Text Protection模式下,IPX可以看到完整的JSON消息体但无法修改(JWS签名保护)。3GPP推荐漫游场景使用Full Protection模式。

Q3: SEPP如何处理非预期的消息(如来自未知PLMN的请求)? A: SEPP在TLS层就拒绝未授权的连接——如果对端证书中的PLMN-ID不在本SEPP的漫游协议列表中,TLS握手将被拒绝。即使TLS连接建立,N32-c能力协商阶段也会因PLMN-ID不匹配而失败。这是一种纵深防御策略。

Q4: 5G SEPP能否与4G SEG共存? A: 可以。在EPS-5GS互操作场景中(TS 23.501 Annex D),N26接口跨PLMN通信仍通过SEG保护,而纯5G漫游信令通过SEPP保护。运营商在向5G SA漫游迁移过程中通常经历"SEG+SEPP共存"的过渡期。

Q5: SEPP如何影响漫游信令延迟? A: SEPP引入的额外延迟主要包括:(1)消息级加解密处理时间(约1-3ms/消息);(2)JWE封装/解封装开销(约0.5-1ms)。总体额外延迟通常在5ms以内,相对于跨PLMN的传输延迟(通常50-200ms)影响可忽略。但密钥更新期间可能出现短暂的额外延迟。

参考来源

  1. 3GPP TS 33.500 V18.2.0 — Security Edge Protection Proxy (SEPP) for 5G inter-PLMN security, Section 6 (N32 security procedures)
  2. 3GPP TS 29.573 V18.3.0 — N32f and N32-c interface protocols and message flows, Section 5 (N32 Procedures)
  3. 3GPP TS 33.501 V18.4.0 — Security architecture for 5G System, Section 13.2 (Application layer security on N32)
  4. 3GPP Official: 5G Roaming Security — SA3工作组漫游安全架构概述
  5. NTT Data: Security Edge Protection Proxy Technical Paper — SEPP技术白皮书,含部署架构和安全分析

本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入