OmniAUSF 操作
OmniAUSF 实现了 5G 核心的认证服务器功能 (AUSF),在 AMF (N12) 和 UDM (N13) 之间执行 5G-AKA 主要认证。它从 UDM 请求认证向量,将 RAND/AUTN 挑战 (和 HXRES*) 中继到 AMF,验证 UE 的响应,推导锚定密钥 K_SEAF,并将认证结果报告回 UDM。
3GPP 角色和规范参考
| 规范 | 相关性 |
|---|---|
| TS 23.501 | 系统架构 - AUSF 在 5G 系统中的角色 |
| TS 33.501 | 安全架构 - 5G-AKA 认证 (6.1.3),K_AUSF/K_SEAF 密钥层次结构,HXRES*/HRES* (附录 A.5),K_SEAF 推导 (附录 A.6) |
| TS 29.509 | Nausf_UEAuthentication 服务 API (HTTP SBI) |
| TS 29.503 | Nudm_UEAuthentication 服务 API - 认证向量生成和认证结果报告 |
| TS 29.510 | Nnrf_NFManagement 和 Nnrf_NFDiscovery 服务 API - NF 注册/心跳和 UDM 发现 |
| TS 24.501 | NAS - 服务网络名称格式 (5G:mnc<MNC>.mcc<MCC>.3gppnetwork.org) |
接口
| 接口 | 对等方 | 方向 | 传输 | 目的 |
|---|---|---|---|---|
| N12 (Nausf_UEAuthentication) | AMF | 入站 | HTTP SBI | UE 认证初始化和 5G-AKA 确认 |
| N13 (Nudm_UEAuthentication) | UDM | 出站 | HTTP SBI | 认证向量生成和认证结果报告 |
| Nnrf | NRF | 出站 | HTTP SBI | NF 注册、心跳和对等 NF (UDM) 发现 (Nnrf_NFDiscovery, TS 29.510) |
SBI 端点
所有 SBI 端点都在基础 URL {sbi_scheme}://{sbi_addr}:{sbi_port} 下提供,并在请求中使用 Content-Type: application/json。成功的创建响应使用 application/3gppHal+json,符合 TS 29.509。
| 方法 | 路径 | 服务 | 描述 | 成功 |
|---|---|---|---|---|
| POST | /nausf-auth/v1/ue-authentications | Nausf_UEAuthentication | 初始化 UE 认证 (AMF → AUSF)。需要 supiOrSuci 和 servingNetworkName | 201 Created (application/3gppHal+json, Location 头) |
| PUT | /nausf-auth/v1/ue-authentications/{authCtxId}/5g-aka-confirmation | Nausf_UEAuthentication | 确认 5G-AKA - AMF 提交 resStar | 200 OK |
| DELETE | /nausf-auth/v1/ue-authentications/{authCtxId}/5g-aka-confirmation | Nausf_UEAuthentication | 删除 5G-AKA 认证结果/上下文 | 204 No Content |
| POST | /nausf-auth/v1/ue-authentications/deregister | Nausf_UEAuthentication | 删除给定 SUPI 的 UE 安全上下文 | 204 No Content |
请求/响应摘要
初始化 UE 认证 - 请求体携带 supiOrSuci (SUPI 或 SUCI;字段 suci 也被接受) 和 servingNetworkName;一个可选的 resynchronizationInfo 对象被传递给 UDM 进行 SQN 重新同步。AUSF 从 UDM 请求 5G-AKA 向量,然后返回 201 Created 和 UEAuthenticationCtx 体:
authType: "5G_AKA"5gAuthData:{ rand, autn, hxresStar }(十六进制字符串)_links.5g-aka.href: 此上下文的绝对确认 URLservingNetworkName
Location 头指向创建的上下文资源 (.../ue-authentications/{authCtxId})。
5G-AKA 确认 - 请求体携带 resStar (十六进制)。AUSF 将解码后的 resStar 与存储的 XRES* 进行比较 (TS 33.501 6.1.3.2;AMF 负责 HRES*/HXRES* 哈希检查)。它在 UDM 中记录结果 (auth-events),并始终返回 200 OK 和 ConfirmationDataResponse:
- 成功时:
{ authResult: "AUTHENTICATION_SUCCESS", supi, kseaf }(K_SEAF 作为十六进制字符串)。 - 失败时:
{ authResult: "AUTHENTICATION_FAILURE", supi }。请注意,认证失败在体中通过authResult信号,而不是通过 HTTP 错误状态。
认证上下文在确认后被删除,无论结果如何。
错误响应
错误作为 ProblemDetails 体返回。
| HTTP 状态 | 原因 | 条件 |
|---|---|---|
| 400 | MANDATORY_IE_MISSING | 缺少必需字段 (supiOrSuci/servingNetworkName 在初始化时;resStar 在确认时;supi 在注销时) |
| 404 | USER_NOT_FOUND | UDM 在生成向量时返回 404,表示找不到订阅者 |
| 404 | CONTEXT_NOT_FOUND | 确认请求中的 authCtxId 与任何活动上下文不匹配 |
| 500 | SYSTEM_FAILURE | UDM 无法访问,或 UDM 返回了格式错误的认证向量 |
关键程序
5G-AKA 认证 (TS 33.501 第 6.1.3 节)
初始化。 在 POST .../ue-authentications 时,AUSF 创建一个上下文,然后在 /nudm-ueau/v1/{supiOrSuci}/security-information/generate-auth-data 向 UDM 请求 5G-AKA 向量,包括 AUSF NF 实例 ID 和 AMF 提供的任何 resynchronizationInfo。UDM 返回一个认证向量 (rand, autn, xresStar, kausf) 和解析后的 supi (从 SUCI 中解密)。AUSF 从 RAND 和 XRES* 计算 HXRES*,从绑定到服务网络名称的 K_AUSF 中推导 K_SEAF,存储材料,并将挑战返回给 AMF。向量字段以十六进制解码,防止缺失或格式错误的向量导致崩溃,而是产生干净的 500 SYSTEM_FAILURE。
确认。 在 PUT .../{authCtxId}/5g-aka-confirmation 时,AUSF 查找上下文,解码 resStar,并直接与存储的 XRES* 进行比较。它通过 auth-events 向 UDM 报告结果 (尽力而为;失败的报告会被记录,但不会改变对 AMF 的响应) 并在体中返回结果。然后上下文被删除。未知的 authCtxId 返回 404 CONTEXT_NOT_FOUND。
服务网络名称。 根据 mcc/mnc 构建为 5G:mnc<MNC>.mcc<MCC>.3gppnetwork.org,符合 TS 24.501,两个数字的 MNC 补零到三位数。服务网络名称将 K_SEAF 绑定到服务网络,因此 AMF 和 AUSF 必须就 PLMN 身份达成一致。
SQN 重新同步。 当 AMF 在初始化请求中包含 resynchronizationInfo (UE 生成的 RAND 和 AUTS) 时,AUSF 检测到重新同步条件,验证 rand 和 auts 都是格式正确的十六进制,并将验证后的对发送到 UDM/ARPF 的 generate-auth-data 请求中,以便 UDM 可以重新推导序列号 (TS 33.501 6.1.3.3)。格式错误的重新同步输入会被丢弃,不会转发。AUSF 本身不计算序列号,但它并不是盲目的传递:它在转发之前检查和验证重新同步数据块。
密钥层次结构和推导分离 (TS 33.501 附录 A)
5G-AKA 密钥层次结构在 UDM 和 AUSF 之间分离。AUSF 从不看到长期密钥 (Ki) ��� CK/IK - 它接收 UDM 在认证向量中已经推导的 K_AUSF,并仅从中推导锚定密钥 K_SEAF。AMF (而不是 AUSF) 继续链条,直到 K_AMF 和接入层密钥。
| 密钥/值 | 来源 | 推导 | AUSF 中的目的 |
|---|---|---|---|
K_AUSF | UDM (ARPF) | KDF(CK‖IK, servingNetworkName, SQN⊕AK),FC 0x6A (A.2) | 在向量中接收;AUSF 锚定密钥,从中推导 K_SEAF。保存在上下文中,永不返回给 AMF |
K_SEAF | AUSF | KDF(K_AUSF, servingNetworkName),FC 0x6C (A.6) | 服务网络锚定密钥。仅在 AUTHENTICATION_SUCCESS 时返回给 AMF;AMF 从中推导 K_AMF |
HXRES* | AUSF | SHA-256(RAND ‖ XRES*) 的低 128 位 (A.5) | 在初始化时返回给 AMF,以便 AMF 可以在转发 RES* 之前匹配 UE 的 HRES* |
XRES* | UDM (ARPF) | KDF(CK‖IK, SNN, RAND, XRES),FC 0x6B (A.4) | 在向量中接收;AUSF 在确认时将 RES* 与之进行比较的预期响应 |
由于 K_SEAF 绑定到 servingNetworkName (而上游的 K_AUSF 绑定到相同的 SN 名称和 SQN⊕AK),AMF、AUSF 和 UDM 必须就 PLMN 身份达成一致,以便推导出的密钥与 UE 的匹配。服务网络名称不匹配在确认时表现为 AUTHENTICATION_FAILURE,而不是作为显式错误。
删除 5G-AKA 认证结果 (TS 29.509)
AMF 可以在没有确认交换的情况下显式删除认证结果/上下文。这映射到 TS 29.509 中的 Delete5gAkaAuthenticationResult。
AUSF 无条件删除上下文 (未知的 authCtxId 是无操作),并始终返回 204 No Content;不进行 UDM 调用。
注销 (TS 29.509)
删除 AUSF 为给定 SUPI 持有的任何 UE 安全上下文。
supi 是必需的 (缺失/空值返回 400 MANDATORY_IE_MISSING)。AUSF 遍历其内存中的上下文,删除任何存储的 supi 或 suci 等于请求的 SUPI 的上下文;该操作仅限于本地,不会调用 UDM。它始终返回 204 No Content,即使没有匹配的上下文存在。
UE 认证上下文
每次初始化都会创建一个内存中的 UE 认证上下文,以生成的 authCtxId (UUID) 为键。上下文保存完成交换所需的材料,是 OAM 会话端点 (GET /api/ausf_sessions, DELETE /api/ausf_sessions/{id}) 列出和清除的单位。
| 字段 | 设置于 | 含义 |
|---|---|---|
ctx_id | 初始化 | authCtxId UUID;出现在确认 URL 和 OAM 会话列表中 |
suci | 初始化 | AMF 最初呈现的 supiOrSuci (SUCI 或 SUPI) |
supi | 向量响应 | UDM 解析的纯 SUPI (解密) |
serving_network_name | 初始化 | 密钥绑定的 SN 名称 |
rand, xres_star, hxres_star, kausf, kseaf | 向量响应 | 在交换期间持有的向量和推导密钥 |
auth_type | 向量响应 | 5G_AKA |
auth_result | - | 为已解决的会话填充;仍在进行中的上下文没有结果,并在 GET /api/statistics 中计为 pending |
上下文通常仅在初始化和结算之间存在。它在确认时被删除 (成功 或 失败),在显式 DELETE .../5g-aka-confirmation 时,在其 SUPI 的 deregister 时,以及在进程重启时。此外,闲置或被遗弃的上下文由监督的定期清理程序进行垃圾收集:AMF 发起但从未确认的上下文在超过 context_ttl_seconds (默认 3600 秒) 后被清理,清理程序每 context_reap_interval_ms (默认 60000 毫秒) 扫描一次。这限制了被遗弃上下文的生命周期,而无需操作员干预。有关如何手动检查和清除上下文的信息,请参见 增长的活动上下文计数。
NRF 注册
在启动时,AUSF 注册一个 AUSF NF 配置文件到 NRF,广告 nausf-auth 服务 (v1, 1.0.0)、其 SBI 地址/端口/方案和配置的 PLMN。它每 heartbeat_interval 毫秒发送心跳。可以通过 POST /api/oam/nrf/reregister 在运行时强制重新注册。AUSF 还使用 NRF 发现 UDM:在每个 Nudm 调用之前,它查询 Nnrf_NFDiscovery (TS 29.510) 以获取 udm 实例并以发现的 UDM 为目标。只有在发现没有实例 (或 NRF 无法访问) 时,它才会回退到静态配置的 udm_uri,因此单 UDM 和静态部署仍然可以正常工作。