<!-- title: 密钥的家谱：一棵树管住整张网 -->

# 密钥的家谱：一棵树管住整张网

## 一、从酒店房卡说起

住过酒店的人都知道这套流程：你入住时，前台不会把整栋楼的万能钥匙交给你，而是当场给你刷一张房卡。这张卡只能开你自己的房间，退房即失效；保洁员拿的是楼层卡，只能开她负责的那一层；真正能开所有门的母卡，锁在保险柜里，一辈子不出保险柜。

这套设计聪明在哪？**丢了房卡，损失半径只有一间房**。你不用换整栋楼的锁，前台重刷一张卡就完事。而且房卡本身永远不会“泄露”母卡——就算把房卡拆开研究一辈子，也推算不出母卡长什么样。

5G网络里的密钥体系，就是照着这个思路搭的：**一棵树**。树根是永不外传的长期秘密，树干和树枝是层层派生出来的子密钥，越往叶子走，钥匙越“具体”、越“廉价”、越“可丢弃”。叶子被偷了，烧掉这片叶子就行，树根毫发无伤。

今天这篇文章，我们就把这棵树从根到叶完整走一遍：它为什么长成这样、每一层钥匙住在哪里、派生是怎么算的、手机移动时这棵树怎么跟着“换枝”。

## 二、为什么要长成树：三个设计动机

先想一个反问题：为什么不干脆用一把大密钥，所有网元、所有信令、所有数据都用它加密？

答案藏在三个词里。

**动机一：根密钥永不旅行。** 用户的长期根密钥K，在整个生命周期里只存在于两个地方——手机里那张防篡改的USIM卡，和归属运营商网络里的认证凭据库（标准里叫ARPF的那个角色）。它**从不通过任何接口传输**。只要它不出门，再强的窃听者也只能拿到它的“影子”。但如果全网都直接用K加密，那K就必须出现在基站里、AMF里，等于天天把保险柜扛着满街跑。

**动机二：限制爆炸半径。** 网络里位置越低、数量越多的网元，物理暴露风险越大——一个装在电线杆上的小基站，被人拆走灌恶意软件的可能性，远大于核心网机房里的AMF。所以设计原则是：**每个网元只拿到它干活所需的那把钥匙，多一把都不给**。基站被攻陷，损失被锁死在空口那一层；核心网信令的钥匙，它连见都没见过。

**动机三：单向阶梯。** 树上每一把子密钥，都是从父密钥经过**单向函数**算出来的。单向意味着：拿到子钥，推不出父钥；拿到弟弟，推不出哥哥。这就是密码学里的“密钥分离”（key separation）——同一棵树上的钥匙互相隔离，一把泄露不会顺着树枝爬回去。

三个动机合起来，就是树的形态。这不是标准委员会的审美偏好，而是对“网络必然有薄弱环节”这个现实主义的工程回答：**承认会丢钥匙，所以提前设计好丢了以后怎么办**。

## 三、这棵树长什么样

先上全景图。从根到叶，每一级都标了这把钥匙“住”在哪：

```mermaid
flowchart TD
    K["根密钥K<br/>只住在USIM和归属网"] -->|卡内算出| CKIK["CK与IK<br/>鉴权中间产物"]
    CKIK -->|归属网内派生| KAUSF["Kausf<br/>留在归属网"]
    KAUSF -->|绑定服务网名字| KSEAF["Kseaf<br/>交给拜访网的锚钥"]
    KSEAF -->|派生并绑定AMF| KAMF["Kamf<br/>全树的分岔口"]
    KAMF -->|非接入层加密| KNASE["Knasenc"]
    KAMF -->|非接入层保真| KNASI["Knasint"]
    KAMF -->|只发子钥给基站| KGNB["Kgnb<br/>锚在基站"]
    KGNB -->|RRC信令完整性| KRRCI["Krrcint"]
    KGNB -->|RRC信令加密| KRRC["Krrcenc"]
    KGNB -->|用户面加密| KUPE["Kupenc"]
    KGNB -->|用户面完整性可选| KUPI["Kupint"]
```

