新闻中心

EEPW首页 > 消费电子 > 设计应用 > 一种JavaCard库包后下载的方法

一种JavaCard库包后下载的方法

作者:许晶 王于波 张彦杰 袁艳芳 付青琴时间:2016-10-27来源:电子产品世界收藏
编者按: JavaCard将标准API的定义引入了嵌入式开发,这带来了平台和应用开发的分离,使得开发更为便利。而当发行后的平台有新增功能的需求时,需要考虑在平台还是应用层来进行实现。如需在每个应用中进行实现,代码会冗余、空间占用会增大;如采用传统的补丁方式,实现又有较多限制。在避免重新掩膜的情况下,本文提出一种后下载库包的方法,将新增功能定义为库包,库包的实现采用Java包的方式,在平台上先下载实现好的库包,再下载调用库包的应用。验证表明,该方法具有节省空间、方便实现以及节省成本等优点。

作者/ 许晶1,2 王于波1,2 张彦杰1,2 袁艳芳1,2 付青琴1,2

本文引用地址:http://www.eepw.com.cn/article/201610/311929.htm

  1.北京智芯微电子科技有限公司 国家电网公司重点实验室 电力芯片设计分析实验室(北京100192)

  2.北京智芯微电子科技有限公司 北京市电力高可靠性集成电路设计工程技术研究中心(北京100192)

摘要: 将标准API的定义引入了嵌入式开发,这带来了平台和应用开发的分离,使得开发更为便利。而当发行后的平台有新增功能的需求时,需要考虑在平台还是应用层来进行实现。如需在每个应用中进行实现,代码会冗余、空间占用会增大;如采用传统的补丁方式,实现又有较多限制。在避免重新掩膜的情况下,本文提出一种的方法,将新增功能定义为的实现采用Java包的方式,在平台上先下载实现好的库包,再下载调用库包的应用。验证表明,该方法具有节省空间、方便实现以及节省成本等优点。

引言

  由于具有灵活性和安全性,JAVA卡在智能卡领域的应用越来越多。当一张JAVA卡发行后,如果多个应用需要调用同一个功能模块,现有的办法是在每个应用( Applet)中实现此功能。这将导致空间占用的增加,在存储资源有限的情况下,会使得JAVA卡上支持的应用个数减少。如果使用补丁机制将此功能模块做成智能卡的补丁,开发一个完整的功能模块会受到补丁机制的灵活性限制。如要重新进行卡片掩膜,又将涉及到成本的增加。

  本文将有类似需求的功能模块作为JAVA卡的一个外部库包,每个应用不需要单独实现这些功能,而采用调用新增的库包的方式,减少了空间的占用。库包实现方式灵活,便于快速开发。在ROM掩膜的平台上,也免除了重新掩膜的成本。试验结果证明,此方法能具有很好的灵活性和安全性,并节省了智能卡的空间。

1 JAVA卡平台和应用开发模式

  1.1 传统的智能卡平台应用开发模式

  传统智能卡COS开发时,平台和应用通常是由一个厂商开发的[1]。平台负责实现底层芯片驱动、算法模块及文件系统等功能。应用实现满足行业规范的开卡、交易流程及安全机制等,比如装载密钥、内部认证、加解密等功能。如图1所示,各行业发布规范,各智能卡厂商根据规范开发出多款产品,每一款产品都有单独的平台和行业应用,以提供给不同的行业进行商用。

  1.2 JAVA卡平台应用开发模式

  随着越来越多的行业开始使用智能卡,人们对一张卡上集成多个应用的需求也随之增长[2]。90年代开始,多应用芯片卡开放系统陆续出现。其中使用最为广泛的就是平台[3]。JAVA卡的平台和应用完全分离。一张搭载JAVA卡平台的卡片,能够在平台发行后再下载应用,这是JAVA卡比使用本地语言如C语言的Native卡有着更为便利的优势,一张JAVA卡能够适应不同的应用场景,而不需要开发多个版本的COS(Chip Operation System,片上操作系统)[4]

  而平台和应用的分离是通过统一的API来实现的。JAVA卡API是JAVA卡运行环境的重要组成部分之一[5],它提供了一套统一的、基于国际标准的、用于应用开发的编程接口,包括I/O接口、异常管理、安全管理等接口[6]。JAVA卡平台实现API接口,JAVA卡应用可以通过调用API接口来进行编程,生成可下载文件。

  在JAVA卡发行之后,还能够进行应用的下载、安装、删除等管理[5]。不同的应用开发商开发的JAVA卡应用,也可以下载到不同平台开发商开发的、支持同一API版本的JAVA卡平台上。如图2所示。

  应用开发时,引用JAVA卡API库包进行编译,生成可下载文件CAP包。应用下载到平台后,对平台库包API的调用采用动态链接机制,通过平台编译的Token值索引,找到调用的JAVA包、类和方法,完成相应功能的实现[8]

