谍战片里有个经典桥段:地下党接头,双方先对暗号。你说“天王盖地虎”,我答得上来,说明是自己人;答不上来,扭头就走。但对暗号有个容易被忽略的细节——暗号是双向对的。你考我一题,我也考你一题,两边都对上了,才能坐下来谈事。
移动网络里,手机和基站之间每天都在上演这场接头。空气中的电磁波谁都能听、谁都能发,一张“假基站”的发射功率可以轻松盖过真基站,手机根本分不清对面是官军还是山贼。认证(Authentication)就是这套接头暗号制度:手机要向网络证明“我是我这张卡”,网络也要向手机证明“我是真网络,不是伪基站”。这套机制的名字叫 AKA(Authentication and Key Agreement,认证与密钥协商)——一次成功的认证,顺带谈成一批后续通话用的会话密钥,一举两得。
理解AKA,只需要回答三个问题:怎么证明身份而不泄露密码?怎么防止偷听的人拿旧录像带冒充?为什么5G要同时保留两种认证流程? 本文就沿着这三个问题展开。
先看反面教材。2G时代的认证是单向的:只有网络验手机,手机无条件信任网络。流程相当于车站查票——验票员有权查你,你却没资格查验票员的工作证。
这个设计在当年情有可原:2G 网络 etat 由运营商垄断建设,谁能想到有人会架假基站?但伪基站很快教做人:架一个功率更大的发射机,广播一个看起来合法的信号,手机“啪”地接入,然后你的短信验证码、IMSI 号码就被收割了。单向认证的致命伤在于:手机没有追问“你是谁”的权利。
于是从3G起, Cellular 网络把认证升级为双向:网络验手机,手机也验网络。5G 把这个思路推到极致——不仅双向,还把“验手机”的核对权收到家乡网络手里,不让拜访地的设备代劳。这一路的演进,可以看下面这张角色分工图:
flowchart TD
UE["手机与USIM卡<br/>藏着根密钥K"] -->|用SUCI假名报到| NB["基站<br/>只搬运认证消息"]
NB -->|转发挑战与响应| AMF["AMF保安队长<br/>服务网络的门卫"]
AMF -->|请求发起认证| AUSF["AUSF认证官<br/>家乡网络派驻"]
AUSF -->|按需领取考题| UDM["UDM档案室<br/>存着每张卡的底档"]
注意一个反直觉的细节:基站不参与认证。它只是个传话的,真正的考生(手机)、监考(AMF)、出题和判卷(家乡网络的AUSF/UDM)都在两头。这正是“伪基站再强,也过不了判卷这一关”的底气所在。
认证的根本难题是:手机和网络共享一个秘密(根密钥K,128位,焊在USIM卡里),但这个K绝不能在空气里传输——发出去就等于把密码广播给全世界。怎么办?
答案是挑战-响应(Challenge-Response),直觉类比:老师不问你“你的密码是什么”,而是随口出一道题:“把我俩共用的密码和这个随机数揉在一起,算出来的结果是什么?”真学霸(有K的卡)三秒报出答案;冒牌货没有K,只能瞎蒙。题目本身公开无妨,答案只有掌握K的人算得出来。
具体流程用公式表达。网络侧生成一个128位随机数 RAND(考题),卡内用一族共享的函数 f1~f5(可以理解为同一个单向函数的五个变体)计算:
$$RES = f2_K(RAND)$$ $$CK = f3_K(RAND), \quad IK = f4_K(RAND)$$
其中 RES 是答案(响应),CK/IK 是顺手生成的加密密钥和完整性密钥——这就是“密钥协商”四个字的由来:认证一次,密钥白送一批,且这批密钥从未在空中出现过。网络侧用同样的函数预演一遍,得出期望答案 XRES;收到手机回传的 RES 后一对,对上了,验明正身。
对 K 和 RAND 的依赖保证了:随机数每次都不同,所以每次的 RES、CK、IK 也都不同。上一场的答案,抄到这一场不好使。
双向认证的关键在于反向那半场:手机怎么验网络? 总不能网络也报个答案让手机判卷——手机卡里算力有限,而且网络答案要是错了,手机也不知道正确答案长什么样。
实际做法很聪明:网络发来的挑战不只有 RAND,还附带一个认证令牌 AUTN。它是网络用 K 对 RAND 和流水号计算的“防伪水印”:
$$AUTN = (SQN \oplus AK) \,|\, AMF \,|\, MAC$$
拆开看三件套:
手机卡收到挑战后做三件事:复算 MAC 对不对、SQN 是不是在合理范围内、然后算 RES 回传。三关全过,认证成功,双方各自从 CK/IK 继续派生后续加密用的密钥——从此这条无线链路说的话,只有我们俩听得懂。
有了挑战-响应和 MAC,就安全了吗?还差一步。想象攻击者录下一次完整认证的全过程(RAND、AUTN、RES 全都在空气里飘着),然后对着手机原样重播一遍。RAND 和 AUTN 都是真的,手机复算 MAC 必然通过——除非它能认出“这道题我做过”。
这就是 SQN 流水号的使命。它像电影票的场次编号:每场考试发一个新号,手机卡记着自己“看过第几场”。网络每次出题,流水号必须比上次更新;手机卡收到旧票根,直接识破重放。
工程上不能要求两边计数器永远严丝合缝——消息可能乱序、设备可能重启,所以标准给了一个容错窗口:手机只接受窗口范围内的流水号。麻烦也出在这个窗口上:如果手机卡长期离网(关机半年、或者换卡测试时计数被回滚),网络侧的 SQN 已经跑出窗口,认证就会连续失步。这时手机不会硬吃挑战,而是回一个特殊的同步失败消息 AUTS——里面是卡用 K 算出的加密计数信息,家乡档案室解开后把流水号拨回来,重新出题:
sequenceDiagram
participant C as USIM卡
participant A as AMF
participant D as 家乡档案室
D->>C: 挑战带旧流水号
C->>C: 发现流水号偏出窗口
C-->>A: 回AUTS同步失败
A->>D: 转交AUTS
D->>D: 解开AUTS校准计数器
D->>C: 用新流水号重新出题
C-->>A: 这次对上了
AUTS 的精妙之处在于:连“我们没对上表”这件事本身,都要带上防伪水印。没有 K 的攻击者伪造不了 AUTS,所以不能利用同步失败流程来套取信息。
4G及之前有个微妙的漏洞:家乡档案室把考题和标准答案(XRES)一起发给拜访地的服务网络,由拜访地自行核对 RES。也就是说,家乡网络必须信任拜访网络会诚实判卷。拜访网若作恶(或被入侵),可以放过一个假手机。
5G 的修正很直接:判卷权收回家乡。服务网络只负责传话,RES 一路交回家乡的 AUSF,由家乡比对(比对用的期望值经过变换处理,连答案都不再裸奔)。伪基站就算骗过了空口的手机,也过不了家乡判卷这一关——而它拿不到合法的 K,响应永远是错的。
5G 认证有个让新手困惑的设计:为什么有两种认证方法? 简单说,3GPP 把“怎么考”开放成两种口味,由家乡网络按场景选择:
EAP-AKA' 名字里那一撇(撇号)不是装饰,它对应一次实质性的安全升级:密钥锚定到服务网络的名字。推导会话密钥时,把“本次认证发生在哪个接入网络”的名字一并掺进去算。这样即使某地接入网的密钥泄露,这批密钥拿到别的网络也毫无用处——一钥一考场,钥匙串不出门。同时它把摘要算法从SHA-1换成了SHA-256,并要求挑战里的 AMF 分离位必须置1,手机会核对这一位,防止新旧流程混用造成降级攻击。
两者还有一个行为差异值得记住:EAP-AKA' 有显式的成功回执。服务器核对完响应后发出的 EAP-Success 消息带着消息认证码,手机验过才安心;而 5G-AKA 里手机交完卷子,判卷在家乡网络悄悄完成,手机收不到“家乡确实核对了”的凭证——理论上存在“网络收了卷子却没判”的模糊空间。这正是有研究建议优先使用 EAP-AKA' 的原因之一。
flowchart TD
subgraph M1["5G-AKA"]
A1["家乡生成考题"] --> B1["手机验证防伪水印"]
B1 --> C1["家乡判卷<br/>但手机收不到回执"]
end
subgraph M2["EAP-AKA'"]
D1["密钥锚定考场名字"] --> E1["手机验证防伪水印"]
E1 --> F1["EAP-Success带校验码<br/>手机确认判卷完成"]
end
| 维度 | 2G | 3G/4G | 5G |
|---|---|---|---|
| 认证方向 | 单向,只验手机 | 双向 | 双向 |
| 根密钥 | Ki(SIM卡) | K,128位(USIM) | K,128位(USIM) |
| 防重放 | 无 | SQN流水号+窗口 | SQN流水号+窗口 |
| 身份隐私 | IMSI明文上空 | 临时身份,首报可能明文 | SUCI加密身份 |
| 判卷位置 | 拜访网络自判 | 家乡发答案,拜访地判 | 判卷权收回家乡 |
| 流程形态 | 一种 | 一种 | 5G-AKA 与 EAP-AKA' 双轨 |
现网排障时,认证环节是注册失败的高发区。下面这张排查表覆盖了最常见的几类坑:
| 现象 | 常见根因 | 排查动作 |
|---|---|---|
| MAC校验失败 | 卡内K/OPc与档案数据不一致 | 核对写卡参数与开档录入 |
| 响应不匹配 | 双卡同号、写卡算法变体错 | 查是否一号多卡、算法配置 |
| SQN失步刷屏 | 测试卡计数回滚、卡被复制 | 统计AUTS占比,必要时校准 |
| 认证通过但加密起不来 | 密钥派生上下文不一致 | 核对网络名拼接与AMF标志位 |
几个容易踩的调试陷阱:
第一,别把SQN失步当成卡坏了。 实验室里反复回滚USIM(比如用写卡工具重置测试环境)是SQN失步的头号原因,现象是手机反复收到挑战、反复回 AUTS。看信令里 AUTS 出现的频率,比换卡更能定位问题。
第二,认证成功不等于一切正常。 认证只是协商出密钥,后续每个信令消息还带完整性保护、用户数据另走加密。见过“认证通过但注册卡住”的案例,最后发现是完整性保护参数没对齐——链条断在认证之后的下一环。
第三,认证机制防伪基站,但不是万能罩。 2018年有研究团队报告了针对3G到5G所有AKA变体的隐私攻击:攻击者不需要破解任何密钥,只要故意发出一个损坏的挑战,观察手机是“卡还没算就拒绝”还是“算完才拒绝”,就能把换了假名的同一部手机认出来,实现追踪。也就是说,认证保护的是身份不被冒用,不承诺每一次交互都不留破绽——这也是标准仍在持续打补丁的原因。防护的现实做法是运营侧禁止回落到无双向认证的老网络、手机侧收紧对异常挑战的处理策略。
第四,私有网络测试别忘了认证的“户口”性质。 自建5G核心网做试验时,最常见的一类注册失败就是卡与网络两侧的根密钥或算法变体没对齐——AKA是纯对称体制,两边差一位,认证必挂,而且报错不会告诉你是哪一位差了(否则等于给攻击者提示)。这种“沉默的失败”要有心理预期,逐参数比对是唯一路径。
Q: 5G-AKA 和 EAP-AKA' 该怎么选? A: 主体上不是你选,是家乡网络按接入类型定:普通5G基站接入默认走5G-AKA,非3GPP接入(经隧道网关进核心网的WiFi等)走EAP-AKA'。从安全特性讲,EAP-AKA'多了考场绑定和显式回执,理论上更完备;5G-AKA胜在消息紧凑。两者共享同一套卡内算法,卡不感知差异。
Q: AUTN 和 RES 都是对答案,有什么区别? A: 方向相反。RES 是手机算给网络看的,证明“我有K”;AUTN 是网络算给手机看的,证明“网络也有K”。同一个K、同一个RAND,两侧各自消费对方的产出——这就是“双向”两个字的全部实现。
Q: SUCI 加密身份和 AKA 认证是什么关系? A: 前后脚的两件事。SUCI 解决“报到时不暴露真名”(用家乡网络公钥加密IMSI),AKA 解决“验明正身并协商密钥”。SUCI 里不包含认证——它防窥探不防伪造,伪造身份照样过不了AKA的K这一关。两者合起来才是完整的入网安全。
Q: 为什么手机验网络不直接让网络也回一个RES? A: 因为卡的算力和存储有限,且手机端没有地方安全存放“标准答案”。AUTN 的设计让手机只做一件事——用自己的K复算MAC——就把“验网络”和“防重放”一并完成,不需要任何额外存储,这正是挑战-响应设计的巧劲。
Q: 认证成功后,之前那次通话的密钥还能用吗? A: 不能。每次认证的RAND不同,派生的会话密钥就不同;即便不重新认证,密钥也有使用期限和流量阈值,到期触发重认证。密钥“一次性”是设计使然,丢了旧密钥的攻击者拿不到新会话的门票。
本文由「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 等场景全覆盖。
