手机SIM卡复制
SIM 卡是手机号码身份认证的核心凭证,其内置的密钥 Ki 决定了入网身份,一旦该密钥被复制,攻击者即可完全接管目标手机号码,接打电话、收发短信和蜂窝网络均可被劫持。
SIM卡基本概念
SIM(Subscriber Identity Module)直译是用户身份模块,本质是一个智能卡,用来让基站识别你是谁。eSIM本质上是将原本 SIM卡的硬件集成进了手机中,并没有不同。

SIM卡一般由六个触点:电源(C1-VCC)、复位(C2-RST)、时钟(C3-CLK)、接地端(C5-GND)、编程电压(C6-VPP)、双向半双工UART(C7-I/O)。SIM卡中会有微处理器CPU,ROM,RAM,EPROM。SIM卡一般由六个触点:电源(C1-VCC)、复位(RESET)、时钟(CLK)、接地端(GND)、编程电压(VPP)、I/O接口(Data)。
SIM里储存的信息
- 出售时内置的数据:
- ICCID(系列号)
- IMSI(国际移动用户识别码),15位数字,包含国家码(MCC)、运营商码(MNC)和用户号(MSIN)。该信息可通过手机读取到。
- Ki number(加密根密钥),随机生成的128位数字。Ki 无法被读取,只会在SIM卡进行运算的时候会被使用。
- 临时数据:位置区域识别码(LAI)、移动用户暂时识别码(TMSI)、禁止接入的公共电话网等。
- 业务代码:个人识别码(PIN)、解锁码(PUK)、计费费率等。
- 用户储存的信息:通信录电话号码、短信等。
生产过程
- IMEI(International Mobile Equipment Identity,国际移动设备识别码),15位数字,制造商代码、型号、序列号和校验码。每台手机一个,全球唯一。拨号界面
*#06#可查询。
SIM卡身份认证过程
1G(模拟信号),不在讨论范围内。
2G入网交互流程
2G 使用单向认证机制,仅基站验证手机身份,手机无法验证基站真实性,且其核心算法 COMP128-v1 已公开泄露,密钥可通过有限次数的挑战响应推算出来。
2G(GSM)入网的身份认证流程比较简单,在手机和基站分别通过各自相同的密钥使用 Comp128 哈希算法进行比对来确认身份。

- 连接网络时,手机向基站发送 TSMI 来证明其身份。
- 在首次连接到新网络时,手机会发送 IMSI 来标识自己,基站会向手机发送新的 TMSI,TMSI 会经常变动。
- 基站会生成一个 128 位随机数(称为RAND),并将其发送到手机。
- 手机使用身份验证算法(A3)以及使用本地密钥 Ki 对 RAND 进行加密。$COMP128_A3(Ki, RAND)=SRES$,计算出 32 位值 SRES 发送回基站。
- 基站同样使用 A3 算法以及基站根据历史储存的 IMSI 对应的密钥 Ki 对 RAND 进行加密,获取 HASH2。
- 基站会比较 HASH1 和 HASH2 是否相等,相等则证明手机知道密钥 Ki,因此通过身份验证。
- 手机和基站使用 A8 算法计算会话密码密钥 Kc $Kc = A8_{Ki}(RAND)$
- 现实世界中,大多数移动运营商将 A3 和 A8 作为同一种算法实现。Comp128-v1 算法被泄漏,公开已知。
- 基站根据支持的算法列表选择加密算法并激活加密,使用 Kc 作为会话密钥。
COMP128 算法细节

函数 comp128,入参为 128位 K 和 128 位 RAND,

Comp128 核心就是混淆,让原始数据和密钥融合,打乱所有位置。
风险
- 整个过程是个单向认证,也就是只有基站验证手机的身份,验证通过后手机就连接到这个基站了。这就会导致一个严重的问题:伪基站,伪基站就可以给连上的手机发短信等操作。
- 理论谁有 SIM 卡的密钥 Ki 就可以拥有其入网身份,继而接打电话、收发短信、蜂窝网络等。
- 算法风险
- 通过发送一系列的 RAND,根据响应来推断 Ki 值。预计 150000 次即可爆破成功。
3G/4G/5G入网交互流程
3G 及以后引入双向认证和防重放机制,算法安全性大幅提升,但只要能获取 SIM 卡内置的密钥参数,入网身份仍然可被完整复制。
3G(UMTS)/4G(LTE)/5G(NR) 改进了原先 2G(GSM)中的安全问题,使用了安全性更高的 AES-128 的 Milenage 算法,增加了 SQN 机制防止重放攻击,增加了双向认证来防止伪基站风险。
- 手机连接基站时,将 SIM 卡中内置的 IMEI、K、AMF、SQN、OPc、c1/c2/c3/c4/c5、R1/R2/R3/R4/R5 发送给基站。
- 基站生成一个随机数 RAND,基于客户端发送过来的参数以及 RAND 使用 Milenage 算法计算一个结果 RST1(AUTN、匿名密钥 AK、完整性密钥 IK、密码密钥 CK、预期响应 XRES、响应 RES)。
- 基站将 RST1、RAND 返回给手机,手机基于 K(来自 SIM 卡)、RAND(来自基站返回)、AUTN(来自基站返回)以及步骤 1 中的参数,使用 Milenage 算法计算一个结果 RST2,比较 RST1 和 RST2 是否相同,相同则会将 RST1 发送给基站。同时,会递增本地 SQN 值,以防止重放攻击。
- 基站也同样比对 RST1 和 RST2 是否相同,相同则认证验证完成。同时,会递增本地 SQN 值,以防止重放攻击。
Milenage 算法细节

函数f1,入参需要 RAND、AMF、SQN、Ki,核心算法使用 AES-128,输出 MAC-A

函数 f2/3/4/5 使用 OPc、Ki、RAND 生成 XRES、CK、IK、AK
$AUTN = (SQN AK) || AMF || MAC-A$
风险
- 当获取到 SIM 卡内置的敏感信息,即可拥有该手机卡的全部权限。
基于侧信道攻击窃取 SIM 卡中密钥
SIM 卡在执行密钥运算时会产生可被测量的物理特征,攻击者通过分析大量认证请求下的功耗或电磁辐射波形,可以逆向推导出内置密钥 Ki,而无需直接读取受保护的存储区域。
侧信道攻击的核心思路是:SIM 卡的 CPU 在计算 COMP128 或 Milenage 时,不同的中间运算状态对应不同的功耗特征。通过向 SIM 卡发送大量构造好的 RAND 挑战并同步采集功耗曲线,利用差分功耗分析(DPA)可以将密钥 Ki 从噪声中分离出来。物理接触卡片的条件下,使用示波器和简易探针即可完成采集;攻击所需的认证次数取决于算法实现质量,防护较弱的旧版 SIM 卡所需次数远少于新版卡片。