前两篇分别拆了注册流程的安全激活分界点和国密改造的完整链路,这篇补上中间最核心的一环:从根密钥 K 出发,各级密钥是怎么派生的,每一级 KDF 还喂了哪些”其它输入参数”,这些参数又是在哪个实体里参与运算的

1. 派生链路总览

  一句话概括:K 本身从不出卡,一切密钥都由它逐级推导而来,且每一级都混入不同的域分隔参数,上下级密钥之间无法互相倒推。整个链路里唯一的秘密就是上级密钥本身,其它输入要么公开可传,要么双侧协议保证同步。

  下图标出了每一级的输入参数与所在实体(依据 3GPP TS 33.501,括号内为国密版替换点):

从根密钥K出发的5G密钥派生链路框图(含输入参数与实体)每级派生标注KDF输入参数与所在网元实体:USIM、UE、AUSF、SEAF、AMF、gNB根密钥 K → 各级密钥派生链路(输入参数 · 所在实体)红色角标 = 国密替换点(该级 KDF 由 HMAC-SHA256 换为 SM3-HMAC / SM4)根密钥 K(256 bit)存储实体:USIM(UE 侧)· UDM/ARPF(网络侧)· 国密改造不变国密 AKA 主认证(f1~f5)→ CK / IK(各 128 bit)输入:K + RAND(f1/f5 另含 SQN、AMF 分离参数)实体:USIM 卡安全域(UE 侧)· UDM/ARPF 生成鉴权向量(网络侧)国密替换CK‖IK 拼接,作为下一级 KDF 的输入密钥输出规格与标准 AKA 一致 · 下游派生接口不变实体:CK/IK 不出卡,由 UE(ME)调用参与派生K_ausf输入:CK‖IK + SNN(服务网络名,防跨网重放)实体:UE 协议栈(ME)与 AUSF 各自独立派生并比对国密替换K_seaf输入:K_ausf + ABBA(防算法降级攻击参数)实体:AUSF 派生后交 SEAF(SEAF 不可见 K_ausf)国密替换K_amf输入:K_seaf + SUPI + 接入类型(3GPP / 非3GPP)实体:SEAF 派生后交 AMF(锚定 AMF 后不随切换更换)国密替换KNASenc / KNASint输入:K_amf + NAS 算法标识实体:AMF 与 UE 各自派生(ZUC)K_gNB输入:K_amf + 上行 NAS COUNT(新鲜性)实体:AMF 派生,经 N2 接口下发 gNB国密替换KRRCenc/int · KUPenc/int输入:K_gNB + RRC/UP 算法标识实体:gNB 与 UE 各自派生(ZUC NEA3/NIA3)说明:SUCI 加密(SM2)是身份保护支路,在 USIM 内独立完成,不在 K 派生链上;每级混入不同参数(SNN/ABBA/SUPI/COUNT 等),上下级密钥不可互相倒推,越往下可见能力越窄。

2. 各级派生的输入与所在实体

派生级 上级密钥 其它输入 所在实体
CK/IK K RAND(f1/f5 另含 SQN、AMF 分离参数) USIM 卡安全域 ↔ UDM/ARPF
K_ausf CK‖IK SNN(服务网络名) UE 协议栈(ME)与 AUSF 各自派生
K_seaf K_ausf ABBA(防降级参数) AUSF 派生后交 SEAF
K_amf K_seaf SUPI + 接入类型 SEAF 派生后交 AMF
KNASenc/int K_amf NAS 算法标识 AMF 与 UE 各自派生
K_gNB K_amf 上行 NAS COUNT AMF 派生,经 N2 下发 gNB
KRRCenc/int · KUPenc/int K_gNB RRC/UP 算法标识 gNB 与 UE 各自派生

  国密版只改”用什么算”:所有 KDF 从 HMAC-SHA256 换成 SM3-HMAC,f2/f3/f4 用 SM4 派生;输入参数的结构完全不变——这也是 CK/IK 保持 128 bit 后,下游派生接口无需改动的原因。

3. 这些”其它输入”从哪来?

  按获取机制可以归成四类:

  ① 网络生成、公开传输(挑战应答)RAND 由 UDM/ARPF 生成鉴权向量时产生,随 Authentication Request 经 AUSF→SEAF→基站明文下发。它本来就是要公开的——保密的不是挑战值,而是”只有持有 K 的卡才算得出正确应答 RES”。

  ② 双侧各自维护、天然同步的计数器SQN(序列号)在 USIM 与 UDM 各存一份,每次鉴权各加一,藏于 AUTN 内用 AK 遮蔽(SQN⊕AK)传输——AK 本身不在链路上传,由两端用 f5(K,RAND) 各自算出(构造见下一节)——UE 检查”是否比卡里新”以防重放;上行 NAS COUNT 由 UE 和 AMF 对每条 NAS 消息各自计数,每发一条加一,为 K_gNB 提供新鲜性——每次注册值都不同,派生出的 K_gNB 也不同。

  ③ 公开或双侧已知的身份/配置信息SNN 由 PLMN ID 按规范拼接(如 5G:mnc011.mcc460.3gppnetwork.org),UE 从广播的 SIB1 取 PLMN 拼出,网络侧由配置得知,让 K_ausf 只对当前网络有效;SUPI 存于 USIM,网络侧靠 SIDF 用 SM2 私钥解开 SUCI 得到;接入类型(3GPP/非3GPP)UE 自知,AMF 从注册信令得知;ABBA 现阶段为协议固定值 0x0000,保留给未来的降级防护扩展。

  ④ 安全模式命令协商:NAS 算法(NEA/NIA)由网络在 NAS SMC 提议、UE 确认;RRC/UP 算法在 AS SMC(即第一篇博文里那条消息)由 gNB 提议。协商完成后两侧各存一份,作为对应 KDF 的输入。

