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

IMS初始注册信令全链拆解:从SIP REGISTER到IMS-AKA鉴权与IPsec安全联盟

本轮(第3轮)聚焦 ims 子域。前序已覆盖 VoNR 预条件机制,本文转向 IMS 最基础也最关键的入口机制——初始注册(Initial Registration)。注册是 VoNR/VoLTE 一切会话建立的前提:没有成功的 REGISTER,UE 既拿不到 Service-Route,也无法建立与 P-CSCF 的 IPsec 安全联盟,更无法被网络路由到(terminating)。本文基于 3GPP TS 23.228(IMS Stage 2)§5.3.2.2、TS 24.229(IMS CPlane SIP/SDP)§5.1.1.2、TS 29.228/29.229(Cx/Dx 接口信令流) 与 TS 33.203(IMS 安全架构),逐消息拆解这条贯穿 5 个网元的信令链。


一、为什么注册这么"重":设计意图

IMS 注册看似只是一条 SIP REGISTER,但标准却设计了 5 个网元(UE、P-CSCF、I-CSCF、S-CSCF、HSS)跨 Gm/Mw/Cx 三种接口的十余次交互,其设计意图可归结为四点:

  1. 身份与可达性的彻底解耦:IMPI(私有身份,鉴权用)与 IMPU(公共身份,路由用)分离,注册阶段把"我是谁"与"怎么找到我"分两次解决——前者靠 IMS-AKA,后者靠 Contact + Path。
  2. 服务节点动态分配:S-CSCF 不固定,由 I-CSCF 依据 HSS 下发的能力集(Server-Capabilities)实时选择,便于负载均衡与差异化服务承载。
  3. 鉴权与密钥合一:复用 USIM/ISIM 已有的 AKA 框架(TS 33.102),把 UMTS AKA 的 RAND/AUTN 塞进 SIP Digest 的 nonce 字段,一次挑战同时完成双向鉴权 + IPsec 密钥(IK/CK)分发,避免另起一套密钥协商。
  4. 隐式注册(Implicit Registration):一个 IMPI 注册即同时激活一组关联的 IMPU(如 tel: 与 sip: 别名),减少空口信令。

理解这四点,才能解释后面那些看似冗余的网元跳转。


二、完整信令时序图

下图严格对应 TS 23.228 §5.3.2.2 Figure 5.1(初始注册流程),并标注了每条消息携带的关键 IE:

sequenceDiagram
    autonumber
    participant UE
    participant PCSCF as P-CSCF
    participant ICSCF as I-CSCF
    participant SCSCF as S-CSCF
    participant HSS as HSS

    Note over UE,HSS: === 阶段一:选路到 S-CSCF ===
    UE->>PCSCF: REGISTER (IMPI/IMPU, Sec-Client, 无凭证)
    PCSCF->>ICSCF: REGISTER (+Path=P-CSCF地址)
    ICSCF->>HSS: Cx-UAR (User-Name=IMPI, Public-Id=IMPU, Visited-Network-Id)
    HSS-->>ICSCF: Cx-UAA (Server-Capabilities 能力集)
    ICSCF->>SCSCF: REGISTER (I-CSCF 按能力集选定 S-CSCF)

    Note over UE,HSS: === 阶段二:取鉴权向量并挑战 ===
    SCSCF->>HSS: Cx-MAR (Multimedia-Auth-Request, 取 AV)
    HSS-->>SCSCF: Cx-MAA (RAND‖AUTN, XRES, IK, CK, Digest-AKAv1-MD5)
    SCSCF-->>ICSCF: 401 Unauthorized (WWW-Authenticate: nonce=base64(RAND‖AUTN))
    ICSCF-->>PCSCF: 401 (P-CSCF 截留并存储 IK/CK)
    PCSCF-->>UE: 401 Unauthorized

    Note over UE: UE: ISIM 计算 RES/IK/CK,校验 AUTN 与 SQN 新鲜性
    Note over UE,HSS: === 阶段三:带凭证重发 + 下载用户档案 ===
    UE->>PCSCF: REGISTER (Authorization: response, Sec-Verify, 经 IPsec-SA)
    PCSCF->>ICSCF: REGISTER
    ICSCF->>HSS: Cx-UAR (再次确认/选路)
    HSS-->>ICSCF: Cx-UAA (S-CSCF 名称)
    ICSCF->>SCSCF: REGISTER
    SCSCF->>HSS: Cx-SAR (Server-Assignment-Type=REGISTRATION)
    HSS-->>SCSCF: Cx-SAA (User-Data: iFC/Service-Profile, HSS 标记 REGISTERED)
    SCSCF-->>ICSCF: 200 OK (P-Associated-URI, Service-Route, Security-Server)
    ICSCF-->>PCSCF: 200 OK
    PCSCF-->>UE: 200 OK (P-Associated-URI, Service-Route)

    Note over SCSCF,HSS: 阶段四:S-CSCF 依 iFC 发起 Third-Party REGISTER 到 AS

四个阶段清晰可分:选路 → 鉴权挑战 → 凭证校验与档案下载 → 第三方注册。其中第二次 REGISTER 经过 I-CSCF 时仍会触发 Cx-UAR/UAA;由于此时 Cx-SAR 尚未执行,HSS 通常仍返回能力集(或部分实现暂存的 S-CSCF 名),I-CSCF 据此再次选路到同一 S-CSCF——这正是不同厂商行为出现差异的节点之一(后文详述)。


三、关键消息的 IE 逐字段拆解

3.1 第一条 REGISTER(UE → P-CSCF)

SIP 头/IE 取值示例 作用
Request-URI sip:home.net 归属域 registrar 地址(非个人 URI)
From / To <sip:[email protected]>;tag=... IMPU(公共身份,两者一致)
Contact <sip:[::1]:5060>;+sip.instance="<urn:gsma:imei:...>";+g.3gpp.icsi-ref="urn:urn-7:3gpp-service.ims.icsi.mmtel" UE 联系地址 + 设备标识 + 支持的 ICSI
Authorization username="[email protected]", realm="home.net", uri="sip:home.net", nonce="", response="" IMPI + 空 nonce/response(声明待鉴权)
Security-Client ipsec-3gpp; alg=hmac-sha-1-96; ealg=...; spi-c=...; port-c=... UE 侧 IPsec SA 参数
Require / Proxy-Require sec-agree 强制启用安全协商

设计要点:第一条 REGISTER 故意不携带凭证(nonce 为空),目的是让网络先把"该用谁鉴权、用什么算法"这件事谈清楚。sec-agree 通过 Require 头强制 P-CSCF 必须先完成安全协商,否则 421/494 拒绝。

3.2 401 Unauthorized(S-CSCF → UE)

WWW-Authenticate: Digest realm="home.net",
                  nonce="N0RBTmhP...="(base64(RAND‖AUTN‖server-specific)),
                  algorithm=AKAv1-MD5,
                  qop="auth",
                  opaque="..."

最精妙之处在 nonce:它不是随机串,而是 base64(RAND ‖ AUTN ‖ server-specific-data)。把整个 AKA 挑战塞进 Digest 字段,使得现有 SIP Digest 框架无需改造即可承载 AKA(RFC 3310)。P-CSCF 在转发前会从该响应中截留 IK(完整性密钥)与 CK(加密密钥)——这是后续 IPsec SA 的密钥来源。

3.3 第二条 REGISTER(带凭证)

IE 说明
Authorization response MD5(HA1:nonce:nc:cnonce:qop:MD5(method:uri)),其中"密码"用 RES(ISIM 计算的鉴权响应)替代
Security-Verify 回显 P-CSCF 在 401 中下发的 Security-Server,确认 SA 参数被接受
经 IPsec ESP 承载 自此刻起,UE↔P-CSCF 间的 SIP 走受保护端口(protected_client_port / protected_server_port)

3.4 200 OK 的三个"命脉"头


四、Cx 接口 Diameter 命令与 AVP

Cx 接口基于 Diameter(TS 29.229),命令码集中在 300~305。下表是注册链用到的核心命令:

命令 缩写 码值 方向 注册中的用途
User-Authorization-Req/Ans UAR/UAA 300 I-CSCF↔HSS 判断是否允许注册、返回 S-CSCF 能力集或名称
Server-Assignment-Req/Ans SAR/SAA 301 S-CSCF↔HSS 通知 HSS 该 S-CSCF 服务此用户、下载用户档案(User-Data)
Multimedia-Auth-Req/Ans MAR/MAA 303 S-CSCF↔HSS 取鉴权向量 AV(RAND/AUTN/XRES/IK/CK)
Location-Info-Req/Ans LIR/LIA 302 I-CSCF↔HSS 会话发起/终止时定位已注册 S-CSCF
Registration-Termination-Req/Ans RTR/RTA 305 HSS→S-CSCF 网络侧发起去注册
Push-Profile-Req/Ans PPR/PPA 304 HSS→S-CSCF 用户档案变更时推送

