一、概述
移动电话机与SIM 卡共同构成
移动
通信
终端设备。无论是
GSM 系统还是CDMA系统,数字
移动电话机
用户在“入网”时会得到一张SIM卡(SubscriberIdentityModule)或UIM 卡
(UserIdentity Module)。SIM 卡是一张符合GSM
规范的“智慧卡”,可以插入任何一部符合
GSM 规范的移动电话中,实现“电话号码随卡不随机的功能”,而且通话费用自动计入持卡
用户的账单上,与
手机无关。
二、SIM 卡硬件特性
1、外部特征
在实际使用中有两种功能相同而形式不同的SIM 卡:
卡片式(俗称大卡)SIM 卡,这种形式的SIM 卡符合有关IC 卡的ISO7816 标准,类似IC 卡。
嵌入式(俗称小卡)SIM 卡,其大小只有25mm×15mm,是半永久性地装入到移动台设备中的
卡。
“大卡”上真正起作用的是它上面的那张“小卡”,而“小卡”上起作用的部分则是卡面上的铜制
接口及其内部胶封的卡内逻辑电路。目前国内流行样式是“小卡”,小卡也可以换成“大卡”(需
加装一卡托)。“大卡”和“小卡”分别适用于不同类型的GSM 移动电话,早期机型如摩托罗拉
GC87C、308C 等手机用的是“大卡”,而目前新出的机型基本上都使用“小卡”。
2、 SIM 卡接口
SIM 卡是通过卡面上铜制接口来连接卡内逻辑电路与移动终端的,SIM 卡芯片有八个触点,
通常与移动设备连接需要六个触点,具体接口定义如下图所示:
3、内部结构
SIM 卡是一个装有微处理器的芯片卡,它的内部有5 个模块,并且每个模块都对应一个功
能:微处理器CPU(8 位)、程序存储器ROM(3--8kbit)、
工作存储器RAM(6--16kbit)
数据
存储器EEPROM(128--256kbit)和串行通信单元。这5 个模块被胶封在SIM 卡铜制接口后与
普通IC 卡封装方式相同。这五个模块必须集成在一块集成电路中,否则其安全性会受到威胁。
因为,芯片间的连线可能成为非法存取和盗用SIM 卡的重要线索。
SIM 卡同手机连接时至少需要5 条连接线(通常编程口未定义)
数据I/O 口(Data)
复位(RST)
接地端(GND)
电源(Vcc)
时钟(CLK)如上图所示。
SIM 卡的供电分为5V(1998 年前发行)、5V 与3V 兼容、3V、1.8V 等,当然这些卡必须与相应
的移动电话机配合使用,即移动电话机产生的SIM 卡供电电压与该SIM 卡所需的电压相匹
配。卡电路中的电源VCC、地GND 是卡电路工作的必要条件。卡电源用万用表就可以检测到。
SIM 卡插入移动电话机后,电源端口提供电源给SIM 卡内各模块。
检测SIM 卡存在与否的信号只在开机瞬时产生,当开机检测不到SIM 卡存在时,将提示
“InsertCard(插入卡)”;如果检测SIM 卡已存在,但机卡之间的通信不能实现,会显示
“CheckCard(检查卡)”;当SIM 卡对开机检测信号没有响应时,移动电话也会提示“InsertCard
(插入卡)”;当SIM 卡在开机使用过程中掉电、由于松动接触不良或使用报废卡时,移动电
话会提示“Bad Card/SIM Error”。
对于卡电路中的SIM_I/O、SIM_CLK、SIM_RST,全部是由CPU 的控制来实现的。虽然
基站与网
络之间的数据沟通随时随地进行着,但确定哪个时刻数据沟通往往很难。有一点可以肯定,
当移动电话机开机时刻与
网络进行鉴权时必有数据沟通,这时尽管时间很短,但测量一定有
数据,所以我们在判定卡电路故障时,在这个时隙上进行监测为最佳监测时间。正常开机的
移动电话机,在SIM 卡座上用示波器可以测量到SIM_I/O、SIM_CLK、SIM_RST 信号,它们一
般是一个3V 左右的脉冲。若检测不到,说明SIM 卡座供电开关管周边电阻、电容元件脱焊、SIM
卡卡座脱焊,也有可能是卡座接触不良,SIM 卡表面氧化或是报废卡。
当手机开机时,手机需要与SIM 卡进行数据交换,用示波器可以在SIM 卡卡座上检测到一
些数据信号,没插卡时,这些信号不会送出。可谓“瞬间即逝”,但可以用示波器捕捉到,以此
判别SIM 卡电路有无故障。SIM 卡触点电性能表示触点低电平高电平Vcc-U=+5V±10%,
I=10mA RST -0.3≤U≤+0.6V,I=200uA 4V≤U≤Vcc,I=20uA CLK-0.3≤U≤+0.6V,I=200uA
-2.4V≤U≤Vcc,I=200uA GND - - Vpp - +5V±10% I/O 输入 0V≤U≤0.4V,I=1mA0.7V≤U≤Vcc,
I=20uA I/O 输出 0V≤U≤0.8V,I=1mA 3.8V≤U≤Vcc,I=20uA
电源开关时,SIM 卡电气性能为:当开启电源期间,按以下次序激活各触点:RST 低电平
状态;Vcc 加电;I/O 口处于接收状态;Vpp 加电;提供稳定的时钟信号。当关闭电源时,按
如下次序工作:RST 低电平状态;CLK 低电平状态;Vpp 去电;I/O 口低电平状态;Vcc 去
电。
SIM 卡的存储容量有3kB、8kB、16kB、32kB、64kB 等。目前多为16KB 和32KB,STK卡(SIM
application Tool Kit)是SIM 卡的一种,它能为移动电话机提供增值服务,如移动梦网
业务等。
(将在后章节具体介绍)SIM 卡能够储存多少电话号码取决于卡内数据存储器EEPROM 的
容量(有2K、3K、8K 容量),若有8KB 的存储容量,可供储存以下信息:
*100 组电话号码及其对应的性名文字;
*15 组短信息(ShortMessage);
*25 组以上最近拨出的号码;
*4 位SIM 卡密码(PIN)。
几种主要的SIM 卡的结构数据
三、SIM 卡
软件特性
SIM 卡采用新的单片机及存储器管理结构,因此处理功能大大增强。其智能特性的逻辑结构
是树型结构。全部特性
参数信息都是用数据字段方式表达,SIM卡中存有三类数据信息:
(1)与持卡者相关的信息以及SIM 卡将来准备提供的所有业务信息,这种类型的数据存储在
根目录下。
(2)GSM 应用中特有的信息,这种类型的数据存储在GSM 目录下。
(3)GSM 应用所使用的信息,此信息可与其它
电信应用或业务共享,位于
电信目录下。
即在根目录下有三个应用目录,一个属于行政主管部门应用目录,两个属于
技术管理的应
用目录,分别是GSM 应用目录和电信应用目录。所有的目录下均为数据字段,有二进制的和
格式化的数据字段。数据字段中的信息有的是永存性的即不能更新的,有的是暂存的,需要
更新的。每个数据字段都要表达出它的用途、更新程度、数据字段的特性(如识别符)、类型是二进
制的还是格式化的等。
下面按GSM 的Phasel(阶段1)和Phase2(阶段2)两种情况对SIM 卡的数据格式进行说
明:
(1) Phasel
<1> GSM 系统参数
在阶段l 时,所选GSM 系统参数数据项目如图所示。其中6F38 业务表中选有五项开放业务:
GSM 阶段1 系统参数数据所选项
标识符 名称 长度
6FAD 管理(Administrative) 3
6F38 业务表(Service Table) 4
6F07 IMSI 9
6F7B 禁止PLMN(Forbidden PLMN) 12
6F7E TMSI LAI 11
6F20 Kc, n 9
6F30 PLMN 选择(PLMN Selector) 24
6F74 BCCH 信息(BCCH Information) 16
6F78 接入控制(Access Control) 2
业务1(Servicel):PIN 码取消(PINDisabling)
业务2(Service 2):缩位拨号(Abbreviated Dialing Numbers)
业务4(Service 4):短消息存储(Short Message Storage)
业务6(Service 6):容量配置参数(Capability ConfigurationParameters)
业务7(Service 7):PLMN 选择(PLMN Selector)
业务3、业务5 和业务8 在Phase 1 中不开放,6F78 接入控制采用低级等级。
<2> 电信业务参数
GSM 阶段1 电信业务所选项
标识符 名称 长度
6F3A 缩位拨号(Abbreviated Dialing Numbers) 50 × 22
6F3D 容量配置参数(Capability Config
Parameters)
1 × 14
6F3C 短消息存储(Short Message Storage) 5 ×176
6F39 话费计数(Charging Counter) 2
(2) Phase 2
<1> GSM 系统参数
在阶段2 时,GSM 系统参数数据所选项目如图所示。其中6F38 业务表在Phasel 的
基础上增
加的业务有:
GSM 阶段2 系统参数数据所选项
标识符 名称 长度
6F05 语种选择(Language Preference) 4
6F07 IMSI 9
6F20 Kc, n 9
6F30 PLMN 选择(PLMN Selector) 42
6F31 HPLMN 搜索(HPLMN Search) 1
6F38 业务表(Service Table) 4
6F45 小区广播消息标识(Cell Broad Message
ID)
8
6F74 BCCH 消息(BCCH Information) 16
6F78 接入控制(Access Control) 2
6F7B 禁止PLMN(Forbidden PLMN) 12
6F7E TMSI LAI 11
6FAD 管理数据(Admin Data) 3
6FAE Phase 识别(Phase Identify) 2
业务9 (Service 9):MSISDN
业务10 (Service l0):扩展1 文件(Extension l file)
业务12 (service l2):短消息参数(short Message Parameters)
业务13 (Service l3):最后拨号存储(Last Number Dialed)
业务14 (service l4):小区广播消息识别(cell Broadcasting Message Identifierfi1e)
业务3、业务5、业务8 和业务11 在Phase2 中不开放,6F78 接入控制采用低级等级。
<2> 电信业务参数
GSM 阶段2 电信业务所选项
标识符 名称
6F3A 缩位拨号(Abbreviated Dialing)
6F3C 短消息存储(Short Message Storage)
6F3D 容量配置参数(Capability Config)
6D40 MSISDN
6F42 短消息存储参数(SMS Parameters)
6F43 短消息存储状态(SMS Status)
6F44 最后拨号存储(Last Number Dialed)
6F4A 扩展1 文件(Extension 1 file)
四、SIM 卡应用
1、SIM 卡编号
SIM 卡背面的20 位数字所代表的含义如下:
前6 位(898600):
中国的代号;
第7 位:业务接入号,对应于135、136、137、138、139 中的5、6、7、8、9;
第8 位:SIM 卡的功能位:暂定为0;
第9、10 位:各省的编码;
第11、12 位:年号;
第13 位:供应商代码;
第14—19 位:用户识别码;
第20 位:校验位。
2、 SIM 卡密码
(1)、PIN 码
PIN 码(PersonalIdentityNumber):个人识别码,也叫PIN1 码,长4位,由用户自己设定(初
始值为1234 或0000),属于SIM 卡的密码,用来保护SIM 卡的安全,防止SIM 卡未经授
权而被使用。初始状态是不激活的。启动该功能后,每次用户重新开机,GSM 系统就要和手机
之间进行自动鉴权,判断SIM 卡的合法性,只有在系统认可后,才为该用户提供服务。
用户在启动PIN 码保护功能后不慎将PIN 码忘记,在错误的输入三次PIN 码后SIM 自动上
锁,手机无法接入网络,提示要求输入PUK 码。此时若您不知道PUK 码,那么请不要再尝
试输入PIN 码了,请携带有关凭证和手机到当地
运营商的营业厅去解开,也可拨打服务电
话获得。若您输入10 次错误的PIN 码,那么SIM 卡的自毁程序将自动启动,将SIM 烧毁,
使用户得不偿失。
(2)、PIN2 码
PIN2 码:PIN2 码也是SIM 卡的密码,它跟网络计费和SIM 卡内部
资料的修改有关。手机上
的“计费”功能需要PIN2 码支持。GSM协议支持手机随时查询已通话的支出,目前国内运营商
在部分地区开通此项业务,用户可以得到自己的PIN2 码。
(3)、PUK 码
PUK 码(PINUnblockingKey):PUK 码是解PIN 码的万能锁,每张SIM 卡有各自对应的PUK
码,长8 位,可以交由用户自己管理,也可以由网络运营商控制。目前国内运营商基本都已
开通查询PUK 码的业务,用户可以自己管理PUK 码。
(4)、PUK2 码
PUK2 码(PIN2 Unblocking key):PUK 码是解PIN2 码的万能锁,每张SIM卡有各自对应
的PUK2 码,长8 位,可以交由用户自己管理,也可以由网络运营商控制。目前国内部分地
区的运营商开通了PUK2 码的业务,用户可以自己管理PUK2 码。
3、SIM 卡使用
SIM 卡在日常使用中一是请勿将卡弯曲,卡上的金属芯片更应小心保护,保持金属芯片清
洁(可用酒精棉球轻擦),避免沾染尘埃及化学物品;二是为保护金属芯片,请避免经常将
SIM 卡从手机中抽出;请勿将SIM 卡置于超过85 度或低于-35 度的环境中;在取出或放入
SIM 卡前,请先关闭手机电源;三是最好不要用手去触摸那些触点,以防止静电损坏。
SIM 卡的使用是有一定年限的。一般来说,它的物理寿命是取决于客户的插拔次数,约在1
万次左右;而集成电路芯片的寿命取决于数据存储器的写入次数,不同厂家其指标有所不同,
就Motorola 生产的SIM 卡经试验室试验约为5 万次。SIM 卡的平均寿命约为4 年。
4、SIM 卡
知识进阶
(1)、SIM 卡内保存的数据可以归纳为以下四种类型:
<1>由SIM 卡生产厂商存入的系统原始数据。
<2>由GSM网络运营部门或者其他经营部门在将卡发放给用户时注入的网络参数和用户数
据。包括:
*鉴权和加密信息Ki(Kc 算法输入参数之一密匙号);
*国际移动用户识别码(IMSI);
*A3:IMSI 认证算法;
*A5:加密密匙生成算法;
*A8:密匙(Kc)生成前,用户密匙(Kc)生成算法;(这三种算法均为128 位)
<3>用户自己存入的数据。如短消息、固定拨号、缩位拨号、性能参数、话费记数等。
<4>用户在用卡过程中自动存入和更新的网络接续和用户信息类数据。包括最近一次位置登
记时的手机所在位置区识别号(LAI),设置的周期性位置更新间隔时间,临时移动用户号
(TMSI)等。
这些数据都存放在各自的目录项内,第一类数据放在根目录,当电源开启后首先进入根目
录,再根据指令进入相关的子目录,每种目录极其内部的数据域均有各自的识别码保护,只
有经过核对判别以后才能对数据域中的数据进行查询,读出和更新。上面第一类数据通常属
永久性的数据,由SIM 卡生产厂商注入以后无法更改,第二类数据只有网络运行部门的专
门机构才允许查阅和更新,再第三、四类数据中的大部分允许用户利用任何手机对其进行读/
写操作。
(2)、在下一章节中需要用到国际移动设备识别码IMEI 和国际移动用户识别码IMSI,这里先
做一简单介绍。
国际移动设备识别码IMEI(InternationalMobileEquipment IdentificationNumber)是区别移动
台设备的标志,储存在移动设备中,可用于监控被窃或无效的移动设备。IMEI 组成如图所示,
移动终端通过键入*#06#可以查得。其总长为15 位,每位数字仅使用0—9 的数字。
TAC:型号装配码,由欧洲型号标准中心分配。
FAC:装配厂家号码。
SNR:产品序号,用于区别同一个TAC 和FAC 中的每台移动设备。
SP:备用。
国际移动用户识别码IMSI(InternationalMobileSubscriberIdentificationNumber)是区别移动用
户的标志,储存在SIM 卡中,可用于区别移动用户的有效信息。IMSI 组成如图所示,其总长
度不超过15 位,每位数字仅使用0—9 的数字。
MCC:移动用户所属国家代号,占3 位数字,中国的MCC 规定为460。
MNC:移动网号码,最多由两位数字组成。用于识别移动用户所归属的
移动通信网。
MSIN:移动用户识别码,用以识别某一移动通信网中的移动用户。
四、安全缺陷分析
1、安全分析
(1)、SIM 卡
SIM 卡中最敏感的数据是保密算法A3、A8 算法、密钥Ki、PIN、PUK和Kc。A3、A8 算法是在生产
SIM 卡的同时写入的,一般人无法读取A3、A8 算法;HN 码可由客户在手机上自行设定;PUK
码由运营者持有;Kc 是在加密过程中由Ki 导出;Ki 需要根据客户的IMSI 和写卡时用的母
钥(Kki),由运营部门提供的一种高级算法DES,即Ki=DES(IMSI,Kki),经写卡机产生并
写入SIM 卡中,同时要将IMSI、Ki 这一对数据送入GSM 网路单元AUC 鉴权中心。
如何保证Ki 在传送过程中安全保密是一件非常重要的事情。Ki 在写卡时生成,同时加密,然
后进入HLR/AUC 后再解密,那么连写卡和HLR/AUC 的操作人员也不知道Ki 的真实数
据。
一般流行的做法是用一高级方程DES 对Ki 进行加密,DES 方程需要一把密钥Kdes,加密
和解密都用同一把密钥。由运营部门提供DES 方程给HLR/AUC 设备供应商,运营部门制
定严格的保密制度,管理好密钥Kdes 就能保证Ki 传递的安全性,此过程如图所示。
SIM 卡写卡流程
由此可见,SIM 卡自身的加密措施是十分完备的。
(2)、空中接口
GSM 系统为了保证通信安全,尤其是空中接口不受侵犯,采取了特别的鉴权与加密措施,
来确保移动台的合法性以及防止第三者对通话进行窃听。所使用的加解密算法以及安全措施
从理论上来说是不可逆的。这里主要介绍SIM 卡,对GSM 系统对于空中接口的控制与管理就
不详细叙述了。
2、 SIM 卡整体复制
目前出现了许多MAGICSIM、SUPERSIM 等手机智能卡,配合专用的SIM 卡读写卡起便可实
现在1 张空白的卡上同时“烧”进不同地区的16 个手机卡号,可供用户使用手机STK 功能*
随时切换使用其中任何一个号码使用,也可将一个号码“烧”进多张手机SIM 卡。设备如图所
示
上图是这类SIM 卡内部简单电路,是使用单片机PIC16F84 和一片扩展存储器24LC16(2K)
构成的。
下面,从理论层来进行分析:
下图为GSM 系统设备识别程序,通过IMEI 对用户设备的合法性进行验证。
在EIR 中只用三种设备清单:
白名单:合法的移动设备号;
灰名单:是否允许使用由运营商决定;
黑名单:禁止使用的移动设备号;
目前,移动运营商在用户入网时并没有对移动电话机的国际移动设备识别码(IMEI 码)实
行验证,其次,GSM 系统为了防止非法监听进而盗用IMSI,在
无线链路上需要传送IMSI
时,均使用临时移动用户识别码TMSI 来代替IMSI。仅在位置更新失败或MS 得不到TMSI
时才使用IMSI。因此,这就对SIM 卡整体复制以及SIM 卡的非法盗用提供了先决条件。同时,
也使得GSM 系统对移动台的鉴权形同虚设。
实验证明:使用两部手机,一部使用原SIM 卡,另一部使用superSIM16 复制卡,在一部机
拔出的时候,另一部无法工作;一部机在发短息的时候,另一部无法同时发信息;两机同时
待机,短信息和电话一般会到后开机的那一部手机上;如果关闭掉其中一部手机,有可能会出
现暂时收不到短信息(信息延时)的情况,或者网络出现机主关机的情况;如两机均设置了自动
选网,同号待机时等同于轮流待机(感觉为随机)。
*STK
STK(SIMTOOLKIT),简称“用户识别应用
发展工具”,可以理解为一组开发增值业务的命
令,一种小型编程语言,它允许基于智能卡的用户身份识别模块SIM 运行自己的应用件。
STK 卡不是一般的通常使用的SIM 卡,而是基于Java 语言平台的Simera32K 卡片。STK 是
一种小型编程语言的软件,可以固化在SIM 卡中。它能够接收和发送GSM 的短消息数据,起
到SIM 卡与短消息之间的接口的作用,同时它还允许SIM 卡运行自己的应用软件。这些功能
经常被用于在可通过软件激活的电话显示屏上,用友好的文本菜单代替机械的“拨号-收听-
应答”方式,从而允许用户通过按键轻松进行复杂的信息检索操作或交易。
“移动梦网卡”就是是在普通STK 功能上联合ICP 应用服务的多功能STK 应用SIM 卡。该产
品将ICP 短信应用服务以菜单的形式移植到STK 卡中,增强了手机的通信能力,使手机不
仅仅是一个孤立的通信工具,而且成为了一种综合的信息终端,让用户可以在手机**便地
使用
移动互联网业务。目前,“移动梦网卡”提供的功能有传情服务、IP电话、股票助理、新闻信息、
定位服务、娱乐休闲、实用工具、生活服务、全球通话费查询等,并根据需要不断在开发新的服务
项目。
3、SIM 卡模拟器
由于SIM 卡内部属于单片机范畴,早在1998 年,国外就出现了使用TurboPascal 编写的SIM
卡模拟程序以及相应的外部接口电路。它跳过了SIM 卡,将手机与计算机结合到了一起。通过
外部电路将手机与计算机RS-232 接口相连,在计算机上运行SIM 卡模拟程序,模拟SIM 卡
处理的全过程。
SIM 卡模拟器不同于SIM 卡整体复制,它将卡内数据读出,并以数据格式保存在计算机上。
运行模拟程序时,这些以数据格式保存的卡内数据就相当与一张张实实在在的SIM 卡。所不
同的是,对照SIM 卡内部的数据格式说明,能实现对SIM 卡内部数据的修改和SIM 卡复制
等功能。这样一来,就使得SIM 卡的安全性完全丧失,并对GSM 系统的安全性造成一定的威
胁。
五、总结
虽然SIM 卡同样存在安全隐患,但比起早期模拟通信系统来说已经有了长足的发展。SIM 卡
技术的引入,使得GSM 系统在安全方面得到了极大改进。并使得无线电通信从不保密的禁区
中解放出来。
参考:1、《移动通信》西安电子科技大学出版社
2、部分资料来源与互联网
----《通信世界》
表14 sIM卡触点电性能表
触 点
低电平
高电平
Vcc
U=+5V+-10%, I=10mA
RST
-0.3V
4V
CLK
-0.3V -2.4V
Vpp
+5v +- 10%
GND
I/O 输入
0V《U〈0.4V,I=1mA
0.7V《U〈Vcc,I=20uA
输出
0V《U〈0.8,I=1mA
3.8V《U〈Vcc,I=20uA
我们一般用的手机sim卡里面有三组数值是关键的:IMSI、ICCID和ki,有了这三组数值,你的sim卡就能被复制。市面上卖的一卡多号其实就是通过读取sim卡这三组数值,将他们写到一张特殊的卡上,从而达到复制的目的。IMSI和ICCID可以直接读取,ki却是加密的。下面简单讲讲GSM加密:
GSM的加密系统里面大致涉及三种算法,A3、A5、A8,这些并不特定指代什么算法,只是给出算法的输入和输出规范,以及对算法的要求,GSM对于每种算法各有一个范例实现,理论上并没有限制大家使用哪种算法。但是世界上的设备商和运营商都是懒得沟通的,看到既然有了范例已经实现,就都拿来用了,于是全世界的SIM卡的破解方法都一样。
说到这里就不能不简单介绍一下SIM卡,SIM卡是一种智能卡片,里面有个非常简单的CPU和一点NVRAM,可以存储和读出数据,还可以进行一些运算。卡里面有很多内容,不过只介绍和加密相关的。每张SIM卡里面一般都存着一个全球唯一的标志号,叫做IMSI,这个是用来唯一标识你SIM卡的,手机在开机时候会从卡里面读出这个号发给移动网络,移动那里有一个很大的数据库,描述了IMSI和手机号的对应关系,于是网络就知道你的手机号是多少了(如果你手机卡丢了去补,新补来的卡IMSI和原有的不同,而移动数据库那里将你原来的手机号指向新的IMSI,旧的卡就再也不能用了)除了IMSI,还有16个字节的密钥数据,这个数据是无法通过SIM 卡的接口读出的,通常称为Ki,Ki在移动网络那边也保存了一份。
在手机登录移动网络的时候,移动网络会产生一个16字节的随机数据(通常称为RAND)发给手机,手机将这个数据发给SIM卡,SIM卡用自己的密钥Ki和RAND做运算以后,生成一个4字节的应答(SRES)发回给手机,并转发给移动网络,与此同时,移动网络也进行了相同算法的运算,移动网络会比较一下这两个结果是否相同,相同就表明这个卡是我发出来的,允许其登录。这个验证算法在GSM规范里面叫做A3,m=128bit,k=128 bit,c=32 bit,很显然,这个算法要求已知m和k可以很简单的算出c,但是已知m和c却很难算出k。A3算法是做在SIM卡里面的,因此如果运营商想更换加密算法,他只要发行自己的SIM卡,让自己的基站和SIM卡都使用相同的算法就可以了,手机完全不用换。
在移动网络发送RAND过来的时候,手机还会让SIM卡对RAND和Ki计算出另一个密钥以供全程通信加密使用,这个密钥的长度是64bits,通常叫做Kc,生成Kc的算法是A8,因为A3和A8接受的输入完全相同,所以实现者偷了个懒,用一个算法同时生成SRES和Kc。
在通信过程中的加密就是用Kc了,这个算法叫做A5,因为A5的加密量很巨大,而且SIM卡的速度很慢,因此所有通信过程中的加密都是在手机上面完成的,这样一来,除非天下所有GSM手机都至少支持一种相同的A5算法,否则就没法漫游了,这时候运营商和设备商的懒惰又体现出来了,全世界目前只有一种通用的A5算法,没有其他的,这个算法就是和Kc的8字节序列进行简单的循环XOR,再和报文序号做个减法。
现在说说为啥手机卡可以被复制。从前面的介绍里面我们知道,要完成一次登录过程,IMSI和Ki是必不可少的,A3算法也需要知道,这其中IMSI是直接可读的,但是A3算法和存在你的卡里面的数据,都是不知道的,手机只是简单的把RAND给SIM卡,SIM卡把算好的数据返回。实际设备中使用的A3算法被作为高级商业机密保护起来。但是世界上没有不透风的q1ang,在1998还是1999年的时候,有人从哪里偷到了几页纸的相关文档,然后把这文档输入了电脑。后来这个文档落到了加州伯克力几个教授手里面。这个文档里面缺少一些东西,而且还有写错的地方,这几个教授们拿一个SIM卡比对了一阵子,把缺的补上了,错的也给修正了,于是这个算法就成为了世人皆知的秘密。这个算法又被叫做Comp128,他同时生成SRES和Kc。
光有了算法还是不能够得到在SIM卡里面保存的Ki,理论上面是可以把SIM卡拆了,然后把芯片接到特殊设备上面来读出Ki,但是这个听起来就像用小da0在硬盘上面刻操作系统一样不靠谱。于是很多有志之士就开始了对Comp128算法的攻击,在一开始大家想到的肯定是穷举,不过这个GSM的设计者也想到了,SIM卡里面有个逻辑是一共只能查询2^16次左右,之后卡会自杀,让破解者啥都得不到。因此研究者们试图在可以接受的次数之内通过构造特定明文和分析输出秘文来分析出Ki的值,结果还真被大家发现出来了一些。IBM的一个小组甚至用6次查询就可以彻底解出Ki,当然现在外面卖的那种机器肯定没有这么牛。
随着时间的推移,针对Comp128的破解算法越来越成熟,SIM复制设备也越来越多,运营商们终于坐不住了。很多运营商都开始发行Comp128v2加密算法的卡了。Comp128v2算法是GSM协会在v1被攻破以后,迅速在v1上面修改得来的结果,据说比较好的解决了v1算法中的弱点,当然,这个算法像v1一样,还是不公布于众的,而且到现在也没有人公布出来。这样一来,基本就没法解了。
中国的运营商同样也遇到了SIM卡被复制问题,这里我主要讲讲中国移动。大约从2005年下半年发行的卡开始,已经不能直接用simscan等软件读出ki,但是,这并不是真正v2卡。有消息指出,v2卡虽然解决了能被复制的漏洞,但是兼容性和稳定性方面不尽人意。聪明的中国移动当然不会不管这个问题,它在成熟的v1卡基础上,自己做了小小的修改,巧妙的躲避了simscan等软件的扫描,达到不被复制的目的。这种卡我们暂时称作v0卡。v0卡是中国移动自己设计出来,据说是改变了原来ki的配对规律,使常规的扫描无法读出ki。本文的核心内容,就是讲述如何读出v0卡的ki。
下面提供一个关键的规律表:
拥有第0对KI时,解剩下的KI顺序为:4,2,6,1,5,3,7
拥有第1对KI时,解剩下的KI顺序为:5,3,7,0,4,2,6
拥有第2对KI时,解剩下的KI顺序为:6,0,4,1,5,3,7
拥有第3对KI时,解剩下的KI顺序为:7,1,5,0,4,2,6
拥有第4对KI时,解剩下的KI顺序为:0,2,6,1,5,3,7
拥有第5对KI时,解剩下的KI顺序为:1,3,7,0,4,2,6
拥有第6对KI时,解剩下的KI顺序为:2,0,4,1,5,3,7
拥有第7对KI时,解剩下的KI顺序为:3,1,5,0,4,2,6