2 通用的JAVA卡新增功能实现方式及问题

  本文将实现了具体功能的API包称为库包。常见的JAVA卡标准库包包括java.io、java.lang、javacard.framework、javacard.security、javacardx. crypto等[6]。库包java.io和java.lang定义了一些常见的异常(Exception),javacard.framework定义了JAVA卡平台运行环境的各种操作接口,javacard.security和javacardx. crypto定义了国际算法和密码相关的安全接口。

  在一张JAVA卡发行后,如果不同的应用需要平台新增实现相同的功能,传统的实现方法,第一种是每个应用都实现一套相同的功能函数;第二种方法是采用JAVA卡传统的补丁方式,将功能实现增加到平台中;第三种方法是重新开发平台,如果为ROM掩膜的卡片,还需要重新进行平台掩膜。

  现有的新增通用功能的方法都有各自的问题:

  1)第一种方法,每个应用内部实现一套功能函数,这样导致代码量的冗余,在智能卡有限的空间中,如果单个应用的代码量增大,会导致可加载应用的个数减少;

  2)第二种方法,JAVA卡传统的补丁方式,一般是在JAVA卡运行环境中,在调用方法的时候进行补丁函数的判断,如果该方法有补丁函数,则运行补丁函数;如果没有补丁函数,则运行现有的函数,这种方法增加了判断的时间,使得卡运行效率降低,而且补丁函数的开发有较多的限制;

  3)第三种方法,重新开发一版新平台,这种方法不仅导致芯片可能有重新掩膜的成本,而且增加了多个版本的维护工作。

3 JAVA卡库包的方法

  本文将的库包分为两个模块,库实现包模块和库接口包模块,此处的库,指的是Java卡外部库,非标准库,即卡内未预置的库,需要新增功能的库包。

  实现时,首先实现一个库实现包,库实现包作为一个JAVA卡的包(Package),基于JAVA卡标准库包进行开发,包中包含了新增库的功能函数(Java文件)。Java文件通过javac编译器引用Java API,生成库实现Java可装载文件(Class文件),然后,通过JavaCard编译器converter引用JavaCard和GP(Global Platform,应用安全管理平台)的API[9],将Class文件生成库实现Java卡可装载文件(CAP文件),如图3所示。

  然后,用库实现源文件生成库接口源文件,只保留方法的声明。如果希望库接口包中含有最少的函数声明,可以将需要提供的接口所在的类和函数都放在最前位置编译。由于converter中JAVA卡外部类按照字母顺序来生成排序的类Token值[8],需要将提供接口的类排列在包的最前位置。接口文件的实现,保证了实现的代码不会被泄露。应用需要获取库接口文件JAVA卡库文件,通过javac编译器生成应用Java可装载文件后,使用converter工具,除了引用JavaCard和GP API外,还需引用库接口JAR包,生成应用的JAVA卡可装载文件。

  最后,完成应用的装载安装过程。在应用装载前,需要写在现有的标准JAVA卡上,通过JavaCardLoader(下载器)先将库实现JAVA卡可装载文件安装进JAVA卡,然后,再通过JavaCard Loader和Installer(安装器)将应用的Java卡可装载文件下载并安装进JAVA卡中,完成应用的下载和安装。如图4所示。

4 结论

  将本文的方法与传统的方法相比较。相比第一种方法,在应用中实现库包的功能,减少了代码量。如果库功能实现的代码量为n Kbytes,应用实现的代码量是m Kbytes,当一张卡上有i个应用需要调到该库的功能时,第一种方法需要的代码量是i*(n+m)Kbytes,而本方法需要的代码量是n+i*m Kbytes,减少了(i-1)*n Kbytes的代码量。代码量的减少,可以在芯片选型时,选择空间较小,成本较低的芯片。

  与第二种方法相比,缩短了开发时间,降低了开发难度,并提高了运行效率。依靠传统的补丁方式实现功能库函数时,需要在设计时就考虑到有可能出现的问题,设计好补丁入口。在实现时,有较多开发上的限制。采用JAVA卡包来实现新增功能的库函数,能缩短开发时间,降低开发难度。运行时,传统的补丁需要在函数调用时判断是否具有补丁函数,在每个方法调用前都增加了运行时间成本,本方法提高了运行效率。

  与第三种方法相比,减少了版本维护,如果在ROM掩膜的芯片上,还节约了芯片掩膜成本。此方法在功能函数缺失或需要新增的时候,只需将Java库实现包下载进JAVA卡,并提供相应的库接口包给应用开发的用户,无需重新开发一版COS,减少了COS的版本。在ROM掩膜的芯片上,无需再次进行芯片掩膜,直接将功能库进行下载,大大节约了多次掩膜的成本。

  综上所述,相比传统方法,本文提出的JAVA卡库包后下载的方法具有节省卡片空间、便于开发、节约成本的优点。

参考文献:

  [1]王爱英.智能卡技术[M].北京:清华大学出版社, 2009.

  [2]马多贺.Java智能卡开发及应用技术研究[M].哈尔滨工业大学,2006.

  [3]Michael Baentsch, Peter Buhler, etc.IEEE Concurrency, Oct.-Dec.1999,JavaCard-From Hype to Reality, 1999.

  [4]张旭.基于JavaCard的智能存储卡多行业应用研究[M].北京邮电大学,2008.

  [5]Runtime Environment Specification, JavaCardTM Platform, Version 2.2.2, March 2006.

  [6] Application Programming Interface, JavaCardTMPlatform, Version 2.2.2, March 2006.

  [7] Virtual Machine Specification, JavaCardTM Platform, Version 2.2.2, March 2006.

  [8] Development Kit User’s Guide, For the Source Release. Java CardTM Platform, Version 2.2.2, 2006

  [9]GlobalPlatform Card Specification, Card Specification, Version2.2, March 2006.


本文来源于中国科技期刊《电子产品世界》2016年第10期第47页,欢迎您写论文时引用,并注明出处。



评论


技术专区

关闭