一般而言,智能卡自身是沒(méi)有電源,顯示器,鍵盤(pán),哪它是如何與外界進(jìn)行通信的呢?在上面的文章中,我們已經(jīng)知道:智能卡是通過(guò)它的8個(gè)觸點(diǎn)與讀卡器進(jìn)行通信的。那它們是如何進(jìn)行通信的呢?我們知道當(dāng)兩臺(tái)PC進(jìn)行通信時(shí),進(jìn)行數(shù)據(jù)交換時(shí),它們必須服從一定的通信協(xié)議??ㄅc讀卡器的通信也是如此。根據(jù)ISO7816.4規(guī)定,智能卡與外界的通信數(shù)據(jù)接口為:APDU(Application Protocol DataUnits,應(yīng)用協(xié)議數(shù)據(jù)單元)。APDU既制定了命令格式,也制定了響應(yīng)格式。在卡的領(lǐng)域中,卡始終處在“主仆”關(guān)系中的“仆”的地位,即智能卡只能等待讀卡器或終端向它發(fā)送APDU,收到APDU后,智能卡執(zhí)行APDU中的命令,而后返回APDU響應(yīng)。通過(guò)APDU命令和它的響應(yīng),卡就完成了與讀卡器或終端的通信。以下就是APDU的格式: Command APDU(APDU 命令) Mandatory Header(強(qiáng)制部分) Conditional Body(非強(qiáng)制部分) CLA INS P1 P2 Lc Data field Le “強(qiáng)制部分”表明這是APDU命令必須包括的部分,它包括: class (CLA)-, instrUCtion (INS), and parameters 1 and 2 (P1 and P2). 每部分有一個(gè)字節(jié)?!胺菑?qiáng)制部分”表明并不是所有的APDU都有這些部分。
其欄位所表示的意義分別為: CLA - Class Byte,用於識(shí)別applet INS - Instruction Byte ,下達(dá)給applet之指令 P1 - 第一個(gè)指令參數(shù) P2 - 第二個(gè)指令參數(shù) (P1,P2 根據(jù)INS不同,也有不同的含義) Lc - Data Field之長(zhǎng)度 Data Field - 資料欄位 Le - 回傳資料之長(zhǎng)度 Response APDU (APDU 響應(yīng)) Conditional Body(非強(qiáng)制部分) Mandatory Trailer(強(qiáng)制部分) Data field SW1 SW2 其欄位所表示的意義分別為: Data Field - return之資料欄位 SW1 - 執(zhí)行狀態(tài)參數(shù)1 (1 字節(jié)) SW2 - 執(zhí)行狀態(tài)參數(shù)2 (1字節(jié)) 一般SW1 + SW2 =“9000”表明指令執(zhí)行成功。
一個(gè)例子:
假如我們要選擇(Select)SIM卡的ROOT文件,則APDU命令的格式如下: CLA INS P1 P2 Lc Data A0 A4 00 00 02 3F00 A0 代表這是SIM卡、A4代表這是Select指令、P1,P2在Select指令中沒(méi)有用、Lc說(shuō)明Data的長(zhǎng)度為2個(gè)字節(jié)、Data=3F00,是ROOT的文件ID 而APDU響應(yīng)為:9F1A,說(shuō)明指令成功完成,而且你可以用Get Response命令得到1A長(zhǎng)度的響應(yīng)數(shù)據(jù)。關(guān)于對(duì)SIM卡的操作,請(qǐng)參考GSM11.11文檔。 智能卡的安全性 安全