Java虚拟机是Java技术的基本的要素,它模拟Java处理机并可在任意的有足够处理能力的处理器上用软件 来实现。如果希望在一种新类型的处理器上运行Java字节码,则必须把Java虚拟机JVM(Jat,a Virtual Machine)移植到这种处理器去。它通常用C编程语言来写,所以实际的移植所需只不过是少量的修改并重新 编译源代码。Java虚拟机在PC机上的大小约在100~200KB之间,与之相比智能卡的JVM的大小可参1阅表。
表1 PO和智能卡Java虚拟机大小的比较
Java的虚拟机有着一个真正的处理器的所有部件,有其自已的按字节码形式的指令组,也有诸如程序计数 器和累加器之类的寄存器。要处理的数据以类文件的形式传送给虚拟机。文件中含有固定常数,执行的方法 和不同附加信息的字节码。表2给出了类文件的结构概要。
Java字节码只占有很少量的空间,紧凑的如同机器代码。由于存在着虚拟机和用本机代码的机器相比总的 存储空间余额要坏些,差别随着程序代码量相对虚拟机(VM)变小而自然增大。
字节码基本上非常类似于普通处理器的机器指令,例如有堆栈管理、逻辑和算术运算、访问虚拟Java处理 器寄存器的命令、乃至于访问数组的方法。Jim Lindholm和Frank yellin[Lindholm 97[详尽地描述了 Java虚拟机和字节码。
表2 类文件的结构概要
由于智能卡微控制器系统资源的严重限制,和PC机原来的Java VM比起来Java卡VM必须做某些剪裁。Java卡 VM不具有收集不再需要的自动归还的存储碎片集中存储器的能力。对类文件的支持也大大降低。在智能卡中 只有少量数据类型可用,而字节码本身也从149条指令缩减为16条。相比之下,智能卡JYIVI的功能限制,如 表3、表4和表5所示。
表3 和完整的Java相比,智能卡Java的功能限制
表4 智能卡Java的数据类型,所需的存储且和数值范围(数据类型int是可选的)
表5 智能卡Java的限制摘要(目前展示的限制并不会限制智能卡软件的开发)
智能卡的卡上Java VM的程序大小对于8051机器代码用C语言建立时大约为6~8 KB。另外还需要用约200字节的BAM,具有javacard。framework和javacardx.frame 1o「ork类的API主要由Java字节码组成,大约要占3~4 KB的存储量。此外,至少需要有一个具有传输协议,加密算法和许多与硬件紧密相关的功能的基本操作系统,当用汇编语言编程时,为此所需的编码量的范围在6~8 KB之间。
这个比较小的程序的正确性有着非同寻常的重大意义,因为在Java VM中的一个差错或安全漏洞就会破坏把Java结合到智能卡以提供一安全环境的整个观念。设计和实现必须在很大程度上是无差错的。通常用ITSEC和通用准则评估来核实这一点。当然,Java VM较少的程序代码明显地简化了这一过程,特别是由于可以形式化描述VM的完整的功能,许多Java智能卡的制造商已经宣布了由方来测试他们的实现的意图,在这种情况下的目标是ITSEC⒘。
由于智能卡的存储量较少,有必要把Java虚拟机分为卡内部分和卡外部分。很容易在智能卡之外的卡外VM中进行静态测试而不影响其性能也不会失掉安全性。VM两部分的链接由CAP格式的数据来形成,它们必须受到加密保护,是采用数字签名,使其在传输时不会受到篡改。否则将会在约定的起点出现一个攻击者,因为使用受操纵的数据有可能绕开卡内VM的安全机制。
Java是面向堆栈的,当然就需要堆栈(stack)以及堆阵(heap)。在智能卡中为每个支程序分别建立和管理其堆栈。堆栈主要用于在调用方法时传送数据,而堆阵则充当对象的存储区。堆栈的一般大小为200~300字节的RAM,而堆阵则为12KB的EEPROM。比较小的支程序,无论如何可很容易地把堆栈控制在50~60字节而堆阵则为数干字节。
Java YM包含了四个基本部分:字节码校验器;装人器:字节码解释器和安全管理器;其安排如图1所示。
字节码校验器的任务是执行对传送给Java VM的类文件的多种静态检验。字节码校验器首先检查文件格式。接着,它检查常数组合,检查字节码的语法正确性,并检查方法的变量以及对象继承的层次。然而也可承担其他审查。这些都由Frank yellin[yellin 96]详细做了描述。
图1 Java卡虚拟机的各个部件
在字节码校验器结束后,装入器取得已校验的数据并以CAP格式把它们传送给智能卡中实际的解释器,为了安全起见,数据应经数字签名来提供,使它们在装人器和Java VM的卡内部分之间不致被篡改。字节码解释器的基本功能如表6所示。
表6 Java字节码解释器的主要程序回路的基本功能
在装人器传送出之后,可执行的字节码已用不同种类的补充信息给予扩充并可由Java VM的卡内部分加以执行。实际的解释器依次读出每一字节码以及其相关的变量,并把它们转换为目标处理器的本机机器指令。安全管理器在对字节码解释的同时并行工作。在其他事务之中,它坚持不断地检查有关字段,堆栈和堆阵的边界。如果它检查到了对规定的安全规则的违背,就能够立刻启动例外处理器并停止对出现问题的字节码的处理。
欢迎转载,信息来源维库电子市场网(www.dzsc.com)
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。