4、5G AKA认证与密钥协商:5G核心网架构中的安全功能

好,我们进入5G安全里最核心的一块——AKA认证与密钥协商。说实话,很多搞通信的朋友一听到AKA就头大,觉得流程太复杂。但你别怕,我带你一步步拆开看,其实逻辑很清晰。

4.1 5G核心网架构中的安全功能

先说说5G核心网里谁负责安全。跟4G不一样,5G把安全功能拆得更细了。

  • SEAF(安全锚点功能):在服务网络里,负责跟UE对接认证。我习惯把它看成“门卫”,先验明正身。
  • AUSF(认证服务器功能):在归属网络里,真正做认证决策的。它手里有根密钥。
  • UDM(统一数据管理):存着用户的长期密钥K,还有签约信息。说白了就是“数据库”。
  • ARPF(认证凭证存储和处理功能):通常跟UDM合设,负责生成认证向量。

嗯,这里要注意:5G里引入了SEAF和AUSF这两个新网元,目的就是把服务网络和归属网络的安全职责分清楚。我在项目里见过有人把SEAF和AUSF搞混,结果认证流程一直跑不通。

4.2 5G AKA流程详解

5G AKA流程,说白了就是UE和网络互相证明“我是我”的过程。我把它分成三步来讲。

4.2.1 第一步:认证发起

UE向gNB发起注册请求,gNB转发给AMF,AMF再找SEAF。SEAF一看,这用户我不认识啊,于是向AUSF发起认证请求。

这里有个细节:SEAF会带上serving network name,也就是服务网络标识。为什么要带这个?防止网络冒充。我曾经在测试环境里发现,如果这个参数传错了,AUSF会直接拒绝认证。

4.2.2 第二步:认证向量生成

AUSF收到请求后,找UDM/ARPF要认证向量。ARPF用用户的长期密钥K,生成一组东西:

  • RAND:随机数,每次都不一样
  • AUTN:认证令牌,UE用来验证网络是不是真的
  • XRES*:期望的响应值,UE算出来给网络验证
  • KAUSF:锚点密钥,后续派生用

ARPF把这四个东西打包成5G HE AV(归属环境认证向量),发给AUSF。AUSF收到后,会再派生一个KSEAF,然后生成5G SE AV发给SEAF。

关键点:5G里AUSF和SEAF各自持有不同的密钥,谁也不能拿到全部密钥材料。这就是“密钥分离”原则,防止一个网元被攻破后全线崩溃。

4.2.3 第三步:UE侧验证

SEAF把RAND和AUTN发给UE。UE用自己存的K和SQN算出AUTN,跟收到的对比。如果一致,说明网络是真的。

然后UE算出RES*,发回给SEAF。SEAF跟XRES*对比,一致就通过认证。

为什么会设计成双向认证?因为4G时代出现过假基站攻击,网络可以冒充。5G强制双向认证,你想想看,这能防住多少中间人攻击。

避坑指南:我曾经在调试时发现UE一直认证失败,查了半天,原来是UE里的SQN跟网络侧不同步了。5G里有个重同步机制,但触发条件比较苛刻。建议你在实现时,给SQN留个容差范围。

4.3 密钥派生体系(K, CK, IK, KAUSF等)

5G的密钥派生体系,像一棵树。根密钥是K,存在USIM卡和UDM里。然后一层层往下派生。

密钥名称 长度 存储位置 用途
K 128/256 bit USIM, UDM 根密钥,永不离开安全环境
CK, IK 128 bit each USIM, UDM 4G遗留,5G里用于派生KAUSF
KAUSF 256 bit UE, AUSF 锚点密钥,用于网络间安全
KSEAF 256 bit UE, SEAF 服务网络密钥,防止归属网络信息泄露
KAMF 256 bit UE, AMF 接入管理密钥,保护NAS信令
KgNB 256 bit UE, gNB 基站密钥,保护用户面数据

派生过程是这样的:

K → CK, IK (通过USIM里的算法)
CK || IK → Kausf (通过KDF函数)
Kausf → Kseaf (带上serving network name)
Kseaf → Kamf (带上ABBA参数)
Kamf → Kgnb (带上 uplink NAS count 等参数)

嗯,这里要注意:每个派生步骤都用了不同的输入参数,这叫“密钥分离”。就算某个密钥泄露了,也只能影响那一层,不会波及整棵树。

我个人习惯在实现KDF时,把输入参数按规范严格排序。3GPP TS 33.501里写得很清楚,参数顺序错了,算出来的密钥就不对。我曾经见过一个团队,把FCP0的顺序搞反了,结果所有密钥都算不对。

警告:K是根密钥,绝对不能明文传输或存储在非安全区域。USIM卡里的K,连手机操作系统都读不到。如果你在做产品开发,务必使用硬件安全模块(HSM)来保护K。

最后说一句,5G的密钥派生体系比4G强在哪?强在每一层都有独立的密钥,而且派生时绑定了网络标识、算法标识等上下文信息。这样就算某个基站被攻破,攻击者也拿不到核心网的密钥。

好了,这一章的内容就到这。下一章我们讲5G空口加密和完整性保护,到时候我会分享一个我在实际测试中遇到的加密算法协商失败的案例。