想象一个场景:你走进车站广场,兜里的手机信号格从4格跳到5格——你并不知道,旁边一辆面包车里,一台设备刚刚伪装成了一座基站,你的手机“择优注册”,主动向它报出了你的永久身份。从此你的行踪、通话、短信都可能被拦截。这不是电影桥段,而是移动通信行业纠缠了三十年的真实攻防,设备名称叫 IMSI Catcher(IMSI捕手),也称为“伪基站”或“基站模拟器”。
它之所以能得手,根源不是某个实现漏洞,而是2G时代立下的一条设计假设:网络是可信的,手机必须无条件向网络证明“我是谁”,而网络无需向手机证明“我是真网络”。4G对此打了补丁但没除根,直到5G引入了 SUCI(Subscription Concealed Identifier,签约隐藏标识符),用户的永久身份才第一次真正实现了“空中接口不上明文”。
这篇文章要讲清楚三件事:过去四代网络里你的身份是怎么“裸奔”的;SUCI用什么密码学手段把身份“锁进保险箱”;以及为什么它选择公钥加密这条看似“绕远”的路。
每张SIM/USIM卡里都刻着一个全球唯一的号码——IMSI(International Mobile Subscriber Identity,国际移动用户识别码),最长15位数字。它的结构是三层:
| 字段 | 长度 | 含义 | 例子 |
|---|---|---|---|
| MCC | 3位 | 移动国家码,如460=中国 | 460 |
| MNC | 2-3位 | 移动网络码,区分运营商 | 00 / 01 / 07 |
| MSIN | 9-10位 | 用户号,真正标识“你”的部分 | XXXXXXXXXX |
前5-6位(MCC+MNC)合起来相当于“身份证前六位的地区码”,作用是路由:告诉全球任何一个网络“这个用户归属于哪个运营商”,以便把认证请求转回归属网络。MSIN则是归属运营商内部定位你这份签约数据的“门牌号”。
问题在于:这张“身份证”在2G、3G、4G的空中接口上,相当多的场景下是明文飞行的。
手机不可能每条信令都带IMSI,否则等于给窃听者发广播。所以每代网络都设计了临时身份:2G叫TMSI,4G叫GUTI(实际下发时叫M-TMSI),5G叫5G-GUTI。逻辑是:运营商通过专用信令把一个随机临时号发给手机,此后寻呼、位置更新都用临时号,定期更换,让窃听者无法把无线信号和“你这个人”对上号。
但临时身份有个先有鸡还是先有蛋的问题:手机开机第一次入网、或临时身份失效/更换归属地时,手上根本没有可用的临时号,只能报真名。在4G及以前,这个“真名”就是明文IMSI。更糟的是,标准允许网络随时发一条身份请求(Identity Request)信令,要求手机交出IMSI,手机必须服从——这条设计本意是方便合法的故障恢复,却成了伪基站最顺手的武器。
flowchart TD
A["伪基站以大功率开机"] --> B["手机按信号强度择优"]
B --> C["手机向伪基站发起注册"]
C --> D["伪基站发身份请求命令"]
D --> E["手机被迫上报明文IMSI"]
E --> F["攻击者获得永久身份"]
F --> G["跟踪位置或拦截通信"]
C --> H["真基站信号被压制"]
H --> I["区域内用户全部脱网"]
整个攻击利用的是三重不对称:
3G(UMTS)时代引入了双向认证:网络必须出示一张基于运营商根密钥计算的“签名”(认证令牌中的MAC验证),手机用USIM里存的根密钥验证,验不过就拒绝接入。这一招在密码学上确实杀死了“纯2G式伪基站”——假基站拿不出正确的令牌。维基百科IMSI-catcher词条对此的表述是:3G标准通过双向认证消除了GSM的假基站攻击。
但补丁没堵死门:降级攻击(Downgrade Attack)。3G/4G网络为了兼容覆盖,允许回落到2G。攻击者干扰掉3G/4G信号,把手机逼回2G模式,老剧本重新上演。2015年一篇公开发表的学术论文(Shaik等人,arXiv编号1510.07563)系统性展示了4G/LTE现实中可实施的隐私攻击:初始附着时明文IMSI仍然可截获,配合无防护的寻呼消息,可以对任意用户做位置跟踪。换句话说,直到4G时代,你的永久身份在空口上依然存在“裸奔窗口期”。
flowchart TD
A["攻击者干扰3G与4G频段"] --> B["手机搜不到高速网络"]
B --> C["手机回落到2G小区"]
C --> D["伪基站以2G身份接网"]
D --> E["2G无双向认证机制"]
E --> F["手机交出明文IMSI"]
F --> G["身份攻击再次得手"]
5G的安全架构针对这个问题给出的方案是釜底抽薪,思路可以概括为两条:能不报真名就不报(临时标识策略),必须报真名时报密文(加密永久标识)。
第一条是演进而非革命:5G-GUTI机制照常工作,日常的寻呼、更新全部用临时号。真正的革命在第二条。5G规定:凡是手机必须上报永久身份的时刻,上报的不再是明文SUPI(Subscription Permanent Identifier,签约永久标识,内容上可以理解为IMSI),而必须是SUCI——把SUPI加密后的密文。网络侧没有任何信令能强制手机交出明文身份,这条“身份请求后门”在5G里被正式关死(仅在无卡紧急呼叫等特殊场景允许例外,见后文)。
SUCI不是把整个IMSI加密后一糊了事,而是一条精心分段的消息:
| 字段 | 加密与否 | 作用 |
|---|---|---|
| MCC + MNC | 明文 | 归属国/运营商码,供全网路由,必须可见 |
| 路由指示符 | 明文 | 4位数字,帮归属网把解密请求送到正确的处理单元 |
| 保护方案ID | 明文 | 声明用的是哪种加密方案(含“不加密”的选项) |
| 归属网公钥ID | 明文 | 告诉归属网“我用的是你哪一把公钥加密的” |
| 方案输出 | 密文 | 真正的保险箱:加密后的MSIN+校验标签 |
注意一个反直觉的设计:加密的只有MSIN,国家码和网络码是明文。为什么?因为SUCI要穿越访问网络、漫游网络,最终送达归属运营商,一路上每个节点都需要根据MCC/MNC完成路由——隐私的目标是“防止世界知道你是谁”,而不是“防止世界知道你是哪个运营商的客户”。该保密的部分一bit不漏,该路由的部分一字不改。这是安全设计里“最小暴露面”原则的教科书案例。
加密需要一个只有归属运营商能解开的锁。5G的做法是:归属运营商生成一对椭圆曲线公私钥,私钥留在归属网络(UDM的一个专用解密功能模块)里,公钥连同一个编号(公钥ID)预置到每张5G USIM卡中。一个运营商可以同时启用多对密钥(编号1到255),用于密钥轮换:换钥匙时新卡配新钥,老卡继续用老钥,平滑过渡。
为什么必须预置在卡里而不是由网络下发?因为下发公钥的信道本身可能被伪基站污染——如果手机开机后先向网络“要公钥”,伪基站可以递上一把自己做手脚的钥匙,加密就形同虚设。把公钥和IMSI一起刻在卡的出厂文件里,等于把信任锚前移到了发卡环节,攻击者无从插手。
5G身份保护采用的加密框架叫 ECIES(Elliptic Curve Integrated Encryption Scheme,椭圆曲线综合加密方案),标准允许两种具体曲线实现(业界常称Profile A与Profile B,分别基于两种主流椭圆曲线)以及一种不加密的空方案。整个流程可以用一个生活类比理解:寄一件贵重物品,收件人 публиkey是挂在大门上的“公共信箱”,谁都能往里投,但只有收件人手里有开箱钥匙。
完整流程如下面这张时序图——注意参与者恰好覆盖“手机到归属网”这条最短路径:
sequenceDiagram
participant UE as 手机USIM
participant AN as 访问网络
participant HN as 归属网络UDM
Note over UE: 生成临时密钥对
UE->>UE: 临时私钥加归属网公钥<br/>算出共享秘密
UE->>UE: 派生加密钥与校验钥<br/>加密MSIN得密文
UE->>AN: 注册请求携带SUCI
AN->>HN: 转发SUCI寻址归属网
Note over HN: 用公钥ID选中私钥
HN->>HN: 重算共享秘密并解密<br/>验校验标签得MSIN
HN-->>AN: 后续按签约数据继续认证
把它拆成数学步骤。设手机侧临时私钥为 $d_U$、对应临时公钥 $P_U = d_U \cdot G$,归属网公钥为 $P_H$(私钥 $d_H$):
第一步:算共享秘密。 手机用自己临时私钥乘上归属网公钥: $$Z = d_U \times P_H$$
椭圆曲线的巧妙之处在于,归属网侧用自己的私钥乘上收到的临时公钥,得到的是同一个点: $$d_H \times P_U = d_H \times (d_U \cdot G) = d_U \times (d_H \cdot G) = d_H \times P_H = Z$$
两端各自只用了“自己的私钥+对方的公钥”,就在不安全的信道上算出了同一个秘密 $Z$——窃听者即使把临时公钥、归属网公钥全部抄走,要从公钥反推私钥(椭圆曲线离散对数问题)在计算上不可行。
第二步:派生工作密钥。 共享秘密不直接加密数据,而是先通过密钥派生函数拉出两把分工明确的钥匙: $$(K_{enc}, K_{mac}) = \text{KDF}(Z, \text{公开参数})$$
第三步:加密加签。 MSIN用对称加密算法卷起来,再算一个完整性校验标签防篡改: $$C = \text{AES}(K_{enc}, \text{MSIN}),\quad T = \text{MAC}(K_{mac}, C)$$
第四步:组装发送。 临时公钥 $P_U$、密文 $C$、标签 $T$ 一起装进SUCI的“方案输出”字段,连同明文的路由字段发上天空。
归属网收到后反向操作:用公钥ID找到对应私钥 $d_H$,重算 $Z$,派生同一对工作密钥,验证标签确认密文没被改过,解出MSIN,拼回完整SUPI,认证流程才得以继续。
这里有个精妙之处:临时密钥对是每次注册随机生成的,用完即弃。这意味着同一个用户在两个不同时刻上报的两个SUCI,在密码学上没有任何关联——密文不同、临时公钥不同,连校验标签都不同。被动窃听者录下你今天上午在A市注册的SUCI和下午在B市的SUCI,无法判断这出自同一部手机。这个性质叫不可链接性(unlinkability),它把4G时代“抓一次明文终身标记你”的攻击模型,直接升级成“每次都要重新攻克一次密码学”。
如果用对称加密行不行?不行,而且失败方式很优雅:对称加密要求加密方和解密方预先共享同一把钥匙。手机还没有通过认证,网络没有安全渠道把钥匙安全地交给它——伪基站正卡在这个空档。而公钥体制的本质优势恰恰是:加密能力(公钥)可以公开,解密能力(私钥)永不离网。加密前不需要任何认证和协商,这正是“第一个消息就该被保护”场景唯一适配的工具。
标准保留了一个“不加密”的保护方案ID,也就是空方案。它只允许在两种情况出现:卡里没有预置归属网公钥的测试场景,以及无卡紧急呼叫——没有USIM就没有公钥,物理上无从加密,此时SUCI退化为明文。这可以看作安全设计里的“诚实降级”:与其发明一个脆弱的伪保护,不如明示这一格没有锁,并把它限制在“本就不携带用户签约身份”的场合。
反过来说,对正常注册,5G网络收到保护方案ID为空、却带签约身份的注册请求时,应当视为异常——这也是现网安全审计的一个检查点。
| 能力 | 2G/GSM | 3G/UMTS | 4G/LTE | 5G/NR |
|---|---|---|---|---|
| 临时身份 | TMSI | P-TMSI | GUTI | 5G-GUTI |
| 双向认证 | 无 | 有 | 有 | 有 |
| 信令完整性保护 | 无 | 有 | 有 | 有 |
| 永久身份空口加密 | 明文 | 明文 | 明文 | 密文(强制) |
| 网络可强制索要明文身份 | 可以 | 可以 | 可以 | 不可以 |
| 每次身份消息可关联 | — | — | 可关联 | 不可链接 |
从这张表可以看清5G安全演进的真实分量:双向认证、完整性保护都不是5G首创,5G补上的正是4G遗留的最后一块短板——身份隐私。用安全工程的语言说,前几代网络保护的是“通信内容”,5G第一次系统性保护了“通信者本身”。
抓包时的样子。 在5G实测环境里抓NAS层信令,注册请求(Registration Request)中的 mobileIdentity 信息单元,如果类型是SUCI,你会看到一串结构化字段:路由指示符、保护方案ID、公钥ID,后面跟着一段长度可观的密文——其中还包含临时公钥。如果你抓到的注册请求里保护方案ID是0(空方案)而UE明明插着5G卡,大概率是开卡数据配错了:公钥没有写入USIM的专用文件,这是现网开卡流程最常见的翻车点之一。
注册失败的排查思路。 若核心网侧解密SUCI失败(表现为认证流程根本走不起来),排查顺序是:卡的公钥ID与归属网配置的私钥ID是否对得上——运营商有多对密钥轮换时尤其容易错位;其次是两侧椭圆曲线规格是否一致,Profile A与Profile B互不相通。
调试与安全的边界。 测试环境为了图省事,有时会全网配置成空方案跑流程。要警惕这种配置污染生产:它等于把5G最核心的隐私改进整个关掉,而且肉眼看起来一切正常——信令照样通、认证照样过,只有安全审计时才会暴露。
一个常见误解。 很多初学者以为“SUCI=加密的5G-GUTI”。方向完全反了:GUTI是网络发给你的临时工牌(替代方案,靠保密发放和定期更换保护你),SUCI是你身份证的密文(最终兜底方案,靠密码学保护你)。临时工牌丢了或还没发的时候,才需要掏出密文身份证;两者是互补关系,不是同一件东西的两种叫法。
另一个误解。 “有了SUCI,伪基站就绝迹了。”SUCI封死的是获取明文永久身份这条路。一个5G伪基站仍然可以广播强信号骗手机来注册(哪怕认证失败,注册尝试这个行为本身就泄露了“这里有部手机”),也可以做压制干扰。安全标准消灭的是特定攻击模型(窃取身份),而不是攻击者。这也是为什么在5G时代,干扰监测和小区指纹校验等非密码学手段依然有存在价值。
Q: SUCI和SUPI的区别是什么? A: SUPI是签约永久标识,是“你是谁”的真名(可以是IMSI格式,也可以是网络域格式);SUCI是把SUPI中真正敏感的部分(用户号MSIN)用归属运营商公钥加密后的密文,可理解为“真名的密封信封”。网络上跑的永远是信封,只有归属网络握有拆信的私钥。
Q: 为什么MCC/MNC不加密? A: 因为它们承担路由功能:SUCI要从访问网络一路送到归属网络,沿途每个节点都要靠这两段码寻址。隐私设计的目标是隐藏“你是谁”,而非隐藏“你用哪家运营商”——后者从你连上基站广播的公共陆地移动网络码那一刻就已经可知了。
Q: 4G手机在4G网络里也用SUCI吗? A: 不用。SUCI是5G系统引入的机制,4G的附着流程仍然可能在初始注册时传输明文IMSI。用户在4G/5G混合网络下回落到4G驻留时,身份保护退回4G水平——这是当前现网中身份隐私仍存在的真实边界。
Q: 公钥泄露了怎么办? A: 公钥本来就是公开信息,泄露无碍。真正要保护的是归属网络的私钥;运营商可以通过编号机制部署多对密钥,新卡用新钥,实现轮换而不需要全网换卡。
Q: 伪基站拿了SUCI还有什么用? A: 几乎没用。SUCI每次注册都使用新生成的临时密钥对,同一个人不同时间的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 等场景全覆盖。
