1. 程式人生 > 其它 >【轉】CUP卡操作指令集

【轉】CUP卡操作指令集


原文:https://www.zhihu.com/question/274490260/answer/379320811

指令列表如下:

髮卡操作分為以下幾個步驟:

  1. 傳輸認證(外部認證)
  2. 卡片擦除
  3. 目錄檔案及使用者金鑰的建立及寫入
  4. 資料(二進位制資料,記錄資料)的寫入
對於傳輸通道的認證,個人覺得最通俗的理解就是獲取讀寫許可權,允許對裡面的資訊進行增刪改的操作;預設的傳輸金鑰為8個位元組的0xFF,即:FFFFFFFFFFFFFFFF
  • 卡片上電覆位
    個人前端是使用的手機NFC進行卡片操作,因此將卡片貼到手機NFC感應區域即已經上電覆位,建立卡片連線之後即可進行下一步的操作。
  • 獲取隨機數
    傳送指令:0084000008
    (得到8個位元組的隨機數)
    指令回覆:53fd1f262ec4e6e29000(得到隨機數:53fd1f262ec4e6e2)
    指令說明:00(CLA)84(INS)00(P1)00(P2)08(Le)
  • 對隨機數進行DES加密
    加密資料:53fd1f262ec4e6e2
    加密金鑰:FFFFFFFFFFFFFFFF(外部認證金鑰)
    處理結果:A0DBBFC1192FF24A
  • 傳輸認證(外部認證)
    傳送指令:0082000008A0DBBFC1192FF24A(Data部分為前一步的DES處理的結果)
    指令回覆:9000(認證成功)
    指令說明:00(CLA)82(INS)00(P1)00(P2外部認證金鑰標識00/01)08(Lc)A0DBBFC1192FF24A(Data 8個位元組加密後的隨機數)
    可能存在的錯誤回覆:
    • 6188
      認證金鑰不存在,可能是已經做了傳輸認證並已經擦除的卡片,可以直接嘗試一下擦除卡片看是否成功,如果成功,即可做後續的動作。
    • 63Cx
      認證失敗,x為允許再次嘗試的次數;出現此錯誤原因可能有2個,一個是金鑰錯誤;另一個是DES加密出現錯誤;

外部認證方式不同的廠商的卡認證方式可能會存在區別,比如在淘寶淘卡的時候會明確的說他這種卡的認證方式。

卡片擦除

擦除卡片裡面的所有資料,擦除成功之後,卡片即成為一張空白卡片

傳送指令:800E000000
指令回覆:9000(擦除成功)
指令說明:80(CLA)0E(INS)00(P1)00(P2)00(Lc)

目錄檔案及使用者金鑰的建立及寫入

這裡主要包含了主檔案的建立,金鑰檔案建立,二進位制檔案、記錄檔案的建立以及使用者金鑰的寫入

命令報文資料域

  • 目錄檔案DF(包含MF)
    檔案型別檔案空間建立許可權擦除許可權應用檔案ID保留字DF名稱382位元組1位元組1位元組XXFFFF5-16位元組
  • 基本檔案EF
    命令報文資料域檔案型別BYTE1BYTE2-3BYTE4BYTE5BYTE6BYTE7二進位制檔案28檔案空間讀許可權寫許可權FF見說明定長記錄檔案2A檔案空間讀許可權寫許可權FF見說明迴圈檔案2E檔案空間讀許可權寫許可權FF見說明PBOC ED/EP2F0208使用許可權保留(00)FF交易明細檔案短標識變長記錄檔案2C檔案空間讀許可權寫全選FF見說明金鑰檔案3F檔案空間DF檔案短識別符號中間許可權FFFF
    • 如果希望使用明文 MAC 寫 BYTE1 最高位需置 1 (“ 28 ”變為“ A8 ”)
      如果希望使用加密寫,則BYTE1次的最高位置1(“28”變成“68”)
    • 基本檔案 EF (金鑰檔案、 PBOC ED/EP 檔案除外)的保留字的最後一個位元組定義如下:(設該位元組的為定義為 b8 ~ b1 )
      b8b7b6b5b4b3b2b1含義1-------檔案不支援帶線路保護讀0-------檔案必須使用線路保護讀-111----保留為1----11--讀操作時使用的金鑰標識標識為00的金鑰----10--標識為01的金鑰----01--標識為02的金鑰----00--標識為03的金鑰------11寫操作時使用的金鑰標識標識為00的金鑰------10標識為01的金鑰------01標識為02的金鑰------00標識為03的金鑰
    • 對於記錄檔案(包括定長檔案、錢包檔案、迴圈檔案),檔案空間的第一個位元組為記錄的總個數,第二個位元組為記錄的長度:物理空間總數(個數*(記錄長度+1)+8)。
    • 對於對於金鑰檔案所謂的DF短檔案識別符號,說明如下:當高三位為000時為DDF,當高三位是100時是ADF短檔案標識號
    • 對於 PBOC ED/EP 中所謂的 TAC 金鑰標識是指該 ED/EP 在計算 TAC 時使用到的金鑰型別為‘ 34 ’金鑰的標識;所謂交易明細檔案是指 ED/EP 在記錄交易明細時用到的短檔案識別符號。
    • 所有檔案建立之後不能自動被選擇。

  • 金鑰型別
    型別意義34內部金鑰36檔案線路保護金鑰38重灌口令金鑰的金鑰39外部認證金鑰3A口令金鑰3B解鎖口令金鑰3C修改透支限額3D圈提3E消費3F圈存金鑰