把每位“家族成员”点名一遍：

| 密钥 | 诞生在哪 | 谁长期持有 | 保护什么 |
| --- | --- | --- | --- |
| K | 开卡时写入 | USIM + 归属网凭据库 | 一切之根，永不上路 |
| CK / IK | 卡内鉴权时算出 | 卡内与归属网 | 用来推出上层锚钥 |
| Kausf | 归属网派生 | 归属网AUSF | 锚钥的父本 |
| Kseaf | 归属网确认后交付 | 服务网SEAF | 服务网侧的总闸 |
| Kamf | 由Kseaf派生 | AMF（永不下发） | 树的分岔口 |
| Knasint / Knasenc | AMF派生 | AMF与手机 | 注册、寻呼响应等NAS信令 |
| Kgnb | AMF用NAS计数派生 | gNB | 整个空口分支的根 |
| Krrcint / Krrcenc | gNB派生 | gNB与手机 | RRC信令（完整性强制） |
| Kupenc / Kupint | gNB派生 | gNB与手机 | 用户面数据（完整性可选，5G新增） |

这张表里有几个值得停下来看的细节：

**第一，Kamf是全树的分岔口，但它永远不离开AMF。** 它分出两支完全独立的分支：一支是NAS分支（手机到核心网的控制信令），留在AMF里；另一支是Kgnb，AMF用“上行NAS计数”当作新鲜度材料，从Kamf里榨出这一把，**只把Kgnb发给基站**。于是一个关键性质成立了：基站被黑，攻击者拿到的是Kgnb和它下面的叶子，而NAS信令的钥匙它根本没见过——核心网侧的信令对被攻陷的基站是保密的。这就是“密钥分离”最直观的价值：**NAS钥匙进不了无线网，空口钥匙进不了核心网**。

**第二，越靠叶子，钥匙越“一次性”。** 根密钥K可能伴随一张卡十年；而叶子层的空口密钥，每次切换小区都会换。高频更换降低了单把钥匙暴露的时间窗口，也让“用了很久的老密钥”这种密码学大忌无从谈起。

**第三，Kupint是5G才有的新成员。** 4G的用户面数据只有加密、没有完整性保护——攻击者篡改数据包你发现不了。5G给用户面也配了完整性钥匙，虽然是可选功能，但树的位置已经留好了。

## 四、派生的手艺：一台榨汁机，一种配方

树上每一条箭头，都是同一次函数调用。这个函数叫密钥派生函数（KDF），核心就是HMAC-SHA256——一把以“父密钥”为钥匙、以“配方单”为输入的单向哈希：

$$K_{child} = \text{HMAC-SHA256}\big(K_{parent},\ S\big)$$

配方单S的结构很讲究：

$$S = FC \,\|\, P_0 \,\|\, L_0 \,\|\, P_1 \,\|\, L_1 \,\|\, \cdots$$

FC是一个字节的“用途编号”，标明这次派生是哪一种（派锚钥、派AMF钥、派基站钥，各有一个专属编号）；后面跟着若干参数块，每个参数都自带长度标签。整个设计有两个巧思：

**巧思一：用途隔离。** 哪怕两把父钥相同、参数凑巧一样，只要FC不同，产出的子钥就毫无关系。同一个父钥派出来的“NAS加密钥”和“RRC加密钥”在数学上是两串毫不相干的比特——一种算法被攻破，不会殃及另一种用途。

**巧思二：上下文绑定。** 派生时掺进去的不只是父钥，还有各种“场合信息”：服务网络的名称、用户永久标识、NAS计数、算法编号、目标小区的物理标识和频点……掺了上下文，钥匙就和“场合”焊死了。比如锚钥绑定了服务网名字，在某张拜访网里拿到的锚钥，拿到另一张网里去用，鉴权直接对不上号——防盗刷。

整个派生过程可以画成一台榨汁机：

```mermaid
flowchart TD
    P["父密钥<br/>充当HMAC的钥匙"] --> F["KDF单向榨汁机<br/>HMAC-SHA256"]
    FC["用途编号<br/>标明是哪一种派生"] --> F
    CTX["新鲜度与绑定材料<br/>计数 小区标识 算法编号"] --> F
    F --> OUT["子密钥<br/>推不出父钥和兄弟钥"]
```

还有两个容易被忽略的精妙细节。其一，**算法编号本身是派生输入**：手机和基站协商换一个加密算法，叶子钥匙就重新派生一遍——同一把Kgnb配上不同的完整性算法，得到的Krrcint是两把完全不同的钥匙。其二，5G在派生Kamf时掺入了一个叫ABBA的参数，作用是**防降级**：把“双方实际支持的安全特性集合”焊进钥匙里，中间人想诱骗双方退回更弱的特性组合，派生结果就对不上，攻击当场穿帮。

## 五、密钥的诞生时刻

这棵树是什么时候“发芽”的？在开机注册的鉴权环节。值得强调的是：**空口上传输的从来不是任何密钥，而是随机数、挑战值和应答值**——真正的密钥是手机和网络两边**各自独立计算**出来的，算出来的结果必然一致，因为它们共享同一个根和同一张配方。

```mermaid
sequenceDiagram
    participant U as 手机与USIM
    participant A as 服务网AMF
    participant H as 归属网认证中心
    H->>A: 鉴权向量与预期应答
    A->>U: 发起鉴权挑战
    U->>A: 卡内算出的应答
    A->>H: 比对通过
    H->>A: 交付锚钥Kseaf
    A->>A: 逐级派生Kamf与全树
    U->>U: 沿同一路径推出同一套
    Note over A,H: 锚钥只交给验过答案的服务网
```

这里有个容易误解的地方：鉴权协议（5G-AKA或EAP-AKA'）本身经常被当成“密钥体系”来讲，但它其实只是这棵树的**助产师**——鉴权证明了“手机和归属网共享同一个根K”，鉴权一旦通过，剩下的活全由KDF这台榨汁机完成。手机侧派生密钥的具体时机也有讲究：要等鉴权结果确认、NAS安全模式命令激活之后，整套安全上下文才算正式上岗。工程上抓信令时会看到“鉴权成功”和“安全激活”是两个步骤，就是这个原因。

## 六、密钥跟着人走：切换就是换枝

树长好了不是终点。手机是要移动的，而移动性对密钥体系提出的考题很刁钻：**新基站必须拿到新鲜的钥匙，而且这钥匙不能是旧基站能推算出来的**。否则一个被攻陷的源基站，只要守住旧钥匙，就能继续解密用户在新小区的流量——安全防线等于白设。

5G的解法是把基站钥匙的更新做成两条路：

```mermaid
flowchart TD
    HO["切换判决<br/>要挪窝了"] --> Q{"目标基站怎么够到"}
    Q -->|同AMF辖区直接走Xn| HR["横向派生<br/>旧站钥匙推出新站钥匙"]
    Q -->|跨AMF经核心网走N2| VE["垂直派生<br/>取用AMF预存的全新NH"]
    HR --> BX["掺入目标小区标识与频点"]
    VE --> BX
    BX --> NCC["NCC计数随切换令牌下发<br/>手机照方抓药推出同款"]
```

**横向派生**：源基站用自己手里的Kgnb直接推出目标站的钥匙。快，但源基站自己知道推法——这一跳谈不上前向安全。适合邻居站之间毫秒级的快速切换。

**垂直派生**：AMF事先从Kamf往下铺好一条**NH链**——一串首尾相接的全新密钥材料，每一环都由上一环单向推出，源基站手里没有这条链。切换时从链上取一个没用过的环，掺入目标小区的物理标识和频点，算出目标站的新钥匙。源基站就算被黑透了，也**反推不出这条链上的任何一环**。前向安全由这一步保证。

区分两条路的机关是随切换信令下发的**NCC计数器**：手机收到切换命令时看一眼NCC——和本地存的一样，说明走的是横向；比本地的大，说明走了垂直，手机就把NH链往前推几格，推出同样的钥匙。双方无需传任何密钥，一个计数器就完成了“我们对答案”的暗语。

还有一个漂亮的推论：NH链每切一次站往前走一格，所以**一个被攻陷的基站，最多两跳之后就彻底出局**——它手里的材料再也够不着链条上更远的环。这就是标准用NCC和NH搭出来的“两跳前向安全”承诺。

顺手补充实战里会撞见的一个点：密钥派生输入里掺了**PDCP计数**，而计数是会绕回的。连接态下如果计数即将用尽，网络不需要真切换，就地做一次“小区内切换”，重派一把Kgnb，计数从新钥匙重新起步。你在现网日志里看到“同站切换”却不带任何移动原因，多半就是这出戏。

## 七、从4G到5G：这棵树修剪了什么

| 维度 | 4G的树 | 5G的树 |
| --- | --- | --- |
| 层级深度 | 锚钥Kasme直接落在MME，两级就到基站 | Kausf、Kseaf、Kamf多级锚定，逐级绑定 |
| 锚钥绑定对象 | 绑具体MME | 绑服务网名字，跨AMF可携 |
| 用户面完整性 | 没有 | 可选开启Kupint |
| 身份保护 | IMSI可能明文上空口 | 永久标识加密成SUCI再出门 |
| 密钥长度 | 128位 | 128位在用，层级预留256位空间 |
| 归属网参与度 | 鉴权后基本退场 | 锚钥始终握在归属网手里 |

逐条翻译成“为什么”：4G锚钥绑死MME，意味着换MME常常要重新鉴权，漫游场景下拜访网拿到的材料也偏“重”；5G把锚点拆成多级、锚钥绑服务网名字，既让锚钥可以在同一服务网内的AMF之间平滑搬迁，又让拜访网永远只拿到“这个网、这次会话”专用的材料。用户面完整性是4G缺失的一环，5G补上了。密钥长度方面，树干已经按256位在盖，算法可以以后换代，树不用重种。

## 八、现网里你会在哪撞见这棵树

**调试场景一：注册被拒，鉴权反复失败。** 实验室用测试卡时，如果USIM里预置的根密钥与核心网侧配置不一致（K或算子密钥对不上），鉴权应答永远算不对，计数器失步还要走重同步流程，失败次数一超限就上永久拒绝名单。记住排查次序：先核对卡密钥配置，再看鉴权向量的序号同步，最后才怀疑算法。

**调试场景二：NAS安全模式命令发出后石沉大海。** NAS安全激活是整套上下文的“开闸”动作，手机校验完整性失败会直接不响应。常见原因是算法协商清单与卡的能力不匹配，或者互操作场景中映射上下文的标识（ngKSI）没对齐——这个小小的密钥集标识就是双方指认“我们共用的那套上下文”的暗语，暗语对不上，手机只好重新鉴权。

**调试场景三：切换之后上行突然失步。** 切换后密钥必然换新，若目标站的安全上下文没就位、NCC没对上，手机和基站就会各算各的钥匙，完整性校验全挂。抓信令看切换命令里携带的NCC值与两侧派生路径，是定位这类问题的标准动作。

**调试心态一：抓包“看不到内容”是正常的。** 安全激活之后，NAS和RRC消息的净荷都是密文，抓包工具只能看到消息类型和长度。很多人第一反应是“我抓包姿势不对”——不，那恰恰说明安全在工作。你想看明文，得靠设备侧的解密接口或测试工具在密钥落地处还原。

**调试心态二：别把“5G更安全”理解成“5G全程加密”。** 用户面加密算法可协商，低速率物联网场景甚至可能配到空算法；用户面完整性更是可选项。信令的完整性才是铁律——正常业务里RRC和NAS绝不允许空完整性，真在日志里看到空完整性的信令承载，那是安全故障，不是合法配置。

