在 5G 接入安全里,主认证(5G-AKA / EAP-AKA')解决的是"你是谁、你持有什么根密钥"的问题——它最终在 AMF 与 UE 之间协商出一个共享密钥 K_AMF。但拿到 K_AMF 并不等于 NAS 信令已经被保护:K_AMF 只是"弹药",还需要有人把它装进枪膛、选定口径(算法)、对准目标(NAS 层)。这个"装弹与激活"的动作,就是 Security Mode Control(SMC,安全模式控制)过程,定义在 3GPP TS 24.501 clause 5.4,其安全侧的依据与约束在 TS 33.501 clause 5.9 与 5.4 中给出。
SMC 是 5G 安全里一个被严重低估却极其关键的"一跳":
可以说:没有成功的 SMC,就没有"可信赖"的 NAS 控制面。 本文聚焦 TS 24.501 / TS 33.501 中 SMC 过程的具体信令机制,逐步拆解每个 IE 的作用、设计意图与实战排错。
SMC 不是孤立发生的,它必须发生在初始注册(或主认证完成、AMF 已获得有效 K_AMF)之后、AMF 下发 Registration Accept 之前。完整上下文如下:
sequenceDiagram
autonumber
participant UE
participant gNB
participant AMF
Note over UE,AMF: ① 注册请求(明文,携带 UE 安全能力)
UE->>gNB: Registration Request<br/>(UE security capability: NEA/NIA/UIA/UEA)
gNB->>AMF: NGAP Initial UE Message (透传 NAS)
Note over UE,AMF: ② 主认证(5G-AKA),产生 K_AMF
AMF->>UE: Authentication Request (RAND, AUTN)
UE->>AMF: Authentication Response (RES*)
Note over AMF: ③ AMF 用 K_AMF 推演 KNASint/KNASenc<br/>并选定 NEA/NIA 算法
AMF->>UE: SECURITY MODE COMMAND<br/>(selected NAS alg, ngKSI,<br/>replayed UE sec cap, ABBA, +IMEISV req)
Note over UE: ④ UE 校验 MAC、核对 replayed 能力无降级、<br/>核对 ABBA、激活安全上下文
UE->>AMF: SECURITY MODE COMPLETE<br/>(完整性保护+加密; 可选 IMEISV)
Note over UE,AMF: 后续 NAS 信令全部受保护
Note over AMF,gNB: ⑤ AMF 通过 NGAP 把含 UP 能力的<br/>完整安全能力下发给 gNB
AMF->>gNB: INITIAL CONTEXT SETUP REQUEST<br/>(UE Security Capability 含 UIA/UEA)
gNB->>UE: RRC Security Mode Command<br/>(激活 AS 完整性+加密; 可选 UP 完整性)
UE->>gNB: RRC Security Mode Complete
gNB->>AMF: INITIAL CONTEXT SETUP RESPONSE
注意第 4 步的关键属性:SECURITY MODE COMPLETE 是第一条同时被完整性保护与加密的 NAS 消息。而 SECURITY MODE COMMAND 本身是只做完整性保护、不做加密的——因为此时 UE 还未确认算法、加密尚未生效,AMF 用刚选定的 NIA 算法推演出 K_NAS_int 并对 COMMAND 计算消息鉴别码(MAC)。
SMC COMMAND 携带的 IE 数量不多,但每一个都直指安全设计意图。下表是按 TS 24.501 clause 9.11.3 列出的 IE 说明:
| IE 名称 | 规范章节 | 作用 | 必备/可选 |
|---|---|---|---|
| Extended protocol discriminator | 9.2 | 标识 5GS MM | M |
| Security header type | 9.3 | 标识本消息为完整性保护、未加密 | M |
| Selected NAS security algorithms | 9.11.3.54 | AMF 选定的 NIA + NEA |
M |
| ngKSI | 9.11.3.55 | 标识当前 NAS 密钥集(3 bit) | M |
| Replayed UE security capability | 9.11.3.48 | 回显 UE 上报的算法支持列表 | M |
| Additional 5G security parameters | 9.11.3.4 | ABBA 参数,防跨架构降级 | M |
| IMEISV request | 9.11.3.x | 请求 UE 在 COMPLETE 中回传 IMEISV | O |
下面用结构图展示 COMMAND 的逻辑构成与 UE 的校验动作:
flowchart TD
subgraph CMD["SECURITY MODE COMMAND (AMF→UE)"]
A["Selected NAS Security Algo<br/>NIA + NEA"]
B["ngKSI<br/>密钥集标识 0~6"]
C["Replayed UE Sec Capability<br/>NEA/NIA/UIA/UEA 列表"]
D["ABBA<br/>防降级参数(如 0x0000)"]
E["IMEISV Request (可选)"]
MAC["MAC_I<br/>(用 K_NAS_int 计)"]
end
A --> V1["UE: 用选定 NIA 推演 K_NAS_int<br/>并验证 MAC"]
B --> V2["UE: 绑定到本次 K_AMF"]
C --> V3["UE: 对比自己上报能力<br/>若 AMF 回显更窄 → 判定降级攻击"]
D --> V4["UE: 校验 ABBA 集<br/>防止 5G↔EPS/UMTS 降级"]
E --> V5["UE: 回传 IMEISV"]
V1 --> OK{全部通过?}
OK -->|是| SC["激活 5G NAS 安全上下文"]
OK -->|否| REJ["发送 SECURITY MODE REJECT"]
ngKSI(5G key set identifier)只有 3 bit,取值 0~6 标识 7 个不同的 NAS 密钥集,7 表示"当前无可用密钥"。它的作用类似 4G 的 KSI_ASME,但 5G 命名为 ngKSI 并区分原生(native)与映射(mapped)安全上下文:
K_AMF,t1(接入类型标识)为当前接入;K_AMF' 派生而来,t1 指向源接入。ngKSI 让 AMF 与 UE 在后续本地鉴权(无需再做一次完整主认证)时,能精确定位"用哪一套 NAS 密钥",是 5G 多接入安全上下文管理的核心。
5G NAS 安全算法命名如下(TS 33.501 Annex A):
| 类型 | 算法族 | 含义 |
|---|---|---|
| 完整性 | NIA0 / 128-NIA1 / 128-NIA2 / 128-NIA3 | null / SNOW 3G / AES / ZUC |
| 加密 | NEA0 / 128-NEA1 / 128-NEA2 / 128-NEA3 | null / SNOW 3G / AES / ZUC |
| UP 完整性 | UIA0 / 128-NIA1~3 | 复用 NIA 算法族 |
| UP 保密 | UEA0 / 128-NEA1~3 | 复用 NEA 算法族 |
一个重要规则:SMC 选定的 NIA 不能是 NIA0(null 完整性)——5G 强制要求所有 NAS 控制面消息必须做完整性保护(这是相对 4G 的重要加强)。而 NEA 可以选 NEA0(即不加密),用于某些紧急呼叫或特殊策略场景,但即便如此完整性依然存在。
SMC 最精巧的设计,不在算法本身,而在如何防止攻击者把安全等级"压低"。5G 通过两条独立机制叠加防御:
UE 在明文的 Registration Request 中上报自己支持的全部算法(UE security capability)。攻击者理论上可以篡改这份明文列表,删掉强算法,迫使 AMF 选到弱算法。SMC 用一条回手破解了它:
这就把"明文能力协商"升级成了"受完整性保护的回显确认"。
Additional 5G security parameters 携带的 ABBA(Anti-Bidding down Based on Background search / Anti-Bidding down Between Architectures),是 5G 特有的防御手段,4G 不存在。它防止的场景是:攻击者诱导 UE 相信"自己在 5G 网络",而实际把它桥接/降级到 EPS 或 UMTS,从而利用旧架构的较弱安全。
ABBA 的值是一个集合,目前典型值 0x0000 表示"当前为 5GS,使用 5G 安全"。UE 在派生 K_AMF 时把 ABBA 作为输入喂给 KDF(密钥派生函数),这意味着:只要架构判断不同,派生出的密钥就不同,UE 与网络无法对齐,连接必然失败——从密码学根上杜绝了降级。
下表对比了 4G 与 5G 在 SMC 层面的关键差异,能看出 5G"完整性优先"的演进方向:
| 维度 | 4G (EPS) | 5G (5GS) |
|---|---|---|
| 密钥集标识 | KSI_ASME | ngKSI(含接入类型 t1) |
| 算法命名 | EEA0~3 / EIA0~3 | NEA0~3 / NIA0~3 + UIA/UEA |
| NAS 完整性是否强制 | 否(可 EIA0) | 是(禁 NIA0) |
| 用户面完整性保护 | 不支持 | 支持(UIA) |
| 防降级参数 | 无 | ABBA |
| NAS 消息最大完整性 | 部分 | 全部控制面(除极少数) |
SMC 表面上只激活 NAS(控制面)安全,但它承担了一个 5G 才有的重要职责——把 UE 的用户面安全能力确认下来,并递交给 gNB。
5G 首次允许对用户面(Uu 上的 DRB)做完整性保护,TS 33.501 clause 5.10 定义了 UIA(UP integrity)与 UEA(UP confidentiality)。这套能力在 UE 侧由 ME(移动设备)支持度决定,流程是:
flowchart TD
U["UE<br/>支持 UIA/UEA 算法集"] -->|明文上报| R["Registration Request<br/>(UE security capability 含 UIA/UEA)"]
R --> AMF["AMF"]
AMF -->|SMC COMMAND 回显| U2["UE 确认无降级"]
AMF -->|NGAP Initial Context Setup| G["gNB<br/>获得含 UP 的完整能力"]
SMF["SMF<br/>(基于订阅的 UP 安全策略)"] -->|"用户面完整性/保密性要求"| UPF["UPF/N4"]
G -->|"RRC SMC + DRB 配置"| U3["UE<br/>激活 UP 完整性/加密"]
Note1["注:UP 完整性按 DRB 粒度激活,<br/>由 gNB 根据 UE 能力与网络策略决定"]:::note
classDef note fill:#fff3cd,stroke:#856404;
需要厘清一个常见误解:UP 完整性保护的"激活点"在 RRC(gNB↔UE),不在 NAS SMC。NAS SMC 只负责把"UE 支持哪些 UIA 算法"这个事实确认并通过 NGAP 透传给 gNB。最终 gNB 在 RRC Security Mode Command(TS 38.331)中,根据网络策略和 UE 能力,为每个 DRB 决定是否开启 UP 完整性。由于完整性保护对终端处理能力消耗大,标准允许仅对部分 DRB(如信令/QoS 流)开启,并非全量。
SMC 在 UE 安全状态机中触发的转换可归纳如下:
stateDiagram-v2
[*] --> NoContext: UE 开机/注册
NoContext --> PartialAuth: 主认证成功<br/>拥有 K_AMF 但未激活
PartialAuth --> FullNative: SMC COMPLETE 成功<br/>(native ngKSI)
FullNative --> FullMapped: 换接入/双注册<br/>(mapped ngKSI)
PartialAuth --> NoContext: SMC REJECT / 失败
FullNative --> NoContext: 去注册
note right of FullNative
此时所有 NAS 消息
完整性+加密保护生效
end note
注意 PartialAuth 是个逻辑中间态:K_AMF 已就绪、算法已选,但只有 SMC COMPLETE 返回后,安全上下文才被双方"正式 take into use"——在此之前下行的 NAS 消息(如 Authentication Request 之后、SMC 之前)仍是未保护的。
用 Wireshark / TShark 抓 NGAP + 5GS-NAS 时,SMC 的辨识要点:
ngap || nas-5gs,定位到 Registration 流程内;Security mode command (0x5e),安全头类型字段标识"完整性保护、不加密"。Wireshark 会尝试用已配置的 K_AMF 解 MAC,若成功说明密钥链正确;Security mode complete (0x5f),安全头为"完整性保护+加密"。若 UE 上报了 IMEISV,可在解码后看到;| 症状 | 可能原因 | 排错方向 |
|---|---|---|
UE 回 SECURITY MODE REJECT (#23) |
选定算法 UE 不支持;replayed 能力被篡改 | 核对 UE 与 AMF 算法优先级配置;抓包看 replayed 与 UE 上报是否一致 |
| SMC 后无 COMPLETE,UE 静默 | MAC 校验失败(K_AMF/算法推演不一致) | 检查 USIM、KDF 输入、AMF 版本;用 Wireshark 验 MAC |
| 注册失败且伴随 ABBA 相关日志 | ABBA 值不匹配 / 跨架构降级被拒 | 确认 UE 与 AMF 对 5G/EPS 互操作配置一致 |
| UP 完整性未生效 | DRB 未开启;UE 能力未透传到 gNB | 检查 NGAP Initial Context Setup 是否含 UIA;SMF 订阅策略 |
| 切换后 SMC 失败 | ngKSI 映射上下文出错 | 区分 native/mapped,核对 t1 接入类型 |
| ## 八、常见问题 |
Q1:SECURITY MODE COMMAND 是加密的吗?为什么?
A:不是加密的,仅做完整性保护。因为加密需用选定的 NEA 推演 K_NAS_enc,而 UE 尚未确认算法;同时 UE 必须能"看懂"COMMAND 里的算法与 ABBA 才能完成协商。完整性则用选定的 NIA 计 MAC,足以防篡改。第一条真正加密的 NAS 消息是 SECURITY MODE COMPLETE。
Q2:ngKSI 与 4G 的 KSI 有什么区别? A:本质都是密钥集标识,但 5G 的 ngKSI 携带接入类型信息(t1),能区分 native(本接入主认证产生)与 mapped(由他接入派生)两种上下文,支撑 3GPP/non-3GPP 双注册下的密钥管理,这是 4G 单接入模型所没有的。
Q3:为什么 SMC 要 replay UE 的安全能力? A:UE 在 Registration Request 里以明文上报能力,易被篡改(bidding-down 攻击)。SMC COMMAND 受完整性保护,AMF 回显收到的能力,UE 比对自己真实能力——若 AMF 回显比 UE 实际支持的更窄,即判定为降级攻击而拒绝,把明文协商升级为受保护的确认。
Q4:UP 完整性保护是在 NAS SMC 里激活的吗? A:不是。NAS SMC 只确认 UE 支持哪些 UIA 算法并通过 NGAP 透传给 gNB。UP 完整性的真正激活发生在 RRC Security Mode Command(gNB↔UE,TS 38.331),按 DRB 粒度开启,受 UE 能力、网络策略与 SMF 订阅数据共同约束。
Q5:SMC 失败会有什么后果? A:UE 回 SECURITY MODE REJECT(未保护消息),随后通常会发起去注册或重新尝试。由于安全上下文未建立,UE 无法进入受保护通信,所有后续控制面操作被阻断——这也是为何 SMC 是 5G 接入安全最关键的"门槛过程"。
本文由「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 等场景全覆盖。
