基于PBOC电子钱包的消费过程详解
智能卡金融行业应用电子钱包的消费交易流程,开发人员可参考
首先终端和卡片有一个共同的密钥叫做消费密钥: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电子钱包的消费过程详解的更多相关文章
- 基于PBOC电子钱包的圈存过程详解
基于pboc的电子钱包的圈存过程,供智能卡行业的开发人员参考 一. 圈存 首先终端和卡片有一个共同的密钥叫做圈存密钥:LoadKey (Load即圈存的意思,unLoad,是圈提的意思) 假设Lo ...
- PBOC电子钱包与电子现金及QPBOC
电子钱包:EP 电子现金:EC,在PBOC规范中的13部分定义了<基于借贷记应用的小额支付规范中> QPBOC:在PBOC规范的12部分中定义了<费接触式IC卡支付规范> PB ...
- linux内核剖析(零)linux系统启动过程详解-开机加电后发生了什么
本文参考了如下文章 深入理解linux启动过程 mbr (主引导记录(Master Boot Record)) 电脑从开机加电到操作系统main函数之前执行的过程 详解linux系统的启动过程及系统初 ...
- Hadoop MapReduce执行过程详解(带hadoop例子)
https://my.oschina.net/itblog/blog/275294 摘要: 本文通过一个例子,详细介绍Hadoop 的 MapReduce过程. 分析MapReduce执行过程 Map ...
- Linux启动过程详解(inittab、rc.sysinit、rcX.d、rc.local)
启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬 ...
- Linux启动过程详解
Linux启动过程详解 附上两张图,加深记忆 图1: 图2: 第一张图比较简洁明了,下面对第一张图的步骤进行详解: 加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的 ...
- 理论经典:TCP协议的3次握手与4次挥手过程详解
1.前言 尽管TCP和UDP都使用相同的网络层(IP),TCP却向应用层提供与UDP完全不同的服务.TCP提供一种面向连接的.可靠的字节流服务. 面向连接意味着两个使用TCP的应用(通常是一个客户和一 ...
- Android编译过程详解(一)
Android编译过程详解(一) 注:本文转载自Android编译过程详解(一):http://www.cnblogs.com/mr-raptor/archive/2012/06/07/2540359 ...
- Portlet 通信过程详解
Portlet 通信过程详解 在 Portal 的开发过程中,Theme 与 portlet 之间的通信,以及 portlet 之间的通信是开发人员常常遇到的问题.通常 Portlet 之间需要能够互 ...
随机推荐
- SQL Server 数据库设计
一.数据库设计的必要性 在实际的软件项目中,如果系统中需要存储的数据量比较大,需要设计的表比较多,表与表之间的关系比较复杂,那我们就需要进行规范的数据库设置.如果不经过数据库的设计,我们构建的数据库不 ...
- Android代码写View
1.Java Code package com.fish.helloworld; import android.app.Activity; import android.content.Context ...
- Linux下查看文件属性
1.ls ls -a 查看所有文件,就是包含隐藏文件 ls -l 查看详细的属性,包括文件类型(d表示目录,-表示普通文件,l表示链接文件),文件的权限(所有者权限,所属组权限,其他人权限),所有者, ...
- Thinking about think-time functions
You will find yourself very familier to this topic. Ok, let me ask you one question: Let me know th ...
- sql批量修改插入数据
1.批量修改 select 'update 读者库 set 单位代码='''+新单位代码+''' where 单位代码='''+单位代码+'''' from 读者单位 ,)<'L' and is ...
- 前端培训教程 jquery半透明设置
function setOpacity(eles){ $(eles).each(function(){ if($.browser.msie){ $(this).clone().empty().inse ...
- 【php学习之路】字符串操作
无论学习那种语言,字符串操作都是必备的基础.学php的时候总是会不知不觉的与C#比较,用起来总觉得怪怪的没有那么顺手,有些命名也差别很大,再加上很多函数命名是简写形式不百度下还真不知道什 ...
- Windows7不能打开telnet功能
在dos窗口中输入telnet命令提示如下: 解决方法是打开控制面板中的程序和功能,选择打开或关闭Window是功能,如下: 勾选上面的Telnet客户端,然后确定,出现下图.稍等片刻重新打开命令行, ...
- C#高级功能(四)扩展方法和索引
扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用.扩展方法被定义为静态方法,但 ...
- 配置《算法 第四版》的Eclipse开发环境
1. 安装JAVA JAVA网址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 配置环境变量(我把JAVA安装在 ...