在5G核心网(5GC)完成主认证(5G AKA/EAP-AKA')并建立IMS PDN连接之后,VoNR终端仍不能直接拨打语音电话——它必须先在IMS域完成一次独立的、基于ISIM凭据的IMS-AKA双向认证,并在UE与P-CSCF之间协商出一对IPsec SA(Security Association)。本文聚焦TS 24.229 §5.1.1.2.1(初始注册)、§5.1.1.2A(鉴权处理)与TS 33.203 §6.2(IMS-AKA)所定义的这条"401挑战→密钥推演→IPsec SA建立"信令链,逐消息拆解关键IE,并给出抓包识别与排错实战。
很多工程师会困惑:UE在5GC已经做过一次5G AKA,为什么IMS还要再做一次?根本原因在于信任域隔离与凭据分离:
Kamf/Kgnb等接入层密钥,保护的是NAS信令和空口用户面。K/SUCI体系完全隔离。IMS信令需要自己的业务层密钥(CK、IK)来保护SIP over IPsec。这一设计源自TS 33.203的安全架构原则:IMS安全(接入安全+网络域安全)独立于底层IP-CAN的安全。下图给出IMS注册鉴权在VoNR整体流程中的位置。
flowchart TD
A[5GC主认证<br/>5G AKA] --> B[IMS PDU会话建立<br/>5QI=5 信令专用]
B --> C[P-CSCF发现<br/>PCF Rx/PCO]
C --> D[IMS初始注册<br/>SIP REGISTER]
D --> E{IMS-AKA<br/>401挑战}
E --> F[IPsec SA建立<br/>UE↔P-CSCF]
F --> G[200 OK<br/>注册成功]
G --> H[可发起VoNR呼叫<br/>SIP INVITE]
style E fill:#ffe4b5
style F fill:#b5e4ff
注意一个关键事实:IMS-AKA使用的认证算法本质上就是TS 33.102定义的UMTS AKA,复用了RAND/AUTN/XRES/CK/IK五元组。它和5G AKA共享同一套数学内核(MILENAGE/MAC函数),但密钥来源、向量生成节点、挑战下发通道完全不同——这正是后续对比表(第四节)的核心。
UE要发起REGISTER,必须先知道P-CSCF的地址。在5G架构下,TS 23.228 Annex E.1.1与TS 23.501定义了通过5GC下发P-CSCF地址的机制:
Protocol configuration options中携带P-CSCF IPv4/IPv6 Address Request,SMF在PDU session establishment accept的PCO中返回P-CSCF地址列表。该PDU会话必须是DNN=IMS、S-NSSAI对应IMS切片、5QI=5的信令专用会话。5G商用网络绝大多数采用方案A,因为P-CSCF地址由SMF从UDM订阅数据或本地配置获取后直接注入PCO,省去额外DHCP往返,时延更低。
下面是基于TS 23.228 §5.2.2.3(注册信息流)与TS 24.229 §5.1.1.2A(鉴权处理)绘制的完整时序图。图中的Cx接口(HSS↔S-CSCF)使用Diameter协议,承载Multimedia-Auth (MAR/MAA)和Server-Assignment (SAR/SAA)两个命令。
sequenceDiagram
autonumber
participant UE
participant PCSCF as P-CSCF
participant ICSCF as I-CSCF
participant SCSCF as S-CSCF
participant HSS
Note over UE: 携带ISIM:IMPI/IMPU/K
UE->>PCSCF: REGISTER(impi,impu,Security-Client,Require:sec-agree)
PCSCF->>ICSCF: 转发REGISTER(增加P-CSCF网络ID)
ICSCF->>HSS: Cx-Query/UAR(查询是否已注册+S-CSCF能力)
HSS-->>ICSCF: Cx-Query Resp/UAA(返回S-CSCF能力集)
ICSCF->>SCSCF: 转发REGISTER(选定S-CSCF)
Note over SCSCF: 判断:无此用户鉴权向量
SCSCF->>HSS: Cx-Put/Pull = MAR(请求认证向量)
HSS->>HSS: 生成AV(RAND,AUTN,XRES,CK,IK)
HSS-->>SCSCF: MAA(返回AV+鉴权信息)
Note over SCSCF: 构造401挑战
SCSCF-->>PCSCF: 401 Unauthorized<br/>(WWW-Authenticate:AKAv1-MD5,nonce,RAND/AUTN)<br/>Security-Server:IPsec参数
Note over PCSCF: 缓存CK/IK用于IPsec SA
PCSCF-->>UE: 401 Unauthorized(含Security-Server)
Note over UE: ISIM验证AUTN→计算RES→派生CK/IK
UE->>PCSCF: REGISTER(Authorization:response=H(RES),Security-Verify)
Note over UE,PCSCF: 双方激活IPsec SA
PCSCF->>SCSCF: 转发REGISTER(受SA保护)
SCSCF->>SCSCF: 校验response==H(XRES)
SCSCF->>HSS: SAR(注册用户,下载用户档案)
HSS-->>SCSCF: SAA(用户档案+IFC)
SCSCF-->>PCSCF: 200 OK(Service-Route)
PCSCF-->>UE: 200 OK(注册成功)
步骤1:初始REGISTER(未鉴权)
UE构造的REGISTER消息核心字段(TS 24.229 §5.1.1.2.1.1):
| IE/头域 | 取值示例 | 来源/作用 |
|---|---|---|
| Request-URI | sip:ims.mnc<mnc>.mcc<mcc>.3gppnetwork.org |
注册域,用于I-CSCF路由 |
| To | <sip:impu@ims...> |
与注册身份一致 |
| From | <sip:impu@ims...>;tag=... |
携带tag |
| Contact | <sip:impi@ue_ip:port>;+sip.instance="<urn:gsma:imei:...>" |
UE IP+Instance ID,用于GRUU |
| Authorization | Digest username="impi",realm="ims...",uri="sip:...",nonce="",response="" |
空nonce/response,表示初次注册 |
| Security-Client | ipsec-3gpp; alg=hmac-md5-96; spi-c=...; port-c=... |
UE声明的安全能力(RFC 3329) |
| Require | sec-agree |
强制要求安全协商 |
步骤6-7:MAR/MAA(Cx接口,Diameter)
S-CSCF判断本地无此用户的有效鉴权向量,向HSS发送Multimedia-Auth-Request。HSS基于用户长期密钥K,按TS 33.102 Annex的MILENAGE算法生成认证向量AV,通过Multimedia-Auth-Answer返回。一个MAA通常返回多组AV(如5组),S-CSCF按序使用,减少与HSS的交互次数。
步骤8-9:401挑战
S-CSCF返回401 Unauthorized,关键头域是WWW-Authenticate:
WWW-Authenticate: Digest realm="ims.mnc001.mcc460.3gppnetwork.org",
nonce="OTNhM2I0Y2Vj...YzQ=",
algorithm=AKAv1-MD5,
qop="auth-int",
opaque="...",
ck="a8e8e3d0...", ik="b3f3d7c2..."
algorithm=AKAv1-MD5:标识本次使用RFC 3310定义的AKA摘要。nonce:Base64编码的RAND ‖ AUTN ‖ 服务器特定数据 ‖ MAC(TS 33.203 §H.1格式)。解码后的前16字节即RAND,用于ISIM的AKA运算。ck/ik:在某些部署中P-CSCF无法从nonce内部解析密钥,故S-CSCF在MAA取回CK/IK后,将其随401一同下发给P-CSCF(注意:CK/IK不下发到UE,UE是自己在ISIM里算出来的)。同时401携带Security-Server头,由P-CSCF填充(来自其本地策略):
Security-Server: ipsec-3gpp; alg=hmac-md5-96; ealg=des-ede3-cbc;
spi-c=1947010302; spi-s=1947010303;
port-c=36500; port-s=36501
步骤11:受保护的重REGISTER
UE收到401后执行三件事:①ISIM用K和RAND执行AKA,验证AUTN(网络合法性),派生RES/CK/IK;②用RES按RFC 3310计算response;③按Security-Server参数安装IPsec SA。随后发送受保护的重REGISTER:
Authorization: Digest username="impu",realm="ims...",
nonce="OTNhM2I0...YzQ=",
uri="sip:ims...",response="6629fae49393a0539749336e...",
algorithm=AKAv1-MD5,qop=auth-int,nc=00000001,cnonce="..."
Security-Verify: ipsec-3gpp; mod=trans // UE回显P-CSCF选择的算法
Via: SIP/2.0/UDP <ue_ip>:36500;branch=... // 受保护端口
S-CSCF收到后用XRES(HSS返回的期望响应)作相同摘要运算,比对response,一致即认证通过。
| 维度 | 5G AKA(主认证) | IMS-AKA(业务认证) |
|---|---|---|
| 凭据载体 | USIM(5G应用) | ISIM(IMS应用) |
| 长期密钥 | K(与5GC共享) | K(独立,可不同) |
| 向量生成节点 | UDM/ARPF(5GC) | HSS(IMS) |
| 挑战下发通道 | NAS(Authentication Request) | SIP 401(WWW-Authenticate) |
| 期望响应比对 | SEAF/UDM侧 | S-CSCF侧 |
| 派生密钥 | Kamf→Kgnb→NR加密密钥 | CK/IK→IPsec SA密钥 |
| 保护对象 | NAS信令、空口UP | SIP信令(UE↔P-CSCF) |
| 规范依据 | TS 33.501 | TS 33.203 |
IMS-AKA派生的CK ‖ IK(共256bit)作为IPsec SA的主密钥,由P-CSCF和UE各自独立持有。SA参数通过三个头域完成协商(TS 33.203 §7.1 + RFC 3329):
flowchart TB
subgraph 协商三阶段
A[Security-Client<br/>UE→P-CSCF<br/>声明支持算法列表] --> B[Security-Server<br/>P-CSCF→UE<br/>选定算法+分配SPI/端口]
B --> C[Security-Verify<br/>UE→P-CSCF<br/>回显确认+激活SA]
end
subgraph SA参数
D1[spi-c/s: 入向SPI]
D2[port-c/s: 受保护UDP端口]
D3[alg: 完整性算法<br/>hmac-md5-96/sha-1-96]
D4[ealg: 加密算法<br/>des-ede3-cbc/aes-cbc]
D5[mod: 传输模式trans]
end
C --> D1 & D2 & D3 & D4 & D5
SA建立后,后续所有UE↔P-CSCF的SIP消息(REGISTER/INVITE/PRACK)必须通过ESP或AH隧道/传输模式封装,目标端口使用port-c/port-s(通常为高于49152的随机高端口),而非默认的5060。S-CSCF与I-CSCF之间的信令则不涉及IPsec,走运营商内网的NDS/IP(TS 33.210)。
stateDiagram-v2
[*] --> NotRegistered: IMS PDU已建立
NotRegistered --> PendingChallenge: 发送初始REGISTER(空nonce)
PendingChallenge --> ComputingRES: 收到401+WWW-Authenticate
ComputingRES --> SaEstablished: ISIM验证AUTN OK<br/>安装IPsec SA
SaEstablished --> Registered: 发送受保护REGISTER→收到200 OK
ComputingRES --> AuthFailed: AUTN校验失败(MAC错误)
AuthFailed --> [*]: 中止注册,上报IMS注册失败
PendingChallenge --> AuthFailed: 超时无401
Registered --> NotRegistered: 注册超时/网络去注册
在Wireshark中对IMS信令专用承载(5QI=5)的GTP隧道内层抓包,按以下特征识别该流程:
Authorization头中nonce为空、response为空,Require含sec-agree。WWW-Authenticate含algorithm=AKAv1-MD5和长nonce。response非空,Via端口变为受保护端口(非5060),且该包被ESP封装(在Wireshark中显示为独立的ESP帧)。Service-Route头(含S-CSCF路径信息),UE缓存供后续呼叫路由。| 故障现象 | 根因分析 | 排查方向 |
|---|---|---|
| UE循环发REGISTER,重复收401 | response计算错误(ISIM密钥K不匹配)或SA未真正激活导致P-CSCF拒绝受保护包 |
抓包确认重REGISTER是否被ESP封装;核对ISIM与HSS的K一致性 |
| 401后UE无重REGISTER,注册失败 | AUTN校验失败(MAC不匹配)或SQN失步 | 检查ISIM SQN与HSS的SQN是否严重失步(需resync),MAA可能返回同步失败 |
| 收到403 Forbidden | S-CSCF比对response≠H(XRES),或IMPI/IMPU不在签约 |
核对HSS用户档案、IMPU状态( barred?) |
| 注册成功但无法呼叫 | Service-Route未正确缓存或IPsec SA单向建立 |
检查SA方向参数、spi-c/s是否对齐 |
| 漫游时401丢失 | I-CSCF到S-CSCF路由错误,或P-CSCF网络ID校验失败 | 核查Cx-Query返回、I-CSCF的S-CSCF选择逻辑 |
SQN失步(最常见的"幽灵故障"):当UE与HSS的序列号SQN偏差超过阈值,ISIM的AUTN校验会返回"同步失败",UE在重REGISTER的Authorization头中携带AUTS参数(TS 33.102 §6.3.2)。HSS收到后执行重同步,重新对齐SQN并下发新向量。抓包中若发现重REGISTER的Authorization携带auts=字段,即可定位为此问题。
Q1: IMS-AKA和5G AKA用的是同一个密钥K吗? A: 不一定。ISIM和USIM是同一UICC上的两个独立应用,各自有独立的长期密钥K。运营商务实做法多为"K_ISIM = K_USIM"以简化制卡,但从协议角度两者是隔离的。这也是为何5GC主认证通过不代表IMS认证必然通过。
Q2: 为什么Authorization头里空nonce的REGISTER也能发出去? A: TS 24.229 §5.1.1.2.1允许初始REGISTER携带"占位"的Digest头(nonce/response为空),其唯一目的是触发S-CSCF发起挑战。S-CSCF识别到空响应即判定为初次注册,不下发200 OK而回401。这是一种"先试探后鉴权"的设计。
Q3: IPsec SA建立后,之前的REGISTER和401用的是什么保护?
A: 初始REGISTER和401是未受IPsec保护的明文SIP(仅依赖5GC的接入层安全)。这正是Require: sec-agree和Proxy-Require: sec-agree存在的意义——P-CSCF据此承诺"在SA建立前不处理后续业务请求,仅处理鉴权相关消息",避免明文窗口被利用。
Q4: nonce里的RAND和AUTN是明文吗?被窃听会怎样?
A: nonce中的RAND是明文随机数,AUTN包含MAC和SQN。攻击者窃听nonce也无法伪造合法response,因为响应计算依赖只有ISIM和HSS知道的密钥K。nonce外的服务器特定数据用K派生的密钥做了MAC保护(TS 33.203 §H.1),防止重放和篡改。
Q5: VoLTE和VoNR在IMS-AKA流程上有区别吗? A: IMS-AKA本身完全一致(同一套TS 33.203)。唯一差异在P-CSCF发现通道:VoLTE通过EPS的PDN建立+PCO下发,VoNR通过5GS的PDU会话建立+PCO下发;以及底层IP-CAN从4G LTE变为5G NR。IMS域以上的注册/鉴权/IPsec逻辑完全相同,这也是VoLTE/VoNR终端IMS栈可复用的基础。
本文由「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 等场景全覆盖。
