首页 › security › 5G用户面完整性保护机制拆解

5G 用户面完整性保护与抗重放机制拆解

聚焦 TS 33.501 §5.4 / Annex A.7、TS 38.331 pdcp-Config.integrityProtection、TS 38.323 §5.9 三个规范之间的协同,拆解从安全策略下发到 PDCP MAC-I 校验的全链路。


一、为什么 5G 必须引入"用户面完整性保护"

在 LTE 时代,空口的用户面(UP)只做加密(ciphering),不做完整性保护。这并非疏忽,而是带宽与处理能力的折衷——下行吞吐量动辄几百 Mbps,对每个 PDCP PDU 计算 4 字节 MAC-I 在早期基带芯片上是不可承受的开销。

但这一设计留下了一个被反复利用的缺口:加密只能保证"看不到",却保证不了"改不了"。攻击者即使无法解密,也可以在空口上翻转密文比特、注入或重放 PDU,从而引发:

为此,3GPP 在 TS 33.501 中为 5G NR 用户面引入了完整性保护(User Plane Integrity Protection, UPIP),并在 Release 16 将其"支持能力"提升为 UE/基站的强制实现要求(实现强制,激活仍由网络按承载决定)。本机制的规范落点横跨三个 TS,三者职责清晰:

规范 角色 关键章节
TS 33.501 安全架构与需求、密钥推演、算法 §5.4、§6.2、Annex A.7
TS 38.413 核心网向基站下发安全策略 SecurityIndication IE
TS 38.331 RRC 配置每条 DRB 的 PDCP 安全 drb-ToAddMod.pdcp-Config
TS 38.323 PDCP 实体执行 MAC-I 计算与抗重放 §5.9、§5.10

设计意图可以一句话概括:把"是否对用户面做完整性"从一个不可协商的缺陷,变成一个网络可按 DNN/切片/承载粒度策略化决策、且 UE 一定具备能力的可控开关。


二、端到端信令时序:从策略到 MAC-I 校验

sequenceDiagram
    autonumber
    participant UDM as UDM/UDR
    participant AMF as AMF
    participant gNB as gNB
    participant UE as UE
    participant PDCP as PDCP实体

    Note over UDM,AMF: 1. 安全策略来源
    UDM->>AMF: 订阅数据含每DNN/S-NSSAI<br/>UP完整性策略(required/preferred/notNeeded)
    Note over AMF: 2. 注册流程中AMF建立安全上下文
    AMF->>UE: Authentication(5G AKA/EAP) → 建立KSEAF→KAMF
    Note over UE,gNB: 3. AS安全模式激活(SMC, TS 38.331)
    gNB->>UE: RRC SecurityModeCommand<br/>(integrity算法=NIA1/2/3, ciphering算法=NEA1/2/3)
    UE->>gNB: RRC SecurityModeComplete(含UE安全能力)
    Note over gNB: 推演: KNG-R→KRRCint, KUPint, KUPenc (Annex A.7)
    Note over AMF,gNB: 4. 下发会话建立+安全指示
    AMF->>gNB: NGAP InitialContextSetupRequest/<br/>PDUSessionResourceSetupRequest<br/>SecurityIndication{integrityProtectionRequirement=required}
    Note over UE,gNB: 5. DRB建立并激活UP完整性
    gNB->>UE: RRC Reconfiguration<br/>drb-ToAddMod{pdcp-Config{integrityProtection=enabled}}
    Note over UE,PDCP: 6. 数据面逐包校验
    UE->>PDCP: 上行PDCP Data PDU + MAC-I(4B)
    PDCP->>gNB: COUNT递增, 用KUPint重算MAC-I比对
    Note over gNB,PDCP: 失配→丢弃; COUNT越窗→丢弃(抗重放)

下面对每个阶段做 IE 级解析。

2.1 安全策略的来源与下发(TS 33.501 §5.4 + TS 38.413)

