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

首先终端和卡片有一个共同的密钥叫做消费密钥: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电子钱包的消费过程详解的更多相关文章

  1. 基于PBOC电子钱包的圈存过程详解

    基于pboc的电子钱包的圈存过程,供智能卡行业的开发人员参考 一. 圈存 首先终端和卡片有一个共同的密钥叫做圈存密钥:LoadKey   (Load即圈存的意思,unLoad,是圈提的意思) 假设Lo ...

  2. PBOC电子钱包与电子现金及QPBOC

    电子钱包:EP 电子现金:EC,在PBOC规范中的13部分定义了<基于借贷记应用的小额支付规范中> QPBOC:在PBOC规范的12部分中定义了<费接触式IC卡支付规范> PB ...

  3. linux内核剖析(零)linux系统启动过程详解-开机加电后发生了什么

    本文参考了如下文章 深入理解linux启动过程 mbr (主引导记录(Master Boot Record)) 电脑从开机加电到操作系统main函数之前执行的过程 详解linux系统的启动过程及系统初 ...

  4. Hadoop MapReduce执行过程详解(带hadoop例子)

    https://my.oschina.net/itblog/blog/275294 摘要: 本文通过一个例子,详细介绍Hadoop 的 MapReduce过程. 分析MapReduce执行过程 Map ...

  5. Linux启动过程详解(inittab、rc.sysinit、rcX.d、rc.local)

    启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬 ...

  6. Linux启动过程详解

    Linux启动过程详解 附上两张图,加深记忆 图1: 图2: 第一张图比较简洁明了,下面对第一张图的步骤进行详解: 加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的 ...

  7. 理论经典:TCP协议的3次握手与4次挥手过程详解

    1.前言 尽管TCP和UDP都使用相同的网络层(IP),TCP却向应用层提供与UDP完全不同的服务.TCP提供一种面向连接的.可靠的字节流服务. 面向连接意味着两个使用TCP的应用(通常是一个客户和一 ...

  8. Android编译过程详解(一)

    Android编译过程详解(一) 注:本文转载自Android编译过程详解(一):http://www.cnblogs.com/mr-raptor/archive/2012/06/07/2540359 ...

  9. Portlet 通信过程详解

    Portlet 通信过程详解 在 Portal 的开发过程中,Theme 与 portlet 之间的通信,以及 portlet 之间的通信是开发人员常常遇到的问题.通常 Portlet 之间需要能够互 ...

随机推荐

  1. poj1005 I Think I Need a Houseboat

    这题目只要读懂了意思就好做了,先求出来(0.0)到(x.y)的距离为r,然后求出来以r为半径的半圆的面积,然后再用这个面积除以50,再向上取整就可以啦. #include <stdio.h> ...

  2. easyui+ashx 动态初始化datagrid(动态列头)

    效果图: 1:简单初始化 JSON格式数据如下(后台自己构建,后台代码略): {"total":6,"columns":[{"field": ...

  3. 十五、struts2中的拦截器(框架功能核心)

    十五.struts2中的拦截器(框架功能核心) 1.过滤器VS拦截器 功能是一回事. 过滤器是Servlet规范中的技术,可以对请求和响应进行过滤. 拦截器是Struts2框架中的技术,实现AOP(面 ...

  4. MFC创建对话框组件对应变量并进行设置值(VS2010)

    m_path = strFolderPath; UpdateData(FALSE);

  5. 转:OpenCms 9.0.1汉化

    LHD私人汉化. 1.完成安装OpenCms 2.如果正确安装,在浏览器输入以下地址即可打开登录页面(默认账号/密码:Admin/admin) http://localhost:8080/opencm ...

  6. Kettle 合并记录报错!

    在Kettle的合并记录过程的时候,在“为了转换解除补丁开始 ”这一步的时候报错.具体错误如图所示: Kettle的转换如图所示: 问题原因:可能是你的数据库链接驱动和Kettle的版本不兼容. 解决 ...

  7. win32 汇编打造 wget 体积3kb

    Demo Code .386 .MODEL flat, stdcall OPTION CASEMAP:NONE Include windows.inc include kernel32.inc inc ...

  8. Redux介绍及基本应用

    一.Redux介绍  Redux的设计思想很简单,就两句话: Web应用是一个状态机,神力与状态是一一对应的 所有的状态,保存在一个对象里面 二.Redux基本概念和API Store Store就是 ...

  9. 第十六章 调试及安全性(In .net4.5) 之 调试程序

    1. 概述 本章内容包括 如何选择合适的构建类型.创建和管理编译指令.管理程序数据文件(pdb)和指令. 2. 主要内容 2.1 构建类型 .net中默认的两种生成模式是 发布(Release)模式 ...

  10. C基础 那些年用过的奇巧淫技

    引言 - 为寻一颗明星 为要寻一颗明星 徐志摩 1924年12月1日<晨报六周年纪念增刊> 我骑著一匹拐腿的瞎马, 向著黑夜里加鞭:—— 向著黑夜里加鞭, 我跨著一匹拐腿的瞎马.// 我冲 ...