<!-- title: 5G加密接力：密钥如何层层派生 -->

# 5G加密接力：密钥如何层层派生

## 一个保险箱的层层递进

想象你是一家银行的金库管理员。最里面的保险柜有一把"祖传主钥匙"，永远锁在地下金库的最深处，从不直接使用。每天开门时，主管用主钥匙打开内层门，取出一把"日钥匙"交给大厅经理；大厅经理再用日钥匙派生出"窗口钥匙"分给柜员；柜员用窗口钥匙才能打开客户面前的保险箱。

这样设计有一个核心好处：**最珍贵的根密钥永远不离开金库，但每一次派生出来的子钥匙都能完成具体任务**。即使某个窗口钥匙被偷，柜员被换，主钥匙依然安全，第二天重新派生一把新钥匙即可。

5G 系统的安全体系，用的就是完全相同的"密钥派生接力"思想。一根永不外泄的永久密钥 `K`，经过一连串单向派生，最终变成空口上加密信令和数据的临时钥匙。理解了这条接力链，你就理解了 5G 安全设计 80% 的精髓。

---

## 一、为什么不能"一把钥匙开到底"

很多初学者会问：既然终端（UE）和核心网（UDM）共享一把永久密钥 `K`，为什么不直接用它加密所有通信？非得派生一堆子密钥，是不是多此一举？

答案藏在三个工程现实里：

1. **密钥泄露隔离**：一旦空口密钥被破解（例如伪基站攻击、侧信道攻击），攻击者只能获得这一层的临时密钥，无法回溯到根密钥 `K`。换一把临时钥匙，攻击归零。

2. **职责分离**：加密 NAS 信令、加密 RRC 信令、加密用户面数据，需要**不同的密钥**。这样即使某类流量被破译，不会波及其他类型——这就是"分而治之"的安全原则。

3. **移动性锚定**：用户在基站间频繁切换，每次切换都要换 gNB 密钥。但有些密钥（如 `K_SEAF`）必须**跨 AMF 保持稳定**，否则一换 AMF 就要重新做一次完整认证，网络根本扛不住。

所以 5G 的密钥不是一棵树，更像一条**接力链**：每一段密钥有明确的"作用域"和"生命周期"，用完即弃，层层向下。

---

## 二、密钥派生全景：一条接力链

下面这张图是 5G 安全的核心——从永久密钥 `K` 一直派生到空口临时密钥的完整链路。

```mermaid
flowchart TD
    K["永久密钥 K<br/>(USIM ↔ UDM 共享，永不出库)"]
    CKIK["CK / IK<br/>(认证过程派生的中间密钥)"]
    KAUSF["K_AUSF<br/>(锚定在 AUSF)"]
    KSEAF["K_SEAF<br/>(锚定在 AMF/SEAF，跨 AMF 移动性锚)"]
    KAMF["K_AMF<br/>(锚定在 AMF)"]
    KGNB["K_gNB<br/>(锚定在 gNB)"]

    KNAS["KNASint / KNASenc<br/>(NAS 信令保护)"]
    KRRC["KRRCint / KRRCenc<br/>(RRC 信令保护)"]
    KUP["KUPint / KUPenc<br/>(用户面数据保护)"]

    K -->|AKA 认证| CKIK
    CKIK --> KAUSF
    KAUSF --> KSEAF
    KSEAF --> KAMF
    KAMF --> KGNB
    KAMF --> KNAS
    KGNB --> KRRC
    KGNB --> KUP

    style K fill:#ffd6d6,stroke:#c00
    style KSEAF fill:#fff2cc,stroke:#bf9000
    style KUP fill:#d9ead3,stroke:#38761d
```

派生的每一步都走一个标准化的 **KDF（密钥派生函数）**，输入是"上一层密钥 + 一串参数（如网络名、算法标识、计数值）"，输出是下一层密钥。整个过程是单向的——你无法从子密钥反推出父密钥（这依赖哈希函数的单向性）。

下面这张表把这条链上每个密钥的"职责"和"归属"讲清楚，这是工程师排查安全问题时最常查阅的一张表。

### 表1：5G 密钥层级职责对照表

| 密钥 | 派生方 / 持有方 | 主要用途 | 生命周期 |
|------|----------------|---------|---------|
| `K` | USIM ↔ UDM/ARPF | 永久根密钥，一切派生的源头 | 长期（写卡时固化） |
| `CK/IK` | 认证向量派生 | 加密/完整性中间密钥（4G 遗留概念） | 一次认证周期 |
| `K_AUSF` | UDM 派生，AUSF 持有 | 锚定本次认证，参与派生 K_SEAF | 归属网络内 |
| `K_SEAF` | AUSF 派生，AMF(SEAF) 持有 | **移动性锚**，跨 AMF 重定位保持稳定 | 跨 AMF 稳定 |
| `K_AMF` | AMF 从 K_SEAF 派生 | 派生 NAS 密钥与 gNB 密钥 | 当前 AMF 内 |
| `K_gNB` | AMF↔UE 派生，gNB 持有 | 基站侧信令与用户面根密钥 | 当前 gNB 内 |
| `KNASint/enc` | AMF↔UE | NAS 信令完整性/加密 | NAS 连接期 |
| `KRRCint/enc` | gNB↔UE | RRC 信令完整性/加密 | gNB 连接期 |
| `KUPint/enc` | gNB↔UE | 用户面数据完整性/加密 | gNB 连接期 |

