在4G时代,EPS-AKA承担着用户与网络的双向认证。但研究人员在长期分析中指出了EPS-AKA的几处结构性缺陷:第一,服务网络(MME)自行验证 RES,归属网络(HSS)生成的认证向量下发后,MME即可独立判定认证成败,这意味着一个伪造的基站/MME可以"假装认证通过",诱骗UE推演出密钥并建立空口安全上下文;第二,IMSI以明文在初始附着时发送,存在永久标识符被动窃听风险;第三,密钥派生对服务网络名称的绑定较弱,跨运营商漫游场景下密钥边界模糊。
3GPP在TS 33.501中提出的5G-AKA并非对EPS-AKA的推倒重来,而是在保留UMTS/LTE MILENAGE算法族(f1~f5*)和USIM卡兼容性的前提下,做了三处关键手术:
理解5G-AKA的核心,在于把握"谁在哪一层校验什么、密钥材料如何沿UDM→AUSF→SEAF/AMF→gNB逐级收缩与绑定"这条主线。本文将以TS 33.501 §6.1为主轴,配合TS 24.501(NAS层消息与IE)、TS 33.220(KDF)、TS 35.205~35.207(MILENAGE),把整条信令链和密钥推演拆到IE与字节级。
5G-AKA横跨四个逻辑实体,理解它们的职责边界是读懂信令的前提:
| 网络功能 | 物理位置 | 在5G-AKA中的职责 | 是否持有长期密钥K |
|---|---|---|---|
| UE (USIM + ME) | 终端侧 | 持有IMSI/SUPI与K,执行f1~f5运算,验证AUTN,计算RES | USIM持K |
| SEAF (Security Anchor Function) | 驻留于AMF | 触发认证、转发向量、本地校验HRES*、派生KAMF | 否 |
| AUSF | 归属网络(HPLMN) | 向UDM请求向量、最终校验RES==XRES、派生KAUSF→KSEAF | 否 |
| UDM / ARPF | 归属网络 | 持有K与SQN,生成认证向量(RAND,AUTN,XRES*,KAUSF) | 是(ARPF) |
注意:SEAF不是一个独立的网元,而是AMF内部的一个功能实体。ARPF(Authentication credential Repository and Processing Function)通常与UDM合设,持有用户的长期密钥K和序列号SQN。这种"存储与运算"分离的设计,使得K永不出ARPF,AUSF只拿到派生后的KAUSF。
graph TD
UE[UE<br/>USIM持K] -->|1 注册请求 SUCI| AMF[SEAF/AMF<br/>服务网络]
AMF -->|2 Nausf_Authenticate| AUSF[AUSF<br/>归属网络]
AUSF -->|3 Nudm_Auth_Get| UDM[UDM/ARPF<br/>持K与SQN]
UDM -.->|4 向量RAND/AUTN/XRES*/KAUSF| AUSF
AUSF -.->|5 RAND/AUTN/XRES*| AMF
AMF -.->|6 Authentication Request| UE
UE -.->|7 RES*| AMF
AMF -.->|8 RES*| AUSF
AUSF -.->|9 KSEAF + 成功| AMF
style UDM fill:#ffe6e6,stroke:#c00
style AUSF fill:#fff5e6,stroke:#e80
style AMF fill:#e6f2ff,stroke:#06c
设计意图在于最小化信任域:服务网络(VPLMN的AMF)永远拿不到长期密钥K,也拿不到完整的XRES(只拿到HRES的本地校验凭证),归属网络则保留了认证成败的最终裁决权。这正是5G相对4G安全模型最本质的演进。
在进入5G-AKA之前,必须先理解注册请求中那个被加密的标识符。5G之前,UE首次附着以明文IMSI上报,是被动身份抓取的温床。5G用SUCI替代:
SUCI的加密采用ECIES(椭圆曲线集成加密方案),TS 33.501 Annex C定义了保护方案:
| Scheme ID | 方案 | 椭圆曲线 | 用途 |
|---|---|---|---|
| 0 | Null-scheme | 无 | 仅限未认证紧急呼叫 |
| 1 | ECIES Profile A | Curve25519 | 默认商用方案 |
| 2 | ECIES Profile B | secp256r1 (NIST P-256) | 备选方案 |
SUCI的结构(TS 23.003、TS 24.501)可拆解为:
SUCI = <SUPI类型> || <归属网络标识 MCC+MNC> || <保护方案ID> || <归属网络公钥ID> || <方案输出(密文+MAC+临时公钥)>
其中归属网络标识(MCC/MNC)保持明文,以便AMF路由到正确的UDM/AUSF;只有SUPI的实际主体(如IMSI的MSIN部分)被加密。UE侧持有归属网络下发的公钥,UDM侧持有对应私钥,公钥通过USIM个人化阶段写入。这意味着SUCI只能在归属网络解密,服务网络全程看不到SUPI明文——除非用GUTI。
这条机制直接决定了5G-AKA的第一条信令:Registration Request中携带的是SUCI而非SUPI。
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: 用户开机/首次注册
UE->>SEAF: Registration Request<br/>(SUCI或5G-GUTI, ueSecurityCapability)
Note over SEAF: 无有效安全上下文→触发主认证
SEAF->>AUSF: Nausf_UEAuthentication_Authenticate<br/>(SUCI/SUPI, SN-name, serving network name)
AUSF->>UDM: Nudm_UEAuthentication_Get<br/>(SUCI/SUPI, SN-name)
Note over UDM: ARPF用K+SQN生成向量<br/>计算KAUSF=KDF(CK‖IK,SUPI,SN-name)
UDM-->>AUSF: AV=(RAND,AUTN,XRES*,KAUSF)<br/>+ HXRES*预计算材料
Note over AUSF: 保留XRES*,KAUSF<br/>计算HXRES*=SHA256(RAND‖XRES*)[128]
AUSF-->>SEAF: (RAND,AUTN,XRES*,HXRES*)
Note over SEAF: 保留XRES*? 否→只保留HXRES*<br/>SEAF自己也算可用
SEAF->>UE: Authentication Request<br/>(ngKSI, ABBA, RAND, AUTN)
Note over UE: USIM验证AUTN(MAC,SQN)<br/>计算RES*; 派生KAUSF
UE-->>SEAF: Authentication Response<br/>(RES*)
Note over SEAF: 计算HRES*=SHA256(RAND‖RES*)[128]<br/>本地校验HRES*==HXRES*
SEAF->>AUSF: Nausf_UEAuthentication_Authenticate<br/>(RES*)
Note over AUSF: 校验RES*==XRES*<br/>派生KSEAF=KDF(KAUSF,SN-name)
AUSF-->>SEAF: 认证成功 + KSEAF
Note over SEAF: 派生KAMF=KDF(KSEAF,SUPI,ABBA)<br/>触发Security Mode Command
消息①:Registration Request(TS 24.501 §8.2.6)
| IE | 含义 | 安全意义 |
|---|---|---|
| Extended protocol discriminator | 0x7E,标识5GS mobility management | NAS协议层标识 |
| 5GS registration type | 初始注册/移动性注册更新/周期性更新 | 决定是否需要主认证 |
| Mobile identity | SUCI(首次)或5G-GUTI(已有) | SUCI防IMSI明文嗅探 |
| UE security capability | UE支持的NAS/RRC加密与完整性算法列表 | 用于后续Security Mode算法协商 |
| 5GS DRX parameters | 寻呼周期 | 非安全IE |
关键点:当UE没有有效5G-GUTI或安全上下文时,Mobile identity填SUCI。这是触发后续UDM/AUSF介入的信号。
消息②③:Nausf_UEAuthentication_Authenticate / Nudm_UEAuthentication_Get
这是SBI(Service-Based Interface)的HTTP/2 JSON调用,AUSF作为SBI服务消费者,UDM作为提供者。核心参数是SN-name(serving network name),其格式为5G:mnc\<MNC>.mcc\<MCC>.3gppnetwork.org。SN-name会被绑入KAUSF和KSEAF的派生,是防漫游密钥重放的关键绑定因子。
消息④:认证向量 AV
UDM/ARPF返回的四元组,是整个机制的"心脏":
| 分量 | 长度 | 由谁产生 | 作用 |
|---|---|---|---|
| RAND | 128 bit | ARPF(随机数) | 挑战值,喂入f1~f5* |
| AUTN | 128 bit | ARPF(f1,f5*) | 网络向UE的认证令牌(含SQN、AMF、MAC) |
| XRES* | ≤256 bit | ARPF(f2扩展) | 期望响应,仅供AUSF比对 |
| KAUSF | 256 bit | ARPF(KDF) | AUSF密钥,向下派生整棵密钥树 |
消息⑤:Authentication Request(TS 24.501 §8.2.5)
| IE | 含义 |
|---|---|
| ngKSI(5G NAS key set identifier) | 取值0~6标识本套密钥;7表示无可用密钥。Security Mode成功后用此索引激活密钥 |
| ABBA | 网络支持的安全特性集合指示,默认0x0000;会被绑入KAMF派生 |
| RAND | 挑战值 |
| AUTN | 认证令牌 |
| EAP message(可选) | 仅EAP-AKA'模式出现 |
注意5G-AKA与EAP-AKA'的区别在Authentication Request里就显现:5G-AKA直接带RAND+AUTN,EAP-AKA'则封装为EAP-Request/AKA'-Challenge。
消息⑥:Authentication Response
UE返回RES(响应值,与XRES同构)。这是UE证明自己持K的唯一凭证。注意SEAF在收到RES*后会先做一次本地哈希校验,再转发AUSF做权威校验——这是5G的双层校验设计。
USIM卡内运行MILENAGE算法族(TS 35.205~35.207),以K和RAND为输入:
5G-AKA的关键约束:USIM卡本身可以与4G/3G共用,但AUTN中AMF域的"separation bit"(AMF的第0比特)置1,用以标识"此向量是5G-AKA向量",避免与EPS-AKA混用。
AUTN(128 bit)的内部布局继承自UMTS:
AUTN = (SQN ⊕ AK) ‖ AMF ‖ MAC-A
[48 bit] [16bit][64 bit]
UE收到AUTN后的校验逻辑(TS 33.501 §6.1.3 + C.3):
flowchart TD
A[USIM接收RAND,AUTN] --> B[用K,RAND算f1得XMAC]
B --> C{XMAC == MAC-A?}
C -->|否| D[认证失败<br/>5GMM cause #20 MAC failure]
C -->|是| E[f5*算AK,还原SQN]
E --> F{SQN在有效窗口内?}
F -->|否, SQN偏旧| G[认证失败<br/>5GMM cause #21 Synch failure<br/>附带AUTS触发resync]
F -->|是| H[网络认证通过<br/>计算RES*,CK,IK]
H --> I[派生KAUSF<br/>返回RES*给ME→NAS]
style D fill:#ffe6e6
style G fill:#fff5e6
style H fill:#e6ffe6
SQN同步(resync)机制:当UE判定网络下发的SQN超前/落后于本地预期范围(防重放窗口),UE不直接拒绝,而是返回AUTS(含MAC-S、UE期望的SQN),AMF透传给UDM,UDM据此调整其SQN并重发新向量。这是5G-AKA容错的核心——避免因卡换机、时钟漂移导致永久认证失败。
这是5G安全架构最精巧的部分。所有派生使用TS 33.220定义的通用KDF:
Key_derived = HMAC-SHA-256(Key_input, S)
其中 S = FC ‖ P0 ‖ L0 ‖ P1 ‖ L1 ‖ ... ‖ Pn ‖ Ln
FC = 1字节功能码,P=参数,L=2字节大端长度
graph TD
K[<b>K</b> 永久密钥<br/>仅UDM/ARPF与USIM持有] -->|MILENAGE f3/f4| CKIK[CK ‖ IK<br/>128+128 bit]
CKIK -->|KDF FC=0x6A<br/>P0=SN-name, P1=SUPI| KAUSF[<b>KAUSF</b><br/>ARPF→AUSF<br/>归属网络绑定]
KAUSF -->|KDF FC=0x6C<br/>P0=SN-name| KSEAF[<b>KSEAF</b><br/>AUSF→SEAF<br/>服务网络绑定]
KSEAF -->|KDF FC=0x6D<br/>P0=SUPI, P1=ABBA| KAMF[<b>KAMF</b><br/>SEAF/AMF<br/>注册绑定]
KAMF -->|FC=0x6F<br/>P0=access-type,P1=UL NAS COUNT| KgNB[<b>KgNB</b><br/>AMF→gNB<br/>空口根]
KAMF -->|FC=0x6B<br/>P0=sync counter| NH[NH next-hop<br/>前向安全]
KAMF -->|FC=0x69 alg-disting+alg-id| KNASenc[KNASenc NAS加密]
KAMF -->|FC=0x69| KNASint[KNASint NAS完整性]
KgNB -->|FC=0x69| KRRCenc[KRRCenc RRC加密]
KgNB -->|FC=0x69| KRRCint[KRRCint RRC完整性]
KgNB -->|FC=0x69| KUPenc[KUPenc 用户面加密]
KgNB -->|FC=0x69| KUPint[KUPint 用户面完整性]
style K fill:#ffcccc
style KAUSF fill:#ffe6cc
style KSEAF fill:#fff2cc
style KAMF fill:#d9ead3
style KgNB fill:#cfe2f3
| 派生密钥 | 输入密钥 | FC | 绑定参数 | 推导位置 | 作用域 |
|---|---|---|---|---|---|
| KAUSF | CK‖IK | 0x6A | P0=SN-name, P1=SUPI | ARPF(UDM) | 归属网络锚点 |
| KSEAF | KAUSF | 0x6C | P0=SN-name | AUSF | 跨AMF安全锚 |
| KAMF | KSEAF | 0x6D | P0=SUPI, P1=ABBA | SEAF/AMF | 单次注册 |
| KgNB | KAMF | 0x6F | P0=access-type, P1=UL NAS COUNT | AMF→gNB | 空口根密钥 |
| NH | KAMF | 0x6B | P0=sync counter | AMF/gNB | 切换前向安全 |
| KNASenc/int | KAMF | 0x69 | 算法类型区分符+算法ID | UE/AMF | NAS信令保护 |
| KRRCenc/int | KgNB | 0x69 | 算法类型区分符+算法ID | UE/gNB | RRC信令保护 |
| KUPenc/int | KgNB | 0x69 | 算法类型区分符+算法ID | UE/gNB | 用户面保护 |
每一步派生都把上下文绑进密钥材料,这是"密钥隔离"的精髓:
设计意图:让任何一个中间密钥的泄露不至于污染兄弟分支。例如KNASenc泄露不影响KRRCenc,KAUSF在AUSF侧泄露不影响USIM内的K——因为KDF是单向HMAC,不可逆推。
很多开发者困惑:UE和AMF如何保证派生出的KAMF一致?答案是输入参数必须在两侧严格一致:KSEAF(AUSF经Nausf接口下发)、SUPI(解SUCI后双方一致)、ABBA(网络在Authentication Request下发、UE原样回填用于派生)。任何一方参数错位,Security Mode Command会因完整性校验失败而失败——这是实战中最常见的"密钥不匹配"故障。
EPS-AKA中,MME自行用XRES校验RES。一个伪造的MME可以接受任意RES(甚至空值),诱骗UE推演KASME并进入"已认证"状态,UE此后用错误密钥加密的数据实际可被攻击者中继。这就是false base station(伪基站)攻击的根源。
5G-AKA的对策是双管齐下:
HXRES* = LSB128(SHA-256(RAND ‖ XRES*)),连同RAND/AUTN下发给SEAF(不下发XRES本身);
- UE算出RES返回SEAF,SEAF计算 HRES* = LSB128(SHA-256(RAND ‖ RES*)),本地比对HRES==HXRES;
- SEAF再把RES转发AUSF,AUSF用自己保留的XRES*做权威比对 RES==XRES。graph LR
subgraph 归属网络
UDM2[UDM/ARPF<br/>产XRES*] --> AUSF2[AUSF<br/>算HXRES*,留XRES*]
end
AUSF2 -->|RAND,AUTN,HXRES*| SEAF2[SEAF<br/>只留HXRES*]
SEAF2 -->|RAND,AUTN| UE2[UE]
UE2 -->|RES*| SEAF2
SEAF2 -->|本地比对<br/>HRES*=?HXRES*| Chk1{匹配?}
SEAF2 -.转发RES*.-> AUSF2
AUSF2 -->|权威比对<br/>RES*=?XRES*| Chk2{匹配?}
Chk2 -->|是| OK[派生KSEAF<br/>认证成功]
style OK fill:#d9ead3
伪基站没有K、拿不到正确的XRES,无法算出合法的HXRES,因此UE即便被诱骗响应,SEAF的HRES比对会先失败;即便SEAF被攻陷,AUSF的XRES比对是归属网络的"最后一道闸",UE只有在Security Mode Command用正确密钥加密成功后才会真正激活安全上下文。认证的成败裁决权被收回归属网络,这正是5G-AKA对EPS-AKA最根本的改进。
| 维度 | EPS-AKA (4G) | 5G-AKA (默认) | EAP-AKA' (5G备选) |
|---|---|---|---|
| 主认证协议 | UMTS AKA变体 | 基于EAP-AKA'改进的NAS流程 | 标准EAP框架承载 |
| RES校验位置 | MME(服务网络) | AUSF(归属网络) | AUSF |
| 永久标识保护 | IMSI明文 | SUCI(ECIES加密) | SUCI |
| SN-name绑定 | 弱(KASME部分绑定) | 强(进KAUSF/KSEAF) | 强 |
| 消息封装 | NAS直传 | NAS(5GMM)直接承载RAND/AUTN | 封装于EAP-Request/Response |
| 适用场景 | LTE | 3GPP接入默认主认证 | 非3GPP接入/可信WLAN/特定部署 |
| 抗伪基站 | 弱 | 强(归属裁决+HRES*) | 强 |
补充:EAP-AKA'的"撇号"区别于经典EAP-AKA之处,正是把MK派生改为绑定接入网络标识(类似SN-name),思路与5G-AKA一致。
在Wireshark/TShark中(需5G NAS、NGAP、HTTP2 SBI解析器),典型指纹:
mobile identity字段为SUCI(解析会显示"5G-GUTI不可用,使用SUCI");Downlink NAS Transport: Authentication Request(含ngKSI、ABBA、RAND、AUTN)→ Uplink NAS Transport: Authentication Response(含RES*)→ Security Mode Command;/nausf-auth/v1/ue-authentications/{...} 与 /nudm-ueau/v1/{supi}/security-information,返回JSON含rand、autn、hxresStar、seafData等字段。一个快速判定:若Authentication Request中同时存在RAND和AUTN且无EAP message,即为5G-AKA;若仅有EAP-Request/AKA'-Challenge,则为EAP-AKA'。
| 现象 | 可能根因 | 排查思路 |
|---|---|---|
| Authentication Failure #20 (MAC failure) | K不匹配、USIM与UDM开户数据不一致、向量损坏 | 核对USIM Ki/OPc与UDM侧;检查HSS/UDM个人化数据导入 |
| Authentication Failure #21 (Synch failure) | SQN漂移、卡换机后SQN窗口不符 | 抓AUTS触发resync,确认UDM是否正确更新SQN;检查SQN管理策略 |
| Security Mode Command失败/Reject | KAMF派生参数不一致(ABBA/SUPI)、算法协商失败 | 比对Authentication Request的ABBA与UE回填值;核对ueSecurityCapability与网络配置算法交集 |
| SUCI无法解密(AUSF报错) | 公钥ID过期、UE/USIM侧公钥与UDM私钥不配对、ECIES曲线配置不符 | 核对Home Network Public Key Provisioning;验证Profile A/B一致 |
| 注册反复重启、无法建立安全上下文 | ngKSI冲突、AMF侧旧上下文残留 | 检查AMF安全上下文清理逻辑;确认ngKSI递增无回卷 |
| ## 十、常见问题 |
Q1: 5G-AKA为什么还需要USIM卡?能不能用纯软件证书? A: 5G-AKA依赖USIM卡内硬件隔离的K与MILENAGE算法,目的是把长期密钥锁在不可读取的 Secure Element 中,防止被ME侧恶意软件窃取。5G在Release 16+虽引入了支持证书的备选认证(如EAP-TLS用于特定场景),但主认证仍以USIM+K为主流,安全与兼容性最优。
Q2: KAUSF为什么不直接由AMF计算,而要绕道ARPF→AUSF? A: 因为K只存在于归属网络的ARPF,服务网络的AMF(尤其漫游时属于VPLMN)不允许接触K。让AUSF作为归属网络代表,在归属域内完成"用K派生KAUSF",再只把KAUSF→KSEAF交给服务网络,是"密钥不出归属域"原则的体现。
Q3: RES*和RES到底什么关系?为什么5G要"加星号"? A: RES是USIM内f2的基本输出(64bit),""表示向256bit的扩展。5G扩展RES是为了提升抗暴力猜测强度,配合HRES/HXRES哈希绑定,使归属网络能在不暴露XRES给服务网络的前提下完成比对。星号本质是"扩展/增强版"。
Q4: SUCI的归属网络公钥怎么发给UE? A: 通过USIM个人化阶段写入USIM文件(含公钥与其ID)。若密钥轮换,USIM可通过OTA(Over-The-Air,基于短信的远程文件管理)更新公钥与ID。UDM/UDR侧保存对应私钥,按公钥ID索引。
Q5: 5G-AKA能抗量子计算吗? A: 当前5G-AKA的对称部分(KDF=HMAC-SHA256、MILENAGE基于AES)在量子计算下仍被认为安全(Grover算法仅平方级加速)。但SUCI的ECIES(Curve25519/secp256r1)属于椭圆曲线公钥体系,面临Shor算法威胁。3GPP在Release 18/19已开始研究后量子密码(PQC)用于SUPI保护与认证的演进,是6G安全的前沿课题。
本文由「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 等场景全覆盖。
