非接觸IC卡片APDU指令介紹(一)
APDU指令介紹
1. APDU指令格式
根據(jù)7816-4規(guī)范,從終端發(fā)出的命令和卡片響應(yīng)的信息必須遵從以下4種格式。
情形1:
命令 : | CLA | INS | P1 | P2 | 00 |
響應(yīng) : | SW1 | SW2 |
情形2:
命令: | CLA | INS | P1 | P2 | Le |
響應(yīng): | Le字節(jié)的DATA | SW1 | SW2 |
情形3:
命令: | CLA | INS | P1 | P2 | Lc | DATA |
響應(yīng) : | SW1 | SW2 |
情形4:
命令: | CLA | INS | P1 | P2 | Lc | DATA | Le |
響應(yīng): | Le字節(jié)的DATA | SW1 | SW2 |
1.1 APDU命令格式
命令由4字節(jié)的命令頭和命令體組成,見(jiàn)圖1。
命令頭(必備體) | 命令體(可選體) | |||||
CLA | INS | P1 | P2 | Lc | DATA | Le |
圖1 APDU命令格式
1.1.1 命令頭域
命令頭定義報(bào)文的內(nèi)容如下表所示:
表1 命令頭域
代碼 | 長(zhǎng)度(byte) | 值 (Hex) | 描述 |
CLA | 1 | X0 | 不帶安全報(bào)文的命令 |
X4 | 帶安全報(bào)文的命令 | ||
INS | 1 | XX | 指令代碼 |
P1 | 1 | XX | 參數(shù)1 |
P2 | 1 | XX | 參數(shù)2 |
1.1.2 命令體
命令體中各項(xiàng)是可選的。
Lc命令數(shù)據(jù)域中DATA的長(zhǎng)度,該長(zhǎng)度不可超過(guò)255字節(jié)。
Data 命令和響應(yīng)中的數(shù)據(jù)域。
Le響應(yīng)數(shù)據(jù)域中期望數(shù)據(jù)的長(zhǎng)度。
Le=00,表示需要最大字節(jié)數(shù), 該長(zhǎng)度不可超過(guò)255字節(jié)。
1.2 APDU響應(yīng)數(shù)據(jù)格式
APDU命令的應(yīng)答由數(shù)據(jù)和狀態(tài)字組成,見(jiàn)下圖2。
數(shù)據(jù) | 狀態(tài)字 | |
響應(yīng)中接收的數(shù)據(jù)位串 | SW1 | SW2 |
圖2 APDU響應(yīng)數(shù)據(jù)格式
1.2.1 返回?cái)?shù)據(jù)
返回?cái)?shù)據(jù)域是可選項(xiàng)。
1.2.2 返回狀態(tài)字(SW1SW2)
SW1 SW2是卡片執(zhí)行命令的返回代碼,任何命令的返回信息都至少由一個(gè)狀態(tài)字組成。
1.3 狀態(tài)字SW1SW2意義
狀態(tài)字說(shuō)明了命令處理的情況,即命令是否被正確執(zhí)行,如果未被正確執(zhí)行,原因是什么。狀態(tài)字由2部分組成:
SW1(status word1):表示命令處理狀態(tài);
SW2(status word2):表示命令處理限定。
表2 狀態(tài)字SW1-SW2
SW1 | SW2 | Description |
90 | 00 | 正確執(zhí)行 |
61 | XX | 正確執(zhí)行 XX表示響應(yīng)數(shù)據(jù)長(zhǎng)度??捎?/span>Get Response命令取回響應(yīng)數(shù)據(jù)。(僅用于T=0) |
62 | 81 | 回送的數(shù)據(jù)可能錯(cuò)誤 |
62 | 83 | 選擇文件無(wú)效,文件或密鑰校驗(yàn)錯(cuò)誤 |
63 | CX | X表示還可再試次數(shù) |
64 | 00 | 狀態(tài)標(biāo)志未改變 |
65 | 81 | 寫(xiě)EEPROM不成功 |
67 | 00 | 錯(cuò)誤的長(zhǎng)度 |
69 | 00 | CLA與線路保護(hù)要求不匹配 |
69 | 01 | 無(wú)效的狀態(tài) |
69 | 81 | 命令與文件結(jié)構(gòu)不相容 |
69 | 82 | 不滿(mǎn)足安全狀態(tài) |
69 | 83 | 密鑰被鎖死 |
69 | 85 | 使用條件不滿(mǎn)足 |
69 | 87 | 無(wú)安全報(bào)文 |
69 | 88 | 安全報(bào)文數(shù)據(jù)項(xiàng)不正確 |
6A | 80 | 數(shù)據(jù)域參數(shù)錯(cuò)誤 |
6A | 81 | 功能不支持或卡中無(wú)MF或卡片已鎖定 |
6A | 82 | 文件未找到 |
6A | 83 | 記錄未找到 |
6A | 84 | 文件無(wú)足夠空間 |
6A | 86 | 參數(shù)P1 P2錯(cuò)誤 |
6B | 00 | 在達(dá)到Le/Lc字節(jié)之前文件結(jié)束,偏移量錯(cuò)誤 |
6C | XX | Le錯(cuò)誤 |
6E | 00 | 無(wú)效的CLA |
6F | 00 | 數(shù)據(jù)無(wú)效 |
93 | 02 | MAC錯(cuò)誤 |
93 | 03 | 應(yīng)用已被鎖定 |
94 | 01 | 金額不足 |
94 | 03 | 密鑰未找到 |
94 | 06 | 所需的MAC不可用 |
注意:
當(dāng)SW1的高半字節(jié)為‘9’,且低半字節(jié)不為‘0’時(shí),其含義依賴(lài)于相關(guān)應(yīng)用。
當(dāng)SW1的高半字節(jié)為‘6’,且低半字節(jié)不為‘0’時(shí),其含義與應(yīng)用無(wú)關(guān)。