一般而言,智能卡自身是没有电源,显示器,键盘,哪它是如何与外界进行通信的呢?在上面的文章中,我们已经知道:智能卡是通过它的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). 每部分有一个字节。“非强制部分”表明并不是所有的APDU都有这些部分。
其栏位所表示的意义分别为: 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文档。 智能卡的安全性 安全