<!-- title: 图解5G鉴权：一钥生万钥 -->

手机按下电源键，屏幕亮起到信号格出现，中间只有两三秒。就在这两三秒里，你的手机和网络完成了一场无声的"对口供"：网络要验明"你是合法用户"，手机也要反问"你是真基站还是伪基站"。这套口供流程叫**认证与密钥协商**（AKA），它是整个移动通信安全的地基。今天这篇文章，我们就把4G/5G的认证流程和那棵著名的"密钥家族树"彻底讲透。

## 一、为什么要"双向"对暗号

先说一段历史教训。2G GSM时代，认证是**单向**的：只有网络验手机，手机从来不验网络。手机怎么证明自己？网络发来一道随机考题，SIM卡用卡内密钥算出答案，网络比对通过就放行。这套逻辑本身没错，问题是手机对"对面是谁"完全盲目。

这就给了伪基站可乘之机。攻击者架一台假基站，广播更强的信号，手机傻乎乎地接入，把身份标识明文交出去。早期GSM的认证算法还有实现漏洞，安全研究者用"选择挑战"的方法反复提问、统计答案，竟然能把卡内密钥反推出来，一度出现"克隆SIM卡"。手机不验网络 + 密钥可被反推，两个漏洞叠加，成了移动通信安全史上最惨痛的一课。

从3G开始，标准把流程改成了**双向认证**：网络发挑战时附带一张"签名"，手机用同一把卡内密钥验签——签名对得上，说明对面是真正持有密钥副本的归属运营商，而不是街头那台假基站。这个"签名+随机题"的组合，就是AUTN令牌，后面细讲。

用一个地下工作者接头的类比贯穿全文：

| 接头类比 | 技术对应 |
| --- | --- |
| 母暗号本，锁死随身带、永不外借 | 根密钥K，只存在于SIM卡和归属网络 |
| 当天出的随机考题 | 随机数RAND |
| 口供编号，必须逐次递增 | 序列号SQN，防重放 |
| 对上暗号后的签名画押 | MAC校验码 |
| 新同志只发当次任务口令，不发母本 | 密钥分层，服务网只拿下层密钥 |

## 二、根密钥K：一枚不出保险柜的印章

整个安全体系的信任源头，是一把128位的根密钥K。它有且仅有两份副本：一份在你手机的SIM卡里，一份在运营商归属网络的用户数据库里。

**为什么K永不离开SIM卡？** 看卡和看手机的制造哲学完全不同。SIM卡是一块独立的安全芯片，有自己的操作系统和防拆电路，遇到暴力破解会自毁清空；而手机操作系统是可以刷机、可以Root的开放环境。把根密钥放在卡里而不是手机里，等于把传家宝放进保险柜而不是放在办公桌上。所有涉及K的运算都在卡内完成，卡只对外输出"运算结果"，从不输出K本身。

这也解释了现网一个常见现象：**换手机不用换卡，换卡却必须重新开户写卡**。因为你的身份本质上不是那个手机号，而是卡里那把K。运营商营业厅"补卡"的本质，是生成一把新K写进新卡，同时更新归属网络侧的副本，旧卡即刻作废。

存卡侧的问题解决了，网络侧呢？早期密钥副本存在鉴权中心，演进后统一并入归属网络的统一数据管理单元（4G叫HSS，5G叫UDM）。手机在纽约也好、在东京也好，世界各地 roaming 的服务网络都拿不到K，只能向归属网络"借"认证材料——这个设计保证了无论你走到哪里，验明正身的最终裁判永远是你签约的运营商。

## 三、五步口供：挑战应答全过程

来看5G下一次完整的认证，时序如下：

```mermaid
sequenceDiagram
    participant U as 手机USIM
    participant S as 服务网SEAF
    participant H as 归属网UDM
    U->>S: 注册请求（带隐藏身份SUCI）
    S->>H: 申请认证（SUCI与服务网名）
    H->>H: 出随机题RAND生成AUTN
    H->>S: 发RAND、AUTN、期望应答哈希
    Note over S: 锚点密钥暂扣不发
    S->>U: 下发挑战RAND与AUTN
    Note over U: USIM验MAC查SQN<br/>同端算出应答与锚点密钥
    U->>S: 回应答RES
    S->>S: 应答压哈希与期望值比对
    S->>H: 报告比对通过
    H->>S: 这才交付锚点密钥
    S->>U: 安全模式命令开启保护
```

