具体实施方式
为克服现有双界面智能卡通过非接触界面传输应用指令时安全性不足的问题,本发明实施例提供一种双界面智能卡对应用指令进行处理的方法及装置,对这种双界面智能卡进行非接触安全充值。这种低安全性给非接触充值带来了很大的安全隐患。为了消除采用Mifare进行非接触充值的安全隐患,必须 使用另一种安全机制来实现非接触充值。
该双界面智能卡包括:CPU模块和Mifare模块,这两个模块有各自的存储区域,两个模块之间设置有访问接口(Mifare接口),通过Mifare接口CPU模块能够访问Mifare模块的存储区数据。在非接触界面上,双界面智能卡同时支持ISO14443协议和Mifare规范,如图2所示,如果是Mifare卡或遵守Mifare规范的卡片,Mifare指令会直接发送给Mifare模块。前面已经描述过,这种处理方式的安全性很低。现在,本发明实施例的方案是,利用非接触界面的14443协议将应用指令发送给CPU模块,通过CPU模块来对应用指令进行安全处理,就能很好的提高卡片的安全性。这种机制利用双界面智能卡的14443通信接口模块来接收应用指令,实现双界面智能卡和终端的非接触通信,但不限于14443协议如将14443协议进行简单的变形也可实现,只要能够通过非接触界面将应用指令发送到CPU模块即可。CPU模块的COS(卡片操作系统)对应用指令进行安全控制,然后利用两个模块之间的Mifare接口将应用指令发送到Mifare模块,Mifare模块执行应用指令来对Mifare数据区进行读写等相应的处理。CPU模块利用加解密协处理器,对应用指令进行高强度的加密保护,从而保证了在非接触方式下对Mifare数据区访问的安全性,CPU模块对Mifare数据区访问是指CPU模块向Mifare模块发送应用指令,Mifare模块执行应用指令来对Mifare数据区进行相应处理。
为了便于描述,下面对一般概念进行明确,双界面智能卡COS一般是指包含微处理器的卡片操作系统。单纯的Mifare不包含操作系统,只能对接收到的指令进行简单处理。
双界面智能卡的非接触界面一般支持14443协议和Mifare规范。下面所述的双界面智能卡特指既支持14443协议,又支持Mifare规范的卡片。
Mifare规范中对数据进行操作的指令和14443协议中的指令不同。如果是Mifare指令,则不通过14443协议来传输,而直接传送给Mifare模块,处理完后直接将数据送出。在这个过程中Mifare模块的状态对CPU来说是未知的。
Mifare模块的管理是采用分块来进行的,每个块都有其对应的密钥,分别为KeyA和KeyB。每块数据中都有对应的访问控制字节。如果是非接触交易,则必须先认证对应的密钥,然后才能进行相关的处理。每个数据块的密钥KeyA和KeyB在卡片发行时确定。
CPU模块通过一些接口访问Mifare的数据区,通过这些接口,CPU能够安全的访问Mifare数据区。在此,把这个接口简单记为Mifare接口,这个接口只能用于访问Mifare数据区。
为了正确的访问Mifare数据区,必须在使用Mifare接口时提供对应的访问Mifare数据区的密钥。在此把这个密钥记为MFKey。这个密钥只用于CPU通过Mifare接口访问Mifare数据区的情形。通过KeyA和KeyB,经过特定的算法,可以计算出对应的MFkey。
为安全起见,对应用指令进行保护的密钥必须使用特定的密钥,且这个密钥不能用于其他保护的目的。在此,将这个密钥记为维护密钥。
下面以对Mifare模块进行非接触方式的安全充值为例进行说明,首先通过非接触界面利用14443通信协议接收终端发送的充值指令,终端发送前对该充值指令进行加密处理。然后通过CPU模块对相应的充值指令进行相关的安全控制。安全验证通过后,CPU利用访问Mifare的接口,将充值指令通过Mifare接口发送到Mifare模块,Mifare模块执行充值指令来更新Mifare模块的数据。Mifare模块处理完数据后将对应的信息返回给CPU模块。CPU模块利用14443通信协议将对应的信息返回给终端。这样就完成了对双界面智能卡的非接触方式的安全充值。
具体的实现方法,包括以下步骤:
第一步、需要预先在COS中添加一条对充值指令进行处理的指令。对充值指令进行处理的指令在非接触方式可使用。当我们对这些充值指令采取很强的保护措施时,就可以保证对Mifare进行充值的安全性。
第二步、在进行充值前,由终端对充值指令的数据域进行加密并计算消息 认证码,该消息认证码用于验证应用指令合法性。然后,利用14443协议通过非接触界面发送数据给智能卡通信模块,通信模块将充值指令发给CPU模块。
第三步、CPU模块在接收到充值指令后,对充值指令进行处理。用双界面智能卡的维护密钥对充值指令计算消息认证码,确定终端送入的消息认证码的正确性,再对充值指令的数据域进行解密,得到指令数据明文。
第四步、CPU模块通过Mifare接口对Mifare数据区进行访问,以更新Mifare的余额。Mifare数据区的访问机制规定,对Mifare的任何访问都必须要有Mifare的相关的密钥。CPU卡对Mifare数据区的访问也要遵守Mifare的数据区访问机制。
第五步、通过Mifare接口将状态信息返回给CPU模块。CPU模块利用14443协议将数据和状态返回给外界。
第一步中,这些指令不能是Mifare指令。如果是Mifare指令,通信模块会将指令直接发送给Mifare模块,而不会发送到CPU模块,CPU模块无法对该指令进行安全处理。
第二步中,对充值指令的数据域的加密和计算消息认证码可以采用对称加密算法和非对称加密算法,这需要根据应用来确定。一般采用对称加密算法,它能提高指令的处理速度。但是,对于安全需求很高的应用,则可以采用非对称加密算法。通信协议可以采用14443协议,也可以采用其他非接触协议,只要充值指令能先由CPU模块处理。加密和消息认证码的计算采用的填充方式根据应用需求的不同而不同。
第三步中,双界面智能卡维护密钥可以存放在EEPRom中,也可以存放在其他位置。CPU模块对充值指令的数据域的处理算法与终端充值指令的数据域的处理算法一致。数据解密算法和指令消息认证码生成算法可以一致,也可以不同。一般采用一致的算法。
第四步中,CPU模块对Mifare接口的访问,必须在对充值指令的安全控制完成之后执行,否则,无法保证对Mifare模块非接触充值的安全性。MFKey 可以在发卡时存放在芯片的EEPRom中,也可以在充值指令中通过加密的方式送入,同样也可以在充值指令中输入KeyA和KeyB的方式得到,MFKey可以有多个,可以在充值指令设计中用不同的参数来表示不同的密钥生成方式。
第五步中,通过Mifare接口会将相关的状态返回,CPU模块根据对应的状态,可以得知Mifare接口的允许状态,从而给外界正确的响应。
这样,通过采用CPU模块验证安全指令的机制来对非接触下的安全机制进行封装,能有效的保护Mifare数据区的机密性,减少其在非接触式下受攻击的风险。这种机制的保密强度取决于CPU模块的保密强度,与逻辑加密卡的保密强度无关。
这种机制具有明显的优点。它采用CPU模块的协处理器来进行加密运算,能大大提高非接触式充值(或其它应用指令)的安全性。
本发明提供的第一实施例是一种双界面智能卡对应用指令进行处理的方法,在执行该方法前,必须在双界面智能卡CPU模块的COS中添加一条处理非接触充值指令的指令,该指令的编码如表1所示。
代码 |
值(HEX) |
描述 |
CLA |
80 |
|
INS |
50 |
|
P1 |
XX |
00:表示采用卡片里的MFKey 01:表示MFKey在指令的数据域中输入 02:表示使用指令中输入的KeyA和KeyB计 算MFKey |
P2 |
XX |
采用XY的形式。X和Y均为半字节。 X表示维护密钥的ID。如果X为0,表示对指 令数据不进行加密和MAC计算。 Y表示卡片的EEPRom中MFKey的ID。当 P1不为0时Y=0。 |
LC |
XX |
数据的长度(字节长度)。 |
DATA |
|
数据采用如下格式: Block+Data+[KeyA+KeyB/MFKey], []内的数据为可选项,当P1=0x00时,无此数 据,Block为Mifare钱包数据所在的块号,Data 为钱包更新后的新值。 |
LE |
00 |
无返回数据。 |
表1
同时,添加充值指令返回码如表2。
SW1SW2 |
描述 |
9000 |
指令成功执行 |
698F |
卡片内保存的MFKey不对 |
6581 |
更新Mifare数据错误 |
6B00 |
更新的块号不对 |
6D00 |
卡片不支持Mifare,或不支持该指令 |
表2
如果采用卡片保存MFKey,则必须指定其存储类型,且每个MFKey都要指定不同的序号,以利于通过不同的MFKey来访问Mifare不同的区域。在卡片上保存MFKey时,其密钥类型必须与卡片上已有的用于其他目的的密钥类型不同。MFKey的序号和Mifare数据区的块号的对应关系由发卡人确定。
方法流程如图1所示,包括:
步骤101:终端在对充值指令明文进行加密和消息认证码计算,充值指令明文包括密钥KeyA和KeyB。
步骤102:终端使用14443协议通过非接触界面把经过加密和携带消息认证码后的充值指令发送给CPU模块。
步骤103:CPU模块对接收的经过加密和计算消息认证码后的充值指令进 行解密和验证消息认证码。
步骤104:CPU模块对充值指令明文进行分析得到KeyA和KeyB并计算出MFKey。
步骤105:CPU模块调用Mifare模块的Mifare接口,Mifare接口验证MFKey合格后,根据充值指令明文进行相应处理。
步骤106:Mifare接口将处理结果返回给CPU模块,CPU模块利用14443协议将结果返回给终端。
步骤101中,终端需计算出充值指令的密文及消息认证码。
为了安全起见,终端在将充值指令发送给双界面智能卡时,需要对充值指令进行加密,并对充值指令计算消息认证码。加密算法可以是对称算法,也可以是非对称算法。一般采用对称算法,如3DES。主要是计算速度快,双界面智能卡成本低。加密的填充方式可以采用标准的填充方式,也可以根据应用的需要确定。这里采用的填充方式为ISO9797规范中规定的填充方式2。
假设双界面智能卡的维护密钥为:11223344556677889900aabbccddeeff。充值指令通过输入KeyA和KeyB来调用Mifare模块的Mifare接口,分别指定如下值。
KeyA:123456123456
KeyB:654321654321
Data:22222222222222222222222222222222
假设更新Mifare模块的数据块号为8。则明文的指令为:805002101D0822222222222222222222222222222222654321654321123456123456。根据表1可知,其中8050表示为充值指令,0210表示P1为02,P2为10既使用充值指令中输入的KeyA和KeyB计算MFKey,维护密钥的ID为1,1D表示“0822222222222222222222222222222222654321654321123456123456”的数据长度为29,既58个16进制的数需用29个字节表示。
经过加密和添加消息认证码后的充值指令为:
845002102426C50B97537A1810B2A168283407780205F433D40E4892k20CD80C3F90C9E70E742868D8。
步骤102中,终端在对充值指令进行加密和添加消息认证码后,使用14443协议通过非接触界面把经过加密和计算消息认证码后的充值指令:845002102426C50B97537A1810B2A168283407780205F433D40E4892F20CD80C3F90C9E70E742868D8发送给CPU模块。其中消息认证码用于验证应用指令合法性。
步骤103中CPU模块在接收到该指令后,对该指令进行相应的解密处理。
双界面智能卡的维护密钥预置在卡片CPU模块的EEPRom中,当接收到该指令时,双界面智能卡读取指定的密钥,并对该指令进行消息认证码验证,验证成功后进行解密。维护密钥是一组密钥,进行消息认证码验证的维护密钥可以和进行解密的维护密钥相同,也可以不同。
双界面智能卡必须采用与终端一致的算法,对终端发送过来的充值指令进行消息认证码验证。确定终端送入的消息认证码的正确性后,对充值指令进行解密。然后,根据对应的填充方式,将充值指令还原为明文形式上述过程就是整个的解密处理过程。
这个解密处理过程就是保证双界面智能卡安全性的过程。如果验证不通过,则COS不允许充值指令执行。可以看到,通过这种方式,在执行非接触充值的过程中,双界面智能卡的安全性与接触方式的安全性没有差别。这个机制保证了双界面智能卡在执行不同指令时的安全性是一致的。
步骤104中,在经过终端加密处理和CPU模块进行解密处理后,双界面智能卡的安全性就得到了保证。CPU模块对指令的明文进行分析,对于P1的不同值进行不同的处理。
若P1为00,则需要根据P2的低四位找到MFKey的ID。
若P1为01,则指令的数据域中包含对应的MFKey。
若P1为02,则指令的数据域中包含对应的KeyA和KeyB。这时,需要根 据KeyA和KeyB采用特定的算法计算出MFKey。
步骤105中,当通过上面的分析得到MFKey之后,CPU模块可以调用Mifare接口,Mifare接口验证MFKey合格后,由Mifare接口来对Mifare数据区进行访问,即根据充值指令修改Mifare数据区,进行充值处理。若是查询指令,则根据查询指令读取Mifare数据区参数,进行查询处理。总之Mifare接口会根据不同的应用指令,进行相应的处理。
对于双界面智能卡可提供一些API,通过使用这些API,CPU模块可以实现对Mifare接口的调用,进而Mifare接口访问Mifare的存储区。通过KeyA和KeyB计算MFKey的算法也可根据不同的双界面智能卡而不同。
步骤106中Mifare接口将状态信息返回给终端,Mifare接口在处理完操作后,会将相关的状态(处理结果)返回给CPU模块。这些状态会表明本次Mifare访问是否正确。当MFKey不正确时,或Mifare数据块不允许相应操作,或其他原因,Mifare接口都会返回一些标记。COS在获得这些标记后,转换为应用特定的标记。
双界面智能卡在执行完充值指令后,将充值指令的状态返回给终端,通知终端充值指令的执行情况,以便终端能采取对应的措施。
在本实施例中仅以充值指令为例进行了说明,但不限于充值指令,如查询指令等其它应用指令同样使用,不同之处在于,双界面智能卡在COS中需添加一条处理其它应用指令的指令,该指令的编码会与表1有所不同,同时添加其它应用指令返回码也会与表2类似,此处不在赘述。
综合以上步骤,可以看出,双界面智能卡的CPU模块通过非接触界面,利用14443协议接收终端发出的经过加密处理后的应用指令,然后CPU根据应用指令的要求,对应用指令进行消息认证码(Message Authentication Code,MAC)验证,并进行解密处理。这是本处理方法的关键。在验证MAC和解密时,需要用到加密协处理器进行加密,需要读取EEPROM中存储的Mifare访问密钥。当CPU模块对接收到的应用指令验证合法性后,调用Mifare模块的 Mifare接口,Mifare接口根据应用指令的不同情况,对Mifare数据区进行访问,完成充值或查询相应的操作。
本发明提供的第二实施例是一种双界面智能卡,其结构如图2所示,包括:
CPU模块201:用于通过非接触界面,利用14443通信协议接收经过终端加密处理后发送的应用指令,对经过终端加密处理后的应用指令进行解密处理,并调用Mifare模块202的Mifare接口2021;
Mifare接口2021:用于根据应用指令进行相应的处理。
进一步,Mifare接口2021:还用于向CPU模块发送处理结果;
CPU模块201:还用于利用14443通信协议通过非接触界面向终端发送处理结果。
进一步,CPU模块201:还用于通过非接触界面,利用14443通信协议接收经过终端加密处理后发送的应用指令,所述加密处理指对应用指令进行加密并添加用于验证应用指令合法性的消息认证码。
进一步,CPU模块201:还用于对应用指令进行分析得到密钥MFKey;
Mifare接口:还用于对密钥MFKey验证合格后,根据应用指令进行相应的处理。
进一步,CPU模块201:还用于对应用指令进行分析在CPU模块201的存储区2011中得到密钥MFKey;或
对应用指令进行分析在应用指令中得到密钥MFKey;或
对应用指令进行分析在应用指令中得到密钥KeyA和密钥KeyB,通过密钥KeyA和密钥KeyB计算出对应的MFkey。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。