两种加密IC卡在同一系统中的共存技术

发布者:Whisper123最新更新时间:2008-02-20 来源: www.laogu.com关键字:nop_  同步协议  加密卡  IC卡读写  SLE  下降沿  IC_CLK  unsigned  字节 手机看文章 扫描二维码
随时随地手机看文章

  

  摘要两种读写时序完全不同的IC卡在同一种系统中共存时,系统必须能够正确识别卡类型,然后才能按对应的读写时序对其读写。文章以AT88SC1604加密卡和SLE4442加密卡为典型样例,通过分析具体时序,给出获取卡型的方法及完整程序。

  关键词AT88SC1604卡 SLE4442卡 卡型识别 程序设计

  引言

  随着国家“金卡工程”的不断发展,各种IC卡应用方案不断涌现。如预付费系统、门禁系统、保险系统等。在某一特定系统中,很可能不同用户对象使用两种不同IC卡。如本文设计的电能预付费系统中,管理员采集数据时,使用的是Atmel公司出品的大容量加密IC卡AT88SC1604;而普通用户使用的是Siemens公司出品的小容量预付费卡SLE4442。这两种卡的读写时序完全不同。这就需要系统在对IC卡读写之前,能够自动识别卡的类型,然后才能按照对应的时序对其读写。下面谈谈AT88SC1604卡与SLE4442卡在系统中的共存技术。

  1IC卡简介

  国际标准化组织针对IC卡在不同领域的不同应用,制定了IC卡应用时所应参考图1IC卡引脚或遵循的标准——ISO7816标准。然而该标准只严格定义了IC卡的物理特征及某些特定时序,预留了某些特性供不同厂家自己扩充。IC卡引脚示意如图1所示。

  AT88SC1604卡为Atmel公司出品的大容量加密IC卡,内部有4个分区(分等分区卡和不等分区卡两种),每个分区均有独立的安全验证逻辑。整张卡还有一个总的验证逻辑。对于等分区卡,内部前三个分区每个分区的EEPROM容量为4096×1位,分区四的容量为3656×1位,EEPROM按位组织。SLE4442卡为Siemens公司出品的小容量加密IC卡,EEPROM容量为256×8位,按字节组织。二者引脚特性如表1所列。

  图2SLE4442卡的命令帧格式AT88SC1604的FUS引脚为编程信号端,PGM为擦、写控制信号端。这是与SLE4442卡在硬件特性上的不同之处。

  表1引脚特性

  引脚号〖〗C1〖〗C2〖〗C3〖〗C4〖〗C5〖〗C6〖〗C7〖〗C8AT88SC1604〖〗VCC〖〗RST〖〗CLK〖〗N.C.〖〗GND〖〗N.C.〖〗I/O〖〗N.C.SLE4442〖〗VCC〖〗RST〖〗CLK〖〗FUS〖〗GND〖〗N.C.〖〗I/O〖〗PGM

  2AT88SC1604卡与SLE4442卡时序分析

  AT88SC1604与SLE4442卡均符合ISO78163规定的同步协议,也就是在时钟的下降沿后读取数据。对于AT88SC1604卡,某个地址读、写时,需要先设定其内部地址计数器到指定地址,然后才能开始对该地址读写。时钟信号的每个下降沿,都会令其内部地址计数器的值自动增1;每次的复位操作,都会令其内部的地址计数器归零。由于其内部地址计数器的值是不可读的,因此在对该卡读、写之前,必须先复位一次,才能确保让其内部的地址计数器到指定的地址。而SLE4442卡则无需繁琐的地址计数器。SLE4442工作在命令/响应模式,每帧命令为3字节。对其内部某个地址读、写时,3字节的指令包含了该地址信息。其命令帧格式如图2所示。其中Control字段为命令关键字,Address字段为地址信息,Data字段为写操作时的待写入数据。这一点与AT88SC1604卡是截然不同的。

  因此,当对插入的IC卡进行读写之前,必须先得到卡类型,才能按照对应的时序对其读写。SLE4442卡的复位与应答(ATR: Answer To Reset)时序如图3所示。

  从图2中可以看出,SLE4442卡在复位后,需要额外的32个脉冲。此时输出的32位数据为卡对复位的应答响应。

  图3SLE4442卡ATR操作AT88SC1604卡的复位操作时序如图4所示。

  图4AT88SC1604卡复位操作AT88SC1604卡在复位后,地址计数器被清零,内部第0单元的数据被送到数据线上。以后每个时钟的下降沿,地址计数器自动增1,同时该地址单元的数据自动图5IC卡接口电路被送到数据线上。按照SLE4442卡的ATR复位方式对卡复位,会令AT88SC1604卡复位的同时,其内部地址计数器的值提高到32。如果接着按SLE4442卡的读时序发送3字节读命令,会将AT88SC1604卡的位地址计数器提高到56(字节地址为7)。此时按照统一的读时序就可以读出此字节地址的值。对于AT88SC1604卡,此地址为发行者区(IZ);对SLE4442卡,此地址为厂商标识区(FZ)。若二者此地址的数据不同,则系统便能正确识别出该卡类型。这两个地址的数据出厂时可以根据需要定制,默认情况下AT88SC1604卡为0xFF,SLE4442卡为0x15。因此,可以按照读SLE4442卡的方式读第7字节地址。根据该地址的数据判断卡的类型。

  3程序设计

  系统IC卡接口电路如图5所示。

  需要注意的一点是,IC卡在上电前,RST引脚必须保持低电平,上电后卡才会被“激活”。否则对于AT88SC1604卡,验证密码的操作将不会通过。

  获取卡类型的程序如下:void ICReset (void)

  {unsigned char i,ATRBuf\[4\];

  IC_DAT=1;_nop_();_nop_();

  /*释放数据口线*/

  IC_RST=1;_nop_();_nop_();

  IC_CLK=1;_nop_();_nop_();

  IC_CLK=0;_nop_();_nop_();

  IC_RST=0;_nop_();_nop_();/*复位操作结束*/

  for(i=0;i<4;i++)

  {ATRBuf\[i\]=ICReadByte ();

  /*对于SLE4442卡,这是ATR操作*/

  }

  }

  unsigned char ICReadByte (void)

  {unsigned char i,RData=0;

  IC_DAT=1;IC_CLK=0;_nop_();_nop_();

  for(i=0;i<8;i++)

  {RData<<=1;

  RData =IC_DAT;

  IC_CLK=1;_nop_();_nop_();IC_CLK=0;

  }

  return (DataInvert(RData));

  /*将读出的数据逆序返回,为实际读取的数据*/

  }

  void ICSendCmd (unsigned char *CmdBuf)

  {unsigned char i,j,ch;

  IC_CLK=1;_nop_();_nop_();

  IC_DAT=0;_nop_();_nop_();

  IC_CLK=0;_nop_();_nop_();

  /*IFD:SLE4442卡的启动条件*/

  for(i=0;i<3;i++)

  {ch=CmdBuf\[i\];

  for(j=0;j<8;j++)

  {IC_DAT=ch&0X01; /*输出数据到IC卡*/

  IC_CLK=1;_nop_();_nop_(); IC_CLK=0;

  ch>>=1;

  }

  }

  IC_DAT=0;_nop_();_nop_();

  IC_CLK=1;_nop_();_nop_();

  IC_DAT=1;_nop_();_nop_();/*停止卡*/

  }

  unsigned charICGetCardType(void)

  {unsigned char CmdBuf\[3\]={0x30,0x07,0xFF},ch,CardType=0;

  ICReset (); /*发送32个脉冲*/

  ICSendCmd (CmdBuf);/*发送24个脉冲*/

  ch=ICReadByte (); /*读取该地址的值*/

  switch(ch) {/*卡型判断*/

  case0x15:CardType=CARD_TP_4442;

  break;/*这是4442卡*/

  case0xFF : CardType=CARD_TP_1604;

  break;/*这是1604卡*/

  default:break;

  }

  return CardType;/*返回卡类型编号*/

  }

  结语

  通过分析两种卡读写时序的异同来编写控制程序,系统可以正确识别所插入IC卡的类型。之后,系统就可以分别按照相应的读写逻辑对其读写,达到了读写时序不同的两种卡在同一种系统中共存的目的。

  参考文献

  1于宏军,赵冬艳. 智能(IC)卡技术全书. 北京:电子工业出版社,1996

  2Atmel. AT88SC1604 Datasheet

  3Siemens. SLE4442 Datasheet

  本文使用海纳锐利编辑并转载, 版权归原作者所有。

