本文聚焦 3GPP TS 33.501《Security architecture and procedures for 5G system》第 6.1.3 节(5G AKA primary authentication) 及 Annex A.2~A.7 的密钥派生函数(KDF),逐消息、逐 IE、逐字节地拆解 5G 主认证的完整信令链路,并对照说明其相对于 EPS-AKA 的三项安全增强点(服务网络显式绑定、HXRES* 双重确认、归属网络控制增强)。
在 4G EPS 中,MME 直接从 HSS 拉取认证向量(AV),用 XRES 本地比对即完成认证。这种设计有两个先天的安全弱点:
5G AKA(5G Authentication and Key Agreement)在 TS 33.501 §6.1.3 中给出了修正方案,核心思想是:
KAUSF、KSEAF 均以 SNN 为输入),使任何"换网络冒充"都会导致密钥不匹配;RES*/XRES* 比对留在归属网络 AUSF,实现"归属网络控制(home network control)增强"——HN 现在能拿到 UE 成功鉴权的证据。下面我们沿着这条链路,从密钥层级、信令时序、IE 结构、KDF 派生一路拆到底。
5G 主认证涉及四个角色:
| 角色 | 功能实体 | 位置 | 持有的密钥 |
|---|---|---|---|
| 被认证方 | UE(USIM + ME) | 终端 | 永久密钥 K(仅在 USIM 内) |
| 服务网络锚点 | SEAF(位于 AMF) | 拜访/服务网络 | KSEAF |
| 归属鉴权裁决 | AUSF | 通常归属网络 | KAUSF、XRES* |
| 认证数据源 | UDM / ARPF(含 SIDF 做 SUCI 解 concealment) | 归属网络 | K、生成 5G HE AV |
注:K 永远不离开 USIM/UDM;USIM 用 K 执行 f1~f5* 运算后把 CK/IK/RES 交给 ME,由 ME 完成 5G 特有的 KDF 派生。
整个 5G 密钥层级以 KSEAF 为锚点,向下派生出 NAS/AS 安全所需的全部密钥:
graph TD
K["永久密钥 K<br/>(USIM / UDM·ARPF)"] -->|f3,f4,f2,f1,f5*| F["CK, IK, RES, MAC-A, AK"]
F -->|"KDF FC=0x6C, P0=SNN"| CKI["CK'‖IK' (256 bit)"]
CKI -->|"KDF FC=0x6B, P0=RAND,P1=RES"| RES["RES* / XRES*"]
CKI -->|"KDF FC=0x6A, P0=SNN,P1=SQN⊕AK"| KAUSF["KAUSF"]
KAUSF -->|"KDF FC=0x6E, P0=SNN"| KSEAF["KSEAF<br/>(锚点密钥, 驻留SEAF)"]
KSEAF -->|"KDF FC=0x6F, P0=SUPI,P1=ABBA"| KAMF["KAMF (AMF)"]
KAMF --> DOWN["KNASenc / KNASint<br/>KgNB / NH / KRRCenc / ..."]
style KSEAF fill:#cfe8ff,stroke:#0366d6,stroke-width:2px
style K fill:#ffe0b3,stroke:#e65100,stroke-width:2px
需要强调:本图中的 KgNB/NH 部分(接入网密钥链)已在上一篇《5G 切换密钥链 NH 派生机制》中详述,本文聚焦认证段,即从 K → KSEAF → KAMF 这一段的派生与绑定逻辑。
主认证并非独立流程,它内嵌于注册流程(Registration)中:AMF 在收到 Initial Registration 且尚未建立安全上下文时,由 SEAF 触发本次主认证。
sequenceDiagram
autonumber
participant UE as UE (USIM+ME)
participant SEAF as SEAF / AMF
participant AUSF as AUSF
participant UDM as UDM / ARPF
Note over UE,UDM: 注册流程内触发主认证 (TS 33.501 §6.1.3)
SEAF->>AUSF: Nausf_UEAuthentication_Authenticate<br/>(SUCI/SUPI, SNN)
AUSF->>UDM: Nudm_UEAuthentication_Get<br/>(SUCI, SNN)
Note over UDM: ARPF 用永久密钥 K 生成 5G HE AV:<br/>{RAND, AUTN, XRES*, KAUSF}
UDM-->>AUSF: 5G AV {RAND, AUTN, XRES*, KAUSF}
Note over AUSF: 计算 HXRES* = SHA-256(RAND ‖ XRES*)
AUSF-->>SEAF: {RAND, AUTN, HXRES*}<br/>(XRES*, KAUSF 留在 AUSF)
SEAF->>UE: NAS Authentication Request<br/>(RAND, AUTN, ngKSI, ABBA)
Note over UE: USIM 验证 AUTN(MAC/SQN/分离位)<br/>ME 计算 RES* 与 KAUSF
alt AUTN 验证通过
UE-->>SEAF: NAS Authentication Response (RES*)
Note over SEAF: 计算 SHA-256(RAND ‖ RES*)<br/>与 HXRES* 比对 → 本地预确认
SEAF->>AUSF: Nausf_UEAuthentication_Authenticate (RES*)
Note over AUSF: RES* 与 XRES* 比对 → 最终确认
AUSF-->>SEAF: Authenticated + KSEAF = KDF(KAUSF, SNN)
Note over SEAF: KSEAF → KAMF → 建立 NAS/AS 安全上下文
else AUTN 验证失败
UE-->>SEAF: NAS Authentication Failure<br/>(#20 MAC / #21 Synch / #23 Non-5G)
end
步骤 1~3(取 AV):SEAF 构造 SNN(格式见第五节),通过 SBI 接口 Nausf_UEAuthentication_Authenticate 向 AUSF 发起请求;AUSF 再用 Nudm_UEAuthentication_Get 向 UDM 取认证向量。若 UE 上报的是 SUCI,则 UDM 内的 SIDF(Subscription Identifier De-concealing Function) 先用归属网络公钥解出 SUPI,再交由 ARPF 生成向量。
步骤 4(5G HE AV 生成):ARPF 在归属网络用永久密钥 K 调用经典 AKA 函数集生成 5G Home Environment AV:
RAND:128 bit 随机挑战;AUTN:128 bit 认证令牌(结构见第四节);XRES*:扩展期望响应;KAUSF:AUSF 与 UE 共享的派生密钥。步骤 5~6(AUSF 裁剪):AUSF 拿到 AV 后做两件事——一是计算 HXRES* = SHA-256(RAND ‖ XRES*)(TS 33.501 Annex A.4);二是把 XRES* 和 KAUSF 留在自己这里,只把 {RAND, AUTN, HXRES*} 下发给 SEAF。这一步是"归属网络控制"的关键:拜访网络拿不到能反推 XRES* 的材料。
步骤 7~8(空口挑战-应答):SEAF 通过 NGAP 把 NAS Authentication Request(含 RAND、AUTN、ngKSI、ABBA)下发给 UE。UE 端 USIM 验证 AUTN 并计算 RES,ME 再派生出 RES*,回送 NAS Authentication Response(RES*)。
步骤 9(SEAF 本地预确认):SEAF 计算 SHA-256(RAND ‖ RES*) 并与 AUSF 下发的 HXRES* 比对。匹配则 UE 身份在服务网络被初步确认。
步骤 10~11(AUSF 最终裁决):SEAF 把 RES* 上送 AUSF,AUSF 与本地 XRES* 严格比对,通过后派生 KSEAF = KDF(KAUSF, SNN) 并回送 SEAF,认证结束、安全上下文建立。
认证相关消息(TS 24.501 §8.2.25~8.2.26)中携带的关键 IE 如下:
| IE | 所在消息 | 含义 | 长度 / 来源 |
|---|---|---|---|
| ngKSI | Auth Request/Response | 临时密钥集标识,指向本次建立的 5G 安全上下文 | 4 bit |
| ABBA | Auth Request | 接入网隔离参数,含 5G 接入指示,参与 KAMF 派生 | 变长 |
| RAND | Auth Request | 128 bit 随机挑战 | 128 bit |
| AUTN | Auth Request | 认证令牌(网络对 UE 的身份证明 + 防重放) | 128 bit |
| RES* | Auth Response | UE 对挑战的扩展响应 | 128~256 bit |
| SNN | SBI 接口 | 服务网络名,绑入 KDF | 字符串 |
| HXRES* | AUSF→SEAF | 哈希响应,供 SEAF 本地比对 | 256 bit |
| KAUSF / KSEAF | SBI 接口 | 派生密钥(KAUSF 不出 AUSF) | 256 bit |
其中 AUTN 的 128 bit 内部结构是 5G 兼容性判断的核心(TS 33.102 中定义的 AKA 令牌沿用至 5G):
graph LR
A["AUTN (128 bit)"] --> B["SQN ⊕ AK<br/>(序列号异或匿名密钥)<br/>48 bit"]
A --> C["AMF<br/>(认证管理字段)<br/>16 bit"]
A --> D["MAC-A / MAC-F<br/>网络鉴权码<br/>64 bit"]
C --> E["AMF 分离位<br/>(LSB = 1 → 5G AV)<br/>LSB = 0 → EPS AV"]
style C fill:#ffd6d6,stroke:#b71c1c
style E fill:#fff3cd,stroke:#856404
设计意图:3G/4G/5G 共用同一张 USIM、同一把 K,靠 AMF 的最低位(separation bit) 来区分这套 AV 到底给哪个系统用。当 LSB=1,UE 知道这是 5G AV,于是走 5G AKA 流程并计算 RES*、KAUSF;若收到 LSB=0,UE 会判定"这不是 5G 认证"并以 #23 Non-5G authentication rejected 拒绝。这一位是防止 4G/5G 密钥体系相互污染的"单比特闸门"。
另外,TS 33.501 强制要求:ME 在用 CK/IK 派生出 CK'‖IK' 后必须清零(zeroize)原始 CK、IK。这是为了堵死"用 5G USIM 降级到 2G AKA 再生 CK/IK"这一类降级攻击路径。
服务网络名 SNN 是 5G 密钥"绑定"的核心参数,其字符串形式为:
SNN = "5G:mnc<MNC>.mcc<MCC>.3gppnetworks.org"
例: 5G:mnc012.mcc345.3gppnetworks.org
它由 SEAF 根据当前服务 PLMN(MCC+MNC)拼接而成,并以 SBI 参数一路传递给 AUSF、UDM。由于 KAUSF 和 KSEAF 都把 SNN 作为 KDF 输入,任何对 PLMN 身份的篡改都会导致派生出的密钥与 UE 不一致,从而在后续 NAS SMC 或 PDU 会话建立时失败——这正是 5G 抵御伪服务网络的根本机制。
5G 所有派生密钥都遵循统一的 HMAC-SHA-256 框架:
KDF(KEY) = HMAC-SHA-256(KEY, S)
S = FC ‖ P0 ‖ L0 ‖ P1 ‖ L1 ‖ ...
其中 FC 为功能码,Pi 为输入参数,Li 为 2 字节长度。
本流程涉及的 5 个功能码汇总如下:
| 派生密钥 | FC | 输入密钥 KEY | P0 | P1 | 规范章节 |
|---|---|---|---|---|---|
| CK'‖IK' | 0x6C |
CK ‖ IK | SNN | — | A.5 |
| RES* / XRES* | 0x6B |
CK' ‖ IK' | RAND | RES / XRES | A.2 |
| KAUSF | 0x6A |
CK' ‖ IK' | SNN | SQN ⊕ AK | A.6 |
| KSEAF | 0x6E |
KAUSF | SNN | — | A.7 |
| KAMF | 0x6F |
KSEAF | SUPI | ABBA | A.8 |
注意一个关键细节:KAUSF 的派生不仅用 SNN,还用 SQN ⊕ AK(与 AUTN 中携带的序列号异或匿名密钥值)作为第二输入。这意味着同一个用户每次认证(SQN 递增)得到的 KAUSF 都不同,天然具备前向/后向隔离性,即便某次 KSEAF 泄露也无法回溯或前推。
而 KAMF 的派生引入 SUPI(用户永久身份)与 ABBA(接入网隔离参数),把密钥与"是谁、从哪种接入网来"再次绑定,为后续 NAS/AS 密钥分层打下基础。
很多初学者会问:既然 SEAF 已经拿到了 RES*,为什么还要先算一遍 HXRES*?这里藏着 5G 安全架构最精妙的一处权衡。
两个目标存在张力: - 拜访网络(VPLMN 的 SEAF)希望本地、快速地确认 UE,减少跨网往返时延; - 归属网络(HPLMN 的 AUSF)希望掌控最终裁决权,并保留可向 HN 证明"鉴权已成功"的证据,同时不让 VPLMN 拿到完整 XRES*。
HXRES* 机制同时满足两者:
RES*/XRES* 比对仍由 AUSF 完成,提供归属网络可审计的成功证据。对比 EPS-AKA 中 HSS 把 XRES 全权交给 MME、归属网络事后无从核验,这一改动正是 TS 33.501 所称的 "home-control enhancement"。
5G 定义了两种主认证方法(§6.1.2 EAP-AKA'、§6.1.3 5G AKA),由 UDM 根据用户签约的"认证方法"字段选择。两者最终都收敛到同一密钥层级 KSEAF → KAMF,但绑定方式与适用场景差异显著:
| 维度 | 5G AKA | EAP-AKA' |
|---|---|---|
| 协议框架 | 3GPP 原生 NAS 信令 | EAP 框架(RFC 9048) |
| 认证向量 | 5G AV | EAP AV + AT_RAND/AT_AUTN/AT_KDF 属性 |
| SNN 绑定 | 隐式:SNN 作为 KDF(KAUSF/KSEAF)输入 | 显式:经 AT_KDF 属性协商,UE 直接校验 SNN 字符串 |
| 本地预确认 | SEAF 用 HXRES* 预确认 | 无 HXRES*,依赖 AUSF 最终确认 |
| 典型接入 | 3GPP 接入(NR) | 不可信非 3GPP 接入(N3IWF) |
| UE 对服务网络的验证 | 间接(通过密钥上下文) | 直接(看到并比对网络名字符串) |
| 中间产物 | CK'‖IK' → KAUSF | MK → KAUSF |
一句话总结:5G AKA 把服务网络身份"溶进"密钥,EAP-AKA' 把它"写在脸上"让 UE 主动核对。前者更紧凑,后者对 UE 的可见性更强。
5G 主认证横跨空口 NAS 与核心网 SBI 两段,分别用不同过滤器:
nas-5gs.mm.message_type == 0x5bnas-5gs.mm.message_type == 0x5cnas-5gs.mm.message_type == 0x5dnas-5gs.mm.message_type == 0x5ehttp2 && http2.headers.content_type contains "application/json",URL 路径含 ueauthentications。排查时优先确认两点:AUTN 中 AMF 分离位是否为 1(解析 AUTN 的第 7~8 字节即 AMF,其 LSB 应为 1);RES* 长度是否落 128~256 bit 区间。
| 现象 | NAS Cause | 根因 | 排错方向 |
|---|---|---|---|
| MAC 不匹配 | #20 MAC failure | USIM 与 UDM 的 K 不一致、或 AV 被重放 | 核对 USIM/UDM 密钥;检查 SQN 是否被复用 |
| 序列号失步 | #21 Synch failure | UE 的 SQN 与 UDM 记录差距超窗 | UE 回 AUTS 触发重同步,检查 UDM 侧 SQN 步长配置 |
| 非法 5G AV | #23 Non-5G authentication rejected | AMF 分离位=0(USIM 非 5G 或误下发 EPS AV) | 检查 UDM 选用的认证方法与 USIM 5G 能力 |
| HXRES 不匹配 | SEAF/AUSF 内部拒绝 | SNN 构造错误(MCC/MNC 错)或 RES* 计算异常 | 核对 SEAF 拼接的 SNN 与 KDF 输入是否一致 |
| 认证后 SMC 失败 | Security mode 拒绝 | KAMF 派生输入(SUPI/ABBA)不一致 | 检查 ABBA 字段与 SUPI 编码 |
当 UE 判定 SQN 越界,回送 Authentication Failure (#21) 并携带 AUTS(内含 UE 当前 SQN 经 f1* 计算的 MAC)。UDM 据此重算 SQN 基线,下发新 AV,完成重同步。这一子流程在终端长期关机后重新入网、或 UDM 数据库异常导致 SQN 回退时高发。
Q1:5G AKA 与 EPS-AKA 的本质区别是什么? A:三点:(1) 服务网络 SNN 显式注入密钥派生(KAUSF/KSEAF 均以 SNN 为输入),杜绝伪基站冒充任意服务网络;(2) HXRES* 双重确认——SEAF 本地预确认、AUSF 最终裁决;(3) 归属网络控制增强——HN 现在能拿到 UE 成功鉴权的证据,而非像 EPS 那样把 XRES 全权交给拜访网络。
Q2:为什么 SEAF 要先用 HXRES* 比对,而不是直接比 RES*? A:HXRES* 是 SHA-256 单向哈希,拜访网络长期持有也无法反推 XRES*,保护了归属网络秘密;同时 SEAF 可借此做毫秒级本地预确认、降低跨网往返时延;高强度的 RES*/XRES* 终判仍由 AUSF 完成,实现"快速本地确认 + 归属最终裁决"的平衡。
Q3:AUTN 里那个 AMF 分离位到底有什么用? A:AMF 的最低位(separation bit)=1 表示本 AV 用于 5G。同一张 USIM 的 K 在 3G/4G/5G 共用,靠这一位区分体系。若 UE 收到分离位=0(EPS AV),会以 #23 Non-5G authentication rejected 拒绝,防止 4G/5G 密钥体系相互污染与降级。
Q4:KAUSF 为什么必须留在归属网络的 AUSF,不下发给拜访网? A:KAUSF 是派生 KSEAF 的中间密钥。让它驻留归属 AUSF(甚至不发给 SEAF),可保证拜访网络只拿到派生后的 KSEAF,无法获得更高级别密钥材料,从而实现密钥分层与最小权限原则——即便拜访网被攻陷,也无法回溯到 KAUSF 或永久密钥 K。
Q5:SQN 失步后怎么恢复?
A:UE 检测到 SQN 越出可接受窗口,回送 Authentication Failure (#21 Synch failure) 并携带 AUTS(含 UE 当前 SQN 经 f1* 计算的 MAC)。UDM 解析 AUTS、以 UE 的 SQN 为基准重算序列号,下发新 AV,完成重同步后再进入正常认证。
本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。 后构造非法上下文。
Q4:鉴权和 Security Mode Command 是什么关系? A:鉴权(Authentication)产出密钥根KSEAF→KAMF,但密钥还没"激活"。Security Mode Command才是把选定的NAS加密/完整性算法与对应密钥真正下发、并开始空口加密的过程。简言之:鉴权"算出"密钥,SMC"启用"密钥。
Q5:如果只抓到空口,能完整复现鉴权吗? A:能复现UE侧与AMF侧的交互(Authentication Request/Response明文可见,含RAND/AUTN/RES*),但无法看到归属网侧的XRES*/HXRES*与最终裁决——这部分只在SBI接口(AUSF↔UDM、AMF↔AUSF)上出现。完整排错需同时抓空口与SBI。
本文由「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 等场景全覆盖。
