【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 不一致