首页 › ims › VoNR IMS注册信令全链拆解

VoNR IMS注册信令全链拆解:从P-CSCF发现到IMS-AKA与IPSec SA的逐IE剖析

VoNR(Voice over NR)语音接续的起点并非SIP INVITE,而是发生在其之前的IMS注册(IMS Registration)。一通VoNR呼叫要建立专用承载、协商EVS编解码、触发MMTel补充业务,前提是用户已经在归属IMS域完成注册——即UE获得了一个有效的IMPI/IMPU绑定关系、S-CSCF已下载并激活了用户的初始过滤规则(iFC)、UE与P-CSCF之间建立了IPSec安全联盟(SA)。本文以3GPP TS 23.228 第5.3.2.2节定义的注册流程为主线,结合TS 33.203(IMS安全架构)、TS 29.229(Cx接口)、TS 23.501/23.502(5G下P-CSCF发现)和RFC 3310/RFC 3329,对注册全链信令逐消息、逐IE拆解,并给出抓包识别与排错要点。


一、为什么IMS注册是VoNR的"命门"

IMS注册要同时完成四件事,缺一不可:

  1. 用户身份认证:通过IMS-AKA完成UE(USIM/ISIM)与归属网络的双向认证,证明IMPI合法;
  2. 会话控制节点绑定:为用户选定并登记一个S-CSCF,后续所有主叫/被叫会话都锚定在此S-CSCF;
  3. 业务触发规则下发:S-CSCF从HSS下载用户档案(含iFC),决定哪些SIP请求要触发到哪个应用服务器(AS);
  4. 信令通道安全加固:UE与P-CSCF之间建立IPSec ESP隧道,对Gm接口的SIP信令做机密性与完整性保护。

与4G VoLTE相比,5G VoNR在注册前的P-CSCF发现路径发生变化(从PDN PCO变为PDU Session的SMF下发),但其后的SIP/IMS-AKA/IPSec机制基本沿用R8以来成熟的设计。下面按时间顺序逐层展开。


二、前置环节:5G下的P-CSCF发现机制

IMS注册必须先知道P-CSCF地址。在5G系统中(TS 23.501 / TS 23.502),P-CSCF发现与IMS PDU会话建立强绑定,典型路径如下:

sequenceDiagram
    participant UE
    participant SMF
    participant PCF
    participant UDR
    participant P-CSCF
    UE->>SMF: PDU Session Establishment Request (DNN=IMS, S-NSSAI=IMS切片)
    SMF->>PCF: Npcf_SMPolicyControl_Create (N7) 建立SM策略关联
    PCF->>UDR: 查询IMS签约/策略数据(含P-CSCF地址列表)
    UDR-->>PCF: 返回P-CSCF地址列表
    PCF-->>SMF: N7响应(携带P-CSCF地址列表)
    SMF-->>UE: PDU Session Establishment Accept (PCO/ePCO携带P-CSCF地址)
    Note over UE,P-CSCF: UE获得P-CSCF地址,后续SIP REGISTER发往该地址

关键设计点:

排错提示:若UE始终发不出REGISTER,第一件事不是看SIP层,而是查这条IMS DNN的PDU会话是否建立成功、PCO里有没有带回P-CSCF地址。SMF未配置IMS DNN、PCF无IMS策略、或N7关联失败,都会导致PCO空缺。


三、完整注册信令时序(TS 23.228 5.3.2.2)

整个注册流程在逻辑上分为三个阶段:未认证注册与S-CSCF选择 → IMS-AKA挑战与双向认证 → 服务器分配与用户档案下发。下图为完整时序(Gm: UE↔P-CSCF;Mw: CSCF之间;Cx: S-CSCF/I-CSCF↔HSS,Diameter)。

