SIM卡(Subscriber Identity Module)。即用户识别模块,是一张符合GSM规范的"智慧卡"。SIM卡可以插入任何一部符合GSM规范的移动电话中,"实现电话号码随卡不随机的功能",而通话费则自动计入持卡用户的帐单上,与手机无关。

SIM卡作为智能卡中特殊的一类卡,采用标准的接触式IC卡。他受到ISO7816标准(接触式集成电路IC卡的规定)和ETSI(欧洲电信标准委员会)的GSM11.11等标准的规范。他沿袭了智能卡在安全中的特色,并在移动用户认证和移动商务中扮演重要的角色。

目前手机用户将一些重要的电话号码都储存在手机的SIM卡上。如果手机失窃,用户可以买一部新的,但是储存的号码怎么办呢?如果用户能事先将储存在SIM卡上的电话号码做一份电子拷贝,这样就算手机丢失了,用户还是可以很容易地将保存的号码写入到新的SIM卡里。为此,研究并设计了SIM卡读卡器,通过他可以将手机SIM卡中信息读取到电脑中,方便地实现电话簿和短消息的编辑、备份和管理。为经常使用手机的用户提供了一个经济、便捷的信息备份管理解决方案。

2 SIM卡常识

SIM卡是一张符合GSM规范"智能卡",他实际上是一个装有微处理器的芯片卡,内部有5个模块,且每个模块都对应一个功能:CPU(8位)、程序存储器(3~8 kb)、工作存储器(6~16 kb)、数据存储器(128~256 kb)和串行通信单元。SIM卡能实现存储数据(电话本、短消息等)和在安全条件下(个人身份号码PIN、鉴权钥Ki正确)完成客户身份鉴权和客户信息加密算法的全过程。这些功能都是由SIM卡内的一部具有操作系统的微处理机完成。SIM卡具有机卡分离(SIM-ME接口)、通信安全可靠、成本低等特点。

(1) SIM卡的物理特征:可以分尺寸为54 mm×84 mmID-1 SIM(大卡)和尺寸为25 mm×15 mmPlug-in SIM(小卡)两种。

(2) SIM卡的存储容量:一般SIM卡有8 kB的存储容量,另外还有容量分别为16 k和32 k的SIM卡,即STK SIM卡。

(3) SIM卡的使用温度:标准温度-25~+70℃,极限温度-35~85℃,极限情况下每次使用不得超过4小时,总共使用不得超过100次。

(4) SIM卡的使用寿命:物理寿命是取决于客户的插拔次数,约在1万次左右;而集成电路芯片的寿命取决于数据存储器的写入次数,不同厂家其指标有所不同,就Mo-torola经试验室试验约5万次左右。平均寿命约为4年。

3 SIM卡与移动台设备的接口

SIM卡芯片有8个触点,与移动台设备相互接通:

(1) 电源VCC(触点C1):4.5~5.5 V,ICC<10 mA;

(2) 复位RST(触点C2);

(3) 时钟CLK(触点C3):卡时钟3.25 MHz;

(4) 不提供(触点C4);

(5) 接地端GND(触点C5);

(6) 编程电压VPP(触点C6);

(7) 数据I/O口(触点C7);

(8) 不提供(触点C8)。

SIM卡同移动台设备连接时至少需5个连接线:数据I/O口(Data)、复位(RST)、接地端(GND)、电源(VCC)、时钟(CLK)。他与基带单元的接口电路如图1所示。其中SIM CD为SIM卡检测脚,用于检测SIM卡的拔插;SIM CLK为ME提供的读/写SIM卡的参考时钟;SIMRST为SIM卡复位信号;SIM IO为串行数据输入/输出线,由20 kΩ上拉电阻上拉至高电平;SIM RnW为读/写控制信号,用以指示当前SIM_IO线上数据传输的方向;SIM PWCTRL为功率控制信号,可在空闲方式时控制SIM卡上的电源关闭,从而降低功耗,延长待机时间。

4 SIM卡内部数据结构

SIM卡共有3类数据文件:主文件(Master File,MF)、专用文件(Dedicate File,DF)、基本文件(ElementFile,EF)。组织结构规定如下:

0x3F00代表根目录,0x2FXX代表根目录下的基本文件;

0x7FXX代表一级子目录,0x6FXX代表一级子目录下的基本文件;

0x5FXX代表二级子目录,0x4FXX代表二级子目录下的基本文件。

5 SIM卡上电复位流程

