谍战片里地下接头有两条铁律:一不能先报名字,二不能说出暗号本身——双方各念半句对得上,就确认是自己人。手机每次开机入网,做的正是这两件事:
反过来,手机也要验一验网络是不是冒牌的。这三件事合起来,就是移动通信里的"主认证"(Primary Authentication)。密钥体系怎么分层派生是另一个话题,本文只回答两个更前置的问题:怎么证明你是你,以及怎么让别人不知道你是谁。
你办卡那天,运营商往 SIM 卡里写进一个 128 位的根密钥,业内就叫它 K。同一份 K 的副本存进归属网络的签约数据库(2G/3G 时代叫 HLR,4G 叫 HSS,5G 里由 UDM/ARPF 承担这个角色)。
这个设计的关键约束只有一条:K 只存在于两个地方——你的卡里,和归属网的机房里。它不进基站、不进拜访网络、更不上空口。
为什么这样设计?因为秘密的泄露面与它出现的地方数量成正比。让根密钥只在"防篡改的智能卡"和"运营商核心机房"这两个可信度最高的位置存在,其他一切密钥都现场派生、用完即弃,是整个移动安全体系的底层逻辑。
算子(即用 K 和挑战值算出各种密钥应答的那组函数)也不是一开始就靠谱。2G 时代广泛使用的 COMP128 算法族后来被发现存在弱点,攻击者拿到卡在若干秒内反复"喂挑战、收应答",就能把卡内的 K 反推出来——卡可以被克隆。此后的算子家族(业界最常用的叫 Milenage)改用 AES 作为核心,并且运营商可以选用私有算子,标准只提供测试用例。这段历史说明:认证体系的强度下限,取决于最弱的那个算子。
有了共享秘密 K,怎么用它"验明正身"?直觉上的笨办法是把 K 传给网络比对——那就等于把密码喊出来。正确的做法是挑战-响应(Challenge-Response):
$$RES = f_2(K,\ RAND)$$
归属网随机生成一个挑战值 RAND,本地用 K 算出一个"期望答案" XRES;手机收到 RAND 后,卡内的芯片同样用 K 算出"应答" RES。两边一比对,一致就证明对方握有同一个 K——而 K 本身从未出现在任何信道里。
flowchart TD
K0["发卡那天<br/>秘密K写进SIM"]
K0 --> S1["手机侧<br/>K永不出卡"]
K0 --> S2["归属网机房<br/>存同一份K"]
S1 --> C1["收到挑战RAND<br/>卡内算出RES"]
S2 --> C2["生成随机RAND<br/>算出期望XRES"]
C1 --> W["空口只见RAND与RES<br/>K全程不出现"]
C2 --> W
W --> V["两边对上<br/>证明都握有K"]
只验证手机是不够的。2G 只做单向认证——网络考手机,手机不考网络,于是"假基站"可以大摇大摆地吸引手机接入。从 3G 起,挑战里多了一个网络的自证令牌 AUTN,它的构造值得拆开看:
$$MAC = f_1(K,\ SQN,\ RAND,\ AMF)$$
$$AUTN = (SQN \oplus AK)\ \Vert\ AMF\ \Vert\ MAC$$
三个零件各司其职:
手机侧验证 AUTN 失败有两种典型情形,排查时经常遇到:MAC 校验不过(网络是假的,或密钥数据不一致)和 SQN 失步(序列号对不上,常见于签约数据异常或卡被异常复制)。这两种失败原因在网络消息里是明确区分的,因为处理方式完全不同——前者直接拒绝,后者要走一次重同步流程。
把前面的零件装配起来,看一次完整的 5G 认证。注意一个反直觉的点:认证的真正考官是归属网络,不是你脚下的基站。基站和拜访地的核心网只是"考场工作人员",题目和标准答案都由千里之外的归属网出。
sequenceDiagram
participant U as 手机UE
participant G as 基站gNB
participant S as 核心网SEAF
participant A as 归属AUSF
participant H as 归属UDM
U->>G: 入网请求 携带SUCI
G->>S: 透传SUCI
S->>A: 认证请求 SUCI加网络名
A->>H: 请求认证材料
H->>H: 解出SUPI 生成RAND
H-->>A: RAND AUTN XRES* Kausf
A->>A: 由XRES*算出HXRES*
A-->>S: RAND AUTN HXRES*
S->>G: 下发认证挑战
G->>U: 挑战 RAND加AUTN
U->>U: 验AUTN 算RES*
U->>G: 应答RES*
G->>S: 转交RES*
S->>S: 比对HXRES*与散列RES*
S->>A: 上报核验结果
A->>A: 比对RES*与XRES*
A-->>S: 确认无误 交付Kseaf
Note over U,G: 基站只是传话人<br/>认证发生在手机与归属网之间
| 材料 | 是什么 | 谁生成 | 谁能见 | 干什么用 |
|---|---|---|---|---|
| RAND | 随机挑战值 | 归属网 | 空口可见 | 诱发应答、供双方计算 |
| AUTN | 网络自证令牌 | 归属网 | 空口可见 | 手机验证网络真伪、防重放 |
| XRES* | 期望应答(带星号) | 归属网 | 仅归属网持有原文 | 与 RES* 终局比对 |
| HXRES* | XRES* 的散列 | 归属网 AUSF | 拜访网可持有 | 拜访网本地快速预筛 |
| Kausf | 归属网锚点密钥 | 归属网 | 仅归属网与 AUSF | 认证成功后派生下级密钥 |
流程骨架与 4G 一脉相承,但有三处针对性的改造,每一处都对应 4G 的一个真实短板:
第一,星号密钥:把密钥和"考场名"绑死。 5G 里所有认证中间量都带星号(RES、XRES、Kausf),它们是把 4G 算子算出的中间密钥,再连同服务网络的名称一起过一次密钥派生函数得到的(下式为简化示意):
$$RES^* = KDF(CK\,\Vert\,IK,\ \text{SN-name},\ RAND,\ RES)$$
这样一来,为 A 运营商网络派生的应答和密钥,拿到 B 网络里对不上号。密钥被"定向锁定"到了本次服务的网络,杜绝了中间量在不同服务网之间被挪用的空间。
第二,归属网全程在场,Kseaf 是"考完才发"的奖状。 4G 时代,归属网把成套认证材料一次性交给拜访网之后,就用与不用的、用几次的,归属网一概不知情。5G 改成了双保险:拜访网(SEAF)手里只有 XRES 的散列 HXRES,可以先本地快速比对,把明显错误的应答当场挡下;但最终裁决权在归属网 AUSF——它比对原始 XRES 与 RES,确认这次认证真实发生后,才把锚点密钥 Kseaf 交给拜访网。拜访网拿不到 XRES* 原文,也拿不到 Kseaf 之前的任何密钥,被攻破时泄密面被压到最小。
第三,第一条消息就是密文身份——这就是下一节的主角。
早期移动网的入网流程里,如果手机没有有效的临时身份(TMSI/GUTI),网络会直接要求它上报明文 IMSI。这个"例外路径"被伪基站玩成了标准打法:伪装成信号最强的小区广播"把 IMSI 报上来",周围所有手机乖乖照办——接收方的身份、位置瞬间暴露。这类设备(俗称"假基站""IMSI 捕获器")之所以在 2G/3G 时代屡试不爽,根源就是身份标识在特定场景下允许明文出现。4G 用 GUTI 大幅减少了明文 IMSI 的出现频率,但"没有临时身份时可要求明文上报"的口子仍然留着。
5G 把这个口子彻底焊死了:入网第一条消息里的身份永远是密文。真实身份叫 SUPI(可以理解为 IMSI 或网络侧标识),上线前被加密包装成 SUCI:
flowchart TD
A["真实身份SUPI<br/>形如IMSI"]
A --> B["手机生成一次性密钥对"]
B --> C["用归属网公钥加密SUPI"]
C --> D["密文加上公钥的编号<br/>打包成SUCI"]
D --> E["空口人人可见<br/>却看不出是谁"]
E --> F["只有归属网持有私钥<br/>能解密还原SUPI"]
F --> G["每次入网SUCI都不同<br/>被动跟踪失效"]
三个设计细节都值得说"为什么":
四代网络的身份暴露程度放在一起看更直观:
| 代际 | 入网首条消息报什么 | 明文风险 |
|---|---|---|
| 2G/3G | IMSI 或临时 TMSI | 无 TMSI 时 IMSI 明文裸奔 |
| 4G | GUTI 为主 | 无 GUTI 时仍可被点名要明文 IMSI |
| 5G | SUCI(密文) | 首条消息即为密文,归属网外无人可解 |
要客观地说清 SUCI 防什么、不防什么。它防的是被动窃听者抓取身份——这是 2G/3G 时代最猖獗的一类攻击。但它不防主动攻击:伪基站仍然可以广播信号吸引手机接入、发起伪造挑战消耗手机电量、或直接拒绝服务。身份隐身≠消灭假基站,这两件事经常被混为一谈。
5G 标准允许两种主认证方法,共享同一套卡内算子和挑战-响应内核,差别在"流程外壳":
| 维度 | 5G-AKA | EAP-AKA' |
|---|---|---|
| 出身 | 蜂窝传统 AKA 的 5G 改造版 | 源自互联网 EAP 认证框架的扩展 |
| 典型场景 | 蜂窝接入(手机连基站) | 非蜂窝接入:WiFi 通话、企业专网 |
| 流程形态 | 归属网与拜访网两段式确认 | 套在 EAP 四步消息(或 IPsec 建隧道流程)里跑 |
| 密钥绑定 | 星号密钥绑定服务网络名 | 密钥额外再绑定接入网络标识 |
| 谁决定用哪个 | 归属网按用户签约配置 | 同左,并非二选一的"技术竞赛" |
为什么要有 EAP-AKA'?因为 5G 的愿景是"一张核心网接万物":手机可能从蜂窝接入,也可能从家庭/企业 WiFi(通过专用网关隧道)接入,甚至未来从卫星接入。EAP 是互联网世界久经考验的认证外壳,把 AKA 装进这个外壳,不同接入方式的认证体验和密钥体系就能统一;名字里那一撇(')代表它的派生密钥额外绑定了接入网的身份,防止蜂窝里派生的密钥被拿到 WiFi 场景复用。
现网里最典型的 EAP-AKA' 用户,就是打开 WiFi 通话(VoWiFi) 的手机:它先与运营商的专用网关建立加密隧道,隧道内跑的认证正是 EAP-AKA'。
一个高频误解:认证通过后通话数据就自动加密了。实际上这是两道门:
5G 在这一步也有一处值得注意的升级:4G 的用户面数据只有加密、没有完整性保护(LTE 从未支持用户面完整性),篡改用户数据在协议层是无感知的;5G 补上了用户面完整性保护的能力,虽然出于处理开销考虑是否启用由运营商决定,但机制已经就位。信令完整性保护则从 4G 起就是强制的,5G 延续并收紧。
排障时的实用推论:认证和安全模式是两个独立阶段,失败要分段看。认证失败查 K、SQN、SUCI 解密;安全模式失败查算法协商与密钥派生,混在一起查会南辕北辙。
几个最常见的误解,集中澄清:
Q:5G-AKA 和 EAP-AKA' 哪个更安全? A:安全强度同源——两者用同一套卡内算子和挑战-响应内核,都具备双向认证。差别在流程外壳与密钥绑定的对象:EAP-AKA' 的密钥额外绑定接入网标识,更适合多接入场景。归属网络按签约决定用哪个,这是场景选择,不是先进性排名。
Q:SIM 卡丢了,别人能冒充我吗? A:理论上持有你的卡就能通过认证——体系保护的是"持卡人",这正是机卡不分离场景下的设计前提。所以补卡时运营商会注销旧卡签约、换发新的 K;卡本身的 PIN 码防的是开机后随手拿起手机的场景。
Q:为什么 5G 空口认证这么强,还会有运营商间信令层面的攻击? A:空口认证保护的是"手机 ↔ 归属网"这一段;运营商网络之间的互联互通信令(漫游结算那一层)是另一道门,有自己独立的防护体系。两道门互不替代,历史上多起位置泄露事件的根源在后一道门,而不是空口。
Q:SUCI 会不会还是泄露信息? A:密文本身不泄露身份,且因一次性密钥对不同次入网不可关联。但它不防"主动攻击者逼手机交互"这类行为——身份隐身解决的是"被动看",不解决"主动问"。
Q:认证里的序列号 SQN 为什么要在卡里存一份、网里也存一份? A:这正是防重放的记账本:网侧每发一次挑战记一笔,卡侧核对来的是不是"新账"。两边账本对不上的场景(换卡、数据回退)触发重同步,把账重新对齐,而不是简单拒绝——否则一张正常的卡可能被永久锁死。
说明:本次写作环境未开放联网检索,以下为该主题的通行权威入口与经典教材体系,内容以正文所依据的教科书共识为准,未逐条在线核对,请读者自行甄别更新。
本文由「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 等场景全覆盖。
