720 likes | 954 Views
接触式逻辑加密卡技术. 电子与信息工程学院. 提 纲. 接触式逻辑加密卡存储结构与安全技术 典型卡型剖析: SLE4406 卡 SLE4442 卡 AT88SC1608 卡 接触式逻辑加密卡的读写控制 典型卡型剖析: SLE4442 卡 时序分析与读、写、密码校验程序. 接触式逻辑加密卡组成. Security Memory Card. 逻辑加密卡特性. 组成:非易失性存储器 + 硬件加密逻辑; 芯片:专门为 IC 卡设计的芯片( ASIC ); 安全性:具有安全控制逻辑,安全性能较好;
E N D
接触式逻辑加密卡技术 电子与信息工程学院
提 纲 • 接触式逻辑加密卡存储结构与安全技术 典型卡型剖析:SLE4406卡 SLE4442卡 AT88SC1608卡 • 接触式逻辑加密卡的读写控制 典型卡型剖析:SLE4442卡 时序分析与读、写、密码校验程序
接触式逻辑加密卡组成 Security Memory Card
逻辑加密卡特性 • 组成:非易失性存储器+硬件加密逻辑; • 芯片:专门为IC卡设计的芯片(ASIC); • 安全性:具有安全控制逻辑,安全性能较好; • 多种安全措施:PIN、EC、FUSE、TC、多存储器(ROM、PROM、EEPROM并存)、多分区存储结构。 • 通信协议:支持ISO7816国际标准。 • 适用场合:有一定安全要求的场合,如IC卡电话、网吧卡、加油卡、保险卡、驾驶卡、借书卡、小额电子钱包等。
典型逻辑加密卡—SLE4406 • 一次性使用,带加密逻辑,按位操作 • 计数卡(Token Memory Card),以一次性的计数方式,从写满的计数器中减“1”,直至存储单元全减为“0”为止 • 104位容量 ,最大可提供20 480计数单位 • 3字节传输密码,1位发行标志保护 • 常用于具有定额定价的消费系统中,如公用电话卡、预付费加油卡、停车计费卡、游乐园消费卡等
SLE4406存储分布图和计数规则 • 计数规则 发行后,用户区进入计数状态,为5位8进制计数器,但第5位计数器只有4位可用,因此最大计数值为20480。 说明: 计数区按位写0,按字节 借位擦除,如: 11111111 00000000 擦成: 11111110 11111111
SLE4406操作方式 • 检查发行标志位是否为1,是则可以校验传输密码 • 先将密码计数器-1,然后比较密码,校验正确则密码计数器恢复,允许写入发行商代码,将控制位写为0(发行)。允许初始化计数器(擦除第2-5字节并重新写入),此操作将撕毁传输密码并不可恢复。 • 一旦控制位为0,表示已发行,将不能再更改发行商代码。第2-5字节成为5位计数器,只能写0及借位擦除。
典型逻辑加密卡—SLE4442 • 按字节操作,可反复应用 • 多存储器结构 • 256 *8位 EEPROM型主存储器。 • 32 *1位 PROM型保护存储器。 • 4 * 8位 EEPROM型加密存储器 • 安全性:用户密码(3字节)+密码错误计数(3次)+PROM保护 • 2线串行连接协议,满足 ISO7816同步传送协议
SLE4442存储器分配(一) • 主存储器(main memory):EEPROM型,256B 按字节操作,字节地址0~255(00H~FFH), 所有单元可任意读取。 • 主存储器可分为两个数据区: • 保护数据区:00H-1FH,用户密码+熔丝保护(擦除、写 当校验用户密码正确且熔丝未熔断时允许进行擦除和写入操作,否则不允许 熔丝:保护存储器中第n位(n=0~31)对应主存储器中第n个字节,1——未熔断,0——熔断。 • 应用数据区 :20H-FFH。用户密码保护(擦除、写)
SLE4442存储器分配(二) • 保护存储器(protection memory):PROM型,32bits 按位操作,位地址0~31 每位相当于主存储器保护数据区对应字节单元的控制熔丝(FUSE),相应位为1时该字节可擦写,为0时不可 • 保护存储器可任意读出,但需校验密码正确方能写入,一经写入(从1变为0)不可再擦除,可理解为FUSE一经熔断不可再恢复。
SLE4442存储器分配(三) • 加密存储器(security memory): EEPROM型,4B • 按字节操作,字节地址0~3 • 字节0:EC(Erroe Counter),低3位有效, 可任意读、写, 用户密码校验成功方可擦除。 • 字节1,2,3:3字节 PSC(可编程加密代码) PSC校验成功前不可读,只能进行比较操作; 密码“比较”成功后才可以进行读出、写入和擦除。
典型逻辑加密卡—AT88SC1608 • 按字节操作,可反复应用 • 存储容量:16Kbits • 安全性:三重密码+熔丝+读写控制位 • 单存储器、多存储分区结构 • 标志数据区:制造商、发行商代码。 • 控制数据区:SC(2字节)、EC、Erase key。 • 应用数据区:4个、各自独立 • 2线串行连接协议,满足 ISO7816同步传送协议
SC1 一区密码
AT88SC1608存储器分配(一) 标志数据区:验证卡片真伪的重要标识 • 制造商代码区FZ (Fabrication Zone ),2B 记录卡芯片生产商的特定信息(例如:生产批号、日期、特别制定的特征代码) FUSE1熔断前,可读,可更改 FUSE1熔断后,只读,不可更改 • 发行商代码区IZ (Issuer Zone),8B 用于记录卡片发行商的特定信息(例如:发行批号、日期、地区范围编号、特定用户编号等特征代码) FUSE2熔断前,可读,可更改 FUSE2熔断后,只读,不可更改
AT88SC1608存储器分配(二) 控制数据区:三重密码+密码错误计数 • 用户密码SC(Security Code),2B 用户密码错误计数SCAC(Security Code Attempts Counter ),1B(8次) • 应用区密码 SC1~ SC4,2B 应用区密码错误计数SCAC1~ SCAC4,8次 • 应用区擦除密码EZ1~4(Erase key ),2B 应用区擦除密码错误计数EnAC(Erase key Attempts Counter ,n=1,2,3,4), 8次
AT88SC1608存储器分配(三) 应用数据区:1~4,各自独立,特性相同 • 存储用户的相关数据记录 。 • 第1位为写保护位(P1) ;第2位为读保护位(R1),均为1有效(可读/写)
实训3接触式逻辑加密卡读写操作 准备: • 确认电源正、负极,按标志正确连接接触式IC卡读写器的电源线及串口线,注意电源+5V与地不可接反。 • 打开接触式IC卡读写器读写操作软件DEMO,确认通信正常。 • 将实验白卡插入接触式IC卡读写器插卡槽,自动测卡进入卡操作界面。 • SLE4442卡密码:FFFFFFH AT88SC1608卡密码:F0F0H或A5A5H
SLE4442读写操作 • 读卡:记录卡密码、卡错误计数值,主存储器存储结构(各区域名称、地址范围、字节数)、存储内容和读出条件。 • 写卡:对主存储器各区域进行写入/擦除操作,记录操作结果,总结各区域写入/擦除条件。 • 密码操作: (1)修改密码:在未通过和已通过密码校验二种情况下分别修改密码,记录操作结果,总结修改密码的条件。 (2)恶意猜测密码:在未通过密码校验的情况下输入错误密码,记录此时的读卡、写卡结果。 注意: 修改密码后必须及时还原密码为FFFFFFH。 猜测密码错误次数不得超过2次!以免锁卡!
AT88SC1608读写操作 • 读卡:在未通过和已通过密码校验二种情况下记录存储器存储结构(各区域名称、地址范围、字节数)、存储内容和读出条件。 • 写卡:在未通过和已通过密码校验二种情况下对存储器各区域进行写入/擦除操作,记录操作结果,总结各区域写入/擦除条件。 • 熔丝操作:模拟熔断,对存储器各区域进行写入/擦除操作,记录操作结果,总结熔断操作对各区域的保护作用。 注意: 修改密码后必须及时还原密码。 猜测密码错误次数不得超过8次!以免锁卡! 只允许模拟熔断,不可熔断,否则将无法恢复。
任 务 • 设计IC卡网吧收费机 • 基本要求: 1、判断是否SLE4442卡 2、读卡,根据读出的发行商标志判断是否本网吧的卡。读出卡中余额,判断是否允许上网。 3、校验密码,密码正确为合法卡。 4、写卡,扣款后允许上网,时间到则继续扣款,直至停止上网或余额不足。 • 进阶要求 实现网吧收费机与PC机的通信
硬件设计——SLE4442引脚分配 C1:Vcc(Supply Voltage) C2: RST(Reset) C3:CLK(Serial Clock) C4: (NC) C5:GND C6:I/O(Bidirectional serial data ,open drain) C7: (NC) C8: (NC)
软件设计——SLE4442操作时序 • 通信协议:2线连接协议,满足ISO7816同步传送协议 • 数据传输:CLK信号下降沿有效。 • 复位和复位响应(Reset and Answer-to-Reset): 上电后启动芯片,符合7816 • 命令(Command): 命令=开始+(控制字+地址字+数据字)+附加脉冲+停止 • 操作模式(Mode): • 读数据:输出数据模式(OUTGOING DATA MODE): • 写入、擦除、校验:处理模式(PROCESSING MODE)
复位和复位响应(Reset and Answer-to-Reset):SLE4442上电后,读写器首先应给出复位(Reset)命令并等待接收来自卡的复位响应ATR(Answer-To-Reset)。
复位和复位响应(Reset and Answer-to-Reset) • 复位响应:符合ISO7816-3标准的ATR • 当RST为高时,送第一个时钟脉冲(脉冲0)使地址计数器清0(复位)。 • 当RST线从高状态(H状态)置到低状态(L状态)时,第一个数据位(主存储器字节0的LSB)的内容被送到I/O上。若连续输人32个时钟脉冲(脉冲1~32),主存储器中的前4个字节(4 * 8位= 32位)地址单元中的内容被读出(复位响应)。 • 在第33个时钟脉冲(脉冲32)的下降沿,I/O线被置成高阻状态(状态Z)而关闭(复位和复位响应过程结束)
;*************复位子程序* ************** RESET: CLR RST CLR CLK CLR IO LCALL DELAY_12 LCALL DELAY_12 SETB RST LCALL DELAY_12 SETB CLK LCALL DELAY_12 CLR CLK LCALL DELAY_12 CLR RST LCALL DELAY_12 MOV B,#20H RESET0:SETB CLK LCALL DELAY_12 CLR CLK LCALL DELAY_12 DJNZ B,RESET0 SETB IO RET 如何读出复位应答呢
;4442 串行输出一个字节子程序,即MCU读入一个字节 SHIN: CLR CLK PUSH B MOV B,#08H X43: LCALL DELAY SETB CLK MOV C,IO RRC A LCALL DELAY CLR CLK DJNZ B,X43 POP B RET 将RESET程序中的32个脉冲换为 调用SHIN子程序4次,读入4个字节的ATR
命令(Command) • 复位响应以后,芯片等待着命令。 • 命令=开始+(控制字+地址字+数据字)+附加脉冲+停止。 • 开始:在CLK为高状态(H)期间,I/O的下降沿为开始状态。 • 停止:在CLK为高状态(H)期间,I/O的上升沿为停止状态。
;************命令子程序*************** ;该子程序送出三字节的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 CLK ;附加脉冲 LCALL DELAY SETB IO ;停止 RET 怎样向卡中写入一个字节?
; sle4442 串行输入一个字节函数, 即MCU向卡写入一字节 SHOUT: PUSH B MOV B,#08H X42: RRC A MOV IO,C NOP SETB CLK LCALL DELAY CLR CLK LCALL DELAY DJNZ B,X42 POP B RET
操作模式 (Mode) • 接收了一个命令之后,卡芯片处于 两种可能的模式: (1)读数据:输出数据模式; (2)写入、擦除、校验密码:处理模式。
输出数据(OUTGOING)模式 • 将IC卡芯片中的数据传送给读写器 • 在第一个CLK脉冲的下降沿之后,I/O线上的第一位数据变为有效。随后每增加一个时序脉冲,芯片内部的一位数据被送到I/O线上,低位(LSB)在前。当所需要的最后一个数据送出之后,需要再附加一个时钟脉冲来把I/O线置成高阻状态(状态Z)。
处理数据(PROCESSING)模式 • 对IC卡芯片作内部处理(写/擦除/校验密码) • 芯片在第一个时钟脉冲的下降沿,将I/O线从高状态(H状态)拉到低状态(L状态)并开始处理。此后芯片在内部连续计时计数,直到第n个时钟脉冲之后的附加一个时钟脉冲的下降沿I/O线被再次置高,完成芯片的处理过程。在整个处理过程中I/O线被锁定成低状态。
;sle4442处理模式子程序 PROCESS: MOV R7,#254D CLR CLK CLR IO LCALL DELAY PRO1: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 • 命令格式:30H +字节地址+ ** • 模式:OUTGOING • 功能:读出从给定的字节地址(N)开始,直到整个存储器末尾的主存储器内容。 • 说明:在该命令输入以后,接口设备IFD必须提供足够的时钟脉冲,起始地址为N时所需要的时钟脉冲数为 M=(256-N)* 8+1 (N=0~255) 例如:地址为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 ;置位数据线 LCALL DELAY RET
读保护存储器Read Protection Memory • 命令格式:34H +** + ** • 模式:OUTGOING • 功能:读出保护存储器各位(共32位)的内容。 • 说明:在该命令输入以后,接口设备IFD必须提供32个时钟脉冲,最后通过一个附加时钟脉冲将I/O线置为高状态(H状态) ,即M=33
读加密存储器Read Security Memory • 命令格式:3lH +** + ** • 模式:OUTGOING • 功能:类似于读保护存储器,可以读出4个字节的加密存储器的内容。M=33 • 说明:密码比较失败时只能读出错误计数器(字节0)的内容,字节1、2、3的内容将为000000(即不能读出密码)
修改主存储器Updata Main Memory • 命令格式:38H +字节地址+ 数据 • 模式:PROCESSING • 功能:用所给出的数据修改主存储器指定字节地址(N)的内容 • 说明:通常,要改变一个数据需要先进行擦除,再进行写入两项操作。如果在被寻址的字节里8位中没有一个字位需要从0变到1,则可以不进行擦除处理。反之亦然,在被寻址的字节中,如果没有一个字位需要从1变到0,则可以不作写入处理,写人或擦除操作一次至少要耗费2.5ms时间 。因此,在处理模式期间,可能发生下列几种情况之一: • 擦除和写入(5ms): 相应于M=256个时钟脉冲 • 只写入不擦除(2.5ms): 相应于 M= 124个时钟脉冲 • 只擦除不写入(2.5ms): 相应于M=124个时钟脉冲。