SIM卡符合国际标准ISO7816的要求,按照协议中的规定,SIM应有8个触点,包括电源接口、复位控制接口、时钟输入接口、数据输入输出接口,SIM卡工作时整体电流消耗小于10 mA。SIM卡的时钟频率可由外部提供,在指定时问内运行鉴权过程时至少需要13/4 MHz的时钟频率,其他情况下,使用最小为13/8 MHz的时钟频率。I/O端口的数据传输波特率为时钟频率的1/372。

5.1 触点接通与冷复位时序(Activation and cold reset)

初始时,所有端口皆处于低电平(L)态,电压范围0~0.4 V;VCC电源电压先上电(H态),后提供VPP编程电压,在智能SIM卡中,VPP端无用,电压范围5 V±0.4 V;VCC电源端稳定一段时间后,将IO端口置为接收方式(H态),并提供稳定的CLK时钟信号(注:IO口需在提供CLK信号前或在提供CLK信号后200个时钟周期内(ta)置为接收方式);RST复位信号需在提供CLK信号后400个时钟周期内(tb)保持L态,之后才可置为H态;提供复位信号后400~40 000个时钟周期内(tc),I/O口有复位应答。

5.2 热复位时序(Warm reset)

热复位在冷复位失败情况下使用,过程中保持VCC为H态,且有稳定的CLK时钟信号;热复位时需保持RST端为L态的时间至少为400个时钟周期(te);在RST端置L态之前或之后200个时钟周期时间内(td),IO口应置为接收方式;在RST置为H态后的400~40 000个时钟周期内,I/O口有复位应答。

5.3 时钟停止时序(Clock stop)

外部控制停止时钟,可使SIM卡通信暂时中断,过程中保持VCC端与复位端RST为H态;要停止时钟,需在I/O口输出最后一个字符之后等待至少1 860个时钟周期(tg);恢复时钟后至少等待700个时钟周期(th),I/O开始有字符输出。

5.4 触点释放时序(Deactivation)

将RST端置为L态;结束CLK输入并将I/O口置为L态;最后将VCC端置为L态。

5.5 SIM卡的复位应答

SIM卡的触点被激活之后,终端启动一个冷复位。如果SIM卡在冷复位后回送的字节数不符,或在19 200个初始etu之内复位应答未完成,终端不立即终止卡片操作过程,而是再发一个热复位信号。如果仍然得到同样的结果,那么,接口没备应释放触点,否则卡将继续进行后续操作。流程如图6所示。

复位应答最多为32个字节(包括历史字符,不包括初始字符),其中历史字符最多为15个字符,协议分为T=O与T=1两种,一张SIM卡只支持其中的一种协议。位持续时间:在IO上的位持续时间被定义为一个基本时间单元etu。复位应答期间的位持续时间称为"初始etu"。初始etu=372/fs=372个时钟周期。复位应答之后的位持续时间称为"当前etu",当前etu=F/D/fs。F为时钟频率变换因数,D为比特率调整因数,均在SIM卡复位应答的接口字符TA1中给出,缺省值为F=372,D=1,即复位应答之后的当前etu=初始etu。复位应答过程中相连两字符起始位前沿之间的最小时间间隔为12个初始etu,最大时间间隔为9 600个初始etu,所有应答字符在19 200个初始etu的时间内传送完,即从第一个字符的起始位前沿到最后一个字符起始位前沿后的12个初始etu结束)。

复位应答格式:

TS 初始字符(强制性的),确定后续字符传送顺序(高位先送还是低位先送);

TO 格式字符(强制性的);

TA1/TB1/TC1/TD1~TAi/TBi/TCi/TDi 接口字符(选择性的);

T1~TK历史字符(选择性的);

TCK 校验字符(有条件的)T=0时不出现。

6 SIM卡信息交互规程

6.1 SIM卡信息交互指令格式

6.1.1 命令格式

CLA 命令类别代码,GSM为0xA0; INS 指令编码;

P1/P2/P3 指令参量,P3由INS决定,代表通讯的数据信息长度,有指令与响应两个方向;

DATA 指令附加数据。

6.1.2 应答格式

DATA:响应数据; SW1/SW2:返回命令状态。

6.1.3 通用错误返回代码表

6.2 常用的基本指令

6.2.1 目录或文件选择指令(SELECT)

选择一个文件,选择成功后,对线性固定型文件,记录指针不确定。对循环型文件,记录指针指向最近更新或增加的一条记录。

CLA=A0,命令类别代码,GSM为0xA0;INS:指令编码,SELECT为A4;P1=00,按文件标识符选择;P2=00,应答:

目录地址:

正确命令响应为:

0x9F代表命令正确执行,XX为SIM卡返回的数据长度;返回0x94/0x04,代表给出的目录地址是错误的。在复位应答之后(ATR),主要文件(MF)被默认为选中,成为当前目录。然后,可采用符合下列原则的SELECT功能来选择每种文件: ① 选择DF或MF设为当前目录;DF是在选择任何他的EF之前被先选择出来

② 选择EF设为当前文件,DF或MF是EF的上层。当前EF总是当前目录的下层。

可选择的文件包括:属于当前目录的直接子文件;属于当前DF的父文件的直接子DF;当前月录的上层;当前DF;MF。

6.2.2 取前一命令应答数据指令(GET RESPONSE)

Length(R):响应数据最大长度。

全部命令响应为:

0x90/0x00代表命令正确执行。

6.2.3 从透明的数据文件中读取以二进制形式存储的字节串指令(READ BINARY)

Offset:要读取数据的偏移地址; Length(R):响应数据最大长度。

全部命令响应为:

0x90/0x00代表命令正确执行;返回0x94/0x00,代表没有数据文件被选中,即当前被选中的可能是目录而不是文件;返回0x94/0x08,代表当前目录或数据文件与指令不一致,即当前数据不是以二进制形式存储的;返回0x98/0x04,代表本次操作不满足存取安全规则,密码认证未通过。

7 SIM卡数据读写测试

SIM卡数据读写测试的具体步骤及其结果如下:

Step1 SIM卡首先上电复位,原则是先接通触点,后启动冷复位,若冷复位失败,启动热复位,若热复位也不成功,则释放触点并报错。冷复位或热复位成功后,SIM卡应输出复位应答。

实验测试中取得的复位应答信号如下:

0x3B代表协议为正向约定;0x67代表TB1与TC1出现,历史字符字节数为7;0x00代表不需要VPP;0x29~0x22为7个历史字符。 Step2 复位成功后,发送目录选择指令,将当前目录选取到GSM目录,指令如下:

7F20为GSM目录地址;

SIM卡返回:

 代表命令正确执行,且响应字符有34个字节。

Step3 发送取命令响应数据指令:

 0x22代表指令返回数据最大为34个字节;

SIM卡返回:

0xC0代表响应数据对应的指令为SELECT;0x90/0x00代表命令正确执行。

Step4 再次发送目录选择指令,将当前目录选取到IMSI目录,指令如下:

6F07为IMSI数据目录;

SIM卡返回:

代表命令正确执行,且响应字符有15个字节。

Step5:发送取命令响应数据指令:

 0x0F代表指令返回数据最大为15个字节;

SIM卡返回:

 0xC0代表响应数据对应的指令为SELECT;0x90/0x00代表命令正确执行。

Step6 选取到所需要进行操作的目录后,执行读取数据指令,由于IMSI号是以二进制形式存储的,所以使用二进制数据读取指令:

 0x00代表数据偏移地址为0,即从第一个字节开始读数据;0x09表示IMSI信息有9个字节;

SIM卡返回:

 0xB0代表响应数据对应的指令为READ BINARY;0x08代表IMSI号有8个字节数据;0x90/0x00代表命令正确执行。按照协议,该SIM卡IMSI号即为:

460 00 0104559542,符合国际移动用户识别码IMSI(International Mobile Subscriber Identification Number)的编码规则,即IMSI(国际移动用户识别码)=MCC(移动国家号)+MNC(移动网号)+MSISDN(移动用户号码)。

8 结 语

SIM卡符合GSM规范,采用标准的接触式IC卡,受到ISO7816标准的规范。本文在研究接触式集成电路IC卡国际标准ISO7816的基础之上,提出了一种SIM卡读卡器的设计方案,针对SIM卡信息交互规程给出了具体的测试步骤,测试结果证明了该设计的可行性,读卡器能够稳定可靠地工作。

