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