指令集列表

800E000000
80E03F000D38FFFFF0F001FFFFFFFFFFFFFF
80E00000073F005001F0FFFF
80D401000D36F0F0FF33FFFFFFFFFFFFFFFF
80D401001539F0F0AA33FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
80E00001072A0213F000FFFF
80E0000507A80030F0F0FFFF
00E200081361114F09A00000000386980701500450424F43
80E03F011138036FF0F095FFFFA00000000386980701
00A4040009A00000000386980701
80E00000073F018F95F0FFFF
80D401001534F002000134343434343434343434343434343434
80D401001536F002FF3336363636363636363636363636363636
80D401001537F002FF3337373737373737373737373737373737
80D401001538F002FF3338383838383838383838383838383838
80D401001539F002443339393939393939393939393939393939
80D40101153EF00200013E013E013E013E013E013E013E013E01
80D40102153EF00200013E023E023E023E023E023E023E023E02
80D40101153FF00200013F013F013F013F013F013F013F013F01
80D40102153FF00200013F023F023F023F023F023F023F023F02
80D40101153DF00201003D013D013D013D013D013D013D013D01
80D40102153DF00201003D023D023D023D023D023D023D023D02
80D40101153CF00201003C013C013C013C013C013C013C013C01
80D40102153CF00201003C023C023C023C023C023C023C023C02
80D401000D3AF0EF013312345FFFFFFFFFFF
80E0001507A8001EF0F0FFFF
80E0001607A80027F0F0FFFF
80E00017072805DCF0F0FFFF
80E00018072E0A17F0EFFFFF
80E00001072F0208F100FF18
80E00002072F0208F000FF18