SIM卡读卡器的研究与设计的更多相关文章

  1. 中国教授在BlackHat现场演示破解SIM卡AES-128加密

    使用一个PC和示波器克隆3G/4G SIM卡,破解过程只需十分钟.上海交大教授郁昱现场展示了如何成功复制SIM卡,以及一张克隆卡如何变更了支付宝的密码并潜在盗取账户资金. 破解SIM卡加密 今年二月, ...

  2. 部分SIM卡被曝存安全漏洞:7.5亿部手机受牵连

    7月22日消息,据国外媒体报道,一安全研究人员发现部分移动SIM卡所使用的加密方式存在一个安全漏洞,可能会导致手机被黑客远程控制. DES数据加密标准的SIM卡——DES是一种较旧的标准,目前正被部分 ...

  3. simtrace之探秘SIM卡中的世界

    0×00 关于SIM卡 众所周知SIM卡是一张插在手机上的小卡,其全称为Subscriber Identity Module 客户识别模块.不过,这个世界上并没有多少人知道SIM卡中的操作系统是基于j ...

  4. SIM卡基础知识

    一:了解Sim卡和GSM网络登录步骤的基本知识 (一)名词解释: SIM卡(Subscriber Identity Module),即用户识别卡,它是一张符合GSM规范的“智慧卡”,SIM卡有大小之分 ...

  5. 三种尺寸:手机SIM卡使用指南

    毫无疑问目前卖的最火的手机非iPhone 5s莫属,相信仍有不少网友目前处于观望之中,由于iPhone 5s和iPhone 5c采用与iPhone相同的Nano-SIM卡,因此不少新用户在使用之前也徒 ...

  6. 【双模卡的相关知识】解SIM卡前需要知道的信息(SIM年分和厂商识别)

    <ignore_js_op> 二.SIM版本问题SIM卡的版本有两种说法,一是有些是制造厂制定的,二是电信公司的制定.下面以移动为例,目前我们手里的SIM有几种版本:v0.v1.v2.v3 ...

  7. web开发与IC卡读卡器

    前段时间有个项目在客户端web下使用IC卡读卡器,试了很多种方案都觉得麻烦,最后在网上找了个现成的方案,采用了YW-605HA读卡器,厂家就不说了,免得说做广告.开发起来也挺简单. 他们将IC卡读卡器 ...

  8. sim卡联系人name为空的问题。

    1,之前的版本出现Bug:新建name为空的sim卡联系人,无法删除. 解决: 2,而后的版本出现新Bug:新建name不为空,Num不为空的sim卡联系人,然后编辑sim卡联系人,将Name清空,无 ...

  9. Android 手机卫士--绑定sim卡序列号

    现在开始具体 处理每一个导航页面的逻辑,首先看第二个导航页 本文地址:http://www.cnblogs.com/wuyudong/p/5949775.html,转载请注明出处. 这里需要实现绑定s ...

随机推荐

  1. GS1已分配给国家(地区)编码组织的前缀码

    前缀码即商品条码(EAN-13或者EAN-8)的前三位,其代表的是一个国家和地区,由此前缀可查出所购买的商品是出产自哪个国家的. 下表列出了GS1已分配给国家(地区)编码组织的前缀码 前缀码 管理的国 ...

  2. GPS定位

    User Location(用户定位): 1.User Location能做什么? 获取用户位置.追踪用户的移动: 2.User Location关键API? Location Manager:用于管 ...

  3. 一个站点的诞生06-- ORM

    站点上的数据,存在数据库里. 一般用Mysql,也实用sqlite,Postgre.操作数据库要会SQL语言,这个有点麻烦,经常须要查手冊. 此外.每家数据库在实现SQL语言的时候,经常会加料,添加一 ...

  4. AS 7 Internal Architecture Overview--reference

    High Level Overview At a coarse level, AS 7 consists of two main elements: A core manageable service ...

  5. 《Android开发艺术探索》读书笔记 (3) 第3章 View的事件体系

    本节和<Android群英传>中的第五章Scroll分析有关系,建议先阅读该章的总结 第3章 View的事件体系 3.1 View基本知识 (1)view的层次结构:ViewGroup也是 ...

  6. Day10 - Python协程、异步IO、redis缓存、rabbitMQ队列

    Python之路,Day9 - 异步IO\数据库\队列\缓存   本节内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 Python连接Mysql数据库操作 RabbitM ...

  7. Linq101-Conversion Operators

    using System; using System.Linq; namespace Linq101 { class Conversion { /// <summary> /// This ...

  8. winapi获取鼠标位置

    using System; using System.Drawing; using System.Runtime.InteropServices; using System.Threading; na ...

  9. (Excel导出失败)检索COM类工厂中CLSID为{00024500-0000-0000-C000-000000000046}的组件时失

    在DCOM 中不存在WORD.EXCEL等OFFICE组件   最近在做一个关于office转存PDF的Web项目.开发过程一切顺利. 起初在网上找到一些Word,PPT转PDF的代码.很好用.一切顺 ...

  10. SQL 中的好习惯和坏习惯

    在程序员日常的工作中,SQL可以说不可避免的,高效的SQL可以带来更加愉悦的体验.好的SQL书写习惯会给我们的工作带来极大的好处.简单总结下SQL的好习惯和坏习惯. IN和NOT IN 操作符 编码中 ...