1. 程式人生 > >【IoT】ISO7816 NFC 之 CPU 卡操作命令淺析

【IoT】ISO7816 NFC 之 CPU 卡操作命令淺析

廠家初始設定外部認證金鑰為  FF FF FF FF FF FF FF FF

1、外部認證

   1.1、取 4 位元組隨機數 00 84 00 00 04       1.2、程式用外部認證祕鑰 FFFFFFFFFFFFFFFF 和獲取的 4 位元組隨機數加密,生成 8 位元組加密資料       1.3、傳送 00 82 00 00 08 + 8 位元組加密資料

2、刪除 MF 下面檔案

   80 0E 00 00 00        00 A4 00 00 00     4、建立 MF 下金鑰檔案

   80 E0 00 00 07 3F00B001F0FFFF         //80 E0 00 00 07 3F005001F0FFFF     5、增加金鑰

   5.1、檔案線路保護金鑰           80 D4 01 00 0D 36F0F0FF33FFFFFFFFFFFFFFFF         5.2、外部認證金鑰            80 D4 01 00 0D 39F0F0 AA 55 1122334455667788            //80 D4 01 00 15 39F0F0 AA 88FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF            後續狀態 AA,錯誤計算 55

   5.3、解鎖口令金鑰           80 D4 01 00 0D 37F0F0FF 55 1122334455667788           錯誤計算 55,金鑰 1122334455667788

   5.4、口令金鑰           80 D4 01 00 08 3AF0EF 44 55 123456               後續狀態 44,錯誤計算 55,pin 123456

   5.5、重灌金鑰           80 D4 01 00 0D 38F0F0FF 55 0102030405060708            錯誤計算 55,金鑰 0102030405060708

   5.6、線路保護           80 D4 01 00 0D 36F0F0FF 55 0102030405060708            錯誤計算 55,金鑰 0102030405060708

6、建立電子錢包 DF

   80 E0 3F 01 0D 38 05 20 F0F095FFFF4444463031        //80 E0 3F 01 11 3804FFF0FA95FFFFA00000000386980701        檔案 ID 82,select file 返回為 00 02        檔案標示 3F 01         空間大小 05 20         DF 名稱 DDF01    7、選擇電子錢包 DF

   00 A4 00 00 02 3F 01 00

8、建立 DF 下金鑰檔案

   80 E0 00 00 07 3F018F95F0FFFF 

9、增加金鑰

   9.1、主控金鑰           外部認證金鑰             80 D4 01 00 0D 39F0F0 33 55 1122334455667788            後續狀態 AA,錯誤計算 55            9.2、圈存金鑰           80 D4 01 00 0D 3FF0F000003F023F023F023F02               9.3、圈提金鑰           80 D4 01 00 0D 3DF0F000013D023D023D023D02           9.4、消費金鑰           80 D4 01 00 0D 3EF0F000013E023E023E023E02           9.5、透支限額           80 D4 01 00 0D 3CF0F000013C023C023C023C02           9.6、線路保護           80 D4 01 01 0D 36F0F0FF 55 0102030405060708       錯誤計算 55,金鑰 010203040506070           9.7、重灌口令金鑰             80 D4 01 01 0D 38F0F0FF 55 0102030405060708            錯誤計算 55,金鑰 0102030405060708

   9.7、口令金鑰           80 D4 01 01 08 3AF0EF 44 55 123456               後續狀態 44,錯誤計算 55,pin 123455

   9.8、解鎖口令金鑰           80 D4 01 01 0D 37F0F0FF 55 1122334455667788            錯誤計算 55,金鑰 1122334455667788      9.9、MAC金鑰           80 D4 01 01 0D 32F0F000013202320232023202

10、建立錢包檔案

     80 E0 00 02 07 2F0208F000FF18

11、建立錢包應用基本資料檔案 A8

     80 E0 00 15 07 A8001EF0F0FF02          //80E0001507A8001EF0F0FFFF       12、建立錢包持卡人基本資料檔案 A8

     80 E0 00 16 07 A80027F0F0FF02             //80E0001607A80037F0F0FFFF       13、建立交易明細檔案 2E             80 E0 00 18 07 2E0A17F1EFFFFF           //80E00017072A0A10F0F0FFFF

14、MF 下讀餘額

  14.1、選擇電子錢包資料夾        00 A4 00 00 02 3F0100          80 5C 00 02 04      14.2、驗證 PIN,PIN 是 123456          00 20 00 01 03 123456      14.3、圈存初始化,圈存金鑰為 3F023F023F023F02          執行指令          80 50 00 02 0B 01 00001234 00000000000110        金鑰標識 01,交易金額 00001234,終端機編號 000000000001

    返回          00 00 00 00 00 00 00 01 CAB24782 67AE64BA         MAC1=67AE64BA

    過程金鑰(SESLK) = 圈存金鑰(DLK)和 4隨機數 + 2 位元組交易序號 + 8000 生成            也就是 3F023F023F023F02 和 CAB24782+0000+8000 加密          得出 FA0645615347A270 (SESLK1)

    金鑰 FA0645615347A270 和餘額 + 交易金額 + 交易型別標識 + 終端機編號    (不足補80)加密          也就是 FA0645615347A270 和 00000000000012340200000000000180          得到 1FB2262D0435B1A3444C2A1A1FAAE7A3            結果和 MAC1 不一致