首页 › deep-tech › 题目进卡,答案出门:SIM卡原理

题目进卡,答案出门:SIM卡原理

一、一张连你手机都读不透的卡

先做个思想实验:你能在自己的手机里查到SIM卡的根密钥Ki吗?

答案是:不能。不只是你查不到,手机本身的操作系统也读不到。这张指甲盖大小的塑料卡,内部藏着整个移动通信体系里最核心的一个秘密——128比特的根密钥Ki。网络靠它认出你,攻击者惦记它惦记了几十年,但设计上,谁也不能把它从卡里拿出来,包括手机自己。

这不矛盾吗?密钥存在卡里,却永远读不出来,那认证的时候它怎么“证明”自己知道这个密钥?

这就是本文要讲透的核心设计:秘密不挪窝,让题目跑起来。网络不发钥匙、只发考题;卡不出钥匙、只交答案。整个移动网络的安全大厦,就建立在这个朴素的原则上。

很多人学通信,学到AKA握手、学到密钥派生就停了,把卡当成一个“透明的黑盒子”——反正它会算就行。但真正到了现网排障,大量鉴权类问题的答案恰恰藏在这个盒子里:密钥配错、OPc错配、序列号失步,症状全在网络上,病根全在卡里。

二、先想清楚:要防的是谁

为什么密钥非要放进一个专门的芯片?把Ki存在手机软件里不行吗?比如存在一个加密文件里,开机时解密加载到内存,不也能算认证吗?

要回答这个问题,先看攻击者是谁。对运营商来说,至少有三条路通向灾难:

第一条路:克隆卡贩子。 如果Ki能从卡里读出来,写进另一张空白卡,就得到一张“双胞胎卡”——两台手机用同一个身份入网,话费由受害者埋单,短信验证码被半路截走。这是移动通信史上真实发生过的大规模攻击,后面详讲。

第二条路:被root的手机和恶意应用。 手机是个开放环境,用户可以刷机、装来历不明的App、越狱。密钥若存在手机文件系统里,无论包了多少层加密,最终总要在内存里以明文形态参与运算——攻击者只要控制了操作系统,就有一百种办法把它舀出来。而SIM卡是独立于手机的一块封闭芯片,手机再怎么中毒,也只能“隔着门递纸条”,碰不到卡内部的存储。

第三条路:供应链上的内鬼与间谍。 密钥在写进卡之前,总要在发卡环节存在一瞬间。据The Intercept在2015年的报道,情报机构被指入侵了当时全球最大的发卡商之一Gemalto的网络试图窃取密钥数据。这件事后来被多方核查,发卡商称规模有限,但它揭示了一个残酷事实:密钥每多存在一个地方,就多一扇要守的门。

三种威胁指向同一个设计结论:给这个秘密造一间防篡改的保险柜,柜门只开一个小口,这个小口不是“读出钥匙”,而是“递进题目、递出答案”。

三、核心原理:挑战—应答,让证明不等于泄露

卡是怎么在不泄露Ki的前提下,证明“我持有Ki”的?用的是密码学里最经典的挑战—应答(Challenge-Response)思想。

类比一下地下党的接头:上线不问你“口令是什么”(你一回答,口令就泄露了),而是随口说一句“今天天气不错”。你若真是自己人,就该按约定回一句特定的暗语。暗语每次都不同,旁人听一百次也推不出规律。

通信网络用的是同款逻辑,只是“暗语”换成了密码函数。2G时代用两个函数A3、A8,输入都是Ki和一个随机数RAND:

$$\text{SRES} = A3(K_i, RAND), \qquad K_c = A8(K_i, RAND)$$

网络侧拿着同一把Ki对同一个RAND算一遍,如果两边的SRES一致,就证明卡里确实装着正确的Ki——整个过程中,RAND(题目)进卡,SRES(答案)出卡,Ki从头到尾没有离开过芯片一毫米。

flowchart TD
    A["网络出题<br/>下发RAND"] --> B["手机转交<br/>题目进卡"]
    B --> C["卡内运算<br/>Ki只在这里参与"]
    C -->|"答案RES"| D["手机上报<br/>答案出门"]
    D --> E{网络比对}
    E -->|一致| F["认证通过"]
    E -->|不一致| G["上报失败原因<br/>排查两端钥匙"]

