首页 › deep-tech › 5G安全认证:从密钥层级到双向鉴权

5G安全认证:从密钥层级到双向鉴权

引言:为什么移动通信需要安全机制?

想象你走进一家酒店。前台需要确认两件事:你是你声称的那个人(验证身份),同时这家前台确实属于这家酒店而不是假冒的(验证网络真实性)。确认之后,前台给你一张房卡(密钥),此后你用房卡进出房间。

移动通信网络面临完全相同的问题——只不过在无线信道上,任何人都可以"偷听"。你的手机信号通过电磁波在空气中传播,攻击者只需要一个软件定义无线电(SDR)就能截获信号。如果没有安全机制:

从2G到5G,每一代移动通信都在不断强化安全体系。本文将聚焦4G/5G的安全核心——认证流程与密钥层级体系,帮你从直觉层面理解"为什么这样设计"。


一、移动通信安全体系全景

1.1 安全的三大目标

移动通信安全围绕三个核心目标展开:

安全目标 含义 日常类比
机密性(Confidentiality) 数据只能被合法方读取 用密封信封寄信,只有收件人能拆开
完整性(Integrity) 数据在传输中未被篡改 快递包裹上有防拆封条
认证性(Authentication) 确认通信双方身份真实 银行开户时的身份证核验

1.2 5G安全架构的五层防护

5G的安全并不是一个单一的"加密"操作,而是在协议栈的多个层级上分层实施的:

graph TB
    subgraph "5G安全架构全景"
        A["🔴 第1层:用户身份保护<br/>SUPI → SUCI加密"]
        B["🟠 第2层:网络接入认证<br/>5G-AKA / EAP-AKA'"]
        C["🟡 第3层:NAS信令安全<br/>NAS加密 + 完整性保护"]
        D["🟢 第4层:AS接入安全<br/>RRC加密 + 完整性保护"]
        E["🔵 第5层:用户面安全<br/>UP加密 + 完整性保护"]
    end
    A --> B --> C --> D --> E
    style A fill:#ff6b6b,color:#fff
    style B fill:#ff9f43,color:#fff
    style C fill:#feca57,color:#333
    style D fill:#48dbfb,color:#333
    style E fill:#0abde3,color:#fff

为什么分层? 因为每一层保护的对象不同、威胁模型不同、实施位置也不同。比如NAS信令安全保护的是手机和核心网之间的控制消息,而AS接入安全保护的是手机和基站之间的无线链路。如果基站被攻破,NAS层的安全仍然有效——这就是纵深防御的思想。


二、用户身份保护:从IMSI明文到SUCI加密

2.1 4G的隐私漏洞:IMSI在空口裸奔

在4G(LTE)及之前,用户的永久标识IMSI在首次附着时以明文方式在空口传输。这导致了著名的IMSI Catcher攻击(也叫Stingray攻击):

攻击者架设一个伪基站,广播比真基站更强的信号。手机优先接入伪基站后,伪基站要求手机发送IMSI——手机就乖乖地以明文把自己的"身份证号"发过去了。

这就像有人在酒店大堂冒充前台,大喊"请出示身份证",你就把身份证递过去了——连对方是不是真前台都没确认。

2.2 5G的解决方案:SUCI加密

5G引入了SUPI(Subscription Permanent Identifier)取代IMSI,并规定:SUPI永远不在空口明文传输。取而代之的是,手机用运营商的公钥对SUPI进行加密,生成SUCI(Subscription Concealed Identifier)后发送。

SUCI的组成结构:
┌──────────┬──────────────┬──────────────┬────────────────┬──────────────┐
│ SUPI类型 │ 归属网络标识  │ 路由指示符    │ 保护方案标识    │ 加密输出     │
│ (1字节)  │ (MCC+MNC)   │ (Routing)    │ (Scheme ID)    │ (ECIES密文)  │
└──────────┴──────────────┴──────────────┴────────────────┴──────────────┘

加密方案采用ECIES(椭圆曲线集成加密方案),其核心流程:

