<!-- title: 5G NAS安全模式控制SMC信令拆解 -->
<!-- domain: security -->

# 5G NAS 安全模式控制（SMC）信令全链拆解：从 KAMF 到 NAS 加密完整性激活

## 一、机制定位：SMC 在 5G 安全架构中的承上启下

在 5G 系统的安全链路中，主认证（5G-AKA / EAP-AKA'）只是产出了根密钥 `K_AUSF` 并经 KDF 推演出 `K_AMF`，但这一系列密钥此时还"躺在抽屉里"没有真正使用。真正把 `K_AMF` 激活、把算法选定、把 NAS 信令通道置入加密+完整性保护状态的，正是 **NAS 安全模式控制（Security Mode Control, SMC）流程**。

根据 3GPP TS 24.501 §4.4.2.5「建立 NAS 消息的安全交换」明确规定：*"通过 NAS 信令连接安全交换 NAS 消息通常由 AMF 在注册过程中通过启动安全模式控制程序来建立。成功完成安全模式控制程序后，UE 和 AMF 之间交换的所有 NAS 消息都将使用当前的 5G 安全算法进行完整性保护……所有 NAS 消息都将使用当前的 5G 安全算法进行加密。"*

简言之，SMC 是 5G 安全状态机的"激活开关"，它完成三件事：

1. **算法协商**：在 UE 上报的安全能力范围内，AMF 选定一对（加密算法 NEA、完整性算法 NIA）；
2. **安全上下文绑定**：通过 `ngKSI` 标识当前使用的密钥集（native 或 mapped），将 `K_AMF` 派生出的 `K_NASenc` / `K_NASint` 装载到 NAS 协议栈；
3. **防降级锚定**：通过 `ABBA`（Anti-Bidding down Between Architectures）参数，防止攻击者把 UE 诱导降级到更弱的 EPS 安全域。

需要特别强调：NAS SMC 是一条"半保护"的临界消息——它本身**只做完整性保护、不加密**（因为 UE 尚未装载加密算法的下行解密能力），而它之后的 `SECURITY MODE COMPLETE` 才是**第一条既加密又完整保护**的 NAS 消息。理解这一临界性是排错的关键。

```mermaid
sequenceDiagram
    autonumber
    participant UE
    participant gNB as gNB (RRC)
    participant AMF
    note over UE,AMF: 前置：5G-AKA 主认证完成，K_AMF 已就绪
    UE->>gNB: Initial NAS message（明文）<br/>Registration Request<br/>含 UE security capability
    gNB->>AMF: NGAP Initial UE Message（透传）
    Note over AMF: 1. 校验 UE 安全能力<br/>2. 选定 NEA/NIA 算法<br/>3. 派生 K_NASenc/K_NASint<br/>4. 分配 ngKSI
    AMF->>UE: SECURITY MODE COMMAND<br/>(仅完整性保护, 未加密)<br/>Selected NAS security algo<br/>+ Replayed UE sec capability<br/>+ ngKSI + ABBA
    Note over UE: 校验回显能力=自身能力<br/>校验 ABBA<br/>装载算法与密钥
    UE->>AMF: SECURITY MODE COMPLETE<br/>(加密+完整性保护)<br/>含 IMEISV(可选) + 初始消息 MAC
    Note over UE,AMF: NAS 安全通道正式建立<br/>后续所有 NAS 消息加密+完整性保护
    AMF->>UE: Registration Accept (已加密保护)
```

## 二、设计意图：5G 相对 4G 做了哪些安全增强

很多人会把 5G NAS SMC 简单等同为 EPS 的 SMC，这是误读。5G 在此环节做了三处关键增强：

**增强一：初始 NAS 消息的部分完整性保护。** 在 EPS（TS 24.301）中，初始 Attach Request 是完全明文、完全无保护的，攻击者可篡改 UE 能力位实施降级。5G 引入了对初始 NAS 消息的"延迟完整性保护"——UE 在 `SECURITY MODE COMPLETE` 中带上对那条明文初始消息计算的 NAS-MAC（封装在 `NAS message container` 中），AMF 收到后回算校验。这一机制堵住了 4G 时代著名的"初始消息篡改"攻击面。

**增强二：ABBA 反降级参数。** 4G 只能针对"算法降级"防护（通过 capability 回显），却无法防御"架构降级"——即攻击者诱导 UE 从 5G 退到 4G。ABBA 由网络下发，UE 本地校验其值是否大于或等于 UE 内部记录的最小集合，不满足则拒绝。详见 TS 33.501 §6.7。

