首页 > 学院 > 开发设计 > 正文

JavaCard开发教程之消息模型

2019-11-18 14:28:53
字体:
来源:转载
供稿:网友

  图1中说明的消息传递模型是所有java Card通信的基础。它的核心就是应用程序协议数据单元(APDU),CAD和Java Card框架之间交换的一个逻辑数据包。JavaCard框架接收任何CAD发送进来的APDU命令并且传送到相应的小应用程序中。小应用程序处理APDU命令,然后返回一个响应APDU。那些APDU遵守国际标准规格ISO/IEC 7816 - 3和7816 - 4。

JavaCard开发教程之消息模型(图一)
  图1使用消息传递模型通讯

  读卡器和卡之间的通信通常基于下面两种连接协议的一种,面向字节的T = 0,或者面向数据块的T = 1。还可能会用到被称为T = USB和T = RF的替换协议。JCRE APDU类向应用程序隐藏了一些协议细节,但不是全部,因为T = 0协议相当的复杂。

  ⒈APDU命令

  一个APDU命令的结构由它的第一个字节的值控制,大部分情况下看上去如下所示:

JavaCard开发教程之消息模型(图二)
图2、APDU命令

  一个APDU命令有一个必须有的头和一个可选的体,包含:

  · CLA(1字节):这个必要的字段识别指令的一个特定应用程序类。有效的CLA值在ISO 7816 - 4规范中定义:

表格1、ISO 7816 CLA值

CLA 值指令类0x0n, 0x1nISO 7816 - 4卡指令,比如文件存取和安全操作20 to 0x7F保留0x8n or 0x9n你可以用作你的特定的应用程序指令的ISO/IEC 7816 - 4格式,根据标准解释' X '0xAn特定的应用程序或者供给商的指令B0 to CF你可以用作特定应用程序的ISO/IEC 7816 - 4格式D0 to FE特定的应用程序或者供给商的指令FF保留给协议类型选择
  · 理论上,你可以使用所有的CLA值0x80或者更高值来用于特定应用程序指令,但是在许多现在的Java Card实现中,只有黑体显示的是实际认可的。

  · INS(1字节):这个必需的字段指明CLA字段中标示的指令类中的一个特定指令。ISO 7816 - 4标准指定用于访问卡上的数据的基本指令,当它根据在像标准中定义的卡上的文件系统那样结构化的时候。附加功能已经在这个标准中的其它地方说明,其中一些是安全功能。表2中是一个ISO 7816指令的列表。只有当使用一个相应的CLA字节值时,你才可以根据标准定义你自己的特定应用程序的INS值,。

  表格2、当 CLA = 0x时的ISO 7816 - 4 INS值

INS 值命令描述0EErase Binary20Verify70Manage Channel82External Authenticate84Get Challenge88Internal AuthenticateA4 Select FileB0Read BinaryB2Read Record(s)C0Get ResponseC2EnvelopeCAGet DataD0Write BinaryD2 Write RecordD6Update BinaryDAPut DataDC Update RecordE2 Append Record


  · P1(1字节):这个必需的字段定义指令参数1。你可以使用这个字段来检验INS字段,或者用于输入数据。

  · P2(1字节):这个必需的字段定义指令参数⒉你可以使用这个字段来检验INS字段,或者用于输入数据。

  · Lc(1字节):这个可选的字段是命令的数据字段的字节数。

  · 数据字段(可变的,字节Lc数):这个可选的字段保存命令数据。

  · Le(1字节):这个可选的字段指定在期望响应的数据字段中的极限字节数。

  取决于命令数据的存在与否以及相应是否必须,命令APDU有四种变化。只有在你使用协议T = 0时,你才需要关心这些变化:

JavaCard开发教程之消息模型(图三)

点击查看大图

图3、APDU命令的四个可能的结构

  一个典型的应用程序将以不同的结构方式使用不同的APDU命令。

  2、响应APDU

  响应APDU的格式很简单的:

JavaCard开发教程之消息模型(图四)
图4、响应APDU

  和一个APDU命令相似,响应APDU有可选择的和必要的字段:

  · 数据字段(可变长度,由APDU命令中的Le确定):这个可选择的字段包含小应用程序返回的数据。

  · SW1(1字节):这个必要的字段是状态字1。

  · SW2(1字节):这个必要的字段是状态字2。

  这些状态字的值在ISO 7816 - 4规范中定义:

JavaCard开发教程之消息模型(图五)
图5、响应状态码

  Java Card框架应用编程接口中的ISO7816 Java接口定义了许多常数来帮助规范返回错误代码。

  3、过程APDU

  每当有一个进入的APDU用于所选择的小应用程序,JCRE就调用小应用程序的PRocess ()方法,把进入的APDU作为一个参数传送。这个小应用程序必须解析APDU命令,处理数据、生成一个响应APDU,然后把控制权返回给JCRE。

  RMI(JCRMI)通讯模型

  第二种通信模型依靠J2SE RMI分布式对象模型的一个子集。

  在RMI模型中,一个服务器应用程序创建并生成可访问的远程对象,并且一个客户应用程序获得到远程对象的远程引用,然后调用它们的远程方法。在JCRMI中,Java Card小应用程序是服务器,而主应用程序是客户端。

  JCRMI由类RMIService提供到扩展程序包javacardx.rmi中。JCRMI消息被封装到传入RMIService方法的APDU对象中,换句话说,JCRMI提供了一个基于APDU消息传递模型的分布式对象模型机制,通过这个机制服务器和客户端通信,往返传送方法信息、参数和返回值。



发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表