Cx-MAA 返回的关键 AVP:SIP-Authentication-Scheme=Digest-AKAv1-MD5、SIP-Authenticate(RAND‖AUTN)、SIP-Authorization(XRES,网络侧校验用)、Confidentiality-Key(CK)、Integrity-Key(IK)。


五、IMS-AKA 鉴权向量与密钥推演

下图展示 AV(Authentication Vector)的内部结构与密钥如何在网元间流动:

flowchart TD
    subgraph HSS["HSS(持长期密钥 K)"]
        K["K (长期密钥, 128bit)"]
        AV["AV = (RAND, XRES, CK, IK, AUTN)<br/>由 K 与 RAND 经 AKA 算法簇推演"]
    end
    subgraph UE["UE / ISIM(持同一 K)"]
        ISIM["收到 RAND, AUTN<br/>校验 MAC 与 SQN<br/>推演出 RES, CK, IK"]
    end
    subgraph PCSCF["P-CSCF"]
        SA["存储 IK, CK<br/>建立 IPsec SA"]
    end
    AV -->|"Cx-MAA"| SCSCF["S-CSCF<br/>持 XRES/IK/CK"]
    SCSCF -->|"401 nonce=RAND‖AUTN"| UE
    ISIM -->|"ISIM 本地推演"| UE
    SCSCF -->|"把 IK/CK 传给 P-CSCF"| SA
    UE -.->|"RES 作为 Digest 密码"| SCSCF
    SCSCF -->|"比对 RES vs XRES"| OK{"匹配?"}
    OK -->|是| SUCC["鉴权成功"]
    OK -->|否| FAIL["403 Forbidden"]

为什么 IK/CK 要到 P-CSCF 而不是 S-CSCF 终止? 因为 IPsec 安全联盟的端点是 UE↔P-CSCF(接入侧第一个网元),S-CSCF 位于更深的归属网,NAT/拓扑都不适合做 IPsec 端点。S-CSCF 只负责校验 XRES,再把 IK/CK "交接"给 P-CSCF。

IMS-AKA 与原生 SIP Digest 的本质区别

维度 IMS-AKA(TS 33.203) 原生 SIP Digest(RFC 2617)
密钥来源 ISIM 内共享密钥 K + AKA 算法 用户名/口令
双向鉴权 ✅ UE 校验 AUTN→鉴权网络 ❌ 仅网络鉴权 UE
密钥派生 ✅ 派生 IK/CK 建立 IPsec ❌ 不派生流量密钥
抗重放 ✅ SQN 序列号机制 ⚠️ 仅靠 nonce/nc
nonce 语义 RAND‖AUTN(有结构) 随机串

六、IPsec 安全联盟建立状态机

UE 在注册过程中要完成 sec-agree 与 IPsec SA 协商。下图是 UE 侧的状态转换(TS 33.203 §6.2):

stateDiagram-v2
    [*] --> 未鉴权
    未鉴权 --> 待协商: 发送 REGISTER(含 Security-Client)
    待协商 --> SA参数就绪: 收到 401(含 Security-Server)
    SA参数就绪 --> SA建立中: ISIM 校验 AUTN 成功, 协商 SPI/端口/算法
    SA建立中 --> 已保护: 建立两对单向 ESP SA(4条)\n切换到 protected port
    已保护 --> 已注册: 发送第二条 REGISTER 并收到 200 OK
    已注册 --> 未鉴权: 注册超时/去注册(RTR)\nSA 拆除
    待协商 --> 失败: sec-agree 拒绝(421/494)
    SA建立中 --> 失败: AUTN 校验失败/MAC不符

注意建立的是两对单向 SA(共 4 条):一对承载 SIP 信令到 port_pcscf,另一对到 port_pcscf+1,以区分不同用途。算法由 Security-Client/Server 中的 alg(完整性,如 hmac-sha-1-96)与 ealg(加密,如 aes-cbc)协商。


七、抓包识别与实战排错

7.1 抓包识别(Wireshark 过滤式)

目的 过滤表达式
抓注册请求 sip.Method == "REGISTER"
定位挑战 sip.Status-Code == 401
查 nonce 算法 sip.www_authenticate.string contains "AKAv1-MD5"
Cx 全集 diameter.cmd.code >= 300 && diameter.cmd.code <= 305
IPsec 加密段 esp 配合 SPI 过滤