**增强三：ngKSI 的 native/mapped 区分。** 4G 的 KSI 只有 0–6 取值，5G 的 ngKSI 还额外编码"密钥来源"（native 直接来自 5G 认证 / mapped 由 EPS 映射而来），便于在 N26 互通过程中正确管理两套安全上下文。

## 三、逐消息 IE 深度解析

### 3.1 SECURITY MODE COMMAND（下行，AMF→UE）

这是 SMC 流程的核心控制消息，TS 24.501 §8.2 中定义其关键 IE 如下：

| IE 名称 | 是否必选 | 作用 | 编码要点 |
|---------|---------|------|---------|
| Extended protocol discriminator | M | 标识 5GMM | 区分 SM/ MM 消息 |
| Security header type | M | 标识完整性保护、未加密 | 取值标明"integrity protected" |
| Message type | M | SECURITY MODE COMMAND | 枚举值 |
| **Selected NAS security algorithm** | M | 选定 NEA + NIA | 1 字节，type 4，高4位完整性/低4位加密（或反之，按TS编码） |
| **ngKSI** | M | 标识密钥集 | 0–6，含 native/mapped 标志 |
| **Replayed UE security capability** | M | 回显 UE 上报的算法能力 | NEA/NIA bit map，防止篡改 |
| **ABBA** | M | 反架构降级 | 长度 + 内容，内容值随网络部署递增 |
| Additional 5G security information | O | 紧急呼叫相关 | 含 RG 等子字段 |
| IMEISV request | O | 请求设备身份 | SM Complete 中带回 |

### 3.2 SECURITY MODE COMPLETE（上行，UE→AMF）

```mermaid
graph TD
    A[SECURITY MODE COMPLETE] --> B["Security header: 加密+完整性保护<br/>首条受全保护NAS消息"]
    A --> C[IMEISV 携带, 网络请求时]
    A --> D["NAS message container<br/>含初始NAS消息的MAC校验值"]
    A --> E[5GMM cause: 仅Reject带]
    D --> D1["对明文 Registration Request<br/>计算NAS-MAC"]
    D --> D2[AMF回算并比对]
    D2 --> D3{匹配?}
    D3 -->|否| F["判定初始消息被篡改<br/>拒绝/去注册"]
    D3 -->|是| G[初始消息合法性确认]
    style B fill:#d4edda,stroke:#28a745
    style D fill:#fff3cd,stroke:#ffc107
```

**SMC COMPLETE 的两个特殊价值**：第一，它是第一条真正加密的 NAS 消息，UE 此时已装载 NEA 算法；第二，它可选携带 `IMEISV`，完成设备身份核查——这是 5G 反盗窃、反伪基站的重要一环（详见 TS 23.502 注册流程中的 Equipment Identity Check）。

### 3.3 SECURITY MODE REJECT（UE→AMF）

当 UE 无法接受 AMF 选定的算法或安全参数时，回送 Reject，携带 **5GMM cause**（TS 24.501 §9.11.3.2）。常见原因值：

- **#24 Security mode rejected, unspecified**：通用拒绝
- **#23 Congestion**：拥塞
- 当 UE 能力被篡改导致回显不匹配，UE 本地校验失败也会拒绝

实际网络中，Reject 最常见的诱因是**算法能力不匹配**：例如 UE 只支持 NEA2/NIA2，而 AMF 因策略强制选择 NEA3，或反向 AMF 错误地回退到 NEA0。

## 四、算法协商与 NEA/NIA 算法体系

5G 定义了 8 个核心安全算法（TS 33.501 Annex A/B），NAS 层使用其中前缀为 N 的版本：

| 算法 | 类型 | 基础密码原语 | 用途 |
|------|------|------------|------|
| NEA0 / NIA0 | Null | 无 | 仅紧急未认证会话 |
| NEA1 / NIA1 | 128-bit | SNOW 3G | 加密/完整性 |
| NEA2 / NIA2 | 128-bit | AES-CTR / AES-CMAC | 加密/完整性（最广泛部署）|
| NEA3 / NIA3 | 128-bit | ZUC | 加密/完整性 |

**算法选择原则**（TS 33.501 §5.1.x）：AMF 在 UE 上报能力 ∩ 网络策略支持的算法集合中，按"非空算法优先于空算法、高位算法优先于低位"选取。NEA0/NIA0 只允许用于**未认证的紧急呼叫**，正常注册若被选到 Null 算法，UE 应在完成紧急注册后视为受限。