sequenceDiagram
    autonumber
    participant UE
    participant P as P-CSCF
    participant I as I-CSCF
    participant S as S-CSCF
    participant H as HSS
    rect rgb(245,245,245)
    Note over UE,H: 阶段一:未认证注册 + S-CSCF选择
    UE->>P: REGISTER (无Authorization,含Security-Client、Contact、Expires)
    P->>I: REGISTER (转发,记录UE的IP/端口)
    I->>H: Cx-UAR (User-Authorization-Request, IMPI, visited-network)
    H-->>I: Cx-UAA (返回S-CSCF能力集 或 已分配的S-CSCF name)
    I->>S: REGISTER (转发到选定的S-CSCF)
    end
    rect rgb(235,242,255)
    Note over UE,H: 阶段二:IMS-AKA挑战与认证
    S->>H: Cx-MAR (Multimedia-Auth-Request, 申请认证向量)
    H-->>S: Cx-MAA (RAND,AUTN,XRES,CK,IK)
    S-->>I: 401 Unauthorized (WWW-Authenticate: nonce,algorithm=AKAv2-MD5)
    I-->>P: 401 Unauthorized
    P-->>UE: 401 Unauthorized (含Security-Server)
    Note over UE,P: UE/P-CSCF据此建立IPSec ESP SA
    UE->>P: REGISTER (经SA保护,含Authorization response、Security-Verify)
    P->>I: REGISTER (转发,已保护)
    I->>S: REGISTER (转发,已保护)
    S->>S: 校验 response vs XRES
    end
    rect rgb(240,250,240)
    Note over UE,H: 阶段三:服务器分配 + iFC下载
    S->>H: Cx-SAR (Server-Assignment-Request, Server-Assignment-Type=注册)
    H-->>S: Cx-SAA (用户档案: iFC/IMPU集/计费信息, 记录S-CSCF name)
    S-->>I: 200 OK
    I-->>P: 200 OK
    P-->>UE: 200 OK (注册成功, Contact expires)
    end

3.1 关键消息逐IE解析

第①条 REGISTER(UE→P-CSCF,未认证、未保护):

IE 说明
Request-URI 注册域,如sip:ims.mnc<MNC>.mcc<MCC>.3gppnetwork.org
To / From 均为用户的公共用户身份IMPU(如sip:[email protected]...)
Authorization(首条无) 首次注册不带response,但可携带username=IMPI、realm、uri,提示挑战范围
Security-Client UE声明的安全机制与参数(详见第五节),如ipsec-3gpp;alg=hmac-sha-1-96;spi-c=...;port_c=...;port_us=...
Contact UE的注册联系地址,含+sip.instance(实例ID,对应GRUU)与expires
Require / Proxy-Require sec-agree,强制走RFC 3329安全协商
Via UE侧的分支,含rport(让P-CSCF学习UE的NAT地址/端口)

第③条 Cx-UAR / 第④条 Cx-UAA(Diameter,I-CSCF↔HSS):I-CSCF用User-Authorization-Request(Command Code 300)问HSS"该把这个人路由给哪个S-CSCF"。HSS在User-Authorization-Answer中回送Server-Name(已分配)或Server-Capability能力集(含Mandatory/Optional Capability整数位图),I-CSCF据此按能力匹配选一个S-CSCF。

第⑤条 Cx-MAR / 第⑥条 Cx-MAA(S-CSCF↔HSS):S-CSCF用Multimedia-Auth-Request(Command Code 303)向HSS申请认证向量AV。MAA回送一个或一组AV,每组含RAND(128bit随机挑战)、AUTN(128bit认证令牌,内含MAC、SQN、AMF)、XRES(期望响应)、CK(加密密钥)、IK(完整性密钥)。这正是IMS-AKA的"料"。

第⑦条 401 Unauthorized(S-CSCF→UE):核心是WWW-Authenticate头:

WWW-Authenticate: Digest realm="ims.mnc<MNC>.mcc<MCC>.3gppnetwork.org",
  nonce="<base64(RAND||AUTN||server-specific-data)>",
  algorithm=AKAv2-MD5,
  qop="auth-int",
  opaque="<...>"

第⑨条 REGISTER(UE→P-CSCF,已保护、含response):UE的ISIM校验AUTN通过后,用RES推算出Digest响应:

Authorization: Digest username="<IMPI>", realm="...",
  nonce="<同上>", uri="sip:ims...",
  response="<MD5(A1:nonce:nc:cnonce:qop:H(entity-body))>",
  algorithm=AKAv2-MD5, cnonce="<...>", nc=00000001,
  qop=auth-int

S-CSCF收到后用XRES重算并比对response,一致则认证通过。同时,因qop=auth-int,摘要覆盖了消息体(entity-body),可有效防止SDP被篡改。

3.2 服务器分配与iFC下发

认证通过后,S-CSCF发Cx-SAR(Command Code 301,Server-Assignment-Type=NAME_NOT_PROVISIONED表示首次注册),HSS在Cx-SAA中回送完整用户档案,并在数据库中把"S-CSCF name"绑定到该用户(供后续被叫寻址LIR/LIA用)。SAA中的核心是iFC——它是一组带优先级的触发规则,决定哪些SIP请求被转发到哪个AS(如MMTel AS、SMS-over-IP AS、彩铃AS)。


四、IMS-AKA认证深度解析(RFC 3310 + TS 33.102)

IMS-AKA的本质是:用3GPP AKA的强双向认证能力,套在HTTP Digest(RFC 2617)的语法外壳里,复用SIP已有的401/Authorization机制。

4.1 nonce的结构

P-CSCF/S-CSCF发出的nonce并非纯随机串,而是按RFC 3310定义的base64编码结构:

graph LR
    A["nonce (base64解码后)"] --> B["RAND<br/>16字节<br/>HSS生成的随机挑战"]
    A --> C["AUTN<br/>16字节<br/>含MAC⊕SQN⊕AMF"]
    A --> D["server-specific data<br/>可变<br/>可选时间戳/索引"]
    A --> E["可选MAC<br/>对前面字段的完整性保护"]
    style B fill:#fff3cd
    style C fill:#fff3cd
    style D fill:#d1ecf1
    style E fill:#d4edda

UE解码出RAND/AUTN后:①用共享密钥K验证AUTN中的MAC与SQN是否正确且新鲜(防重放);②用K和RAND算出RES、CK、IK;③把RES(或AKAv2下的RES‖IK‖CK)当作Digest的"口令"计算响应。这样,网络的挑战(RAND/AUTN)和UE的应答(RES)天然构成了双向认证:UE通过AUTN验网络、网络通过RES验UE。

4.2 response的计算

设口令P:AKAv1-MD5下 P=RES;AKAv2-MD5下 P=RES‖IK‖CK。则:

A1 = H( username ":" realm ":" P )
request-digest(qop=auth-int) = H( A1 ":" nonce ":" nc ":" cnonce ":" qop ":" H(entity-body) )

H()为MD5(algorithm字段后缀决定)。网络侧用XRES(与RES同值)以同样公式计算并比对response。

4.3 SQN失步与再同步

若USIM检测到SQN超出有效窗口(如HSS/UE计数器严重错位),UE会拒绝该AUTN,并在新REGISTER的Authorization里回送auts参数(携带UE侧SQN)。S-CSCF据此发起新一轮MAR携带AUTS,触发HSS再同步(re-synchronization)(TS 33.102),把SQN_MS回填,重新下发可用AV。这是抓包中"反复401"的常见根因。


五、IPSec SA建立机制(TS 33.203 §6 + RFC 3329)

Gm接口(UE↔P-CSCF)是接入网到IMS核心的信任边界。TS 33.203要求用IPSec ESP隧道模式保护这段信令,并通过RFC 3329的Security Mechanism Agreement完成机制协商。三个专用SIP头协同工作:

SIP头 方向 出现时机 作用
Security-Client UE→网络 首条未保护REGISTER 声明UE支持的安全机制、SPI、算法、端口
Security-Server 网络→UE 401响应 网络选定机制、下发SPI、算法、P-CSCF端口
Security-Verify UE→网络 后续已保护消息 回显Security-Server值,防降级攻击
graph TB
    subgraph UE侧["UE侧 (IPSec SA: client pair)"]
        U1["SPI_C_UE<br/>(出方向加密/完整性)"]
        U2["SPI_S_UE<br/>(入方向)"]
        U3["port_uc / port_us<br/>受保护端口"]
    end
    subgraph P侧["P-CSCF侧 (IPSec SA: server pair)"]
        P1["SPI_C_P<br/>(入方向, 与UE出方向配对)"]
        P2["SPI_S_P<br/>(出方向, 与UE入方向配对)"]
        P3["port_pc / port_ps<br/>受保护端口"]
    end
    U1 -.配对.- P1
    P2 -.配对.- U2
    style U3 fill:#d4edda
    style P3 fill:#d4edda

SA参数协商要点:

设计逻辑:为什么不用TLS而用IPSec?——因为Gm要保护的不止SIP,还包括UE与P-CSCF间所有IMS信令流的机密性与完整性,且需在注册阶段(尚无上层会话)就建立端到端(UE↔P-CSCF)保护,IPSec ESP能以端口粒度精准选流,且天然承载AKA派生的CK/IK。


六、关键IE参数说明表(注册流程)

消息/IE 含义 异常影响
Request-URI/To/From 注册域与IMPU IMPU拼写错误→403
Authorization.username IMPI(私有身份) 与USIM不匹配→认证失败
Expires 注册有效期(常3600s) 过小触发频繁刷新;为0表示注销
Contact;+sip.instance 设备实例ID,支撑GRUU 缺失影响后续被叫按设备寻址
WWW-Authenticate.nonce base64(RAND‖AUTN…) base64解码后不足32字节→格式错误
WWW-Authenticate.algorithm AKAv1-MD5 / AKAv2-MD5 UE与网络不一致→拒绝
WWW-Authenticate.qop auth-int(含体完整性) UE不支持→协商失败
Security-Server 选定机制/SPI/端口 SPI或端口与UE不匹配→SA建不起来
Security-Verify 回显防降级 与Security-Server不一致→丢包
Cx-SAR Server-Assignment-Type 注册/再注册/注销 取值错误→用户档案不下发

七、认证算法对比表

维度 MD5(共享密钥) AKAv1-MD5 AKAv2-MD5
口令来源 静态共享密钥 AKA的RES RES ‖ IK ‖ CK
密钥派生 无 仅RES进Digest CK/IK绑定进Digest
双向认证 弱(仅单向) 强(AUTN双向) 强(AUTN双向)
SA密钥绑定 无 CK/IK用于ESP,但与Digest弱关联 Digest与SA密钥强绑定
典型场景 早期/测试 Rel-7及以前主流 Rel-12+、NASS-IMS、新部署首选

AKAv2的演进动机:AKAv1虽然用上了AKA,但CK/IK只用于ESP、没进Digest,导致"Digest成功"与"SA密钥正确"之间缺少密码学绑定。AKAv2把RES‖IK‖CK一起作为Digest口令,使认证与密钥一致,并利于NASS-IMS等捆绑认证场景。


八、注册状态转换图(UE侧 + S-CSCF侧)

stateDiagram-v2
    [*] --> NOT_REGISTERED: 开机/未注册
    NOT_REGISTERED --> AUTH_PENDING: 发出首条REGISTER(含Security-Client)
    AUTH_PENDING --> SA_PROVISIONAL: 收到401, 协商Security-Server
    SA_PROVISIONAL --> PROTECTED_AUTH: IPSec SA建立, 发出受保护REGISTER
    PROTECTED_AUTH --> REGISTERED: 200 OK (S-CSCF完成SAR/SAA)
    REGISTERED --> REGISTERED: 周期性刷新REGISTER(Expires到期前)
    REGISTERED --> NOT_REGISTERED: 注册过期/网络注销(RTD)/异常
    AUTH_PENDING --> NOT_REGISTERED: 认证失败(403)/SQN再同步失败
    PROTECTED_AUTH --> NOT_REGISTERED: Security-Verify不匹配/SA失败