UP 完整性策略本质上是一个运营商策略,而非协议本身强制的"always on"。它的来源链是:

  1. UDR/UDM:在订阅数据或本地配置中,按 (DNN, S-NSSAI) 维度存储安全策略,字段含义为该会话的用户面完整性保护要求,取值三态:required(必须)、preferred(优先)、not needed(不需要)。
  2. AMF:在 PDU 会话建立/上下文建立时,通过 NGAP 把策略带给 gNB。
  3. gNB:拿到 SecurityIndication 后,结合 UE 安全能力(UE 是否支持 UP 完整性)和选定的算法,决定每条 DRB 是否真的激活。

NGAP 中承载该策略的 IE(TS 38.413):

IE 名称 关键子字段 取值 含义
SecurityIndication integrityProtectionRequirement required / preferred / not-needed 网络对该会话用户面完整性的硬性要求
SecurityIndication confidentialityProtectionRequirement required / preferred / not-needed 加密要求(独立配置)
SecurityResult(gNB→AMF 回告) integrityProtectionResult performed / not performed gNB 实际激活结果,供 AMF 记账/计费

设计要点:required 是硬约束——若 UE 不支持,gNB 应拒绝建立该承载并回告失败;preferred 是软偏好——能力允许时尽量做。这种三态设计让运营商可以为高价值切片(如 URLLC、企业专网)单独打上 required,而为海量尽力而为流量保持 not needed 以省算力。

2.2 AS 安全上下文激活(TS 38.331 SecurityModeCommand)

完整性算法的"选择"发生在 AS SMC 阶段,且控制面与用户面共用同一套算法标识。SecurityModeCommand 携带:

选中后,gNB 与 UE 分别用 KNG-R 推演出四把 AS 密钥(TS 33.501 §6.2 / Annex A.7):

flowchart LR
    KAMF[KAMF] --> KNGR[K<sub>NG-R</sub><br/>gNB根密钥]
    KNGR --> KRRCCenc[K<sub>RRC-enc</sub>]
    KNGR --> KRRCint[K<sub>RRC-int</sub>]
    KNGR --> KUPenc[K<sub>UP-enc</sub>]
    KNGR --> KUPint[K<sub>UP-int</sub>]
    KUPint -.加密算法identity+NIA算法.-> MAC[MAC-I计算]

    style KUPint fill:#ffe0b2,stroke:#e65100
    style MAC fill:#c8e6c9,stroke:#2e7d32

KDF 推演(Annex A.7)的输入串结构为标准 3GPP Key Derivation Function 形式:

S = FC(0x69) || Algorithm_Type(1B) || Algorithm_Identity(1B) || L0(2B) || L1(2B)
Key = HMAC-SHA-256( K_NG-R , S )   // 截取低128/256bit

因此 KUPint 与 KRRCint 推演公式相同,仅 Algorithm_Type 区分用途——这是规范刻意复用,保证算法切换时四把密钥同步刷新。

2.3 每 DRB 激活:RRC 配置(TS 38.331)

算法选好后,是否对某条 DRB 实际生效,取决于 RRCReconfiguration 中 drb-ToAddMod 内的 PDCP 配置:

IE 路径 字段 作用
drb-ToAddMod pdcp-Config 该 DRB 的 PDCP 安全参数容器
pdcp-Config integrityProtection present=激活完整性(DRB)
pdcp-Config cipheringDisabled 显式关闭加密(如空口明文调试/特殊场景)
pdcp-Config sdap-Config / rlc-Mode 关联 RLC AM/UM 模式

R15 与 R16 的关键差异在于适用范围:

flowchart TB
    subgraph R15
        A1[DRB-RLC AM] -->|支持UP完整性| B1[integrityProtection可选]
        A2[DRB-RLC UM] -->|不支持| C1[仅加密]
    end
    subgraph R16
        D1[DRB-RLC AM] -->|支持| E1[integrityProtection]
        D2[DRB-RLC UM] -->|R16扩展支持| E2[integrityProtection]
    end
    style B1 fill:#fff9c4
    style E2 fill:#c8e6c9

这是为什么 VoNR 的安全等级在 R16 之后显著提升——之前的 IMS RTP 流在空口只加密、可被比特翻转,R16 后可同时做完整性。


三、PDCP 执行机制:MAC-I 与 COUNT(TS 38.323 §5.9)

