博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于PBOC的电子钱包的圈存过程
阅读量:4110 次
发布时间:2019-05-25

本文共 1703 字,大约阅读时间需要 5 分钟。

基于PBOC的电子钱包的圈存过程,供智能卡行业的开发人员参考

  一. 圈存

  首先终端和卡片有一个共同的密钥叫做圈存密钥:LoadKey

  假设LoadKey = 11223344556677888877665544332211

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

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

  Apdu: 80 50 00 01 0B 01 00001000 001122334455

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

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

  00000000 0000 02 00 11223344 2988AE5A

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

  MAC1的计算过程如下:

  1.计算过程密钥:SessionKey

  InputData = 11223344 0000 8000 (8bytes)

  随机数 交易序号 填充数据

  LoadKey = 11223344556677888877665544332211

  SessionKey = 3DES_Enypt(InputData, LoadKey) = 9B1D924E05595603

  用LoadKey对InputData 做3DES加密

  2.计算MAC1

  InputData1 = 00000000 00001000 01 001122334455

  卡片余额 交易金额 交易类型 终端机编号

  SessionKey = 9B1D924E05595603

  MAC1 = MAC(InputData1 SessionKey ) = 2988AE5A

  用SessionKey对InputData1做MAC运算

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

  第三步:终端计算MAC2

  InputData2=00001000 01 001122334455 20111221 214822

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

  SessionKey = 9B1D924E05595603

  MAC2 = MAC(InputData2 SessionKey ) = 3A845BF0

  用SessionKey对InputData2做MAC运算

  第四步:终端向卡片发送圈存命令:

  Apdu: 80 52 00 00 0B 20111221 214822 3A845BF0

  CLA INS P1 P2 LC 交易日期 交易时间 MAC2

  第五步:卡片收到圈存命令后,用和终端一样的方式计算MAC2,并对终端发来圈存命令中的MAC2进行验证,如果MAC2验证没有通过,卡片会返回SW=9302(MAC错误),如果MAC2验证通过,则卡片余额加上交易金额作为卡片新的余额进行余额更新,交易记数器加1,并计算TAC返回给终端,TAC的计算过程如下:

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

  假设TACKey = 00112233445566778899AABBCCDDEEFF

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

  TACKey左右8个字节做异或运算

  InputData3=00001000 0000 00001000 01 001122334455 20111221 214822

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

  TAC = MAC(InputData3, TACSessionKey) = 6314E5F5

  TAC作为圈存命令的返回数据返回给终端,圈存交易到此就结束了,TAC作为清算的时候验证交易数据真伪和完整性的重要依据,连同交易记录一同保存在终端。

转载地址:http://ezlsi.baihongyu.com/

你可能感兴趣的文章
深入理解HashMap
查看>>
XML生成(一):DOM生成XML
查看>>
XML生成(三):JDOM生成
查看>>
Ubuntu Could not open lock file /var/lib/dpkg/lock - open (13:Permission denied)
查看>>
collect2: ld returned 1 exit status
查看>>
C#入门
查看>>
查找最大值最小值
查看>>
杨辉三角
查看>>
C#中ColorDialog需点两次确定才会退出的问题
查看>>
16、Memento 备忘录模式
查看>>
Java基础篇(一)
查看>>
数据库
查看>>
nginx反代 499 502 bad gateway 和timeout
查看>>
linux虚拟机安装tar.gz版jdk步骤详解
查看>>
python猜拳游戏
查看>>
python实现100以内自然数之和,偶数之和
查看>>
python数字逆序输出及多个print输出在同一行
查看>>
ESP8266 WIFI数传 Pixhaw折腾笔记
查看>>
苏宁产品经理面经
查看>>
百度产品经理群面
查看>>