手机按下电源键,屏幕亮起到信号格出现,中间只有两三秒。就在这两三秒里,你的手机和网络完成了一场无声的"对口供":网络要验明"你是合法用户",手机也要反问"你是真基站还是伪基站"。这套口供流程叫认证与密钥协商(AKA),它是整个移动通信安全的地基。今天这篇文章,我们就把4G/5G的认证流程和那棵著名的"密钥家族树"彻底讲透。
先说一段历史教训。2G GSM时代,认证是单向的:只有网络验手机,手机从来不验网络。手机怎么证明自己?网络发来一道随机考题,SIM卡用卡内密钥算出答案,网络比对通过就放行。这套逻辑本身没错,问题是手机对"对面是谁"完全盲目。
这就给了伪基站可乘之机。攻击者架一台假基站,广播更强的信号,手机傻乎乎地接入,把身份标识明文交出去。早期GSM的认证算法还有实现漏洞,安全研究者用"选择挑战"的方法反复提问、统计答案,竟然能把卡内密钥反推出来,一度出现"克隆SIM卡"。手机不验网络 + 密钥可被反推,两个漏洞叠加,成了移动通信安全史上最惨痛的一课。
从3G开始,标准把流程改成了双向认证:网络发挑战时附带一张"签名",手机用同一把卡内密钥验签——签名对得上,说明对面是真正持有密钥副本的归属运营商,而不是街头那台假基站。这个"签名+随机题"的组合,就是AUTN令牌,后面细讲。
用一个地下工作者接头的类比贯穿全文:
| 接头类比 | 技术对应 |
|---|---|
| 母暗号本,锁死随身带、永不外借 | 根密钥K,只存在于SIM卡和归属网络 |
| 当天出的随机考题 | 随机数RAND |
| 口供编号,必须逐次递增 | 序列号SQN,防重放 |
| 对上暗号后的签名画押 | MAC校验码 |
| 新同志只发当次任务口令,不发母本 | 密钥分层,服务网只拿下层密钥 |
整个安全体系的信任源头,是一把128位的根密钥K。它有且仅有两份副本:一份在你手机的SIM卡里,一份在运营商归属网络的用户数据库里。
为什么K永不离开SIM卡? 看卡和看手机的制造哲学完全不同。SIM卡是一块独立的安全芯片,有自己的操作系统和防拆电路,遇到暴力破解会自毁清空;而手机操作系统是可以刷机、可以Root的开放环境。把根密钥放在卡里而不是手机里,等于把传家宝放进保险柜而不是放在办公桌上。所有涉及K的运算都在卡内完成,卡只对外输出"运算结果",从不输出K本身。
这也解释了现网一个常见现象:换手机不用换卡,换卡却必须重新开户写卡。因为你的身份本质上不是那个手机号,而是卡里那把K。运营商营业厅"补卡"的本质,是生成一把新K写进新卡,同时更新归属网络侧的副本,旧卡即刻作废。
存卡侧的问题解决了,网络侧呢?早期密钥副本存在鉴权中心,演进后统一并入归属网络的统一数据管理单元(4G叫HSS,5G叫UDM)。手机在纽约也好、在东京也好,世界各地 roaming 的服务网络都拿不到K,只能向归属网络"借"认证材料——这个设计保证了无论你走到哪里,验明正身的最终裁判永远是你签约的运营商。
来看5G下一次完整的认证,时序如下:
sequenceDiagram
participant U as 手机USIM
participant S as 服务网SEAF
participant H as 归属网UDM
U->>S: 注册请求(带隐藏身份SUCI)
S->>H: 申请认证(SUCI与服务网名)
H->>H: 出随机题RAND生成AUTN
H->>S: 发RAND、AUTN、期望应答哈希
Note over S: 锚点密钥暂扣不发
S->>U: 下发挑战RAND与AUTN
Note over U: USIM验MAC查SQN<br/>同端算出应答与锚点密钥
U->>S: 回应答RES
S->>S: 应答压哈希与期望值比对
S->>H: 报告比对通过
H->>S: 这才交付锚点密钥
S->>U: 安全模式命令开启保护
拆解每一步的原理。归属网络先生成一个一次性随机数RAND,然后用卡里同款的密钥K,双方各自独立地计算同一组结果:
$$\text{AK} = f5_K(\text{RAND}), \quad \text{MAC} = f1_K(\text{SQN} \oplus \text{AK},\ \text{RAND},\ \text{AMF})$$
$$\text{RES} = f2_K(\text{RAND}), \quad \text{CK} = f3_K(\text{RAND}), \quad \text{IK} = f4_K(\text{RAND})$$
这一组f1到f5是五个专用运算函数(工程上常用一套叫Milenage的标准构造,以分组密码为内核拼装而成)。双方算出的东西一样,才能"心有灵犀":
AUTN令牌由三段拼成:SQN⊕AK、AMF、MAC。每一段都有明确的存在理由:
SQN机制有个天然的运维副作用:卡内计数和网络侧计数可能"对不上账"。比如物联网卡长期断电、测试卡在实验室反复回退数据,卡内的SQN远远落后于网络侧,挑战一来,卡发现"编号超前得离谱",为了安全直接拒绝。这时手机会发起重新同步:用本地SQN算一个专门的同步参数发回网络,网络核对后把自己的计数器回拨到与卡一致,重新出题。这是现网鉴权失败排查中最高频的一类问题,后面实战部分再展开。
5G的认证框架延续了挑战应答的骨架,但针对4G时代的三个遗留痛点,各加了一道锁。
4G时代有个尴尬:手机第一次接入时,身份标识(IMSI)是明文发的——因为网络此刻还不认识你,临时别名还没发给你。这个"先亮明身份才能领面具"的死结,让4G的伪基站监听始终有隙可钻。
5G的解法很优雅:把永久身份用密码学藏起来。手机不再明文发送SUPI(永久订阅标识),而是用归属运营商预置在卡里的公钥做加密运算(一套基于椭圆曲线的混合加密方案),打包成SUCI(隐藏订阅标识)后才发出:
flowchart TD
A["手机取出永久标识SUPI"] --> B["生成临时密钥对"]
B --> C["用归属网公钥加密"]
C --> D["打包成SUCI明文发出"]
D --> E["窃听者只看到乱码"]
D --> F["归属网用私钥解密"]
F --> G["还原SUPI完成寻址"]
注意这张图的精妙之处:加密公钥人尽可得,解密私钥只在归属网络。街头的伪基站截获SUCI也只能看到乱码;只有你签约的运营商才能解出你是谁。每一次加密手机都用新鲜的临时密钥对,同一部手机两次注册产生的SUCI长得完全不同,连"这个人上次来过"这种关联追踪都做不了。
5G对认证流程中服务网络和归属网络之间的信任关系做了收紧。4G时代,归属网络会把"期望答案"原文交给服务网络保管比对。5G改成:服务网络拿到的是期望应答的哈希摘要而非原文,而且最关键的锚点密钥,要等服务网络报告"答案比对通过"之后,归属网络才发放。
为什么这样设计?服务网络的设备散布街头:基站、边界网关,物理上无人看守,标准的设计假设就是"它们可能被攻破"。考卷答案先封存,最高级别的钥匙比对成功后才临时下发——即使服务网络被渗透,攻击者拿到的也只是本次会话的下层密钥,而不是能伪造任何用户的根素材。
加密和完整性是两件不同的事:加密防"偷看",完整性防"篡改"。2G时代只有加密、没有完整性,信令被篡改了手机毫无察觉。3G补上了信令完整性保护,但历代都留了个"空算法"后门——可以配置成不加密不保完整。5G把门关严:非接入层信令的完整性保护成为强制项,空算法仅剩紧急呼叫等极少数特例可用。除紧急呼叫等特例。换句话说,5G网络里一条未受完整性保护的普通信令,本身就是异常。
认证成功只是拿到了"中间原料"。真正的空口保护,靠的是从原料派生出的一整棵密钥树:
flowchart TD
K["根密钥K<br/>USIM与UDM各存一份"]
CK["CK与IK<br/>用K对RAND运算而得"]
Kausf["Kausf<br/>归属网锚点密钥"]
Kseaf["Kseaf<br/>服务网锚定密钥"]
Kamf["Kamf<br/>AMF接入密钥"]
Knas["NAS保护密钥对<br/>护手机到核心网信令"]
KgNB["KgNB<br/>基站密钥家族之根"]
Krrc["RRC保护密钥对<br/>护手机到基站信令"]
Kup["用户面保护密钥对<br/>护业务数据"]
K --> CK
CK --> Kausf
Kausf --> Kseaf
Kseaf --> Kamf
Kamf --> Knas
Kamf --> KgNB
KgNB --> Krrc
KgNB --> Kup
| 密钥 | 诞生于 | 谁持有 | 管什么 |
|---|---|---|---|
| K | 写卡时预置 | USIM与UDM | 万钥之母,永不出卡 |
| CK / IK | 双方各用K算出 | USIM、归属网 | 派生用的中间原料 |
| K_ausf | 由CK/IK派生 | USIM与归属网锚点功能 | 归属侧的"总闸" |
| K_seaf | 由K_ausf派生 | 服务网络入口 | 交给服务网的最高权限 |
| K_amf | 由K_seaf派生 | AMF | 接入与移动性管理 |
| NAS密钥对 | 由K_amf派生 | 手机与AMF | 核心网信令的加密与完整 |
| K_gNB | 由K_amf派生 | 手机与gNB | 基站侧密钥家族的根 |
| RRC/用户面密钥 | 由K_gNB派生 | 手机与gNB | 信令与业务数据保护 |
理由一:域隔离。 每一层密钥在派生时都掺入了"用途标签"——这把密钥是干什么用的、给哪个网络用的。用途标签不同,派生结果天差地别。于是即使某个环节的密钥泄露,它也"只配"干自己那一类坏事:拿基站密钥伪造不出核心网信令,拿本次会话密钥解不开上次会话。这就是密码工程里的密钥分离原则——不把所有鸡蛋放进一个篮子,甚至不把所有篮子放在一辆车上。
理由二:信任按距离衰减。 回顾家族树的地理分布:K和K_ausf住在归属网络,K_seaf以下才交给服务网络,K_gNB以下下发到街头基站。离你越远、越可信的节点,持有越根本的密钥;越靠近危险地带(户外基站)的节点,持有的密钥越"临时"。这棵树就是一张信任的地图。
理由三:单向派生,坏了不传染。 派生用的是单向的密钥推导函数——从父钥算子钥容易,从子钥反推父钥在计算上不可行。于是每个节点被攻破的影响范围被天然锁死在下层:
| 被攻破的节点 | 攻击者得到 | 攻击者得不到 |
|---|---|---|
| 街头基站 | 该站的接入层密钥 | 根密钥K、NAS密钥、归属网数据 |
| 服务网络AMF | K_seaf及以下 | 根密钥K、锚点密钥K_ausf |
| 一次通话的会话密钥 | 仅本次通信内容 | 历史会话与未来会话 |
| 归属网络数据库 | 根密钥K | ——最严重,须全网换卡止损 |
最后一行是唯一的"灭顶之灾"场景:归属数据库失守等于母暗号本被盗,唯一的补救是全量换卡重写K。这就是为什么运营商把归属网络的数据库安全等级,看得比基站高得多。
顺带一提,切换场景还有更细的讲究:手机从基站A搬到基站B时,新基站的密钥由密钥链配合新鲜参数派生,前一站被攻破也不会沿切换链"传染"到下一站。
把2G到5G的安全能力放到一起看,脉络就清晰了——每解决一个历史漏洞,就催生下一代设计:
| 能力 | 2G GSM | 3G UMTS | 4G LTE | 5G NR |
|---|---|---|---|---|
| 认证方向 | 单向(仅网络验机) | 双向 | 双向 | 双向+归属锚定 |
| 空口加密 | 有(已被破译) | 有 | 有(允许空算法) | 有(空算法收紧) |
| 信令完整性 | 无 | 有 | 有 | 强制启用 |
| 用户面完整性 | 无 | 无 | 无 | 可选支持 |
| 用户标识 | 明文 | 明文 | 明文(首次接入) | 加密(SUCI) |
| 密钥架构 | 单层 | 简单分层 | 分层+KDF | 五级分层+锚定机制 |
值得玩味的是5G新增的"用户面完整性可选支持":以前大家默认"数据加密就够了",后来发现对物联网等场景,数据被篡改比被偷看更危险——一条被改过的遥控指令可能造成真实世界的破坏。所以5G第一次把用户面完整性保护列为可选能力,按需开启。
陷阱一:鉴权失败,先查SQN再查卡。 网关日志里看到认证失败,很多工程师第一反应是"卡坏了"或"核心网数据错了"。实际上最高频的原因是序列号失步:卡内计数与网络侧计数对不上。典型场景:物联网设备电池耗尽后长期离线、测试卡在多套环境间倒腾、甚至有些应急备份方案把卡数据回滚。处理路径是让终端发起重新同步,而不是急着换卡。判断技巧:失步类失败通常"第一次失败、紧接着重试成功",而密钥不一致类失败会稳定失败。
陷阱二:补卡之后旧设备离奇掉线。 根密钥K一换,旧卡即刻失效——这是设计使然而非故障。但现网常有人忽略"一号多卡"场景的连带影响:写卡时归属网侧副本已更新,所有旧卡的认证从此必然失败。遇到"换卡后老设备集体掉线"的工单,先查发卡记录。
陷阱三:把加密当安全全部。 排查空口安全问题时,很多同事只盯着加密算法开关。实际上完整性保护被关闭或降级的危害不亚于加密被破——信令被篡改可以直接把手机"骗"到攻击者控制的环境里。5G强制NAS完整性之后,这类配置检查点大大减少,但在4G/5G互操作的边界上,仍要留意安全能力协商的实际结果。
常见误解两则:其一,"手机Root了根密钥就泄露"——不对,K在SIM卡独立芯片里,手机操作系统Root到天上去也读不到卡内密钥,真正要防的是来路不明"预先写好K"的白卡和物联网卡。其二,"鉴权和基站时钟有关"——无关,认证的新鲜度靠序列号保证,不依赖墙上时间;基站同步问题影响的是空口帧收发,那是另一回事。
还有一个容易被忽略的设计红利:4G/5G互操作时,只要锚点密钥还在有效期内,核心网可以用既有密钥直接派生新场景的密钥,让终端免于重跑一次完整认证。这就是"锚点"二字的工程价值——既是安全的锚,也是移动性的锚。
Q: 5G-AKA和EAP-AKA'有什么区别?网络用哪个? A: 两者都是5G允许的认证方法,骨架相同(都验MAC、都查SQN、都派生锚点密钥),区别在外层包装:5G-AKA是一来一回的直答式,消息少、时延低;EAP-AKA'借用了一套成熟的通用认证框架,挑战应答要多走几轮,且把服务网络名掺入密钥派生。用哪种由运营商配置决定,具体行为以各网络官方资料为准。
Q: SUCI和5G-GUTI都是保护隐私的,区别是什么? A: 手段不同。SUCI靠加密:首次接入网络还不认识你时,把永久身份加密后再发,防的是身份明文暴露。5G-GUTI靠别名:注册成功后网络发一个临时身份,之后你一直用别名活动,防的是身份关联追踪。一个管"第一次见面不报真名",一个管"以后见面都用代号",两条防线互补。
Q: 根密钥K那么重要,它会被算出来或偷走吗? A: 卡内密钥从不出卡、只输出计算结果,外部拿不到原文;现代SIM的安全芯片还有防拆自毁设计。历史上2G的认证算法因设计缺陷可被"反复提问、统计分析"间接破解,这正是3G起彻底重做算法与流程的原因。真正现实的风险不是"算出来",而是归属数据库被整体攻破——所以运营商侧的防护等级远高于空口。
Q: 为什么我的物联网模块偶发鉴权失败,重试又好了? A: 大概率是SQN失步后触发了重新同步:第一次挑战因序列号对不上被拒,终端自动带上同步参数重试,第二次成功。如果重试仍稳定失败,再按"卡数据与归属网不一致"的方向排查,比如补卡后旧数据未同步、专网发卡流程出错等。
Q: 从4G切换到5G,密钥要重新认证一遍吗? A: 通常不用重跑完整认证。只要锚点密钥仍然有效,网络会用既有锚点直接派生新制式下的密钥,用户几乎无感。锚点失效或安全上下文丢失时,才会重新走一遍完整的挑战应答。这也是5G密钥分层设计的附带收益:换网络、换制式、换基站,各取所需地"从某一层重新派生",不必每次都惊动根密钥。
本文由「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 等场景全覆盖。