4. f1~f5:五个鉴权函数的构造

  五个函数共享同一对输入 K + RAND(f1/f5 额外吃进 SQN/AMF),靠不同的构造方式区分角色。标准版(MILENAGE)以 AES-128 为核心——先算 TEMP = AES(K, RAND⊕OPc)(OPc 为运营商变体参数),再用不同轮常量与旋转派生五个输出;国密版把 AES 换成 SM4、散列换成 SM3-HMAC,接口与输出长度保持一致:

函数 作用 标准实现(MILENAGE) 国密实现
f1 网络认证码 MAC-A AES 派生(输入含 SQN‖AMF),64 bit SM3-HMAC(K, RAND‖SQN‖AMF)
f2 应答 RES / 期望应答 XRES AES 派生,64 bit SM4 加密派生(ECB/CBC)
f3 加密密钥 CK(128 bit) AES 派生 SM4 加密派生
f4 完整性密钥 IK(128 bit) AES 派生 SM4 加密派生
f5 匿名密钥 AK(遮蔽 SQN) AES 派生 SM3-HMAC(K, RAND)

  五个函数的分工可以这么记:f1 管”网络自证”,f2 管”UE 自证”,f3/f4 管”产钥匙”,f5 管”隐身”。AUTN 的构造为 AUTN = (SQN⊕AK) ‖ AMF ‖ MAC-A,其中 MAC-A 由 f1 算出,UE 端重算比对即可确认”这个挑战确实来自持有 K 的归属网”。由于国密版 f3/f4 输出仍为 128 bit 的 CK/IK,下游派生链(K_ausf 往后)接口完全不变。

5. AUTN 与 RES 的传递路径

  AUTN 和 RES 不单独”传递”,它们作为认证消息的载荷,走归属网络 → 服务网络 → UE 的下行,再原路返回:

  • ① AMF(SEAF)→ AUSF:发起认证请求,带上 SUCI 与服务网络名 SNN;
  • ② AUSF → UDM/ARPF:取鉴权向量。UDM 生成 RAND,用 K 跑 f1~f5,产出 RAND、AUTN、XRES*,并由 CK/IK 算出 K_ausf;
  • ③ 归属网只交出”半套”:AUSF 把 XRES* 哈希为 HXRES,仅将 RAND + AUTN + HXRES 交给 SEAF——完整 XRES* 与 K_ausf 留在归属网,被访网络被攻破也拿不到可伪造验证的数据;
  • ④ SEAF → gNB → UE:RAND 与 AUTN 装入 NAS Authentication Request(N2 下发基站、RRC 转发),同时携带 ngKSI 与 ABBA;
  • ⑤ UE 卡内验算:f5 解出 SQN 验新鲜度、重算 MAC-A 比对,通过后由 f2 算出 RES*;
  • ⑥ 两段比对:RES* 经 Authentication Response 回传,SEAF 先与 HXRES* 比对(初验),AUSF 再与留存的 XRES* 比对(终验)。全部通过后鉴权成功,进入密钥派生链。

  注意这些认证消息都是明文传输的——此时安全尚未激活(NAS/AS 加密要等 SMC 之后)。这没有问题:AUTN 的关键段已被 AK 遮蔽、MAC-A 保证完整性,RES* 的安全性完全依赖”算得出它就等于持有 K”。挑战应答的精髓就是信道可以公开,秘密只在端点。(对比 4G:EPS 把含 XRES 的完整鉴权向量整体下发给被访网络,5G 拆成 HXRES*/XRES* 两段比对,就是把根密钥材料尽量留在归属网。)

6. 设计不变量

  每一级只把”下一级密钥”交给下游,上游密钥从不下发——拿到 K_gNB 的基站推不出 K_amf,拿到 K_seaf 的 AMF 也推不出 K_ausf,泄露面逐级收窄。配合每级不同的域分隔参数(SNN/ABBA/SUPI/COUNT),即使某一级密钥泄露,攻击者也无法向上倒推或跨网重放。

  另外注意:SUCI 加密(SM2)不在 K 派生链上——它是身份保护支路,用运营商公钥加密 MSIN,和密钥派生是两个独立机制,只是恰好都在卡内完成。