2017年前后,国内外媒体多次报道过一类设备:一个背包大小的“伪基站”,往人群密集处一放,周围手机信号格突然从4格跌到1格再弹回来,随后手机收到一条“运营商官方号码”发来的钓鱼短信。这类设备有个学名,叫 IMSI Catcher(IMSI捕获器),业内也称"StingRay"(美国某厂商的产品名,后来成了这类设备的代称)。它的工作原理并不复杂,甚至可以说是踩着2G/3G/4G安全设计的三个“历史遗留”缺口走过来的:
要理解5G为什么让这类设备“大面积失业”,最好的办法不是背协议,而是顺着攻击者的思路走一遍,看看5G设计者在这三个缺口的每一个上面,各砌了一堵墙。这就是本文要讲的空口安全三道防线:SUCI身份隐藏、双向认证、强制完整性保护。
先把2G/4G时代伪基站的典型作案流程画出来,后面每一道防线,都是针对这个流程中某一步的精确反制。
sequenceDiagram
participant A as 攻击者(伪基站)
participant U as 受害手机
participant N as 真实运营商网络
A->>U: 1. 以超大功率广播"信号很强"的假小区
Note over U: 手机发现"信号更好"的小区<br/>重选/切换过去
U->>A: 2. 回复位置更新/接入请求
A->>U: 3. 发起身份请求(Identity Request)
U->>A: 4. 明文上报IMSI
Note over A: 攻击者完成目标识别/追踪<br/>或直接伪造短信下发
A-->>U: 5. 用假身份下发"10086"钓鱼短信
Note over N: 全程真实网络毫不知情<br/>手机可能被"吸走"脱离服务
注意几个关键点:伪基站的第一步永远是用功率欺负真基站——广播一个允许重选的更强信号,把手机“吸”过来;而第4步的明文IMSI,是整个攻击链的核心战利品。知道了IMSI,攻击者就能把“空口里那台匿名设备”和“某个具体的人”关联起来,这正是定位追踪类设备存在的意义。
理解了攻击,下面开始逐道拆解5G的防线。
5G之前的接入流程里,手机第一次出现在一个新网络面前,可能被要求上报SUPI(Subscription Permanent Identifier,用户永久标识,通常就是IMSI)。只要有一次明文上报,攻击就成功了。
5G的设计思路很直接:手机永远不在空口上报明文SUPI,上报的是SUCI(Subscription Concealed Identifier,用户隐藏标识)。SUCI的本质是:用归属运营商网络的公钥,对SUPI做了一次椭圆曲线加密(ECIES方案),只有归属网络手里对应的私钥能解开。
一个直白的类比:
你的身份证号(SUPI)不再直接示人,而是放进一个只有你户籍所在地公安分局能打开的保险箱(SUCI)里。路上任何人——包括你当前所在城市的外地网点——都只能转交这个保险箱,没有开箱能力。
这带来一个非常重要的架构含义:解密用户身份的权力,被唯一地收归归属网络。漫游时,拜访网络(VPLMN)即使拿到了SUCI,也解不开,必须原封不动转交给归属网络(HPLMN)的鉴权服务功能去处理。攻击者截获再多SUCI,拿到的也只是“一堆每次都可能不同的一次性信封”。
| 组成部分 | 内容 | 直觉理解 |
|---|---|---|
| SUPI类型 | IMSI / 网络标识等 | 说明信封里装的是哪种证件 |
| 归属网络标识(MCC+MNC) | 明文 | 信封上写着“投递到哪个公安分局” |
| 路由指示符 | 明文(可选) | 分局内部的“收发室分拣号” |
| 保护方案 | 通常为ECIES方案A/B | 声明“这个信封用的是什么锁” |
| ECIES归属网络公钥标识 | 明文 | 声明“用哪把公钥上的锁” |
| 加密后的 concealed 值 | 密文 | 真正的“箱内物品”,含临时公钥与密文 |
对比一下4G时代被诟病的场景,差异一目了然:
| 维度 | 4G(LTE)时代 | 5G时代 |
|---|---|---|
| 空口身份上报 | GUTI可用,但首次接入/寻呼不到时可被要求上报明文IMSI | 只上报SUCI,协议上不存在明文SUPI上报流程 |
| 截获后果 | 可直接关联到具体用户 | 得到一次性密文,无法关联 |
| 谁能解开身份 | 服务网络即可 | 仅归属网络持有私钥 |
| 临时身份机制 | GUTI(5G中对应5G-GUTI) | 5G-GUTI保留,SUCI作为兜底但已加密 |
椭圆曲线积分加密方案(ECIES)听起来唬人,拆开就是三步:
$$ \text{SharedSecret} = d_{UE} \times (k_{HN} \times G) \quad\Rightarrow\quad (K_{enc}, K_{mac}) = \text{KDF}(\text{SharedSecret}) $$
其中 $d_{UE}$ 是手机的一次性私钥,$k_{HN} \times G$ 是归属网络公钥($G$ 为椭圆曲线基点)。椭圆曲线的性质保证:攻击者即使同时看到两个公钥,也算不出共享秘密——这是椭圆曲线离散对数难题在保护你的每一次开机。
由于每次开机/注册手机都换新的临时密钥对,同一部手机每次注册产生的SUCI都不同——这直接废掉了“通过固定标识追踪特定用户”的攻击手法。
GSM以来的鉴权,逻辑上是“网络验你”:网络出一道题(随机数RAND),SIM卡用密钥K算出答案(RES),网络比对。整个过程里,手机对网络的身份验证非常有限——LTE时代虽然引入了AUTN令牌让USIM可以验证网络,但对“我当前驻留的这片信号到底是不是我的运营商”这个问题,协议层面始终留有模糊地带。伪基站正是活在这个模糊地带里:它不打算解开你的加密,它只是装得足够像,骗你把身份交出来、把消息收下去。
5G把这件事变成硬性规则:鉴权必须是双向的。以主流的5G-AKA为例,手机侧的USIM在收到网络下发的鉴权五元组后,会做三件事:
sequenceDiagram
participant U as UE(手机+USIM)
participant S as SEAF(拜访/服务网络)
participant H as AUSF/UDM(归属网络)
U->>S: 1. 注册请求(携带SUCI)
S->>H: 2. 转交SUCI请求鉴权材料
Note over H: 只有归属网络能解开SUCI<br/>还原出SUPI与根密钥K
H->>H: 3. 生成RAND+AUTN(含MAC/SQN)
H-->>S: 4. 下发鉴权向量(RAND,AUTN,XRES等)
S->>U: 5. 鉴权请求(RAND, AUTN)
Note over U: 6. USIM验MAC → 网络是真的?<br/>验SQN → 不是重放?
U->>U: 7. 用K算出RES与锚点密钥
U->>S: 8. 鉴权响应(RES)
S->>S: 9. 比对RES与H提供的期望值
Note over U,S: 10. 双方各自派生出锚点密钥KSEAF<br/>后续NAS/RRC/UP密钥全部由此派生
请把注意力放在第6步的注释框上——这是2G时代完全不存在、伪基站最恨的一步。手机第一次拥有了明确的、可执行的“质疑网络”的能力:验MAC不过→网络是假的;SQN异常→有人在重放旧信令。两种情况都会导致手机拒绝配合。
5G其实规定了两套双向认证方法:5G-AKA和EAP-AKA'。很多刚入行的同事会问:既然5G-AKA是4G-AKA的直系改良,为什么还要多一套EAP方法?理解设计意图比记住结论重要:
| 维度 | 5G-AKA | EAP-AKA' |
|---|---|---|
| 比对位置 | 服务网络(SEAF)比对RES | 归属网络主导、端到端比对 |
| UE对成功的确认 | 间接(安全激活成功即佐证) | 显式(收到EAP-Success) |
| 密钥锚定归属网络 | 是 | 是(且显式绑定网络名) |
| 对USIM的要求 | 4G USIM基本可用 | 4G USIM基本可用 |
| 典型取舍 | 快、信令省 | 逻辑更严密、归属网络掌控强 |
运营商现网以5G-AKA为主(省信令、快),EAP-AKA'多见于特定场景。两者都是双向认证——“伪基站能通过鉴权”这条路,无论哪套方法都被堵死了:它没有你的K,既算不出合法RES,也造不出能通过手机验证的AUTN。
很多人不知道,4G空口的用户面加密是可选的,用户面完整性保护则干脆没有——LTE只对信令(RRC/NAS)做完整性保护。这在当年被安全界反复批评:只要攻击者能物理上覆盖某片区域,理论上可以对用户面数据做篡改、注入、选择性丢弃而不被察觉。
5G把门彻底关上:用户面完整性保护成为强制能力,且所有安全激活必须先完整性、后加密。手机和网络的协议栈里,完整性保护开启后每一个PDCP PDU都带着MAC-I,接收方验算不过就丢弃并计数上报——篡改空口数据的代价从“无声无息”变成了“必然被发现”。
前面两道防线解决了“你是谁”“网络是真的吗”,第三道防线解决“从什么时候起、用什么算法保护空口”。这个过程由NAS安全模式命令(Security Mode Command)和AS安全模式命令两级流程完成,顺序是精心设计的:先NAS后AS,先完整性后加密。
flowchart TD
A[鉴权成功<br/>双方持有锚点密钥] --> B[网络根据UE上报的<br/>5G安全能力选择算法]
B --> C[NAS安全模式命令<br/>携带选中的NIA/NEA算法+重放的完整注册请求]
C --> D{UE验证NAS-MAC<br/>并核对收到的安全能力与自己发出的一致?}
D -- 不一致: 疑似中间人篡改<br/>拒绝并释放 --> X[注册失败]
D -- 一致 --> E[开启NAS完整性保护+加密<br/>上行/下行NAS信令受保护]
E --> F[AS安全模式命令<br/>RRC层算法激活]
F --> G{RRC MAC验证通过?}
G -- 否 --> X
G -- 是 --> H[RRC完整性+SRB加密开启]
H --> I[DRB用户面加密开启<br/>UP完整性按需/协商开启]
I --> J[空口三面受保护:<br/>NAS信令 / RRC信令 / 用户面数据]
这个流程里藏着一个精妙的防中间人细节:NAS安全模式命令中会把UE此前上报的“5G安全能力”(即这台手机支持哪些加密/完整性算法)原样带回来,UE必须核对自己当初发的能力列表和现在收到的是否一致。为什么?因为在没有安全保护的“裸奔窗口期”,攻击者可能篡改能力列表——逼你降级到弱算法甚至“零算法”。带回校验这个动作,把这个降级攻击的口子也焊死了。
5G空口算法成对出现:NEA(加密算法)和NIA(完整性算法),同族编号:
| 算法 | 全称 | 说明 |
|---|---|---|
| NEA0 / NIA0 | 空算法 | 加密为“不加密”(受严格策略限制);完整性无NIA0空转用于受保护面 |
| NEA1 / NIA1 | SNOW 3G | 3G时代延续的流密码家族,兼容老芯片 |
| NEA2 / NIA2 | AES(CMOA/CTR模式组合) | 主力算法,现网大多数设备首选 |
| NEA3 / NIA3 | ZUC(祖冲之算法) | 中国自主设计的流密码,与SNOW 3G同代际强度 |
网络按“双方都支持的最强算法”原则选择。这里有个现网实战中非常经典的坑,放在后文调试陷阱里讲。
加密和完整性保护都依赖一个单调递增的计数器——COUNT(NAS层与PDCP层各有,由PDCP序列号加超帧号等高位拼接而成)。它的作用类似快递单号:每一个受保护的PDU都有唯一编号,接收方校验编号的连续性与单调性。
flowchart TD
subgraph 攻击手法
A1[截获用户身份<br/>定位追踪]
A2[伪装网络<br/>骗取信任/下发钓鱼]
A3[篡改/注入/重放<br/>空口数据]
end
subgraph 5G三道防线
B1[SUCI<br/>椭圆曲线一次性加密信封]
B2[双向认证<br/>5G-AKA / EAP-AKA']
B3[强制完整性+加密<br/>算法协商+COUNT防重放]
end
A1 -.被瓦解.-> B1
A2 -.被瓦解.-> B2
A3 -.被瓦解.-> B3
B1 --> B2 --> B3
B3 --> Z((伪基站攻击链断裂))
三道防线不是并列选项,而是串联的必要条件:没有SUCI,伪基站至少还能干“追踪器”的老本行;没有双向认证,手机会被吸到假小区里失去服务;没有强制完整性,前两道防线的成果可以被数据层面的篡改绕开一部分。这就是5G安全“纵深防御”设计的直观体现。
1. 抓包看注册流程时,你要能认出SUCI。 用抓包工具分析5G注册(Registration Request)时,常见的“怪现象”是:同一个用户每次注册,身份字段内容都不一样——这不是异常,正是SUCI的一次性临时密钥在起作用。如果你看到某些终端在Registration Request里“意外地”携带了明文形式的标识,那大概率是终端实现问题或特殊类型标识(如使用网络提供的5G-GUTI则本就是临时身份)。
2. 排查“安全模式失败”类接入问题。 现网接入失败中有一类根因是算法协商不匹配:核心网/基站按运营商安全策略只允许NEA2/NIA2起步,而这台终端(常见于行业模组、早期芯片)只实现了NEA1/NIA1,双方找不到交集,安全模式命令被拒或终端直接释放。判定思路:看失败发生在NAS SMC还是AS SMC,再看两侧能力列表的交集——这就是第5.2节那张流程图的工程价值。
3. “先完整性后加密”不是教条,是调试线索。 如果排查中发现在信令能走到安全激活、但激活后立即异常的案例,优先检查完整性保护配置(NIA是否配成无效值、USIM算法能力)再查加密——因为按协议时序,完整性验证失败会直接终止流程,根本轮不到加密生效。
4. USIM的“5G就绪”问题。 部分老卡在5G网络下鉴权异常,本质是卡内算法/鉴权能力问题。这也解释了为什么换5G手机有时还需要换卡——不是营销话术,而是双向认证和SUCI计算都需要USIM具备相应算力与密钥管理能力。
常见调试陷阱: - 把“SUCI每次都变”误判为身份异常,发起不必要的投诉排查; - 在实验室把NEA0(不加密)当调试捷径长期开启,忘了生产网安全策略会直接拒绝降级终端; - 忽略安全能力列表篡改校验这一机制,把终端被拒误诊为无线覆盖问题。
教科书式的三道防线讲完了,但一个面向工程师的科普有责任指出边界:
Q1: SUCI和5G-GUTI都是“临时身份”,它们是一回事吗? A: 不是,而且区别很关键。5G-GUTI是网络分配的临时标识,用于已注册用户后续交互时避免暴露永久身份,类似4G的GUTI;SUCI是手机自己用归属网络公钥加密生成的,主要用于初始注册、网络拿不到有效GUTI时的场景。GUTI明文传输但本身随机、可被网络随时更换;SUCI连“关联到某个长期固定值”的可能性都被加密消除了,两者是互补而非替代关系。
Q2: 伪基站既然不能通过鉴权,那它广播的信号为什么手机还会看到? A: 广播(小区选择/重选阶段)本来就不需要鉴权——手机读系统消息、比较信号强度是物理层和RRC层的动作,发生在任何安全流程之前。5G防线的意义在于:手机即使驻留上了假小区,后续的注册/鉴权也会失败,手机随即拒绝并重选,攻击者得不到身份、发不出(会被验证的)合法信令。也就是说,5G不能阻止伪基站“喊话”,但能保证手机“不信、不答、不泄露”。
Q3: 用户面完整性保护既然这么好,为什么现网常常默认不启用? A: 它是强制能力、按需启用。原因很实际:完整性校验要求PDCP层对每个用户面包做MAC计算与比对,对基带处理能力有额外开销,而绝大多数空口篡改攻击在运营商组网下威胁有限(空口加密已经覆盖了窃听面)。所以典型策略是:默认开启加密、完整性保护按网络策略对特定5QI(如高安全需求业务)启用。调试时如果发现某业务延迟略高于预期,可以查一下UP完整性是否被开启。
Q4: 5G-AKA和EAP-AKA',运营商会怎么选? A: 主流公网以5G-AKA为主:信令轮次少、时延低,对海量移动宽带用户足够。EAP-AKA'的价值在于归属网络主导性和显式成功确认,常见于对安全等级要求更高的场景(如部分物联网、与企业专线/切片相关的接入)。对工程师来说,两者在抓包中的信令形态完全不同(后者带EAP消息封装),排查鉴权问题时要先分清现网用的是哪套。
Q5: 手机怎么知道该用归属运营商的哪把公钥加密SUCI? A: 卡和网里都存了“钥匙柜清单”:USIM里预置(或由归属网络通过OTA更新)一组“公钥标识→公钥”的映射,网络侧广播的系统中也带有当前使用的保护方案与公钥标识。手机加密时在SUCI头部写明“我用了哪把锁”,归属网络按标识取对应私钥解密。如果两边清单不同步(比如新发卡用户碰到老版本网络配置),就会出现解密失败导致的注册失败——这是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 等场景全覆盖。
