CN101799955B - 一种对双电子钱包进行操作的方法 - Google Patents
一种对双电子钱包进行操作的方法 Download PDFInfo
- Publication number
- CN101799955B CN101799955B CN2009102378767A CN200910237876A CN101799955B CN 101799955 B CN101799955 B CN 101799955B CN 2009102378767 A CN2009102378767 A CN 2009102378767A CN 200910237876 A CN200910237876 A CN 200910237876A CN 101799955 B CN101799955 B CN 101799955B
- Authority
- CN
- China
- Prior art keywords
- stored value
- value card
- remaining sum
- card
- address
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
Abstract
本发明公开了一种对双电子钱包进行操作的方法,涉及信息安全领域。所述方法包括:CPU卡进入终端的非接触式感应区内,上电并初始化,分别获取第一电子钱包和第二电子钱包的余额,比较第一电子钱包的余额与第二电子钱包的余额的大小,若第一电子钱包的余额小于第二电子钱包的余额,则将第二电子钱包的余额设置为与第一电子钱包的余额一致,并进行寻卡操作;若第二电子钱包的余额小于第一电子钱包的余额,则将第一电子钱包的余额设置为与第二电子钱包的余额一致,并进行寻卡操作;若第一电子钱包的余额与第二电子钱包的余额相等,则进行寻卡操作。
Description
技术领域
本发明涉及信息安全领域,特别涉及一种在CPU终端对双电子钱包进行操作的方法。
背景技术
逻辑加密卡Mifare 1(M1)技术成熟、价格低廉,在传统的城市交通智能卡应用中占据了绝大部分,但M1卡内部没有独立的CPU和操作系统,完全依靠内置硬件逻辑电路实现安全认证和保护,因此导致M1卡容易被破解,按交通智能卡“一卡多用、多卡互通”的发展趋势,M1卡内电子钱包的资金存量必将越来越高,因此M1的安全隐患已引起高度的关注。
CPU卡内具有中央处理器(CPU)、随机存储器(RAM)、程序存储器(ROM)、数据存储器(EEPROM)以及片内操作系统,其安全性大幅优于M1卡,但高昂的价格严重制约了其推广应用,近来随着非接触CPU卡的推出,其价格接近M1卡,技术也日趋成熟,这使全面推广应用CPU卡取代M1卡成为可能。
现在技术中存在一种包含有M1和CPU两部分的CPU卡,但是这种CPU卡在内部处理流程上两部分是完全独立的,没有同步机制来对这两部分中的双电子钱包进行同步,因此这样就造成了在使用M1终端 或CPU终端消费时,双电子钱包的余额不一致的问题。
发明内容
为了解决现有技术中的不足,本发明提供了一种在CPU终端对双电子钱包进行操作的方法,所述方法包括:
CPU卡进入终端的非接触式感应区内,所述CPU卡上电并初始化;
获取第一电子钱包的余额;
所述第一电子钱包为基于逻辑加密芯片标准的金融应用,并预先约定存储区在CPU卡的逻辑加密卡区域中的扇区号和块号,其中,所述存储区用于存储所述第一电子钱包的余额;
所述获取所述第一电子钱包的余额的方法,具体为:
根据所述存储第一电子钱包的余额的存储区在CPU卡的逻辑加密卡区域中的扇区号,调用函数获取所述第一电子钱包的扇区密钥;
根据所述获取的扇区密钥和存储所述第一电子钱包的余额的存储区在CPU卡的逻辑加密卡区域中的块号,调用函数获取所述第一电子钱包的余额;
获取第二电子钱包的余额;
所述第二电子钱包为使用ISO 14443接口协议实现的符合银行标准的电子钱包;
所述获取第二电子钱包的余额的方法,具体为:
查找应用文件的地址;
根据所述应用文件查找所述应用文件下的第二电子钱包文件的地址;
根据所述查找得到的第二电子钱包文件的地址和预先设定的第二电子钱包的余额的偏移量来计算用于存储所述第二电子钱包的余额的地址;
根据所述计算得到的用于存储所述第二电子钱包的余额的地址来读取所述第二电子钱包的余额;
或者,
预先约定所述CPU卡内的存储空间中存储所述第二电子钱包的余额的地址,从所述预先约定的存储空间中读取用于存储所述第二电子钱包的余额的地址;
根据所述读取得到的地址来读取所述第二电子钱包的余额;
比较所述第一电子钱包和所述第二电子钱包的余额的大小;
若所述第一电子钱包的余额小于所述第二电子钱包的余额,则将所述第二电子钱包的余额设置为与所述第一电子钱包的余额一致,并进行寻卡操作;
所述将第二电子钱包的余额设置为与所述第一电子钱包的余额一致的方法,具体为:
查找应用文件的地址;
根据所述应用文件查找所述应用文件下的第二电子钱包文件的地址;
根据所述查找得到的第二电子钱包文件的地址和预先设定的第二电子钱包的余额的偏移量计算用于存储所述第二电子钱包的余额的地址;
将所述计算得到的用于存储所述第二电子钱包的余额的地址所指向的存储区中的数据清空,并将所述第一电子钱包的余额写入所述计算得到的用于存储所述第二电子钱包的余额的地址所指向的存储区中,作为所述第二电子钱包的新的余额;
或者,
从预先约定的存储空间中读取用于存储所述第二电子钱包的余额的地址;
将所述用于存储第二电子钱包的余额的地址所指向的存储区中的数据清空,并将第一电子钱包的余额写入所述用于存储第二电子钱包的余额的地址所指向的存储区中,作为所述第二电子钱包的新的余额;
若所述第二电子钱包的余额小于所述第一电子钱包的余额,则将所述第一电子钱包的余额设置为与所述第二电子钱包的余额一致,并进行寻卡操作;
所述将第一电子钱包的余额设置为与所述第二电子钱包的余额一致的方法,具体为:
根据存储所述第一电子钱包的余额的存储区在CPU卡的逻辑加密卡区域中的扇区号,调用函数获取所述第一电子钱包的扇区密钥;
根据所述获取的扇区密钥和存储所述第一电子钱包的余额的存储区在CPU卡的逻辑加密卡区域中的块号,调用函数设置所述第一电子钱包的余额;
若所述第一电子钱包的余额与所述第二电子钱包的余额相等,则直接进行寻卡操作;
所述进行寻卡操作具体为:
判断是否接收到寻卡的命令,若否,则继续等待接收寻卡的命令,若是,则接收唤醒命令和请求命令;
返回应答命令,进行防冲撞处理,并接收终端发来的选择命令;
执行选择命令,并发送确认信息给终端;接收非接触式的数据帧。
本发明的有益效果在于:本发明提供的一种在CPU卡内对双电子钱包进行操作的方法,该方法提供了一种同步机制,实现了双电子钱包真正的同步;该方法采用CPU终端进行充值,提高了原有的通过M1终端充值的安全性;并且本发明提供的方法在不改变M1消费终端的前提下,仍然可以使用原有的M1卡进行消费,这样有利于消费的统一。
附图说明
图1为本实施例提供的一种在CPU卡内对双电子钱包进行操作的 方法的流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式做进一步地详细描述。
本发明使用了一种双界面CPU卡,该双界面CPU卡具体为带有ISO 14443接口和Mifare 1(简称M1)的非接触式CPU卡,如SLE66CL80PEM、P5CD012等,并且通过该非接触式CPU卡,本发明实现了双电子钱包应用,具体地,使用该非接触式CPU卡中的ISO 14443接口实现的是符合银行标准(如PBOC2.0标准)的电子钱包,即CPU电子钱包,而使用该非接触式CPU卡中的Mifare 1实现的是基于逻辑加密芯片标准(如Mifare标准)的金融应用,即M1电子钱包,两种钱包在硬件上相互独立,但CPU电子钱包应用可以访问M1电子钱包。
本实施例提供了一种在CPU终端对CPU卡内的CPU电子钱包和M1电子钱包进行操作的方法,在本实施例中,带有CPU电子钱包和M1电子钱包的CPU卡为非接触式CPU卡,CPU终端为非接触式终端,具体实现步骤如下:
步骤101:CPU卡进入终端的非接触式感应区内,CPU卡上电并初始化;
步骤102:判断自身是否已进行了个人化,即判断内部的个人化标志位是否为0xAA,若是,则执行步骤103,若否,则执行步骤109;
在本实施例中,个人化标志位是发卡系统与CPU卡预先约定的,当发卡系统已对CPU卡进行个人化时,则发卡系统在CPU卡中设置一个个人化标志位,并将该个人化标志位设置为预先约定的值,在本实施例中发卡系统与CPU卡预先约定的值具体为0xAA,是自定义的,即当个人化标志位是0xAA时,则表示 CPU卡已进行了个人化,否则表示CPU卡未进行个人化,并且发卡系统和CPU卡也可以预先约定任意其他的值作为标识,如0x01,即当个人化标志位是0x01时,则表示CPU卡已进行了个人化,否则表示CPU卡未进行个人化;
或者,在本实施例中发卡系统与CPU卡预先约定,若发卡系统已对CPU卡进行个人化时,则发卡系统在CPU卡中创建一个文件系统的主目录MF,当CPU卡判断内部已存在文件系统的主目录MF时,则表示CPU卡已进行了个人化,当CPU卡判断内部不存在文件系统的主目录MF时,则表示CPU卡未进行个人化;
或者,发卡系统与CPU卡预先约定,若发卡系统已对CPU卡进行个人化时,则发卡系统在CPU卡中的文件系统的主目录MF下创建一个标识文件,当CPU卡判断内部已存在标识文件时,则表示CPU卡已进行了个人化,当CPU卡判断内部不存在标识文件时,则表示CPU卡未进行个人化。
步骤103:获取M1的扇区密钥;
在本实施例中,预先约定存储M1电子钱包的余额的扇区号和块号,并根据该预先约定的扇区号来获取M1的扇区密钥,其中获取M1的扇区密钥的方法具体为:调用API接口函数extern WORD GetMifareSectorPassword(BYTE*secPwdBuf,BYTE blockNo)来获取M1的扇区密钥。
步骤104:获取M1电子钱包的余额;
在本实施例中,CPU卡根据步骤103中获得的M1的扇区密钥,以及预先约定的存储M1电子钱包的余额的块号来获取M1电子钱包的余额,其中获取M1电子钱包的余额的方法具体为:调用API接口函数extern BYTEGetMifarePurseBalance(BYTE*balanceBuf)来获取M1电子钱包的余额。
步骤105:获取CPU电子钱包的余额;
在本实施例中,获取CPU电子钱包的余额的方法具体为:
查找应用文件ADF的地址;
根据应用文件ADF查找ADF下的CPU电子钱包文件的地址;
根据查找得到的CPU电子钱包文件的地址和预先设定的CPU电子钱包的余额的偏移量来计算用于存储CPU电子钱包的余额的地址;
根据计算得到的用于存储CPU电子钱包的余额的地址来读取CPU电子钱包的余额;
或者,
预先约定CPU卡内有一块存储空间用于存储CPU电子钱包的余额的地址,则从上述存储空间中读取上述地址,再根据上述地址直接读取CPU电子钱包的余额。
步骤106:对M1电子钱包和CPU电子钱包进行同步,即比较M1电子钱包的余额与CPU电子钱包的余额的大小,若M1电子钱包的余额小于CPU电子钱包的余额,则执行步骤107,若CPU电子钱包的余额小于M1电子钱包的余额,则执行步骤108,若M1电子钱包的余额与CPU电子钱包的余额相等,则执行步骤109;
步骤107:将CPU电子钱包的余额设置为与M1电子钱包的余额一致,然后执行步骤109;
在本实施例步骤107中,将CPU电子钱包的余额设置为与M1电子钱包的余额一致的方法,具体为:
查找应用文件ADF的地址;
根据应用文件ADF查找ADF下的CPU电子钱包文件的地址;
根据查找得到的CPU电子钱包文件的地址和预先设定的CPU电子钱包的余 额的偏移量来计算用于存储CPU电子钱包的余额的地址;
将上述地址所指向的存储区中的数据清空,然后将M1电子钱包的余额写入上述地址所指向的存储区中,作为CPU电子钱包的新的余额;
或者,
从预先约定的存储空间中读取CPU电子钱包的余额的地址;
将上述地址所指向的存储区中的数据清空,然后将M1电子钱包的余额写入上述地址所指向的存储区中,作为CPU电子钱包的新的余额;
进一步地,将CPU电子钱包的余额设置为与M1电子钱包的余额一致,还包括:更新CPU电子钱包的交易明细,具体方法为:
读取CPU电子钱包的最后一条交易明细的具体时间;
将M1电子钱包的每条交易明细的时间与上述读取得到的时间进行比较;
将M1电子钱包的交易明细的时间在上述读取得到的时间之后的所有交易明细追加到CPU电子钱包的交易明细中;
其中,交易明细具体为:交易金额、交易类型标识、终端机编号、交易日期和交易时间等;
进一步地,更新CPU电子钱包的交易明细之后,还包括:
根据追加到CPU电子钱包的交易明细中的M1电子钱包的交易明细的条数,相应地将CPU电子钱包的脱机交易序号加上相应的值,其中该相应的值与上述条数相同,如追加到CPU电子钱包的交易明细中的M1电子钱包的交易明细的条数为3,则相应地将CPU电子钱包的脱机交易序号加3。
步骤108:将M1电子钱包的余额设置为与CPU电子钱包的余额一致,然后执行步骤109;
在本实施例步骤108中,将M1电子钱包的余额设置为与CPU电子钱包的余额一致的方法具体为:
根据预先约定的扇区号,调用API接口函数extern WORDGetMifareSectorPassword(BYTE*secPwdBuf,BYTE blockNo)来获取M1的扇区密钥;
调用API接口函数extern BYTE SetMifarePurseBalance(BYTE*balanceBuf),并利用获得的M1的扇区密钥来设置M1电子钱包的余额,即将M1电子钱包的余额设置为与CPU电子钱包的余额一致;
其中,将M1电子钱包的余额设置为与CPU电子钱包的余额一致,还包括:更新M1电子钱包的交易明细,具体方法为:
读取M1电子钱包的最后一条交易明细的具体时间;
将CPU电子钱包的每条交易明细的时间与上述读取得到的时间进行比较;
将CPU电子钱包的交易明细的时间在上述读取得到的时间之后的所有交易明细追加到M1电子钱包的交易明细中;
其中,交易明细具体为:交易金额、交易类型标识、终端机编号、交易日期和交易时间等;
进一步地,更新M1电子钱包的交易明细之后,还包括:
根据追加到M1电子钱包的交易明细中的CPU电子钱包的交易明细的条数,相应地将M1电子钱包的脱机交易序号加上相应的值,其中该相应的值与上述条数相同,如追加到M1电子钱包的交易明细中的CPU电子钱包的交易明细的条数为1,则相应地将M1电子钱包的脱机交易序号加1。
步骤109:判断是否接收到寻卡的命令,若否,则继续等待接收命令并进行 判断,若是,则执行步骤110;
步骤110:接收唤醒命令WUPA和请求命令REQA;
步骤111:返回应答命令ATQA,再进行防冲撞处理ANTICOL,然后接收选择命令SELECT;
步骤112:发送选择确认SAK(MIFARE enabled);
步骤113:接收到非接触式的数据帧CL(contactless)Frame;
步骤114:判断是否有选择应答请求命令RATS Ccommand,若否,则执行步骤115,若是,则执行步骤116;
步骤115:执行M1钱包应用操作,直到掉电或是CPU卡离开终端的非接触式感应区;
步骤116:等待接收应用命令,当接收到的是圈存初始化命令INITIALIZEFOR LOAD时,则执行步骤117,当接收到的是消费初始化命令INITIALIZE FORPURCHASE时,则执行步骤132;
在本实施例中,圈存初始化命令INITIALIZE FOR LOAD用于初始化圈存交易。
步骤117:读取INITIALIZE FOR LOAD命令中包含的数据并保存;
在本实施例中,INITIALIZE FOR LOAD命令中包含的数据具体为密钥索引号、交易金额和终端机编号。
步骤118:检查自身是否支持INITIALIZE FOR LOAD命令中包含的密钥索引号,若不支持,则执行步骤119,若支持,则执行步骤120;
步骤119:返回状态码0x9403给终端,并终止执行圈存初始化操作,然后返回到步骤116;
步骤120:生成一个伪随机数和一个过程密钥,并利用该过程密钥计算得到 第一报文鉴别码MAC1;
在本实施例中,过程密钥是由密钥DLK分散得到的;
利用过程密钥计算得到第一报文鉴别码MAC1的方法具体为:
将交易前的CPU电子钱包的余额、交易金额、交易类型标识和终端机编号顺序链接,再利用过程密钥对链接后的数据进行加密,得到的加密后的数据的前四个字节即为MAC1。
步骤121:将INITIALIZE FOR LOAD响应报文返回给终端;
其中,INITIALIZE FOR LOAD响应报文由Data+sw1+sw2组成;
只有当INITIALIZE FOR LOAD响应报文中的状态码sw1和sw2为‘9000’时,则INITIALIZE FOR LOAD命令执行成功,INITIALIZE FOR LOAD响应报文数据域Data中包含的数据有交易前的CPU电子钱包的余额、CPU钱包的联机交易序号、密钥版本号、算法标识、伪随机数和MAC1,若命令执行不成功,则返回给终端的INITIALIZE FOR LOAD响应报文中只含有状态码sw1和sw2,且状态码sw1和sw2不为‘9000’。
步骤122:接收终端发送的圈存命令CREDIT FOR LOAD,读取CREDIT FOR LOAD命令中的数据并保存;
在本实施例中,圈存命令CREDIT FOR LOAD用于圈存交易;
其中,CREDIT FOR LOAD命令中的数据具体为交易日期、交易时间和第二报文鉴别码MAC2。
步骤123:使用步骤120中生成的过程密钥来验证上述MAC2是否有效,若无效,则执行步骤124,若有效,则执行步骤125;
在本实施例中,验证MAC2是否有效的方法,具体为:
将交易金额、交易类型标识、终端机编号、交易日期和交易时间顺序链接,然后使用步骤120中生成的过程密钥对链接得到的数据进行加密,再比较加密后得到的数据的前四个字节与CREDIT FOR LOAD命令数据域中的MAC2是否相同,若不相同,则MAC2无效,若相同,则MAC2有效。
步骤124:返回状态码0x9302给终端,提示MAC2无效,终止执行圈存操作,然后返回到步骤116;
步骤125:将CPU电子钱包的联机交易序号加1,将交易金额加到CPU电子钱包的余额上;
在本实施例步骤125中,将交易金额加到CPU电子钱包的余额上的方法,具体为:
查找应用文件ADF的地址;
根据应用文件ADF查找ADF下的CPU电子钱包文件的地址;
根据查找得到的CPU电子钱包文件的地址和预先设定的CPU电子钱包的余额的偏移量来计算用于存储CPU电子钱包的余额的地址;
读取上述计算得到的用于存储CPU电子钱包的余额的地址所指向的存储区中的数据,将交易金额与读取得到的数据相加,并用相加得到的数据覆盖上述计算得到的用于存储CPU电子钱包的余额的地址所指向的存储区中的数据,将此相加得到的数据作为CPU电子钱包新的余额。
步骤126:更新CPU电子钱包的交易明细;
在本实施例中,需要更新的CPU电子钱包的交易明细具体为:交易金额、交易类型标识、终端编号、交易日期和交易时间,具体地,CPU卡将交易金额、交易类型标识、终端编号、交易日期和交易时间顺序链接组成一个记录以便更 新。
步骤127:获得M1的扇区密钥;
在本实施例中,预先约定存储M1电子钱包的余额的扇区号和块号,并根据该预先约定的扇区号来获取M1的扇区密钥,其中获得M1的扇区密钥的方法具体为:调用API接口函数extern WORD GetMifareSectorPassword(BYTE*secPwdBuf,BYTE blockNo)来获得M1的扇区密钥;
步骤128:将M1电子钱包的联机交易序号加1,并更新M1电子钱包的余额,即用步骤125中更新后的CPU电子钱包的余额覆盖M1电子钱包的余额;
在本实施例中,更新M1电子钱包的余额的方法具体为:调用API接口函数extern BYTE SetMifarePurseBalance(BYTE*balanceBuf),并利用获得的扇区密钥设置M1电子钱包的余额,即用步骤125中更新后的CPU电子钱包的余额覆盖M1电子钱包的余额;
步骤129:更新M1电子钱包的交易明细;
具体地,将步骤126中更新的后CPU电子钱包的交易明细追加到M1电子钱包的交易明细中;
交易明细具体为:交易金额、交易类型标识、终端机编号、交易日期和交易时间等。
步骤130:用DTK左右8个字节进行异或运算,再利用异或运算得到的结果计算交易验证码TAC码;
在本实施例步骤130中,利用异或运算得到的结果计算TAC码,具体为:
将交易后的CPU电子钱包的余额或M1电子钱包的余额、加1前的CPU卡的联机交易序号、交易金额、交易类型标识、终端机编号、交易日期和交易时间 顺序链接,再利用异或运算得到的结果对链接得到的数据进行加密,得到的加密后的数据的前四个字节即为TAC码。
步骤131:返回CREDIT FOR LOAD命令的响应报文给终端,交易结束,然后返回到步骤116,其中CREDIT FOR LOAD命令的响应报文包含有TAC码;
步骤132:读取消费初始化命令INITIALIZE FOR PURCHASE中的数据并保存;
在本实施例中,消费初始化命令INITIALIZE FOR PURCHASE用于初始化消费交易;
并且INITIALIZE FOR PURCHASE命令中的数据具体为密钥索引号、交易金额和终端机编号。
步骤133:检查自身是否支持上述INITIALIZE FOR PURCHASE命令中包含的密钥索引号,若不支持,则执行步骤134,若支持,则执行步骤135;
步骤134:返回状态码0x9403给终端,并终止执行消费初始化操作,然后返回到步骤116;
步骤135:读取CPU电子钱包的余额,判断上述INITIALIZE FOR PURCHASE命令中包含的交易金额的大小是否大于CPU电子钱包的余额的大小,若是,则执行步骤136,若否,则执行步骤137;
在本实施例步骤135中,读取CPU电子钱包的余额的方法具体为:
查找应用文件ADF的地址;
应用文件ADF根据查找ADF下的CPU电子钱包文件的地址;
根据查找得到的CPU电子钱包文件的地址和预先设定的CPU电子钱包的余额的偏移量来计算用于存储CPU电子钱包的余额的地址;
根据计算得到的用于存储CPU电子钱包的余额的地址来读取CPU电子钱包 的余额。
步骤136:返回状态码0x9401给终端,并终止执行消费初始化操作,然后返回到步骤116;
步骤137:生成一个伪随机数和一个过程密钥;
在本实施例中,过程密钥用于CPU电子钱包或M1电子钱包的消费交易,过程密钥是用密钥DPK分散得到的。
步骤138:发送INITIALIZE FOR PURCHASE命令的响应报文给终端;
其中,INITIALIZE FOR PURCHASE响应报文由Data+sw1+sw2组成;
只有当INITIALIZE FOR PURCHASE命令执行成功时,则CPU卡返回给终端的INITIALIZE FOR PURCHASE响应报文中的状态码sw1和sw2为‘9000’,且INITIALIZE FOR PURCHASE响应报文数据域Da ta中包含的数据具体为伪随机数和CPU电子钱包的脱机交易序号,若命令执行不成功,则CPU卡返回给终端的INITIALIZE FOR PURCHAS响应报文中只含有状态码sw1和sw2,且状态码sw1和sw2不为‘9000’。
步骤139:接收终端发送的消费命令DEBIT FOR PURCHASE WITHDRAW,读取并保存DEBIT FOR PURCHASE WITHDRAW命令中的数据;
其中,DEBIT FOR PURCHASE WITHDRAW命令中的数据具体为:终端交易序号、终端的交易日期、终端的交易时间和第三鉴别码MAC3。
步骤140:使用步骤137中生成的过程密钥来验证DEBIT FOR PURCHASEWITHDRAW命令中包含的MAC3是否有效,若无效,则执行步骤141,若有效,则执行步骤142;
在本实施例中,验证DEBIT FOR PURCHASE WITHDRAW命令中包含的MAC3是 否有效的方法,具体为:
将交易金额、交易类型标识、终端机编号、终端的交易日期和终端的交易时间顺序链接,用步骤137中生成的过程密钥对链接得到的数据进行加密,再比较得到的加密后的数据的前四个字节与DEBIT FOR PURCHASE WITHDRAW命令中包含的MAC3是否相同,若不相同,则MAC3无效,若相同,则MAC3有效。
步骤141:返回状态码0x9302给终端,终止交易,然后返回到步骤116;
步骤142:将CPU电子钱包的脱机交易序号加1,并从CPU电子钱包的余额中扣减交易金额;
在本实施例步骤142中,从CPU电子钱包的余额中扣减交易金额的方法,具体为:
查找应用文件ADF的地址;
根据应用文件ADF查找ADF下的CPU电子钱包文件的地址;
根据查找得到的CPU电子钱包文件的地址和预先设定的CPU电子钱包的余额的偏移量来计算用于存储CPU电子钱包的余额的地址;
读取上述计算得到的用于存储CPU电子钱包的余额的地址所指向的存储区中的数据,将读取得到的数据减去交易金额,并用相减得到的数据覆盖上述计算得到的用于存储CPU电子钱包的余额的地址所指向的存储区中的数据,将此相减得到的数据作为CPU电子钱包新的余额。
步骤143:更新CPU电子钱包的交易明细;
在本实施例中,需要更新的CPU电子钱包的相关交易明细具体为:交易金额、交易类型标识、终端编号、交易日期和交易时间,具体地,CPU卡将交易金额、交易类型标识、终端编号、交易日期和交易时间顺序链接组成一个记录以 便更新。
步骤144:获得M1的扇区密钥;
在本实施例中,预先约定存储M1电子钱包的余额的扇区号和块号,并根据该预先约定的扇区号来获取M1的扇区密钥,其中获得M1的扇区密钥的方法具体为:调用API接口函数extern WORD GetMifareSectorPassword(BYTE*secPwdBuf,BYTE blockNo)获得M1的扇区密钥。
步骤145:将M1电子钱包的脱机交易序号加1,并更新M1电子钱包的余额,即用步骤142中更新后的CPU电子钱包的余额覆盖M1电子钱包的余额;
在本实施例中,更新M1电子钱包的余额的方法具体为:调用API接口函数extern BYTE SetMifarePurseBalance(BYTE*balanceBuf),并利用步骤314中获得的扇区密钥设置M1电子钱包的余额,即用步骤142中更新后的CPU电子钱包的余额覆盖M1电子钱包的余额;
步骤146:更新M1电子钱包的交易明细;
具体地,将步骤143中更新的CPU电子钱包的交易明细追加到M1电子钱包的交易明细中;
交易明细具体为:交易金额、交易类型标识、终端机编号、交易日期和交易时间等。
步骤147:生成第四报文鉴别码MAC4;
在本实施例中,生成第四报文鉴别码MAC4方法具体为:
用步骤137中生成的过程密钥对交易金额进行加密,得到的加密后的数据的前四个字节即为第四报文鉴别码MAC4。
步骤148:用DTK左右8个字节进行异或运算,并利用异或运算得到的结果 来计算交易验证码TAC码;
在本实施例中,利用异或运算得到的结果来计算TAC码的方法具体为:
将交易金额、交易类型标识、终端机编号、终端交易序号、终端的交易日期和终端的交易时间顺序链接,并用异或运算得到的结果对链接得到的数据进行加密,得到的加密后的数据的前四个字节即为TAC码。
步骤149:返回DEBIT FOR PURCHASE WITHDRAW命令的响应报文给终端,交易结束,然后返回到步骤116。
其中,INITIALIZE FOR PURCHASE响应报文中包含的数据有MAC2和TAC码。
本实施例提供了一种在CPU终端对CPU卡内的CPU电子钱包和M1电子钱包进行操作的方法,该方法中对CPU电子钱包和M1电子钱包进行同步,这样就保证了CPU电子钱包和M1电子钱包的余额的一致,就解决了用户使用该CPU卡在M1终端非法圈存和/或非法消费时而造成的CPU电子钱包和M1电子钱包的余额的大小不一致的问题;并且在该方法中当接收到圈存命令时,则CPU卡在CPU终端对CPU卡内的CPU电子钱包和M1电子钱包进行圈存,这样就提高了圈存的安全性;并且在该方法中当接收到消费命令时,则在CPU终端使用CPU卡内的CPU电子钱包和M1电子钱包进行消费,即从CPU电子钱包的余额中扣减相应的交易金额的同时也从M1电子钱包的余额中也扣减相应的交易金额。
以上仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (19)
1.一种对双电子钱包进行操作的方法,其特征在于,所述方法包括:
CPU卡进入终端的非接触式感应区内,所述CPU卡上电并初始化;
获取第一电子钱包的余额;
所述第一电子钱包为基于逻辑加密芯片标准的金融应用,并预先约定存储区在CPU卡的逻辑加密卡区域中的扇区号和块号,其中,所述存储区用于存储所述第一电子钱包的余额;
所述获取所述第一电子钱包的余额的方法,具体为:
根据所述存储第一电子钱包的余额的存储区在CPU卡的逻辑加密卡区域中的扇区号,调用函数获取所述第一电子钱包的扇区密钥;
根据所述获取的扇区密钥和存储所述第一电子钱包的余额的存储区在CPU卡的逻辑加密卡区域中的块号,调用函数获取所述第一电子钱包的余额;
获取第二电子钱包的余额;
所述第二电子钱包为使用ISO 14443接口协议实现的符合银行标准的电子钱包;
所述获取第二电子钱包的余额的方法,具体为:
查找应用文件的地址;
根据所述应用文件查找所述应用文件下的第二电子钱包文件的地址;
根据所述查找得到的第二电子钱包文件的地址和预先设定的第二电子钱包的余额的偏移量来计算用于存储所述第二电子钱包的余额的地址;
根据所述计算得到的用于存储所述第二电子钱包的余额的地址来读取所述第二电子钱包的余额;
或者,
预先约定所述CPU卡内的存储空间中存储所述第二电子钱包的余额的地址,从所述预先约定的存储空间中读取用于存储所述第二电子钱包的余额的地址;
根据所述读取得到的地址来读取所述第二电子钱包的余额;
比较所述第一电子钱包和所述第二电子钱包的余额的大小;
若所述第一电子钱包的余额小于所述第二电子钱包的余额,则将所述第二电子钱包的余额设置为与所述第一电子钱包的余额一致,并进行寻卡操作;
所述将第二电子钱包的余额设置为与所述第一电子钱包的余额一致的方法,具体为:
查找应用文件的地址;
根据所述应用文件查找所述应用文件下的第二电子钱包文件的地址;
根据所述查找得到的第二电子钱包文件的地址和预先设定的第二电子钱包的余额的偏移量计算用于存储所述第二电子钱包的余额的地址;
将所述计算得到的用于存储所述第二电子钱包的余额的地址所指向的存储区中的数据清空,并将所述第一电子钱包的余额写入所述计算得到的用于存储所述第二电子钱包的余额的地址所指向的存储区中,作为所述第二电子钱包的新的余额;
或者,
从预先约定的存储空间中读取用于存储所述第二电子钱包的余额的地址;
将所述用于存储第二电子钱包的余额的地址所指向的存储区中的数据清空,并将第一电子钱包的余额写入所述用于存储第二电子钱包的余额的地址所指向的存储区中,作为所述第二电子钱包的新的余额;
若所述第二电子钱包的余额小于所述第一电子钱包的余额,则将所述第一电子钱包的余额设置为与所述第二电子钱包的余额一致,并进行寻卡操作;
所述将第一电子钱包的余额设置为与所述第二电子钱包的余额一致的方法,具体为:
根据存储所述第一电子钱包的余额的存储区在CPU卡的逻辑加密卡区域中的扇区号,调用函数获取所述第一电子钱包的扇区密钥;
根据所述获取的扇区密钥和存储所述第一电子钱包的余额的存储区在CPU卡的逻辑加密卡区域中的块号,调用函数设置所述第一电子钱包的余额;
若所述第一电子钱包的余额与所述第二电子钱包的余额相等,则直接进行寻卡操作;
所述进行寻卡操作具体为:
判断是否接收到寻卡的命令,若否,则继续等待接收寻卡的命令,若是,则接收唤醒命令和请求命令;
返回应答命令,进行防冲撞处理,并接收终端发来的选择命令;
执行选择命令,并发送确认信息给终端;
接收非接触式的数据帧。
2.如权利要求1所述的对双电子钱包进行操作的方法,其特征在于,所述将第二电子钱包的余额设置为与所述第一电子钱包的余额一致后,还包括:
更新所述第二电子钱包的交易明细;
根据所述更新的第二电子钱包的交易明细的条数将所述第二电子钱包的联机交易序号加上相应的值,其中所述相应的值与所述条数相同。
3.如权利要求1所述的对双电子钱包进行操作的方法,其特征在于,所述将第一电子钱包的余额设置为与所述第二电子钱包的余额一致之后,还包括:
更新所述第一电子钱包的交易明细;
根据所述更新的第一电子钱包的交易明细的条数将所述第一电子钱包的联机交易序号加上相应的值,其中所述相应的值与所述条数相同。
4.如权利要求1所述的对双电子钱包进行操作的方法,其特征在于,所述进行寻卡操作之后,还包括:
判断是否有选择应答请求命令,若是,则等待接收应用命令,若否,则执行第一电子钱包应用操作。
5.如权利要求4所述的对双电子钱包进行操作的方法,其特征在于,当接收到的所述应用命令是圈存初始化命令时,所述方法还包括:
执行圈存初始化操作,返回所述圈存初始化命令的响应报文给终端;
接收所述终端发送的圈存命令,对所述第二电子钱包进行圈存,并更新所述第一电子钱包的余额,返回所述圈存命令的响应报文给终端,圈存交易结束。
6.如权利要求5所述的对双电子钱包进行操作的方法,其特征在于,所述执行圈存初始化操作的步骤,具体为:
读取并保存所述圈存初始化命令中的数据,其中所述数据包括密钥索引号和交易金额;
检查自身是否支持所述密钥索引号;
若不支持,则返回错误信息给终端,终止执行圈存初始化操作;
若支持,则生成一个伪随机数和一个过程密钥,并用所述过程密钥计算得到第一报文鉴别码。
7.如权利要求6所述的对双电子钱包进行操作的方法,其特征在于,所述对第二电子钱包进行圈存的步骤,具体为:
读取并保存所述圈存命令中的数据,其中,所述数据包含第二报文鉴别码;
使用所述过程密钥验证所述第二报文鉴别码是否有效;
若无效,则返回所述第二报文鉴别码无效的信息给终端,终止执行圈存操作;
若有效,则将所述交易金额加到所述第二电子钱包的余额上。
8.如权利要求7所述的对双电子钱包进行操作的方法,其特征在于,所述将交易金额加到所述第二电子钱包的余额上的方法,具体为:
查找应用文件的地址;
根据所述应用文件查找在所述应用文件下的第二电子钱包文件的地址;
根据所述查找得到的第二电子钱包文件的地址和预先设定的第二电子钱包的余额的偏移量计算用于存储所述第二电子钱包的余额的地址;
读取所述计算得到的用于存储所述第二电子钱包的余额的地址所指向的存储区中的数据,将所述交易金额与所述读取到的数据相加,用所述相加得到的数据覆盖所述计算得到的用于存储所述第二电子钱包的余额的地址所指向的存储区中的数据,将所述相加得到的数据作为所述第二电子钱包新的余额。
9.如权利要求7所述的对双电子钱包进行操作的方法,其特征在于,所述将交易金额加到所述第二电子钱包的余额上后,还包括:
将所述第二电子钱包的联机交易序号加1;
更新所述第二电子钱包的交易明细。
10.如权利要求5所述的对双电子钱包进行操作的方法,其特征在于,所述更新第一电子钱包的余额,具体为将所述第一电子钱包的余额设置为与所述第二电子钱包的余额相同,包括:
根据所述存储第一电子钱包的余额的存储区在CPU卡的逻辑加密卡区域中的扇区号,调用函数获取所述第一电子钱包的扇区密钥;
根据所述存储第一电子钱包的余额的存储区在CPU卡的逻辑加密卡区域中的块号,以及所述扇区密钥,调用函数设置所述第一电子钱包的余额,即用更新后的第二电子钱包的余额覆盖所述第一电子钱包的余额。
11.如权利要求5所述的对双电子钱包进行操作的方法,其特征在于,所述更新第一电子钱包的余额后,还包括:
将所述第一电子钱包的联机交易序号加1;
更新所述第一电子钱包的交易明细。
12.如权利要求4所述的对双电子钱包进行操作的方法,其特征在于,当接收到的所述应用命令是消费初始化命令时,所述方法还包括:
执行消费初始化操作,返回所述消费初始化命令的响应报文给终端;
接收所述终端发送的消费命令,使用所述第二电子钱包进行消费,并更新所述第一电子钱包的余额,返回所述消费命令的响应报文给终端,消费交易结束。
13.如权利要求12所述的对双电子钱包进行操作的方法,其特征在于,所述执行消费初始化操作的步骤,具体为:
读取并保存所述消费初始化命令中的数据,其中,所述数据包括密钥索引号和交易金额;
检查自身是否支持所述密钥索引号;
若不支持,则返回错误信息给终端,终止执行消费初始化操作;
若支持,则读取所述第二电子钱包的余额,判断所述数据中包含的交易金额是否大于所述第二电子钱包的余额;
若是,则返回错误信息给终端,终止执行消费初始化操作;
若否,则生成一个伪随机数和一个过程密钥。
14.如权利要求13所述的对双电子钱包进行操作的方法,其特征在于,读取所述第二电子钱包的余额的方法,具体为:
查找应用文件的地址;
根据所述应用文件查找在所述应用文件下的第二电子钱包文件的地址;
根据所述查找得到的第二电子钱包文件的地址和预先设定的第二电子钱包的余额的偏移量计算用于存储所述第二电子钱包的余额的地址;
根据所述计算得到的用于存储所述第二电子钱包的余额的地址读取所述第二电子钱包的余额。
15.如权利要求13所述的对双电子钱包进行操作的方法,其特征在于,所述使用第二电子钱包进行消费的步骤,具体为:
读取并保存所述消费命令中的数据,其中,所述数据包含第三报文鉴别码;
使用所述过程密钥验证所述第三报文鉴别码是否有效;
若无效,则返回所述第三报文鉴别码无效的信息给终端,终止执行消费操作;
若有效,则从所述第二电子钱包的余额中扣减所述交易金额。
16.如权利要求15所述的对双电子钱包进行操作的方法,其特征在于,从所述第二电子钱包的余额中扣减所述交易金额的方法,具体为:
查找应用文件的地址;
根据所述应用文件查找在所述应用文件下的第二电子钱包文件的地址;
根据所述查找得到的第二电子钱包文件的地址和预先设定的第二电子钱包的余额的偏移量来计算用于存储所述第二电子钱包的余额的地址;
读取所述计算得到的用于存储所述第二电子钱包的余额的地址所指向的存储区中的数据,将所述读取到的数据减去所述交易金额,用相减得到的数据覆盖所述计算得到的用于存储所述第二电子钱包的余额的地址所指向的存储区中的数据,将所述相减得到的数据作为所述第二电子钱包新的余额。
17.如权利要求15所述的对双电子钱包进行操作的方法,其特征在于,从所述第二电子钱包的余额中扣减所述交易金额之后,所述方法还包括:
将所述第二电子钱包的脱机交易序号加1;
更新所述第二电子钱包的交易明细。
18.如权利要求12所述的对双电子钱包进行操作的方法,其特征在于,所述更新第一电子钱包的余额,具体为将所述第一电子钱包的余额设置为与所述第二电子钱包的余额相同,包括:
根据所述存储第一电子钱包的余额的存储区在CPU卡的逻辑加密卡区域中的扇区号,调用函数获取所述第一电子钱包的扇区密钥;
根据所述存储第一电子钱包的余额的存储区在CPU卡的逻辑加密卡区域中的块号,以及所述扇区密钥,调用函数来设置所述第一电子钱包的余额,即用更新后的第二电子钱包的余额覆盖所述第一电子钱包的余额。
19.如权利要求12所述的对双电子钱包进行操作的方法,其特征在于,所述更新所述第一电子钱包的余额之后,还包括:
将所述第一电子钱包的脱机交易序号加1;
更新所述第一电子钱包的交易明细。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009102378767A CN101799955B (zh) | 2009-11-20 | 2009-11-20 | 一种对双电子钱包进行操作的方法 |
US12/989,764 US9378498B2 (en) | 2009-11-20 | 2010-09-07 | Method for loading double e-wallets |
PCT/CN2010/076701 WO2011060662A1 (zh) | 2009-11-20 | 2010-09-07 | 一种对双电子钱包进行圈存的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009102378767A CN101799955B (zh) | 2009-11-20 | 2009-11-20 | 一种对双电子钱包进行操作的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101799955A CN101799955A (zh) | 2010-08-11 |
CN101799955B true CN101799955B (zh) | 2011-12-28 |
Family
ID=42595625
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009102378767A Active CN101799955B (zh) | 2009-11-20 | 2009-11-20 | 一种对双电子钱包进行操作的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101799955B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9378498B2 (en) * | 2009-11-20 | 2016-06-28 | Feitian Technologies Co., Ltd | Method for loading double e-wallets |
US10878404B2 (en) * | 2010-06-29 | 2020-12-29 | Feitian Technologies Co., Ltd. | Method for operating an e-purse |
CN102467772B (zh) * | 2010-11-11 | 2014-04-09 | 中国移动通信集团公司 | 多存储数据值的变更方法、请求装置及系统 |
CN102609839A (zh) * | 2011-01-25 | 2012-07-25 | 张龙其 | 一种支持非接触智能卡的支付系统及其方法 |
CN103824380B (zh) * | 2014-02-28 | 2017-01-04 | 广东岭南通股份有限公司 | 一种对cpu卡中的m1卡进行关闭的方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1213810A (zh) * | 1997-10-01 | 1999-04-14 | 富士通株式会社 | 电子钱包系统、应用于该系统的ic卡及交易设备和系统 |
CN1835007A (zh) * | 2006-04-07 | 2006-09-20 | 浙江通普通信技术有限公司 | 基于移动通信网络的移动支付方法 |
CN101373512A (zh) * | 2007-08-23 | 2009-02-25 | 索尼株式会社 | 电子钱包装置和电子值使用方法 |
CN101425859A (zh) * | 2008-12-08 | 2009-05-06 | 中兴通讯股份有限公司 | 一种移动多媒体广播终端及其圈存方法 |
-
2009
- 2009-11-20 CN CN2009102378767A patent/CN101799955B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1213810A (zh) * | 1997-10-01 | 1999-04-14 | 富士通株式会社 | 电子钱包系统、应用于该系统的ic卡及交易设备和系统 |
CN1835007A (zh) * | 2006-04-07 | 2006-09-20 | 浙江通普通信技术有限公司 | 基于移动通信网络的移动支付方法 |
CN101373512A (zh) * | 2007-08-23 | 2009-02-25 | 索尼株式会社 | 电子钱包装置和电子值使用方法 |
CN101425859A (zh) * | 2008-12-08 | 2009-05-06 | 中兴通讯股份有限公司 | 一种移动多媒体广播终端及其圈存方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101799955A (zh) | 2010-08-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101799954B (zh) | 一种对双电子钱包进行圈存的方法 | |
CN100438409C (zh) | 具有金融交易报文处理能力的智能卡及其工作方法 | |
US8583493B2 (en) | Payment terminal using a mobile communication device, such as a mobile phone; a method of direct debit payment transaction | |
AU2011338230B2 (en) | Tokenized contactless payments for mobile devices | |
CN100565597C (zh) | 一种自助充值的系统和方法 | |
RU2635233C2 (ru) | Механизм, позволяющий использовать одноразовые карты в системе, предназначенной для приема карт согласно стандартам международной индустрии платежей | |
CN102044114A (zh) | 一种对电子钱包进行消费的方法 | |
CN101458853A (zh) | 一种在线pos系统和智能卡在线支付方法 | |
CN101840550A (zh) | 实现账单现场生成和支付的方法 | |
US9378498B2 (en) | Method for loading double e-wallets | |
CN101799955B (zh) | 一种对双电子钱包进行操作的方法 | |
US10878404B2 (en) | Method for operating an e-purse | |
CN101105776A (zh) | 一种内嵌cpu ic的标准扩展卡及实现电子支付的方法 | |
CN103164795A (zh) | 电子交易及物流系统 | |
CN110619525B (zh) | 一种基于区块链的储值卡系统 | |
JP2004534338A (ja) | 電子財布用電子現金システム | |
CN102013132B (zh) | 一种对电子钱包进行复合圈存的方法 | |
CN103235995A (zh) | 一种基于nfc手机的电子防伪和物流管理系统 | |
CN103778713A (zh) | 金融ic卡系统 | |
TW200917140A (en) | A wireless communication transaction system and method using a wireless card reader | |
CN2929835Y (zh) | 具有金融交易报文处理能力的智能卡 | |
US20030222152A1 (en) | Pre-paid debit & credit card | |
CN106971127A (zh) | 一种银行卡以及银行卡识别方法和系统 | |
US8694437B2 (en) | Smartcard-based value transfer | |
CN103593888A (zh) | 一种智能ic卡、终端及智能卡灰锁应用方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |