在之前的開卡實驗的基礎上繼續開卡:
https://blog.csdn.net/wowocpp/article/details/80018122
SmartCard Reader Cnt dw =1,
i=0,Gemplus USB Smart Card Reader 0
Gemplus USB Smart Card Reader 0
連接配接讀卡器: Gemplus USB Smart Card Reader 0
通訊協定: T0
1,外部認證
Send Data : 00 84 00 00 04
Recv Data : 73 66 BE 39 90 00
Send Data : 00 82 00 00 08 9C A5 30 B8 D3 81 CB F0
Recv Data : 90 00
2,選擇MF
Send Data : 00 A4 00 00 00
Recv Data : 61 17
Send Data : 00 C0 00 00 17
Recv Data : 6F 15 84 0E 31 50 41 59 2E 53 59 53 2E 44 44 46 30 31 A5 03 88 01 01 90 00
3,建立3F01目錄失敗
Send Data : 80 E0 3F 01 11 38 03 6F F0 F0 95 FF FF A0 00 00 00 03 86 98 07 01
Recv Data : 69 82
4,再次外部認證
Send Data : 00 84 00 00 04
Recv Data : F3 6F 75 46 90 00
Send Data : 00 82 00 00 08 8F 82 A0 24 59 65 55 53
Recv Data : 90 00
5,建立3F01目錄成功
Send Data : 80 E0 3F 01 11 38 03 6F F0 F0 95 FF FF A0 00 00 00 03 86 98 07 01
Recv Data : 90 00
6,選擇3F01目錄
Send Data : 00 A4 00 00 02 3F 01
Recv Data : 61 0D
Send Data : 00 C0 00 00 0D
Recv Data : 6F 0B 84 09 A0 00 00 00 03 86 98 07 01 90 00
7,建立密鑰檔案,位于3F01目錄下面
Send Data : 80 E0 00 00 07 3F 01 8F 95 F0 FF FF
Recv Data : 90 00
8,裝載密鑰 到密鑰檔案
Send Data : 80 D4 01 00 15 34 F0 02 00 01 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34
Recv Data : 90 00
Send Data : 80 D4 01 00 15 36 F0 02 FF 33 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36
Recv Data : 90 00
Send Data : 80 D4 01 00 15 37 F0 02 FF 33 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
Recv Data : 90 00
Send Data : 80 D4 01 00 15 38 F0 02 FF 33 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
Recv Data : 90 00
Send Data : 80 D4 01 00 15 39 F0 02 44 33 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39
Recv Data : 90 00
Send Data : 80 D4 01 01 15 3E F0 02 00 01 3E 01 3E 01 3E 01 3E 01 3E 01 3E 01 3E 01 3E 01
Recv Data : 90 00
Send Data : 80 D4 01 02 15 3E F0 02 00 01 3E 02 3E 02 3E 02 3E 02 3E 02 3E 02 3E 02 3E 02
Recv Data : 90 00
Send Data : 80 D4 01 01 15 3F F0 02 00 01 3F 01 3F 01 3F 01 3F 01 3F 01 3F 01 3F 01 3F 01
Recv Data : 90 00
Send Data : 80 D4 01 02 15 3F F0 02 00 01 3F 02 3F 02 3F 02 3F 02 3F 02 3F 02 3F 02 3F 02
Recv Data : 90 00
Send Data : 80 D4 01 01 15 3D F0 02 01 00 3D 01 3D 01 3D 01 3D 01 3D 01 3D 01 3D 01 3D 01
Recv Data : 90 00
Send Data : 80 D4 01 02 15 3D F0 02 01 00 3D 02 3D 02 3D 02 3D 02 3D 02 3D 02 3D 02 3D 02
Recv Data : 90 00
Send Data : 80 D4 01 01 15 3C F0 02 01 00 3C 01 3C 01 3C 01 3C 01 3C 01 3C 01 3C 01 3C 01
Recv Data : 90 00
Send Data : 80 D4 01 02 15 3C F0 02 01 00 3C 02 3C 02 3C 02 3C 02 3C 02 3C 02 3C 02 3C 02
Recv Data : 90 00
Send Data : 80 D4 01 00 0D 3A F0 EF 01 33 12 34 5F FF FF FF FF FF
Recv Data : 90 00
9,建立15号檔案(二進制檔案)建立二進制檔案(線路保護讀寫)
Send Data : 80 E0 00 15 07 A8 00 1E F0 F0 FF FF
Recv Data : 90 00
10 ,建立16号檔案(二進制檔案)
Send Data : 80 E0 00 16 07 A8 00 27 F0 F0 FF FF
Recv Data : 90 00
11 ,建立17号檔案(二進制檔案)
Send Data : 80 E0 00 17 07 28 05 DC F0 F0 FF FF
Recv Data : 6A 84
12 ,建立18号檔案(循環檔案)
Send Data : 80 E0 00 18 07 2E 0A 17 F0 EF FF FF
Recv Data : 90 00
13 ,建立錢封包件(電子存折)
Send Data : 80 E0 00 01 07 2F 02 08 F1 00 FF 18
Recv Data : 90 00
14 ,建立錢封包件(電子錢包)
Send Data : 80 E0 00 02 07 2F 02 08 F0 00 FF 18
Recv Data : 90 00
驗證PIN碼:
Send Data : 00 84 00 00 04
Recv Data : 56 14 5E 12 90 00
Send Data : 00 82 00 00 08 8E 69 F2 24 E5 4B A7 B4
Recv Data : 90 00
Send Data : 00 A4 00 00 02 3F 01
Recv Data : 61 34
Send Data : 00 C0 00 00 34
Recv Data : 6F 32 84 09 A0 00 00 00 03 86 98 07 01 A5 25 9F 08 01 02 9F 0C 1E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 00
Send Data : 00 20 00 00 03 12 34 5F
Recv Data : 90 00
80 50 00 02 0B 01 00 00 12 34 00 00 00 00 00 01 10
初始化圈存
重新插拔卡片:
Gemplus USB Smart Card Reader 0
連接配接讀卡器: Gemplus USB Smart Card Reader 0
通訊協定: T0
外部認證
Send Data : 00 84 00 00 04
Recv Data : 0A F3 B2 B5 90 00
Send Data : 00 82 00 00 08 D8 9D DB 8F 53 F5 08 19
Recv Data : 90 00
進入目錄3F01
Send Data : 00 A4 00 00 02 3F 01
Recv Data : 61 34
Send Data : 00 C0 00 00 34
Recv Data : 6F 32 84 09 A0 00 00 00 03 86 98 07 01 A5 25 9F 08 01 02 9F 0C 1E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 00
校驗pin碼
Send Data : 00 20 00 00 03 12 34 5F
Recv Data : 90 00
讀餘額
Send Data : 80 5C 00 01 04
Recv Data : 00 00 00 00 90 00
初始化圈存
Send Data : 80 50 00 02 0B 01 00 00 12 34 00 00 00 00 00 01
Recv Data : 61 10
Send Data : 00 C0 00 00 10
Recv Data : 00 00 00 00 00 00 00 01 2F 73 55 FC 5F C1 AE E4 90 00
圈存:
Send Data : 80 52 00 00 0B 20 18 04 25 15 59 22 25 41 D8 44
Recv Data : 61 04
Send Data : 00 C0 00 00 04
Recv Data : 0E C7 8E 36 90 00
讀餘額
Send Data : 80 5C 00 02 04
Recv Data : 00 00 12 34 90 00
說明圈存成功了
80 50 00 02 0B 01 00 00 12 34 00 00 00 00 00 01
CLA | INS | P1 | P2 | LC | 密鑰辨別符 | 交易金額 | 終端機編号 |
---|---|---|---|---|---|---|---|
80 | 50 | 00 | 02 | 0B | 01 | 00 00 12 34 | 00 00 00 00 00 01 |
密鑰辨別01 交易金額 00001234 終端機編号 000000000001
傳回16個位元組:
00 00 00 00 | 00 00 | 00 | 01 | 2F 73 55 FC | 5F C1 AE E4 |
---|---|---|---|---|---|
卡片餘額 | 交易序号 | 密鑰版本号 | 算法辨別 | 随機數 | MAC1 |
21, 圈存密鑰 圈存密鑰01
80 D4 01 01 15 3F F0 02 00 01 3F 01 3F 01 3F 01 3F 01 3F 01 3F 01 3F 01 3F 01
内部密鑰的裝載:
80 D4 01 00 15 34 F0 02 00 01 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34
裝載不同的消費密鑰根據密鑰版本号來區分,CPU卡中消費密鑰密鑰版本要和PSAM卡中密鑰版本相同
還有算法辨別
00-3DES
01-DES
02-255保留
注意:消費密鑰的密鑰版本是在消費過程中辨別密鑰版本,其他的密鑰的密鑰版本作為密鑰辨別使用
校驗一下 MAC1:
2F 73 55 FC | 0000 | 8000 (8bytes) |
---|---|---|
随機數 | 交易序号 | 填充資料 |
inputdata: 2F7355FC00008000
LoadKey = 3F013F013F013F013F013F013F013F01
SessionKey = 3DES_Enypt(InputData, LoadKey) = D1C6AEAD4E49990F
用LoadKey對InputData 做3DES加密得到D1C6AEAD4E49990F
密鑰: 3F013F013F013F013F013F013F013F01
資料: 2F7355FC00008000
加密: D1C6AEAD4E49990F
2.計算MAC1(4位元組)
00000000 | 00 00 12 34 | 02 | 00 00 00 00 00 01 |
---|---|---|---|
卡片餘額 | 交易金額 | 交易類型 | 終端機編号 |
密鑰 : D1C6AEAD4E49990F
初始向量: 0000000000000000
InputData1 : 000000000000123402000000000001
計算MAC1值:
5FC1AEE43854A977
驗證正确:
計算MAC2
00 00 12 34 | 02 | 00 00 00 00 00 01 | 20180425 | 155922 |
---|---|---|---|---|
交易金額 | 交易類型 | 終端機編号 | 交易日期 | 交易時間 |
InputData2=000012340200000000000120180425155922
密鑰: D1C6AEAD4E49990F
初始向量: 0000000000000000
資料 : 000012340200000000000120180425155922
計算MAC: 2541D84488CC8BB0
取前4個位元組:
MAC2 = 2541D844
發送圈存指令:
Apdu:
CLA | INS | P1 | P2 | LC | 交易日期 | 交易時間 | MAC2 |
---|---|---|---|---|---|---|---|
80 | 52 | 00 | 00 | 0B | 20180425 | 155922 | 2541D844 |
80 52 00 00 0B 20180425 155922 2541D844
發送之後得到回應:
Send Data : 80 52 00 00 0B 20 18 04 25 15 59 22 25 41 D8 44
Recv Data : 61 04
Send Data : 00 C0 00 00 04
Recv Data : 0E C7 8E 36 90 00
TAC : 0EC78E36 :
進行校驗:
内部密鑰為:34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34
TacKey.Left(8) = 3434343434343434
TacKey.Right(8) = 3434343434343434
XOR 結果 = 0000000000000000
00 00 12 34 | 0000 | 00 00 12 34 | 02 | 00 00 00 00 00 01 | 20180425 | 155922 |
---|---|---|---|---|---|---|
新餘額 | 交易序号舊 | 交易金額 | 交易類型 | 終端機編号 | 交易日期 | 交易時間 |
InputData3=000012340000000012340200000000000120180425155922
密鑰: 0000000000000000
初始向量: 0000000000000000
資料: 000012340000000012340200000000000120180425155922
計算MAC : 0EC78E36AB07F7FF
TAC : 0EC78E36 :