**抗降级的关键——ABBA**：ABBA 不是算法选择，而是"安全域版本号"。其值为一个集合，UE 维护本机支持的最小 ABBA 集合。若网络下发的 ABBA 未覆盖 UE 要求的最小集合，UE 判定为降级企图。这一机制在 GSMA 安全研究《Never let me down again: Bidding-Down Attacks》中被证实可有效阻断 5G↔4G 互操作降级链。

## 五、ngKSI 与 NAS 安全上下文生命周期

ngKSI（5G key set identifier）虽只有 3 比特，却是安全上下文管理的核心索引。它的取值语义：

- **0–6**：表示一个有效密钥集，配合 1 比特区分 **native**（本域 5G 认证派生）与 **mapped**（从 EPS 的 KASME 映射而来，用于 N26 单注册模式）；
- **7**："no key available"，UE 当前无可用的安全上下文。

理解 native/mapped 的区别对排查 N26 切换场景至关重要：当 UE 从 EPS 切到 5GS 且使用单注册模式时，AMF 通过 mapped 密钥建立临时安全上下文，此时 SMC 选定的 ngKSI 带 mapped 标志，后续 UE 重新执行 5G-AKA 后才会升级为 native。

```mermaid
stateDiagram-v2
    [*] --> 无安全上下文: ngKSI=7
    无安全上下文 --> 主认证中: 发起 Registration
    主认证中 --> 上下文待激活: K_AMF就绪
    上下文待激活 --> NAS安全激活: 收到SMC, 校验通过
    NAS安全激活 --> NAS安全激活: AS SMC独立激活用户面
    NAS安全激活 --> 无安全上下文: Deregistration/超时
    NAS安全激活 --> 上下文待激活: 重新认证 re-auth<br/>ngKSI递增
    note right of NAS安全激活
        SMC后所有NAS消息:
        完整性保护(MANDATORY)
        加密(除明文白名单)
    end note
```

## 六、密钥派生链：从 KAMF 到 NAS 会话密钥

SMC 流程"激活"的本质，是用 `K_AMF` 通过 KDF 推演出 NAS 专用密钥并装载（TS 33.501 §6.4、§6.6）：

- `K_NASenc = KDF(K_AMF, 0x69 || NN || ...)` —— NAS 加密密钥
- `K_NASint = KDF(K_AMF, 0x6E || NN || ...)` —— NAS 完整性密钥

其中 NN 是算法区分参数（区分 enc/int），KDF 输入还包含 SNPN/Serving Network 标识，确保不同网络派生出的密钥相互隔离。

需要与已介绍的「密钥层级树」相区分：本文聚焦的是 `K_AMF` 这一层向**横向**（NAS enc/int）的派生与激活，而密钥层级树讲的是从 `K` 到 `K_SEAF`、`K_AMF`、再到 `K_gNB`/`K_NAS` 的纵向树状结构。两者是同一棵树的不同切面。

## 七、实战连接：抓包识别与故障排错

### 7.1 抓包如何识别 SMC 流程

在 Wireshark / TShark 过滤器中：

- NAS 消息名 `nas_5gs.mm.message_type == 93`（SECURITY MODE COMMAND）、`94`（COMPLETE）、`95`（REJECT）；
- 关键观察点：SMC COMMAND 的 `Security header type` 应为 "Integrity protected"（**不含** ciphered 标志），而 COMPLETE 应为 "Integrity protected and ciphered"。如果 COMMAND 被标记为加密，说明抓包侧或网络侧实现异常。
- 重点展开 `Selected NAS security algorithm` 字段，确认 NEA/NIA 编号；展开 `Replayed UE security capability` 与注册请求中的 UE 能力做逐 bit 比对。

### 7.2 常见故障点

| 故障现象 | 根因 | 排错思路 |
|---------|------|---------|
| UE 回送 SMC REJECT | 算法能力不匹配 / ABBA 校验失败 | 比对回显能力与 UE 上报；检查 AMF 算法策略与 ABBA 配置 |
| SMC COMPLETE 解不开（MAC-I 错误） | 密钥派生输入不一致 / K_AMF 错误 | 排查主认证是否真正成功、KDF 的 serving network 输入 |
| 注册卡在 SMC 不完成 | AS 安全未就绪 / RRC 容器丢失 | 确认 AS SMC 已执行，gNB 已下发 AS 安全算法 |
| 紧急呼叫使用了 NEA0 | 未认证紧急会话 | 属正常策略，非故障；但需核查是否被滥用 |
## 八、5G NAS SMC 与 EPS SMC 对比