指令集說明

  • MF檔案的建立
    傳送指令:80E03F000D38FFFFF0F001FFFFFFFFFFFFFF
    指令回覆:9000(檔案建立成功)
    指令說明:80(CLA)E0(INS)3F00(P1 P2 檔案標識)0D(Lc)38(檔案型別)FFFF(檔案空間)F0(建立許可權)F0(擦除許可權)01(應用檔案ID)FFFF(保留字)FFFFFFFFFF(DF名稱)
  • 建立金鑰檔案
    傳送指令:80E00000073F005001F0FFFF
    指令回覆:9000(建立成功)
    指令說明:80(CLA)E0(INS)0000(P1P2檔案標識)07(Lc)3F(檔案型別)0050(檔案空間)01(DF檔案短識別符號)F0(增加許可權)FF(預設)FF(預設)
  • 新增線路保護金鑰
    傳送指令:80D401000D36F0F0FF33FFFFFFFFFFFFFFFF
    指令回覆:9000(成功)
    指令說明:80(CLA)D4(INS)01(P1)00(P2)0D(Lc)36(金鑰標識)F0(使用權)F0(更改權)FF(預設)33(錯誤計數器)FFFFFFFFFFFFFFFF(金鑰)
  • 新增外部認證金鑰
    傳送指令:80D401001539F0F0AA33FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    指令回覆:9000(成功)
    指令說明:80(CLA)D4(INS)01(P1)00(P2)15(Lc)39(金鑰標識)F0(使用權)F0(更改權)AA(後續狀態)33(錯誤計數器)FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF(金鑰)
  • 建立定長檔案
    傳送指令:80E00001072A0213F000FFFF
    指令回覆:9000(成功)
    指令說明:80(CLA)E0(INS)0001(P1P2檔案標識)07(Lc)2A(定長檔案)0213(檔案空間)F0(讀許可權)00(寫許可權)FF(預設)FF(預設)
  • 建立05檔案
    傳送指令:80E0000507A80030F0F0FFFF
    指令回覆:9000(成功)
    指令說明:80(CLA)E0(INS)0005(P1P2檔案標識)07(Lc)A8(二進位制檔案28–>A8)0030(檔案空間)F0(讀許可權)F0(寫許可權)FF(預設)FF(預設)
    注:28–>A8 28=00101000 高位變1即:10101000=A8(明文+MAC校驗)
  • 新增檔案記錄
    傳送指令:00E200081361114F09A00000000386980701500450424F43
    指令回覆:9000(新增成功)
  • 建立EF(基本檔案)
    傳送指令:80E03F011138036FF0F095FFFFA00000000386980701
    指令回覆:9000(建立成功)
    指令說明:80(CLA)E0(INS)3F01(P1 P2檔案標識)11(Lc)38(檔案型別(目錄檔案))036F(檔案空間)F0(建立許可權)F0(擦除許可權)95(應用檔案標識)FFFF(保留欄位)A00000000386980701(DF名稱 AID)
  • 選擇EF
    傳送指令:00A4040009A00000000386980701
    指令回覆:6f0b8409a000000003869807019000(成功選中)
    指令說明:00(CLA)A4(INS)04(P1)00(P2)09(Lc)A00000000386980701(Data AID)
    回覆說明:6f(檔案控制資訊板塊的記錄標識)0b(長度)84(DF名稱的記錄標識)09(DF名稱記錄資料長度)a00000000386980701(ADF的名稱)9000(SW1 SW2)
  • 建立金鑰檔案
    傳送指令:80E00000073F018F95F0FFFF
    指令回覆:9000(建立成功)
    指令說明:80(CLA)E0(INS)0000(P1P2 檔案標識)07(Lc)3F(檔案型別)018F(檔案控制元件)95(DF檔案短識別符號)F0(增加許可權)FF(預設)FF(預設)
  • 新增內部金鑰
    傳送指令:80D401001534F002000134343434343434343434343434343434
    指令回覆:9000(建立成功)
    指令說明:80(CLA)D4(INS)01(P1)00(P2)15(Lc)34(金鑰標識)F0(使用權)02(更改權)00(金鑰版本號)01(演算法標識)34343434343434343434343434343434(金鑰)
  • 新增線路保護金鑰(這裡的線路金鑰和前面那個所保護的檔案不同)
    傳送指令:80D401001536F002FF3336363636363636363636363636363636
    指令回覆:9000(新增成功)
    指令說明:80(CLA)D4(INS)01(P1)00(P2)15(Lc)36(金鑰標識)F0(使用權)02(更改權)FF(預設FF)33(錯誤計數器)36363636363636363636363636363636(金鑰)
  • 新增口令解鎖金鑰
    傳送指令:80D401001537F002FF3337373737373737373737373737373737
    指令回覆:9000(新增成功)
    指令說明:80(CLA)D4(INS)01(P1)00(P2)15(Lc)37(金鑰標識)F0(使用權)02(更改權)FF(預設FF)33(錯誤計數器)37373737373737373737373737373737(金鑰)
  • 新增口令重灌金鑰
    傳送指令:80D401001538F002FF3338383838383838383838383838383838
    指令回覆:9000(新增成功)
    指令說明:80(CLA)D4(INS)01(P1)00(P2)15(Lc)38(金鑰標識)F0(使用權)02(更改權)FF(預設FF)33(錯誤計數器)38383838383838383838383838383838(金鑰)
  • 外部認證金鑰
    傳送指令:80D401001539F002443339393939393939393939393939393939
    指令回覆:9000(新增成功)
    指令說明:80(CLA)D4(INS)01(P1)00(P2)15(Lc)39(金鑰標識)F0(使用權)02(更改權)44(後續狀態)33(錯誤計數器)39393939393939393939393939393939(金鑰)
  • 消費金鑰01
    傳送指令:80D40101153EF00200013E013E013E013E013E013E013E013E01
    指令回覆:9000(新增成功)
    指令說明:80(CLA)D4(INS)01(P1)01(P2)15(Lc)3E(金鑰標識)F0(使用權)02(更改權)00(金鑰版本號)01(演算法標識)3E013E013E013E013E013E013E013E01(金鑰)
  • 消費金鑰02
    傳送指令:80D40102153EF00200013E023E023E023E023E023E023E023E02
    指令回覆:9000(新增成功)
    指令說明:80(CLA)D4(INS)01(P1)02(P2)15(Lc)3E(金鑰標識)F0(使用權)02(更改權)00(金鑰版本號)01(演算法標識)3E023E023E023E023E023E023E023E02(金鑰)
  • 圈存金鑰01
    傳送指令:80D40101153FF00200013F013F013F013F013F013F013F013F01
    指令回覆:9000(新增成功)
    指令說明:80(CLA)D4(INS)01(P1)01(P2)15(Lc)3F(金鑰標識)F0(使用權)02(更改權)00(金鑰版本號)01(演算法標識)3F013F013F013F013F013F013F013F01(金鑰)
  • 圈存金鑰02
    傳送指令:80D40102153FF00200013F023F023F023F023F023F023F023F02
    指令回覆:9000(新增成功)
    指令說明:80(CLA)D4(INS)01(P1)01(P2)15(Lc)3F(金鑰標識)F0(使用權)02(更改權)00(金鑰版本號)01(演算法標識)3F023F023F023F023F023F023F023F02(金鑰)
  • 圈提金鑰01
    傳送指令:80D40101153DF00201003D013D013D013D013D013D013D013D01
    指令回覆:9000(新增成功)
    指令說明:80(CLA)D4(INS)01(P1)01(P2)15(Lc)3D(金鑰標識)F0(使用權)02(更改權)01(金鑰版本號)00(演算法標識)3D013D013D013D013D013D013D013D01(金鑰)
  • 圈提金鑰02
    傳送指令:80D40102153DF00201003D023D023D023D023D023D023D023D02
    指令回覆:9000(新增成功)
    指令說明:80(CLA)D4(INS)01(P1)01(P2)15(Lc)3D(金鑰標識)F0(使用權)02(更改權)01(金鑰版本號)00(演算法標識)3D023D023D023D023D023D023D023D02(金鑰)
  • 新增修改透支限額金鑰01
    傳送指令:80D40101153CF00201003C013C013C013C013C013C013C013C01
    指令回覆:9000(新增成功)
    指令說明:80(CLA)D4(INS)01(P1)01(P2)15(Lc)3C(金鑰標識)F0(使用權)02(更改權)01(金鑰版本號)00(演算法標識)3C013C013C013C013C013C013C013C01(金鑰)
  • 新增修改透支限額金鑰02
    傳送指令:80D40102153CF00201003C023C023C023C023C023C023C023C02
    指令回覆:9000(新增成功)
    指令說明:80(CLA)D4(INS)01(P1)01(P2)15(Lc)3C(金鑰標識)F0(使用權)02(更改權)01(金鑰版本號)00(演算法標識)3C023C023C023C023C023C023C023C02(金鑰)
  • 新增口令(PIN)
    傳送指令:80D401000D3AF0EF013312345FFFFFFFFFFF
    指令回覆:9000(新增成功)
    指令說明:80(CLA)D4(INS)01(P1)00(P2)0D(Lc)3A(口令金鑰)F0(使用權)EF(預設EF)01(後續狀態)33(錯誤計數器)12345FFFFFFFFFFF(口令)
  • 建立15號檔案(二進位制檔案)
    傳送指令:80E0001507A8001EF0F0FFFF
    指令回覆:9000(建立成功)
    指令說明:80(CLA)E0(INS)0015(P1 P2 檔案標識)07(Lc)A8(明文MAC 28(二進位制檔案高位變1)–>A8)001E(檔案空間)F0(讀許可權)F0(增加許可權)FF(預設FF)FF(預設FF)
    注:28–>A8 28=00101000 高位變1即:10101000=A8(明文+MAC校驗)
  • 建立17號檔案(二進位制檔案)
    傳送指令:80E00017072805DCF0F0FFFF
    指令回覆:9000(建立成功)
    指令說明:80(CLA)E0(INS)0017(P1 P2 檔案標識)07(Lc)28(二進位制檔案)05DC(檔案空間)F0(讀許可權)F0(新增許可權)FF(預設FF)FF(預設FF)
  • 建立18號檔案(迴圈檔案)
    傳送指令:80E00018072E0A17F0EFFFFF
    指令回覆:9000(建立成功)
    指令說明:80(CLA)E0(INS)0018(P1 P2 檔案標識)07(Lc)2E(迴圈檔案)0A17(檔案空間)F0(讀許可權)EF(增加許可權)FF(預設FF)FF(預設FF)
  • 建立錢包檔案(電子存摺)
    傳送指令:80E00001072F0208F100FF18
    指令回覆:9000(建立成功)
    指令說明:80(CLA)E0(INS)0001(P1 P2 檔案標識)07(Lc)2F(PBOC ED/EP)0208(預設0208)F1(使用權)00(保留00)FF(預設FF)18(交易明細檔案短標識)
  • 建立錢包檔案(電子錢包)
    傳送指令:80E00002072F0208F000FF18
    指令回覆:9000(建立成功)
    指令說明:80(CLA)E0(INS)0002(P1 P2 檔案標識)07(Lc)2F(PBOC ED/EP)0208(預設0208)F0(使用權)00(保留00)FF(預設FF)18(交易明細檔案短標識)