对应S-CSCF侧,用户注册态由Cx-SAR驱动:NAME_NOT_PROVISIONED→REGISTERED,网络侧注销走Cx-RTD(Registration-Termination,Command Code 304)。


九、抓包识别与排错

9.1 抓包识别要点

9.2 常见故障与排错

现象 典型根因 排查思路
反复401,永远注册不上 SQN失步/IMPI错误/USIM未开通IMS 查Authorization是否带auts;核对HSS签约
403 Forbidden 认证失败、IMPU不属于该IMPI、漫游受限 查HSS返回码、iFC/IMPU归属
首条REGISTER后无401 S-CSCF选择失败/I-CSCF↔HSS不通 查Cx-UAR/UAA是否成功、能力匹配
408 Request Timeout I-CSCF选不到S-CSCF或S-CSCF宕机 查S-CSCF能力集、节点健康
受保护REGISTER被丢 Security-Verify与Security-Server不符/SPI端口不匹配 比对两端SPI/port_uc/port_us
注册成功但无法被叫 iFC未下发/IMPU未关联/S-CSCF name未写HSS 查Cx-SAA是否含iFC、LIR能否返回S-CSCF
NAT下周期性掉线 rport学习失败/SA端口被改 查Via rport、NAT保活(SIP keepalive/NAT binding)
## 常见问题

Q1:IMS注册为什么要发两次REGISTER? A:第一次(未保护、无response)有两个目的:让P-CSCF学习UE地址(rport)、并在Security-Client声明能力;同时触发网络侧取AV并回401。UE据此建立IPSec SA并算出response,第二次REGISTER才在受保护通道内完成认证。即"一次试探+一次认证"。

Q2:AKAv1-MD5和AKAv2-MD5到底差在哪? A:核心在Digest"口令"的构成:AKAv1用RES;AKAv2用RES‖IK‖CK。后者把AKA派生的密钥也绑进Digest计算,使"认证成功"与"IPSec SA密钥正确"形成密码学关联,防篡改能力更强,是新部署与NASS-IMS捆绑认证的首选。

Q3:为什么被叫能找到用户的S-CSCF? A:注册成功时,Cx-SAR让HSS记录了"该用户当前由哪个S-CSCF服务"。被叫流程中,I-CSCF用Cx-LIR(Location-Info-Request,Command Code 302)向HSS查询,HSS回送S-CSCF name,I-CSCF据此把INVITE路由过去。这就是为什么"SAR没成功、S-CSCF name没写HSS"会导致注册看起来成功却收不到被叫。

Q4:注册成功了,为什么还要周期性刷新? A:IMS注册有有效期(Expires,常3600s)。UE须在到期前发刷新REGISTER维持状态,否则网络侧超时注销。刷新REGISTER通常无需再走完整AKA挑战(已有有效AV或SA),但某些场景会重新协商;刷新也是NAT保活与重新发布联系地址(如IP变化)的手段。

Q5:Security-Verify和Security-Server必须完全一致吗? A:是的。RFC 3329规定,UE在受保护消息里逐字回显网络在401中选定的Security-Server值作为Security-Verify。P-CSCF核对二者一致才接受该消息,这是抵御降级攻击(bidding-down)的关键——任何中间篡改都会导致不一致而被丢弃。


参考来源

  1. 3GPP TS 23.228 — IP Multimedia (IM) Subsystem — §5.3.2.2 用户注册流程、P-CSCF/S-CSCF/I-CSCF职责
  2. 3GPP TS 33.203 — 3G Security; Access security for IP-based services (IMS) — §6 IMS接入安全、IPSec SA与Gm保护
  3. 3GPP TS 29.229 — Cx/Dx interfaces based on the Diameter protocol — UAR/SAR/MAR/LIR命令码与AV定义
  4. RFC 3310 — HTTP Digest Authentication Using AKA (AKAv1/v2-MD5) — nonce结构、AKAv2口令派生
  5. ShareTechnote — IMS REGISTER with Authentication and IPSec — 注册鉴权与IPSec时序解读
  6. EventHelix — IMS Registration Sequence Diagram — 完整注册时序图与Cx消息解析

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