7.2 常见故障点

  1. 401 后跟随 403 Forbidden:99% 是 RES≠XRES。根因多为 ISIM/USIM 与 HSS 的密钥 K 不一致、制卡错配,或 AMF 字段配置不同。
  2. 卡在 I-CSCF 选不到 S-CSCF:HSS 未配能力集或 S-CSCF 节点未注册到 DNS/DRA;表现为 Cx-UAA 返回 Result-Code 非 2001。
  3. 拿到 401 却无后续 REGISTER:UE 侧 ISIM 校验 AUTN 失败(MAC 不符或 SQN 不同步,触发 Resync 重同步流程)。
  4. 200 OK 缺 Service-Route:UE 后续 INVITE 会因找不到 S-CSCF 而 403/超时;多为 S-CSCF 配置遗漏。
  5. sec-agree 421/494:P-CSCF 拒绝安全参数,常见于 SPI/算法不匹配或 IPsec 端口被防火墙拦截。
  6. 5G 场景拿不到 P-CSCF 地址:VoNR 下 P-CSCF 地址由 SMF/PCF 经 PDU 会话建立的 PCO/ePCO 下发(TS 23.501),若 DNN 非 IMS 专网或 PCF 策略缺失,UE 无法发起注册。

常见问题

Q1:IMPI 和 IMPU 到底有什么区别?为什么注册要分开? A:IMPI 是私有身份(如 [email protected] 或由 IMSI 派生 [email protected]),只用于鉴权,对其他用户不可见;IMPU 是公共身份(如 sip:[email protected]、tel:+86...),用于路由与被叫。分开是因为鉴权与服务可达性是两个正交问题:鉴权看"你是谁"(IMPI+K),可达性看"怎么找到你"(IMPU+Contact+Path)。

Q2:IMS-AKA 的 nonce 为什么要塞 RAND 和 AUTN? A:因为 SIP Digest 的 nonce 字段是标准里唯一允许自由携带挑战数据的载体。把 AKA 的 RAND(随机挑战)和 AUTN(含 MAC+SQN 的鉴权令牌)编码进 nonce,就能在不修改 SIP 消息结构的前提下复用整套 AKA 机制,实现双向鉴权并让 UE 本地推演出 IPsec 密钥——这是 RFC 3310 的核心巧思。

Q3:第二次 REGISTER 经过 I-CSCF 时,HSS 怎么知道选哪个 S-CSCF? A:严格按 TS 23.228,S-CSCF 名称是经 Cx-SAR 才"正式"写入 HSS 的。而第二次 REGISTER 发生在 SAR 之前,所以此时 I-CSCF 的 Cx-UAR 仍可能拿到能力集;实践中 I-CSCF 会结合本地缓存/亲和性再次选到同一 S-CSCF,待鉴权通过后 SAR 才把名称固化下来。这也是不同厂商时序略有差异的根因。

Q4:VoNR 下的 IMS 注册和 VoLTE 有本质区别吗? A:IMS 注册流程本身(Gm/Mw/Cx 上的 SIP 与 Diameter)几乎不变。差异在承载与 P-CSCF 发现:VoLTE 走 EPS bearer + DHCP/PCO 拿 P-CSCF;VoNR 走 5G PDU 会话(IMS 专用 DNN,5QI=5 信令 / 5QI=1 语音)+ PCF 经 ePCO 下发 P-CSCF。即"IP-CAN 换了,IMS 核心网注册机制照旧"。

Q5:如果 AUTN 中的 SQN 不同步会怎样? A:UE 校验 SQN 新鲜性失败时会进入重同步流程:在第二条 REGISTER 的 Authorization 中携带 auts 参数(带 UE 侧当前 SQN)回传给 HSS,HSS 据此调整计数器后重新下发 AV,UE 再完成注册。抓包上会看到一次带 auts 的 REGISTER 与紧接着的再次 401/200。


参考来源

  1. 3GPP TS 23.228 — IMS Stage 2(架构与流程,§5.3.2 注册流程) — 注册信令流程权威定义
  2. 3GPP TS 24.229 — IMS SIP/SDP 信令(§5.1.1.2 注册过程) — SIP 头与 IE 详细规范
  3. 3GPP TS 29.228 / TS 29.229 — Cx/Dx 接口信令流与 Diameter AVP — UAR/SAR/MAR 命令与 AVP 定义
  4. 3GPP TS 33.203 — IMS 安全架构(IMS-AKA、IPsec、sec-agree) — 鉴权向量、IK/CK 与安全联盟
  5. RFC 3310 — AKA as a Digest Authentication Mechanism — nonce 承载 RAND/AUTN 的设计原理

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