$$\text{SUCI} = \text{Enc}{PK, r \cdot G)$$}}(\text{SUPI

其中 $PK_{HN}$ 是归属网络的公钥,$r$ 是每次生成的随机临时私钥,$G$ 是椭圆曲线基点。由于每次都使用不同的 $r$,同一个SUPI加密后产生的SUCI每次都不同——这就是不可链接性(Unlinkability),攻击者无法通过比较两次SUCI来判断是否来自同一用户。

对比维度 4G(IMSI) 5G(SUCI)
空口传输 明文 公钥加密
伪基站防护 无效 有效(无法解密)
不可链接性 无 有(每次加密结果不同)
计算开销 无 ECIES一次(<50ms)

2.3 解密方:SIDF

网络侧由SIDF(Subscription Identifier De-concealing Function)负责将SUCI解密为SUPI。SIDF位于UDM中,持有运营商的私钥,是全网唯一能执行解密操作的网元。

sequenceDiagram
    participant UE as 手机(UE)
    participant RAN as 基站(gNB)
    participant AMF as AMF/SEAF
    participant SIDF as SIDF/UDM

    UE->>UE: 生成临时密钥对(r, r·G)<br/>用运营商公钥加密SUPI
    UE->>RAN: 发送SUCI(加密后的SUPI)
    RAN->>AMF: 转发SUCI
    AMF->>SIDF: 转发SUCI
    SIDF->>SIDF: 用私钥解密SUCI<br/>恢复出SUPI
    SIDF-->>AMF: 返回SUPI
    Note over UE,SIDF: 空口上只出现SUCI<br/>SUPI永远不会暴露

三、5G-AKA认证流程:双向验证的握手

3.1 为什么需要双向认证?

在4G中,只做了网络验证用户(你是合法用户吗?),但用户无法验证网络(这是合法基站吗?)。这就给了伪基站可乘之机。

5G引入了双向认证:不仅网络要验证用户的身份,用户也要验证网络的身份。

类比:你去银行取钱,柜员要查你的身份证(网络验用户),但你也应该确认这个窗口确实是银行的而不是骗子搭的(用户验网络)——5G补上了4G缺失的这半边。

3.2 参与认证的核心网元

网元 角色 类比
UE(手机+USIM) 持有根密钥K的客户端 你本人 + 你的身份证
SEAF(安全锚点,位于AMF) 服务网络的认证代理 酒店前台
AUSF(认证服务器) 归属网络的认证中心 酒店总部
UDM/ARPF 存储根密钥K的数据库 酒店总部的客户数据库

3.3 完整的5G-AKA流程

sequenceDiagram
    participant UE as UE/USIM
    participant SEAF as SEAF(AMF)
    participant AUSF as AUSF
    participant UDM as UDM/ARPF

    UE->>SEAF: ① Registration Request<br/>(携带SUCI)
    SEAF->>AUSF: ② Nausf_UEAuthentication Authenticate<br/>(SUCI + SN-name)
    AUSF->>UDM: ③ Nudm_UEAuthentication Get<br/>(SUCI + SN-name)

    Note over UDM: ④ 生成认证向量AV<br/>RAND, AUTN, XRES*, K_AUSF<br/>基于根密钥K计算

    UDM-->>AUSF: ⑤ 返回AV<br/>(RAND, AUTN, XRES*, K_AUSF)
    AUSF->>AUSF: ⑥ 计算HXRES* = SHA-256(XRES*)
    AUSF-->>SEAF: ⑦ 返回(RAND, AUTN, HXRES*)

    SEAF-->>UE: ⑧ Authentication Request<br/>(RAND, AUTN)

    Note over UE: ⑨ USIM验证AUTN<br/>检查MAC和序列号SQN<br/>计算RES*和K_SEAF

    UE-->>SEAF: ⑩ Authentication Response<br/>(RES*)

    SEAF->>SEAF: ⑪ 计算HRES* = SHA-256(RES*)<br/>与HXRES*比对

    alt HRES* == HXRES*
        SEAF->>AUSF: ⑫ Nausf_UEAuthentication Confirm<br/>(RES*)
        AUSF->>AUSF: ⑬ 比对RES*与XRES*
        alt RES* == XRES*
            AUSF-->>SEAF: ⑭ 认证成功 + K_SEAF
            SEAF->>SEAF: ⑮ 从K_SEAF派生K_AMF
        else
            AUSF-->>SEAF: 认证失败
        end
    else
        Note over SEAF: 本地验证失败
    end

逐步解读这个流程:

步骤①-③:手机向网络发起注册,AMF收到后向AUSF请求认证,AUSF再向UDM请求认证向量。注意SEAF发送了SN-name(服务网络名称,如"5G:mnc070.mcc460.3gppnetwork.org"),这是5G新增的——归属网络可以据此判断请求来自哪个服务网络。

步骤④-⑤:UDM使用根密钥K生成认证向量(Authentication Vector)。这是整个认证的"题目": - RAND:一个128位随机数,作为"挑战"发给手机 - AUTN:认证令牌,包含序列号SQN和消息认证码MAC - XRES*:期望的响应值(手机应该算出来的"答案") - K_AUSF:给AUSF用的中间密钥

步骤⑥-⑦:AUSF对XRES*做哈希得到HXRES*,只把HXRES*(而非原始XRES*)发给SEAF。这样即使SEAF被攻破,攻击者也无法获得完整的XRES*。这是5G引入的安全锚点隔离机制。

步骤⑧-⑩:手机收到RAND和AUTN后,USIM用自己存的根密钥K进行计算: - 先验证AUTN中的MAC——确认这确实来自持有K的合法网络(用户验证网络) - 再检查SQN序列号是否在合理范围内——防止重放攻击 - 验证通过后,计算出RES*(自己的"答案")返回给网络

步骤⑪-⑭:两级验证——SEAF先本地快速比对哈希值,通过后再转发给AUSF做完整比对。这样设计的目的是减少不必要的信令交互。

步骤⑮:认证成功后,从K_AUSF开始逐级派生后续所有密钥。

3.4 一个关键的安全增强:归属网络验证

在4G中,服务网络(拜访地)的MME自己就可以决定认证是否通过,归属网络(HSS)只提供认证向量但不验证结果。这意味着一个被攻破的拜访地网络可以绕过认证。

5G改变了这一设计:AUSF必须将认证结果确认回UDM,归属网络全程参与认证决策。这就是所谓的归属网络控制(Home Control)。


四、密钥层级体系:一棵单向派生的密钥树

4.1 设计原则

5G的密钥体系遵循三个核心原则:

  1. 单向派生:由上层密钥可以算出下层密钥,但由下层密钥无法反推上层密钥。使用KDF(Key Derivation Function)基于HMAC-SHA-256实现。
  2. 前向安全:即使当前密钥泄露,也无法推算出之前使用过的密钥。切换时通过NH(Next Hop)链实现。
  3. 密钥隔离:不同用途使用不同的密钥。NAS加密、NAS完整性、RRC加密、RRC完整性、用户面加密各有独立密钥,互不影响。

$$K_{child} = \text{KDF}(K_{parent}, \text{FC} || P_0 || L_0 || P_1 || L_1 || ...)$$

其中FC是功能码(标识派生目的),$P_i$是参数,$L_i$是参数长度。KDF的本质是"加盐哈希"——不同的FC和参数确保不同用途的密钥互不相同。

4.2 完整的5G密钥层级

graph TD
    K["🔑 K<br/>根密钥<br/>(USIM ↔ UDM)<br/>128/256 bit"]
    K -->|"AKA计算"| CK["CK (Cipher Key)"]
    K -->|"AKA计算"| IK["IK (Integrity Key)"]
    CK --> KDF1["KDF"]
    IK --> KDF1
    KDF1 --> KAUSF["K_AUSF<br/>AUSF密钥"]

    KAUSF -->|"KDF + SN-name"| KSEAF["K_SEAF<br/>安全锚点密钥"]
    KSEAF -->|"KDF + SUPI"| KAMF["K_AMF<br/>AMF主密钥"]

    KAMF -->|"KDF"| KNASenc["K_NASenc<br/>NAS加密密钥"]
    KAMF -->|"KDF"| KNASint["K_NASint<br/>NAS完整性密钥"]
    KAMF -->|"KDF"| KgNB["K_gNB<br/>基站密钥"]

    KgNB -->|"KDF"| KRRCenc["K_RRCenc<br/>RRC加密密钥"]
    KgNB -->|"KDF"| KRRCint["K_RRCint<br/>RRC完整性密钥"]
    KgNB -->|"KDF"| KUPenc["K_UPenc<br/>用户面加密密钥"]
    KgNB -->|"KDF"| KUPint["K_UPint<br/>用户面完整性密钥"]

    style K fill:#e74c3c,color:#fff
    style KAUSF fill:#e67e22,color:#fff
    style KSEAF fill:#f39c12,color:#fff
    style KAMF fill:#27ae60,color:#fff
    style KgNB fill:#3498db,color:#fff
    style KNASenc fill:#9b59b6,color:#fff
    style KNASint fill:#9b59b6,color:#fff
    style KRRCenc fill:#1abc9c,color:#fff
    style KRRCint fill:#1abc9c,color:#fff
    style KUPenc fill:#34495e,color:#fff
    style KUPint fill:#34495e,color:#fff

4.3 4G vs 5G密钥层级对比

对比项 4G (LTE) 5G (NR)
根密钥 K(128 bit) K(128/256 bit)
认证后首层密钥 CK, IK → K_ASME CK, IK → K_AUSF
安全锚点 K_ASME(在MME) K_SEAF(在SEAF/AMF)
核心网主密钥 K_ASME直接使用 K_AMF(从K_SEAF派生)
用户面完整性保护 可选(多数未启用) 强制启用
密钥层数 4层 5层(更细粒度隔离)
最大算法密钥长度 128 bit 256 bit(Rel-16+)

5G为什么多了一层? 因为5G引入了SEAF作为安全锚点。SEAF位于服务网络(拜访地),AUSF位于归属网络。多一层K_SEAF意味着:即使服务网络的AMF被攻破,攻击者拿到的只是K_AMF及以下的密钥,无法推算出K_AUSF和K_SEAF,归属网络侧的安全不受影响。

4.4 各密钥的"管辖范围"

密钥 持有者 保护对象 在哪一层生效
K USIM + UDM 无直接使用,仅用于AKA计算 USIM内部
K_AUSF AUSF + UDM 用于派生K_SEAF 核心网
K_SEAF SEAF + AUSF 用于派生K_AMF 核心网
K_AMF AMF + UE 派生所有NAS和AS密钥 NAS层
K_NASenc/int AMF + UE NAS信令(注册、会话管理等) NAS层
K_gNB gNB + UE 派生所有空口密钥 RRC/PDCP层
K_RRCenc/int gNB + UE RRC信令(切换、测量报告等) PDCP层
K_UPenc/int gNB + UE 用户面数据(上网、通话等) PDCP层

五、安全算法协商:Security Mode Command

5.1 算法列表

认证通过后,网络和手机需要协商使用什么加密和完整性保护算法:

算法ID 加密算法(NEA) 完整性算法(NIA) 基础密码技术
0 NEA0(空加密) NIA0(空完整性) 无保护
1 NEA1(128- SNOW 3G) NIA1(128- SNOW 3G) 流密码
2 NEA2(128- AES) NIA2(128- AES-CMAC) 分组密码
3 NEA3(128- ZUC) NIA3(128- ZUC) 国密流密码

选算法的原则:网络侧有一张"优先级列表",按从高到低的顺序尝试,选择第一个双方都支持的算法。实际网络中绝大多数使用NEA2/NIA2(AES)。

5.2 Security Mode的两阶段握手

安全模式协商分为NAS层和AS层两个阶段:

NAS Security Mode Command(AMF → UE): - AMF告知UE选用的NAS加密和完整性算法 - 同时携带UE的安全能力列表(防止"降级攻击"——攻击者伪造UE只支持弱算法) - UE验证后,此后的所有NAS信令都经过加密和完整性保护

AS Security Mode Command(gNB → UE): - gNB告知UE选用的RRC和用户面算法 - 此后RRC信令和用户面数据都受到保护

实战连接:在5G核心网调试中,如果手机注册失败且日志显示"Security Mode Reject",首先检查AMF和UE的算法列表是否有交集。常见的问题是测试USIM只支持部分算法,而AMF配置了强制使用特定算法——两边对不上就会握手失败。


六、用户面完整性保护:5G最重要的安全增强

6.1 为什么4G没有强制用户面完整性?

在4G中,用户面数据的完整性保护是可选的,绝大多数运营商在实际部署中没有启用。原因很简单——完整性保护需要在每个数据包上附加一个MAC-I标签(通常4-8字节),这对高速数据传输有一定开销。

但这留下了一个安全漏洞:攻击者虽然无法解密数据(加密仍然生效),但可以篡改数据包的内容——比如修改你的银行转账金额、篡改网页内容。这就是所谓的"选择性明文篡改攻击"。

6.2 5G的改进

5G将用户面完整性保护提升为强制要求(个别场景除外):

$$\text{MAC-I} = \text{AES-CMAC}(K_{UPint}, \text{COUNT} | \text{BEARER} | \text{DIRECTION} | \text{PDU})$$

每个用户面PDU都附带一个MAC-I标签,接收方用相同的密钥和参数重新计算并比对。任何1个比特的篡改都会导致MAC-I不匹配,数据包被丢弃。


七、切换中的密钥更新:前向安全

7.1 问题场景

当手机从基站A切换到基站B时,基站B需要新的密钥。如果直接把K_gNB传给基站B,那么基站B不仅能解密切换后的数据,还能解密切换前在基站A上的数据——因为它们用的是同一套密钥。

7.2 NH链机制

5G(继承自4G)通过NH(Next Hop)参数链实现前向安全:

$$NH = \text{KDF}(K_{AMF}, NH_{prev})$$

每次切换时,使用最新的NH值来派生新基站的密钥:

$$K_{gNB_new} = \text{KDF}(NH, \text{target_PCI})$$

由于KDF是单向函数,新基站只能向前派生密钥,无法反推出旧基站使用的密钥。即使新基站被攻破,攻击者也无法解密用户在旧基站上传输过的数据。


八、EAP-AKA':5G的另一种认证方式

除了5G-AKA,5G还支持EAP-AKA'作为替代认证协议。主要用于以下场景:

场景 推荐协议 原因
3GPP接入(NR/LTE) 5G-AKA 原生协议,效率最高
非3GPP接入(Wi-Fi) EAP-AKA' EAP框架天然支持
漫游场景 两者均可 取决于运营商配置

EAP-AKA'的核心区别在于密钥派生时绑定了服务网络名称:

$$CK' | IK' = \text{KDF}(CK | IK, \text{"EAP-AKA'"} | \text{SN-name})$$

这一绑定确保了:即使攻击者截获了CK/IK,也无法在不同的服务网络下重用——因为SN-name不同,派生出的密钥也不同。


九、实战调试:常见问题与排查思路

9.1 常见认证失败原因

故障现象 可能原因 排查方法
Authentication Reject USIM和UDM的根密钥K不一致 比对SIM卡和HSS/UDM中的Ki
MAC Failure AUTN验证失败,可能是SQN不同步 检查USIM的SQN计数器与UDM是否对齐
SUCI解析失败 运营商公私钥对不匹配 确认USIM中预置的公钥与UDM私钥是同一对
Security Mode Reject 算法协商无交集 检查AMF和UE的安全能力列表
TAU/Registration循环 K_AMF派生异常 检查KDF参数(特别是SUPI、AMF实例ID)

9.2 Wireshark抓包要点

在实际调测中,重点关注以下消息:

  1. Registration Request → 查看SUCI格式、5G-GUTI
  2. Authentication Request/Response → 查看RAND值、RES*长度
  3. Security Mode Command/Complete → 查看协商的算法列表
  4. Registration Accept → 确认注册成功,安全上下文已建立

9.3 一个调试陷阱

SQN不同步是最容易被忽略的问题。USIM内部维护一个计数器SQN(Sequence Number),UDM也维护一个。如果USIM的SQN超前(比如长时间不联网后又开机),AUTN中的SQN可能落在USIM的"可接受窗口"之外,导致认证失败。

此时USIM会返回一个AUTS(Synchronization Token),UDM收到后重新同步SQN再重试。如果现网中频繁出现AUTS消息,需要检查UDM的SQN管理策略是否合理。


常见问题

Q: 5G-AKA和EAP-AKA'到底选哪个? A: 对于3GPP接入(NR基站),默认使用5G-AKA,它更高效(信令交互更少)。对于非3GPP接入(如Wi-Fi calling、可信WLAN接入),使用EAP-AKA',因为EAP框架天然适配这类接入方式。运营商也可以在UDM中为特定用户配置使用EAP-AKA'。

Q: NEA0(空加密)在什么场景下使用? A: 主要用于紧急呼叫(Emergency Call)。当用户没有USIM或认证失败时,法律要求仍然允许拨打紧急电话。此时没有密钥可用,只能使用NEA0。在正常商业网络中,运营商应配置为禁止NEA0。

Q: 为什么不直接用根密钥K加密,而要派生这么多层密钥? A: 核心原因是最小化泄露影响。如果直接用K加密且K泄露,攻击者可以解密所有历史通信——因为K从不变化。而多层密钥体系中,每个会话、每个网元使用不同的派生密钥,即使某一层的密钥泄露,上层密钥和过去的通信仍然安全。这就像银行不会把金库主钥匙给每个柜员,而是给每个柜员一把只能开自己保险箱的子钥匙。

Q: 5G能完全防止伪基站攻击吗? A: 不能完全防止,但大幅增加了攻击难度。5G的SUCI让伪基站无法获取用户真实身份;双向认证让用户可以验证网络身份。但伪基站仍然可以发起拒绝服务(拒绝UE接入),或在某些降级攻击场景下将5G终端降级到4G/3G后利用旧协议漏洞。安全是一个持续攻防的过程。

Q: 切换时密钥更新会不会增加延迟? A: 密钥派生本身是纯计算操作(一次SHA-256),耗时在微秒级,对切换延迟的影响可以忽略。实际影响切换延迟的主要因素是无线测量报告传输、Xn/Uu接口信令交互、数据转发等,密钥派生不在关键路径上。


参考来源

  1. 5G Security Architecture: Authentication, Encryption, and What Changed — 5G安全架构全景,涵盖密钥层级、5G-AKA vs EAP-AKA、SUPI/SUCI隐私保护
  2. 5G-AKA and EAP-AKA Prime: Complete Authentication Procedure — 5G认证流程完整步骤解析
  3. Introduction to 5G AKA - free5GC — 开源5G核心网项目free5GC对5G-AKA的技术解读
  4. Breaking Down AKA Protocols in Mobile Networks - P1 Security — 从安全研究角度对比EPS-AKA、5G-AKA和EAP-AKA'
  5. 5G Security Algorithms - Devopedia — NEA/NIA加密和完整性算法详解
  6. 5G Security - ShareTechnote — ShareTechnote经典教程,含NAS/AS安全模式流程图
  7. ECIES in 5G Core: SUPI to SUCI Conversion — ECIES加密方案在SUPI/SUCI转换中的实现细节

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