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