首页 › deep-tech › 身份不再裸奔:SUCI原理

你的身份为何不再裸奔:SUCI加密原理

从一桩“合法窃听”说起

想象一个场景:你走进车站广场,兜里的手机信号格从4格跳到5格——你并不知道,旁边一辆面包车里,一台设备刚刚伪装成了一座基站,你的手机“择优注册”,主动向它报出了你的永久身份。从此你的行踪、通话、短信都可能被拦截。这不是电影桥段,而是移动通信行业纠缠了三十年的真实攻防,设备名称叫 IMSI Catcher(IMSI捕手),也称为“伪基站”或“基站模拟器”。

它之所以能得手,根源不是某个实现漏洞,而是2G时代立下的一条设计假设:网络是可信的,手机必须无条件向网络证明“我是谁”,而网络无需向手机证明“我是真网络”。4G对此打了补丁但没除根,直到5G引入了 SUCI(Subscription Concealed Identifier,签约隐藏标识符),用户的永久身份才第一次真正实现了“空中接口不上明文”。

这篇文章要讲清楚三件事:过去四代网络里你的身份是怎么“裸奔”的;SUCI用什么密码学手段把身份“锁进保险箱”;以及为什么它选择公钥加密这条看似“绕远”的路。

一、IMSI:你手机里的“身份证号”

每张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的空中接口上,相当多的场景下是明文飞行的。

二、裸奔的四十年:明文身份如何被利用

2.1 明文出现在哪些时刻

手机不可能每条信令都带IMSI,否则等于给窃听者发广播。所以每代网络都设计了临时身份:2G叫TMSI,4G叫GUTI(实际下发时叫M-TMSI),5G叫5G-GUTI。逻辑是:运营商通过专用信令把一个随机临时号发给手机,此后寻呼、位置更新都用临时号,定期更换,让窃听者无法把无线信号和“你这个人”对上号。

但临时身份有个先有鸡还是先有蛋的问题:手机开机第一次入网、或临时身份失效/更换归属地时,手上根本没有可用的临时号,只能报真名。在4G及以前,这个“真名”就是明文IMSI。更糟的是,标准允许网络随时发一条身份请求(Identity Request)信令,要求手机交出IMSI,手机必须服从——这条设计本意是方便合法的故障恢复,却成了伪基站最顺手的武器。

2.2 伪基站的攻击流程

flowchart TD
    A["伪基站以大功率开机"] --> B["手机按信号强度择优"]
    B --> C["手机向伪基站发起注册"]
    C --> D["伪基站发身份请求命令"]
    D --> E["手机被迫上报明文IMSI"]
    E --> F["攻击者获得永久身份"]
    F --> G["跟踪位置或拦截通信"]
    C --> H["真基站信号被压制"]
    H --> I["区域内用户全部脱网"]

整个攻击利用的是三重不对称:

  1. 单向认证:2G标准只要求手机向网络证明自己,没有网络向手机证明自己的步骤。伪基站出示的“网络身份”无人查验。
  2. 信号强度即真理:手机的小区选择/重选算法就是“谁信号好听谁的”,攻击者只需功率更大。
  3. 加密由基站说了算:空口加密算法的开关和选择权在基站一侧。伪基站可以命令手机使用A5/0——也就是完全不加密——或者退而求其次选择已被攻破的弱算法。手机界面上甚至可以不显示任何异常。

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的安全架构针对这个问题给出的方案是釜底抽薪,思路可以概括为两条:能不报真名就不报(临时标识策略),必须报真名时报密文(加密永久标识)。

第一条是演进而非革命:5G-GUTI机制照常工作,日常的寻呼、更新全部用临时号。真正的革命在第二条。5G规定:凡是手机必须上报永久身份的时刻,上报的不再是明文SUPI(Subscription Permanent Identifier,签约永久标识,内容上可以理解为IMSI),而必须是SUCI——把SUPI加密后的密文。网络侧没有任何信令能强制手机交出明文身份,这条“身份请求后门”在5G里被正式关死(仅在无卡紧急呼叫等特殊场景允许例外,见后文)。

3.1 SUCI长什么样

SUCI不是把整个IMSI加密后一糊了事,而是一条精心分段的消息:

字段 加密与否 作用
MCC + MNC 明文 归属国/运营商码,供全网路由,必须可见
路由指示符 明文 4位数字,帮归属网把解密请求送到正确的处理单元
保护方案ID 明文 声明用的是哪种加密方案(含“不加密”的选项)
归属网公钥ID 明文 告诉归属网“我用的是你哪一把公钥加密的”
方案输出 密文 真正的保险箱:加密后的MSIN+校验标签

注意一个反直觉的设计:加密的只有MSIN,国家码和网络码是明文。为什么?因为SUCI要穿越访问网络、漫游网络,最终送达归属运营商,一路上每个节点都需要根据MCC/MNC完成路由——隐私的目标是“防止世界知道你是谁”,而不是“防止世界知道你是哪个运营商的客户”。该保密的部分一bit不漏,该路由的部分一字不改。这是安全设计里“最小暴露面”原则的教科书案例。

3.2 锁和钥匙:公钥从哪来

加密需要一个只有归属运营商能解开的锁。5G的做法是:归属运营商生成一对椭圆曲线公私钥,私钥留在归属网络(UDM的一个专用解密功能模块)里,公钥连同一个编号(公钥ID)预置到每张5G USIM卡中。一个运营商可以同时启用多对密钥(编号1到255),用于密钥轮换:换钥匙时新卡配新钥,老卡继续用老钥,平滑过渡。

为什么必须预置在卡里而不是由网络下发?因为下发公钥的信道本身可能被伪基站污染——如果手机开机后先向网络“要公钥”,伪基站可以递上一把自己做手脚的钥匙,加密就形同虚设。把公钥和IMSI一起刻在卡的出厂文件里,等于把信任锚前移到了发卡环节,攻击者无从插手。

四、保险箱的构造:ECIES加密全流程

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,认证流程才得以继续。

4.1 为什么每次都不一样:不可链接性

这里有个精妙之处:临时密钥对是每次注册随机生成的,用完即弃。这意味着同一个用户在两个不同时刻上报的两个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下能做的只剩下干扰、压制和诱捕未认证的接入尝试,拿不到可用的身份。

参考来源

  1. IMSI-catcher - Wikipedia — 伪基站攻击原理、GSM单向认证缺陷、3G双向认证修复与降级攻击的权威综述
  2. Introduction to 5G AKA - free5GC Blog — 开源5G核心网项目的5G认证流程系列讲解
  3. Practical attacks against privacy and availability in 4G/LTE mobile communication systems (Shaik et al., 2015) — 4G明文IMSI截获与寻呼攻击的学术论文
  4. Mobile subscriber identity - Wikipedia — IMSI结构与临时标识机制
  5. 5G - Wikipedia — 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 等场景全覆盖。

51学通信知识星球海报-扫码加入