| 维度 | EPS NAS SMC (TS 24.301) | 5G NAS SMC (TS 24.501) |
|------|------------------------|------------------------|
| 密钥基础 | KASME | K_AMF |
| 密钥集标识 | KSI (0–6) | ngKSI (0–6, native/mapped) |
| 初始消息保护 | 完全明文无保护 | SM COMPLETE 中带初始消息 MAC |
| 防架构降级 | 无 | ABBA 参数 |
| 算法前缀 | EEA/EIA | NEA/NIA |
| SUCI 隐私 | SUPI 明文 | 注册前 SUCI 加密（SIDF） |

## 九、常见问题

**Q1: SMC COMMAND 为什么只完整性保护而不加密？**
A: 因为此时 UE 尚未装载所选加密算法的下行解密能力——算法正是在这条消息中刚被通告的。若加密下发，UE 无法解密读取。完整性保护用的是当前已有的 `K_NASint`（可对明文计算 MAC），不依赖算法协商完成，因此可行。

**Q2: ngKSI 的 native 和 mapped 到底什么区别？**
A: native 表示密钥直接来自 5G 本域的 5G-AKA/EAP-AKA' 认证（K_AMF 由 K_SEAF 派生）；mapped 表示密钥由 EPS 的 KASME 通过 KDF 映射而来，仅在 N26 单注册模式跨系统移动时临时使用，安全性略低于 native，后续应触发重认证升级。

**Q3: UE 如何防御算法降级攻击？**
A: 三重防线：① Replayed UE security capability 回显校验，确保 UE 上报的能力未被中间人篡改；② 不接受低于本机最低要求的算法；③ ABBA 参数防架构降级。三者结合使 NAS SMC 具备端到端的降级防护。

**Q4: Security Mode Reject 后 UE 会做什么？**
A: UE 进入去注册相关处理，通常 abort 当前注册尝试，根据 cause 决定是否回退到紧急注册（仅紧急服务）或回到 RM-DEREGISTERED 状态等待重试。AMF 侧应记录告警，因为正常 UE 不应拒绝合法算法协商。

**Q5: NAS SMC 与 AS SMC 是什么关系？**
A: 两者独立。NAS SMC（AMF↔UE，TS 24.501）保护 NAS 信令；AS SMC（gNB↔UE，TS 38.331 RRC）保护空口 RRC 与用户面。NAS SMC 通常先完成，随后 AMF 通过 NGAP 触发 gNB 执行 AS 安全激活，建立 `K_gNB` 派生的空口密钥。

## 参考来源

1. [3GPP TS 24.501 V18.x — Non-Access-Stratum (NAS) protocol for 5GS](https://www.etsi.org/deliver/etsi_ts/124500_124599/124501/17.07.01_60/ts_124501v170701p.pdf) — §4.4.2.5 建立 NAS 消息的安全交换，§8.2 消息内容定义
2. [3GPP TS 33.501 V18.10.0 — Security architecture and procedures for 5G System](https://www.etsi.org/deliver/etsi_ts/133500_133599/133501/18.10.00_60/ts_133501v181000p.pdf) — §6.4/§6.6 NAS 密钥派生，§6.7 ABBA，Annex A/B 算法定义
3. [ShareTechnNote — 5G Security / Authentication](https://www.sharetechnote.com/html/5G/5G_Security.html) — NAS Security Mode Command 流程与算法选择解读
4. [3glteinfo — 5G NAS Security Mode Procedure Call Flow](https://www.3glteinfo.com/call-flows/5g-security-mode-command/) — SMC 呼叫流程与失败分支分析
5. [GSMA — Never let me down again: Bidding-Down Attacks and Mitigations in 5G and 4G](https://www.gsma.com/solutions-and-impact/technologies/security/wp-content/uploads/2023/10/0064-Never-let-me-down-again-Bidding-Down-Attacks.pdf) — ABBA 与降级攻击学术分析
6. [arXiv:2212.09149 — From NEA and NIA to NESAS and SCAS: Demystifying the 5G Security Architecture](https://arxiv.org/abs/2212.09149) — 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 等场景全覆盖。

![51学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
