码迷,mamicode.com
首页 > 其他好文 > 详细

基于PBOC电子钱包的消费过程详解

时间:2015-02-08 20:39:01      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:

智能卡金融行业应用电子钱包的消费交易流程,开发人员可参考

首先终端和卡片有一个共同的密钥叫做消费密钥:PurchKey (针对每种特定的交易,比如,圈存,消费,都有特定的密钥与之对应

假设PurchKey = 11223344556677888877665544332211   (应用密钥一般都是16字节,写在ADF下的Key文件中

在满足安全条件的情况下:

第一步:终端向卡片发送消费初始化命令:

Apdu:     80    50    01    02   0B         01        00001000    001122334455

             CLA   INS   P1    P2    LC   KeyIndex    交易金额       终端机编号 

 

卡片返回15个字节的数据如下(不包括9000):

00000000        0000        000000            01                00       11223344  

卡片余额          交易序号     透支限额          密钥版本号       算法标识    随机数               

 

MAC1的计算过程如下(终端):

1.计算过程密钥:SessionKey  (通信过程都是在建立的会话中进行的,因此为了保证通道的安全性,首先要确定会话密钥,而会话密钥又叫过程密钥是与当次通信的通行环境,对象有关的

InputData =  11223344          0000                      0001  (8bytes)

                      随机数        卡片脱机交易序号         终端交易序号后四位

PurchKey = 11223344556677888877665544332211  (消费密钥)

 

 SessionKey = 3DESEnypt(InputData, PurchKey) = 003238ABC57659DD

                      用PurchKey对InputData 做3DES加密

过程密钥的产生是由消费密钥和当次消费交易的数据(随机数+卡片脱机交易序号+终端交易序号的后4位)通过3DES加密计算得来的

 

2.计算MAC1   (4字节的校验数据

InputData1 = 00001000   06    001122334455  20120229135100

                    交易金额    交易类型      终端机编号      日期时间 

     

SessionKey = 003238ABC57659DD   (本次会话中过程密钥不变

 

 MAC1 = MAC(InputData1  SessionKey )  =  F15CAB75

              用SessionKey对InputData1做MAC运算得到校验数据MAC1

 

第二步:终端向卡片发送消费命令:

 Apdu:  80  54  01  00  0F  00000001  20111221214822  3A845BF0

    CLA   INS   P1    P2   LC  终端交易序号    交易日期时间         MAC1

 

卡片用同样的方法计算MAC1并验证终端发来的MAC1是否正确,从而确认终端是否合法。如果MAC1验证没有通过,卡片会返回MAC错误终止交易。如果MAC1验证通过,进行第三步。

 

第三步:卡片修改余额,脱机交易序号加1并计算MAC2 和TAC,并返回给终端

计算MAC2

InputData2=  00001000                       

交易金额 

     

SessionKey = 003238ABC57659DD

 MAC2 = MAC(InputData2  SessionKey )  =  56988A13

               用SessionKey对InputData2做MAC运算得到校验数据MAC2   

计算TAC

卡片和终端还有一个共同的密钥TAC密钥:TACKey

假设TACKey = 00112233445566778899AABBCCDDEEFF

TACSessionKey=XOR( TacKey.Left(8),TacKey.Right(8)) =8888888888888888

                     TACKey的左右8个字节做异或运算得到Tac的过程密钥。

 

InputData3=00001000    01   001122334455    00000001      20111221    214822                       

                    交易金额  交易类型  终端机编号       终端交易序号      交易日期     交易时间

TAC = MAC(InputData3, TACSessionKey) = 3FF7A28A

 

MAC2和TAC作为消费命令的返回数据返回给终端,消费交易到此就结束了,

TAC作为清算的时候验证交易数据真伪和完整性的重要依据,连同交易记录一同保存在终端。

基于PBOC电子钱包的消费过程详解

标签:

原文地址:http://www.cnblogs.com/ttss/p/4280430.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!