完整性保护与抗重放的实际执行在 PDCP 子层。其工作模型由两个核心概念支撑:MAC-I 与 COUNT。

3.1 MAC-I 的计算

MAC-I(Message Authentication Code – Integrity)是 4 字节的认证标签,PDCP 实体对每一个数据 PDU 独立计算并附加在 PDU 末尾。计算输入(TS 38.323 §5.9):

MAC-I = F( KEY = K_UPint ,
           BEARER = RB_Identity ,
           DIRECTION = 0(上行)/1(下行) ,
           COUNT = HFN || PDCP_SN ,
           MESSAGE = PDCP_DataPDU_without_MAC-I )

其中:

接收端用同样的输入重算 MAC-I',与收到的 MAC-I 比对:不一致 → 丢弃该 PDU 并触发安全违规计数。

3.2 COUNT 与抗重放窗口

flowchart TD
    subgraph COUNT["COUNT (32 bit)"]
        HFN["HFN 超帧号 (高位)"] --- SN["PDCP_SN 序列号 (12/18 bit)"]
    end
    COUNT -->|每发/收一个PDU| INC["COUNT += 1 (单调递增)"]
    INC --> RX["接收端维护重排序/接收窗口"]
    RX -->|PDU COUNT落在窗口内且已收过| DROP["丢弃=抗重放"]
    RX -->|COUNT落在窗口内未收过| ACCEPT["接收+校验MAC-I"]
    RX -->|COUNT落后于窗口下沿| DROP2["丢弃=乱序超窗"]

    style DROP fill:#ffcdd2,stroke:#c62828
    style DROP2 fill:#ffcdd2,stroke:#c62828
    style ACCEPT fill:#c8e6c9,stroke:#2e7d32

COUNT = HFN(高位)|| PDCP SN(低位)。SN 在 PDCP 头中明文携带(12 bit 或 18 bit),HFN 不在空口传输,由收发两端根据 SN 回卷自行维护,这正是为何完整性必须用 COUNT 而非裸 SN——HFN 由双方各自维护、攻击者无法从空口推断,从而 COUNT 成为"双方共享的秘密序号"。

接收端维护一个接收/重排序窗口(受 t-Reordering 控制):

这套机制同时提供了完整性(防篡改)与抗重放(防复制注入)两重防护,且二者共用同一 COUNT 基础设施。


四、R15 / R16 / EPS 能力对比

维度 EPS (LTE) 5G NR R15 5G NR R16/R17+
用户面完整性 无(仅加密) 可选,仅 RLC AM 实现强制,AM+UM 均支持
用户面加密 可选 可选(可关) 可选,可与完整性独立配置
控制面完整性 强制 强制 强制(256-bit 算法可选)
算法 EIA1/2/3 NIA1/2/3(同基底) NIA1/2/3 + 256-bit NIA
抗重放 仅 CP CP+UP(激活时) CP+UP(激活时)
策略粒度 无 每 DNN/S-NSSAI 每 DNN/S-NSSAI

五、抓包识别与故障排查

5.1 如何在抓包中确认 UP 完整性已激活

  1. NGAP 层:在 InitialContextSetupRequest 或 PDUSessionResourceSetupRequest 中查找 SecurityIndication,确认 integrityProtectionRequirement 值;在反向 Security Result 中确认 integrityProtectionResult = performed。
  2. RRC 层:在 RRCReconfiguration → drb-ToAddMod[*].pdcp-Config 中确认 integrityProtection 字段是否存在;同时核对 securityAlgorithmConfig 中 SMC 选定的 NIA 算法。
  3. PDCP 层:数据 PDU 末尾多出 4 字节 MAC-I;若开启完整性但加密关闭,可见明文 payload + 4B MAC-I,便于校验。

5.2 常见故障点

现象 可能原因 排查思路
大量 PDCP PDU 丢弃,TCP 吞吐骤降 MAC-I 校验失败(密钥不同步) 检查 SMC 算法协商、KNG-R 刷新时机、是否发生 intra-gNB DU change 未刷新
注册成功但 DRB 建立失败 策略 required 但 UE 能力不支持 查 NGAP UE Security Capability 是否含 UP 完整性能力;确认 UE R16 支持位
切换后少量包丢失 切换瞬间 COUNT/HFN 未同步 检查源/目标 gNB 间 PDCP COUNT 转发、HO Command 中安全配置
基带 CPU 占用升高 NIA2(AES)在高吞吐下开销大 评估算法选型,URLLC 切片可保留,海量 eMBB 可设 preferred
VoNR 偶发杂音 R15 UE 不支持 UM 完整性却被配 required 确认 UE R 版本;R15 UE 的 UM 承载不应强制完整性
## 六、常见问题

Q1:用户面完整性保护开启后,为什么还要单独保留加密?二者职责不同吗? A:是的。完整性(integrity)防篡改、防重放,加密(confidentiality)防窃听。两者在 TS 33.501 中是独立配置的(integrityProtectionRequirement 与 confidentialityProtectionRequirement 分开),用不同密钥(KUPint 与 KUPenc)。一个会话可以"只加密不完整"(R15 常见)、"只完整性不加密"(如调试明文场景,cipheringDisabled)、或"两者都开"(R16 安全首选)。这种正交设计让运营商能按需组合。

Q2:为什么用户面完整性在 LTE 时代没有,却成了 5G R16 的强制实现项? A:核心驱动是 aLTEr 等中间人攻击被公开披露,证明"只加密不完整性"不足以抵御密文翻转/注入;同时基带芯片算力提升使每包 MAC-I 开销可接受。3GPP 顺势在 R16 将"UE/基站必须支持 UP 完整性"写入实现要求,但激活与否仍由网络按策略决定,避免一刀切造成性能损失。

Q3:MAC-I 是明文发送的,攻击者能看到,这安全吗? A:MAC-I 的安全性依赖 KUPint 与 COUNT 的保密性,而非 MAC-I 本身的保密。KUPint 由双方各自推演、从不在空口传输;COUNT 中的 HFN 也不在空口传输(仅 SN 明文)。攻击者即便看到 MAC-I,没有密钥也无法伪造出能通过校验的新 MAC-I,也无法构造合法的重放包(被窗口机制拦截)。

Q4:激活 UP 完整性后,COUNT 回卷(wraparound)会有什么风险? A:当 PDU 计数达到 COUNT 上限(32 bit),若继续使用同一密钥,COUNT 将回卷,理论上有重用相同 (KEY, COUNT) 对的风险。规范要求在接近回卷前刷新密钥(重新执行 AS 安全上下文建立或密钥刷新过程),保证 (KEY, COUNT) 对不重复使用,这是密码学安全的硬性前提。

Q5:VoNR 的 RTP 流在 R15 和 R16 下安全等级有何不同? A:VoNR 承载通常是 RLC UM(低时延)。R15 下 UM 不支持 UP 完整性,所以 RTP 仅被加密,存在被比特翻转篡改的风险;R16 扩展了 UM 完整性支持后,VoNR 可同时获得完整性与抗重放保护,安全等级显著提升——这也是 R16 在语音安全上的一个重要进步。


参考来源

  1. 3GPP TS 33.501 — Security architecture and procedures for 5G system — §5.4 用户面安全要求、§6.2 与 Annex A.7 AS 密钥推演(KUPint 等)
  2. ETSI TS 138 323 V19.0.0 — NR; PDCP specification — §5.9 完整性保护与校验、COUNT/MAC-I 机制
  3. 3GPP TS 38.331 — NR RRC — drb-ToAddMod.pdcp-Config.integrityProtection、SecurityModeCommand 算法配置
  4. ShareTechnote — 5G PDCP — PDCP MAC-I、SN/HFN 与完整性图解
  5. 5G6G Academy — NEA and NIA: 5G Encryption and Integrity Protection Algorithms — NIA1/2/3 算法族与 R16 强制支持说明
  6. 3glteinfo — 5G PDCP Ciphering and Integrity Protection — COUNT/BEARER/DIRECTION/KEY 输入与 MAC-I 计算分析

本文由「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学通信知识星球海报-扫码加入