这里藏着一个精妙的不对称性:从题目和答案反推密钥,在计算上不可行。好的认证函数就是一个单向搅拌机——RAND和Ki搅在一起出答案容易,从答案往回分离出Ki,计算量大到宇宙热寂也算不完。所以网络可以放心地天天出题,卡可以放心地天天作答,而Ki始终深藏。

顺便说清一件事:Ki是真正的“不出卡”,但派生出来的会话密钥是要出卡的。2G时代卡把加密钥Kc交给手机,3G之后卡把CK/IK交给手机,由手机和网络继续往下派生空口加密钥——接力棒交出去,但根永远留在卡里。

四、保险柜是怎么造的:卡里有什么、什么读不到

把卡翻过来看,它的正式名字叫UICC——一张带操作系统的智能卡。麻雀虽小,五脏俱全:有一颗处理器、有存储(含EEPROM保存数据)、有加密运算加速单元,片内跑着一个卡片操作系统,管理着一套文件系统。数据容量从早年的8KB到如今的256KB以上,但再小的卡,安全架构都一样。

关键在于文件系统里的访问规则。每份文件都带读写权限等级,而Ki这类密钥文件被设成了永远不可读——写卡的个人化环节在发卡商的安全机房里完成后,任何人都只能“用”它,不能“看”它。手机向卡发一条读文件指令,卡内操作系统直接拒绝执行,这条路在芯片内部就被焊死了。

卡内数据 作用 谁能读出
ICCID 卡的"身份证号"(印在卡面上那串) 任何人可读
IMSI 用户在网络中的标识 手机可读,入网时上报
PIN / PUK 本地锁与解锁码 用户自己知道
电话簿、短信 附加存储 可读可写
Ki 根密钥 一切认证的根 无人可读,只写不读
OPc 算法变体参数 运营商定制算法用 无人可读

芯片层面还有物理防护。智能卡行业为对抗攻击发展出了一整套手段:芯片表面布设激活后即触发自毁逻辑的传感网格,防的是用探针直接读总线;对电压、时钟频率做实时监测,防的是用毛刺信号让芯片“跳过”权限检查指令;对加密运算做随机化加噪,防的是通过功耗曲线反推密钥的侧信道分析。这些手段不能说绝对不可破——学术界演示过对老卡的物理攻击——但它们把攻击成本从“写段代码”抬高到了“每张卡都要开一次膛”,批量克隆在经济上不再成立。

反过来想,“存软件里”的方案在同样的威胁清单面前是什么表现:

存放位置 被root手机读走 被恶意应用利用 批量克隆成本
手机软件里 一段内存转储的事 加密再好也有明文瞬间 极低:一份文件复制亿万份
防篡改卡里 接口只收题不给钥 隔着卡片操作系统摸不到 极高:逐卡物理破解

这就是"为什么这样设计"的答案:移动终端是全世界分布最广、环境最不可控的联网设备,唯一值得托付根密钥的地方,是一块连主人自己都打不开的封闭芯片。

五、一次认证里,卡到底在算什么

把镜头拉近,看一次完整的入网认证中,四个角色怎么配合。

3G之后的认证(通常叫AKA,认证与密钥协商)在2G基础上补上了双向认证——不但网络要验卡,卡也要验网络,防止假基站钓鱼。归属网络的认证中心与SIM卡共享同一把Ki,这是全网络里仅有的两处“知道底细”的地方:

sequenceDiagram
    participant H as 归属网
    participant V as 拜访网
    participant M as 手机
    participant C as SIM卡
    V->>H: 请求认证向量
    H->>H: 用Ki算出题目与标准答案
    H->>V: 下发向量(Ki不随行)
    V->>M: 转交RAND与AUTN
    M->>C: 题目透传进卡
    C->>C: 片内用同一Ki作答
    C->>M: 返回答案
    M->>V: 上报答案
    V->>V: 与标准答案比对
    Note over H: 网络侧持钥处
    Note over C: 卡内持钥处

