一.Mifare Light 卡
Mifare Light 卡的开发目的是为了在Mifare 技术平台中,为了高度集中于对芯片的存储器容量进行优化,满足“small memory application”(小存储容量应用)而设计的一款Mifare家族系列产品。注意,由于Mifare Light 卡是Mifare家族系列产品中的一员,特别地,它是Mifare 1 S50卡片的一种转换产品,即在卡片内部的容量等方面采取了小型化,从Mifare1 S50的16Kbits(2Kbytes)缩小到Mifare Light 卡的384bits(48字节),但是Mifare Light 卡仍然保持了大部分的Mifare1 S50卡芯片的特性,因此,对Mifare Light 卡的读写操作,可以完全使用/兼容已经应用在Mifare 1 S50卡的读写设备。
相比于Mifare 1 S50卡,由于Mifare Light 卡在存储器容量上得到了极大的优化、缩小处理(小容量卡),因此在(性能)价格(比)上具有非常大的优势,但存储容量的缩小,一般也只是适合于作为一个应用的卡片载体(例如单程或双程电子车票)。而Mifare 1 S50卡则可以适用在一些比较复杂的多个电子应用的项目中,例如作为可以反复充值的地铁/公交储值卡等。
如下是Mifare Light卡的一些主要特性和技术指标:
1.卡片容量为384位(48字节)的低功耗EEPROM存储器
2.具有唯一的32位(4字节)卡片序列号
3.含有16位(2字节)的数值计数器(芯片中已含有可以防止数据被分割破坏的功能),如果加上需要反写的数值计数器,总共占用8字节—64bits
4.128位(16字节—4页)的用户可编程序数据区(如果用户不启用上述的数值计数/校验功能,则数据区容量可达192位—24字节)
5.用户可自定义数据存储器中数据的读/写控制权限,有两套密码(KEYA和KEYB)来配合完成
6.读写距离:在10cm以内(与天线有关)
7.卡片内无需电源
8.Mifare Light卡兼容Mifare 1 S50卡的读/写设备模块,表现在:
(a)工作频率:13.56MHZ
(b) 通信速率:106KB波特率
(c)防冲突:同一时间可处理多张卡
(d)具有数据整体性校验功能(16bit的CRC,偶校验,位编码,位流计算,RF位通道监控等)
(e)具有和Mifare 1 (S50)卡相同的认证功能(authentication)和RF通道加密功能(RF channel encryption)
注意,上述第8条第(e)款的功能的启用或禁止,对于Mifare Light卡和读写器设备之间的空中交换的卡片数据或读写器命令数据的加密特性有直接的关联!如果读写器模块的RF通道加密功能被禁止,则空中交换的数据将是以“明文”方式存在,一旦数据被在此非法截取,将威胁到卡片原始数据的安全保密特性!!!
如果是一张单程地铁车票,这一威胁表现在:一张单程地铁车票中的数据可以被准确无误地被截取。
如何避免这一安全保密性不受到威胁,在应用系统开发阶段,应该在读写器模块(例如RC530/531等)的相应的RF通道寄存器设置中,必须启用加密特性,设置相应的寄存器数值!!!也就是将卡片和读写机具的空中数据传输模式由“transparence mode”(“明文数据模式”)设置为“encryption mode”(“加密数据模式”),由此避免卡片原始数据的安全保密特性受到被截取的威胁。
如果处于“encryption mode”,即使卡片数据被截取,由于截取者很难从已截取的(加密的)数据中反向推倒出卡片中的原始数据(除非该截取者知道这一加密算法),从而保护了卡片中的原始数据的安全保密特性!!!
如何设置读写模块的专用芯片,例如RC500/RC531等,可以查阅相应的文档资料。一般地,我们应该关注这些相关的寄存器的设置:
Control Register (Addr=0x09);Channel/Redundancy Register (Addr=0x22);Crypto1 Keys;LoadKey(Addr=0x19);Authent1(Addr=0x0C);Authent2(Addr=0x14);Working with the Transmit/Receive Command (Addr=0x1A, 0x1E,0x16);等等。如图所示为相关的一些寄存器(RC530)内部控制寄存器等。
如果控制寄存器(Control Register)中的第3个位(bit)Crypto1On被设置为“1”(在Mifare Light 卡片和读写器进行相互认证操作Authent2完成后),则,读写器和Mifare Light卡片进行非接触通信的空中数据将全部被加密,不再是明文传输。
举个简单的例子,如果单程车票(Mifare Light芯片)卡片中的钱包数据为5(元人民币),则实际读写器接收到的空中数据将不是“0x05”,而是一个经过了加密算法运算后的数据,例如可能为“0x1a2b3c”。由于一般人员不会知晓这一加密算法的构造,因此,即使他非常不容易地截取拿到了这个数据“0x1a2b3c”,他也没有办法回塑、反推到具体的钱包数据为“5”元还是其它数额等。钱包的数据仍然是安全保密的。
另外,作为一个非常专业的IC卡应用系统开发人员,本身还必须对钱包数据(一次性的单程/双程车票或反复使用的地铁/公交储值卡内的钱包数据)执行“一卡一密”的钱包数据加密。加密的结构和算法如下简单说明一下。
加密算法:可以采用公开标准的DES算法或3-DES算法;(具体的算法程序等比较复杂,如果有兴趣,可以与笔者联系获得。)
加密结构:如图所示为相应的一种典型的关系型加密结构。我们可以把DES算法看作是一个“黑盒子”,内部所有的数据和运算是保密的、不可逆的。
加密操作说明如下:
如果要求加密的钱包金额数据B=0x10(元),而该张单程车票的唯一卡号为A=0x0001, 控制密钥为C=0xFFFF,则该张单程车票的加密后的钱包数据D(可能)=0x1a2b3c;(注意,一般从数据D是不可能推倒出数据输入量B的准确值的,这是由DES加密算法的“不可逆推特性”所决定的,否则不能作为加密算法!)