首页 › security › 5G切换密钥推演与NH链机制拆解

5G切换密钥推演与NH链机制拆解:从密钥层级到前向安全的全链深度解析

在5G系统中,一次主认证(5G-AKA / EAP-AKA')建立的密钥材料并不会"一钥到底"地贯穿用户整个移动生命周期。每发生一次切换,空口上用于加密与完整性保护的接入层(AS)密钥 KNG-RAN(即 KgNB)都必须被刷新,以保证不同小区、不同 gNB 之间的密钥隔离,并在 gNB 节点被攻破时提供前向安全(Forward Security)。这套"切换即换钥"的机制由 3GPP TS 33.501 的 Section 6.9(密钥派生)与 Annex A(KDF 函数族)定义,核心是 NH(Next Hop)链 + NCC(Next Hop Chaining Counter) 与 水平/垂直推演(horizontal/vertical key derivation) 两条派生路径。本文聚焦该机制,逐层拆解密钥派生的算法输入、Xn/N2 切换信令中密钥的传递路径,以及 UE 与网络如何基于 nextHopChainingCount 保持同步。


一、为什么切换需要专门的密钥推演

直接复用主认证派生出的 KAMF 在每次切换时为新的 gNB 派生 KNG-RAN 会有两个严重问题:

  1. 密钥重用风险:若两个不同 gNB 得到相同的 KNG-RAN,攻击者一旦攻破其中一个 gNB,即可解密另一个 gNB 下该 UE 的空口流量。
  2. 前向安全缺失:如果每次切换都从长期密钥 KAMF 直接派生,而 KAMF 在 AMF 中长期不变,那么一旦 AMF 被攻破,过去与未来的所有切换密钥都可能被推导出来。

3GPP 的解决方案借鉴并强化了 LTE(TS 33.401)的 NH 链思想:引入一个由 AMF 单向维护的 NH 链,配合 gNB 本地的"水平推演",在前向安全强度与AMF 信令开销之间取得平衡。核心原则记录在 TS 33.501 Section 6.9.2 中。


二、5G 密钥层级全景(TS 33.501 Section 6.2)

理解切换密钥推演,必须先看清整条密钥链。下表与下图共同刻画了从永久根密钥 K 到空口算法密钥的完整派生路径。

flowchart TD
    K["K(永久根密钥)<br/>驻留于 USIM 与 UDM/ARPF"]
    CK["CK, IK(认证向量)<br/>不出 USIM/UDM"]
    KAUSF["K_AUSF(AUSF & UE)<br/>Annex A.2"]
    KSEAF["K_SEAF(SEAF/AMF & UE)<br/>Annex A.3"]
    KAMF["K_AMF(AMF & UE)<br/>Annex A.4"]
    KNAS["K_NASint / K_NASenc<br/>NAS 安全<br/>Annex A.6 / A.7"]
    KNGRAN["K_NG-RAN (KgNB)<br/>Annex A.9"]
    NH["NH(Next Hop)<br/>Annex A.10"]
    ASK["算法密钥<br/>K_RRCenc / K_RRCint<br/>K_UPenc / K_UPint"]
    KRRCenc["K_RRCenc"]
    KRRCint["K_RRCint"]
    KUPenc["K_UPenc"]
    KUPint["K_UPint"]

    K -->|5G-AKA / EAP-AKA'| CK
    CK -->|KDF| KAUSF
    KAUSF -->|KDF| KSEAF
    KSEAF -->|KDF| KAMF
    KAMF -->|KDF| KNAS
    KAMF -->|KDF| KNGRAN
    KAMF -->|KDF| NH
    NH -.->|切换垂直推演 Annex A.11| KNGRAN
    KNGRAN -->|算法特定 KDF Annex A.8| ASK
    ASK --> KRRCenc
    ASK --> KRRCint
    ASK --> KUPenc
    ASK --> KUPint

    classDef root fill:#1f4e79,color:#fff,stroke:#0b2a4a
    classDef anchor fill:#2e7d32,color:#fff,stroke:#1b5e20
    classDef ran fill:#8e44ad,color:#fff,stroke:#5b2c6f
    classDef hop fill:#c0392b,color:#fff,stroke:#7b241c
    class K root
    class KAUSF,KSEAF,KAMF anchor
    class KNGRAN,ASK,KRRCenc,KRRCint,KUPenc,KUPint ran
    class NH hop
密钥 派生自 驻留位置 用途 KDF 定义
K — USIM / UDM·ARPF 永久根密钥,认证起点 —
CK, IK K(认证) USIM / ARPF(不外送) 派生 KAUSF —
KAUSF CK, IK AUSF / UE AUSF 锚密钥 Annex A.2
KSEAF KAUSF SEAF(AMF) / UE SEAF 锚密钥 Annex A.3
KAMF KSEAF AMF / UE AMF 锚密钥,NAS 与 RAN 密钥根 Annex A.4
KNG-RAN (KgNB) KAMF gNB / UE 派生 AS 算法密钥的根 Annex A.9
NH KAMF(链式) AMF(链)/ gNB(当前值) 提供切换前向安全的新鲜材料 Annex A.10
KRRCenc/int, KUPenc/int KNG-RAN gNB / UE RRC/UP 加密与完整性 Annex A.8

需要特别强调:KAMF 是"分水岭"。它之上(KSEAF/KAUSF)属于核心网锚密钥,几乎不随移动事件变化;它之下(KNG-RAN 及 AS 算法密钥)则随每次切换被刷新。NH 链正是连接 KAMF 与切换密钥的"新鲜度桥梁"。


三、NH 链与 NCC:前向安全的核心

3.1 NH 链的构造

当 KAMF 首次派生完成(注册成功或 KAMF 刷新后),AMF 立即计算 NH 链的初始值并维护一个计数器 NCC。NH 链是一个单向哈希链:

NH(0)   ← 由 KAMF 直接派生(初始),NCC = 0
NH(i+1) = KDF(KAMF, NH(i))      // Annex A.10,单向不可逆

由于 KDF 基于 HMAC-SHA-256,给定 NH(i) 无法反推 NH(i-1),更无法反推 KAMF。这条单向性是前向安全的数学基础:只要某个 gNB 持有的是"较新"的 NH,即使它被攻破,也只能获得该 NH 及其之后派生的密钥,无法回溯或前推链上其他节点。

3.2 NCC 的同步语义

NCC(Next Hop Chaining Counter)是一个 0–7 的循环计数器,作为 NH 链上位置的"游标"。UE 和网络各自维护一个本地 NCC:

这种"差值比对"的设计,使得 UE 无需知道网络侧 NH 链的全貌,仅靠一个计数器即可与网络保持同步——这是 TS 33.501 的精妙之处。

stateDiagram-v2
    direction LR
    [*] --> Reg: 主认证完成<br/>KAMF 派生<br/>AMF 算 NH(0), NCC=0
    Reg --> Served: AMF 经 ICS 向 gNB 推送<br/>{NH(0), NCC=0}<br/>gNB 用 KAMF→KNG-RAN
    Served --> HO_H: Xn 切换(无新NH可用)<br/>水平推演<br/>KNG-RAN*=KDF(KNG-RAN, PCI, ARFCN)<br/>NCC 不变
    Served --> HO_V: 切换(有新NH可用)<br/>垂直推演<br/>KNG-RAN*=KDF(NH, PCI, ARFCN)<br/>NCC+1, NH 链推进
    HO_H --> Served2: 新 gNB 持有 KNG-RAN*<br/>NCC 不变
    HO_V --> Served2: 新 gNB 持有 KNG-RAN*<br/>NCC+1
    Served2 --> HO_V2: 下一次切换<br/>AMF 可提供更深的 NH(i)

四、水平推演 vs 垂直推演(TS 33.501 Section 6.9.2.1.1)

切换发生时,源 gNB 负责为目标 gNB 派生新的 KNG-RAN*。它有两条派生路径,记录在 Annex A.11(目标为 gNB)与 A.12(目标为 ng-eNB,4G 互操作)。

4.1 水平推演(Horizontal Key Derivation)

KNG-RAN* = KDF( KNG-RAN,  PCI_target || ARFCN-DL_target )    // Annex A.11
NCC 不变

输入密钥是当前的 KNG-RAN。优点是无需 AMF 参与、信令开销最小,可在 Xn 接口上连续多次切换。缺点是:不提供前向安全——因为当前 KNG-RAN 已经存在于被攻破风险的源 gNB 中,从它派生的新密钥与它在同一"密钥等价类"内。

4.2 垂直推演(Vertical Key Derivation)

KNG-RAN* = KDF( NH,  PCI_target || ARFCN-DL_target )         // Annex A.11
NCC 加 1,NH 链推进

输入密钥是NH。由于 NH 来自由 KAMF 维护的单向链,垂直推演提供前向安全:即便源 gNB 被攻破拿到当前 NH,攻击者也无法推导 AMF 中更深位置的 NH,因而无法获取后续切换的密钥。

4.3 源 gNB 如何选择路径

源 gNB 持有 KNG-RAN、NH、NCC 三元组。规则(Section 6.9.2.1.1)可概括为:

PCI_target 与 ARFCN-DL_target 作为派生输入,确保不同目标小区派生出的密钥天然不同——即使两次切换复用相同 NH,密钥也不同。这是"一小区一钥"隔离的关键。

维度 水平推演(Horizontal) 垂直推演(Vertical)
输入密钥 当前 KNG-RAN NH(链上当前值)
NCC 变化 不变 +1(推进 NH 链)
AMF 参与 否(Xn 上可连续) 需要 AMF 提供/持有 NH 链
前向安全 ❌ 无 ✅ 有
触发条件 无可用新鲜 NH 持有未消耗的新 NH
Annex A.11(同 A.11,输入不同) A.11
典型场景 连续 Xn 切换、乒乓切换 N2 切换、首次移动、AMF 推 NH 后

五、完整切换信令时序:以 Xn 切换中的密钥推演为例

下图展示一次 Xn 切换中,密钥如何在源 gNB、目标 gNB、UE 之间流动。注意 NCC 如何通过 RRC 传递给 UE。

sequenceDiagram
    autonumber
    participant UE
    participant SgNB as 源 gNB<br/>{KNG-RAN, NH, NCC}
    participant TgNB as 目标 gNB
    participant AMF
    Note over SgNB: 持有未消耗的新鲜 NH<br/>决定使用垂直推演
    SgNB->>TgNB: XnAP Handover Request<br/>含 KNG-RAN*(已派生)、NCC'、<br/>算法列表、UP/CP 安全策略
    Note over TgNB: 用 KNG-RAN* 派生<br/>KRRCenc/int, KUPenc/int
    TgNB-->>SgNB: XnAP Handover Request Acknowledge<br/>含 HO Command(含 NCC')
    SgNB->>UE: RRCReconfiguration<br/>→ ReconfigurationWithSync<br/>含 nextHopChainingCount=NCC'<br/>+ target Cell ID(隐含 PCI/ARFCN)
    Note over UE: 比对 NCC' 与本地 NCC<br/>NCC'==本地+1 → 推进 NH 链<br/>垂直推演: KNG-RAN*=KDF(NH,PCI,ARFCN)
    UE->>TgNB: 随机接入 + RRCReconfigurationComplete<br/>用新 KNG-RAN* 派生的算法密钥加解密
    TgNB->>AMF: NGAP Path Switch Request<br/>含新 KNG-RAN* 的安全上下文、NCC'
    AMF-->>TgNB: Path Switch Request Acknowledge<br/>若 NCC' 已到链尾,<br/>AMF 推送更深 NH(i)、NCC'' 供下次切换
    Note over AMF: NH(i+1)=KDF(KAMF, NH(i))<br/>维护 NH 链

5.1 关键 IE 逐条解析

① XnAP Handover Request(源→目标 gNB)中的安全相关 IE:

② RRC ReconfigurationWithSync(TS 38.331)中的 IE:

③ NGAP Path Switch Request Acknowledge(AMF→目标 gNB):

5.2 N2 切换的差异

N2(NG-based)切换中,源 gNB 通过 NGAP Handover Required 将当前安全上下文(含 source-to-target transparent container 与 KNG-RAN/NH 指示、NCC)发给 AMF。AMF 作为"密钥中转":

因此 Xn 切换推演在源侧、N2 切换推演可在目标侧由 AMF 喂入 NH——这是两条信令路径在安全上的根本差异,也是为何 N2 切换更容易获得前向安全的原因。


六、KNG-RAN* 派生算法的输入参数(Annex A.11)深度剖析

Annex A.11 的 KDF 调用遵循 TS 33.220 定义的通用 KDF 框架:

KEY = HMAC-SHA-256( Key_in,  S = FC || P0 || L0 || P1 || L1 || ... )

对于 KNG-RAN*(target gNB):

Key_in 在水平推演时为 KNG-RAN,垂直推演时为 NH。算法完全相同,唯一差异是输入密钥——这一点常被误解。许多实现错误地把"水平/垂直"理解为不同算法,实际上标准只用同一 KDF、不同输入。

为何选 PCI 与 ARFCN-DL? 它们足够稳定地标识目标小区,且 UE 与网络都无需额外信令即可获得(PCI 来自同步,ARFCN 来自测量配置)。把频率信息纳入派生,使得同频切换与异频切换的密钥天然隔离,进一步加强了密码学隔离边界。


七、KAMF 刷新与垂直推演的级联

KAMF 并非永久不变。在以下场景 AMF 会执行 KAMF 刷新(Annex A.5,基于 KSEAF 与新的 ngKSI):

KAMF 一旦刷新,整条 NH 链被重置:AMF 重新计算 NH(0)、NCC 归零。UE 收到新的 NAS Security Mode Command(携带新 ngKSI)后同步刷新 KAMF 与 NH 链。这是一次"全链级联刷新",是 5G 应对长期会话密钥暴露的最高级别动作。在抓包中表现为:一次完整的 NAS SMC 之后紧跟 Initial Context Setup,且随后切换的 NCC 从 0 重新开始递增。


八、实战连接:抓包识别与故障排查

8.1 抓包如何识别切换密钥推演

8.2 常见故障点

现象 根因 排查思路
切换后 UE 接入失败、RRC 重建 UE 侧 NCC 与网络侧不同步(如丢失一次 ReconfigurationWithSync) 对比 UE 日志 nhcc 与 gNB 期望值;检查是否因层 2 重传丢失 RRC 消息
切换后完整性校验失败 UE 误判水平/垂直(PCI/ARFCN 输入不一致) 检查 UE 测量上报的频点与目标小区实际配置是否一致
长时间移动后随机出现安全失败 NH 链"耗尽"且 AMF 未及时续链(连续水平推演后某次需要垂直但无 NH) 检查 AMF 在 Path Switch Ack 中是否下发新 NH;评估 ngKSI 周期性刷新策略
N2 切换后前向安全弱 AMF 始终透传 KNG-RAN(水平),未利用 NH 检查 AMF/NACF 实现是否在 Handover Request 中携带 NH+递增 NCC
## 九、前向安全的攻击面:学术视角

ETH Zürich 的形式化分析(WISEC'21,"A Comprehensive Formal Analysis of 5G Handover")与 Linköping 大学的"5G Handover: When Forward Security Breaks"(SECRYPT'23)系统性地指出:水平推演是 5G 切换前向安全的主要薄弱点。由于 Xn 切换可在无 AMF 介入下连续进行,攻击者若在水平推演链上的某个 gNB 节点实施物理或供应链攻破,可沿水平派生链向"未来"若干次切换推导密钥——直至某次垂直推演(依赖 AMF 续链)打破该等价类。

这意味着运营商在保障前向安全时的关键工程指标是:控制连续水平推演的最大次数,即缩短"AMF 续链间隔"。这也是 R17/R18 以来 SA3 持续讨论增强 NH 链管理(如更激进的 Path Switch Ack 续链、KAMF 周期刷新缩短)的动因。


十、设计意图总结

  1. PCI + ARFCN 入参 → 一小区一钥、同/异频天然隔离。
  2. NH 单向链 → 数学上保证被攻破的 gNB 无法回溯或越级前推。
  3. NCC 差值同步 → UE 仅用一个 0–7 计数器即可与网络对齐,无需握手。
  4. 水平/垂直双路径 → 在"前向安全强度"与"AMF 信令开销"间自适应权衡。
  5. Xn 源侧推演、N2 目标侧推演 → 与接口可达性天然匹配,避免 Xn 切换回环 AMF。

这套机制是 5G 在大规模分布式 RAN 部署下,"既要 gNB 解耦、又要密码学严格"的工程典范。


常见问题

Q1:水平推演和垂直推演用的是不是同一个 KDF 算法? A:是的,两者都调用 Annex A.11 的同一个 KDF(FC=0x6E,入参 PCI、ARFCN-DL)。唯一区别是输入密钥:水平用当前 KNG-RAN,垂直用 NH。所谓"水平/垂直"指输入密钥来源,而非算法本身。

Q2:UE 如何知道本次切换是水平还是垂直推演? A:UE 通过比较 RRC ReconfigurationWithSync 中的 nextHopChainingCount 与本地 NCC:相等则为水平(用 KNG-RAN),等于本地+1 则为垂直(推进 NH 链后用 NH 派生)。UE 不需要额外信令指示。

Q3:连续多次 Xn 切换会不会耗尽 NH 链导致不安全? A:会。连续水平推演不会消耗 NH,但前向安全减弱;一旦 AMF 通过 Path Switch Request Acknowledge 或 UE Context Modification 下发更深的 NH(NCC 递增),下一次切换即可恢复垂直推演。运营商应控制连续水平推演的最大窗口,必要时缩短 KAMF 周期刷新以重置 NH 链。

Q4:N2 切换与 Xn 切换在密钥推演上最大的区别是什么? A:Xn 切换由源 gNB 完成推演并把 KNG-RAN* 直接传给目标 gNB,AMF 不参与密钥;N2 切换中 AMF 介入,可在 Handover Request 中向目标 gNB 下发 NH+递增 NCC,由目标 gNB 完成垂直推演。因此 N2 切换天然有更强的前向安全获得能力。

Q5:KAMF 刷新后 NH 链会怎样? A:KAMF 刷新(如重新主认证、AMF 变更)会重置整条 NH 链:AMF 重新计算 NH(0)、NCC 归零,UE 同步刷新。这是 5G 应对长期密钥暴露的最高级刷新动作,抓包上表现为 NAS Security Mode Command 后 NCC 从 0 重新递增。


参考来源

  1. 3GPP TS 33.501 V18.10.0 — Security architecture and procedures for the 5G system — Section 6.2 密钥层级、Section 6.9.2.1.1 切换 AS 密钥派生、Annex A.9/A.10/A.11 KDF
  2. TS 33.501 Section 6.9.2.1.1 — Access stratum key derivation at handover | iTecSpec — NH 链与水平/垂直推演章节结构核对
  3. A Comprehensive Formal Analysis of 5G Handover (ETH Zürich, WISEC'21) — 水平/垂直派生的形式化定义与前向安全分析
  4. 5G Handover: When Forward Security Breaks (Linköping, SECRYPT'2023) — AMF 推送 NH/NCC 的前向安全增强与攻击面分析
  5. 5G 安全架构(十五)— UE 和 5G 网络 — 密钥层次结构 | 知乎 — K→KAUSF→KSEAF→KAMF→KNG-RAN 中文派生链解读
  6. 5G AS 层密钥处理通用原则 | CSDN — KNG-RAN*/NH 密钥链水平与垂直推导模型

本文由「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学通信知识星球海报-扫码加入