拆解每一步的原理。归属网络先生成一个一次性随机数RAND，然后用卡里同款的密钥K，双方**各自独立**地计算同一组结果：

$$\text{AK} = f5_K(\text{RAND}), \quad \text{MAC} = f1_K(\text{SQN} \oplus \text{AK},\ \text{RAND},\ \text{AMF})$$

$$\text{RES} = f2_K(\text{RAND}), \quad \text{CK} = f3_K(\text{RAND}), \quad \text{IK} = f4_K(\text{RAND})$$

这一组f1到f5是五个专用运算函数（工程上常用一套叫Milenage的标准构造，以分组密码为内核拼装而成）。双方算出的东西一样，才能"心有灵犀"：

- **RES**是"应答"。归属网络先算好一份期望值，服务网络收到手机回复后比对，对上了，证明手机卡里确实有K。
- **CK和IK**是加密密钥和完整性密钥的雏形，3G时代是空口保护的直接原料，5G时代退居幕后，成了派生后续一切密钥的"中间原料"。
- **MAC**是网络交给手机的"签名"。手机用K重新算一遍MAC，和AUTN里带的那份比对——对上了，证明网络真身。

### AUTN解剖：一张令牌三个零件

AUTN令牌由三段拼成：**SQN⊕AK、AMF、MAC**。每一段都有明确的存在理由：

- **SQN（序列号）**：防重放的核心。每次认证编号递增，卡里存着本地计数，收到挑战先查编号是否"够新"。假如攻击者录下一次合法认证的原样重播，卡一看编号是旧的，直接拒绝——暗号本上写死：用过一次的编号作废。
- **AK（匿名密钥）**：细心的读者会问，SQN为什么不直接明文发？因为SQN是固定格式，明文传输等于给跟踪者发了一个稳定的"指纹"，可以据此追踪同一张卡。所以先用AK把SQN异或藏起来，到了卡内再还原。这一层小设计专门保护用户不被追踪。
- **AMF**：认证管理字段，标记这份认证材料的用途和算法属性。
- **MAC**：前述签名，覆盖了SQN、RAND、AMF，任何一处被篡改都会验签失败。

### 序列号失步了怎么办

SQN机制有个天然的运维副作用：卡内计数和网络侧计数可能"对不上账"。比如物联网卡长期断电、测试卡在实验室反复回退数据，卡内的SQN远远落后于网络侧，挑战一来，卡发现"编号超前得离谱"，为了安全直接拒绝。这时手机会发起**重新同步**：用本地SQN算一个专门的同步参数发回网络，网络核对后把自己的计数器回拨到与卡一致，重新出题。这是现网鉴权失败排查中最高频的一类问题，后面实战部分再展开。

## 四、5G的三道新锁

5G的认证框架延续了挑战应答的骨架，但针对4G时代的三个遗留痛点，各加了一道锁。

### 第一道锁：身份也加密了（SUCI）

4G时代有个尴尬：手机第一次接入时，身份标识（IMSI）是**明文**发的——因为网络此刻还不认识你，临时别名还没发给你。这个"先亮明身份才能领面具"的死结，让4G的伪基站监听始终有隙可钻。

5G的解法很优雅：把永久身份**用密码学藏起来**。手机不再明文发送SUPI（永久订阅标识），而是用归属运营商预置在卡里的**公钥**做加密运算（一套基于椭圆曲线的混合加密方案），打包成SUCI（隐藏订阅标识）后才发出：

```mermaid
flowchart TD
    A["手机取出永久标识SUPI"] --> B["生成临时密钥对"]
    B --> C["用归属网公钥加密"]
    C --> D["打包成SUCI明文发出"]
    D --> E["窃听者只看到乱码"]
    D --> F["归属网用私钥解密"]
    F --> G["还原SUPI完成寻址"]
```