**最常见的误解：以为基站里存着“用户的密钥”。** 实际上基站从AMF拿到的只是Kgnb这把“分店钥匙”，用户的根、锚钥、NAS钥匙它一概不知。这也是为什么标准敢把基站大规模地撒到灯杆和楼顶上——**密钥的层级结构，就是信任的层级结构**。

## 常见问题

**Q: 这棵密钥树和手机APP里的HTTPS加密是什么关系？谁保护谁？**
A: 两层互不替代。密钥树保护的是“管道”：手机到核心网之间的空口与信令，由运营商部署，任何APP的流量都受益。HTTPS保护的是“端到端”：你的数据从APP服务器到手机全程加密，运营商自己也看不到明文。管道加密防的是链路窃听与信令伪造，端到端加密连运营商一起防。你刷HTTPS网页时，数据其实穿了三层甲：外层空口加密、内层TLS、应用层自有加密。

**Q: 用户面加密是可选的，那我不就一直裸奔？**
A: 不必焦虑。可协商不等于默认关闭——主流网络对手机宽带业务普遍开启空口加密。真正要想清楚的是场景：海量物联网小包设备可能为了省电选弱配置，这类设备本就该按“链路不可信”来设计应用层安全。原则是：空口加密是运营商给的底线防护，关键数据的应用层加密永远自己带。

**Q: 运营商能拿到我的根密钥吗？能解密我的一切吗？**
A: 根密钥写卡时固化在USIM里，网络侧只有凭据库里对应的副本，且只用于卡内鉴权计算，从不在接口上传输。运营商能推进管道、能按流程派生会话密钥，因此在技术上具备解密空口流量的能力——这正是TLS这类端到端加密存在的意义。但“有能力”和“随便用”之间隔着法律与审计，多数国家的运营商无权随意解密用户内容。

**Q: 切换换钥匙，视频通话会不会卡一下？**
A: 不会。横向派生就是源基站的一次本地计算，垂直派生也只是多取一个预置的链环，整个换钥过程与切换信令同步完成，毫秒级、无感。密钥刷新和数据转发的路径接力是并行的两套机制，互不拖累。

**Q: 量子计算机来了，这棵树会倒吗？**
A: 短期不会。树的全套派生都建立在HMAC-SHA256和对称算法上，256位对称密钥对量子攻击的抵抗力远好于公钥体系（量子加速对对称密钥大致是对折，256位折半仍有128位强度）。真正先受冲击的是SUCI身份加密用的椭圆曲线部分，这也是标准化组织已在推进抗量子算法迁移的原因——树的结构不用动，换几片叶子而已。

## 参考来源

1. [5G Security Key Hierarchy in 5G NR · 5G NR Notes](https://lte5ghub.com/security-hierarchy) — 从根密钥K到空口叶子钥匙的完整派生树详解，含NH/NCC切换换钥机制
2. [5G Authentication and Key Management · Techplayon](https://www.techplayon.com/5g-authentication-and-key-management-aka-procedure/) — 5G-AKA鉴权流程与锚钥逐级交付的步骤拆解
3. [5G key hierarchy: K → CK/IK → KAUSF → KAMF → KgNB · 5G/6G Academy](https://www.5g6gacademy.com/courses/5g-security/lesson-8.1.3) — 密钥层级课程：父钥加服务网名等输入派生子钥的机制
4. [5G-AKA, NAS Security, Key Hierarchy and SUCI Concealment · CafeTele](https://www.cafetele.com/5g-protocols-book/chapter-15-5g-aka-nas-security.html) — 鉴权、NAS安全激活与上下文标识的工程视角解读
5. [5G NR Key Derivation Procedure · 3GLTEInfo](https://www.3glteinfo.com/call-flows/5g-key-derivation-procedure/) — 密钥派生流程与信令承载的入门级图解
6. [Introduction to 5G AKA · free5GC](https://free5gc.org/blog/20251029/20251029/) — 从开源核心网实现角度拆解5G-AKA协议

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