关键字:nop_  同步协议  加密卡  IC卡读写  SLE  下降沿  IC_CLK  unsigned  字节 引用地址:两种加密IC卡在同一系统中的共存技术

上一篇:基于CPLD的CCD采集系统设计
下一篇:485 现场总线施工的实际问题和解决办法

推荐阅读最新更新时间:2024-05-13 21:02

字节要造机器人了!计划年底扩充上百人
字节据称要造的消息在业界传开。据报道,目前字节机器人团队大约有50名成员,并计划在年底扩充到上百人。他们的目标是开发一些能够在仓库内进行货物分拣和打包的机器人,以满足公司自身的电商履约需求。 近年来,字节跳动多次投资机器人相关公司,如未来机器人和大寰机器人等,主要集中在制造领域,这与此次消息相吻合。 有人猜测字节机器人的主要业务方向可以分为两个方面: 首先,他们计划生产一些机器人,优先为字节跳动的电商履约需求提供服务。这些机器人将具备在仓库内进行货物分拣、打包等操作的能力,并应用于物流环节。 其次,他们关注前沿技术,并试图将大模型能力应用于机器人领域。早在今年2月,就有消息称字节跳动将在语言和图
[机器人]
基于AT89S52与PIC16F877A的在线编程控制系统的设计
l 引 言 通常进行单片机的实验或开发时,传统的并行编程方法中,编程器是必不可少的。仿真、调试完的程序需要借助编程器烧到单片机内部或外接的程序存储器中。在开发过程中,程序每改动一次就要拔下电路板上的芯片,编程后再插上。随着计算机技术的发展,许多公司推出了带有片内FLASH存储器的MCU,FLASH存储器具有电可擦除、无需后备电源保护数据、可在线编程等特点。在线编程目前有两种实现方法:在线系统编程(ISP)和在线应用编程(IAP)。ISP一般是通过单片机专用的串行编程接口对单片机内部的FLASH存储器进行编程,例如AT-MEL公司的单片机AT89S52就提供了一个SPI串行接口对内部程序存储器编程(ISP)。 在线编程(ISP)
[单片机]
MCS-51系列单片机指令如何判断字节
MCS-51系列单片机指令如何判断字节数 如何区分指令为单字节,双字节还是三字节? //------------------------------------------------------------------ 最佳答案: 最基本的方法是查表,但是,查过一遍之后,就会发现规律,能够直接看出指令的字节数,这并不难。 下图是做而论道搜集的MCS-51单片机的指令代码表。 指令的字节数,其规律十分简单,一看指令便可知道,以后根本不用查表。 MCS-51系列单片机指令最长的也就是3字节指令。 其中: 指令的操作码,必定要占用一个字节; 如果指令中,含有8位的立即数,必定要占用一个字节; 如果指令中,含有直接地址或者相对转移
[单片机]
MCS-51系列单片机指令如何判断<font color='red'>字节</font>数
AT89S8252单片机实现接触式IC卡读写控制的设计
从上高中开始,我们学校用的餐卡就为接触式的IC卡,在校园里还分布着很多的IC卡电话,上大学以后学校使用的校园一卡通,为非接触式是射频式IC卡,因此对IC卡有了兴趣,在学习单片机的过程中,了解到单片机可以实现IC卡的读写控制,在参考有关资料的基础上,学习的利用单片机实现接触式的IC卡读写控制。 主要器件: 1、 AT89S8252单片机芯片,此芯片具有SPI接口,可以用来读写IC卡芯片。 2、 使用与SPI接口兼容的串行数据接口的IC卡芯片AT45D041A,支持在系统重编程,可用于数字语音、图像和数据的存储。 试验流程图: 试验电路图: 试验程序代码: //ICRdWr.h程序 #ifndef _ICRDWR_H //
[单片机]
AT89S8252单片机实现接触式<font color='red'>IC卡</font><font color='red'>读写</font>控制的设计
理解(*(volatile unsigned char *)0x5F
理解#define SREG (*(volatile unsigned char *)0x5F) 这样的定义,总是感觉很奇怪,不知道为什么,今天终于有了一点点心得,请大虾们多多批砖~~~ 嵌入式系统编程,要求程序员能够利用C语言访问固定的内存地址。既然是个地址,那么按照C语言的语法规则,这个表示地址的量应该是指针类型。所以,知道要访问的内存地址后,比如0x5F, 第一步是要把它强制转换为指针类型 (unsigned char *)0x5F,AVR的SREG是八位寄存器,所以0x5F强制转换为指向 unsigned char类型。 volatile(可变的)这个关键字说明这变量可能会被意想不到地改变,这样编译器
[单片机]
关于arm处理器 内存编址模式 与 字节对齐方式
在x86+Linux上写的程序,在PC机上运行得很好。可是使用ARM的gcc进行交叉编译,再送到DaVinci目标板上运行的时候,出现了Bus error。 出现的位置如下(其中Debug的内容是我在程序中添加的调试信息): root@211.69.193.189:~# arm_v5t_le-gcc -g shit.c root@211.69.193.189:~# ./a.out Debug: malloc space for the actual data: temp_buf = 0x13118 Debug: in my_recvn() Debug: nleft = 52 Bus error 打开调试器进行调试: root@211
[单片机]
关于结构体/联合体 字节对齐及位域操作出现的问题
使用的开发环境为MAPLAB X IDE 1字节对齐的实现如下 #pragma pack(1) typedef union { uint8_t buf ; struct Message { uint8_t repeat : 2; uint8_t msgid : 6; ...... } } #pragma pack() 上面的操作为对联合体的1字节对齐,解决了结构体的对齐是根据数据类型最大的变量对齐的情况节省了空间的分配,这里也做了位域的操作将8位拆分为2个变量其中一个占8位里的2bit另外一个占6bit。 位域操作的目的是为了
[单片机]
智能操作系统的加密算法命令
  对于很多应用来说加密算法命令是十分重要的。例如,它们使智能卡可比较容易用做加密和解密设备或用 于验证数字签名。许多智能卡操作系统有其自已执行加密算法的命令组。因为没有这类功能的标准,出现了 诸如ENCRYPT(加密),DECRYPT(解密),SIGN DATA(签署数据)和VERIFY SIGN ̄ATURE(验证签名)等智能卡命令。然而,同时有两条专门处理加密算法的命令已规定在ISO/IEC 7816-8标准中。   在下述材料中,也会述及在ISO/IEC 7816-8标准中的其他加密命令,因为这是目前对于此类命令惟一有效的资料,然而,在撰写此书时这些标准尚未完成;其状态为委员会草案CD(Committee Draft)。这
[安防电子]
智能<font color='red'>卡</font>操作系统的<font color='red'>加密</font>算法命令
小广播
最新应用文章
换一换 更多 相关热搜器件

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

词云: 1 2 3 4 5 6 7 8 9 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved