1、 接触式逻辑加密卡技术接触式逻辑加密卡技术电子与信息工程学院电子与信息工程学院提 纲q 接触式逻辑加密卡存储结构与安全技术接触式逻辑加密卡存储结构与安全技术 典型卡型剖析:SLE4406卡 SLE4442卡 AT88SC1608卡q 接触式逻辑加密卡的读写控制接触式逻辑加密卡的读写控制 典型卡型剖析:SLE4442卡 时序分析与读、写、密码校验程序接触式逻辑加密卡组成Security Memory Card逻辑加密卡特性q组成:非易失性存储器+硬件加密逻辑;q芯片:专门为IC卡设计的芯片(ASIC);q安全性:具有安全控制逻辑,安全性能较好;q多种安全措施:PIN、EC、FUSE、TC、多存储
2、器(ROM、PROM、EEPROM并存)、多分区存储结构。q通信协议:支持ISO7816国际标准。q适用场合:有一定安全要求的场合,如IC卡电话、网吧卡、加油卡、保险卡、驾驶卡、借书卡、小额电子钱包等。 SLE4406q一次性使用,带加密逻辑,按位操作q计数卡(Token Memory Card),以一次性的计数方式,从写满的计数器中减“1”,直至存储单元全减为“0”为止 q104位容量 ,最大可提供20 480计数单位 q3字节传输密码,1位发行标志保护 q常用于具有定额定价的消费系统中,如公用电话卡、预付费加油卡、停车计费卡、游乐园消费卡等 SLE4406存储分布图和计数规则 q 计数规则
3、 发行后,用户区进入计数状态,为5位8进制计数器,但第5位计数器只有4位可用,因此最大计数值为20480。说明: 计数区按位写0,按字节 借位擦除,如: 11111111 00000000擦成: 11111110 11111111 10011000 00100000 11111111 1111111111111111 11111111 11111111 111111111 11111110 11111110 11111111 1111111111111111发行商代码厂商测试位发行标志,为0表示已发行厂商标志计数区SLE4406操作方式q检查发行标志位是否为1,是则可以校验传输密码q先将密码计
4、数器-1,然后比较密码,校验正确则密码计数器恢复,允许写入发行商代码,将控制位写为0(发行)。允许初始化计数器(擦除第2-5字节并重新写入),此操作将撕毁传输密码并不可恢复。q一旦控制位为0,表示已发行,将不能再更改发行商代码。第2-5字节成为5位计数器,只能写0及借位擦除。 SLE4406保密特性 SLE4442q按字节操作,可反复应用按字节操作,可反复应用q多存储器结构多存储器结构 *位位 型主存储器。型主存储器。 *1位位 型保护存储器。型保护存储器。 * 位位 型加密存储器型加密存储器 q 安全性:安全性:用户密码(用户密码(3字节)字节)+密码错误计密码错误计数(数(3次)次)+PR
5、OM保护保护 q线串行连接协议,满足线串行连接协议,满足 ISO7816同步传同步传送协议送协议 I/O读写错误计数器加密逻辑可编程加密代码32字节保护数据存储器(厂商代码)224字节未保护数据存储器保护存储器PROM地址02553132SLE4442存储结构SLE4442存储器分配(一)q主存储器主存储器(main memory):EEPROM型,型,256B 按字节操作,字节地址0255(00HFFH), 所有单元可任意读取任意读取。q主存储器可分为两个数据区:保护数据区保护数据区:00H-1FH,用户密码用户密码+ +熔丝熔丝保护(擦除、写 当校验用户密码正确且熔丝未熔断时允许进行擦除和
6、写入操作,否则不允许 熔丝:保护存储器熔丝:保护存储器中第n位(n=031)对应主存储器中第n个字节,1未熔断,0熔断。应用数据区应用数据区 :20H-FFH。用户密码用户密码保护(擦除、写)保护(擦除、写)SLE4442存储器分配(二)q保护存储器(保护存储器(protection memory):PROM型,型,32bits 按位操作,位地址031 每位相当于主存储器保护数据区对应字节单元的控制熔丝(FUSE),相应位为1时该字节可擦写,为0时不可q保护存储器可任意读出,保护存储器可任意读出,但需校验密码正确方能写入,一经写入(从1变为0)不可再擦除,可理解为FUSE一经熔断不可再恢复。S
7、LE4442存储器分配(三)q加密存储器加密存储器(security memory): EEPROM型,型,4B4B按字节操作,字节地址按字节操作,字节地址0303字节字节0 0:(:(ErroeErroe Counter Counter),低),低3 3位有效,位有效, 可任意读、写,可任意读、写, 用户密码校验成功方可擦除。用户密码校验成功方可擦除。字节字节1 1,2 2,3 3:3 3字节字节 PSC(可编程加密代码)可编程加密代码) PSC校验校验成功前不可读,只能进行比较操作;成功前不可读,只能进行比较操作; 密码密码“比较比较”成功后才可以进行读出、写入和擦除。成功后才可以进行读出
8、、写入和擦除。 AT88SC1608q按字节操作,可反复应用按字节操作,可反复应用q存储容量:存储容量:16Kbitsq安全性:安全性:三重密码三重密码+熔丝熔丝+读写控制位读写控制位q单存储器、多存储分区结构单存储器、多存储分区结构 标志数据区:制造商、发行商代码。标志数据区:制造商、发行商代码。控制数据区:控制数据区:SCSC(2 2字节)、字节)、ECEC、Erase keyErase key。应用数据区:应用数据区:4个、各自独立个、各自独立q线串行连接协议,满足线串行连接协议,满足 ISO7816同步传同步传送协议送协议 SC1一区密码AT88SC1608存储器分配(一):验证卡片真
9、伪的重要标识 q 制造商代码区制造商代码区FZ (Fabrication Zone ),),2B 记录卡芯片生产商的特定信息(例如:生产批号、日期、特别制定的特征代码) FUSE1熔断前,可读,可更改 FUSE1熔断后,只读,不可更改 q 发行商代码区发行商代码区IZ (Issuer Zone ),8B 用于记录卡片发行商的特定信息(例如:发行批号、日期、地区范围编号、特定用户编号等特征代码) FUSE2熔断前,可读,可更改 FUSE2熔断后,只读,不可更改 AT88SC1608存储器分配(二)三重密码三重密码+密码错误计数密码错误计数q用户密码用户密码SC(Security Code),),
10、2B 用户密码错误计数用户密码错误计数SCAC(Security Code Attempts Counter ),),1B (8次)q应用区密码应用区密码 SC1 SC4,2B 应用区密码错误计数应用区密码错误计数SCAC1 SCAC4,8次q应用区擦除密码应用区擦除密码EZ14(Erase key ),),2B 应用区擦除密码错误计数应用区擦除密码错误计数EnAC (Erase key Attempts Counter ,=1,2,3,4),), 8次AT88SC1608存储器分配(三):14,各自独立,特性相同,各自独立,特性相同q存储用户的相关数据记录存储用户的相关数据记录 。q第1位为
11、写保护位(P1) ;第2位为读保护位(R1),均为1有效(可读/写) 熔丝熔断前熔丝熔断后读: 当R1=“1”,任何情况下可读 当R1=“0”,总密码核对正确 前,不可读写:总密码校验正确后,可写擦:总密码校验正确后,可擦 读:特性同熔丝前。写:当P1=“1”,总密码核对正确,应用区密码核对正确,则可写。 当P1=“0”,任何情况下不可写。擦:总密码核对正确,应用区密码核对正确,擦除密码核对正确,则应用区可按字节擦除。 准备:q确认电源正、负极,按标志正确连接接触式IC卡读写器的电源线及串口线,注注意电源意电源+5V+5V与地不可接反。与地不可接反。q打开接触式IC卡读写器读写操作软件DEMO
12、,确认通信正常。q将实验白卡插入接触式IC卡读写器插卡槽,自动测卡进入卡操作界面。qSLE4442卡密码:FFFFFFHFFFFFFH AT88SC1608卡密码:F0F0HF0F0H或或A5A5HA5A5HSLE4442读写操作 q 读卡:记录卡密码、卡错误计数值,主存储器存储结构(各区域名称、地址范围、字节数)、存储内容和读出条件。q 写卡:对主存储器各区域进行写入/擦除操作,记录操作结果,总结各区域写入/擦除条件。q 密码操作: (1)修改密码:在未通过和已通过密码校验二种情况下分别修改密码,记录操作结果,总结修改密码的条件。 (2)恶意猜测密码:在未通过密码校验的情况下输入错误密码,记
13、录此时的读卡、写卡结果。AT88SC1608读写操作 q 读卡:在未通过和已通过密码校验二种情况下记录存储器存储结构(各区域名称、地址范围、字节数)、存储内容和读出条件。q 写卡:在未通过和已通过密码校验二种情况下对存储器各区域进行写入/擦除操作,记录操作结果,总结各区域写入/擦除条件。q 熔丝操作:模拟熔断,对存储器各区域进行写入/擦除操作,记录操作结果,总结熔断操作对各区域的保护作用。任 务q设计IC卡网吧收费机q基本要求:1、判断是否SLE4442卡2、读卡,根据读出的发行商标志判断是否本网吧的卡。读出卡中余额,判断是否允许上网。3、校验密码,密码正确为合法卡。4、写卡,扣款后允许上网,
14、时间到则继续扣款,直至停止上网或余额不足。q进阶要求 实现网吧收费机与PC机的通信硬件设计SLE4442引脚分配C1:Vcc(Supply Voltage)C2: RST(Reset)C3:CLK(Serial Clock)C4: (NC)C5:GNDC6:I/O(Bidirectional serial data ,open drain) C7: (NC)C8: (NC)C1C1C2C2C3C3C4C4C5C5C6C6C7C7C8C8VccVccRSTRSTCLKCLKN.C.N.C.GNDGNDN.C.N.C.I/OI/ON.C.N.C.VccGNDI/ORSTSW2CLKSW189C51
15、P1.0P1.1P1.6P1.7P1.2R11.2K9012PNP+5V+5VR210K*4SMARTADPSLE4442接口电路软件设计SLE4442操作时序q 通信协议:2线连接协议,满足ISO7816同步传送协议q 数据传输:CLK信号下降沿有效。q 复位和复位响应(Reset and Answer-to-Reset): 上电后启动芯片,符合7816q 命令(Command): 命令=开始+(控制字+地址字+数据字)+附加脉冲+停止 q 操作模式(Mode):读数据:输出数据模式(OUTGOING DATA MODE):写入、擦除、校验:处理模式(PROCESSING MODE)VCCV
16、CCRSTRSTCLKCLKI/OI/O012303132D0D1D2D30D31地址复位芯片置I/O线于状态ZSLE4442上电后,读写器首先应给出复位(Reset)命令并等待接收来自卡的复位响应ATR(Answer-To-Reset)。复位和复位响应(Reset and Answer-to-Reset)q复位响应:符合 ISO78163标准的ATR当RST为高时,送第一个时钟脉冲(脉冲0)使地址计数器清0(复位)。当RST线从高状态(H状态)置到低状态(L状态)时,第一个数据位(主存储器字节0的LSB)的内容被送到I/O上。若连续输人32个时钟脉冲(脉冲132),主存储器中的前4个字节(4
17、 * 8位= 32位)地址单元中的内容被读出(复位响应)。在第 33个时钟脉冲(脉冲32)的下降沿,IO线被置成高阻状态(状态Z)而关闭(复位和复位响应过程结束);4442 串行输出一个字节子程序,即MCU读入一个字节SHIN: CLR CLK PUSH B MOV B,#08HX43: LCALL DELAY SETB CLK MOV C,IO RRC A LCALL DELAY CLR CLK DJNZ B,X43 POP B RET命令(Command)q复位响应以后,芯片等待着命令。q命令=开始+(控制字+地址字+数据字)+附加脉冲+停止 。q开始:在CLK为高状态(H)期间,I/O的
18、下降沿为开始状态。q停止:在CLK为高状态(H)期间,I/O的上升沿为停止状态。SLE4442操作命令;*命令子程序*;该子程序送出三字节的SLE4442命令;入口参数:COM为控制字,ADDR为地址字,DAT为数据字COMMAND:SETB CLK LCALL DELAY_12 CLR IO ;开始 LCALL DELAY CLR CLK LCALL DELAY MOV A,COM;送命令字 LCALL SHOUT MOV A,ADDR;送地址字 LCALL SHOUT MOV A,DAT;送数据 LCALL SHOUT LCALL DELAY CLR IO LCALL DELAY SETB
19、 CLK;附加脉冲 LCALL DELAY SETB IO;停止 RET; sle4442 串行输入一个字节函数, 即MCU向卡写入一字节SHOUT: PUSH B MOV B,#08HX42: RRC A MOV IO,C NOP SETB CLK LCALL DELAY CLR CLK LCALL DELAY DJNZ B,X42 POP B RET操作模式 (Mode)q接收了一个命令之后,卡芯片处于 两种可能的模式:(1)读数据:输出数据输出数据模式;(2)写入、擦除、校验密码:处理处理模式。输出数据(OUTGOING)模式q将IC卡芯片中的数据传送给读写器q在第一个CLK脉冲的下降沿
20、之后,I/O线上的第一位数据变为有效。随后每增加一个时序脉冲,芯片内部的一位数据被送到I/O线上,低位(LSB)在前。当所需要的最后一个数据送出之后,需要再附加一个时钟脉冲来把I/O线置成高阻状态(状态Z)。处理数据(PROCESSING)模式q对IC卡芯片作内部处理(写/擦除/校验密码)q芯片在第一个时钟脉冲的下降沿,将IO线从高状态(H状态)拉到低状态(L状态)并开始处理。此后芯片在内部连续计时计数,直到第n个时钟脉冲之后的附加一个时钟脉冲的下降沿IO线被再次置高,完成芯片的处理过程。在整个处理过程中IO线被锁定成低状态。 ;sle4442处理模式子程序 PROCESS: MOV R7,#
21、254D CLR CLK CLR IO LCALL DELAYPRO1:SETB CLK LCALL DELAY CLR CLK LCALL DELAY DJNZ R7,PRO1 SETB IO LCALL DELAY SETB CLK LCALL DELAY CLR CLK RET读主存储器读主存储器Read Main Memory q命令格式:30H +字节地址+ *q模式:OUTGOINGq功能:读出从给定的字节地址(N)开始,直到整个存储器末尾的主存储器内容。q说明:在该命令输入以后,接口设备IFD必须提供足够的时钟脉冲,起始地址为N时所需要的时钟脉冲数为 M=(256-N)* 81
22、(N=0255)例如:地址为7EH(N=254),M=17;*读主存储器子程序*READ: MOV COM,#30H;设置读主存储器控制字 MOV ADDR,#R_ADDR;取读主存储器首地址 MOV DAT,#00H;设置读主存储器数据字(任意) MOV R4,NUM;数据个数 LCALL COMMAND;送命令给卡READ0:LCALL SHIN;读数据(输出数据模式) MOV R0,A;送数据入数据缓冲区 INC R0 DJNZ R4,READ0;未读完继续 SETB CLK;发送一个附加脉冲 LCALL DELAY CLR CLK LCALL DELAY SETB IO;置位数据线 L
23、CALL DELAY RET读保护存储器读保护存储器 Read Protection Memoryq命令格式:34H +* + *q模式:OUTGOINGq功能:读出保护存储器各位(共32位)的内容。q说明:在该命令输入以后,接口设备IFD必须提供32个时钟脉冲,最后通过一个附加时钟脉冲将I/O线置为高状态(H状态) ,即M=33读加密存储器读加密存储器 Read Security Memoryq命令格式:3lH +* + *q模式:OUTGOINGq功能:类似于读保护存储器,可以读出4个字节的加密存储器的内容。M=33q说明:密码比较失败时只能读出错误计数器(字节0)的内容,字节1、2、3的
24、内容将为000000(即不能读出密码)修改主存储器修改主存储器 Updata Main Memoryq命令格式:38H +字节地址+ 数据q模式:PROCESSINGq功能:用所给出的数据修改主存储器指定字节地址(N)的内容q说明:通常,要改变一个数据需要先进行擦除,再进行写入两项操作。如果在被寻址的字节里位中没有一个字位需要从变到,则可以不进行擦除处理。反之亦然,在被寻址的字节中,如果没有一个字位需要从变到,则可以不作写入处理,写人或擦除操作一次至少要耗费.时间 。因此,在处理模式期间,可能发生下列几种情况之一: 擦除和写入(5ms): 相应于M256个时钟脉冲 只写入不擦除(2.5ms):
25、 相应于 M= 124个时钟脉冲 只擦除不写入(2.5ms): 相应于M124个时钟脉冲。 ;*修改主存储器子程序*WRITE: MOV R4,NUM;取要写的字节数 MOV COM,#38H ;设置修改主存储器控制字WRITE0: MOV ADDR,#W_ADDR;取修改主存储器首地址 MOV A,R0 MOV DAT,A;取修改主存储器数据字 LCALL COMMAND;送修改主存储器命令给卡 LCALL PROCESS;处理模式 INC W_ADDR ;地址字指向主存储器下一个单元 INC R0;指向下一个数据 DJNZ R4,WRITE0;未写完继续 RET修改加密存储器修改加密存储器
26、 Updata Security Memoryq命令格式:39H +字节地址+ 数据q模式:PROCESSINGq功能:用所给出的数据修改加密存储器指定字节地址的内容(即修改错误计数器或修改密码)q说明:该命令只能在PSC比较成功之后才能进行。该命令的执行时间和所需要的时钟脉冲与修改主存储器的情况相同 写保护存储器写保护存储器 Write Protection Memoryq命令格式:3CH +字节地址(00H1FH)+ 输入的数据q模式:PROCESSINGq功能:这一命令的执行过程包含一个把被输入的数据与在EEPROM中对应数据进行比较的过程。在确认一致的情况下,保护字位被写0,从而使得主
27、存储器中的信息不可更改。如果数据比较结果不一致,则保护字位的写操作将被禁止执行。q说明:该命令所要求的时钟脉冲和执行时间与修改主存储器命令的情况相同。 比较校验数据比较校验数据Compare Varification Data q命令格式:33H +字节地址+ 数据q模式:PROCESSINGq功能:把输入的“用户密码”的各个字节与相对应的PSC(存放在加密存储器中)进行比较 q说明:字节地址为01H03H,数据为用户密码读SM*修改SM地址0数据校验VD地址1、2、3密码1、2、3修改SM地址007H读SM*PSC校验流程q PSC校验的过程并不是仅由比较校验数据命令来完成的,而是由多个命令
28、构成的一个流程来共同完成,流程一:用一个修改加密存储器命令将密码错误计数器中的一位写0。流程二:连续用三条比较校验数据命令比较输入的用户密码与加密存储器中存储的密码。比较从字节1开始。流程三:校验密码成功与否是用能否擦除密码错误计数器来证实的。如果校验成功,则擦除操作执行有效;如果校验不成功,擦除操作执行无效,密码错误计数器将不会恢复为“111”。但只要EC不全为0,就允许读写器对芯片进行重试。 ;*PSC校验子程序*COMP: MOV COM,#31H;设置读加密存储器命令控制字 MOV ADDR,#00H;设置读加密存储器命令地址字(00H为错误计数器) MOV DAT,#00H;设置读加
29、密存储器命令数据字(任意) LCALL COMMAND;送读加密存储器命令 LCALL SHIN;读错误计数器 MOV 23H,A;错误计数器值暂存(23H)单元 LCALL SHIN;继续读入加密存储器后3个字节 MOV 24H,A LCALL SHIN MOV 25H,A LCALL SHIN MOV 26H,A MOV A,23H SETB IO;附加一个脉冲,置数据线为高 LCALL DELAY SETB CLK LCALL DELAY CLR CLK JB ACC.0,NEXT0;判断错误计数器中是否还有“1” ;JB ACC.1,NEXT1;如有“1”则减去一个“1”, ;JB A
30、CC.0,NEXT2 LJMP EXIT1;错误计数器为全“0”退出NEXT0:MOV DAT,#06HAJMP COMP0NEXT1:MOV DAT,#04HAJMP COMP0NEXT2:MOV DAT,#00HCOMP0:MOV COM,#39H;设置修改加密存储器命令控制字 MOV ADDR,#00H;设置修改加密存储器命令地址字(错误计数器) LCALL COMMAND;送修改加密存储器命令(错误计数器减一个1) LCALL PROCESS;处理模式MOV COM,#33H;设置PSC校验命令控制字 MOV ADDR,#01H;设置PSC校验命令地址字 MOV DAT,#PSC1;取
31、PSC第一个字节 LCALL COMMAND;送PSC校验命令给卡 LCALL PROCESS;处理模式 MOV COM,#33H;设置PSC校验命令控制字 MOV ADDR,#02H;设置PSC校验命令地址字 MOV DAT,#PSC2;取PSC第二个字节 LCALL COMMAND;送PSC校验命令给卡 LCALL PROCESS;处理模式 MOV COM,#33H;设置PSC校验命令控制字 MOV ADDR,#03H;设置PSC校验命令地址字 MOV DAT,#PSC3;取PSC第三个字节 LCALL COMMAND;送PSC校验命令给卡 LCALL PROCESS;处理模式MOV CO
32、M,#39H;设置修改加密存储器命令控制字 MOV ADDR,#00H;设置修改加密存储器命令地址字(错误计数器) MOV DAT,#07H;取修改加密存储器命令数据字(擦除错误计数器) LCALL COMMAND ;送修改加密存储器(擦除错误计数器)命令给卡 LCALL PROCESS;处理模式 MOV COM,#31H;设置读加密存储器命令控制字 MOV ADDR,#00H;设置读加密存储器命令地址字(错误计数器) MOV DAT,#00H;设置读加密存储器命令数据字(任意) LCALL COMMAND;送读加密存储器命令给卡 LCALL SHIN;读加密存储器的错误计数器 MOV 23H
33、,ALCALL SHIN;读加密存储器的后三个字节 MOV 24H,A LCALL SHIN MOV 25H,A LCALL SHIN MOV 26H,A MOV A,23H;EC值送A SETB IO;附加一个脉冲,置数据线为高 LCALL DELAY SETB CLK LCALL DELAY CLR CLKEXIT1:RETIO BIT P1.0CLK BIT P1.1RST BIT P1.2ICSW BIT P1.6 PWR BIT P1.7PSC1 EQU 0FFHPSC2 EQU 0FFHPSC3 EQU 0FFHCOM EQU 20HADDR EQU 21HDAT EQU 22H
34、NUM EQU 2FH;*主程序* ORG 0030HMAIN:CLR EA;关中断 MOV SP,#60H;设置堆栈LCALL PWRON;上电控制 LCALL RESET;复位 MOV R0,#30H;设置读数据缓冲区1首地址 LCALL READ;读主存储器 NOP;断点 LCALL COMP;PSC校验 XRL A,#07h;断点,检查PSC校验是否正确 JNZ EXIT;PSC校验失败退出 MOV R0,#50H;设置写数据缓冲区首地址 LCALL WRITE;修改主存储器 MOV R0,#40H;设置读数据缓冲区2首地址 LCALL READ;读主存储器EXIT: NOP;断点 L
35、CALL PWROFF;下电控制 SJMP $第一阶段:读卡第一阶段:读卡1、通过复位应答方式读入SLE4442卡主存储器前4个字节的内容。2、通过读主存储器方式读入SLE4442卡主存储器前4个字节的内容。3、读主存储器任意起始地址、任意长度的数据块内容。课前准备:1、在原有AT24C01卡接口电路上增加RST连线及其上拉电阻。2、完成程序的编写、编译。第二阶段:校验密码、写卡第二阶段:校验密码、写卡1、校验密码,校验成功则设标志寄存器B为00H,否则设为FFH并退出。2、判断校验密码是否成功,成功则在主存储器任意起始地址、任意长度的数据块中写入数据。否则退出。注意:注意: 校验密码错误退出程序后,请用通用读写器重新输入正确密码,以恢复EC的次数,切勿反复出错退出导致卡锁死!实训报告要求q画出逻辑加密卡接口电路原理图。q画出读主存储器、修改主存储器和校验密码的程序流程图。q记录上述程序的调试步骤及调试结果。