基于PBOC的电子钱包消费交易过程
首先終端和卡片有一個(gè)共同的密鑰叫做消費(fèi)密鑰:PurchKey
假設(shè)PurchKey = 11223344556677888877665544332211 在滿足安全條件的情況下:
第一步:終端向卡片發(fā)送消費(fèi)初始化命令:
Apdu: 80?? ?50 ???01???02???0B?? ?01???? ?00001000 ?????001122334455
??? CLA ??INS ????P1? ?P2 ???LC??KeyIndex ??交易金額 ?????終端機(jī)編號(hào)
P1:密鑰用途、P2:密鑰版本、 Lc:密鑰文件信息長(zhǎng)度、KeyIndex:密鑰文件標(biāo)識(shí)符
卡片返回15個(gè)字節(jié)的數(shù)據(jù)如下(不包括9000):
00000000?????????????????? 0000?????????????????? 000000???? ?????? 01???? ??????????????? 00????????????? 11223344
卡片余額???????? ? 交易序號(hào)???? ?? 透支限額 ?密鑰版本號(hào)?算法標(biāo)識(shí)???? ??隨機(jī)數(shù)
MAC1的計(jì)算過(guò)程如下(終端):
1.計(jì)算過(guò)程密鑰:SessionKey
InputData = 11223344??? ?0000 ???????????????0001 ?(8bytes)
??????????? 隨機(jī)數(shù) ???卡片脫機(jī)交易序號(hào) ????終端交易序號(hào)后四位
PurchKey = 11223344556677888877665544332211(消費(fèi)密鑰)
SessionKey?= 3DESEnypt(InputData, PurchKey) =003238ABC57659DD(計(jì)算過(guò)程密鑰)
用LoadKey輸入鍵對(duì)InputData輸入數(shù)據(jù) 做3DES加密
2.計(jì)算MAC1
InputData1 = 00001000???? ?06 ????????001122334455 ?????20120229135100
????????? 交易金額 ????交易類(lèi)型 ?????終端機(jī)編號(hào) ????????日期時(shí)間
SessionKey?= 003238ABC57659DD
MAC1 = MAC(InputData1SessionKey?) = F15CAB75
用SessionKey對(duì)InputData1做MAC運(yùn)算
第二步:終端向卡片發(fā)送消費(fèi)命令:
Apdu: 80 ??54 ??01? ?00?? ?0F???? 00000001????20111221214822 ????? ?3A845BF0
???? CLA ?INS? ?P1 ??P2?? ?LC ??終端交易序號(hào) ???交易日期時(shí)間 ?????? ??MAC1
卡片用同樣的方法計(jì)算MAC1并驗(yàn)證終端發(fā)來(lái)的MAC1是否正確來(lái)確認(rèn)終端是否合法。如果MAC1驗(yàn)證沒(méi)通過(guò),卡片會(huì)返回MAC錯(cuò)誤終止交易。如果MAC1驗(yàn)證通過(guò),進(jìn)行第三步。
第三步:卡片修改余額,脫機(jī)交易序號(hào)加1并計(jì)算MAC2 和TAC,并返回給終端
3.計(jì)算MAC2
InputData2= 00001000 交易金額
SessionKey?= 003238ABC57659DD
MAC2 = MAC(InputData2 SessionKey?) = 56988A13
用SessionKey對(duì)InputData2做MAC運(yùn)算,
4.計(jì)算TAC
卡片和終端還有一個(gè)共同的密鑰TAC密鑰:TACKey
假設(shè)TACKey = 00112233445566778899AABBCCDDEEFF
TACSessionKey=XOR( Left(8),Right(8)) =8888888888888888
TACKey左右8個(gè)字節(jié)做異或運(yùn)算
InputData3=00001000??? ? 01???????? ?001122334455 ??????????? 00000001???????? 20111221?????? 214822
???????? 交易金額 ??交易類(lèi)型 ???終端機(jī)編號(hào)?????? ?終端交易序號(hào)? ?交易日期 ?交易時(shí)間
TAC = MAC(InputData3, TACSessionKey) = 3FF7A28A
MAC2和TAC作為消費(fèi)命令的返回?cái)?shù)據(jù)返回給終端,消費(fèi)交易到此就結(jié)束了,TAC作為清算的時(shí)候驗(yàn)證交易數(shù)據(jù)真?zhèn)魏屯暾缘闹匾罁?jù),連同交易記錄一同保存在終端。
?
TAC的計(jì)算方法:
初始向量: 00 00 00 00 00 00 00 00
待處理數(shù)據(jù):4字節(jié)交易金額 +1字節(jié)交易類(lèi)型標(biāo)識(shí)+6字節(jié)終端機(jī)編號(hào)+4字節(jié)終端交易序號(hào)+4字節(jié)終端交易日期+3字節(jié)終端交易時(shí)間
密鑰:TAC密鑰左8字節(jié)與右8字節(jié)異或得到的8字節(jié)數(shù)據(jù)
算法:DES_MAC 算法
?
說(shuō)明:以下計(jì)算TAC的流程適用于:
?1.如果PSAM卡中TAC秘鑰類(lèi)型是口令重裝密鑰類(lèi)型,則此PSAM卡中的TAC密鑰對(duì)CPU卡中的分散因子分散之后=CPU卡中的TAC密鑰,因?yàn)?/span>?口令重裝密鑰在被使用時(shí)COS會(huì)自動(dòng)左右8字節(jié)進(jìn)行異或。
?2.如果PSAM卡中的TAC密鑰類(lèi)型是加密MAC密鑰,或者是MAC密鑰類(lèi)型,則此PSAM卡TAC密鑰對(duì)CPU卡中的分散因子分散之后=CPU卡中的TAC密鑰左右8字節(jié)異或的值
總結(jié)
以上是生活随笔為你收集整理的基于PBOC的电子钱包消费交易过程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: c++string字符串查找和替换
- 下一篇: C语言实现字符串的查找和替换