4G EPS-AKA存在三个根本性安全缺陷:IMSI以明文在空口传输(可被伪基站捕获)、CK/IK暴露给服务网络(MME可直接获取)、服务网络绑定弱(缺乏对SN的身份验证)。3GPP TS 33.501从架构层面重新设计了5G Primary Authentication,引入SUCI/SUPI隐私保护、SEAF/AUSF/ARPF分层密钥锚定、SNN(Serving Network Name)绑定的密钥推演机制。
本文聚焦 TS 33.501 V18.x Section 6.1.3 定义的5G-AKA完整认证流程,逐步拆解每个信令消息中的关键IE(Information Element),绘制完整的密钥推演层级,并分析与4G EPS-AKA的核心差异。
5G-AKA认证涉及五个核心安全功能实体,每个实体承担明确的密码学职责:
| 功能实体 | 位置 | 核心职责 | 对标4G网元 |
|---|---|---|---|
| UE/USIM | 终端侧 | 存储长期密钥K,执行f1-f5算法,计算RES*和KAUSF | USIM |
| SEAF(Security Anchor Function) | 共址于AMF | 安全锚点,接收KSEAF,推演KAMF | MME(部分) |
| AUSF(Authentication Server Function) | 核心网新实体 | 验证RES=XRES,推演KSEAF,持有KAUSF | MME(部分) |
| UDM/ARPF | 核心网 | 生成5G AV,存储长期密钥K | HSS/AuC |
| SIDF(Subscription Identifier De-concealing Function) | 共址于UDM | 将SUCI解密还原为SUPI | 无(4G无此功能) |
设计意图:4G中MME同时承担认证验证和密钥锚定的双重角色,存在权限过度集中的风险。5G将认证验证(AUSF)、密钥锚定(SEAF)、认证向量生成(ARPF)三者解耦,实现职责分离(Separation of Duties)。
在进入5G-AKA主流程之前,UE必须先完成身份保护。5G引入SUCI(Subscription Concealed Identifier)替代4G中的明文IMSI传输。
SUCI = <SUPI Type> | <MCC/MNC> | <Routing Indicator> | <Protection Scheme ID> | <HN Public Key ID> | <Ephemeral Public Key> | <Ciphertext> | <MAC Tag>
| 字段 | 长度 | 说明 |
|---|---|---|
| SUPI Type | 4 bits | 0=IMSI, 1=NAI等 |
| MCC/MNC | 可变 | 归属网络标识,明文传输用于路由 |
| Routing Indicator | 1-4 digits | 用于路由到正确的UDM/ARPF |
| Protection Scheme ID | 4 bits | 0=Null, 1=Profile A, 2=Profile B |
| HN Public Key ID | 可变 | 标识使用哪把HN公钥 |
| Ephemeral Public Key | 可变 | UE临时公钥(32字节,Curve25519) |
| Ciphertext | 可变 | 加密后的MSIN |
| MAC Tag | 可变 | 完整性保护标签 |
TS 33.501 Section 6.2定义了两种ECIES Profile:
flowchart TD
subgraph UE侧["UE/USIM"]
A["长期公钥 HN_PK<br/>(USIM预置)"] --> B["生成临时密钥对<br/>eph_SK / eph_PK"]
B --> C["ECDH共享密钥<br/>SharedSecret = eph_SK × HN_PK"]
C --> D["KDF推演<br/>Enc_Key + MAC_Key"]
D --> E["加密MSIN → Ciphertext"]
D --> F["计算MAC Tag"]
end
subgraph HN侧["SIDF/UDM"]
G["长期私钥 HN_SK"] --> H["ECDH共享密钥<br/>SharedSecret = HN_SK × eph_PK"]
H --> I["KDF推演<br/>Enc_Key + MAC_Key"]
I --> J["验证MAC Tag"]
J --> K["解密Ciphertext → MSIN"]
end
E -. "SUCI空口传输" .-> J
F -. "SUCI空口传输" .-> J
| 参数 | Profile A | Profile B |
|---|---|---|
| 椭圆曲线 | secp256r1 (P-256) | Curve25519 |
| 密钥交换 | ECDH标准 | X25519 |
| 加密算法 | AES-128-CTR | AES-128-CTR |
| MAC算法 | HMAC-SHA-256(截断128bit) | HMAC-SHA-256(截断128bit) |
| KDF | SHA-256 | SHA-256 |
| 临时公钥长度 | 64字节(未压缩) | 32字节 |
实战要点:Profile B(Curve25519)因临时公钥更短(32 vs 64字节)、运算更快,在实际部署中更受青睐。抓包时可在SUCI的Protection Scheme ID字段识别使用的Profile——值为0x01为Profile A,0x02为Profile B。
以下为TS 33.501 Section 6.1.3.2定义的5G-AKA完整信令时序图:
sequenceDiagram
participant UE as UE/USIM
participant SEAF as SEAF(AMF)
participant AUSF as AUSF
participant UDM as UDM/ARPF
Note over UE,SEAF: Step 1: Registration Request
UE->>SEAF: Registration Request<br/>(SUCI or 5G-GUTI, SNN)
Note over SEAF,UDM: Step 2-3: 认证向量请求
SEAF->>AUSF: Nausf_UEAuthentication<br/>Authenticate Request<br/>(SUCI/SUPI, SNN)
AUSF->>UDM: Nudm_UEAuthentication<br/>Get Request<br/>(SUPI, SNN)
Note over UDM: Step 4: ARPF生成5G AV
Note over UDM: RAND ← 随机数<br/>SQN ← 序列号递增<br/>MAC = f1(K, RAND, SQN, AMF)<br/>XRES = f2(K, RAND)<br/>CK = f3(K, RAND)<br/>IK = f4(K, RAND)<br/>AK = f5(K, RAND)<br/>AUTN = SQN⊕AK ‖ AMF ‖ MAC<br/>XRES* = KDF(CK‖IK, "5G-AKA", RAND, XRES)<br/>KAUSF = KDF(CK‖IK, SQN⊕AK, SNN)
UDM-->>AUSF: Nudm_UEAuthentication<br/>Get Response<br/>(RAND, AUTN, XRES*, KAUSF)
Note over AUSF: 保存KAUSF和XRES*
AUSF-->>SEAF: Nausf_UEAuthentication<br/>Authenticate Response<br/>(RAND, AUTN, HXRES*)
Note over SEAF,UE: Step 7: 网络挑战UE
SEAF->>UE: NAS Authentication Request<br/>(RAND, AUTN, ngKSI)
Note over UE: Step 7a: UE验证网络
Note over UE: AK = f5(K, RAND)<br/>恢复SQN = AUTN中SQN⊕AK ⊕ AK<br/>XMAC = f1(K, RAND, SQN, AMF)<br/>验证: XMAC == AUTN中的MAC<br/>验证: SQN在有效范围
Note over UE,SEAF: Step 8: UE应答
UE->>SEAF: NAS Authentication Response<br/>(RES*)
Note over UE: RES = f2(K, RAND)<br/>CK' = f3(K, RAND), IK' = f4(K, RAND)<br/>RES* = KDF(CK'‖IK', "5G-AKA", RAND, RES)<br/>KAUSF = KDF(CK'‖IK', SQN⊕AK, SNN)
Note over SEAF: Step 9: SEAF初步验证
Note over SEAF: HRES* = KDF(RES*)<br/>比较: HRES* == HXRES*?
SEAF->>AUSF: Nausf_UEAuthentication<br/>Authenticate Confirm<br/>(RES*)
Note over AUSF: Step 10: AUSF最终验证
Note over AUSF: 比较: RES* == XRES*?<br/>KSEAF = KDF(KAUSF, SNN)
AUSF-->>SEAF: Nausf_UEAuthentication<br/>Authenticate Confirm Response<br/>(KSEAF, AuthResult=SUCCESS)
Note over SEAF: Step 11: 推演KAMF
Note over SEAF: KAMF = KDF(KSEAF, SUPI, accessType)
| IE名称 | 长度 | 说明 | 来源 |
|---|---|---|---|
| RAND | 16字节 | 网络生成的随机挑战值 | ARPF |
| AUTN | 16字节 | 认证令牌 = SQN⊕AK(6B) + AMF(2B) + MAC(8B) | ARPF |
| ngKSI | 3 bits | 密钥集标识符,标识本次安全上下文 | SEAF分配 |
| ABBA | 可变 | 防止BSS攻击的参数(TS 33.501 6.1.3.3) | SEAF |
AUTN内部结构:
AUTN (16 bytes):
┌────────────────┬──────────────┬────────────────┐
│ SQN ⊕ AK │ AMF │ MAC │
│ (48 bits) │ (16 bits) │ (64 bits) │
│ 匿名化序列号 │ 认证管理字段 │ 消息认证码 │
└────────────────┴──────────────┴────────────────┘
| IE名称 | 长度 | 说明 |
|---|---|---|
| RES* | 可变(≥16字节) | UE计算的认证应答,扩展后的RES |
RES*的推演公式(TS 33.501 Annex A.5):
RES* = KDF(CK || IK, P0 = "5G-AKA", L0 = 7,
P1 = RAND, L1 = 16,
P2 = RES, L2 = len(RES))
设计意图:4G中直接传输RES(通常8字节),长度固定。5G将RES扩展为RES(通过KDF包裹),增加了密钥材料长度,有效抵抗虚假基站攻击*——攻击者无法从短RES推演出完整的密钥层级。
AUSF在返回认证响应时不仅发送RAND和AUTN,还发送HXRES*:
HXRES* = SHA-256(RAND || XRES*)
SEAF收到UE的RES*后,先本地计算:
HRES* = SHA-256(RAND || RES*)
比较HRES与HXRES,若匹配则初步验证通过,再转发RES*给AUSF做最终验证。
设计意图:SEAF预验证机制使得AMF可以在不依赖AUSF的情况下快速过滤明显的认证失败,减少不必要的网络信令开销。
TS 33.501 Section 6.2定义了5G完整的密钥推演层级。所有KDF均基于HMAC-SHA-256(TS 33.501 Annex A.2):
KDF(Key, S) = HMAC-SHA-256(Key, S)
其中 S = FC || P0 || L0 || P1 || L1 || ...
FC = 功能码(1字节),Pn = 参数n,Ln = 参数n长度(2字节大端序)
flowchart TD
K["长期密钥 K<br/>(USIM + ARPF各持有一份)"]
K -->|"f2(K, RAND)"| RES["RES / XRES"]
K -->|"f3(K, RAND)"| CK["CK"]
K -->|"f4(K, RAND)"| IK["IK"]
K -->|"f5(K, RAND)"| AK["AK(匿名密钥)"]
K -->|"f1(K, RAND, SQN, AMF)"| MAC["MAC"]
CK --> CKIK["CK ‖ IK"]
IK --> CKIK
CKIK -->|"FC=0x6A<br/>P0=5G-AKA<br/>P1=RAND<br/>P2=XRES"| XRESstar["XRES* / RES*<br/>(扩展认证应答)"]
CKIK -->|"FC=0x6A<br/>P0=SQN⊕AK<br/>P1=SNN"| KAUSF["KAUSF<br/>(AUSF密钥)"]
KAUSF -->|"FC=0x6C<br/>P0=SNN"| KSEAF["KSEAF<br/>(SEAF锚点密钥)"]
KSEAF -->|"FC=0x6D<br/>P0=SUPI<br/>P1=AccessType"| KAMF["KAMF<br/>(AMF根密钥)"]
KAMF -->|"FC=0x69<br/>P0=算法类型标识"| KNASint["KNASint<br/>NAS完整性密钥"]
KAMF -->|"FC=0x69<br/>P0=算法类型标识"| KNASenc["KNASenc<br/>NAS加密密钥"]
KAMF -->|"FC=0x6F<br/>P0=access type"| KgNB["KgNB<br/>gNB根密钥"]
KgNB -->|"FC=0x69"| KRRCint["KRRCint<br/>RRC完整性密钥"]
KgNB -->|"FC=0x69"| KRRCenc["KRRCenc<br/>RRC加密密钥"]
KgNB -->|"FC=0x69"| KUPint["KUPint<br/>UP完整性密钥"]
KgNB -->|"FC=0x69"| KUPenc["KUPenc<br/>UP加密密钥"]
style K fill:#e74c3c,color:#fff
style KAUSF fill:#e67e22,color:#fff
style KSEAF fill:#f39c12,color:#fff
style KAMF fill:#27ae60,color:#fff
style KgNB fill:#3498db,color:#fff
| 密钥 | KDF输入 | FC | P0 | P1 | 持有者 |
|---|---|---|---|---|---|
| KAUSF | CK‖IK | 0x6A | SQN⊕AK | SNN | AUSF |
| KSEAF | KAUSF | 0x6C | SNN | — | SEAF |
| KAMF | KSEAF | 0x6D | SUPI | Access Type | AMF |
| KNASint | KAMF | 0x69 | 算法类型ID | — | UE+AMF |
| KNASenc | KAMF | 0x69 | 算法类型ID | — | UE+AMF |
| KgNB | KAMF | 0x6F | Access Type | — | gNB |
| KRRCint | KgNB | 0x69 | 算法类型ID | — | UE+gNB |
| KRRCenc | KgNB | 0x69 | 算法类型ID | — | UE+gNB |
| 对比维度 | 4G EPS-AKA | 5G-AKA |
|---|---|---|
| 根密钥 | K → CK/IK → KASME | K → CK/IK → KAUSF → KSEAF → KAMF |
| 中间密钥传输 | CK/IK发送给MME | CK/IK永不离开ARPF/USIM |
| SN绑定 | 通过OPc隐式绑定 | 通过SNN显式绑定(KDF参数) |
| 密钥层级深度 | 3层(K→KASME→KeNB) | 4层(K→KAUSF→KSEAF→KAMF→KgNB) |
| 加密算法协商 | NAS SMC中 | NAS SMC中(增加UP完整性) |
| 认证应答 | RES(短,固定长度) | RES*(KDF扩展,变长,抗虚假基站) |
TS 33.501 Section 6.1定义了两种主认证方法。下表从多个维度进行对比:
| 对比维度 | 5G-AKA(Section 6.1.3) | EAP-AKA'(Section 6.1.2) |
|---|---|---|
| 适用接入 | 3GPP接入(NR/LTE) | Non-3GPP接入(Wi-Fi via N3IWF/TNGF) |
| 协议框架 | NAS原生协议 | EAP框架(RFC 9048) |
| 安全锚点 | SEAF(共址AMF) | N3IWF/TNGF |
| 密钥层级 | KAUSF → KSEAF → KAMF | CK'||IK' → MK → MSK/EMSK |
| SN绑定参数 | SNN(Serving Network Name) | Access Network Identity |
| XRES长度 | XRES*(扩展) | 标准XRES |
| 身份隐私 | SUCI(ECIES加密) | 可选(非强制) |
| 重认证 | 使用5G-GUTI和KAMF派生 | EAP快速重认证 |
| SQN同步失败 | NAS Authentication Failure(#3GPP同步失败) | EAP-Response/AKA'-Synchronization-Failure |
| 消息数 | 4条NAS消息 | 多轮EAP交换(≥4条) |
设计意图:5G-AKA针对3GPP接入做了专门优化,信令效率更高(4条NAS消息完成),密钥绑定更强(SNN)。EAP-AKA'则利用成熟的EAP框架适配Non-3GPP接入,保证了跨接入类型的统一认证架构。
当UE检测到SQN不在有效范围时(通常是因为USIM长期未使用或测试环境中USIM反复初始化),触发重同步流程:
sequenceDiagram
participant UE as UE/USIM
participant SEAF as SEAF(AMF)
participant AUSF as AUSF
participant UDM as UDM/ARPF
Note over UE: 验证AUTN时发现<br/>SQN不在有效范围
UE->>SEAF: NAS Authentication Failure<br/>(Cause: Synch failure, AUTS)
Note over UE: AUTS = SQN_MS ⊕ AK ‖ MAC_S<br/>MAC_S = f1*(K, RAND, SQN_MS)
SEAF->>AUSF: Nausf_UEAuthentication<br/>Authenticate Request<br/>(AUTS, RAND)
AUSF->>UDM: Nudm_UEAuthentication<br/>Get Request<br/>(AUTS, RAND)
Note over UDM: ARPF使用AUTS和旧RAND<br/>恢复UE端的SQN_MS<br/>验证MAC_S<br/>以UE的SQN_MS为基准重新生成AV
UDM-->>AUSF: 新的5G AV<br/>(RAND_new, AUTN_new, XRES*_new, KAUSF_new)
AUSF-->>SEAF: 新的认证向量
SEAF->>UE: NAS Authentication Request<br/>(RAND_new, AUTN_new)
AUTS结构(12字节):
AUTS (12 bytes):
┌─────────────────────┬──────────────────────┐
│ SQN_MS ⊕ AK │ MAC_S │
│ (48 bits) │ (64 bits) │
│ UE端当前SQN │ f1*(K, RAND, SQN_MS) │
└─────────────────────┴──────────────────────┘
排错要点: - 在测试环境(free5GC/Open5GS + UERANSIM)中,SQN同步失败是最常见的认证问题 - 根因通常是USIM中SQN值与UDM/ARPF中的SQN不一致 - 解决方案:重置USIM的SQN(通过pySIM等工具),或在UDM中调整SQN初始值
认证成功后,AMF/SEAF发起NAS Security Mode Command(SMC)建立NAS安全上下文:
sequenceDiagram
participant UE as UE
participant AMF as AMF/SEAF
Note over AMF: 从KAMF推演:<br/>KNASenc = KDF(KAMF, alg-id-NEA)<br/>KNASint = KDF(KAMF, alg-id-NIA)
AMF->>UE: NAS Security Mode Command<br/>(Selected Security Algorithms,<br/>ngKSI, ReplayComplete)
Note over AMF: 该消息使用KNASint做完整性保护<br/>但不加密(安全上下文尚未在UE侧建立)
Note over UE: UE验证完整性<br/>推演KNASenc, KNASint<br/>启用NAS安全和加密
UE->>AMF: NAS Security Mode Complete<br/>(加密 + 完整性保护)
Note over UE: IMEI/SUCI等敏感信息<br/>在加密后的此消息中传输
| IE | 说明 |
|---|---|
| Selected NAS Security Algorithms | 包含加密算法(NEA0/NEA1/NEA2/NEA3)和完整性算法(NIA0/NIA1/NIA2/NIA3) |
| ngKSI | 密钥集标识,用于标识当前安全上下文 |
| ReplayComplete | 指示UE重放之前未受保护的NAS消息 |
| Additional_5G_Security_Parameters | 包含ABBA参数,防止BSS攻击 |
算法映射:
| 算法ID | 加密算法 | 说明 |
|---|---|---|
| 0 | NEA0 | 空加密(仅用于紧急呼叫) |
| 1 | 128-NEA1 | SNOW 3G |
| 2 | 128-NEA2 | AES-CTR |
| 3 | 128-NEA3 | ZUC |
| 算法ID | 完整性算法 | 说明 |
|---|---|---|
| 0 | NIA0 | 空完整性(TS 33.501限制使用) |
| 1 | 128-NIA1 | SNOW 3G |
| 2 | 128-NIA2 | AES-CMAC |
| 3 | 128-NIA3 | ZUC |
5G-AKA认证信令在NAS协议层,Wireshark过滤器:
# 过滤NAS Authentication Request/Response
nas-5gs.message_type == 0x56 || nas-5gs.message_type == 0x57
# 过滤NAS Authentication Failure
nas-5gs.message_type == 0x5c
# 过滤NAS Security Mode Command/Complete
nas-5gs.message_type == 0x5d || nas-5gs.message_type == 0x5e
在Wireshark中展开NAS Authentication Request消息:
- Extended protocol discriminator = 0x7E(5GS Mobility Management)
- Security header type = 0x00(Plain NAS,因为安全上下文尚未建立)
- Message type = 0x56(Authentication Request)
- ngKSI = 密钥集标识(通常为0-6,7表示无密钥可用)
- RAND = 16字节随机数(可追踪到ARPF生成的认证向量)
- AUTN = 16字节认证令牌(包含SQN⊕AK、AMF、MAC)
| 故障现象 | 可能原因 | 排查方法 |
|---|---|---|
| Authentication Failure (MAC failure, #20) | USIM与UDM中密钥K不一致 | 检查USIM Ki/OPc配置是否与UDM匹配 |
| Authentication Failure (Synch failure, #21) | SQN不同步 | 使用pySIM重置USIM的SQN |
| Security Mode Reject | 算法协商失败 | 检查UE和AMF支持的算法列表是否有交集 |
| Registration Reject (#3, Illegal UE) | 认证验证失败 | 检查AUSF日志中RES==XRES比较结果 |
| Registration Reject (#22, Congestion) | AMF过载 | 检查AMF负载和过载控制策略 |
| ## 11 5G-AKA安全增强总结 |
flowchart LR
subgraph 安全增强["5G-AKA vs 4G EPS-AKA 安全增强"]
A["SUPI隐私保护<br/>SUCI加密传输"]
B["密钥不外传<br/>CK/IK永不离ARPF"]
C["SN绑定增强<br/>SNN参与KDF"]
D["锚点分离<br/>SEAF+AUSF双锚"]
E["抗虚假基站<br/>XRES*扩展长度"]
F["UP完整性<br/>新增用户面完整性保护"]
end
A --> G["消除IMSI catcher攻击"]
B --> H["减少密钥暴露面"]
C --> I["防止跨SN密钥复用"]
D --> J["职责分离防权限集中"]
E --> K["抵抗虚假基站重放"]
F --> L["端到端数据完整性"]
Q1: 5G-AKA中CK/IK为什么不能离开ARPF?
A: 4G EPS-AKA中CK/IK从HSS发送给MME,服务网络可直接获取中间密钥。如果MME被攻破,攻击者可推演出整个密钥层级。5G规定CK/IK仅在ARPF和USIM内部使用,网络侧只能获得通过KDF推演的KAUSF/KSEAF,从根本上缩小了密钥暴露面。
Q2: XRES*与4G的XRES有什么本质区别?
A: 4G的XRES由f2(K,RAND)直接生成,长度固定(通常4-8字节)。5G的XRES通过KDF(CK||IK, "5G-AKA", RAND, XRES)生成,长度可变且显著更长。这一设计使得攻击者即使能截获RES,也无法通过暴力搜索匹配原始的短XRES,有效抵抗虚假基站攻击(False Base Station Attack)。
Q3: 为什么需要SEAF和AUSF两个锚点?
A: 职责分离原则。AUSF负责认证验证(比较RES=XRES)并持有KAUSF,SEAF负责密钥锚定(持有KSEAF并推演KAMF)。这样即使AMF/SEAF被攻破,攻击者也无法伪造认证结果(需要AUSF的KAUSF);反之亦然。4G中MME同时承担这两个角色,存在单点风险。
Q4: Null-Scheme(Protection Scheme ID=0)什么场景使用?
A: Null-Scheme不提供隐私保护(SUPI明文传输),仅在以下场景使用:(1) 紧急呼叫(UE无USIM或未配置HN公钥时);(2) 测试环境调试。3GPP强烈建议商用网络禁止使用Null-Scheme。
Q5: 5G-AKA与EAP-AKA'能否在同一个UE上同时使用?
A: 可以。一个UE可以同时在3GPP接入上使用5G-AKA、在Non-3GPP接入(如Wi-Fi)上使用EAP-AKA'。两种认证方法共享同一个UDM/ARPF(共享长期密钥K),但生成独立的密钥层级。TS 33.501 Section 6.1.2/6.1.3分别定义了两种方法,互不干扰。
本文由「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 等场景全覆盖。
