作者/ 许晶1,2 王于波1,2 张彦杰1,2 袁艳芳1,2 付青琴1,2
1.北京智芯微电子科技有限公司 国家电网公司要点实验室 电力芯片规划剖析实验室(北京100192)
2.北京智芯微电子科技有限公司 北京市电力高可靠性集成电路规划工程技能研究中心(北京100192)
摘要: JavaCard将规范API的界说引入了嵌入式开发,这带来了渠道和运用开发的别离,使得开发更为便当。而当发行后的渠道有新增功用的需求时,需求考虑在渠道仍是运用层来进行完结。如需在每个运用中进行完结,代码会冗余、空间占用会增大;如选用传统的补丁办法,完结又有较多约束。在防止从头掩膜的情况下,本文提出一种后下载库包的办法,将新增功用界说为库包,库包的完结选用Java包的办法,在渠道上先下载完结好的库包,再下载调用库包的运用。验证标明,该办法具有节省空间、便当完结以及节省本钱等长处。
导言
因为具有灵敏性和安全性,JAVA卡在智能卡范畴的运用越来越多。当一张JAVA卡发行后,假如多个运用需求调用同一个功用模块,现有的办法是在每个运用(JavaCard Applet)中完结此功用。这将导致空间占用的添加,在存储资源有限的情况下,会使得JAVA卡上支撑的运用个数削减。假如运用补丁机制将此功用模块做成智能卡的补丁,开发一个完好的功用模块会遭到补丁机制的灵敏性约束。如要从头进行卡片掩膜,又将涉及到本钱的添加。
本文将有相似需求的功用模块作为JAVA卡的一个外部库包,每个运用不需求独自完结这些功用,而选用调用新增的库包的办法,削减了空间的占用。库包完结办法灵敏,便于快速开发。在ROM掩膜的渠道上,也免除了从头掩膜的本钱。实验成果证明,此办法能具有很好的灵敏性和安全性,并节省了智能卡的空间。
1 JAVA卡渠道和运用开发形式
1.1 传统的智能卡渠道运用开发形式
传统智能卡COS开发时,渠道和运用通常是由一个厂商开发的[1]。渠道担任完结底层芯片驱动、算法模块及文件体系等功用。运用完结满意职业规范的开卡、买卖流程及安全机制等,比方装载密钥、内部认证、加解密等功用。如图1所示,各职业发布规范,各智能卡厂商依据规范开宣布多款产品,每一款产品都有独自的渠道和职业运用,以供给给不同的职业进行商用。
1.2 JAVA卡渠道运用开发形式
跟着越来越多的职业开端运用智能卡,人们对一张卡上集成多个运用的需求也随之增加[2]。90年代开端,多运用芯片卡开放体系连续呈现。其间运用最为广泛的便是JavaCard渠道[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页,欢迎您写论文时引证,并注明出处。