记住一个关键区分：**带 `int` 的是完整性保护（防篡改），带 `enc` 的是加密保护（防窃听）**。5G 相比 4G 的一个重大进步是用户面（UP）也支持了完整性保护——这意味着哪怕数据被解密，也无法被悄悄篡改。

---

## 三、主认证 5G AKA：握手与挑战

密钥链的源头活水，来自一次**主认证（Primary Authentication）**。5G 支持两种主认证方式：**5G AKA**（继承自 4G，做了安全增强）和 **EAP-AKA'**（基于通用 EAP 框架，更灵活）。核心思想都是"挑战-应答"：网络出一个随机数考你，终端用共享密钥 `K` 算出答案，证明"我真的是这个用户"。

```mermaid
sequenceDiagram
    participant UE as 终端 UE
    participant SEAF as SEAF/AMF<br/>(服务网络)
    participant AUSF as AUSF<br/>(归属认证服务器)
    participant UDM as UDM/ARPF<br/>(持有永久密钥K)

    UE->>SEAF: 注册请求 (携带 SUCI)
    SEAF->>AUSF: 请求认证 (SUCI/SUPI, SN-Name)
    AUSF->>UDM: 请求生成认证向量
    UDM->>UDM: 用 K + RAND 计算 RES*/XMAC/AUTN
    UDM-->>AUSF: 返回认证向量 (RAND, AUTN, XRES*, ...)
    AUSF-->>SEAF: 返回 RAND, AUTN (挑战)
    SEAF-->>UE: 下发认证请求 (RAND, AUTN)
    UE->>UE: 用 K 验证 AUTN, 计算 RES*
    UE-->>SEAF: 返回认证响应 (RES*)
    SEAF->>AUSF: 转发 RES* 用于验证
    AUSF->>AUSF: 比对 RES* 与 XRES*<br/>成功则派生 K_SEAF
    AUSF-->>SEAF: 认证成功 + K_SEAF
    SEAF->>SEAF: 从 K_SEAF 派生 K_AMF
    SEAF-->>UE: 安全模式命令 (SMC)<br/>激活 NAS 加密与完整性
```

这套流程里有几个"为什么这样设计"的精妙之处：

**为什么终端要先用 AUTN 验证网络？** 这是 5G AKA 的"双向认证"升级。在旧的 2G 协议里，只有网络验证终端，没有终端验证网络，于是诞生了"伪基站"攻击——假基站骗终端交出身份。5G 里终端先验 `AUTN`，确认"对面真的是我的归属网络授权的"，才肯给出应答。这就堵死了伪基站骗取认证响应的老路。

**为什么 `K_SEAF` 要用服务网络名（SN-Name）参与派生？** 这是一条"绑定"措施。它把这次认证牢牢绑定到具体的服务网络（比如中国移动），防止一个网络的认证响应被"搬运"到另一个网络去重放攻击。EAP-AKA' 的那个"撇号（prime）"增强，本质也是干这件事——把接入网络身份绑进密钥派生。

---

## 四、SUCI：让永久身份不再"裸奔"

如果说密钥派生是保护"通信内容"，那 SUCI 解决的是另一个更基础的问题——**保护"你是谁"**。

在 2G/3G/4G 时代，永久身份 IMSI 在初次接入时常常以明文（或可被快速破解的弱保护）发送。攻击者用一个伪基站 + 一个空密码就能让手机吐出 IMSI，这就是臭名昭著的 **IMSI Catcher 攻击**。拿到 IMSI，就能长期跟踪、定位这个用户。

5G 的解决方案是 **SUPI/SUCI 体系**：

```mermaid
flowchart TD
    subgraph 终端侧["终端侧 (USIM)"]
        SUPI["永久身份 SUPI"]
        PK["归属网络公钥<br/>(写卡时预置)"]
        SUCI["临时身份 SUCI<br/>(ECIES 加密包)"]
        SUPI -->|ECIES 加密 + 临时密钥| SUCI
        PK -.-> SUCI
    end
    subgraph 空口["空口传输"]
        SUCI2["只能看到 SUCI<br/>(无法还原 SUPI)"]
    end
    subgraph 归属网["归属网络 (UDM/SIDF)"]
        SK["归属网络私钥<br/>(永不外泄)"]
        SUPI2["还原出 SUPI"]
        SUCI2 -->|私钥解密| SUPI2
        SK -.-> SUPI2
    end
    SUCI -->|空中发送| SUCI2

    style SUPI fill:#ffd6d6,stroke:#c00
    style SUCI fill:#fff2cc,stroke:#bf9000
    style SK fill:#ffd6d6,stroke:#c00
```

