首页 › deep-tech › 5G认证与密钥:身份保护的加密密码学

5G认证与密钥:从SUCI加密到密钥派生的层层防护

从酒店入住理解移动网络安全

想象你走进一家酒店。前台需要确认两件事:你是谁(认证)和你能进哪些房间(授权)。前台给你一张房卡(密钥),这张卡不是万能的——它只能开你的房门、刷电梯、进健身房,但打不开别人的房间。

5G网络的安全机制与此异曲同工,但复杂程度远超酒店入住:

本文将系统拆解这套安全体系的设计原理,帮助你理解"5G为什么这样设计安全机制"。


一、身份保护革命:从IMSI裸奔到SUCI加密

4G的隐私短板:IMSI Catcher的威胁

在4G网络中,用户的永久标识IMSI在特定场景下会以明文形式在空口传输。攻击者可以使用一种叫"IMSI Catcher"(也叫伪基站)的设备伪装成合法基站,迫使手机暴露IMSI。这就像你的身份证号码在街头大声喊出来——任何人都可以听到并记录。

这种攻击的危害不仅是隐私泄露。攻击者可以: - 追踪用户的物理位置 - 关联用户的通信行为 - 为后续攻击收集情报

5G的解决方案:SUPI与SUCI

5G对此做了根本性改造。用户的永久标识改名为SUPI(Subscriber Permanent Identifier),格式上类似IMSI(MCC+MSIN),但传输方式完全不同。

5G引入了SUCI(Subscriber Concealed Identifier)机制,核心思想是:

用公钥加密把SUPI"装进信封",只有归属网络能"拆信封"。

具体过程使用ECIES(Elliptic Curve Integrated Encryption Scheme,椭圆曲线集成加密方案):

SUCI = SUPI类型(0) + 归属网络PLMN ID + 加密方案标识 + 归属网络公钥标识 
       + 加密后的MSIN部分 + MAC标签
字段 说明 类比
SUPI类型 0=IMSI格式 信封上的信件类型标记
归属网络PLMN MCC+MNC 收件人地址(哪家运营商)
公钥标识 指定使用哪个公钥 指定用哪把锁
加密MSIN 用ECIES加密后的用户号 锁在信封里的真实内容
MAC标签 消息认证码 防篡改封口
sequenceDiagram
    participant UE as 手机(USIM)
    participant gNB as 基站
    participant AMF as AMF/SEAF
    participant SIDF as SIDF(归属网)
    participant UDM as UDM/ARPF

    Note over UE: 1. 从USIM读取归属网络公钥
    UE->>gNB: Registration Request (SUCI)
    Note over gNB: 基站只能看到SUCI<br/>无法解密真实身份
    gNB->>AMF: 转发SUCI

    AMF->>SIDF: SUCI转SUPI请求
    Note over SIDF: 2. 用归属网络私钥解密SUCI
    SIDF->>SIDF: ECIES解密 → 得到SUPI
    SIDF->>UDM: SUPI

    Note over UDM: 3. 用SUPI查找用户数据<br/>生成认证向量
    UDM-->>AMF: 认证数据(含SUPI)

为什么用椭圆曲线而非RSA? 椭圆曲线在同等安全强度下密钥更短(256位ECC ≈ 3072位RSA),计算量更小,更适合手机终端的电池和算力约束。

一个关键设计细节: 5G-GUTI(临时标识)在注册成功后由AMF分配,后续通信优先使用5G-GUTI而非SUCI,进一步减少身份暴露机会。这就像酒店入住后给你房卡,此后不再需要出示身份证。


二、5G-AKA主认证流程:网络与手机的双向验证

什么是AKA?

AKA(Authentication and Key Agreement,认证与密钥协商)是移动通信最核心的安全协议。从3G时代(UMTS AKA)到4G(EPS-AKA),再到5G(5G-AKA),它的核心思想始终不变:

网络验证手机是真的(防伪终端),手机验证网络是真的(防伪基站),然后双方协商出加密密钥。

5G-AKA相比4G的最重要改进是引入了SEAF(Security Anchor Function)锚点概念和归属网络确认机制,让安全性从"访问网络说了算"升级为"归属网络最终确认"。

5G-AKA完整信令流程

sequenceDiagram
    participant UE as 手机(USIM)
    participant SEAF as SEAF(AMF)
    participant AUSF as AUSF(归属网)
    participant UDM as UDM/ARPF

    rect rgb(240, 248, 255)
    Note over UE,UDM: 第一阶段:认证向量生成
    SEAF->>AUSF: Nausf_UEAuthentication Authenticate<br/>(SUCI/SUPI, SN-Name)
    AUSF->>UDM: Nudm_UEAuthentication_Get<br/>(SUPI, SN-Name)
    Note over UDM: 生成认证向量AV:<br/>RAND(随机数) + AUTN(认证令牌)<br/>+ XRES*(期望响应) + K_AUSF
    UDM-->>AUSF: RAND, AUTN, XRES*, K_AUSF
    Note over AUSF: 从XRES*计算HXRES*<br/>从K_AUSF派生K_SEAF
    AUSF-->>SEAF: RAND, AUTN, HXRES*, K_SEAF
    end

    rect rgb(255, 248, 240)
    Note over UE,SEAF: 第二阶段:空口认证挑战
    SEAF->>UE: Authentication Request<br/>(RAND, AUTN, ngKSI)
    Note over UE: USIM用长期密钥K验证AUTN<br/>计算RES*<br/>派生K_AUSF→K_SEAF→K_AMF
    UE-->>SEAF: Authentication Response (RES*)
    Note over SEAF: 从RES*计算HRES*<br/>比较HRES* vs HXRES*
    end

    rect rgb(240, 255, 240)
    Note over SEAF,UDM: 第三阶段:归属网络确认
    SEAF->>AUSF: Nausf_UEAuthentication Confirm<br/>(RES*)
    Note over AUSF: 比较RES* vs XRES*
    alt 认证成功
        AUSF-->>SEAF: Auth Success + K_SEAF(确认)
        SEAF->>UE: Security Mode Command<br/>(加密算法, NAS安全上下文)
        UE-->>SEAF: Security Mode Complete
    else 认证失败
        AUSF-->>SEAF: Auth Failure
    end
    end

流程三阶段深度解读

阶段一:认证向量生成(UDM主导)

UDM/ARPF存储着用户的长期密钥K(在USIM中也有相同的K)。UDM生成一组认证向量(Authentication Vector),其中:

参数 全称 作用 生成方
RAND Random Challenge 网络给手机的随机数,防止重放攻击 UDM
AUTN Authentication Token 包含序列号SQN和MAC,用于手机验证网络真实性 UDM
XRES* Expected Response* 网络期望手机返回的响应值(用于验证手机) UDM
K_AUSF Key for AUSF AUSF层级的密钥,用于后续密钥派生 UDM

核心密码学运算:

$$AUTN = SQN \oplus AK | | AMF | | MAC$$

其中AK(Anonymity Key)用于隐藏序列号SQN,MAC(Message Authentication Code)用长期密钥K计算,防止篡改。SQN是一个递增计数器,防止攻击者重放旧的认证向量。

阶段二:空口认证挑战(SEAF验证)

手机收到RAND和AUTN后,USIM芯片执行以下操作:

  1. 验证AUTN中的MAC:用自己存储的密钥K重新计算MAC,与收到的MAC比对。如果不一致,说明这个认证向量不是来自真正的归属网络——手机拒绝了伪基站。
  2. 验证SQN范围:检查序列号是否在合理范围内。如果SQN太小(说明是旧向量重放),手机拒绝认证。
  3. 计算RES*:用密钥K和RAND计算响应值。
  4. 本地派生密钥:与网络侧相同的步骤,从K派生K_AUSF→K_SEAF→K_AMF。

SEAF收到RES后,先计算HRES(对RES做哈希),与之前AUSF提供的HXRES比对。这步是本地快速验证,不用再问归属网络。

阶段三:归属网络最终确认(AUSF验证)

这是5G相比4G的关键增强。SEAF把RES转发给AUSF,AUSF用自己的XRES做精确比对。只有AUSF确认通过,认证才算真正成功。

为什么要设计两轮验证(SEAF+AUSF)?

这是一种"快速通道+终极确认"的双保险设计。SEAF的HXRES比对可以快速发现明显的伪造响应,减少对归属网络的消息交互延迟。AUSF的XRES精确比对则作为最后的安全防线。好比银行转账:柜员先做一个初步审核,后台再做最终复核。


三、EAP-AKA':非3GPP接入的安全通道

5G不仅支持基站接入(3GPP接入),还支持WiFi等非3GPP接入。通过WiFi接入时,认证协议使用EAP-AKA'(读作EAP-AKA-Prime)。

EAP-AKA'与5G-AKA的区别

对比项 5G-AKA EAP-AKA'
适用接入 3GPP(基站) 非3GPP(WiFi等)
协议框架 3GPP专有流程 EAP(Extensible Authentication Protocol)框架
认证角色 SEAF与AUSF直接交互 AUSF作为EAP Server,UE作为EAP Peer
密钥绑定 绑定服务网络名称SN-Name 绑定接入网络标识
消息轮次 通常1轮(1次挑战-响应) 通常2轮(EAP-Request/Response多轮交换)

EAP-AKA'的关键改进

EAP-AKA'相比传统EAP-AKA,在密钥派生中引入了接入网络标识绑定:

$$CK' | | IK' = KDF_{EAP-AKA'}(CK | | IK, \text{access network identity})$$

这意味着即使攻击者拿到了CK和IK,没有正确的接入网络标识也无法派生出正确的密钥。这就像给钥匙加了一个"锁匠编号"——同一把钥匙坯,不同编号刻出来的齿形不同。

sequenceDiagram
    participant UE as 手机
    participant N3IWF as N3IWF/TNGF
    participant AMF as AMF/SEAF
    participant AUSF as AUSF

    UE->>N3IWF: IKEv2/EAPOL 开始
    N3IWF->>UE: EAP-Request/Identity
    UE-->>N3IWF: EAP-Response/Identity (SUCI)
    N3IWF->>AMF: 转发认证请求

    AMF->>AUSF: Nausf_UEAuthentication Request
    Note over AUSF: 生成EAP-AKA'挑战
    AUSF-->>AMF: EAP-Request/AKA'-Challenge
    AMF-->>N3IWF: 转发
    N3IWF-->>UE: EAP-Request/AKA'-Challenge<br/>(RAND, AUTN, MAC)

    Note over UE: 验证AUTN,计算RES*
    UE->>N3IWF: EAP-Response/AKA'-Challenge (RES*)
    N3IWF->>AMF: 转发
    AMF->>AUSF: Nausf_UEAuthentication Confirm (RES*)

    Note over AUSF: 验证RES*,派生K_SEAF
    AUSF-->>AMF: Success + K_SEAF
    AMF-->>N3IWF: EAP-Success
    N3IWF-->>UE: EAP-Success

    Note over UE,N3IWF: IPSec隧道建立完成<br/>安全通信开始

四、密钥层级体系:一棵从根密钥长出的加密树

为什么需要层级化密钥?

设计密钥层级而非使用单一密钥,出于三个安全原则:

  1. 前向安全(Forward Secrecy):如果某一层的密钥泄露,不应影响更高层密钥的安全
  2. 最小权限:不同功能使用不同密钥,互不影响
  3. 密钥隔离:基站切换时只需更新部分密钥,无需重新做完整认证

完整密钥派生树

                    K(永久密钥,存储在USIM和UDM)
                    │
                    ▼
              ┌──────────┐
              │  K_AUSF   │  ← AUSF层级密钥
              └────┬─────┘
                   │ KDF(FC=0x6A)
                   ▼
              ┌──────────┐
              │  K_SEAF   │  ← 安全锚点密钥(服务网络层)
              └────┬─────┘
                   │ KDF(FC=0x6F)
                   ▼
              ┌──────────┐
              │  K_AMF    │  ← AMF层级密钥
              └─┬────┬───┘
                │    │
     KDF(0x69)  │    │  KDF(0x69)
                ▼    ▼
         ┌──────┐ ┌──────┐
         │K_NAS │ │K_gNB │ ← 基站层级密钥
         │enc   │ │      │
         ├──────┤ └──┬───┘
         │K_NAS │    │ KDF(0x6E)
         │int   │    ▼
         └──────┘ ┌──────┐
                  │K_RRC │ ← RRC信令保护
                  │enc   │
                  ├──────┤
                  │K_RRC │
                  │int   │
                  ├──────┤
                  │K_UP  │ ← 用户面数据保护
                  │enc   │
                  ├──────┤
                  │K_UP  │
                  │int   │
                  └──────┘

各层密钥的职责与生命周期

密钥 保护对象 派生位置 生命周期 更新触发
K 不直接使用,仅用于派生 USIM/UDM 永久 换卡/运营商务必
K_AUSF AUSF层级中间密钥 UE/UDM 一次认证 每次主认证
K_SEAF 服务网络锚点 UE/AUSF→SEAF 一次认证 跨PLMN切换
K_AMF NAS信令保护 UE/AMF 注册期间 AMF变更
K_NAS-enc NAS信令加密 UE/AMF 注册期间 算法协商
K_NAS-int NAS信令完整性保护 UE/AMF 注册期间 算法协商
K_gNB 空口密钥基础 UE/gNB 连接期间 基站切换
K_RRC-enc/int RRC信令保护 UE/gNB 连接期间 基站切换
K_UP-enc/int 用户面数据保护 UE/gNB 连接期间 基站切换

密钥派生函数(KDF)的工作原理

所有密钥派生使用统一的KDF(Key Derivation Function),基于HMAC-SHA-256:

$$K_{derived} = \text{HMAC-SHA-256}(K_{input}, FC | P_0 | L_0 | P_1 | L_1 | ...)$$

其中: - FC(Function Code):1字节,标识派生目的(如0x6A派生K_SEAF,0x6F派生K_AMF) - P₀, P₁, ...:参数(如SN-Name、算法标识等) - L₀, L₁, ...:对应参数的长度

为什么用HMAC-SHA-256而不是直接SHA-256? HMAC利用了密钥作为输入,确保只有持有上层密钥的实体才能派生下层密钥。直接哈希则没有这个保证。

基站切换时的密钥更新:水平派生 vs 垂直派生

这是工程师在实际网络中经常遇到的场景。

水平派生(Horizontal Derivation): UE在同一AMF下从源gNB切换到目标gNB:

$$K_{gNB}^{target} = KDF(K_{gNB}^{source}, \text{target PCI} | ...)$$

源gNB把必要的参数传给目标gNB,目标gNB直接派生新密钥。无需AMF参与,切换速度快。

垂直派生(Vertical Derivation): AMF变更或需要刷新K_AMF时,从K_SEAF重新派生整个密钥链:

$$K_{AMF}^{new} = KDF(K_{SEAF}, \text{new parameters})$$

然后从新的K_AMF重新派生所有下层密钥。这是更重的操作,但安全性更高。

graph LR
    subgraph 垂直派生
        K_SEAF1[K_SEAF] --> K_AMF1[K_AMF] --> KgNB1[K_gNB] --> KRRC1[K_RRC]
    end

    subgraph 水平派生
        KgNB1[K_gNB 源] --> KgNB2[K_gNB 目标] --> KRRC2[K_RRC 新]
    end

    style K_SEAF1 fill:#ff9999
    style K_AMF1 fill:#ffcc99
    style KgNB1 fill:#ffff99
    style KgNB2 fill:#99ff99
    style KRRC2 fill:#99ccff

五、二次认证:面向数据网络的额外验证

什么时候需要二次认证?

主认证验证的是"你是运营商的合法用户"。但在某些场景下,企业网络或特定数据服务还需要验证"你有权访问我的数据网络"——这就是二次认证(Secondary Authentication)。

典型场景: - 企业专线:员工手机接入企业内网时,企业AAA服务器需要单独验证 - 切片场景:特定网络切片可能需要额外的身份验证 - 运维场景:某些高安全级别的数据网络要求独立认证

二次认证的协议栈

二次认证基于EAP框架,由SMF(Session Management Function)充当EAP Authenticator,对接外部DN-AAA服务器:

UE ←→ N1 NAS信令 ←→ SMF ←→ RADIUS/Diameter ←→ DN-AAA Server
     (EAP over NAS)      (EAP over RADIUS/Diameter)

支持的EAP方法包括:EAP-TLS(证书认证)、EAP-TTLS(隧道TLS)、EAP-AKA(复用SIM卡密钥)等。


六、4G与5G安全体系对比

安全特性 4G (LTE) 5G (NR)
永久标识保护 IMSI可能明文传输 SUPI始终加密为SUCI传输
伪基站防护 手机无法验证网络真伪 手机可验证网络真伪(增强的AUTN验证)
安全锚点 MME(单一实体) SEAF+AUSF(分离架构,归属网络参与确认)
密钥层级 K→K_ASME→K_eNB→会话密钥 K→K_AUSF→K_SEAF→K_AMF→K_gNB→会话密钥(多一层)
非3GPP接入安全 可选,方案不统一 标准化EAP-AKA',统一框架
二次认证 无标准方案 SMF+DN-AAA标准化流程
用户面完整性保护 仅加密,无完整性保护 同时支持加密和完整性保护
漫游安全 漫游场景下安全较弱 归属网络全程参与认证确认
隐私保护 较弱(GUTI可被追踪) 增强(SUCI+5G-GUTI双重保护)

七、实战连接:工程师调试指南

1. 认证失败的常见原因

在现网调试中,5G认证失败通常出现在以下几种场景:

故障现象 可能原因 排查方法
AUTN验证失败 SQN不同步(USIM与UDM的SQN不一致) 检查UDM中用户的SQN状态,必要时重置
MAC验证失败 密钥K不匹配(USIM与UDM存储的K不同) 对比HSS/UDM和USIM中的Ki
网络拒绝认证 归属网络不认可服务网络(SN-Name不匹配) 检查AMF配置的PLMN ID和SN-Name
反复认证不通过 USIM卡数据异常或未开通5G服务 换卡测试,检查用户签约数据
Security Mode Command失败 加密算法协商不匹配 检查UE和AMF的算法优先级列表

2. 抓包分析技巧

分析5G认证问题时,重点关注以下信令消息:

3. 常见调试陷阱

陷阱1:SUCI解密失败 当SIDF无法解密SUCI时(公钥不匹配或ECIES参数错误),会导致整个注册流程卡在第一步。检查归属网络公钥是否正确配置在USIM和UDM中。

陷阱2:跨PLMN漫游认证 漫游场景下,访问网络的SEAF和归属网络的AUSF之间需要正确配置N32接口安全(N32安全网关)。如果N32安全上下文建立失败,认证向量无法传输。

陷阱3:混淆5G-AKA和EAP-AKA' 3GPP接入用5G-AKA,非3GPP接入用EAP-AKA'。两者消息格式不同,抓包时不要混用分析工具。5G-AKA是NAS层直接承载,EAP-AKA'是EAP框架承载。


八、加密算法选择:从NEA0到NEA3

5G定义了三种加密算法(NEA = 5G Encryption Algorithm)和三种完整性保护算法(NIA = 5G Integrity Algorithm):

算法标识 名称 类型 说明
NEA0/NIA0 空算法 无保护 仅用于紧急呼叫等特殊场景
NEA1/NIA1 128-EEA1/128-EIA1 SNOW 3G基于 沿用4G算法
NEA2/NIA2 128-EEA2/128-EIA2 AES-CTR/CMAC 沿用4G算法,最广泛部署
NEA3/NIA3 128-EEA3/128-EIA3 ZUC祖冲之算法 中国国密算法

算法选择在Security Mode Command过程中由AMF决定(从UE支持的算法列表中选择优先级最高的匹配项)。


常见问题

Q: SUCI加密后,伪基站还能获取用户身份吗?

A: 不能。SUCI使用归属网络的公钥加密,伪基站没有私钥无法解密。即使伪基站强制手机发送SUCI,它也只能看到加密后的密文,无法获取真实的SUPI。这正是5G相比4G在隐私保护上的核心进步。不过,如果攻击者能够长期收集同一个SUCI,理论上可以通过SUCI的固定头部(PLMN ID和公钥标识)进行有限追踪。因此5G还建议定期更换5G-GUTI来进一步增加追踪难度。

Q: 5G-AKA和EAP-AKA'能互相替代吗?

A: 不能。5G-AKA是3GPP接入的专用协议,消息通过NAS信令直接承载,效率更高。EAP-AKA'是EAP框架下的协议,适用于非3GPP接入(WiFi等),需要多轮EAP消息交换。两者在密钥派生中绑定的参数不同(SN-Name vs 接入网络标识),派生出的密钥也不同。

Q: 基站切换时需要重新做完整认证吗?

A: 通常不需要。同一AMF下的基站切换使用水平密钥派生,源gNB直接派生新密钥给目标gNB,整个过程不涉及AMF和AUSF。只有AMF变更时才需要垂直派生,从K_SEAF重新派生密钥链,但这也不需要完整的主认证流程(因为K_SEAF仍然有效)。

Q: 如果USIM卡被克隆,5G安全还能防护吗?

A: USIM克隆意味着长期密钥K泄露,这是5G-AKA无法防护的场景(因为AKA的安全性前提就是K的安全存储)。但5G通过其他机制增加克隆检测难度:SQN序列号机制可以检测两张"相同"卡同时在线的情况;UDM可以限制每个SUPI的并发注册数量。运营商层面还部署了异常行为检测系统来发现克隆卡的使用模式。

Q: 为什么5G新增了用户面完整性保护(4G只有加密)?

A: 这是一个重要的安全增强。4G只对用户面数据做加密,不做完整性保护。这意味着攻击者可以在不解密的情况下翻转密文中的某些比特(比特翻转攻击),导致接收方解密出被篡改的数据。5G新增K_UP-int(用户面完整性密钥),可以检测到任何数据篡改。这对工业控制、金融交易等高安全场景尤为重要。


参考来源

  1. Introduction to 5G AKA - free5GC — 5G-AKA认证流程完整教程,含密钥派生详解
  2. Breaking Down AKA Protocols in Mobile Networks - P1 Security — AKA协议族安全分析,涵盖3G/4G/5G演进对比
  3. 5G SUCI vs SUPI: How 5G Protects Subscriber Privacy - 5G6G Academy — SUCI/ECIES隐私保护机制深度解析
  4. EAP AKA Prime Explained - P1 Security — EAP-AKA'与EAP-AKA的区别及其安全意义
  5. 5G Security: Why IMSI Catchers No Longer Work - HiCellTek — 5G如何从根本上解决IMSI Catcher威胁的技术分析

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