注意两个细节。第一,拜访网络拿不到Ki。 归属网只把“题目加标准答案”打包发给拜访网,漫游到天涯海角,根密钥也始终留在归属地——这就是“钥匙留在家里”的含义。第二,卡的验证是双向的。 网络下发的认证令牌AUTN里携带了序列号相关量,卡用自己片内的Ki验算通过,才确认“这是真网络出的题”,然后才肯交出答案;序列号不对,卡会判定可能遭到了重放攻击,拒绝作答。

USIM的作答不再是2G的两个函数,而是一族以f开头的标准函数,输出分工明确:

$$RES = f2_{K_i}(RAND), \quad CK = f3_{K_i}(RAND), \quad IK = f4_{K_i}(RAND)$$

$$AUTN = (SQN \oplus AK) \parallel AMF \parallel f1_{K_i}(SQN, RAND, AMF)$$

RES是给网络的答案;CK和IK是交给手机继续派生的会话密钥材料;AUTN里那份f1的输出,则是卡用来反向验证网络身份的“火漆印”。一套题目,同时完成“网络验卡”与“卡验网络”两个方向的信任建立。

六、同一把锁芯,各家的钥匙坯:OP与OPc

有个工程问题:认证算法若是全网统一、毫无秘密,攻击者就能预先建好彩虹表慢慢磨。可各运营商的算法若完全私有,卡和网络的研发、测试、互通用性又成了灾难。

行业给出的解法非常聪明:算法公开,参数私有。以公开的Milenage算法族为例,它以AES加密为核心,人人都看得到实现细节;但每个运营商额外持有一个保密的运营商变体参数OP,掺进运算里,让各家网络算出的“答案空间”互不相同。

更妙的是卡里存的东西。Milenage的公开定义中,卡内保存的并非OP本身,而是它与Ki混合派生出的OPc:

$$OP_c = OP \oplus \text{AES}_{K_i}(OP)$$

卡拿到OPc就足以完成全部认证运算,从OPc反推不出OP,运营商的全局秘密OP永远不必出现在任何一张卡上。单张卡失守,泄露的只是这一张卡的OPc;全局算法参数毫发无伤。把秘密分级隔离、只下发必要的最小派生物——这个思路与前面"Ki不出卡"一脉相承:每往下一层,只给一层所需的秘密。

flowchart TD
    OP["运营商主密钥OP"] --> F["发卡安全环境"]
    KI["根密钥Ki"] --> F
    F -->|"派生OPc写入卡"| C["卡内保存<br/>Ki与OPc"]
    F --> N["运营商侧保存<br/>Ki与OP"]
    C --> A["认证时卡内算题"]
    N --> B["认证时网络算同题"]
    A --> R{"结果一致?"}
    B --> R
    R -->|是| OK["双向认证通过"]

七、被克隆逼出来的进化:一段真实的攻防史

这套“保险柜”设计不是天生的,而是被惨痛教训逼出来的。

2G初期,卡里的认证算法A3/A8普遍采用一个叫COMP128的实现。它本是保密算法,1998年被研究人员逆向公布后,随即被发现存在致命缺陷:输入之间存在扩散不充分的路径,攻击者构造大量精心挑选的“考题”喂给卡,观察答案的异常规律,就能像拼图一样把128比特的Ki一块块拼出来——这就是著名的分区攻击。据维基百科记载的后续研究,其派生的会话密钥还被人为砍掉了有效熵,实际强度进一步打折。那几年,“数小时内克隆一张SIM卡”从理论变成了演示,克隆卡黑产在部分市场一度泛滥。

产业的回应分两层。短期换锁芯:推出修补了缺陷的COMP128第二、三代实现,并加速淘汰带漏洞的老卡。长期换门框:3G标准直接重构了信任模型——卡升级为USIM应用,认证从网络单方面验卡改为双向认证,算法族改以AES这类经过公开密码学检阅的构件搭建,密钥长度也随时代加长。维基百科对此的总结很直接:USIM带来了双向认证与更长的加密密钥等安全改进。

这场攻防战还留下两笔“债务”提醒后人。2013年,安全研究者Karsten Nohl披露部分仍使用古老DES算法的老卡可被远程攻击,可能导致手机被克隆;2019年披露的Simjacker攻击则利用部分卡内预置的浏览器组件,向成千上万用户发送隐藏指令实现定位——两次事件都说明,卡不只是被动的保险柜,它里面跑的每一行代码都是攻击面,运营商此后在全球范围分批替换了涉事批次的老卡。

