卡接口 【技术领域】
本发明涉及具有磁性或电子数据存储能力的卡(“智能卡”),特别涉及在这样的卡和具体应用程序控制器之间的接口。
背景技术
智能卡及智能卡读卡机已在专利中公开。例如参见美国专利4102493和4404464。智能卡一般符合ISO标准7816的一个或多个部分。
几种现有的智能卡读卡机/写入机采用程序化的微处理器以在外部控制系统控制下对智能卡进行一系列的预定动作。外部控制系统必须对正被使用的智能卡有充分的了解。对正被使用的智能卡的任何改变必须反映为外部控制系统的改变。外部控制系统的设计者或使用者必须彻底理解读卡机/写入机将采用的智能卡。
另外几种现有的智能卡读卡机/写入机含有程序化微处理器以自主地对智能卡进行所有的动作。这些读卡机/写入机一般形成完整的产品,即,自动售货机或销售点终端。改变这些产品以支持新的或不同地智能卡需要重新设计或修改读卡机/写入机的基本元件。从而限制了最初的设备生产商在传统产品中加入智能卡技术的能力。
现有的智能卡读卡机/写入机分为两类。第一类是作为卡联接器的读卡机/写入机卡联接器只具有硬件及读写智能卡所必需的最少的软件。卡联接器支持来自不止一个卡生产商的多种卡。但是由于卡的最终用途未知,因而这种支持被极大地限定在最简单及最一般的任务上。联接器一般被用作进入智能卡领域的开发工具,或者作为向现有的产品设计中加入智能卡能力的工具。在任一种情况下,联接器的使用者必须获得或具有对智能卡,卡数据结构,及数据传输过程的充分认识。
另一类是具有嵌入式智能卡能力的应用或产品,读卡机是主控制系统的内在部分。由于数据内容,结构,安全性及传输过程由设备生产商预先决定,因而只能支持少数几种类型的卡。
目前,在生产商的产品中加入智能卡能力或将现有的读卡机改造以处理新的智能卡没有简易的方法。除此之外,生产商在智能卡领域是专家。如果竞争者沿这条路继续进行下去,则重新处于有利的竞争位置将要花费大量的财力及时间。另外,目前没有能够读多种类型的磁卡及多种类型的芯片卡的读卡机。
发明公开
因此本发明的一个目的是提供一种在具有磁性或电子数据存储能力的卡和特定应用程序控制器之间使用的接口,从而至少在克服上述缺陷方面取得一定的进展。
第一方面,本发明在于使主应用程序和数据存储卡连系的卡读卡机/写入机,其特征在于:
所述卡读卡机/写入机可响应所述的采用至少一种指定的高级语言的应用程序,
存储有分别对应于一种已知数据存储卡类型的多个低级协议集,
所述卡读卡机能够为任意和它连接的卡确定卡类型,由于它具有一协议集,并从其存储的协议中选择适合于所确定的卡类型的低级协议,
所述卡读卡机/写入机从主程序读出并将高级语言命令译为所述确定的低级协议中的相应命令,并将这些低级命令写入所述卡中,
及所述卡读卡机/写入机从所述卡中读出所述确定的低级协议的命令,并译为所述高级语言中的相应命令,并将这些命令写入主应用程序。
第二方面,本发明在于一种将主应用程序和数据存储卡连接的方法,包含如下步骤:
确定卡类型,
为确定的卡类型从存储的协议中选择合适的低级协议,
从主程序读取高级语言命令,
将所述读取的高级语言命令译为所述确定的低级协议中的相应命令,
将所述相应命令写入所述卡中,
从所述卡中读取所述确定的低级协议的命令,
将所述低级协议命令译为由所述高级语言产生的相应命令,及
将由所述高级语言产生的所述相应命令写入所述主应用程序。
第三方面,本发明在于一种使控制器能够通过卡读取/写入站从多个包含有磁性或电子数据存储装置的多个已知类型的卡设备读取和向它写入数据的方法。该方法使用一个存储程序,存储数据处理器,所述方法包括:存储含有已知卡特征数据串及各个串对应的卡标识符的第一数据阵列,存储含有卡标识符及各个标识符对应的命令串的第二数据阵列,并且在所述处理器执行程序,该程序使所述处理器:
(1)检测在所述读取/写入站的卡的存在并将卡检测信号传给所述控制器,
(2)读取表征该卡的数据串,
(3)在至少一个所述第一数据阵列中搜索匹配的数据串,一旦匹配成功就取回相应的卡标识符,
(4)采用取回的卡标识符在所述第二数据阵列中选择适当的命令串,
(5)从所述控制器接受类属处理指令,
(6)使用选择自第二数据阵列中的命令串将来自所述控制器的指令译为适合于插入的卡的命令,
(7)根据所述类属指令或者从所述卡读取数据,或者向它写入数据。
第四方面,本发明在于一个将智能卡及其它具有电子或磁性数据存储的卡和要求对所述卡进行读/写访问的控制器连接的通用卡接口,它包括:
一个卡读取/写入站,在其中插入卡以进行数据转移,一个具有相关存储器及输入-输出端口的处理器,
所述读取/写入站连接至一个输入-输出端口,而所述控制器连接至一个第二输入-输出端口,
存储在所述存储器中的接口软件及数据阵列,
所述数据阵列包括第一和第二数据阵列,其中所述第一数据阵列含有已知卡特征数据串及各个串对应的卡标识符,所述第二数据阵列含有卡标识符及各个标识符对应的命令串,所述软件当由所述处理器执行时,使所述处理器:
(1)检测在所述读取/写入站的卡的存在并将卡检测信号传给所述控制器,
(2)读取表征该卡的数据串,
(3)在至少一个所述第一数据阵列中搜索匹配的数据串,一旦匹配成功就取回相应的卡标识符,
(4)采用取回的卡标识符在所述第二数据阵列中选择适当的命令串,
(5)从所述控制器接受类属处理指令,
(6)使用选择自第二数据阵列中的命令串将来自控制器的指令译为适合于插入的卡的命令,
(7)根据所述类属指令或者从所述卡读取数据,或者写入数据。
第五方面,本发明在于一种使应用软件能够和任何已知类型的智能卡或其它具有电子或磁性数据存储的卡设备连接的方法,它包括:
(1)从所连接的卡中读取表征该卡的数据串,
(2)在包含有已知卡特征数据串及各个串对应的卡标识符的第一数据阵列中搜寻一匹配的数据串,一旦找到匹配的数据串就取回对应的卡标识符,
(3)利用取回的标识符,从含有卡标识符及各个标识符对应的命令串的第二数据阵列中选择适当的命令串,
(4)从所述应用软件接受类属处理指令,
(5)利用从所述第二数据阵列中选择的命令串将从所述应用软件来的指令译为适于正插入的卡的低级命令,及
(6)根据所述类属指令或者从所述卡读取数据,或者写入数据。
第六方面,本发明在于一种使应用软件能够和任何已知类型的智能卡或其它具有电子或磁性数据存储的卡设备连接的软件算法,它包含一个功能模块的分层结构,其中:
第一级模块从所连接的卡中读取表征该卡的数据串,并将所述数据串传递给第二级模块,
第二级模块在包含有已知卡特征数据串及各个串对应的卡标识符的第一数据阵列中搜寻一匹配的数据串,一旦找到匹配的数据串就取回对应的卡标识符,并将所述卡标识符传递给第三级模块,
第三级模块利用传递给它的标识符,从含有卡标识符及各个标识符对应的命令串的第二数据阵列中选择适当的命令串,
第五级模块从所述应用软件接受类属处理指令,并将这些指令传递给第四级模块,
第四级模块利用第三级模块选择的命令串将来自于所述第四级模块的指令译为适于正插入的卡的低级命令,及
第一级模块根据从第四级模块传递来的转换过的类属指令或者从所述卡读取数据,或者写入数据。
本发明的通用卡接口能够识别提供给它的任何ISO卡类型,使用适于该种卡类型的协议和该卡通信,及使用一种高级命令语言和主应用程序通信。
图面简要说明
下面将参考附图说明本发明的一个特定实施例。
图1是本发明的最佳实施例的设备的透视图,
图2是图1的实施例的设备的横截面的侧视图,
图3是本发明的最佳实施例的控制系统组合体的印刷电路板(PCB)的透视图,
图4是本发明的最佳实施例的PCB的另一个透视图,
图5是本发明的一个实施例的电气和电子器件的方框图。
本发明的最佳实现方式
本发明的一个实施例是采用通用卡接口(即UCI)作为支持各种各样的智能卡和信用卡的软件控制的卡接口。
参见图1到图5,UCI具有两个主要部分,一个物理卡接受部分31和一个控制系统组合体32,控制系统组合体32包括控制卡接受设备31所需要的全部电子线路。卡接受部分31具有一个接受所有类型卡的单插槽33,卡接受设备31的形式主要取决于UCI的应用。例如,显示器的大小,辅助键盘上按钮的数字配置,卡插槽33的配置及卡的物理接受方式(卡是完全缩进卡接受部件中还是卡部分留在卡接受部件外面)都是可改变的。控制系统组合体32与应用无关,并且能够支持上述各种改变的卡接受部件。
参见图1和图2,本发明的特定实施例的卡接受部件易于装配到现有自动售货机上,特别地可置于标准的钞票合法性确认器的空位上。卡接受部件具有友好的用户界面,包括一个2线LCD显示器40,该显示器要么为绿色,要么为黄色,以改善阴暗条件下的可视性,一个具有3个按钮(OK43,BALANCE41,及CANCEL42)的用户输入面板,所述3个按钮应能对用户的触摸作出响应,及一个卡插入插槽33。卡插入插槽33具有一个推挽式接受器,一个外部物体交换空间,着陆接触点,封闭的检测器开关,并且按照卡水平插入,芯片一侧向上来接受卡。
参见图3到图5,UCI控制系统组合体包含一个主微处理器46及一个支援微处理器47。主微处理器46可为,例如Dallas DS5002 FP-16。支援微处理器47可为,例如Motorola MC68302。
例证的主处理器来源于工业标准“8051”体系结构,具有安全存储器保护机制以防范偶然或有意的窜改或检查。正如8051结构一样,存储器被分为程序使用的部分及用于存储数据的部分。该存储器48是均由电池支持的静态RAM,电池49是长寿命的锂电池。在电源发生故障的情况下,存储器48被自动转换到电池并处于写保护。用于数据及程序的存储容量是独立配置的。在所有情况下如果需要可选范围为128K字节到512K字节。
例证的支援处理器基于工业标准“68000”结构,增强了高速数据通信能力,由于支援处理器仅仅对磁卡读取及数据传输之类的低安全性功能负责,在存储器中不保留敏感的数据,该处理器由一个监视时钟保护以防止误操作。存储器50由用于程序及数据的128K字节的静态RAM组成。存储器50并不必需后备电池,因为当需要时,可从主微处理器重新调入。一个32K字节的ROM含有嵌入的引导装入程序,除了嵌入的引导装入程序外的所有软件均是可远程再调入的。
UCI电气子部件还包括Dallas DS1293S之类的实时时钟51,该实时时钟具有精确的时刻及日历功能,它按照一个独立的时钟以32.768KHz的频率运行,并从主微处理器46接受电力。
PCB上的一个小插座52允许在需要的情况下将一个SAM(物理上删减的智能卡)加到该印刷电路板上。这个SAM在高安全性应用中可用于保存密码键或加密算法。主微处理器46也可实现这一任务,但是从商业观点看最好采用SAM。
UCI的PCB具有适于接受一个1或2磁道磁条阅读器的连接口,UCI向该阅读器提供5V电压,并接受标准TTL逻辑信号。
该阅读器能接受符合ISO7811或ISO7813的卡。UCI可同时阅读两个磁道,这两个磁道为磁道2和磁道1或磁道3。
智能卡接受器电路被设计成支持符合ISO7816的卡,外加适当的机械卡接受器机制。借助于校正卡接受器,通过普通的插槽可接受混合“磁性和芯片”卡。这是在要求逐渐迁移的市场所希望的。同步(存储,或令牍)卡和异步(微处理器)卡都可被接受。程序电压(VPP)最好限于现代卡所期望的5V。
由UCI优先支持的其它使用者接口可选项包括:-辅助键盘可直接地和UCI连接。一般地只需要点阵辅助键盘,但是支持大的辅助键盘配置也不需要额外的努力。-液晶显示器(LCD)可直接地和UCI连接。大多数采用Hitachi HD44780芯片(一种工业标准)或它的同等物的液晶显示器都是适用的。这些显示器可以为各种格式,从1线,16字符,到4线,24字符。-一个状态指示器。最好在UCI的前部布置两个发光二极管(LED)以提供低成本的UCI的状态指示。如果使用发光二极管,那么发光二极管应在卡插槽的两个末端处伸出卡插槽面板,双倍作为状态指示器,并高亮显示卡插槽位置。-一个声音反馈指示器。在面板上含有一个蜂鸣器为键击或错误状态提供声音反馈。合适的蜂鸣器的一个例子是在3100Hz标称频率产生90dB(@0.1m)的声音强度的蜂鸣器。
UCI对于第三方设备是通用接口,在所述第三方设备中包括有所述UCI。售主接口包括三个截然不同的元件,一个高压继电器,一个当前循环串行总线及一个RS232串行接口。此外,卡接受设备支持通过RS485/RS232连接器16的串行数据调制解调器连接,或打印机连接。
控制系统组合体包括两个电源,具体地说一个向基本微处理器存储器和时钟提供后备电源的在板电池,及一个稳压主电源。用于电池电源的一种合适的电池可为,例如3.6伏1200mAHr的电池。
本发明的UCI具有以绝对少的指令和过多的智能卡和磁卡连接,及通晓这些卡,并且执行任何需要的动作的能力。它可读取ISO7811信用卡磁道1或磁道2,从ISO7816-3(T=0及T=1)智能卡读取及写入数据,及从ISO7816存储卡读取和写入数据。
在传统的智能卡联接器中,由于联接器的最终用途未定,因而卡的电子支援被限于非常简单的任务。但是本发明通过附加软件(微处理器程序)的层扩展了联接器的能力,各层加入了更多的功能度,同时,简化了和卡的通信任务。为了加入这些层并且用它们实现有用的功能,UCI包括一个格式数据库,它含有有关UCI可能接受的每一种类型的卡的信息。这一信息形成了使用该卡的规则及准则。它包括卡数据结构,传送过程,数据内容,及安全信息的摘要。如果需要指示,准则将引导UCI参考安全模块。该安全模块是一个类似于智能卡的小的微处理设备,所述智能卡是PCB的一个半固定部件。
借助于从格式数据库得到的信息,UCI可容易地确定UCI的全部功能度及卡组合。这样可修正为响应任意的外部指令而在内部采取的动作的序列。外部设备并不需要鉴别各种类型的卡之间的差别。由于外部设备对每一种新插入的卡发出的指令相差不大,因而在UCI和外部设备之间的软件接口被简化。
通过认识到有限数量的指令可以完成对卡所需要的绝大多数动作,可进一步简化软件接口。最顶层的软件层积聚确定软件接口所必需的全部指令或命令。当一低层软件层使用指令时,格式数据库中的信息也被用于检查任何潜在的对系统安全性的违背。
该软件以如下表所示的层状的模结构的形式被组织。
表1:微处理器程序的层 层 目的 使用 可应用的标准加密,安全性 卡格式库卡原始库 8 应用和外部环境的接口 7 表示和应用层的通用接口 Y 6 方法过程和所有活性卡的通用 接口 Y AS2805 5 方法原函数 支持程序 Y Y 4 实体过程和所有卡数据结构,例如文件,包,目录 的接口 Y Y 3 实体原函数对文件,包,目录的 支持程序 Y Y 2 流控制,ISO 级命令卡(ISO)命令级的 接口 YISO7816部分3,ISO7816部 分4 1低级原函数,硬 件驱动程序硬件支持,控制。位/ 字节级的卡接口 YISO7810,ISO7816部分1,ISO7816部 分2
如同在最佳实施例的上表中所表示的,UCI的操作分为八层。
每层可被认为是对象集的组成,其中一个对象是函数及数据的自含式布置。
各层的对象一般只能由紧邻其的上或下层访问。层之间的接口在基于格式数据库信息的控制下组织严密,可防止冒失的操作。
格式数据库中的数据仅可提供给选定的对象和层,这样减少了外部设备获得特定卡格式敏感知识的可能性。同样,对安全性和密码程序模块的访问也被限制在选定的对象和层上。
格式数据库包含两个主要部分,格式库及原始库。原始库含有所有接受的卡的预标记细节,这包括卡容量,电信号定时,字符交换协议,在基础卡上可用的特征的列表。这些信息由卡生产商提供。格式库含有生产商售出卡后,由发行人加入到卡中的细节。
现在来看各层的操作,这些层从第1层的初始的低级的面向字符的操作开始直到第8层的高级通用接口。
第1层的职责包括插入或取出卡,及简单的向卡传输或读出数据所要求的基本动作。
插入卡就启动始终被监视的微动开关,发出信号给更高层以通知卡插入,以便采取适当的动作,更高层向下传递指令以试图识别插入的卡的类型。随后该卡就具有根据ISO7816施加的电力和控制信号。当不再需要该卡时,卡接口电路以ISO7816确定的顺序取消电力。如果过早地取出卡,那么立即尽可能快地进行同样的程序。向更高层通知卡已取出,从而采取进一步的“关闭”动作,它包括删除话路密钥,异常记录,或向卡持有人发出警报,在这一级含有的另一个功能是数据流的加密或解密。
在这一层完成对卡读取或写入单个字符和数据的位,但是把字符组合为信息和命令是更高层的范围,对数据流,信息,命令或内似物中含有的信息的处理留给更高的代码层。
UCI的第2层在卡命令级控制和卡的相互作用,例如2层适合于正确地格式用于由1层传送给卡的命令和数据。对智能卡的信息格式化,错误检测,特征传输由第2层按照ISO7816的规范进行。
对各种UCI特征,例如时刻时钟,蜂鸣器,通信端口,显示器及辅助键盘的支持在一这层由代码加强。在这一层找到的其它支援代码包括打印驱动程序,显示驱动程序,调制解调器驱动程序,辅助键盘缓冲器,及ISO7810磁卡阅读数据缓冲器。
在卡插入期间,第2层被用来启动对卡的复位过程。卡对复位过程的响应被用来确定卡是以同步方式还是以异步方式进行通信。这一信息由第3层使用。
对第3层的连接通过“陷阱”或软件被中断。层1+2存在的陷阱用于:实时时钟,系统,辅助键盘,LCD,通信端口,磁卡读卡机,智能卡/安全模块。
UCI的第3层的操作取决于卡的类型。因而正确在识别卡的类型是重要的,取决于卡是同步卡(典型地令牌卡,或存储卡,不基于微处理器)还是基于微处理器的异步卡。
为了识别同步卡,首先从卡读取三个字节。将它们和包含于一个小阵列中的3,2或甚至1个字节串比较。在相邻的列中是各种卡生产商提供的卡的参考编号。对任一串的匹配表明该卡已知,并被允许。表2表示了这样的阵列的一个例子。现在识别出该卡是来自特定生产商的特定类型的同步卡,UCI可只选择那些适用于这种卡的命令和方法过程。从而向更高层通知所断定的卡类型。
表2 匹配的串 卡类型 123 类型3 56E 类型1 AB 类型12 C 类型3 7 类型18
为了识别异步卡,将ISO7816复位应答串的历史字节和包含于一个小阵列的一列中的串比较。在相邻的列中是各种卡生产商提供的卡的参考编号。串之间的匹配表明该卡的类型已知,并被允许。这样的一个阵列表示于表3。
表3 匹配的串 卡类型 24,10,00 类型6 30,11,03 类型2 31,1F,FF 类型15 4C,IF,FF 类型7 4D,1F,FF 类型19 23,00 类型7
现在识别出该卡是来自特定生产商的特定类型的异步卡,UCI可只选择那些适用于这种卡的命令和方法过程。从而向更高层通知所断定的卡类型。
通过下面的函数来使用上面概述的方法。int decide_card_type(void)Returns:M_CARD_TYPE,或NULL(如果卡类型未知)。
为了和同步卡通信,第3层利用一个函数“Access_Sync_Card来控制通信,例如:int Access_Sync_Card(int command,int card_type,int len,char*pointer)其中command选自 READ_UPDATE
ERASE_UPDATE
READ_FIXED
READ_TOKEN
READ_MANUFACTURER
DECREMENT_TOKENS
PRESENT_SECRET_CODEcard_type是如同在L3.1,L3.3确定的卡类型,len是将从buffer获取的字节的数目,或者预期的从卡返回的数据字节的数目,*pointer指向在完成函数调用时,含有用于卡的数据,或来自卡的数据的buffer,所述函数返回NO_ERROR,如果命令成功,或者ERR_CARD_LOCKED或者ERR_FUNCTION REFUSED或者ERR_THREE_BAD_PRESENTATIONS如果命令不成功。
根据卡类型,及命令,函数“Access_Sync_Card”访问示于表4的“动作串”指针表。卡类型 命令READ_UPDATE READ_FIXED READ_TOKENREAD_MANUFACTURERDECREMENT_TOKENS 1 0 s1 s2 s4 s8 3 s5 s1 s2 s4 s8 4 s5 s1 s3 s4 s7 5 0 s12 0 s13 0 12 0 s11 0 s13 0 13 0 s15 0 s14 0 17 18空指针指示对当前卡,命令无效。
表4
表4的指针s1等指向另外的表,例如表5.this time of“actionstrings”。一个“动作串”可由一个或多个卡使用。
指针 动作串 s1 s2 s3 s4 READ_128,RESET_ADDRESS,STEP8,ERASE32,WRITE32,NULL s5 RESET_ADDRESS,STEP10,READ32,NULL s6 RESET_ADDRESS,STEP10,WRITE16,NULL s7 STEP96,NULL s8 s9表5
一个“动作串”由带有一个或多个“标记”的串组成,带有一个NULL端点符。大多数“标记”后跟随着一个“计数”值。“计数”确定“标记”起作用时卡位或时钟循环的数目。例如“动作串”为如下格式:[tag[,count],][tag[,count],]NULL其中tag是RESET_ADDRESS
SETP count
READ count
ERASE count
WRITE count之一。
为了和异步卡通信,第3层采用一个函数“Access_Async_Card来控制通信,例如:int Access_Async_Card(int command,int card_type,int len,char*pointer,int P1,int P2)其中command选自 READ_FILE
WRITE_FILE
SELECT_FILE
SELECT_DIRECTORY
SELECT_KEY
UPDATE_FILE
PRESENT__SECRET_CODEcard_type是如同在L3.2,L3.3确定的卡类型,len是将从buffer获取的字节的数目,或者预期的从卡返回的数据字节的数目,*pointer指向在完成函数调用时,含有用于卡的数据,或来自卡的数据的buffer,P1:参数1:例如文件中的偏移P2:参数2:例如选定的文件数并且函数返回下列之一:
4001 ERR_FUNCTION_INVALID
4002 ERR_FUNCTION_MISMATCH
4xxx hex 由UCI代码检测到的其它错误状态
6xxx hex =ISO和生产商错误代码(未翻译)
9000 NO_ERROR
9xxx hex =ISO和生产商错误代码(未翻译)如果命令执行成功,函数返回“NO_ERROR”。
根据卡类型,及命令,函数“Access_Async_Card”访问示于表6的“格式串”指针表。
卡类型 命令格式串READ_FILEWRITE_FILE SELECT_FILESELECT_DIRECTORY SELECT_KEY 60f21 f12f14 f18 COS16DESfl5f21 f12f14 f18 PCOSf15f21 f13f14 f17 20f32 0f33 0 MCOS0f31 0f33 0 COS0f35 0f34 0 150 f390 f41 19空指针指示对当前卡,命令无效。
表6
指针指向另外的表,例如表7的“格式串”。一个“格式串”可由一个或多个卡使用。 指针 动作串 f154 51 80 3A 00 P2 00 f12 55 80 3A 00 03 00 f14 63 80 34 00 00 08 f18 41 84 DA 00 P2 LEN f31 f33 f35 f39 f41
表7
格式串是用来直接传输给卡的机器代码指令。格式串是以如下格式构成的小阵列:FLAG,CLA,INS,P1,P2,LENFLAG:if bit 0设定: “写”命令if bit 1设定:参数中的len必须和串中的LEN匹配,否则返回错if bit 2设定:参数中的P2必须和串中的P2匹配,否则返回错if bit 3设定:参数中的P1必须和串中的P1匹配否则返回错if bit 4设定:串中的LEN被使用,参数被忽略if bit 5设定:串中的P2被使用,参数被忽略if bit 6设定:串中的P1被使用,参数被忽略
为了和更高层连接,第3层使用了“命令串”。命令串由一个或多个标记组成,用NULL终止。各个命令串(CS)由其CS编号或CS名定位。命令标记同样由其命令标记名定位。命令串可从标记和其它命令串构成,以实现有关卡及有关系统的功能。
命令标记存在以实现UCI中几乎所有可能的动作。在许多方面它们可被看成形成一种高级程序语言。命令标记分为三类,相对的,直接的和间接的。直接命令标记的行为动作不能被改变,确切的行为动作嵌入到标记中。相对的和间接的标记采用参数来改变标记的行为动作。在相对标记情况下,命令串中变化参数跟在标记后面。在间接命令标记情况下,参数从一个参数堆栈中读取,该参数堆栈可由其它标记改变。命令标记的例子包括:用于接口事件的
Determine card type&issuer,(确定卡类型及发行者)
Call Access_Sync_Card function,(调用Access_Sync_Card函数)
Call Access_Async_Card function,(调用Access_Async_Card函数)
Read magnetic card data;(读取磁卡数据)用于控制外部设备的
Send messages to printers,modems,displays,(发送信息给打印机,调制解调器,显示器)
Get dada from keypads,input switches,(从辅助键盘,输入开关获取数据)
Read real-time clock;(读取实时时钟)及用于内部程序操作的
Copy,manipulate data strings,(拷贝,操作数据串)
Compare strings,(比较串)Test“condition”,(测试“状态”)Skip next command tag if condition,(如果状态为真,跳过下一命令标记)Jump to new command string,(跳转至新的命令串)Call new command string.(调用新的命令串)
为了和卡连接,重要的是了解卡存储器的数据结构和格式。为了组织及供给所需要的有关卡存储器的数据,UCI具有一个文件格式数据库。一旦识别出卡类型及发行者编号,并且(如果能应用的话)选定一个用途,该数据库就可被用作使用用途文件的指南。表8是这样的显示出卡类型,发行者及用途分部的数据库的一个例子。用于给定用途的文件由文件编号,及可能的文件名定位,而文件编号及可能的文件名又指向一文件描述符。
卡类型 发行者 用途 文件号 文件名 文件描述符 卡A 银行1银行信用卡I1234567 信用卡m123456 银行2银行信用卡j1234567891011 卡B 银行3 信用卡n I e J s银行信用卡k1234567891011
文件描述符列举下列文件属性:文件名借方关键字指针贷方关键字指针密码指针读权限写权限更新权限文件大小加密方法
关键字指针也可指示任意的对远程键存取,AS2805(或类似)协议,在线信贷,或其它装置的需要。
每选择一个新文件(或者在存储卡情况下“文件区”)时,文件状态寄存器被更新,包含下述信息的部分或全部:文件层次/目录文件号/名文件标记符 任选长名文件描述 包(purse)/关键字/标准/属性选项 包(purse)特性大小 以“字节+位”表示访问准则 读/写/更新级,及锁定。
当卡不支持进一步的高级特征时,寄存器的相关部分为空。
从支持不止一个发行人的卡上也可得到相似的,但有限的信息。下列为转换目录时一般可获得的一些数据:目录号 存取条件。
一些通用数据可通过基础检查从卡中访问。这一信息由第4层到第6层使用以支持和确证从表8中得出的信息。
UCI程序的第4层负责实体过程。其目的是和卡数据结构,文件,PURSE,和目录连系起来。第4层执行的一个功能是确定插入的卡的发行者。一旦卡的类型被确定,一些命令串就试着去识别卡的文件及数据布局。尝试区别卡类型的命令串的一个例子示于表9。 卡类型 尝试的命令串 作为结果产生的发行者编号 1 1,2,3 16,16,16 2 7,38 3.8 3 8 2 4 9,32 15,8 5 25,42 16,9 6 10 16 7 4,5,6 9,16,16 8 16 12 9 11 4 10 23,51 3,4 .... .......... ......
表9
如果一个命令串按照程序执行,那么作为结果产生的发行者编号成为止发行者(或共同占有使用)的索引。
一旦确定了卡发行者编号,更高的代码层可确定当前卡的能力及应用组合。
主要用于发行者识别的命令串动作的一个例子是:CS:nIF card is“Async”and Muti directory Select Master directory Find First“Unrestricted Read”file Open File Read File IF file contents=CRD pattern
copy file data to CRD buffer
set lssuer Number=n第4层也负责为卡处理关键字及密码。
第5层含有用于和卡连系的基本进程。对在UCI第8层访问的和每一种卡相关的类函数,第5层包括一个表示对该用途的相应的命令串的卡类型+发行者编号的表5。如果对于当前的卡或用途,请求的函数无效,那么零替代命令串编号。
该表允许将第8层的类函数描述译为低层的用途特性描述。
第5层也包括对下列的支援程序:
通信协议(确定DES,HELC,调制解调器,延迟上装)
借方,贷方事项
按照AS2805或类似的财务事项
MACing
事项记录上装
信息格式化
和卡用途的安全模块逻辑连接
对通信的关键字和密码处理
RSA加密程序
当第5层包括用于基本过程的表及程序时,第6层利用这些表及程序以在第7层和第8层的类函数及指令和低层的卡类型或发行者,或低层的用途特性指令之间转换。
第7层提供由外部设备使用的统一的归约指令集。
UCI的第8层使使用者(外部设备)和所有的下层隔离,从而使用者可发出简单的类命令并允许UCI采取完成这些命令所需要的复杂的动作。实际上第8层的接口看上去和卡类型无关。
在第8层的UCI可由使用者通过例如开关,按钮,及中继或RS232串行数据链路而被通信连接。
将由第8层作用的类命令的例子是:新卡检测识别新卡,读卡编号,整体的及使用者概述结账(acc)更新整体的,使用者信息借贷账(acc,amnt)信贷账(acc,amnt)读未格式数据文件(文件名)更新未格式数据文件(文件名)上装事项下装OS(操作系统)读辅助键盘打印信息显示信息配置显示器,打印机,调制解调器,I/O设备载入关键字(S)
作为UCI操作的一个例子,当插入一个新卡时,第8层从“新卡检测”(第1层)接收一个信号。外部设备(使用者软件)随后决定识别该卡,并可能实施一个事项。从第8层:执行识别新卡等它转换为下列动作:-执行decide_card_type以确定生产商卡类型
(这一动作使用了表2和表3中覆盖的过程,这些过程再使用相对于第2层提到的过程)-执行相对于第4层概述的过程以识别任何可能的应用
(这一动作使用了第3层的函数,命令串,命令标识,及表6和7有关的数据)。
作为UCI操作的另一个例子,当从卡中借贷账时,从第8层:执行借贷(acc#,amt$)函数[L8.1.5]从第6层:使用第5层的表,检查对于该卡是否存在用于“借贷”的命令串从第6层:如果在表中是可用的,执行命令串(命令标记符序列)从第3层:命令串被解释为下列动作:-在卡上选择应用区/子目录,-在子目录中选择文件或包(purse)文件,-如果需要选择正确的密码关键字(如同在命令串中指示的一样),
(使用表8来帮助选择子目录,文件及关键字)提供任何使用的密码关键字,用“数值”改变文件或包(purse)文件,记录事项细节(如果需要的话)。
于是发出给UCI的简单的类命令都是由使用者软件所要求的,UCI完成和实际卡的连系的各个方面,而不依赖于发行者的卡类型。
最佳实施例中描述的UCI具有如下优点:1)可识别多种卡类型,2)知道每一种卡的特征和限制,3)知道数据在每一种卡上的布置及所有存取的有关原则,4)动作不是预先规定的,而是由外部设备确定,及5)和外部设备的接口简单,从而外部设备的生产商只需了解一点或不需要了解有关智能卡,安全算法,或财务事项处理的知识。