采用文本屏障在小型注脚设备上实施安全的技术的制作方法

文档序号:6400595阅读:155来源:国知局

专利名称::采用文本屏障在小型注脚设备上实施安全的技术的制作方法
技术领域
:本发明涉及计算机安全性,特别涉及用于在一个小型注脚设备(smallfootprintdevices)如智能卡上实现安全性的技术。
背景技术
:在本
技术领域
中具有多个公知的面向对象的编程语言。其中的例子包括C++语言和Smalltalk语言。另一种面向对象的编程语言是JAVATM语言。在由JamesGosling等人编写、Addison-Wesley出版的手册《JavaTM语言说明书》(JavaTMLanguageSpecification)中对该语言进行了说明。在此通过参考该手册而将其作为本申请的一部分。JAVATM语言特别适合于在一个JavaTM虚拟机上运行。在由TimLindholm和FrankYellin编写、Addison-Wesley出版的手册《JavaTM虚拟机说明书》(JavaTMVirtualMachineSpecification)中对该虚拟机进行了说明,在此通过参考该手册而将其作为本申请的一部分。在本
技术领域
中也具有多个公知的小型注脚设备。它们包括智能卡、移动电话以及各种其它小型或微型设备。智能卡在尺寸和形状上与信用卡相似,但典型地包含在卡内数据处理的能力(例如一个处理器或逻辑执行处理功能)和一组触点,通过该触点可以实现与智能卡进行程序、数据和其它通信。典型的,触点组包括一个电源连接和一个回路(return)以及一个时钟输入、一个复位输入和一个数据端口,通过该数据端口可以进行数据通信。利用一个智能识别卡设备可将信息写入一个智能卡中以及从一个智能卡中检索到该信息。一个智能识别卡设备典型的为附着在一个主计算机上的一个外围设备并包含一个卡端口,如一个槽,一个智能卡可以插入到上述卡端口中。一旦将智能卡插入其中,来自一个连接器的接触或轻触施加到智能卡的连接区域从而能接通电源并允许与典型的在一个智能卡上找到的处理器和存储器进行通信。智能卡和智能识别卡设备(cardacceptancedevices,即CADs)是扩展的标准计划如ISO7816的研究对象。在网络环境中利用防火墙来将授权用户和非法用户分开是公知的方法。例如在美国专利申请第09/203,719号中披露了一种防火墙,该申请的申请日为1998年12月1日,标题为“鉴别的防火墙贯穿框架(AUTHENTICATEDFIREWALLTUNNELLINGFRAMEWORK)”,发明人为DavidBrownell(案卷第50435-023/P2789/TJC),在此通过参考该申请而将其作为本申请的一部分。现已对全JAVATM平台容量的一个子集进行了定义并将其应用到小型注脚设备如智能卡上。该子集被称为JavaCardTM平台。在下列的公开出版物中对JavaCardTM平台进行了描述。JAVACARDTM2.0-语言子集和虚拟机说明书(LANGUAGESUBSETANDVIRTUALMACHINESPECIFICATION);JAVACARDTM2.1-应用程序接口(APPLICATIONPROGRAMMINGINTERFACES);JAVACARDTM2.0-程序设计概念(PROGRAMMINGCONCEPTS);JAVACARDTMAPPLET(APPLET为JAVA的程序)开发指南(APPLETDEVELOPER’SGUIDE)。在此通过参考这些出版物而将其作为本申请的一部分。ISO7816的一个工作草案—第11部分为了征求意见已经被传播出去。该草案详细说明了用于允许分离执行文本而在一个智能卡上运行的标准。在此通过参考该草案的副本而将其作为本申请的一部分。在计算机科学领域一个执行文本的概念是公知的。一般而言,在一个计算环境中使用多个执行文本可以提供一种相互间分离或隔离不同程序模块或处理的方式,这样每一个都可独立运行而不受来自其他的干扰。在不同文本之间的相互作用应比较谨慎,并对其进行仔细地控制以便保持每一个文本的完整性。在较大硬件设备例如大型机中可以看到多个文本的一个例子,其中可形成多个虚拟机,每一个虚拟机都具有其自己的执行文本。在发明人为DeJong的美国专利第5802519号中可以看到另一个例子,其描述了在一个智能卡上多个执行文本的使用。本领域技术人员容易理解的是提供多个执行文本的一个计算环境也需要提供一个机构从而将任何给定的执行代码与其对应的文本相联系。一个当前文本(context)的概念也是公知的。支持多文本的某一个计算环境在任何给定的时刻会将一个文本特别的视为一个计算激活焦点(activefocus)。该文本被称为“当前文本”。当当前文本改变时,一些其它文本会变成当前文本,就发生了“文本转换”。本领域技术人员容易理解的是这些计算环境提供了用于记录哪一个文本是当前文本并便于文本转换的机构。在现有技术的小型注脚设备领域中(world),特别是在智能卡的领域(world)中,运行在小型注脚设备上的文本之间没有相互的操作。每一个文本都是完全独立的运行并在其文本空间中运行或出错,而不影响其它应用程序或在另一个不同的文本中进行处理。JavaTM平台使用的安全保护的一个层通常指的是一个沙箱模型(sandboxmodel)。非置信的代码被放置在一个“沙箱”中,该代码在“沙箱”中可以安全的“运行”而不会对“现实世界”或全JavaTM环境造成任何危害。在这样的一个环境中,JavaTMapplets程序不进行通信,而每一个都有其自己的名称空间。一些智能卡操作系统不允许执行文本进行直接通信,而允许通过一个操作系统或一个服务器进行通信。存在的问题当试图将计算机程序和其它信息置于在一个小型注脚设备上时会产生许多问题。令人关注的问题中的一个是非常有限的存储空间的存在。这就经常需要特别的努力来提供在存储空间中所需的功能。与小型注脚设备相联系的第二个问题是不同的小型注脚设备制造商使用不同的操作系统。结果为一种操作系统开发的应用程序与由一不同制造商生产的生产的小型注脚设备是不兼容的(necessarilyportable)。如果来自多个程序源(制造商和销售商)的程序被应用到一个单个小型注脚设备中,当一个新程序被加载到小型注脚设备中并试图避免对现存的程序和数据进行讹误时,安全性能会变为一个重要因素。当希望阻止一个黑客或有敌意的人访问程序和数据时,也会存在相同的问题。很明显小型注脚设备如智能卡不具有执行分离虚拟机的资源。然而却希望在分离的执行文本之间保持严格的安全性能。在过去,仅通过将来自相同的源头或一个公知的置信源的应用程序加载到一个智能卡或其他小型注脚设备上来保障安全。因此,希望在选择的执行文本之间仅以安全的方式允许面向对象的相互操作,该安全方式是通过高效率的对等式通信,其不会将不适当的负担压在程序员身上,但却便于动态的调入由非置信源在不同时间写成的applets程序。
发明内容本发明提供一种文本屏障(有时也指一种防火墙),该文本屏障可将一个文本从另一个中分离和隔离出来,并且当需要时可以提供通过文本屏障的控制访问。本发明提供了一种操作具有一处理机(410)的小型注脚设备(400)的方法,其中程序模块在该处理机上执行,该方法包括在各自的文本(420,620;760,770,780;1000,1010,1020)中执行包括一个或多个程序模块的组,一程序模块的多个对象与一特定的文本相关联;以及提供一个文本屏障(600;600’),用于分隔并隔离所述文本,并用于控制在一个文本中执行的一程序模块对于在另一个文本中信息和/或运行的一程序模块进行面向对象的存取,所述提供一个文本屏障的步骤进一步包括如果所述存取未被授权,禁止所述存取;以及而如果所述存取已被授权,则允许所述存取。本发明还提供了一种虚拟机(720),该虚拟机配置为执行根据权利要求1至6其中之一所述的方法操作一小型注脚设备(400)的程序指令,所述虚拟机(720)包括一个解释装置,该解释装置提供对于一个运行时系统(740)的访问,所述运行时系统(740)包括一个用于管理所述多个对象的对象系统。本发明还提供了一种具有一处理机(410)的小型注脚设备(400),其中程序模块在该处理机上执行,该小型注脚设备包括处理器(300),用于在各自的文本(420,620;760,770,780;1000,1010,1020)中执行包括一个或多个程序模块的组;与一个特定文本相关联的一个程序模块的多个对象;以及一个文本屏障(600;600’),用于分隔并隔离所述文本,并用于控制在一个文本中执行的一程序模块对于在另一个文本中信息和/或运行的一程序模块进行面向对象的存取,所述文本屏障的进一步配置为如果所述存取未被授权,禁止所述存取,以及而如果所述存取已被授权,则允许所述存取。本发明还提供了一种利用配备智能识别卡设备(CAD)的设备通过网络在一通信链路上将来自一服务器(210)的代码传输至一个智能卡的方法,所述方法包括接收包括用于根据权利要求1至6其中之一所述的方法操作一小型注脚设备(400)的指令的代码;以及利用所述配备CAD的设备通过所述通信链路,从所述服务器(210)将所述代码传输至所述智能卡。根据本发明,在相同的逻辑(即虚拟或物理)计算机中运行、相互之间进行保护的两个执行文本,例如每一个包含一个或多个applets程序,可以利用语言机构如面向对象的语言机构以一种控制的、安全方式共享信息。例如安全性能可为逐个对象的进行(objectbyobject)。这样在一个第一执行文本中的方法可访问在一个第二执行文本中的一个第一对象A,而不能访问在一个选择性基础上的第二执行文本中的一个第二对象B。根据本发明的一个示范性实施例,一个增强型Java虚拟机(VM)提供了某个运行期间的检查,可对在VM中试图通过执行文本的访问进行检查。可由VM自动进行检查或者由具有来自VM支持的程序编辑器对检查进行编码。可使用语言级通信机构来完成此工作。在此方面,可以穿过执行文本完成对象访问而利用语言也可以以相同的方式完成其它对象访问。这些运行时检查提供了防护/安全的一个第二维(dimension),其超出了JavaTM语言和平台已经提供的防护/安全性能。这些机构提供了防止例如因程序错误(例如当一个数据不能被所有文本访问时而指定其为“公共”(全局)的,)引起的安全漏洞的保护措施。它们也允许对共享进行精细的控制(例如选择对象进行共享或者选择applet进行共享)。本发明也涉及与本发明的其它部分相关的计算机程序产品和载波。在参考了附图以及下面对本发明的详细描述后,本发明的前述及其它特点、各个方面和优点会变得更加清楚。本发明的特性和优点通过下面的描述中会变得更加清楚图1为配备一个智能识别卡设备的一个计算机和与智能识别卡设备一起使用的一个智能卡的示意图;图2为配备了一智能识别卡设备并与一个网络相连接的一个计算机的示意图;图2为配备了一个智能识别卡设备并与一个网络相连接的一个计算机的示意图;图3是现有技术中一个小型注脚设备如一个智能卡的一个示范性硬件结构;图4显示了在现有技术中完成的正在被主体访问的对象;图5是一个示范性安全模型,它可用来对本发明的各个实施例进行解释;图6为根据本发明的一个方面展示了通过一个防火墙或文本屏障分离执行文本的方框图;图7表示用于实现本发明的一个软件结构;图8为根据本发明的一个方面实施一个防火墙的一个安全实施过程的流程图;图9为根据本发明的一个方面展示了通过一个防火墙访问对象的一个方框图;图10展示了通过一个防火墙访问串联对象的方框图;图11为在一个文本中的一个主体(principal)允许穿过一个防火墙进入另一个文本进行访问的过程的流程图;图12展示了使用一个进入点对象允许穿过一个防火墙进行访问的方框图;图13展示了使用一个全局数据结构如一个阵列穿过一个防火墙进行访问的方框图;图14展示了使用一个超级文本(supercontext)允许经一个防火墙进行访问的方框图;图15展示了使用共享接口对象允许经一个防火墙进行访问的方框图;图16为一个允许经一个防火墙进行访问的一个安全实施过程的流程图;图17为展示图16中块1620具体细节的流程图;图18展示了一个示范性执行(implementation)图17中块1629的流程图。符号及命名下面依据在一个计算机或计算机网络上执行的程序步骤而进行详细的描述。这些过程的描述和说明是本领域技术人员使用的、将其工作的实质最有效地传达给本领域其他技术人员的手段。在此的程序通常被构思成导致一个期望的结果的一个独立顺序的步骤。这些步骤需要物理量的物理操作。通常,虽然不是必需的,这些物理量以能够被存储、传送、合并、比较以及其它操作的电或磁信号的形式出现。为了通常使用的原因,将这些信号称为比特、值、元件、符号、字母、术语、数字或其它有时证明是很方便的。然后应注意的是所有这些和相似的术语都是与适当的物理量相联系并且仅仅是应用到这些物理量上的方便标记。进一步而言,执行的操作通常指的是如加或者比较,其通常与一个操作员进行的智力活动是相联系的。在大多数情况下,在此描述的构成本发明的部分的任何运算中,一个操作员的能力是不必需的或者不需要的;该运算是机器运算。用于执行本发明的运算的有用的机器包括通用的数字计算机或者其它计算设备。本发明也涉及执行这些运算的设备。可专门地制造出这些设备从而能满足所要求的目的或者其包括一个通用的计算机,该计算机可被存储在计算机中的一个计算机程序有选择地激活或者重新配置。在此出现的程序过程不是固定的与一个特定的计算机或者其它设备相联系。可以将各种通用的机器与根据在此的教导而编成的程序一起使用,或者能证明更为便利的制造一个更为专门的设备来执行所需的方法步骤。这样的各种机器所需的结构将在下文的描述中出现。具体实施例方式附加在本说明书之后的附录是一个标题为《JAVACARD运行时环境2.1说明书》的文件的一个未出版的草稿。该草稿文件提供了对本发明实施例的进一步详细描述并通过参考该草稿文件而将其作为本说明书的一个主要部分。虽然在下文中描述的创造性技术是以智能卡的文本为例子的,但是该例子仅仅是为了展示,而不能用来限制本发明的范围。图l展示了一个计算机120和一个智能卡100,该计算机120配备一个智能识别卡设备110,该智能卡与智能识别卡设备110一起使用。在操作中,智能卡100被插入到智能识别卡设备110中,通过在智能卡100表面上可访问的一组触点105提供了电源及数据连接。当将智能卡插入时,智能识别卡设备110的配合接触会与表面除点105相互连接从而使智能卡上电并允许与设备上的处理器和存储器进行通信。图2展示了配备一个智能识别卡设备的一个计算机如图1中的120与一个网络200相连接。与一个网络相连接的是多个其它计算设备,如服务器210。有可能在使用智能卡装备设备120在网络200上将数据和软件加载到一个智能卡中。该类型(nature)的下载包括被加载到一个智能卡以及数字现钞上的applet程序或其它程序和根据电子商务及其它应用而使用的其它信息。用于控制智能识别卡设备和智能卡的处理部件的指令和数据可被存储在易失存储器或非易失存储器中,或可在通信线路如包含指令和/或数据的一个载波上被直接接收。进一步而言,网络例如可以是一个LAN或者WAN,诸如互联网和其它网络。图3是现有技术中一个小型注脚设备如一个智能卡的一个示范性硬件结构。如图3所示,一个处理器300与主存储器310互连,该主存储器300可包括只读存储器315和/或随机存取存储器316。处理器也与一个第二存储器320如EEPROM和一个输入/输出330如一个串口相连接。可以看到该类型(nature)的小型注脚设备非常简单。图4展示了在现有技术中完成的被主体(principal)正访问的对象。如图4所示,物理设备400如小型注脚设备可在其内包含一个或多个处理机(虚拟或物理),该处理机在一个执行文本420上运行。执行文本例如可为与一个特定的applet程序相联系的一个文本。在执行文本中的一个或多个主体(principal)430(例如applets或应用程序)可在执行文本之内搜索访问其它对象。只要在执行文本之内发生访问,该访问将被允许并且一切都正常运行。图5是一个示范性安全模型,它可用来对本发明的各个实施例进行解释。它仅是可被利用的许多模型中的一个并且是用于该目的的一个常规模型。在该模型中,一个主体(principal)500(有时也称为实体)试图在一个对象例如对象520上实施一个操作(action)510。可对主体(principal)、对象和/或试图实施的一个操作进行安全检查。在图5中展示了两种类型的对象,主体(principal)可对该两种类型的对象产生操作。这些包括数据对象(如数据1和数据2(520,520′))和实体530。一个主体(principal)可对任何这些对象进行操作或试图进行操作。实体530是主动的,而数据是被动的。从主体(principal)到一个主动实体的图表线也被标记为“操作”,但与一个数据对象上的操作相比,这是一个更为复杂和随机的综合操作,例如作一个函数调用或者程序(method)调用或者传送一个信息。与利用数据的情况一样,由操作系统实施的一个安全检查可使用主体(principal)本身、实体本身和/或操作类型。进一步而言,被激活的主体可实施其自己额外的安全检查。这些可为人们所希望的复杂并且可以使用主体(principal)本身、实体的本身、操作和/或其他任何有用的信息。在一个面向对象系统(例如JavaCardTM平台)中,“实体”典型的是数据和实体的一个联合体。当一个主体(principal)试图访问一个对象的域(field)时,这是一个数据访问一由一个相当简单安全检查保护的一个相当简单的操作。当一个主体(principal)试图访问一个对象的程序(method)时,这是一个实体访问,该实体访问在操作及安全检查中可以是随机的综合。图6为根据本发明的一个方面展示通过一个防火墙或文本屏障分离执行文本的方框图。物理设备400和计算机410与图4中相同的项目相一致。一个执行文本420展示了在文本之内一个试图访问对象440的主体(principal)430。该访问通常都会成功。然而执行文本420也展示了一个试图穿过一个文本屏障600访问执行文本620的主体(principal)630。通常如操作635穿过文本屏障600处的X636标记,那样将禁止该访问。图7表示用于实现本发明的一个软件结构。该软件结构是一个运行时(runtime)环境700。通常使用一个用于小型注脚设备的操作系统710。在本发明的一个示范性实施例中,一个虚拟机720在操作系统之上运行。虚拟机可以是一个JavaCardTM虚拟机或者其它虚拟机。一个标准虚拟机的容量可以被扩展从而能提供此处所描述的附加功能或者提供分离模块功能。虚拟机720可包括一个能提供访问一个运行时系统740访问通道的解释程序或本地执行块730。运行时系统包括用于管理一个面向对象实施的对象的对象系统750。图中还展示了三个文本760、770、780。每一个文本通过执行文本之间的一个文本屏障(有时也称为一个防火墙)与其它的文本相分离。在一个特定的实施例中,文本760是一个超级文本。即文本760具有从属文本770和780所没有的特权和容量,大致包括产生进入点对象或全局数据结构的特权以及访问从属文本770和780内的对象的特权。每一个对象与一个特定的文本相联系。所述的文本拥有与其相联系的每一个对象。运行时系统740提供了一种用于唯一地识别文本的手段和一种指定并确认当前执行文本的手段。对象系统750提供了一个用于将对象与其所属的文本相联系的机构。例如运行时系统740可鉴别文本具有一个唯一的名称,相应地,对象系统750通过将文本名称记录在对象头中而将对象与该文本相联系。对象头中的信息不能由面向对象的编程语言写成的程序来访问,而仅由虚拟机720本身可以。可选择的是,运行时系统740可通过将存储空间分割成分离的区域,每一个分离的区域用于一个特定的文本来识别文本,相应地,对象系统750可通过将对象的存储器分配到该文本存储空间中而将对象与该文本相联系在一起。图8为根据本发明的一个方面实施一个防火墙的一个安全实施过程的流程图。当一个主体(principal)调用一个对象上的一个操作时(800),将做一个检查来确认该对象是否在主体(principal)的文本之内(810)。如果不在其内,则将禁止该操作(840)。否则允许该操作进行(830)。这是文本屏障或防火墙的最简单的形式。在一个特定的实施例中,如果对象位于文本请求访问的名称空间和存储空间之外,通过实施一个安全异常而将禁止操作发生(840)。图9为根据本发明的一个方面展示了通过一个防火墙访问对象的一个方框图。图9与图6大致相似。然而图9也展示了主体(principal)900为了在对象910上实施操作905而去搜索访问对象910。根据本发明,操作905被允许经访问点920而穿过防火墙,而不是具有被防火墙600阻挡的访问通道,在该访问通道上操作635被禁止,这样尽管事实是主体(principal)和对象位于不同的执行文本中,主体(principal)900也可在对象910上实施操作905。参考附图12-18在下文中对访问点920之后的机构进行说明。注意访问点920可以与阻塞的访问通道如X636共存。这样访问点920可以提供通过文本屏障600精细的共享控制(逐个对象的安全性)。当对象访问900被初始化时,当前的文本设置是文本420。如果对象91O是一个数据对象,操作950就是一个简单的数据访问并且在第二文本620中不执行代码。如果对象910是一个实体对象,操作905将导致执行对象的代码,该代码是在第二文本中被执行的。为了在正确的文本620中执行对象91O的代码,虚拟机410实施了一个文本转换。文本转换将当前的文本设置改变为文本620并且当前的文本设置的前值被保存下来,这样该值可在以后被恢复。在返回时,虚拟机必须将当前文本设置的值恢复为其前值。图10展示了通过一个防火墙访问串联对象的方框图。图10展示了三个执行文本1000、1010、1020。在执行文本1中主体(principal)1030搜索调用执行文本2中的对象1050上的一个操作1035,并通过文本屏障600上的访问点1070而完成上述访问。在执行文本2中的对象1050具有一个对象访问1040,该对象访问1040可搜索访问在执行文本3内的对象1060上的一个操作1045。通过使用分离执行文本2和3的文本屏障600内的访问点而完成上述访问。执行文本2中的对象1050具有另一个对象访问1090,该对象访问1090可以调用位于同一个执行文本即执行文本2内的一个对象1095上的一个操作。操作1035和1045都导致了如对图9的解释中所描述的文本转换。但因为操作1095不穿过文本屏障,对其执行时不需要文本转换,因此不会发生文本转换。图11为在一个文本中的一个主体(principal)允许穿过一个防火墙进入另一个文本来访问的过程的流程图。该过程基本上具有三个步骤。在执行文本2中,产生一个将被访问的对象并被指定为可共享(1100)。在执行文本1中,主体(principal)获得一个执行文本2中的对象的一个基准地址(reference)(1110)。然后在执行文本1的主体(principal)调用在文本2中的被指定为可共享的对象上的一个操作(1120)。关于如在图11的项目1100中所述的将一个已产生的对象识别或分配为可共享的,根据本发明的一个特定实施例,可通过包括在一个对象表示的头内的一个可共享属性来完成上述工作。由面向对象的编程语言所编写的程序不能访问一个对象头内的信息,但仅VM本身可以。获得另一个文本内的一个对象的一个基准地址是访问另一个文本内的一个对象的一个特例。提供访问另一个文本内的一个对象的访问通道的一个机构可以使得其它对象也能被访问。例如,调用另一个文本内的一个对象的程序(method)可以向一个不同的文本之内的一个第二对象反馈一个基准地址。需要一个附加的机构来允许得到一个不同的文本中的一个对象的一个初始基准地址。在一个特定的实施例中,可使用一个公共API来得到某公知的进入点对象的基准地址。一旦得到了一个不同文本内的一的对象的初始基准地址,可从该对象上获得进一步的基准地址,由此继续下去。根据本发明有四个穿过一个文本屏障获得信息的常规途径。为了穿过一个文本屏障访问一个对象或者穿过一个文本屏障获得将要访问的一个对象的一个基准地址,可以单独使用或者也可以联合使用这些途径(1110)。在图12-18中对这些途径进行了描述。图12展示了使用一个进入点对象允许穿过一个防火墙进行访问的方框图。如图12所示,在文本770(文本1)中的一些对象1200希望访问到超级文本760中的信息。在一个特定的实施例中,一个超级文本760包含至少一个进入点对象1210。进入点对象1210可被公布(publish)成为一个公共API的部分或者通过一个公布(publish)的API使得进入点对象1210可间接地得到(如根据在前描述的机构并参考图11),这样从属于超级文本的每一个文本可与超级文本的进入点对象进行通信(可以理解的是在其他实施例中,进入点对象可以由一个文本容纳而不是超级文本容纳)。图13展示了使用一个全局数据结构穿过一个防火墙进行访问的方框图。在这个途径中,超级文本760产生一个全局数据结构如一个全局阵列。在特定的实施例中,超级文本760是能被允许产生一个全局数据结构的唯一文本(可以理解的是在其他实施例中,全局数据可以由一个文本容纳而不是超级文本容纳)。依据全局数据的状态,每一个文本770和780可对全局数据结构进行读和写。这样由一个文本写入到全局数据结构内的信息可被另一个文本读出。例如该机构可用来在文本之间传送二进制数据或者对象的基准地址。图14展示了使用一个超级文本(supercontext)特权允许经一个防火墙进行访问的方框图。在图14中,超级文本760内的一个对象穿过分离两个文本的文本屏障搜索访问文本780。依据与超级文本相联系的特权,超级文本760可以调用文本780内的任何程序(method)以及可以访问包含在文本780内的任何数据。图15展示了使用共享接口对象允许经一个防火墙进行访问的方框图。一个可共享的接口形成了一组可共享的接口程序(method)。一个可共享的接口对象是一个能实施在一个共享接口中形成的至少一组程序(method)的一个对象。在图15中,文本2(780)中的对象1210是一个可共享的接口对象。如果对象访问1200的主体(principal)被对象1210授权可进行访问,在另一个文本770中的一个对象访问1200可调用对象1210上的任何可共享的程序(method)。在下文中参考图18进一步讨论该授权。可以理解的是,与本发明相一致的一个虚拟机可以提供的功能超出了在前的虚拟机所能提供的功能,在前的虚拟机可以是如在《JavaTM虚拟机说明书》(JavaTMVirtualMachineSpecification)中所描述的虚拟机。特别地,与本发明相一致的虚拟机提供了实施或者便于一个安全实施过程的功能,该过程允许穿过一个防火墙进行访问。在下文中参考图16-18对该过程进行讨论。需要注意的是任何可穿过防火墙的进行访问的途径都是适用的,包括但不限制于上面参考图12-15所描述的四个途径。图16为一个允许经一个防火墙进行访问的一个安全实施过程的流程图。当一个主体(principal)试图调用一个对象上的操作时(1600),将会做一检查以确认该对象是否在主体(principal)的文本之内(1610)。如果是(1610-Y),将允许进行操作(1630)。如果不是(1610-N),将做一检查以确认主体(principal)的操作是否允许在对象上实施(1620)。如果是(1620-Y),将允许进行操作(1630)。如果不是(1620-N),则不允许进行操作。在特定的实施例中排除了(throw)一个安全异常(1640)。图17为展示图16中块1620具体细节的流程图。如果对象没有位于主体(principal)的文本之内(1610-N),将采取多个测试1621、1622、1623、……1629以便弄清楚主体(principal)的操作是否允许在对象上进行。这些测试可以在一个虚拟机面向对象实现(implementation)中由虚拟机单独完成或者由虚拟机和对象共同完成。如果任何一个测试结果是通过,将允许进行操作(1630)。然而如果所有的测试都是不能通过(162X-NO),将禁止进行操作。在一个特定的实施例中,一个安全异常将被排除掉(1640)。这些测试涉及参考图12-15讨论的允许进行的访问。图18展示了一个示范性实现(implementation)图17中块1629的流程图,其中与图15中描述的访问程序(accessmethod)一起使用。在一个测试如829或者1629中,一个虚拟机检查对象是否是一个共享对象1810。如果不是(1810-N),测试失败。然而如果是(1810-Y),虚拟机将调用对象0上的一个程序(method)A(1820)。如果对象0上的程序(method)A确认主体(principal)是被授权的(1830),将通过测试并允许进行访问。否则测试失败(1850)。这样允许授权文本(authorizationtext)被编成对象本身的代码。虽然利用一个智能卡执行(implementation)对本发明进行了描述,然而本发明可以应用到具有小型注脚的其他设备上,而不仅仅是智能卡。具有小型注脚的设备通常被认为是那些在存储或者在计算能力或速度方面受限制或约束的设备。这些小型注脚设备包括边界扫描设备、场可编程设备、寻呼机和移动电话以及其它许多设备。通常,小型注脚设备是资源约束型计算设备和系统,其中执行文本的安全内运行是令人关注的。因为其有限的资源,这种小型注脚设备将约束施加到安全手段的执行上。因为资源约束,在一个虚拟机执行中,必须与多个虚拟机相反地来使用一个单独的虚拟或物理机。本发明也可以被应用到具有较大注脚设备上,其中本发明的特征可证明是有益的。例如当使用servlets并且如果在它们之间具有共享的对象时,本发明可证明是优点的。即一些桌面系统有益地使用本发明的技术。JavaTM语言和平台适合于本发明,然而具有某种特征的任何语言或平台将都会很好的适合于实施本发明。这些特征包括类型(type)安全、指针安全、面向对象的、动态链接的和基于虚拟机的。不是所有的上述这些特征需要在一个特定的实施例中出现。在一些实施例中,可以使用缺少一个或多个这些特征的语言或平台。一个“虚拟机”可以在比特(虚拟机)或者硅(实际/物理机)中实现。虽然本发明描述了逐个对象的安全模式,但也可以使用其他途径如逐个类的安全模式。虽然详细地描述和展示了本发明,但可以很清楚地理解的是这只是展示和举例的方式而不是用来限制的方式,本发明的精神和范围仅由附后的权利要求及其等效(theirequivalents)进行限制。JavaTMCardTM运行时环境(JCRE)2.1说明书第2草稿SunMicrosystem,Inc.901SanAntonioRoadPaloAlto,CA94303USA650960-1300第2草稿,1998年12月14日版权所有1998SunMicrosystem公司901SanAntonioRoad,PaloAlto,CA94303USA在该文件中的版权属于SunMicrosystem公司。SunMicrosystem公司据此授权用户在SUN公司的知识产权之下免费的公用性的、不可转让的、世界范围的、限制的许可(没有从属许可的权利)的情况下仅为了内部评估的目的来使用本说明书,上述SUN公司的知识产权是使用JavaTMCardTM运行时环境(JCRE)2.1说明书的必不可少的。除了该限制的授权外,用户没有本说明书的权利、资格、利益并且用户没有权利为了商业目的来使用本说明书。限制性权利的图标符号由美国政府进行的使用、复制或公开都将受到FAR52.227-14(g)(2)(6/87)和FAR52.227-19(6/87)或DFAR52.227-7015(b)和DFAR227-7202(a)的限制。SUN公司没有对本软件的适应性作出明示的或者暗示的保证,所述暗示保证包括但不限制于对商业能力、特定目的的适应性或者非侵权的暗示保证。SUN公司对于许可人的由于使用、修改或者传播本软件或对其进行衍生而遭受的任何破坏不负责任。商标Sun,thesunlogo,SunMicrosystem,JavaBeana,JDK,Java,JavaCard,HotJavaViews,VisualJava,Solaris,NEO,Jeo,Netra,NFS,ONC,ONC+,OpenWindows,PC-NFC,EmbeddedJava,PersonalJava,SNM,SunNetManager,Solarissunberstdesign,Solstice,SunCore,SolarNet,SunWeb,SunWorkstation,TheNetworkIsTheComputer,ToolTalk,Ultra,Ultracomputing,Ultraserver,WhereTheNetworkIsGoing,SunWorkShop,Xview,JavaWorkShop,theJavaCoffeeCuplogo,VisualJava是SunMicrosystem公司在美国和其他国家的商标和注册商标。在没有任何明示或暗示的保证的情况下“照原样”提供的公开,所述暗示包括但不限制于对商业能力、特定目的的适应性或者非侵权的暗示保证。本说明书可包括技术误差或者印刷错误。在此定期地将改进加入到本说明书中;这些改进将成为出版物的新版组成部分。SUNMICROSYSTEM公司在任何时候都会对本公开无所描述的产品和/或程序作出改进和/或变化。目录前言1.概述2.JavaCard虚拟机的生存期3.JavaCardApplet生存期3.1安装程序3.2选择程序3.3交易程序3.4取消选择的程序3.5电源中断和复位4.瞬时对象4.1清除瞬时对象的事件5.选择5.1默认的Applet5.2SELECT命令处理5.3Non-SELECT命令处理6.Applet隔离和对象共享6.1Applet防火墙6.1.1文本和文本转换6.1.2对象所有权6.1.3对象访问6.1.4防火墙保护6.1.5静态域(staticfield)和程序6.2穿过文本的对象访问6.2.1JCRE进入点对象6.2.2全局阵列6.2.3JCRE特权6.2.4共享接口6.2.5确认在前文本6.2.6可共享接口细节6.2.7获得可共享接口对象6.2.8对象访问特性6.3瞬时对象和applet文本7.处理和完整性7.1完整性7.2处理7.3处理持续时间7.4嵌套处理7.5撕裂(tear)或者复位处理失败7.6中止一个处理7.6.1计划中止7.6.2JCRE中止7.6.3清除JCRE响应性7.7瞬时对象7.8提交容量8.API主题8.1APDU类8.1.1T=0表示传出数据的传输8.1.2T=I表示传出数据的传输8.2安全性和隐秘包8.3JCS系统类9.虚拟机主题9.1资源失败10.Applet安装器10.1安装器10.1.1安装器的执行10.1.2安装器AID10.1.3安装器APDU10.1.4安装器特性10.1.5安装器特权10.2最近安装的Applet10.2.1安装参数11.API常量前言JavaTMCardTM技术融合了Java编程语言的一部分和一个运行时环境,该运行时环境被最优化的用于智能卡以及相关的、小内存嵌入式设备。JavaCard技术的目的在于为资源约束型的智能卡提供Java软件编程的许多益处。本文件为JavaCard运行时环境(JCRE)2.1的一个说明书。JavaCard设备的一个销售商可提供JCRE的一个执行(inplementation)。在本说明书中一个JCRE执行(inplementation)是指基于JavaCard技术说明书的JavaCard虚拟机(VM)的一个销售商的执行(implementation)、JavaCard应用程序接口(API)或其它部件。一个参考执行是由SunMicrosystem公司生产的一个执行。为JavaCard平台所编写的Applets被称为JavaCardapplets。谁使用本说明书?本说明书的目的在于帮助JCRE执行者创造出一个执行、开发出一个规范从而对JavaCard技术说明书进行扩展或者对JavaCard运行时环境(JCRE)进行扩展。本说明书目的还在于帮助JavaCardapplets程序开发人员能更好的理解JavaCard技术说明书。在你阅读本说明书之前在你阅读本指南之前,应熟悉Java编程语言、JavaCard技术说明以及智能卡技术。一个较好地帮助你熟悉Java技术和JavaCard技术的地方是SunMicrosystem公司的互联网站,位置在http//java.sun.com本说明书是如何组织的第1章“JCRE的范围和任务”给出了所需JCRE执行的服务的一个综述。第2章“虚拟机的生存期”定义了虚拟机的生存期。第3章“Applet生存期”定义了一个Applet程序的生存期。第4章“瞬时对象”对瞬时对象作了一个综述。第5章“选择”描述了JCRE如何处理applet选择。第6章“Applet分离和对象共享”描述了applet分离和对象共享。第7章“处理和完整性”对在处理过程中的完整性作了一综述。第8章“API主题”描述了一个JCRE所要求的API功能,但没有在《JavaCard2.1API说明书》中完全说明。第9章“虚拟机主题”描述了虚拟机的具体细节。第10章“Applet安装器”对Applet安装器作一个综述。第11章“API常量”提供了常量的数值,该数值在《JavaCardAPI2.1说明书》中没有给出。术语表是一个单词及其定义的清单,可帮助你来使用该手册。相关文件及出版物在该手册中参考了各种文件或产品。你应该具有下列文件《JavaCard2.1API第2草稿说明书》,SunMicrosystem公司《JavaCard2.0语言子集和虚拟机说明书》,1997年10月13日最后修订版1.0《JavaCardApplet开发人员指南》,SunMicrosystem公司《Java语言说明》JamesGosling,BillJoy,GuyL.Steele著,Addison-Wesley1996年,ISBN0-201-63451-1《Java虚拟机说明》TimLindholm,FrankYellin著,Addison-Wesley1996年,ISBN0-201-63452-X《Java类库注释参考(Java系列)》PatrickChan,RosannaLee著,Addison-Wesley,2卷,ISBN0201310023和0201310031《ISO7816说明书》第1~6部分EMV’96用于支付系统的集成电路卡说明书。1.概述JavaCard运行时环境(JCRE)2.1包括JavaCard虚拟机(VM)、JavaCard应用程序接口(API)类(及工业方面的扩展)和支持服务。本文件及JCRE2.1对JavaCard技术所需的JCRE功能进行了介绍。JavaCard技术的任何执行将提供该必需的特性和环境。2.JavaCard虚拟机的生存期在一个PC或者工作站中,Java虚拟机作为一个操作系统过程(OSprocess)来运行。当操作系统过程被终止时,Java应用程序及其对象将自动被破坏掉。在JavaCard技术中,虚拟机(VM)的生存期是卡的生存期。即使对卡进行断电,存储在卡上的大多数信息都是会被保存下来的。永久存储技术(如EEPROM)使一个智能卡在被断电时也能存储信息。因为VM和在卡上产生的对象用来表示永久的应用信息,所以JavaCardVM虚拟机似乎可以永远地运行下去。当被断电时,VM仅仅是暂时地停止。当卡下一次被复位时,VM再一次启动并从永久存储器中恢复出其在前的对象头。除了其永久的属性外,JavaCard虚拟机几乎与Java虚拟机一样。卡的初始化时间是屏蔽之后的时间,在卡的个性化和发行时间之前。在卡的初始化时,JCRE也进行初始化。由JCRE产生的结构对象在虚拟机的生存期内存在。因为虚拟机和JCRE的执行生存期跨过了卡的CAD通信期,所以有applet产生的对象的生存期也将跨过CAD通信期(CAD的意思是识别卡设备或者卡阅读器。卡通信器为当将卡插入到CAD中、加电、与CAD交换APDU流。当卡从CAD中拿出时卡通信期随之结束。)。具有该性质的对象被称之为永久对象。当出现下列情况时,JCRE执行者将使一个对象为永久型调用Applet注册程序。JCRE存储了applet对象的实例的一个基准地址(reference)。JCRE执行者将确保类applet的实例是永久型的。一个对象的一个基准地址被存储在任何其他永久对象的一个域中或者存储在一个类的静态域中。该需求源于需要保留JCRE的内部数据结构的整体性。3.JavaCardApplet生存期对本说明而言,一个JavaCardapplet的生存期在此处开始它被正确的调入到卡的存储器中、链接以及准备执行。(在本说明书的剩余部分,applet指的是为JavaCard平台而编写的一个applet程序)用applet注册程序注册的applet在卡的生存期内存在。JCRE通过applet的公用程序安装、选择、取消选择和处理与applet进行相互操作。一个applet将实施一个静态的安装程序。如果安装程序没有被实施,将不能产生applet的对象或者对其进行初始化。一个JCRE执行将调用一个如下描述的applet安装、选择、取消选择和处理程序。当将一个applet安装在智能卡上时,JCRE为每一个产生的applet实例调用静态安装程序一次。JCRE不直接调用applet的构造器。3.1安装程序当安装被调用时,不存在applet的对象。在applet之内的安装程序的主要任务是产生applet类的一个实例并注册该实例。可以产生applet在其生存期内所需要的所有其他对象,这样是可行的。也可以完成由一个CAD选择和访问applet所需的的任何其他的准备。安装程序从输入的字节阵列参数的内容中获得了初始化参数。典型的,一个applet产生多个对象并用预定值对其进行初始化,设置一些内部状态变量并调用applet注册程序来指定使用AID(applet标示符在ISO7816-5中有定义)来进行选择。当调用applet注册程序结束而没有发生异常时,该安装被认为是成功的。如果安装程序不调用applet注册程序或者在applet注册程序被调用之前在安装程序内部出现了一个异常或者applet注册程序发生了异常,则认为安装没有成功。如果安装没有成功,当JCRE重新进行控制时将执行一个总的清除。即所有的永久对象将返回到它们调用安装程序之前的状态。如果安装是成功的,JCRE将applet标记为可供选择的。3.2选择程序applet被保留在一个挂起状态直到它们被确切地选定。当JCRE接收到一个SELECTAPDU,其中名称数据与applet的AID相匹配,此时会发生选择。选择导致一个applet成为当前被选定的applet。在调用SELECT之前,JCRE将取消对在前选定的applet的选择。JCRE通过调用applet取消选定程序将该取消选定指示给applet。JCRE通过调用applet选择程序来对其进行选择。当从调用选择程序中返回的是假或者出现了异常时,applet拒绝被选定。如果applet返回的是真,在接下来的调用处理程序中将实际的SELECTAPDU命令提供给applet,这样applet可以检查APDU的内容。Applet可以像其处理任何其它APDU命令一样处理SELECTAPDU命令。它可利用数据对SELECTAPDU进行响应(处理程序处有详细描述)或者它通过利用适当的SW(返回的状态字)产生一个IOS异常而来标记错误。SW和选择性响应数据被返回到CAD中。当在选择程序期间被调用时,applet.selectingapplet程序返回的是真。在后继的处理程序期间applet.selectingapplet程序将继续返回真,该处理程序被调用来处理SELECTAPDU命令。如果applet拒绝被选定,JCRE将向CAD返回一个APDU响应状态字ISO.SW_APPLET_FAILED。当选定失败时,JCRE状态被设定可指示出没有applet被选定。在成功选定之后,通过处理程序将所有的后继的APDU传送给当前选定的applet。3.3处理程序所有的APDU被JCRE接收,该JCRE将APDU类的一个实例传递给当前选定的applet的处理程序。注意在调用处理程序之前一个SELECTAPDU可能在当前选定的applet中引起一个变化。在正常的返回中,JCRE自动将添加0x9000作为对已经由applet传送的任何数据的完成响应SW。在处理期间的任何时间内,applet可以产生一个具有一个适当SW的ISO异常,在此情况下JCRE将捕捉到异常并将SW返回给CAD。如果在处理期间产生任何其他的异常,JCRE将捕捉到异常并将状态字ISO7816_SW_UNKNOWN返回给CAD。3.4取消选定的程序当JCRE接收到一个SELECTAPDU命令并且在命令中名称与一个applet的AID相匹配时,JCRE调用当前选定的applet的取消选定程序。这允许applet执行任何清除操作,在为了允许执行一些其它applet时需要该清除操作。在取消选定程序期间当进行调用时applet.selectingApplet程序将会返回一个“假”。取消选定程序产生的异常被JCRE捕获,但applet被取消了选定。3.5电源中断和复位当卡从CAD中拿出时或者如果出现一些其它的机械或者电故障,会发生断电。当对卡以及卡复位键(冷启动或热启动)进行重新加电时,JCRE将确保瞬时数据将被复位到默认值。当电源中断(或者发生复位)时,进行中的处理将被中止。当电源中断(或者发生复位)时,被选定的applet将隐含地被取消掉。(在此情况下,取消选定程序没有被调用)。如果JCRE执行了一个默认的applet选择(参看5.1段),默认的applet被选定为当前选定的applet,并调用默认applet的选定程序。否则,JCRE将其状态设定成表示没有applet被选定的状态。4.瞬时对象applet有时需要包含临时(瞬时)数据的对象,该数据在整个CAD通信期不必是永久的。JavaCard不支持Java瞬时关键词(keywordtransient)。然而JavaCard技术提供了产生具有对象的原始成分或基准地址的瞬时阵列的程序。术语“瞬时对象”是一个误称。它可被错误地解释为该对象本身是瞬时的。然而只有对象的域的内容(除了长度域)具有瞬时属性。与Java编程语言中的任何其他对象一样,JavaCard平台中的瞬时对象在其被参考的期间内一直存在堆栈局部变量一个类静态域在另一个存在的对象中的一个域在JavaCard平台中的一个瞬时对象具有下列需要的特性在某事件发生时(参见下文)一个瞬时对象的域将被清除为域的默认值(零、假或者null)。为了安全的原因,一个瞬时对象的域绝不会被存储在“永久存储技术”中。使用当前的智能卡技术为例,瞬时对象的内容可被存储在RAM中,但决不会被存储在EEPROM中。该需求的目的在于允许使用瞬时对象来存储通信期密钥。写入到一个瞬时对象的域中将不会产生性能恶化(performancepenalty)。(以当前的智能卡为例,瞬时对象的内容可被存储在RAM中,而非瞬时对象的内容可被存储在EEPROM中。RAM技术典型的比EEPROM具有一个更快的写周期)。写入到一个瞬时对象的域中将不会受到“处理”的影响。即一个中止处理(abortTransaction)将绝不会导致将一个瞬时对象的一个域恢复为一个前值。该特性使得瞬时对象对于经常修改的小量临时applet数据是理想的,而不必在CAD或选择通信期内进行保存(preserve)。4.1清除瞬时对象的事件永久对象被用于保持状态,该状态在卡复位期间是将要被保留的。当产生一个瞬时对象时,两个事件中的一个被指定导致其域被清除。CLEAR_ON_RESET瞬时对象用于保持在applet选择期间的将要被保留的状态,而不是在卡复位期间。CLEAR_ON_DESELECT瞬时对象用于保持当一个applet被选定时必须保留的状态,但不是在applet选定或者卡复位期间。两个清除事件的细节如下CLEAR_ON_RESET——当卡进行复位时对象的域被清除。当对一个卡进行上电时,也导致一个卡复位。注意在对一个卡进行断电之前,不必对瞬时对象的域进行清除。然而一旦断电后,必须保证这样的域的在前内容不能被恢复。CLEAR_ON_DESELECT——只要任何applet被取消选定,对象的域将被清除。因为一个卡的复位隐含地取消选定了当前选定的applet,CLEAR_ON_DESELECT对象的域也被指定给CLEAR_ON_RESET的相同的事件给清除掉。只有一个SELECT命令被处理时,当前选定的applet被明显地取消了选定(其取消选定程序被调用)。当前选定的applet被取消了选定,然后所有CLEAR_ON_DESELECT瞬时对象的域将被清除,而不管SELECT命令是否失败的选择了一个applet。选择了一个不同的applet。重新选择了一个相同的applet。5.选择卡接收到来自CAD的APDU形式的用于服务的请求。JCRE使用SELECTAPDU来指定一个当前选定的applet。一旦被选定,一个applet将接收所有的后继APDU,直到applet被取消选定。当下面的任一种情况发生时不会有当前选定的applet卡被复位并且没有applet被预指定为默认的applet。当试图选择一个applet时一个SELECT命令失败。5.1默认的applet通常applet只有通过一个成功的SELECT命令才能被选定,一些智能卡CAD应用程序要求在每一个卡复位之后具有一个隐含选定的默认applet。其特性是1.卡被复位之后(或者重新上电,是复位的一种形式)JCRE将对其执行初始化并检查确认其内部状态是否表明一个特定的applet是默认的applet。如果是,JCRE将该applet设置为当前选定的applet并且调用applet的选择程序。如果applet的选择程序产生一个异常或者返回一个“假”,则JCRE将其状态设置为表明没有applet被选定。(在默认applet选定期间不调用applet处理程序,因为没有SELECTAPDU)。当在卡复位时一个默认的applet被选定,将不调用其处理程序。2.JCRE确保ATR已经被发送并且智能卡准备接受APDU命令。如果一个默认的applet被成功地选定,APDU命令可被直接的传送给该applet。如果一个applet没有被选定,则只对SELECT命令进行处理。在JavaCardAPI2.1中没有对用于指定一个默认的applet的机构进行定义。它是一个JCRE执行细节并留给单个的JCRE执行者(ItisaJCREimplementationdetailandislefttotheindividualJCREimplementers)。5.2SELECT命令处理SELECTAPDU命令用于选定一个applet。其特性是1.SELECTAPDU总是由JCRE进行处理而不管applet是否处以激活状态。2.JCRE对其内部表进行检索以便找到一个匹配的AID。JCRE将支持选定一个applet,其中在SELECT命令中具有全AID。JCRE执行者可自由地增强器JCRE来支持其它选择标准。这样的一个例子是通过在ISO7816-4中说明的部分AID匹配的选择。特定要求如下注意一个星号表示如在ISO7816中的二进制比特编号。最该有效位=b8,最低有效位=b1。a)AppletSELECT命令使用CLA=0x00,INS=0xA4。b)AppletSELECT命令使用“通过DF名称进行选择”,因此P1=0x04。c)P1的任何其它值意味着没有一个applet被选定。当前选定的applet对APDU进行处理。d)JCRE将支持准确的DF名称(AID)选定,即P2=%b0000xx00。(无须注意b4,b3*)e)所有其它部分DF名称SELECT选项(b2,b1*)是JCRE的独立执行(JCREimplementationdependent)f)所有文件控制信息选项代码(b4,b3*)将由JCRE进行支持并由applet进行翻译和处理。3.如果没有发现AID匹配a.如果没有当前选定的applet,JCRE以状态码0x6999(SW_APPLET_SELECT_FAILED)对SELECT命令进行响应。b.否则,SELECT命令被转送(forwardedto)到当前选定的applet的处理程序上。在此点处将会发生一个文本转入到applet文本中(applet文本在6.1.1段中有定义)。applet可使用SELECTAPDU命令用于它们自己内部的SELECT处理。4.如果发现一个匹配的AID,JCRE准备选择一个新的applet。如果有一个当前选定的applet,则通过调用其取消选定程序对其进行取消选定。在此点处会发生一个文本转入到被取消选定的applet文本中。JCRE文本在从取消选定中退出时被恢复。5.JCRE设定新的当前选定的applet。通过调用其选定程序对新的applet进行选择并且会发生一个文本转入到新的applet文本中。a.如果applet的选择程序产生一个异常或者返回一个“假”,则JCRE的状态被设定,这样就没有applet被选定。JCRE以状态码0x6999(SWAPPLETSELECTFAILED)对SELECT命令进行响应。b.然后新当前选定的applet的处理程序与SELECTAPDU被调用而作为一个输入参数。发生了一个文本转入到applet文本中。如果没有匹配的AID,SELECT命令被转送(forward)到当前的选定applet中用于作为一个普通的appletAPDU命令进行处理。如果有一个匹配的AID并且SELECT命令失败,JCRE将总是进入到没有applet被选择的状态。如果匹配的AID与当前选定的applet相同,JCRE将仍经过取消选定applet的的过程,然后选择该applet。重新选择可能失败,将智能卡保持在没有applet选定的状态。5.3非SELECT命令处理当接收到一个非SELECTAPDU并不具有一个当前选定的applet时,JCRE用状态码0x6999(SW_APPLET_SELECT_FAILED)来响应该APDU。当接收到一个非SELECTAPDU并具有一个当前选定的applet时,JCRE调用当前选定的applet处理程序将APDU作为一个参数进行传送。这将引起从JCRE文本到当前选定文本的一个文本转换。当处理程序存在时,VM转回到JCRE文本。JCRE传送一个响应APDU并等待新一个命令APDU。6.applet分离和对象共享JCRE的任何执行将支持文本和applet的分离。分离意味着没有一个applet可对在另一个文本中的一个applet的域或者对象进行访问,直到其它的applet明确地提供了一个用于访问的接口。6.1applet防火墙在JavaCard技术内的applet防火墙是一个运行时强制的保护,并与Java技术保护相分离。Java语言保护仍将应用到JavaCardapplet中。Java语言确保增强对强打字(strongtyping)和保护属性。在JavaCardVM中总是强制执行applet防火墙。这样允许VM在运行时自动执行一个附加的安全检查。6.1.1文本和文本转换防火墙实际上将JavaCard平台的对象系统分割成分离保护的对象空间,该分离保护的对象空间被称为文本。防火墙是在一个文本和另一个文本之间的边界。JCR俄将分配和管理用于每一个安装在智能卡上的applet的一个applet文本(然而可参看6.1.1.2段中对组文本的讨论)。另外,JCRE保持其自己的JCRE文本。该文本与一个applet文本很相似,但它具有特殊的系统特权,这样它可执行拒绝applet文本执行的操作。在任何点处,VM内仅有一个激活的文本(它被称为当前激活文本)。为了确认是否允许访问,在运行时在当前激活文本处要对所有访问对象的字节码进行检查。当不允许进行访问时,将产生一个java.lang.安全异常。如6.2.8所述在执行调用型字节码期间当遇到某定义好的条件时,VM执行一个文本转换。在前的文本被推到一个内部堆栈上,一个新文本变成当前激活文本,在该新文本中执行被调用的程序。在从该程序中退出时,VM执行一个恢复文本转换。(程序的调用程序)的最初文本从堆栈中被上托出,并被恢复为当前激活文本。文本转换可以相互嵌套。嵌套的最大深度依赖于可供使用的VM堆栈空间的量。在JavaCard技术中大多数的程序调用不会导致一个文本转换。文本转换仅在调用某程序或者从其返回以及从这些程序退出的异常期间才能发生(参见6.2.8)。在一个文本转换程序调用期间,表示当前激活文本的数据的一个附加片段被推到返回栈中。当该程序被退出时,该文本即被恢复。文本及文本转换的进一步的细节在本章在后的节中进行讨论。6.1.1.1组文本一个JavaCardapplet的每一个实例通常定义了一个分离的文本。但在JavaCard2.1技术中介绍了组文本的概念。如果在一个单Java包中包含了不止一个applet,则它们共享相同的文本。另外,相同applet类的所有实例共享相同的文本。换句话说,在一个组文本中的两个applet实例之间没有防火墙。在6.1.1节中对文本和文本转换的讨论中,假定每一个applet实例与一个分离的文本相联系。在JavaCard2.1技术中,文本被比较来增强防火墙(contextarecomparedtoenforcefirewall),实例AID被推到堆栈中。另外,它不仅在文本转换时发生,而且也在当在相同的包内控制从由一个applet所述的一个对象转向由另一个实例所属的一个对象时发生。6.1.2对象所有权当产生一个新对象时,它与当前激活的文本相联系。但是当对象被例化时,当前激活文本中applet实例拥有该对象。一个applet实例或者JCRE拥有一个对象。6.1.3对象访问通常,即当拥有文本是当前激活文本时,一个对象仅可被拥有其的文本所访问。防火墙可阻止在一个不同的文本中的另一个applet访问一个对象。在执行期间,在一个对象被访问的每一次会将对象的拥有者文本与当前激活文本进行比较。如果他们不匹配,则不执行访问并产生一个安全异常(SecurityException)。当使用对象基准地址执行下列字节码时,一个对象可被访问getfield,putfield,invokevirtual,invokeinterface,athrow,<T>aload,<T>astore,arraylength,checkcast,instanceof<T>表示各种类型的阵列字节码,如baload,sastore等。该清单包括这些在JavaCardVM中执行的字节码的任何特殊或者最优化形式,如getfield_b,sgetfield_s_this等。6.1.4防火墙保护JavaCard防火墙为最频繁的预先安全提供保护开发者的错误或者设计疏漏将敏感数据“漏”到另一applet中。一个applet可从一个公开访问位置得到一个对象基准地址,但如果对象属于一个不同的applet,防火墙可确保安全。防火墙也为防止错误代码提供了保护。如果将错误代码加载到一个智能卡上,防火墙仍可保护对象免受该代码访问。JavaCardAPI2.1指定了文本和防火墙的基本最低保护要求,因为在对applet开发者不透明的方式中经支持这些特性。开发者将意识到对象的特性、API以及与防火墙相关的异常。JCRE执行者不(arefreetoimplement)执行防护墙的安全机构之外的附加安全机构,只要这些机构对applet是透明的并不改变VM的外部可视操作。6.1.5静态域和程序也应该指出的是类不属于文本。当一个类静态域被访问时,没有可被执行的运行时文本检查。当一个静态程序被调用时,也不具有一个文本转换(相似的,invokespecial不会引起文本转换)。可从任何文本访问公共静态域和公共静态程序与其调用程序一样,可在在相同的文本中执行静态程序。在静态域中参考的对象仅是常规对象。它们属于产生他们的程序(whom),标准防火墙访问规则应用(rulesapply)。如果需要穿过多个applet文本对它们进行共享,则这些对象需要成为可共享的接口对象(SIOs)(参见下面的6.2.4段)。当然,常规的Java技术保护仍对静态域和程序进行了加强。另外,当applet安装上时,安装程序要核实与一个外部静态域和程序链接的每一个试图是否被允许。关于链接的安装和细节不是本说明书讨论的范围。6.1.5.1可选择的静态访问检查JCRE可执行一个选择的运行时检查,该运行时检查是冗余的并具有由一个检验者实施的约束。当代码干扰基本语言约束(fundamentallanguagerestriction)如调用另一个类和报表中的一个私有程序或者其他地址冲突时,一个JavaCardVM将会进行检测。6.2穿过文本访问对象为了使applet与其它applet或者JCRE相互操作,提供了一些定义明确的上安全的机构,这样一个文本可以访问属于另一个文本的一个对象。在JavaCardAPI2.1提供了这些机构并在下面的节中对其进行讨论JCRE进入点对象全局阵列JCRE特权可共享接口6.2.1JCRE进入点对象安全计算机系统将具有一种用于非特权用户处理(对资源的一个子集是受限制的)请求由“特权”系统实施的系统服务的方式。在JavaCardAPI2.1中,可使用JCRE进入点对象来完成。这些是由JCRE文本所属的对象,但是它们已经被标记为包含进入点对象程序。防火墙可保护这些对象不被applet访问。进入点标记允许从任何文本中调用这些对象的程序。当其发生时,则执行一个转到JCRE文本的文本转换。这些程序是大门,通过该大门applet可请求特权的JCRE系统服务。在此具有两类JCRE进入点对象临时JCRE进入点对象象所有的JRE进入点对象一样,可从任何applet文本处调用临时JCRE进入点对象的程序(method)。然而,这些对象的基准地址不能被存储在类变量、实例变量、或阵列组件中。JCRE检测并限制试图存储这些对象的基准地址作为防火墙功能的一部分从而来防止未授权的再使用。APDU对象和所有的JCRE拥有的异常对象是临时JCRE进入点对象的例子。永久JCRE进入点对象象所有的JRE进入点对象一样,可从任何applet文本处调用永久JCRE进入点对象的程序(method)。另外,这些对象的基准地址可被存储并可自由地再使用。JCRE拥有的AID实例是永久JCRE进入点对象的例子。JCRE对下列各项负责确认将何种特权服务提供给applet。定义包含用于这些服务的进入点程序的类。产生这些类的一个或者多个实例。指定这些实例作为JCRE进入点对象。指定JCRE进入点对象为临时型或者永久型。产生这些对象的基准地址提供给applet所需。注意通过防火墙只有这些对象的程序(method)可被访问。这些对象的域仍被防火墙所保护并且仅可由JCRE文本进行访问。只有JCRE本身可制定进入点对象以及它们是否是临时或永久的。JCRE执行者对执行机构负责,该机构指定JCRE进入点对象并将其变成临时或者永久的点对象。6.2.2全局阵列一些对象的全局属性要求可从任何applet文本处对其进行访问。防火墙通常可防止以一个柔软方式(flexiblemanner)使用这些对象。JavaCardVM允许将一个对象指定为全局对象。所有全局阵列是临时全局阵列对象。这些对象属于JCRE文本,但是可从任何applet文本处访问。然而这些对象的基准地址不能被存储在类变量、实例变量或者阵列组件中。JCRE检测并限制试图存储这些对象的基准地址作为防火墙功能的一部分从而来防止未授权的再使用。对于附加安全性,只有阵列可被指定为全局型而且只有JCRE本身才可指定全局阵列。因为applet不能产生它们,没有定义API程序。JCRE执行者对执行可指定全局阵列的机构负责。在本说明书出版时,只有在JavaCardAPI2.1中需要的全局阵列是applet安装程序的APDU缓冲和字节阵列输入参数。注意由于其全局状态,在JCRE接收一个新的APDU命令之前,当选定一个applet时,API指定APDU被清除为零。这样能防止一个applet潜在的敏感数据通过全局APDU缓冲“漏”到另一个applet中。可从一个共享的接口对象文本处访问APDU缓冲并且APDU缓冲适合于通过applet文本传送数据。applet对可从APDU缓冲处访问的秘密数据的保护负责。6.2.3JCRE特权因为它是一个“系统”文本,JCRE文本具有一个特定的特权。它可调用卡上任何对象的一个程序。例如假定对象X属于appletA。通常只有A可以访问X的域和程序。但是也允许JCRE文本调用X的任何程序。在这样的调用过程中,从JCRE文本到拥有X的applet文本间会发生一个文本转换。注意JCRE可以访问X的程序和域。程序访问是JCRE进入到一个applet文本中的过程(mechanism)。虽然JCRE可以通过防火墙调用任何程序,但是它只调用在applet类中定义的选择、处理、取消选定和获取可共享接口对象(getShareableInterfaceObject)(参见6.2.7.1)。当一个卡复位之后VM开始运行时,JCRE文本是当前激活文本。JCRE文本是“根”文本并且将当前激活文本或底文本保存在堆栈上。6.2.4可共享接口在JavaCard2.1中可共享接口是一个新特性,它能使applet进行相互操作。一个可共享的接口定义了一组共享的接口程序。可从一个applet文本处调用这些接口程序,即使执行它们的对象属于另一个applet文本。在该说明书中,执行一个可共享接口的一个类的一个对象实例被称为一个可共享接口对象(SIO)。为了拥有文本,SIO是一个其域和程序可被访问的标准对象。对于任何其他文本,SIO是可共享接口的一个实例,只有在可共享接口中定义的程序才能被访问。SIO的所有其它域和程序由防火墙保护。可共享接口提供了一个用于内applet通信的安全机构,如下1.为了产生一个供给另一applet的对象,appletA首先定义了一个可共享的接口SI。一个可共享接口延伸了接口javacard.framework.Shareable。在可共享接口中定义的程序SI代表了appletA使得可访问其它applet的服务。2.AppletA定义了一个执行可共享接口SI的类C。C执行在SI中定义的程序。C也可定义其它程序和域,但是这些是由applet防火墙保护的。只有在SI中定义的程序可访问其它applet。3.AppletA产生类C的一个对象实例O。O属于appletA,防火墙允许A访问O的任何域和程序。4.为了访问appletA的对象O,appletB产生类型SI(typeSI)的一个对象参考SIO。5.AppletB调用一个特定的程序(JCSystem.getAppletShareableInterfaceObject,在6.2.7.2中有定义)来请求来自appletA的一个共享接口对象基准地址。6.AppletA通过Applet.getAppletShareableInterfaceObject接收到请求者B的请求和AID,并确认它是否能与appletB一起共享对象O。7.如果appletA同意与applet共享,A用O的一个基准地址对请求进行响应。该基准地址被投射到可共享的类型上(thisreferenceiscasttotypeShareable),这样O的域和程序都是不可见的。8.AppletB从appletA处接收到对象基准地址,将其投射到类型SI上并将其存储在对象基准地址SIO中。即使SIO实际上指向(referto)A的对象O,SIO是SI类型的。只有在SI中定义的可共享接口程序对于B才是可见的。防火墙防止O的其它域和程序被B访问。9.AppletA可通过调用SIO的可共享接口程序中的一个来请求来自applet的服务。在调用期间,JavaCardVM执行一个文本转换。最初的当前激活文本(B)被保存在一个堆栈上,实际对象(O)的拥有者(A)的文本变成新的当前激活文本。A在A的文本中执行可共享接口程序(SI程序)。10.SI程序可通过JCSystem.getPreviousContextAID程序找出其客户(B)的AID。在6.2.5段中对此进行了描述。该程序确认它是否执行用于appletB的服务。11.因为文本转换,防火墙允许SI程序可访问对象O的所有域和程序以及由A拥有的任何其它对象。同时,防火墙可防止该程序访问由B拥有的非共享的对象。12.SI程序可以访问由B传送的参数并能为B提供一个返回值。13.在返回期间,JavaCardVM执行一个恢复性文本转换。最初当前激活文本从堆栈中托出并再次成为当前文本。14.因为文本转换,防火墙再次允许B访问其任何对象,并防止B访问由A拥有的非共享的对象。6.2.5确定在前的文本当一个applet调用JCSystem.getPreviousContextAID时,JCRE返回applet实例的实例AID,该实例AID在上一次文本转换时是激活的。6.2.5.1JCRE文本JCRE不具有一个AID。如果一个applet调用getPreviousContextAID程序,当从JCRE文本处直接进入到applet文本中时,该程序将返回零(null)。如果applet从一个程序处调用getPreviousContextAID,既可从applet本身内部访问该程序或者通过一个可共享的接口由一个外部applet处进行访问,它将在执行调用者AID鉴别之前检查零(null)返回。6.2.6可共享接口细节一个可共享接口只是将标记接口jacacard.framework.Shareable延伸(直接或者间接)的接口。该可共享接口与由RMI设备使用的远程接口的概念上很相似,在远程接口中穿过一个本地/远程边界来调用接口程序。6.2.6.1JavaCard可共享接口延伸可共享标记接口的接口具有特殊的属性通过一个文本转换,穿过JavaCardapplet防火墙边界调用接口程序。可共享接口用于识别所有可共享的对象。需要通过applet防火墙进行被共享的任何对象将直接或间接地执行该接口。只有在一个可共享接口中指定的这些程序通过防火墙是有用的。执行类可以执行任何数量的可共享接口并能延伸其他可共享执行类。象任何Java平台接口一样,一个可共享接口只是定义了一组服务程序。一个服务提供者类宣称它“执行”可共享接口并为接口的每一个服务程序提供执行。一个服务客户类通过得到一个对象来参考访问服务,如果需要将其投射到可共享接口类型上并调用接口的服务程序。在JavaCard技术中的可共享接口将具有下列属性当一个可共享接口内的一个程序被调用时,对象拥有者的文本发生一个文本转换。当该程序退出时,调用程序的文本被恢复。异常处理被增强,这样当栈框架展开发生一个异常时,当前激活文本被正确地恢复。6.2.7获得可共享接口对象当一个客户applet调用了属于一个服务器applet的一个SIO的一个可共享接口程序时,则完成了内部applet通信。为了完成此项工作,必须具有一种方式使得客户applet能在第一位置从服务器applet处得到SIO。JCRE提供了一种使其成为可能的机构。applet类和JCSystem类提供了使一个客户请求来自服务器的服务的程序。6.2.7.1Applet.getShareableInterfaceObject程序该程序是通过服务器applet实例来完成的。通过JCRE调用该程序使其处于一个客户applet和服务器applet之间,其中客户applet请求使用属于另一个applet的一个对象,服务器applet使得其对象可供用于共享。默认的特性将返回null,其表明一个applet不参与内部applet通信。一个试图从另一个applet被调用的服务器applet需要时该程序无效(override)。该程序将对客户AID(clientAID)和参数进行检查。如果客户AID(clientAID)不是期望的AD中的一个,该程序将返回一个null。相似的,如果参数没有被识别或者如果不允许其用于客户AID(clientAID),则程序也返回null。否则applet将返回客户请求的可共享接口类型(type)的一个SIO。服务器applet不必对所有客户用相同的SIO来响应。服务器支持多种类型的可共享接口,该可共享接口用于不同的目的,服务器可使用客户AID(clientAID)和参数来确定哪种类型的SIO返回给客户。6.2.7.2JCSystem.getAppletShareableInterfaceObject程序(method)JCSystem类包括了getAppletShareableInterfaceObject程序,其是通过一个客户applet被调用而来与一个服务器applet进行通信。JCRE将执行该程序而表现如下1.JCRE在其内部applet表进行检索来查找具有服务器AID(serverAID)的程序。如果没有找到,则返回null。2.JCR调用该applet的getAppletShareableInterfaceObject程序并传送调用程序的服务器AID(serverAID)和参数。3.服务器applet发生了一个文本转换,如在前一节中所描述的继续执行getShareableInterfaceObject。服务器applet返回一个SIO(或者null)。4.getAppletShareableInterfaceObject对其调用程序返回一个相同的SIO(或者null)。对于增强的安全性,执行对于客户而言不可能知道是下列哪一个条件引起了返回一个零(null)值服务器AID(serverAID)没有找到。服务器applet没有参与内部applet通信。服务器applet没有识别出服务器AID(serverAID)和参数。服务器applet与其客户不进行通信。服务器applet与由参数指定的客户不进行通信。6.2.8类和对象访问特性当执行下列Java字节码时可访问一个静态类域getstatic,putstatic当使用对象基准地址执行下列Java字节码时可访问一个对象getfield,putfield,invokevirtual,invokeintefface,athrow,<T>aload,<T>astore,arraylength,checkcast,instanceof<T>表示各种类型的阵列字节码,如baload,sastore等。该清单包括这些在JavaCardVM中执行的字节码的任何特殊或者最优化形式,如getfield_b,sgetfield_s_this等。在执行由JavaVM指定的字节码之前,JavaCardVM将在基准地址的对象上执行一个访问检查。如果访问被拒绝,则产生一个安全异常(SecurityException)。由JavaCardVM执行的访问检查以来与参考的对象、字节码和当前激活文本的类型和拥有者。在后续的节中对其进行描述。6.2.8.1访问静态类域字节码getstatic,putstatic如果JCRE是当前激活文本,则允许进行访问。另外,如果字节码是putstatic并且正被存储的域是一个基准地址类型,以及正在存储的基准地址是一个临时JCRE进入点对象或者一个全局阵列的一个基准地址,则拒绝进行访问。否则,允许进行访问。6.2.8.2访问阵列对象字节码<T>aload,<T>astore,arraylength,checkcast,instanceof如果JCRE是当前激活文本,则允许进行访问。另外,如果字节码是aastore并且正被存储的组件是一个基准地址类型,以及正在存储的基准地址是一个临时JCRE进入点对象或者一个全局阵列的一个基准地址,则拒绝进行访问。另外,如果阵列属于当前激活文本,则允许进行访问。另外,如果阵列被指定为全局型的,则允许进行访问。否则,拒绝进行访问。6.2.8.3访问类实例对象域字节码getfield,putfield如果JCRE是当前激活文本,则允许进行访问。另外,如果字节码是putfield并且正被存储的域是一个基准地址类型,以及正在存储的基准地址是一个临时JCRE进入点对象或者一个全局阵列的一个基准地址,则拒绝进行访问。另外,如果对象属于当前激活文本,则允许进行访问。否则,拒绝进行访问。6.2.8.4访问类实例对象程序字节码invokevirtual如果对象属于当前激活文本,则允许进行访问。文本被转换到了对象拥有者的文本。另外,如果对象被指定为一个JCRE进入点对象,则允许进行访问。文本被转换到了对象拥有者的文本(将是JCRE)。另外,如果JCRE是当前激活文本,则允许进行访问。文本被转换到了对象拥有者的文本。否则,拒绝进行访问。6.2.8.5访问标准接口程序字节码invokeinterface如果对象属于当前激活文本,则允许进行访问。另外,如果JCRE是当前激活文本,则允许进行访问。文本被转换到了对象拥有者的文本。否则,拒绝进行访问。6.2.8.6访问可共享接口程序字节码invokeinterface如果对象属于当前激活文本,则允许进行访问。另外,如果对象的类执行了一个可共享的接口,并且如果正被调用的接口延伸了可共享接口,则允许进行访问。文本被转换到了对象拥有者的文本。另外,如果JCRE是当前激活文本,则允许进行访问。文本被转换到了对象拥有者的文本。否则,拒绝进行访问。6.2.8.7产生一个异常对象字节码athrow如果对象属于当前激活文本,则允许进行访问。另外,如果对象被指定为一个JCRE进入点对象,则允许进行访问。另外,如果JCRE是当前激活文本,则允许进行访问。否则,拒绝进行访问。6.2.8.8访问类实例对象字节码checkcast,instanceof如果对象属于当前激活文本,则允许进行访问。另外,如果JCRE是当前激活文本,则允许进行访问。另外,如果对象被指定为一个JCRE进入点对象,则允许进行访问。另外,如果该JCRE是当前激活文本,则允许进行访问。否则,拒绝进行访问。6.2.8.9访问标准接口字节码checkcast,instanceof如果对象属于当前激活文本,则允许进行访问。另外,如果JCRE是当前激活文本,则允许进行访问。否则,拒绝进行访问。6.2.8.10访问可共享接口字节码checkcast,instanceof如果对象属于当前激活文本,则允许进行访问。另外,如果对象的类执行了一个可共享的接口,并且如果正被投射到(checkcast)的对象或者对象是一个延伸了可共享接口的一个接口的一个实例,则允许进行访问。文本被转换到了对象拥有者的文本。另外,如果JCRE是当前激活文本,则允许进行访问。否则,拒绝进行访问。6.3瞬时对象和applet文本CLEAR_ON_RESET类型的瞬时对象与永久对象的特性相似,因为当当前激活文本与对象的拥有者(在对象被产生时的当前激活文本)相同时才能对它们进行访问。当当前激活文本是当前选定的applet文本时,才能产生CLEAR_ON_DESELECT类型的瞬时对象或者对其进行访问。当当前激活文本不是当前选定的applet文本时,如果调用任何产生瞬时工厂程序(makeTransientfactorymethod)产生一个CLEAR_ON_DESELECT类型的瞬时对象,则该程序将产生一个具有理由码ILLEGAL_TRANSIENT的一个系统异常(SystemException)。如果当当前激活文本不是当前选定的applet文本而试图去访问CLEAR_ON_DESELECT类型的瞬时对象时,则JCRE将产生一个一个安全异常(SecurityException)。属于相同包的部分的applet共享相同的组文本。来自一个包的每一个applet实例共享具有来自相同包的所有其他实例的所有其对象实例(它包括属于这些applet实例的CLEAR_ON_DESELECT类型和CLEAR_ON_RESET类型瞬时对象)。当相同的包内的applet实例是当前选定文本时,在该包之内的属于任何applet实例的CLEAR_ON_DESELECT类型瞬时对象是可被访问的。7.处理和完整性一个处理是更新永久数据的一个逻辑组。例如,将一定量的钱从一个帐户转入到另一个帐户是一个银行处理。对于处理而言很重要的是完整性(atomic)或者所有的数据域被更新或者都不被更新。JCRE对于可分性处理提供了充分的支持,这样如果处理没有正常完成时,卡数据被恢复到其最初预处理状态。该机构可防止事件的破坏,如一个处理期间的断电,如果一个处理的所有的步骤没有正常完成,也能防止引起数据讹误的程序错误。7.1完整性完整性定义了在更新一个单对象或者类域或者阵列组件期间发生一个中止、失败或者重大异常时卡如何对永久存储内容的处理。如果在更新期间电源被切断,applet开发者将依赖当电源恢复时域或者阵列组件包含的内容。JavaCard平台确保对一个单永久对象或者类域的任何更新都是完整的。另外,JavaCard平台为永久阵列提供了单组件级完整性。即如果在更新一个数据单元(在一个对象/类或者一个阵列组件内的域)期间智能卡断电时,该数据单元在CAD通信期内将被保留,该数据单元将被恢复在其在前值。一个程序也确保对于多个数据单元的块更新的完整性。例如Util.arrayCopy程序的完整性确保所有字节可被正确地复制,否则其目标阵列将被恢复到其在前的字节组。一个applet可能不需要阵列更新的完整性。为此目的而提供了Util.arrayCopyNonAtomic程序。即使在进行的处理中被调用时,它也不使用处理提交缓冲。7.2处理一个applet可能需要完整的更新在多个不同对象中的多个不同域或者阵列组件。或者所有的都被正确地更新,或者所有的域/组件被恢复到其在前的值。JavaCard平台支持一个处理模型,在该模型中,一个applet可以指定具有调用JCSystem.beginTransaction程序的一个完整更新组的一个起点。在此点之后的每一个对象更新是有条件的更新。域或阵列组件似乎要被更新一读出域/阵列组件产生的其最近的关系值一但更新尚未被提交。当applet调用JCSystem.commitTransaction时,所有的有条件更新被提交到永久存储器中。如果在完成JCSystem.commitTransaction之前电源断电或者发生一些其它的系统失败,所有的有条件更新的域或者阵列组件被恢复到其在前的值。如果applet碰到内部错误或者决定取消处理,它可通过调用JCSystem.abortTransaction来有计划地撤销有条件的更新。7.3处理持续时间当JCRE重新获得对来自applet的选择、取消选定、过程或安装程序的返回的控制时,总是结束一个处理。不论是具有一个applet的commitTransaction的调用的一个处理正常结束还是处理的中止(由applet编程或者由JCRE默认的),都是真实的。对于处理中止的细节,可参考7.6节。处理持续时间是在调用JCSystem.beginTransaction和调用commitTransaction或处理中止之间的一个处理时间。7.4嵌套处理模型当前假定嵌套处理是不可能的。在一个时间内只有一个在进行中的处理。如果当一个处理在进行中时调用了JCSystem.beginTransaction,则会产生一个TransactionException。提供了JCSystem.TransactionDepth程序从而能确定一个处理是否是在进行中。7.5撕裂(tear)或者复位处理失败如果在一个处理进行中电源断电或者卡被复位或者发生一些其它系统失败,则JCRE将恢复到由于在前调用了JCSystem.beginTransaction其所有的域和阵列组件被有条件更新的在前的值。在电源供电、复位或失败恢复后对卡进行重新初始化时,JCRE可自动执行该操作。JCRE确认这些对象中哪一个是被有条件地更新并将其恢复。注意在由于电源断电或者卡被复位引起的失败的处理期间产生的实例使用的对象空间可被JCRE恢复。7.6中止一个处理处理可由一个applet或者JCRE中止。7.6.1程序性中止如果一个applet遇到一个内部问题或者决定取消处理,它可通过调用JCSystem.abortTransaction来撤销有条件的更新。如果该程序被调用,所有由于在前调用JCSystem.beginTransaction而有条件更新的域和阵列组件被恢复到其在前值,JCSystem.TransactionDepth值被复位为0。7.6.2由JCRE中止如果一个applet从具有一个正在进行的处理的选择、取消选定、过程或者安装程序处返回,JCRE将自动中止处理。如果从具有一个正在进行的处理的选择、取消选定、过程或者安装程序处得到一个返回,JCRE将其视为发生了一个异常。7.6.3清除JCRE的职责只有当在正在被中止的处理期间产生的对象实例被定位以及转换为null时,才能将对象实例删除。JCRE将确保在中止的处理期间产生的对象的基准地址等于一个null的基准地址。7.7瞬时对象只有永久对象的更新参与处理。对瞬时对象的更新决不会被撤销,而不管它们是否在“一个处理的内部”。7.8提交容量因为平台资源是有限的,在一个处理期间可累加的有条件更新数据的字节数是有限的。JavaCard技术提供了确认在执行时多少提交容量是可用的程序。提交容量表示了有条件更新数据字节数的有用的一个上限。由于管理的开销,有条件更新数据的实际有用字节数比提交容量低。在一个处理期间如果超过了提交容量,将会产生一个异常。8.API主题本章的主题是对JavaCard2.1API第2草稿版说明书的补充。的一个主题是JavaCardI/O功能,其完全是在APDU类中进行执行的。第二主题是API支持JavaCard安全性和机密技术。JCSystem类封装了API版本级。在API内的处理除非在JavaCard2.1API说明书中特别声明,如果一个处理正在进行中,API类的执行将不初始化或者改变其状态。在API内的资源使用除非在JavaCard2.1API说明书中特别声明,即使当对象实例的拥有者不是当前选定的applet,执行也将支持调用API实例程序。换句话说,除非特别指出,执行将不使用资源如CLEAR_ON_DESELECT类型的瞬时对象。API产生的异常API执行产生的所有异常对象将是临时JCRE进入点对象。临时JCRE进入点对象不能被存储在类变量、实例变量或者阵列组件中(参见6.2.1)。8.1APDU类APDU类封装了穿过卡的串行线对基于I/O的ISO781-4的访问。APDU类被设计成独立于基础的I/O传输协议。JCRE可支持T=0或者T=1传输协议或者都支持。8.1.1T=0表示外发数据传输为了与不支持链接块机构的常规CAD/终端兼容,APDU类允许通过setOutgoingNoChaining方法进行模式选择。8.1.1.1无链接的约束性传输当applet通过调用setOutgoingNoChaining程序请求输出传输的无链接模式时,下列协议序列将在其后注意当使用无链接模式时,调用waitExtension程序将产生一个具有理由码ILLEGAL_USE的APDUException。符号Le=CAD期望的长度Lr=applet通过setOutgoingLength程序对长度设定进行响应。<INS>=等于输入头INS字节的协议字节,它表明所有数据字节将被传输给下一个。<-INS>=输入头INS字节互补的协议字节,它表示正被传输给下一个的约1个数据字节。<SW1,SW2>=如在ISO7816-4中的响应状态ISO7816-4第2个例子Le=Lr1.卡通过使用标准T=0<INS>或<-INS>程序字节机构来发送输出数据的Lr字节。2.卡传送关于Applet.process方法的<SW1,SW2>完成状态。Lr<Le1.卡传送<0x61,Lr>完成状态字节。2.CAD发送具有Le=Lr的GETRESPONSE命令。3.卡通过使用标准T=0<INS>或<-INS>程序字节机构来发送输出数据的Lr字节。4.卡传送关于Applet.process方法的<SW1,SW2>完成状态。Lr>Le1.卡通过使用标准T=0<INS>或<-INS>程序字节机构来发送输出数据的Le字节。2.卡传送<0x61,Lr-Le>完成状态字节。3.CAD发送具有Le<=Lr的GETRESPONSE命令。4.卡通过使用标准T=0<INS>或<-INS>程序字节机构来发送输出数据的(新)Le字节。5.如需要重复步骤2~4从而来发送所需的剩余的输出数据字节(Lr)。6.卡传送关于Applet.process方法的<SW1,SW2>完成状态。ISO7816-4第4个例子在第4个例子中,在下面的初始交换之后来确定Le1.卡发送<0x61,Lr状态字节>。2.CAD发送具有Le<=Lr的GETRESPONSE命令。协议序列的其余部分与如上所述的第2个例子中的相同。如果applet提前中止或者发送不超过Le字节,则可能会发送一个零而不是填写(fillout)由CAD所期望的传输长度。8.1.1.2常规的输出传输当applet没有请求输出传输的无链接模式时(即使用setOutgoing程序),下列的协议序列将在其后可以使用任何ISO7816-3/4T=0兼容的协议传输序列。注意waitExtension可由在连续调用sendBytes或sendBytesLong程序之间的applet调用。waitExtension程序将利用0x60程序字节请求等待时间(ISO7816-3)的一个附加的操作。8.1.1.3附加的T=0需求在任何时候,当使用T=0输出传输协议时并且对来自卡的<0x61,xx>一个响应状态的反应,APDU类在等待一个来自CAD的GETRESPONSE命令,如果CAD发送了一个不同的命令,sendBytes或sendBytesLong程序将产生一个具有理由码NO_TO_GETRESPONSE的异常APDUException。由此点处调用sendBytes或sendBytesLong将导致一个具有理由码ILLEGAL_USE的异常APDUException。如果在产生NO_TO_GETRESPONSE异常之后由applet产生一个ISOException异常,JCRE将放弃在其理由码中的响应状态。JCRE将利用新接收到的命令和恢复的APDU分配重新开始APDU过程。8.1.2T=1表示外发数据传输8.1.2.1无链接的约束性传输当applet通过调用setOutgoingNoChaining程序请求输出传输的无链接模式时,下列协议序列将在其后符号Le=CAD期望的长度Lr=applet通过setOutgoingLength程序对长度设定进行响应。转送协议序列将不使用块链接。特别是在传输期间(ISO7816-3)M-比特(大于数据比特)将不被设定在I块的PCB中。换句话说,整个外发数据(Lr字节)将在一个I块中传输。(如果applet提前中止或者发送不超过Lr字节,则可能会发送一个零而不是填写(fillout)由CAD所期望的传输长度。)注意当使用无链接模式时,调用waitExtension程序将产生一个具有理由码ILLEGAL_USE的APDUException异常。8.1.2.2常规的输出传输当applet没有请求输出传输的无链接模式时(即使用setOutgoing程序),下列的协议序列将在其后可以使用任何ISO7816-3/4T=1兼容的协议传输序列。注意waitExtension可由在连续调用sendBytes或sendBytesLong程序之间的applet调用。waitExtension程序将发送一个具有INF单元的WTX请求的S块,该请求等价于在T=0模式中1个附加操作等待时间的一个请求(ISO7816-3)。8.2安全性和加密包在下列类中的getInstance程序返回在请求算法的调用applet的文本中的一个执行实例javacard.security.MessageDigestjavacard.security.Signaturejavacard.security.RandomDatajavacard.crypto.Cipher一个JCRE的执行可执行0或者多个列在API中算法。当请求了一个没有被执行的算法,该程序将产生一个具有理由码NO_SUCH_ALGORITHM的一个CryptoException异常。执行上述类将延伸相应的基本类并执行所有抽象程序(abstractmethod)。与执行实例相联系的所有数据分配将在一个实例构造期间被执行从而能确保在安装applet期间所需资源的任何匮乏将被及早的标记出来。相似的,javacard.security.keyBuilder类的buildKey程序返回一个请求的键类型(keytype)的执行实例。JCRE可执行0或者多个键类型(typesofkeys)。当请求一个没有被执行的键类型时,该程序将产生一个具有理由码NO_SUCH_ALGORITHM的一个CryptoException异常。执行键类型将执行相联系的接口。与键执行实例相联系的所有数据分配将在一个实例构造期间被执行从而能确保在安装applet期间所需资源的任何匮乏将被及早的标记出来。8.3JCSystem类在JavaCard2.1中,getVersion程序将返回(短)0x0201。9.虚拟机主题本章的主题对虚拟机的气节进行讨论。9.1资源失败可恢复的资源条件的缺乏(如堆空间)将导致一个具有理由码NO_RESOURCE的系统异常SystemException。在JCSystem中用于产生瞬时阵列的工厂程序(factorymethod)一个具有理由码NO_TRANSIENT_SPACE的系统异常SystemException,表示缺乏瞬时空间。所有其他(不可恢复的)虚拟机错误如堆栈溢出将导致一个虚拟机错误。这些情况将会引起虚拟机的停机。当发生这样一个不可恢复的虚拟机错误时,一个执行可选择地要求卡在进一步应用中为哑的(mute)或者阻塞的(block)(requirethecardtobemutedorblockedfromfurtheruse)。10.Applet安装器在一个智能卡上使用JavaCard技术的applet安装是一个复杂的主题。JavaCardAPI2.1意图在于为JCRE执行者在其执行时提供尽可能多的自由。然而,需要一些基本的通用说明以便允许安装JavaCardapplet而无需知道一个特定安装器的执行细节。本说明书定义了一个安装器的概念并指出了最小安装要求,以便在可能的安装器执行的一个大范围内取得互用性。Applet安装器是JCRE2.1说明书中的一个可选择的部分。即一个JCRE的执行不必需要包括一个发布之后(post-issuance)的安装器。然而,如果被执行,要求安装器支持在9.1节中说明的特性(behavior)。10.1安装器需要在一个智能卡上使用JavaCard技术安装一个applet的机构被体现在一个被称为安装器的在卡上的组件(on-cardcomponent)。对于CAD,安装器似乎是一个applet。它具有一个AID并且当该AID被一个SELECT命令成功处理时,它将变成当前选定的applet。一旦被选定,安装器与任何其它applet的特性(behave)很相似。象任何其他选定的applet一样,它接收所有的APDU。它的设计说明规定了APDU的各种类型和格式,该APDU期望依照在各种前提下的这些命令的语义接收。它对所有接收的APDU进行响应和处理。对不正确的APDU以一些类型的一个错误条件进行响应。当选定另一个applet时(或者当卡被复位时或者卡被断电时),安装器被取消选定并保持在暂停状态,直到下一次被选定。10.1.1安装器执行在卡上安装器不必像一个applet一样被执行。该需要仅仅是安装器功能是可选择的。该需要的推论是当一个非安装器applet被选定或者没有一个applet被选定时,安装器组件将不能被调用。明显的是,一个JCRE执行者可选择执行安装器作为一个applet。如果是这样,则安装器可被编码来延伸Applet类以及对选择、处理和取消选定程序的调用的响应。但是一个JCRE也可以其他方式执行安装器,只要其能为外界可选择的特性。在该例子中,JCRE执行者具有提供一些其它机构的自由,通过该机构APDU可被传递到安装器代码模块中。10.1.2安装器AID因为安装器是可选择的,它将具有一个AID。JCRE执行者可自由地选择其自己的AID,通过该AID,其安装器被选定。也可以执行多个安装器。10.1.3安装器APDUJavaCardAPI2.1没有指定用于安装器的任何APDU。JCRE执行者在其操作中可以完全自由的选择其自己的APDU命令来指导其安装器。模型是在卡上的安装器被一个运行在CAD上的安装程序驱动。为了成功地安装,该CAD安装程序将能识别智能卡。在卡上选择(SELECT)安装器。通过发送卡安装器的适当APDU来驱动安装过程。这些APDU将包含鉴别信息,能确保安装是被授权的。将applet加载到智能卡的存储器中。将applet代码和已经在卡上的代码相连接的连接信息。发送给applet安装程序(method)的实例初始化参数数据。JavaCardAPI2.1没有详细说明CAD安装程序和在它和安装器之间传送的APDU的细节。10.1.4安装器特性JCRE执行者也定义了其安装器的其它特性,包括安装是否可以被中止,如何实现。如果在安装期间发生一个异常、复位或者断电将如何应对。如果在安装其完成之前另一个applet被选定将如何应对。JCRE将确保如果出现下列情况一个applet不能被成功地安装在来自Applet.register程序的成功返回之前,applet的安装程序产生一个异常。10.1.5安装器特权尽管一个安装器可以作为一个applet来执行,但一个安装器典型的需要“其他applet”所没有的访问特性。例如,根据JCRE执行者的执行,安装器将需要绕过对象系统和/或标准安全而直接对存储器进行读和写。访问属于其他applet或JCRE的对象。调用JCRE的非进入点程序。可以调用一个新安装的applet的安装程序。要求每一个JCRE执行者来确定安装器执行并在其JCRE的执行中按需提供这些特性来支持其安装器。JCRE执行者也对这些特性的安全特性负责,因此在一般的applet中没有这些特性。10.2新安装的applet在安装其和正在安装的applet之间具有一个单接口。在安装器正确地准备了用于执行的applet之后(执行的步骤如加载或者连接),安装器将调用applet安装程序。该程序在Applet类中有定义。将一个applet的安装程序从安装其中调出的准确的机构(precisemechanism)shiyigeJCRE执行器定义的执行细节。然而应有一个文本转换,这样由安装程序执行的任何文本相关的操作在新的applet的文本中被完成而不是在安装器的文本中被完成。安装器也将确保在applet类初始化(<clinit>)程序期间产生的阵列对象也属于新applet的文本。如果完成所有步骤而没有失败或者产生一个异常直到包括从Applet.register程序处的成功返回,则认为一个applet的安装完成。在此点处,安装的applet是可选择的。参数数据的最大长度为32字节。为了安全的原因,在返回之后bArray参数被清零(就像在来自一个applet的处理方法的返回上的APDU缓冲被清零)10.2.1安装参数不同于32字节的最大最大长度,JavaCardAPI2.1不对安装参数字节阵列组段的内容进行任何的指定。它是由applet设计者全部定义的并且可以是任何所需的格式。另外,这些安装参数意在对于安装器是不透名的。JCRE执行者可设计其安装器,这样对一个运行在一个CAD上的安装程序而言可能指定一个可被传送给安装器的任意的(arbitrary)字节阵列。安装器可简单地将该字节阵列转送给bArray参数中的目标applet安装程序。一个典型的执行可定义一个JCRE执行者所有的APDU命令,该命令具有这样的语义“对传送伴随字节阵列的applet安装程序进行调用”。11.API常数在JavaCardAPI2.1参考书中一些API类不具有为其常数指定的值。如果JCRE2.1说明书的执行者指定的常量不一致,则工业范围内的互换性是不可能的。本章为常数提供了所需的值,该所需值在JavaCardAPI2.1说明书中没有说明。javacard.framework.APDU类publicstaticfinalbytePROTOCOL_T0=0;publicstaticfinalbytePROTOCOL_T1=0;javacard.framework.APDUException类publicstaticfinalshortILLEGAL_USE=1;publicstaticfinalshortBUFFER_BOUNDS=2;publicstaticfinalshortBAD_LENGTH=3;publicstaticfinalshortIO_ERROR=4;publicstaticfinalshortNO_TO_GETRESPONSE=0xAA;javacard.framework.ISO7816接口publicfinalstaticshortSW_NO_ERROR=(short)0x9000;publicfinalstaticshortSW_BYTES_REMAINING_00=0x6100;publicfinalstaticshortSW_WRONG_LENGTH=0x6700;publicstaticfinalshortSW_SECURITY_STATUS_NOT_SATISFIED=0x6982;publicfinalstaticshortSW_FILE_INVALID=0x6983;publicfinalstaticshortSW_DATA_INVALID=0x6984;publicfinalstaticshortSW_CONDITIONS_NO_SATIFIED=0x6985;publicfinalstaticshortSW_COMMAND_NOT_ALLOWED=0x6986;publicfinalstaticshortSW_APPLET_SELECT_FAILED=0x6999;publicfinalstaticshortSW_WRONG_DATA=0x6A80;publicfinalstaticshortSW_FUNC_NOT_SUPPORTED=0x6A81;publicfinalstaticshortSW_FILE_NOT_FOUND=0x6A82;publicfinalstaticshortSW_RECORD_NOT_FOUND=0x6A83;publicfinalstaticshortSW_INCORRECT_P1P2=0x6A86;publicfinalstaticshortSW_WRONG_P1P2=0x6B00;publicfinalstaticshortSW_CORRECT_LENGTH_00=0x6C00;publicfinalstaticshortSW_INS_NOT_SUPPORTED=0x6D00;publicfinalstaticshortSW_CLA_NOT_SUPPORTED=0x6E00;<!--SIPO<DPn="42">--><dpn="d42"/>publicfinalstaticshortSW_UNKNOWN=0x6F00;publicstaticfinalshortSW_FILE_FULL=0x6A84;publicfinalstaticbyteOFFSET_CLA=0;publicfinalstaticbyteOFFSET_INS=1;publicfinalstaticbyteOFFSET_P1=2;publicfinalstaticbyteOFFSET_P2=3;publicfinalstaticbyteOFFSET_LC=4;publicfinalstaticbyteOFFSET_CDATA=5;publicfinalstaticbyteCLA_ISO7816=0x00;publicfinalstaticbyteINS_SECLECT=(byte)0xA4;publicfinalstaticbyteINS_EXTERNAL_AUTHENTICATE=(byte)0x82;javacard.framework.JCSystem类publicstaticfinalbyteNOT_A_TRANSIENT_OBJECT=0;publicstaticfinalbyteCLEAR_ON_RESET=1;publicstaticfinalbyteCLEAR_ON_DESELECT=2;javacard.framework.PINException类publicstaticfinalshortILLEGAL_VALUE=1;javacard.framework.SystemException类publicstaticfinalshortILLEGAL_VALUE=1;publicstaticfinalshortNO_TRANSIENT_SPACE=2;publicstaticfinalshortILLEGAL_TRANSIENT=3;publicstaticfinalshortILLEGAL_AID=4;publicstaticfinalshortNO_RESOURCE=5;javacard.security.CryptoException类publicstaticfinalshortILLEGAL_VALUE=1;publicstaticfinalshortUNINITIALIZED=2;publicstaticfinalshortNO_SUCH_ALGOROTHM=3;publicstaticfinalshortINVALID_INIT=4;publicstaticfinalshortILLIGAL_USE=5;javacard.security.Keybuilder类publicstaticfinalbyteTYPE_DES_TRANSIENT_RESET=1;publicstaticfinalbyteTYPE_DES_TRANSIENT_DESELECT=2;publicstaticfinalbyteTYPE_DES=3;publicstaticfinalbyteTYPE_RSA_PUBLIC=4;publicstaticfinalbyteTYPE_RSA_PRIVATE=5;<!--SIPO<DPn="43">--><dpn="d43"/>publicstaticfinalbyteTYPE_RSA_CRT_PRIVATE=6;publicstaticfinalbyteTYPE_DSA_PUBLIC=7;publicstaticfinalbyteTYPE_DSA_PRIVATE=1;publicstaticfinalshortLENGTH_DES=64;publicstaticfinalshortLENGTH_DES3_2KEY=128;publicstaticfinalshortLENGTH_DES3_3KEY=192;publicstaticfinalshortLENGTH_RSA_512=512;publicstaticfinalshortLENGTH_RSA768=768;publicstaticfinalshortLENGTH_RSA_1024=1024;publicstaticfinalshortLENGTH_RSA_2048=2048;publicstaticfinalshortLENGTH_DSA_512=512;publicstaticfinalshortLENGTH_DSA_768=768;publicstaticfinalshortLENGTH_DSA_1024=1024;javacard.security.MessageDigest类publicstaticfinalbyteALG_SHA=1;publicstaticfinalbyteALG_MDS=2;publicstaticfinalbyteALG_RIPEMD160=3;javacard.security.RandomData类publicstaticfinalbyteALG_PSEUDO_RANDOM=l;publicstaticfinalbyteALG_SECURE_RANDOM=2;javacard.security.Signature类publicstaticfinalbyteALG_DES_MAC4_NOPAD=1;publicstaticfinalbyteALG_DES_MAC8_NOPAD=2;publicstaticfinalbyteALG_DES_MAC4_ISO9797_M1=3;publicstaticfinalbyteALG_DES_MAC8_ISO9797_M1=4;publicstaticfinalbyteALG_DES_MAC4_ISO9797_M2=5;publicstaticfinalbyteALG_DES_MAC8_ISO9797_M2=6;publicstaticfinalbyteALG_DES_MAC4_PKCSS=7;publicstaticfinalbyteALG_DES_MAC8_PKCSS=8;publicstaticfinalbyteALG_RSA_SHA_ISO9796=9;publicstaticfinalbyteALG_RSA_SHA_PKCSl=10;publicstaticfinalbyteALG_RSA_MDS_PKCS1=11;publicstaticfinalbyteALG_RSA_RIPEMD160_ISO9796=12;publicstaticfinalbyteALG_RSA_RIPEMD160_PKCS1=13;publicstaticfinalbyteALG_RSA_SHA=14;publicstaticfinalbyteMODE_SIGN=1;publicstaticfinalbyteMODE_VERIFY=2;javacardx.crypto.Cipher类publicstaticfinalbyteALG_DES_CBC_NOPAD=1;publicstaticfinalbyteALG_DES_CBC_IOS9797_M1=2;publicstaticfinalbyteALG_DES_CBC_ISO9797_M2=3;publicstaticfinalbyteALG_DES_CBC_PKCSS=4;publicstaticfinalbyteALG_DES_ECB_NOPAD=5;publicstaticfinalbyteALG_DES_ECB_ISO9797_M1=6;publicstaticfinalbyteALG_DES_ECB_ISO9797_M2=7;publicstaticfinalbyteALG_DES_ECB_PKCSS=8;publicstaticfinalbyteALG_RSA_ISO14888=9;publicstaticfinalbyteALG_RSA_PKCSS=10;publicstaticfinalbyteMODE_DECRYPT=1;publicstaticfinalbyteMODE_ENCRYPT=2;术语表AID是在ISO7816-5中定义的应用标示符的缩写。APDU是在ISO7816-5中定义的应用协议数据单元的缩写。API是应用程序接口的缩写。API定义了调用规范,一个应用程序通过该规范可以访问操作系统和其他服务。Applet在本说明书文本中的applet是一个JavaCardapplet,在JavaCard技术中它是一个选择、文本、功能和安全的基本单元。applet开发者指的是使用JavaCard技术说明书编制一个JavaCardapplet的人。applet防火墙在JavaCard技术中是一个机构,VM可通过该机构防止一个applet对属于另一个applet文本或JCRE文本的对象进行非法访问并进行报告或相反会引起地址冲突。整体性操作是一种操作,该操作或者在整体上全部被完成(如果操作成功),或者在整体上一点都没有被完成(如果操作失败)。整体性指的是一个特定的操作是否是整体的以及在断电或者智能卡从CAD中突然退出的情况下对于适当的数据恢复是否是必需的。ATR是对复位的应答的缩写。一个ATR是在一个复位之后由JavaCard发送的一串字节。CAD是卡识别设备的缩写。CAD是将智能卡插在其中的设备。投射(cast)是从一个数据类型向另一数据类型的明确转换。cJCK是一套来鉴别JavaCard技术规格的执行的兼容性的检验程序。cJCK使用Java测试工具来运行检验程序。类在一个面向对象的编程语言中类是一个对象的原型。一个类可以被认为是一组对象,该组对象具有共同的结构和特性。一个类的结构由表示该类的一个对象状态的类变量来确定,类的特性由一组与类相联系的程序来给定。类涉及类的层次结构。一个类可以是另一个类(超类)的一个特殊化(一个子类),它可具有其它类的基准地址(reference),并且在一个客户-服务器关系中可使用其它的类。文本(参见Applet执行文本)当前激活文本JCRE对当前激活的JavaCardapplet文本进行记录。当一个虚拟程序在一个对象上被调用时,要求并允许进行一个文本转换,当前激活文本被改变成拥有对象的的applet文本。当该程序返回时,对在前的文本进行恢复。调用静态程序对当前激活文本没有影响。当前激活文本和一个对象的共享状态共同确认是否可以允许对一个对象进行访问。当前选定的appletJCRE对当前选定的JavaCardapplet进行记录。在接收到具有该applet的AID的一个SELECT命令时,JCRE将该applet变成当前选定applet。JCRE将所有的APDU命令发送给当前选定的applet。EEPROM是电可擦除只读存储器的缩写。防火墙(参见Applet防火墙)框架(framework)是执行API的类组。它包括核心和延伸包。职责(responsibility)包括APDU、applet选择、管理整体性和安装applet的调度。无用单元收集是一个过程,在执行一个程序期间通过该过程,动态分配存储可自动被收回。实例变量与域一样公知,表是一个对象的内部状态的一个部分。每一个对象都具有其自己的实例变量组。相同类的对象将具有相同的实例变量,但每一个对象具有不同的值。例化在面向对象的编程语言中意思是从其类模板中产生一个特定的对象。它涉及具有由模板设定的类型的一个数据结构的分配以及利用默认值或者有类构造函数提供的值对实例变量的一个初始化。JAR是Java存档文件的缩写。JAR是一个独立于平台的文件格式,它能将许多文件合并到一个中去。JavaCard运行时环境(JCRE)由JavaCard虚拟机、框架以及相联系的本地程序组成。JC21RI是JavaCard2.1基准地址(reference)执行的缩写。JCRE执行者指的是利用JavaCardAPI产生一个特定销售执行(vendor-specificimplementation)的一个人。JCVM是JavaCard虚拟机的缩写。JCVM是OP卡结构的基础。JCVM执行字节代码并对类和对象进行管理。它在应用程序之间实施一个分离(防火墙)并且可使数据安全地进行共享。JDK是Java开发工具包。JDK时SunMicrosystem的产品,它能为在Java中的编程提供一个所需的环境。JDK可供各种平台使用,但最著名的是SunSolaris和MicrosoftWindows。程序(method)是在面向对象编程语言中与一个或者多个类相联系的程序(procedureorroutine)。名称空间是一个名称组,其中所有的名称都是唯一的。面向对象是一种基于一个对象的概念的编程方法,它是一个封装了一组程序的数据结构,该程序(method)在数据上运行。对象,在面向对象的编程中是一个数据结构的独特的实例,该数据结构是根据其类提供的模板来定义的。每一个对象具有属于其类的变量的其自己的值,并能对由其类定义的消息(程序)进行响应。包是Java编程语言中的一个名称空间并具有类和接口。一个包是Java编程语言中的最小单元。永久对象永久对象和其值从一个CAD通信期到另一个CAD通信期持续无限期地存在。对象被默认是永久的。可使用处理对永久对象的值进行自动更新。术语“永久”不意味着一个面向对象的数据库或者对象是串行的/解串行的,而是指当卡断电时对象没有被丢失。可共享接口定义了一组可共享接口程序。当执行这些接口程序的对象属于另一个applet文本时,可从一个applet文本调用该接口程序。可共享接口对象(SIO)一个执行可共享接口的对象。处理是一个整体性操作,其中开发者定义了操作的范围,该范围表明程序代码的开始和结束。瞬时对象瞬时对象的值不能从一个CAD通信期到另一个期间存在,并且在一个特定的间隔处将其复位到一个默认状态。瞬时对象的值的更新不是整体性的而且不受处理的影响。1/5/991249PMHavnor材料;JCRED212DEC98READ-ME-JCRE21-DF2.TXT第一页日期1998年12月16日亲爱的JavaCard许可证持有者;JCRE21-DF2-14DEC98.ZIP包含了用于许可证持有者进行参考和注释的JavaCard2.1运行时环境说明书的第2版,日期为1998年12月14日。根据我们到目前为止收到的反馈我们对本文件进行了合并和解释。该ZIP文件的全部内容如下READ-ME-JCRE21-FD2.txt一个帮助型文本文件JCRE21-DF2.pdfPDF格式的《JavaCard2.1运行时环境(JCRE)说明书》JCRE21-DF2-changebar.pdf为了方便参考,具有从前版的修改条目的修订本修改综述1.是一个第2草稿版,并将立即在公众网站上出版。2.为了限制非法访问,对临时JCRE进入点对象的新的描述进行了介绍。防火墙6.2.1章3.与临时JCRE进入点对象相似,全局阵列现在增与安全相关的的限制。6.2.24.对用于临时JCRE进入点对象和增加的全局阵列的关于存储限制的字节码进行了详细的说明。6.2.8章5.在第8章增加的JCRE拥有的异常对象进行了描述。6.在瞬时产生(factory)程序中的虚拟机资源失败进行了修正描述。9.1章《JavaCard2.1运行时环境(JCRE)说明书》为完全的JavaCard2.1的执行指定了最小特性和运行时环境,可参考JavaCardAPT2.1和JavaCard2.1虚拟机说明书文件。要求本说明书能确保JavaCardapplet的兼容运行。本说明书文件的目的在于以一种简洁的方式将所有的JCRE要素集中在一起作为系列JavaCard2.1说明书的一部分。请将建议和意见发送给javaoem-javacard@sun.com或者寄信给我本人,地址如下所示。我代表JavaCard开发组真诚地恭候您的来信。祝福GodfreyDiGiorgiGodfreyDiGiorgi-godfrev.digiorgi@eng.sun.comOEMLicenseeEngineering2SunMicrosystem/JavaSoftware+1408343-1506传真+1408517-5460权利要求1、一种小型注脚设备,包括至少一个处理单元,配置其以执行各自文本中一个或者多个程序模块的组,所述一个或者多个程序模块包含零或多组可执行指令和零或多组数据定义,所述零或多组可执行指令和零或多组数据定义成组为对象定义,每个文本包含投影对象实例空间以便以例说明至少一个与一特定文本相关的所述的对象定义。存储器,其包含对象的实例;和文本屏障,其用于分离和隔离所述文本,所述文本配置用于至少部分根据是否执行所述至少一个指令以用于与所述一个或多个各自文本的第一个相关的对象实例,以及是否至少一个指令正请求存取与所述一个或多个分离文本的第二个相关的对象定义的实例,来控制组成程序模块所述零或多组指令中的至少一个的执行,所述文本屏障还进一步配置用于如果没有授权所述存取则防止所述存取,以及如果授权所述存取则致能所述存取。2、如权利要求1所述的小型注脚设备,其中通过记录在所述对象实例标题内的所述文本的名称,所述标题中不可存取所述一个或多个程序模块的信息,将对象实例和文本相关。3、如权利要求1所述的小型注脚设备,其中所述存储器包含对象标题数据,所述对象标题数据包含与至少一个所述对象实例相关的信息;以及所述控制执行至少部分取决于所述对象标题数据。4、如权利要求1所述的小型注脚设备,其中将所述存储器分区为具有对象实例的多个存储空间,分配所述对象实例以存储在所述多个存储空间中的一个;以及所述控制执行至少取决于决定分配给正在执行的对象实例和已存取对象实例的存储空间。5、如权利要求1所述的小型注脚设备,其中所述至少一个处理单元是运行在处理器上的虚拟机。6、如权利要求5所述的小型注脚设备,其中所述虚拟机运行在卡操作系统的顶部。7、如权利要求1所述的小型注脚设备,其中所述文本屏障为每一个文本分配不同的各自名称空间。8、如权利要求1所述的小型注脚设备,其中所述文本屏障为每一个文本分配不同的各自存储空间。9、如权利要求1所述的小型注脚设备,其中至少一个安全检测取决于主体和对象之间的存储空间协议。10、如权利要求8所述的小型注脚设备,其中至少一个安全检测取决于主体和对象之间的部分名称协议。11、如权利要求1所述的小型注脚设备,其中至少一个程序模块包含多个applets程序。12、如权利要求1所述的小型注脚设备,其中所述文本屏障对主体、对象或操作中至少一个实施至少一个安全检测以防止一个文本中的主体存取不同文本中的对象。13、一种操作包含处理机的小型注脚设备的方法,其中在所述处理机上执行程序模块,所述方法包含执行不同的文本中一个或多个程序模块的组,所述一个或者多个程序模块包含零或多组可执行指令和零或多组数据定义,所述零或多组可执行指令和零或多组数据定义成组为对象定义,每个文本包含投影对象实例空间以便以例说明至少一个与一特定文本相关的所述的对象定义;以及提供文本屏障,用于分离和隔离所述文本,所述文本配置用于至少部分根据是否执行所述至少一个指令以用于与所述一个或多个各自文本的第一个相关的对象实例,以及是否至少一个指令正请求存取与所述一个或多个分离文本的第二个相关的对象定义的实例,来控制组成程序模块所述零或多组指令中的至少一个的执行,所述提供文本屏障还进一步包含如果没有授权所述存取则防止所述存取;以及如果授权所述存取则致能所述存取。14、如权利要求13所述的方法,其中通过记录在所述对象实例标题内的所述文本的名称,所述标题中不可存取所述一个或多个程序模块的信息,将对象实例和文本相关。15、如权利要求13所述的方法,所述所述控制执行至少部分取决于对象标题数据,所述对象标题数据包含与至少一个所述对象实例相关的信息。16、如权利要求13所述的方法,其中将所述小型注脚设备的存储器分区为具有对象实例的多个存储空间,所述对象实例分配存储在所述多个存储空间中的一个;以及所述控制执行至少取决于决定分配给正在执行的对象实例和已存取对象实例的存储空间。17、如权利要求13所述的方法,其中使用虚拟机执行所述文本屏障。18、如权利要求13所述的方法,其中只有主体和对象均是相同名称空间的一部分时才允许主体访问对象。19、如权利要求13所述的方法,其中只有主体和对象均是相同存储空间的一部分时才允许主体访问对象。20、如权利要求13所述的方法,其中只有主体和对象均是相同文本的一部分时才允许主体对对象执行操作。21、如权利要求20所述的方法,其中当主体和对象不是同一文本的一部分时但主体被授权能对对象进行操作时,文本屏障允许该主体存取该对象。22、如权利要求21所述的方法,其中如果主体通过至少一个安全检测那么该主体就被授权。23、如权利要求22所述的方法,其中所述至少一个安全检测是多个安全检测中的一个。24、如权利要求21所述的方法,其中如果第一文本中的主体被授权对第二文本中的一个对象进行一个或多个操作,那么在进行操作时,其将在第二文本中的进行。25、如权利要求24所述的方法,其中当操作在第二文本中进行,而第二文本要求对第三文本中的对象进行操作时,操作在第三文本中进行。26、如权利要求24所述的方法,其中当授权一个或多个操作在第二文本中进行时,后续操作将基于在第二文本中进行的原则被授权,并且第二文本中的主体能够存取第二文本中的对象。27、如权利要求25所述的方法,其中当一个或多个操作在第二文本中完成时,程序返回到第一文本。28、如权利要求27所述的方法,其中任何时候,只要已授权对新文本中的对象进行操作,那么操作转换到新的文本。29、一种计算机程序产品,包括存储介质;以及计算机控制单元,该单元包含有用来在小型注脚设备上实现文本屏障的指令,所述小型注脚设备包含至少一个处理单元,配置其以执行各自文本中一个或者多个程序模块的组,所述一个或者多个程序模块包含零或多组可执行指令和零或多组数据定义,所述零或多组可执行指令和零或多组数据定义成组为对象定义,每个文本包含投影对象实例空间以便以例说明至少一个与一特定文本相关的所述的对象定义。存储器,其包含对象的实例;和文本屏障,其用于分离和隔离所述文本,所述文本配置用于至少部分根据是否执行所述至少一个指令以用于与所述一个或多个各自文本的第一个相关的对象实例,以及是否至少一个指令正请求存取与所述一个或多个分离文本的第二个相关的对象定义的实例,来控制组成程序模块所述零或多组指令中的至少一个的执行,所述文本屏障还进一步配置用于如果没有授权所述存取则防止所述存取,以及如果授权所述存取则致能所述存取。30、如权利要求29所述的计算机程序产品,其中所述存储介质为载波。31、一种计算机程序产品,包括存储介质;以及计算机控制单元,该单元包含指令,该指令通过使程序在各自文本中的运行从而将小型注脚设备上的多个程序分离开,所述小型注脚设备包含至少一个处理单元,配置其以执行各自文本中一个或者多个程序模块的组,所述一个或者多个程序模块包含零或多组可执行指令和零或多组数据定义,所述零或多组可执行指令和零或多组数据定义成组为对象定义,每个文本包含投影对象实例空间以便以例说明至少一个与一特定文本相关的所述的对象定义。存储器,其包含对象的实例;和文本屏障,其用于分离和隔离所述文本,所述文本配置用于至少部分根据是否执行所述至少一个指令以用于与所述一个或多个各自文本的第一个相关的对象实例,以及是否至少一个指令正请求存取与所述一个或多个分离文本的第二个相关的对象定义的实例,来控制组成程序模块所述零或多组指令中的至少一个的执行,所述文本屏障还进一步配置用于如果没有授权所述存取则防止所述存取,以及如果授权所述存取则致能所述存取。32、如权利要求31所述的计算机程序产品,其中所述存储介质为载波。33、一种载有指令的载波,该指令用来实现小型注脚设备上通信链路的文本屏障,所述小型注脚设备包含至少一个处理单元,配置其以执行各自文本中一个或者多个程序模块的组,所述一个或者多个程序模块包含零或多组可执行指令和零或多组数据定义,所述零或多组可执行指令和零或多组数据定义成组为对象定义,每个文本包含投影对象实例空间以便以例说明至少一个与一特定文本相关的所述的对象定义。存储器,其包含对象的实例;和文本屏障,其用于分离和隔离所述文本,所述文本配置用于至少部分根据是否执行所述至少一个指令以用于与所述一个或多个各自文本的第一个相关的对象实例,以及是否至少一个指令正请求存取与所述一个或多个分离文本的第二个相关的对象定义的实例,来控制组成程序模块所述零或多组指令中的至少一个的执行,所述文本屏障还进一步配置用于如果没有授权所述存取则防止所述存取,以及如果授权所述存取则致能所述存取。34、一种在通信链路载有指令的载波,该指令通过将程序在各自文本中的运行,将小型注脚设备上的多个程序分离开,所述小型注脚设备包含至少一个处理单元,配置其以执行各自文本中一个或者多个程序模块的组,所述一个或者多个程序模块包含零或多组可执行指令和零或多组数据定义,所述零或多组可执行指令和零或多组数据定义成组为对象定义,每个文本包含投影对象实例空间以便以例说明至少一个与一特定文本相关的所述的对象定义。存储器,其包含对象的实例;和文本屏障,其用于分离和隔离所述文本,所述文本配置用于至少部分根据是否执行所述至少一个指令以用于与所述一个或多个各自文本的第一个相关的对象实例,以及是否至少一个指令正请求存取与所述一个或多个分离文本的第二个相关的对象定义的实例,来控制组成程序模块所述零或多组指令中的至少一个的执行,所述文本屏障还进一步配置用于如果没有授权所述存取则防止所述存取,以及如果授权所述存取则致能所述存取。35.一种在网络上运载代码的方法,包括将一组代码从服务器发出的步骤,所述这组代码包括在通信链路上的指令,这些指令通过将程序在各自文本中的运行,将小型注脚设备上的多个程序分离开,所述小型注脚设备包含至少一个处理单元,配置其以执行各自文本中一个或者多个程序模块的组,所述一个或者多个程序模块包含零或多组可执行指令和零或多组数据定义,所述零或多组可执行指令和零或多组数据定义成组为对象定义,每个文本包含投影对象实例空间以便以例说明至少一个与一特定文本相关的所述的对象定义。存储器,其包含对象的实例;和文本屏障,其用于分离和隔离所述文本,所述文本配置用于至少部分根据是否执行所述至少一个指令以用于与所述一个或多个各自文本的第一个相关的对象实例,以及是否至少一个指令正请求存取与所述一个或多个分离文本的第二个相关的对象定义的实例,来控制组成程序模块所述零或多组指令中的至少一个的执行,所述文本屏障还进一步配置用于如果没有授权所述存取则防止所述存取,以及如果授权所述存取则致能所述存取。全文摘要一种小型注脚设备如智能卡,通过包含一个将多个程序的执行隔开的文本屏障,其能够安全地运行来自不相关的供货商的多个程序。该文本屏障进行安全检测以确定主体和对象是否在同一名称空间或存储空间中,或者用来确定请求的操作是否授权给准备被操作的对象。文档编号G06F9/44GK1619455SQ200410038220公开日2005年5月25日申请日期2000年1月20日优先权日1999年1月22日发明者J·舒塞尔,M·B·巴特勒,A·施特赖希申请人:太阳微系统公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1