注意这张图的精妙之处：**加密公钥人尽可得，解密私钥只在归属网络**。街头的伪基站截获SUCI也只能看到乱码；只有你签约的运营商才能解出你是谁。每一次加密手机都用新鲜的临时密钥对，同一部手机两次注册产生的SUCI长得完全不同，连"这个人上次来过"这种关联追踪都做不了。

### 第二道锁：答案封存，钥匙后付

5G对认证流程中服务网络和归属网络之间的信任关系做了收紧。4G时代，归属网络会把"期望答案"原文交给服务网络保管比对。5G改成：服务网络拿到的是期望应答的**哈希摘要**而非原文，而且最关键的**锚点密钥，要等服务网络报告"答案比对通过"之后，归属网络才发放**。

为什么这样设计？服务网络的设备散布街头：基站、边界网关，物理上无人看守，标准的设计假设就是"它们可能被攻破"。考卷答案先封存，最高级别的钥匙比对成功后才临时下发——即使服务网络被渗透，攻击者拿到的也只是本次会话的下层密钥，而不是能伪造任何用户的根素材。

### 第三道锁：完整性保护从严

加密和完整性是两件不同的事：加密防"偷看"，完整性防"篡改"。2G时代只有加密、没有完整性，信令被篡改了手机毫无察觉。3G补上了信令完整性保护，但历代都留了个"空算法"后门——可以配置成不加密不保完整。5G把门关严：**非接入层信令的完整性保护成为强制项，空算法仅剩紧急呼叫等极少数特例可用**。除紧急呼叫等特例。换句话说，5G网络里一条未受完整性保护的普通信令，本身就是异常。

## 五、密钥家族树：一层一岗，各管一段

认证成功只是拿到了"中间原料"。真正的空口保护，靠的是从原料派生出的一整棵密钥树：

```mermaid
flowchart TD
    K["根密钥K<br/>USIM与UDM各存一份"]
    CK["CK与IK<br/>用K对RAND运算而得"]
    Kausf["Kausf<br/>归属网锚点密钥"]
    Kseaf["Kseaf<br/>服务网锚定密钥"]
    Kamf["Kamf<br/>AMF接入密钥"]
    Knas["NAS保护密钥对<br/>护手机到核心网信令"]
    KgNB["KgNB<br/>基站密钥家族之根"]
    Krrc["RRC保护密钥对<br/>护手机到基站信令"]
    Kup["用户面保护密钥对<br/>护业务数据"]
    K --> CK
    CK --> Kausf
    Kausf --> Kseaf
    Kseaf --> Kamf
    Kamf --> Knas
    Kamf --> KgNB
    KgNB --> Krrc
    KgNB --> Kup
```

| 密钥 | 诞生于 | 谁持有 | 管什么 |
| --- | --- | --- | --- |
| K | 写卡时预置 | USIM与UDM | 万钥之母，永不出卡 |
| CK / IK | 双方各用K算出 | USIM、归属网 | 派生用的中间原料 |
| K_ausf | 由CK/IK派生 | USIM与归属网锚点功能 | 归属侧的"总闸" |
| K_seaf | 由K_ausf派生 | 服务网络入口 | 交给服务网的最高权限 |
| K_amf | 由K_seaf派生 | AMF | 接入与移动性管理 |
| NAS密钥对 | 由K_amf派生 | 手机与AMF | 核心网信令的加密与完整 |
| K_gNB | 由K_amf派生 | 手机与gNB | 基站侧密钥家族的根 |
| RRC/用户面密钥 | 由K_gNB派生 | 手机与gNB | 信令与业务数据保护 |

### 为什么非要分层？三个理由

**理由一：域隔离。** 每一层密钥在派生时都掺入了"用途标签"——这把密钥是干什么用的、给哪个网络用的。用途标签不同，派生结果天差地别。于是即使某个环节的密钥泄露，它也"只配"干自己那一类坏事：拿基站密钥伪造不出核心网信令，拿本次会话密钥解不开上次会话。这就是密码工程里的**密钥分离**原则——不把所有鸡蛋放进一个篮子，甚至不把所有篮子放在一辆车上。

**理由二：信任按距离衰减。** 回顾家族树的地理分布：K和K_ausf住在归属网络，K_seaf以下才交给服务网络，K_gNB以下下发到街头基站。离你越远、越可信的节点，持有越根本的密钥；越靠近危险地带（户外基站）的节点，持有的密钥越"临时"。这棵树就是一张信任的地图。

**理由三：单向派生，坏了不传染。** 派生用的是单向的密钥推导函数——从父钥算子钥容易，从子钥反推父钥在计算上不可行。于是每个节点被攻破的影响范围被天然锁死在下层：

| 被攻破的节点 | 攻击者得到 | 攻击者得不到 |
| --- | --- | --- |
| 街头基站 | 该站的接入层密钥 | 根密钥K、NAS密钥、归属网数据 |
| 服务网络AMF | K_seaf及以下 | 根密钥K、锚点密钥K_ausf |
| 一次通话的会话密钥 | 仅本次通信内容 | 历史会话与未来会话 |
| 归属网络数据库 | 根密钥K | ——最严重，须全网换卡止损 |

最后一行是唯一的"灭顶之灾"场景：归属数据库失守等于母暗号本被盗，唯一的补救是全量换卡重写K。这就是为什么运营商把归属网络的数据库安全等级，看得比基站高得多。

顺带一提，切换场景还有更细的讲究：手机从基站A搬到基站B时，新基站的密钥由密钥链配合新鲜参数派生，前一站被攻破也不会沿切换链"传染"到下一站。

## 六、四代安全演进一张表

把2G到5G的安全能力放到一起看，脉络就清晰了——每解决一个历史漏洞，就催生下一代设计：

| 能力 | 2G GSM | 3G UMTS | 4G LTE | 5G NR |
| --- | --- | --- | --- | --- |
| 认证方向 | 单向（仅网络验机） | 双向 | 双向 | 双向＋归属锚定 |
| 空口加密 | 有（已被破译） | 有 | 有（允许空算法） | 有（空算法收紧） |
| 信令完整性 | 无 | 有 | 有 | 强制启用 |
| 用户面完整性 | 无 | 无 | 无 | 可选支持 |
| 用户标识 | 明文 | 明文 | 明文（首次接入） | 加密（SUCI） |
| 密钥架构 | 单层 | 简单分层 | 分层＋KDF | 五级分层＋锚定机制 |

值得玩味的是5G新增的"用户面完整性可选支持"：以前大家默认"数据加密就够了"，后来发现对物联网等场景，**数据被篡改比被偷看更危险**——一条被改过的遥控指令可能造成真实世界的破坏。所以5G第一次把用户面完整性保护列为可选能力，按需开启。

## 七、现网实战与调试陷阱

**陷阱一：鉴权失败，先查SQN再查卡。** 网关日志里看到认证失败，很多工程师第一反应是"卡坏了"或"核心网数据错了"。实际上最高频的原因是序列号失步：卡内计数与网络侧计数对不上。典型场景：物联网设备电池耗尽后长期离线、测试卡在多套环境间倒腾、甚至有些应急备份方案把卡数据回滚。处理路径是让终端发起重新同步，而不是急着换卡。判断技巧：失步类失败通常"第一次失败、紧接着重试成功"，而密钥不一致类失败会稳定失败。

**陷阱二：补卡之后旧设备离奇掉线。** 根密钥K一换，旧卡即刻失效——这是设计使然而非故障。但现网常有人忽略"一号多卡"场景的连带影响：写卡时归属网侧副本已更新，所有旧卡的认证从此必然失败。遇到"换卡后老设备集体掉线"的工单，先查发卡记录。

**陷阱三：把加密当安全全部。** 排查空口安全问题时，很多同事只盯着加密算法开关。实际上完整性保护被关闭或降级的危害不亚于加密被破——信令被篡改可以直接把手机"骗"到攻击者控制的环境里。5G强制NAS完整性之后，这类配置检查点大大减少，但在4G/5G互操作的边界上，仍要留意安全能力协商的实际结果。

**常见误解两则**：其一，"手机Root了根密钥就泄露"——不对，K在SIM卡独立芯片里，手机操作系统Root到天上去也读不到卡内密钥，真正要防的是来路不明"预先写好K"的白卡和物联网卡。其二，"鉴权和基站时钟有关"——无关，认证的新鲜度靠序列号保证，不依赖墙上时间；基站同步问题影响的是空口帧收发，那是另一回事。

**还有一个容易被忽略的设计红利**：4G/5G互操作时，只要锚点密钥还在有效期内，核心网可以用既有密钥直接派生新场景的密钥，让终端免于重跑一次完整认证。这就是"锚点"二字的工程价值——既是安全的锚，也是移动性的锚。

## 常见问题

**Q: 5G-AKA和EAP-AKA'有什么区别？网络用哪个？**
A: 两者都是5G允许的认证方法，骨架相同（都验MAC、都查SQN、都派生锚点密钥），区别在外层包装：5G-AKA是一来一回的直答式，消息少、时延低；EAP-AKA'借用了一套成熟的通用认证框架，挑战应答要多走几轮，且把服务网络名掺入密钥派生。用哪种由运营商配置决定，具体行为以各网络官方资料为准。

**Q: SUCI和5G-GUTI都是保护隐私的，区别是什么？**
A: 手段不同。SUCI靠**加密**：首次接入网络还不认识你时，把永久身份加密后再发，防的是身份明文暴露。5G-GUTI靠**别名**：注册成功后网络发一个临时身份，之后你一直用别名活动，防的是身份关联追踪。一个管"第一次见面不报真名"，一个管"以后见面都用代号"，两条防线互补。

**Q: 根密钥K那么重要，它会被算出来或偷走吗？**
A: 卡内密钥从不出卡、只输出计算结果，外部拿不到原文；现代SIM的安全芯片还有防拆自毁设计。历史上2G的认证算法因设计缺陷可被"反复提问、统计分析"间接破解，这正是3G起彻底重做算法与流程的原因。真正现实的风险不是"算出来"，而是归属数据库被整体攻破——所以运营商侧的防护等级远高于空口。

**Q: 为什么我的物联网模块偶发鉴权失败，重试又好了？**
A: 大概率是SQN失步后触发了重新同步：第一次挑战因序列号对不上被拒，终端自动带上同步参数重试，第二次成功。如果重试仍稳定失败，再按"卡数据与归属网不一致"的方向排查，比如补卡后旧数据未同步、专网发卡流程出错等。

**Q: 从4G切换到5G，密钥要重新认证一遍吗？**
A: 通常不用重跑完整认证。只要锚点密钥仍然有效，网络会用既有锚点直接派生新制式下的密钥，用户几乎无感。锚点失效或安全上下文丢失时，才会重新走一遍完整的挑战应答。这也是5G密钥分层设计的附带收益：换网络、换制式、换基站，各取所需地"从某一层重新派生"，不必每次都惊动根密钥。

## 参考来源

1. [Authentication and Key Agreement — Wikipedia](https://en.wikipedia.org/wiki/Authentication_and_Key_Agreement) — AKA挑战应答机制、AUTN令牌构成与SQN防重放的通识性介绍
2. [IMSI catcher — Wikipedia](https://en.wikipedia.org/wiki/IMSI_catcher) — 伪基站工作原理与各代移动网络认证缺陷的历史梳理
3. [Universal Subscriber Identity Module — Wikipedia](https://en.wikipedia.org/wiki/Universal_Subscriber_Identity_Module) — USIM安全芯片与卡内密钥存储机制的背景资料
4. [5G — Wikipedia](https://en.wikipedia.org/wiki/5G) — 5G安全特性（含用户标识隐藏SUCI）的概述性章节
5. [Key derivation function — Wikipedia](https://en.wikipedia.org/wiki/Key_derivation_function) — 密钥派生函数的单向性与密钥分离原则的通用原理

---
> 本文由「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)