資料(二進位制資料,記錄資料)的寫入

MF下05檔案寫入

  • 選擇MF
    傳送指令:00A40000023F00
    指令回覆:6f15840e315041592e5359532e4444463031a5038801019000
  • 取隨機數
    傳送指令:0084000004
    指令回覆:88bbe4e39000
  • 通過寫入資料計算MAC
    計算MAC方式可以通過百度搜索PBOC MAC計算工具
    資料來源:04D6850034000122000001FFFF22000000000000060001201610280000000000010001000000000000000000000000000020501231
    初始向量:88bbe4e300000000(隨機數+00000000)
    金鑰:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF(各自檔案下的線路保護金鑰)
    計算結果:AE8D8774
    傳送指令:04D6850034000122000001FFFF22000000000000060001201610280000000000010001000000000000000000000000000020501231AE8D8774(指令+MAC)
    指令回覆:9000(新增成功)
    指令說明:04(CLA)D6(INS)85(檔案標識)00(寫入資料偏移量)34(Lc Data+MAC)000122000001FFFF22000000000000060001201610280000000000010001000000000000000000000000000020501231(Data 根據情況寫入,可以隨意定義)AE8D8774(MAC)
    MAC計算如下圖:

EF下15檔案寫入

  • 選擇MF
    傳送指令:00A40000023F00
    指令回覆:6f15840e315041592e5359532e4444463031a5038801019000
  • 選擇EF
    傳送指令:00A4040009A00000000386980701
    指令回覆:6f328409a00000000386980701a5259f0801029f0c1e0000000000000000000000000000000000000000000000000000000000009000
  • 取隨機數
    傳送指令:0084000004
    指令回覆:a3bbcfc89000
  • 通過寫入資料計算MAC
    計算MAC方式可以通過百度搜索PBOC MAC計算工具
    資料來源:04D6950022000122000001FFFF01010000220000000000000620160101205012310000
    初始向量:a3bbcfc800000000(隨機數+00000000)
    金鑰:36363636363636363636363636363636(各自檔案下的線路保護金鑰)
    計算結果:96E32EF1
    傳送指令:04D6950022000122000001FFFF0101000022000000000000062016010120501231000096E32EF1(指令+MAC)
    指令回覆:9000(新增成功)
    指令說明:04(CLA)D6(INS)95(檔案標識)00(寫入資料偏移量)22(Lc Date+Mac)000122000001FFFF01010000220000000000000620160101205012310000(Data 根據情況寫入,可以隨意定義)96E32EF1(MAC)
    MAC計算如下圖:
到此,一張能正常充值和消費的CPU已經發完。