它用的是一种叫 **ECIES（椭圆曲线集成加密方案）** 的公钥加密。工作机制是：

- **写卡时**：归属网络生成一对椭圆曲线密钥对，**公钥**写进用户的 USIM 卡，**私钥**牢牢锁在归属网络的 UDM 里（那个叫 SIDF 的解密功能）。
- **每次接入时**：终端生成一个一次性临时密钥，用归属网络公钥把 SUPI 加密成 SUCI。SUCI 里包含：方案标识、归属网络号、临时公钥、加密后的 SUPI、以及一个 MAC 校验码。
- **传输时**：空口上只能看到 SUCI。由于每次用不同临时密钥，SUCI 每次都长得不一样——攻击者抓到也无法关联，更无法还原 SUPI。
- **解密时**：SUCI 到了归属网络的 UDM/SIDF，用私钥才能解开还原成 SUPI。

这就是 5G 给 IMSI Catcher 的"釜底抽薪"之计。下面这张对比表把代际演进讲清楚。

### 表2：用户身份保护代际对比

| 维度 | 2G/3G | 4G LTE | 5G NR |
|------|-------|--------|-------|
| 永久身份 | IMSI | IMSI | SUPI |
| 初次发送 | 常明文 | 明文（仅后续用 GUTI 替换） | **ECIES 加密成 SUCI** |
| 伪基站抓取 | 易（IMSI Catcher 泛滥） | 仍可（明文窗口） | 极难（需破椭圆曲线） |
| 临时身份 | TMSI | GUTI | 5G-GUTI |
| 重放/跟踪抗性 | 弱 | 中 | 强（每次临时密钥） |

一个工程上的细节：5G 也保留了一个"空方案（null-scheme）"——当归属网络没预置公钥时，SUCI 就等于明文 SUPI。这是为了兼容性留的后门，**生产网络必须部署 ECIES 公钥**，否则 SUCI 保护形同虚设。这是网优和测试时一个常见踩坑点。

---

## 五、二次认证：进数据网络再刷一次卡

主认证解决的是"终端能不能接入 5G 核心网"。但很多场景下，业务方还想要更细的控制——比如企业专网、切片接入、第三方 DN（Data Network），它们希望**用自己的逻辑再认证一次**，确认"这个用户是我授权接入我这个网络的"。

这就是 **二次认证（Secondary Authentication）**，基于 **EAP-AKA'** 协议，在 PDU 会话建立时触发。它与主认证最大的区别在于：主认证是 UE ↔ 核心网，二次认证是 UE ↔ **外部数据网络的 DN-AAA 服务器**，AUSF 只是充当 EAP 的中继锚点。

```mermaid
flowchart TD
    UE["终端 UE"] -->|"① 主认证 5G AKA"| CN["5G 核心网"]
    CN -->|"② 已接入核心网"| SMF["SMF"]
    SMF -->|"③ 建立PDU会话,<br/>触发二次认证"| AUSF["AUSF (EAP锚)"]
    AUSF <-->|"④ EAP-AKA' 交互<br/>(经SMF转发)"| UE
    AUSF <-->|"⑤ 与外部认证"| DNAAA["DN-AAA 服务器<br/>(数据网络侧)"]
    DNAAA -->|"⑥ 认证成功"| SMF

    style CN fill:#d9ead3,stroke:#38761d
    style DNAAA fill:#fff2cc,stroke:#bf9000
```

为什么二次认证用 EAP-AKA' 而不是重新跑一遍 5G AKA？因为 EAP 是一个**通用认证框架**（你用企业 Wi-Fi 时的 802.1X 就是它），可扩展性好，能挂接各种认证方式。而 AKA' 那个"撇号"很关键——它在 KDF 里绑定了接入网络身份，防止中间人把认证响应搬运到别的接入网上重放。主认证是"进大楼"，二次认证是"进某个具体办公室再刷卡"，两者职责分明、互不替代。

---

## 六、切换中的前向安全：NH/NCC 接力

密钥链还有一条专门为**移动性**设计的支线——当用户从一个 gNB 切到另一个 gNB 时，新基站怎么拿密钥？总不能每次切换都重做一次完整认证（那切换时延会爆炸）。

5G 的解法是 **NH（Next Hop）/ NCC（Next Hop Chaining Counter）** 机制，本质上还是密钥派生，只不过在基站间"预派生"一串密钥：

