一种移动终端与智能卡之间的大容量数据交换方法
技术领域
本发明涉及移动终端与智能卡应用,具体涉及一种移动终端与智能卡之间的大容量数据交换方法。
背景技术
(一)随着无线通信技术的飞速发展和广泛应用,各种各样的移动增值业务/应用相继出现。其中比较典型的有两类:基于移动终端的应用和基于智能卡的应用。前者虽得到了一定程度的发展,但由于很少受运营商的监管,因此得不到运营商的大力支持;而基于智能卡的应用,由于其集成在智能卡内,完全受运营商的监控,因此,比基于移动终端的应用更容易得到运营商的支持,从而得到大面积的推广。
但是,由于受到包括智能卡的处理能力、通信手段和容量在内的诸多技术条件的限制,导致目前基于智能卡的应用只能提供功能简单、模式单一的应用,典型的如:SIM卡应用工具箱(SIM Application Toolkit,简称SAT或STK),只能提供纯文字菜单式的显示。这与基于移动终端的应用发展形成了很大反差,与整个移动通信行业的飞速发展脱节。
针对这种情况,已经出现多种具有超大容量的智能卡,其容量通常以兆字节为单位计,远大于目前市面上的普通智能卡,其最大容量为256k字节。从而使得在智能卡上开发和部署大量新的应用成为可能。但由于目前移动终端与智能卡之间仍然采用ISO/IEC 7816以及移动通信的有关协议,导致其通信手段和模式仍然单一,很难满足这些应用的通信要求。
(二)目前,移动终端访问智能卡中数据的方法如图1所示,移动终端与智能卡间的通信完全通过移动终端的基带处理器来完成,其底层物理传输通道遵循ISO/IEC 7816-3、-4标准。
(1)在实际操作中,移动终端上层应用或其它终端,如个人电脑PC,将AT命令发送给基带处理器,基带处理器再将其转换成符合ISO/IEC 7816标准的应用协议数据单元(Application Protocol Data Unit,简称APDU)命令将其发送给智能卡,来实现命令的执行和数据的传输。
第三代移动伙伴计划技术规范3GPP TS 07.07规范中定义了适用于移动终端的AT命令集。除了一些针对具体应用的①专用命令外,如选择电话本存储空间等,还有②两条通用AT命令可用于直接向用户识别模块-SIM卡发送APDU命令。这两条命令分别是:CSIM和CRSM。其中,CSIM是通用SIM访问命令(Generic SIM access),通过此命令移动终端可以向SIM发送和返回所有符合GSM11.11规范中的APDU命令;而CRSM是受限SIM访问命令(Restricted SIM access),只可以传输GSM11.11规范中指定的六条命令,包括读/更新二进制READ/UPDATE BINARY、读/更新记录READ/UPDATE RECORD、取响应GET RESPONSE、获取状态STATUS等。
(2)由于上述直接向智能卡发送APDU的AT命令都是可选命令,并非所有的基带处理器都提供对它们的支持。即便提供,如果移动终端的操作系统或人机接口MMI不对上层应用软件提供相应的应用编程接口(ApplicationProgramming Interface,简称API),移动终端的应用软件仍无法使用所述AT命令来建立一种统一的、通用的可以直接访问智能卡内数据的通道。目前的实际情况是这两种可能性均存在,即①有些基带处理器不支持直接向智能卡发送APDU的AT命令,②有些移动终端操作系统不向上层应用软件开放所述命令的接口。基于此,从通用性和兼容性的角度来看,移动终端的上层应用软件不能采用直接向智能卡发送可选APDU的AT命令的方式来访问智能卡,只能借助移动终端当前提供的访问智能卡的功能或接口来实现数据/文件的传输,以便在移动终端上建立各种基于智能卡的移动增值应用。
此外,由于APDU命令格式本身的限制,智能卡文件的最大容量不超过64k字节,而APDU每次传送的数据不超过256字节或64K字节,如此小的文件容量和数据传输量导致无法在智能卡上实现复杂的应用,比如图形化的应用。因此,有必要扩展智能卡可以容纳和传输的数据容量,尤其是要解决如何利用标准的ISO/IEC 7816接口来传输大容量数据。
(三)ISO/IEC 7816-4是主从结构、命令响应式的协议。APDU分为命令APDU和响应APDU两类。由主机端向智能卡发出命令APDU;智能卡接受命令APDU后,执行命令并返回响应APDU。
命令APDU包括一个必备的4字节的命令头(CLA、INS、P1、P2)和一个可选的可变长度的命令体(Lc、Data、Le),如下所示:
命令头为命令的编码,Lc为体内数据Data的长度;Data为发送的数据;Le是期望应答APDU数据字段的最大字节数。当Le=0时,表示请求送回最大应答数据字节数,如Le为1字节长度,则最大数据字节数为256。
命令APDU命令头中的各字节的含义为:
CLA:指令类别,GSM11.11规定,0xA0用于GSM应用;
INS:指令代码;
P1、P2:指令的参数,P1、P2的含义和具体指令相关。
在GSM应用中,对ISO/IEC 7816-4的命令APDU格式进行了精简,其命令APDU的格式如下:
其中,P3表示指令中送给SIM卡的数据长度,或是表示等待从卡响应的数据最大长度。
响应APDU由可变长度的数据体和2字节尾部组成,其中数据体可选,尾部必备,如下表所示:
其中,数据体的字节数由命令APDU的Le指出。Data是接收设备,如智能卡,接收命令APDU并进行处理后送回发送设备,如接口设备,的数据。尾部SW1和SW2为状态代码,各一个字节,指示命令执行的结果正确与否。
无论是命令APDU,还是响应APDU,其中的数据体Data都可用于传输自定义的数据。但由于APDU格式及定义所限,其长度由Le、Lc或P3来决定。Lc、Le有短型和扩展型两种,其长度分别为1个字节和3个字节,3个字节中第一个字节值为0。因此,每条APDU所能传输的数据长度最多为64k字节。而在GSM协议中P3的长度固定为1字节,意味着每条APDU所能传输的数据长度最多为256字节。因此,要传输更大容量的数据,必须采用多条APDU和/或多个文件才能实现。
在移动通信协议中,通过状态字节SW1、SW2的值可以自动发送多条APDU命令。当SW1/SW2=0x9FXX时,移动终端需要发送GET RESPONSE命令来获取输出数据。当采用ENVELOPE命令进行智能卡数据下载时,如果SW1/SW2=0x9EXX时,移动终端同样需要发送GET RESPONSE命令来获取响应数据。在支持主动式命令移动终端中,当SW1/SW2=0x91XX时,移动终端需要发送FETCH命令来获取智能卡需要发送的数据。这样,通过状态字节,就可以在移动终端与智能卡之间自动进行多条APDU命令或大容量数据的传送。
虽然移动终端与智能卡都支持上述机制,但由于这些命令或机制都属于硬件底层命令,并没有完全对上层应用开放。因此,移动终端的上层应用软件无法利用这种数据传输机制。尤其是主动式命令,需要智能卡和移动终端同时都支持时才能使用。
发明内容
本发明需要解决的技术问题是提供一种移动终端与智能卡之间的大容量数据交换方法,能够使移动终端应用直接与智能卡交换大容量数据,并进一步保证数据传输的完整性和有效性。
本发明的上述技术问题这样解决,提供一种移动终端与智能卡之间的大容量数据交换方法,包括以下步骤:
1.1)利用通用APDU命令建立移动终端与智能卡之间的数据传输通道;解决一致性和兼容性问题;
1.2)利用额外附加在传输数据上的用于区分不同移动终端应用或不同智能卡文件的目的地址和源地址建立具体逻辑通道;
1.3)利用所述数据传输通道和具体逻辑通道分块传输其各分块大小符合标准规定的大容量数据。
按照本发明提供的数据交换方法,所述通用APDU命令包括对移动终端应用开放的更新二进制UPDATE BINARY APDU命令及其响应和读二进制READ BINARY APDU命令及其响应;所述更新二进制UPDATE BINARYAPDU命令和读二进制READ BINARY APDU命令响应携带被传输数据。
按照本发明提供的数据交换方法,所述分块包括所述大容量数据的分割块单元以及对应目的地址单元和源地址单元;其中最后一个分块包括结束标志。
按照本发明提供的数据交换方法,所述分块还包括下一个数据块长度单元,所述下一个数据块长度单元的值为0是传输结束标志,所述传输结束标志包括但不限制于该方式。
按照本发明提供的数据交换方法,所述分块还可包括数据校验单元,所述步骤1.3)包括发送方的计算校验值,并将该校验值封装到所述校验单元,和接收方根据所述数据校验单元进行接收数据校验的过程。
按照本发明提供的数据交换方法,移动终端应用向智能卡进行数据传输时,所述步骤1.3)包括智能卡利用APDU命令响应的状态字节SW1/SW2向移动终端应用发送命令执行和校验成功/失败。按照本发明提供的数据交换方法,所述步骤1.3)还可包括命令执行或校验失败后进行重传;所述重传包括利用所述读二进制READ BINARY APDU命令及其响应获取错误状态记录文件并分析错误状态记录决定是否重传。
按照本发明提供的数据交换方法,每一个所述分块包括与自身数据对应的数据校验单元。
按照本发明提供的数据交换方法,每多个所述分块包括一个与该多个所述分块对应的数据校验单元,可节省数据校验单元,多传输有效数据。
按照本发明提供的数据交换方法,每一个所述分块包括与本块及其存在的前一分块对应的数据校验单元,即第一分块的数据校验单元与自身的数据对应,其他与两分块的数据对应,校验时与前一分块结合校验,这样进一步保证数据链接的正确性。
按照本发明提供的数据交换方法,每多个所述分块包括一个与本多个分块及其存在的前一个分块对应的数据校验单元,即最先传输的多个分块的数据校验单元与自身的多个分块数据对应,其他多个分块的数据校验单元与本多个分块以及前一个分块的数据相对应,校验时与前一个分块结合校验,这样,不仅进一步保证数据链接的正确性,还可以节省校验单元。
按照本发明提供的数据交换方法,所述标准是ISO/IEC 7816标准,所述标准规定每条APDU最大传输数据可以是256字节或64k字节。
按照本发明提供的数据交换方法,在GSM协议中,所述标准规定每条APDU最大传输数据是256字节。
本发明提供的移动终端与智能卡之间大容量数据交换方法,通过采用通用APDU命令,在移动终端与智能卡之间建立统一数据传输通道,进一步采用数据封装和隧道协议的方法,解决利用标准ISO/IEC 7816接口进行大容量数据传输问题,采用本发明方法,具有以下明显效果:
1)移动终端可以直接访问智能卡内的任意数据,同时不用考虑是否存在硬件兼容性的问题;
2)移动终端与智能卡之间可以可靠地传输大容量数据,以实现各种基于智能卡的应用;
3)移动终端可以采用文件系统的操作方式直接访问智能卡数据,极大地方便了应用的实现。
附图说明
下面结合附图和具体实施例进一步对本发明进行详细说明。
图1为传统移动终端应用访问智能卡数据的结构示意图;
图2为本发明的移动终端应用访问智能卡数据的访问模型示意图;
图3为本发明的数据包格式说明;
图4为本发明的数据封装过程示意图;
图5为本发明的移动终端向智能卡传输大容量数据的流程示意图;
图6为本发明的移动终端向智能卡传输大容量数据时出错处理流程示意图;
图7为本发明的移动终端从智能卡获取大容量数据的流程示意图;
图8为本发明的移动终端从智能卡获取大容量数据时出错处理流程示意图。
具体实施方式
首先,说明本发明移动终端与智能卡之间大容量数据交换方法中移动终端应用访问智能卡数据方式与目前方式的区别,本发明模型如图2所示,在目前方式(图1)的基础上,利用通用的APDU命令,在移动终端与智能卡之间建立起通用的数据传输通道。移动终端上层应用采用通用的APDU命令直接访问智能卡进行大数据量传输,而不采用STK命令或AT命令;以避免图1中可能由于软件(如STK虚拟机)接口或硬件接口(如AT命令)引起的不兼容性。
第二步,说明本发明思路和主要手段:
(一)采用对上层应用开放的通用APDU命令:如采用读二进制READBINARY和更新二进制UPDATE BINARY的命令来实现大容量数据传输。
(二)建立逻辑通道:由于移动终端与智能卡均可以支持多种应用,因此,在移动终端与智能卡之间也需要建立与多种应用同时进行数据传输的机制。本发明采用逻辑通道的方法来区别不同应用间的数据传输。逻辑通道包括目的地址和源地址,分别代表不同的应用或文件。
(三)使用“下一个数据块长度标识”:由于移动终端对底层命令的屏蔽,往往也无法使用0x9FXX、0x9EXX和0x91XX等状态字来告诉接收端数据是否已经传输完成。因此,本发明在每个数据包的传输标识中采用“下一个数据块长度标识”来说明本次数据传输是否完成,以指示是否需要继续发送APDU命令。接收端可以根据“下一个数据块长度标识”来决定是否需要继续进行APDU传输。当“下一个数据块长度标识”值为0x00时,表示没有数据可传,本次传输结束;当“下一个数据块长度标识”值为非零时,则表示下一个APDU命令需要传送的字节数。通过这种机制,可以实现自动完成大容量数据的传送任务。
(四)校验:由于大容量数据需要利用多次APDU来传输,而且,每次传输的数据量也相对较大。因此,为了保证数据的完整性以及可靠性,需要加入数据校验机制:即每发送n(n≥1)条APDU命令,传输n块数据后,对这n块数据进行校验,当校验发现数据错误时,则重传n块数据。最后传输的数据块数k≤n。当n=1时,每传输一块数据就校验一次,当发现校验错误时,发送端重发本次APDU命令,及时地纠正出错的数据。当n为所有要传输的数据块时,只需在传输完毕后对所有的数据进行一次校验,但是校验一旦发现数据错误,则需要重传所有的数据块。
(五)级联校验:由于大文件需要分解为多个数据块进行传输,为了防止数据合并出错,进一步,本发明采用级联验证方法:除最先传输的n(n≥1)块数据外,生成对应的数据校验值时,是对前一次传输的一块数据和本n块数据一起计算校验值。这样,最先传输的n块数据的校验值是利用该n块数据计算校验值,后续传输的n块数据的校验值是利用前一次传输的一块数据和本传输的n块数据共n+1块数据计算校验值,对最后传输的k≤n块数据计算校验值时,是利用前一次传输的一块数据和本传输的k块数据共k+1块数据计算校验值。验证时,需要将本传输的n块或k块数据与前一次传输的一块数据一起合并计算校验值,从而可以防止数据链路出错。
(六)状态字节SW1/SW2重定义:在移动终端应用作接收方时,可直接通过校验成功与否判断是否传输成功,但对于移动终端应用作发送方时,由于在采用APDU进行数据传输时,APDU命令响应的状态字节SW1/SW2只能表明本次APDU命令是否成功执行,无法向移动终端应用表明本次更新二进制文件的传输是否成功,即无法判断数据校验成功。因此,本发明仍然采用状态字节来表示更新二进制文件APDU命令执行状态,返回0x9000状态字节时,表示传输和校验均成功;当返回其它值,则说明传输或校验出错,暂停数据传输,并将错误状态或信息写到一个记录错误状态的文件中,然后返回传输失败的状态字节,等待发送端发送查询操作状态的指令,然后根据情况决定是否重发数据或中止传输。同样地,查询操作状态的指令也是通过常用的APDU命令读取特定的错误状态记录文件来实现的。
第三步,详细说明本发明移动终端与智能卡之间大容量数据交换方法具体可以采用的一种数据包格式及其对应数据封装过程:
(一)数据包格式,如图3所示,该数据包DATA最大256字节,封装在APDU命令中,包括2字节的传输标识、最多250字节的数据块和4字节的CRC32校验值,其中传输标识包括1字节的逻辑通道和1字节的下一个数据块长度,其中1字节的逻辑通道b8-b5为目的地址,b4-b1为源地址,下一个数据块长度为00时,本次是最后一次传输。
(二)数据封装过程,如图4所示,包括以下步骤:
401)数据分块和计算校验值:对所有要传输的数据进行分块处理,分解成适合APDU命令传送的大小,并对传输的数据生成级联校验码;
402)~407)给加入级联校验码的数据块打上相应的传输标识进行封装,最后将封装好的数据包作为APDU命令中的数据体Data进行传送,直至将所有的数据包传送完毕。
当n=1时,对传输的每一块数据都生成级联校验码,将所述校验码、传输标识和传输的该块数据进行封装;当n>1时,对传输的n块数据生成一个级联校验码,将所述校验码、传输标识和n块数据的一个数据块进行封装,例如n块数据的最后一个数据块,将传输标识和其余n-1块数据进行封装;最后传输的数据块k≤n,对传输的k块数据生成一个级联校验码,将所述校验码、传输标识和k块数据的一个数据块进行封装,例如k块数据的最后一个数据块,将传输标识和其余k-1块数据进行封装。
最后,以采用Windows Mobile操作系统的智能移动终端作为实例对本发明方法进行详细说明:
(一)Windows Mobile基础
①在Windows Mobile操作系统中,其提供了SIM Manager API来实现与SIM卡的数据交互。在simmgr.h头文件中定义了部分函数,用于从SIM卡获取信息,按功能进行分类,这些函数主要包括安全、电话簿、短信、文件等几大类。可以与SIM卡进行数据交换的函数主要是电话簿、短信、记录/文件三类操作函数。电话本、短信两类函数主要是是针对特定的数据结构,如电话簿、短信,提供出来的,不适用于自定义数据结构;如果需要传输自定义的数据结构,则采用记录/文件类操作函数比较合适。
②在Windows Mobile中,支持ISO/IEC 7816-4和GSM 11.11规定的多种基本文件结构:
1、透明文件:从接口看到的文件是一个数据单元序列;
2、线性定长记录文件:具有固定长度记录的线性文件;
3、线性不定长记录文件:具有可变长度记录的线性文件;
4、具有固定长度记录的循环文件;
具体的文件类型编码如下:
文件类型 |
编码 |
未知类型 |
0x00000000 |
透明文件 |
0x00000001 |
循环文件 |
0x00000002 |
线性定长记录文件 |
0x00000003 |
主文件 |
0x00000004 |
目录文件 |
0x00000005 |
(二)其他基础
本发明用读/写/更新透明文件的方式来实现数据交换,通过连续多次的操作来实现大容量数据的交换。GSM11.11中与之对应的APDU命令为READ BINARY和UPDATE BINARY,相应的格式如下:
命令 |
类别 |
INS |
P1 |
P2 |
P3 |
READ BINARY |
0xA0 |
0xB0 |
offset high |
offsetlow |
lgth |
UPDATEBINARY |
0xA0 |
0xD6 |
offset high |
offsetlow |
lgth |
响应参数/数据如下:
Bit位 |
描述 |
长度 |
1-lgth |
读/更新的数据 |
lgth |
在Windows Mobile系统中,上述透明文件的读写功能是通过SimReadRecord和SimWriteRecord两个函数来完成。由于这两个函数与上述的APDU命令一一对应,因此,为简明起见,下面以GSM协议中的APDU命令为例进行说明。
①建立数据交换文件:在执行上述两条APDU命令之前,需要选择文件。本实施例在SIM卡内建立三个透明文件用于数据交换。一个用于向SIM卡内传输数据,设为0x2FA0;一个用于从SIM卡内传出数据,设为0x2FA1;一个用于记录错误状态,设为0x2FA2。实际上,这几个文件都可以仅仅是一个虚拟文件,只有文件名,没有实际为其分配存储空间。将其与常用的APDU命令绑定,就可以形成用于传输大容量数据的专用APDU命令,由移动终端的上层应用和SIM卡负责对这些专用APDU命令的具体含义与功能进行解释和执行。
②硬件要求:由于遵从ISO/IEC7816规范的SIM卡的文件大小不超过64k字节,而本发明所要传输的文件大小不应受任何限制。因此,需要SIM卡的文件系统支持超过64k字节容量的文件,这可以通过采用通用的文件系统,如FAT16/32来实现。SIM卡操作系统及其文件系统的实现问题不在本发明讨论之列,因此,若无特殊说明,本发明所指的SIM卡是指已经具备这种大容量(超过64k字节)文件访问功能的SIM卡。目前,移动终端的文件系统都支持超过64k字节的文件,因此,本发明对移动终端没有特殊要求。
③APDU命令:移动终端与SIM卡之间的数据交换可以是双向的,既可以由移动终端向SIM卡传输数据,也可以由SIM卡向移动终端传输数据。但由于APDU命令是主从结构,通常是移动终端主动发送APDU命令,SIM卡被动接收和执行APDU命令,并返回执行结果。因此,在此实施例中,为了保持对现有技术的兼容性和适应性,仍然以移动终端作为主动者,发送APDU命令;SIM卡作为从动者,接收APDU。当移动终端需要向SIM卡传输数据时,移动终端主动发送APDU命令。当需要从SIM卡中读取数据时,也是由移动终端主动发起读取数据的APDU命令。对于支持主动式命令的移动终端和SIM卡,可以采用相同的设计原理,通过对ENVELOPE和FETCH等相关指令进行功能扩展,也可以实现大容量任意数据的传输和交换。考虑到移动终端上层应用对主动式命令支持和开放的局限性,为了尽量扩大使用范围,提高兼容性,本实施例以传统的(GSM 11.11协议中指定的)APDU命令来例来实现任意格式的数据传输和交换。
④数据校验和重传:在本发明的实施例中,如果数据传输出错,则可以重发上次传输的数据;同时也需要在每次APDU传送完成后告诉接收端传输数据是否已经传完,是否需要继续传输。为此,为每块需要传送的数据附以相应的传输标识和校验值,数据包格式如图3所示,最前面2个字节为传输标识,最后4个字节为CRC32校验值,中间为所要传输的可变长度的数据块,最长250字节。传输标识包括两个字节,第一个字节为逻辑通道,表明本次传输的目的地址和源地址。第二个字节为下一个数据块长度标识,用于表明下一次APDU需要传输的字节数,最大为250字节;当其值为0x00时,表示已无数据可传,本次数据传输过程结束;当其值为非零值(不超过0xFA)时,则表明还有数据需要继续传送,同时也说明下一个APDU命令需要传送多少字节。数据块采用CRC32算法进行校验,采用级联方式,除第一块数据的校验值就是它本身的校验值外,其它块的校验值则是本块与前一块两块数据级联结果的校验值。
(三)具体实施,本发明移动终端与智能卡之间大容量数据交换方法具体包括移动终端向SIM卡和SIM卡向移动终端两个方向传输大容量数据,具体有四种情况,分别说明如下:
情况一:如图5所示,当移动终端向SIM卡传输大容量数据时,连续多次地发送UPDATE BINARY命令,以实现大容量数据传输,SIM卡接收到由移动终端发送的数据包时,对数据包进行拆包处理,获取相应的数据块,并对其进行校验;校验成功后,返回成功执行的状态字节,移动终端接收到成功执行的响应APDU后,继续发送余下的数据,直至将所有的数据包发送完毕。
情况二:如图6所示,当移动终端向SIM卡传输大容量数据时,连续多次地发送UPDATE BINARY命令,以实现大容量数据传输,SIM卡接收到由移动终端发送的数据包时,对数据包进行拆包处理,获取相应的数据块,并对其进行校验;校验失败后,返回执行失败的状态字节,并将有关失败的原因写入用于记录错误状态的文件0x2FA2,移动终端接收到失败的响应APDU,则暂停发送下一条APDU命令,改为读取记录错误状态的文件0x2FA2,分析原因后决定是否重发或停止。
情况一和情况二中,SIM卡每接收成功一条APDU命令,就将接收的数据块写入到大容量数据文件中保存起来,直至数据最后传完为止。
情况三和情况四:由于SIM卡只能被动地接受APDU命令,因此,当需要从SIM卡内读出数据时,仍然需要由移动终端主动发送APDU命令READ BINARY,通过多次读取特定文件(形成专用的APDU命令)的方式来实现。由于每次APDU命令传送的最大数据容量为256字节,因此,每次传递完256字节后,需要由SIM卡操作系统负责及时地更新APDU命令中的数据,以便于移动终端读取后面的数据。数据更新的操作完全由SIM卡操作系统来完成。这既可以通过文件系统来完成,也可以采用GSM协议中更新透明文件的方式来实现。这样,每执行一次APDU命令后,就及时更新需要传输的APDU数据,重复多次更新和读取,就可以实现大容量数据的传输,流程如图6所示。当移动终端校验数据失败后,需要将出错信息写入到SIM卡内的错误状态记录文件,以通知SIM卡进行相应的处理。SIM卡处理完毕后,返回执行成功的响应APDU。之后,移动终端就可以重新向SIM卡发送读二进制文件的APDU命令READ BINARY,以从SIM卡中获取数据,有关流程如图7所示。