教训沉淀成了一条工程铁律:认证算法必须假设总有一天被公开(事实上COMP128就是被逆向的),安全性只能依赖密钥本身保密,而不能依赖算法保密。

八、保险柜的快递业务:eSIM如何远程“换锁”

传统发卡流程里,密钥通过物理卡片这个“保险箱快递”到达用户手里。而eSIM时代,保险柜直接焊死在主板上,运营商配置(Profile,含IMSI、Ki等全套数据)要靠网络远程注入——问题来了:把全网最敏感的密钥数据在公网上传来传去,怎么保证安全?

答案是给保险柜配一套“数字签收体系”。每颗eSIM芯片在出厂时就被写入了全球唯一的标识EID,并由产业联盟的证书体系背书,芯片内部生成一对密钥,私钥同样不出卡。下载运营商配置时,大致流程如下:

flowchart TD
    A["eUICC出厂<br/>内置证书与EID"] --> B["用户扫码<br/>发起下载"]
    B --> C["下载服务器<br/>验证芯片证书链"]
    C -->|"协商加密通道"| D["Profile全程加密下发"]
    D --> E["卡内解密安装<br/>密钥只进不出"]
    E --> F["切换运营商<br/>无需换卡"]

本质上是把“发卡机房的安全管控”翻译成了密码学语言:物理的封闭机房,变成了证书链验证;人工核对卡片身份,变成了芯片内置私钥的握手;防窃听,变成了端到端加密通道。“秘密只进不出”的原则纹丝没动,改变的只是进门的方式——从工厂里的一次性物理写入,变成可以反复执行的加密快递。

GSMA围绕这一机制维护了多套远程发卡规范,分别覆盖消费电子、物联网等不同场景。落地形态也在继续演化:贴片封装的eSIM常用于车载与表计,直接集成进基带芯片的iSIM则进一步压缩了物联网终端的成本与体积。但无论形态怎么变,卡的角色始终如一——网络信任的根,永远待在一块封闭硅片里。

名字 是什么 定位
UICC 物理智能卡芯片本体(硬件) 3G起沿用至今的正式名称
SIM应用 卡上的2G认证应用 GSM时代的遗产,为兼容而保留
USIM应用 卡上的3G/4G/5G认证应用 现役主力,双向认证
ISIM应用 卡上的IMS认证应用 VoNR等IMS业务使用
eSIM 焊死的eUICC+可远程下载的Profile 2016年起逐步普及
iSIM 集成进基带/主芯片的SIM 物联网新形态

九、现网实战:鉴权出问题,先查卡的“两本账”

理解了卡的工作原理,一大类现网故障的排查思路就清晰了。认证的本质是卡与网络各自持钥、独立作答、互相比对——好比两本账,对不上的瞬间,故障就出现了。

场景一:密钥清单抄错一个字符。 实验室或物联项目写测试卡时,卡商会提供IMSI、Ki、OPc的对应清单,网络侧HSS要录入完全一致的数据。最常见的坑是OP与OPc混淆——网侧把OPc的值填进了OP字段(或反之),公式里差一步运算,从此卡和网络永远算不出相同的答案。症状极具迷惑性:流程完全正常,卡也老老实实回了答案,但网络比对永远失败。排查口诀就一句:凡 MAC 类失败,先核对两边的钥与参数。

场景二:序列号失步。 卡内记录着自己见过的网络序列号,用来防重放。测试卡反复在多套环境间复用、或卡数据被回写过,卡的“账本”和网络的“账本”就会岔开。之后每次认证,卡都怀疑网络在放旧题,拒绝作答并要求重新对账,网络侧走完重同步流程才能恢复。多人共用的开发卡频繁“莫名注册失败”,多半是它。

场景三:补卡后旧设备异常。 补卡的本质不是“复制身份”,而是换一把新钥匙、重写一本新账:新卡新Ki,网络侧的账本同步指向新卡,旧卡当场作废。理解了这一点就明白为什么补卡能立刻止损——旧卡手里那把钥匙,在网络的账本上已经查无此人。

场景四:断点定位法。 协议仪上看认证流程断在哪一环,可以直接分流责任:题目发下去卡迟迟不回答案,查卡与终端的接口或卡本身;卡回了但比对不上,查两边密钥与参数配置;网络压根没发题,查网侧签约数据。三个断点,三种病根,别一上来就重装手机系统。

十、三个常见误解

误解一:"SIM卡里存着话费和手机号。" 卡里存的是身份(IMSI)与钥匙(Ki),话费记在运营商的计费系统里;手机号(MSISDN)甚至不是认证的必要元素。换号不一定要换卡,换卡也不一定换号——两套体系本来就独立。

误解二:"eSIM能远程写入,肯定不如实体卡安全。" 恰恰相反。实体卡从工厂到用户手里要经过印刷、物流、零售多个暴露环节,历史上情报机构渗透发卡商网络的报道就发生在传统供应链上;eSIM的Profile全程走加密通道,芯片私钥不出卡,信任链反而更短、更可审计。

误解三:“没有实体卡了,安全就该没保障了吧。" 近年5G还给用户身份加了空口隐身封装、给空口上了更严的加密,但所有这些防护都共享同一个信任根——卡里那把永远不出来的Ki。形态再变,保险柜的柜门始终只开那一道缝。

常见问题

Q: SIM、USIM、UICC、eSIM到底是什么关系? A: 一句话串起来:UICC是硬件(那颗芯片),SIM和USIM是芯片里的软件应用(分别服务2G与3G/4G/5G),今天的“SIM卡”实际是一颗UICC上同时装着SIM与USIM两套应用以兼容新老终端;eSIM则是把UICC直接焊进主板、应用改由网络远程下载。硬件换了形态、应用换了世代,“密钥只进不出”的原则从未变过。

Q: 手机丢了,捡到的人能读出我的Ki吗? A: 读不出。卡内接口根本不提供读Ki的指令,物理破解单张卡的成本极高。真正该做的是立刻挂失——运营商在网络侧把这本“账”作废,卡里的钥匙再正确,网络也拒绝对账。另外别忘了PIN码:它锁的是卡在终端里的本地可用性,是第一道门。

Q: 写卡的时候,OP和OPc到底该填哪个? A: 看卡商给什么、网侧要什么,两边必须同一个口径。卡里保存的是OPc(由OP与Ki派生),网络侧通常同时掌握OP与Ki。工程上最常见的错误就是两边口径不一致:清单给的是OPc,网侧却按OP录入,结果MAC永远对不上。接手别人移交的测试环境时,这属于必查项。

Q: eSIM下载Profile时被人在网络上截获,会怎样? A: 截获者拿到的是密文。Profile下载使用芯片内置私钥参与的加密通道,私钥不出卡,第三方没有解密能力。真正需要防护的环节在别处——下载码(激活二维码)别泄露给陌生人,否则对方可以把你的号码装到他的设备里。

Q: 物联网设备没有卡槽,怎么完成认证? A: 三个选择:贴片封装的eSIM(生产时焊上,适合车载与表计);集成进基带芯片的iSIM(省空间省成本,适合海量小型终端);以及面向物联网的远程管理规范,支持无人值守场景下批量切换运营商。认证原理与手机完全一致,只是保险柜的安装方式不同。

参考来源

  1. SIM card - Wikipedia — Ki的定义与存储位置、GSM认证五步流程、UICC/USIM的拆分由来、历次SIM卡安全事件(COMP128克隆、2013年DES漏洞、Simjacker)
  2. COMP128 - Wikipedia — A3/A8算法实现、三个版本差异、COMP128-1扩散不足导致密钥可被恢复的记录
  3. eSIM - Wikipedia — EID出厂写入、安全通道协商、GSMA远程发卡规范体系(消费/IoT场景)
  4. The Intercept《The Great SIM Heist》(2015) — 据该报道,情报机构曾被指渗透发卡商Gemalto网络窃取密钥数据;发卡商其后回应称规模有限
  5. 《移动通信》《通信原理》等教材中关于认证与密钥管理的章节 — Milenage算法族的OPc派生定义与挑战—应答框架

本文由「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学通信知识星球海报-扫码加入