- 终端接入第一个 gNB 时，AMF 用 `K_AMF` 派生出 `K_gNB`，同时算出一个 `NH` 值。
- 当切换发生时，可以用 `NH` 进一步派生下一个基站的密钥，而不是暴露当前基站的密钥。
- 这带来了**前向安全**：即使攻击者攻破了某个基站的密钥，他也推不出之前用过的密钥，更推不出将来要用的密钥。密钥像"洋葱"一样层层包裹，每剥一层都是新的、独立的。

NCC 就是个计数器，记录当前用了第几跳的密钥，防止重复使用和回退攻击。

---

## 七、现网调试：工程师该关注什么

这套密钥体系在现网调试中，最常见的几个场景：

1. **认证失败排查**：如果终端注册一直被拒，看是哪一步失败的。`AUTN` 验证失败（终端不信任网络）通常意味着卡里 `K` 与 UDM 不一致，或网络配置错误；`RES*` 比对失败则说明认证向量算错。抓包看 NAS 消息里的拒绝原因值是第一手线索。

2. **SUCI 解不开**：归属网络没部署 ECIES 私钥，或 USIM 卡里公钥与归属网络不匹配，会导致 SIDF 无法还原 SUPI，认证流程卡死。这是新开网/换卡时的高频问题。

3. **安全模式命令（SMC）失败**：`K_AMF` 派生的 NAS 密钥在 UE 和 AMF 两侧算出来对不上，通常是算法协商（UE 能力与网络配置不匹配）或密钥版本不一致。检查 SMC 消息里的安全算法 IE 是关键。

4. **切换后掉话**：NH/NCC 计数器不同步、或新旧 gNB 间密钥派生参数不一致，会导致切换后空口加密对不上、信令直接中断。这种问题在异厂商互操作时尤其常见。

一个直觉性的判断：**只要涉及"加解密对不上"，先把密钥派生链的两端（UE 侧和网元侧）对照一遍**，确认它们用了相同的输入参数（SN-Name、算法标识、计数器）。80% 的安全类故障都出在"两端派生输入不一致"上。

---

## 常见问题

**Q1：K_SEAF 和 K_AMF 有什么本质区别？为什么不能合并？**
A：`K_SEAF` 是**移动性锚**，跨 AMF 重定位时保持稳定，避免换 AMF 就重新认证；`K_AMF` 是**当前 AMF 内**的工作密钥，AMF 一变就重派生。两者作用域不同——一个负责"移动中不变"，一个负责"当前服务内可用"。合并会牺牲移动性效率。

**Q2：5G 既然有 SUCI 加密，IMSI Catcher 是不是彻底没用了？**
A：在部署了 ECIES 公钥的网络里，被动抓取 SUPI 几乎不可能。但攻击面并没有完全消失——伪基站仍可能强制把终端降级到"null-scheme"或诱导重传，部分旧卡/漫游场景也可能退化为弱保护。SUCI 大幅抬高了攻击成本，但不是绝对银弹。

**Q3：二次认证（EAP-AKA'）和企业 Wi-Fi 的 802.1X 是一回事吗？**
A：底层都是 EAP 框架，思想一致（UE 与外部认证服务器交互）。区别在于：5G 二次认证跑在 PDU 会话建立流程里、由 SMF/AUSF 中继，认证对象是数据网络；而 802.1X 跑在 Wi-Fi 链路层、由 AP/认证服务器中继。可以说它们是"同一套机制的两种部署"。

**Q4：用户面完整性保护（KUPint）有什么用？加密不就够了吗？**
A：加密只防"看懂"，完整性保护防"篡改"。没有完整性保护，攻击者即使看不懂内容，也可能翻转密文比特、注入垃圾数据，干扰业务甚至触发协议漏洞。5G 把 UP 完整性保护做成可选必选，是相对 4G 的实质安全增强，尤其保护控制类小流量业务。

**Q5：每次认证都派生一堆新密钥，会不会很慢、很耗资源？**
A：KDF 本质是几次哈希运算，开销极小，远小于一次 RSA/ECC 公钥运算。真正耗时的是认证交互的往返时延，而非密钥派生计算本身。这也是为什么系统宁可频繁派生子密钥，也要把昂贵的根密钥 `K` 用到极致。

---

## 参考来源

1. [3GPP TS 33.501 — Security architecture and procedures for 5G system](https://www.3gpp.org/dynareport/33501.htm) — 5G 安全架构与流程的权威规范，定义了完整密钥层级、5G AKA、SUCI/ECIES 与二次认证
3. [RFC 9048 — EAP-AKA' (EAP-AKA prime)](https://datatracker.ietf.org/doc/rfc9048/) — 二次认证所用 EAP-AKA' 协议的正式定义，含接入网络绑定增强
5. [ShareTechnote — 5G Security](https://www.sharetechnote.com/) — 通信领域常用学习站，含 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)
