<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 消費電子 > 設計應用 > 一種JavaCard庫包后下載的方法

一種JavaCard庫包后下載的方法

作者:許晶 王于波 張彥杰 袁艷芳 付青琴 時(shí)間:2016-10-27 來(lái)源:電子產(chǎn)品世界 收藏
編者按: JavaCard將標準API的定義引入了嵌入式開(kāi)發(fā),這帶來(lái)了平臺和應用開(kāi)發(fā)的分離,使得開(kāi)發(fā)更為便利。而當發(fā)行后的平臺有新增功能的需求時(shí),需要考慮在平臺還是應用層來(lái)進(jìn)行實(shí)現。如需在每個(gè)應用中進(jìn)行實(shí)現,代碼會(huì )冗余、空間占用會(huì )增大;如采用傳統的補丁方式,實(shí)現又有較多限制。在避免重新掩膜的情況下,本文提出一種后下載庫包的方法,將新增功能定義為庫包,庫包的實(shí)現采用Java包的方式,在平臺上先下載實(shí)現好的庫包,再下載調用庫包的應用。驗證表明,該方法具有節省空間、方便實(shí)現以及節省成本等優(yōu)點(diǎn)。

作者/ 許晶1,2 王于波1,2 張彥杰1,2 袁艷芳1,2 付青琴1,2

本文引用地址:http://dyxdggzs.com/article/201610/311929.htm

  1.北京智芯微電子科技有限公司 國家電網(wǎng)公司重點(diǎn)實(shí)驗室 電力芯片設計分析實(shí)驗室(北京100192)

  2.北京智芯微電子科技有限公司 北京市電力高可靠性集成電路設計工程技術(shù)研究中心(北京100192)

摘要: 將標準API的定義引入了嵌入式開(kāi)發(fā),這帶來(lái)了平臺和應用開(kāi)發(fā)的分離,使得開(kāi)發(fā)更為便利。而當發(fā)行后的平臺有新增功能的需求時(shí),需要考慮在平臺還是應用層來(lái)進(jìn)行實(shí)現。如需在每個(gè)應用中進(jìn)行實(shí)現,代碼會(huì )冗余、空間占用會(huì )增大;如采用傳統的補丁方式,實(shí)現又有較多限制。在避免重新掩膜的情況下,本文提出一種的方法,將新增功能定義為,的實(shí)現采用Java包的方式,在平臺上先下載實(shí)現好的庫包,再下載調用庫包的應用。驗證表明,該方法具有節省空間、方便實(shí)現以及節省成本等優(yōu)點(diǎn)。

引言

  由于具有靈活性和安全性,JAVA卡在智能卡領(lǐng)域的應用越來(lái)越多。當一張JAVA卡發(fā)行后,如果多個(gè)應用需要調用同一個(gè)功能模塊,現有的辦法是在每個(gè)應用( Applet)中實(shí)現此功能。這將導致空間占用的增加,在存儲資源有限的情況下,會(huì )使得JAVA卡上支持的應用個(gè)數減少。如果使用補丁機制將此功能模塊做成智能卡的補丁,開(kāi)發(fā)一個(gè)完整的功能模塊會(huì )受到補丁機制的靈活性限制。如要重新進(jìn)行卡片掩膜,又將涉及到成本的增加。

  本文將有類(lèi)似需求的功能模塊作為JAVA卡的一個(gè)外部庫包,每個(gè)應用不需要單獨實(shí)現這些功能,而采用調用新增的庫包的方式,減少了空間的占用。庫包實(shí)現方式靈活,便于快速開(kāi)發(fā)。在ROM掩膜的平臺上,也免除了重新掩膜的成本。試驗結果證明,此方法能具有很好的靈活性和安全性,并節省了智能卡的空間。

1 JAVA卡平臺和應用開(kāi)發(fā)模式

  1.1 傳統的智能卡平臺應用開(kāi)發(fā)模式

  傳統智能卡COS開(kāi)發(fā)時(shí),平臺和應用通常是由一個(gè)廠(chǎng)商開(kāi)發(fā)的[1]。平臺負責實(shí)現底層芯片驅動(dòng)、算法模塊及文件系統等功能。應用實(shí)現滿(mǎn)足行業(yè)規范的開(kāi)卡、交易流程及安全機制等,比如裝載密鑰、內部認證、加解密等功能。如圖1所示,各行業(yè)發(fā)布規范,各智能卡廠(chǎng)商根據規范開(kāi)發(fā)出多款產(chǎn)品,每一款產(chǎn)品都有單獨的平臺和行業(yè)應用,以提供給不同的行業(yè)進(jìn)行商用。

  1.2 JAVA卡平臺應用開(kāi)發(fā)模式

  隨著(zhù)越來(lái)越多的行業(yè)開(kāi)始使用智能卡,人們對一張卡上集成多個(gè)應用的需求也隨之增長(cháng)[2]。90年代開(kāi)始,多應用芯片卡開(kāi)放系統陸續出現。其中使用最為廣泛的就是平臺[3]。JAVA卡的平臺和應用完全分離。一張搭載JAVA卡平臺的卡片,能夠在平臺發(fā)行后再下載應用,這是JAVA卡比使用本地語(yǔ)言如C語(yǔ)言的Native卡有著(zhù)更為便利的優(yōu)勢,一張JAVA卡能夠適應不同的應用場(chǎng)景,而不需要開(kāi)發(fā)多個(gè)版本的COS(Chip Operation System,片上操作系統)[4]。

  而平臺和應用的分離是通過(guò)統一的API來(lái)實(shí)現的。JAVA卡API是JAVA卡運行環(huán)境的重要組成部分之一[5],它提供了一套統一的、基于國際標準的、用于應用開(kāi)發(fā)的編程接口,包括I/O接口、異常管理、安全管理等接口[6]。JAVA卡平臺實(shí)現API接口,JAVA卡應用可以通過(guò)調用API接口來(lái)進(jìn)行編程,生成可下載文件。

  在JAVA卡發(fā)行之后,還能夠進(jìn)行應用的下載、安裝、刪除等管理[5]。不同的應用開(kāi)發(fā)商開(kāi)發(fā)的JAVA卡應用,也可以下載到不同平臺開(kāi)發(fā)商開(kāi)發(fā)的、支持同一API版本的JAVA卡平臺上。如圖2所示。

  應用開(kāi)發(fā)時(shí),引用JAVA卡API庫包進(jìn)行編譯,生成可下載文件CAP包。應用下載到平臺后,對平臺庫包API的調用采用動(dòng)態(tài)鏈接機制,通過(guò)平臺編譯的Token值索引,找到調用的JAVA包、類(lèi)和方法,完成相應功能的實(shí)現[8]。

2 通用的JAVA卡新增功能實(shí)現方式及問(wèn)題

  本文將實(shí)現了具體功能的API包稱(chēng)為庫包。常見(jiàn)的JAVA卡標準庫包包括java.io、java.lang、javacard.framework、javacard.security、javacardx. crypto等[6]。庫包java.io和java.lang定義了一些常見(jiàn)的異常(Exception),javacard.framework定義了JAVA卡平臺運行環(huán)境的各種操作接口,javacard.security和javacardx. crypto定義了國際算法和密碼相關(guān)的安全接口。

  在一張JAVA卡發(fā)行后,如果不同的應用需要平臺新增實(shí)現相同的功能,傳統的實(shí)現方法,第一種是每個(gè)應用都實(shí)現一套相同的功能函數;第二種方法是采用JAVA卡傳統的補丁方式,將功能實(shí)現增加到平臺中;第三種方法是重新開(kāi)發(fā)平臺,如果為ROM掩膜的卡片,還需要重新進(jìn)行平臺掩膜。

  現有的新增通用功能的方法都有各自的問(wèn)題:

  1)第一種方法,每個(gè)應用內部實(shí)現一套功能函數,這樣導致代碼量的冗余,在智能卡有限的空間中,如果單個(gè)應用的代碼量增大,會(huì )導致可加載應用的個(gè)數減少;

  2)第二種方法,JAVA卡傳統的補丁方式,一般是在JAVA卡運行環(huán)境中,在調用方法的時(shí)候進(jìn)行補丁函數的判斷,如果該方法有補丁函數,則運行補丁函數;如果沒(méi)有補丁函數,則運行現有的函數,這種方法增加了判斷的時(shí)間,使得卡運行效率降低,而且補丁函數的開(kāi)發(fā)有較多的限制;

  3)第三種方法,重新開(kāi)發(fā)一版新平臺,這種方法不僅導致芯片可能有重新掩膜的成本,而且增加了多個(gè)版本的維護工作。

3 JAVA卡庫包的方法

  本文將的庫包分為兩個(gè)模塊,庫實(shí)現包模塊和庫接口包模塊,此處的庫,指的是Java卡外部庫,非標準庫,即卡內未預置的庫,需要新增功能的庫包。

  實(shí)現時(shí),首先實(shí)現一個(gè)庫實(shí)現包,庫實(shí)現包作為一個(gè)JAVA卡的包(Package),基于JAVA卡標準庫包進(jìn)行開(kāi)發(fā),包中包含了新增庫的功能函數(Java文件)。Java文件通過(guò)javac編譯器引用Java API,生成庫實(shí)現Java可裝載文件(Class文件),然后,通過(guò)JavaCard編譯器converter引用JavaCard和GP(Global Platform,應用安全管理平臺)的API[9],將Class文件生成庫實(shí)現Java卡可裝載文件(CAP文件),如圖3所示。

  然后,用庫實(shí)現源文件生成庫接口源文件,只保留方法的聲明。如果希望庫接口包中含有最少的函數聲明,可以將需要提供的接口所在的類(lèi)和函數都放在最前位置編譯。由于converter中JAVA卡外部類(lèi)按照字母順序來(lái)生成排序的類(lèi)Token值[8],需要將提供接口的類(lèi)排列在包的最前位置。接口文件的實(shí)現,保證了實(shí)現的代碼不會(huì )被泄露。應用需要獲取庫接口文件JAVA卡庫文件,通過(guò)javac編譯器生成應用Java可裝載文件后,使用converter工具,除了引用JavaCard和GP API外,還需引用庫接口JAR包,生成應用的JAVA卡可裝載文件。

  最后,完成應用的裝載安裝過(guò)程。在應用裝載前,需要寫(xiě)在現有的標準JAVA卡上,通過(guò)JavaCardLoader(下載器)先將庫實(shí)現JAVA卡可裝載文件安裝進(jìn)JAVA卡,然后,再通過(guò)JavaCard Loader和Installer(安裝器)將應用的Java卡可裝載文件下載并安裝進(jìn)JAVA卡中,完成應用的下載和安裝。如圖4所示。

4 結論

  將本文的方法與傳統的方法相比較。相比第一種方法,在應用中實(shí)現庫包的功能,減少了代碼量。如果庫功能實(shí)現的代碼量為n Kbytes,應用實(shí)現的代碼量是m Kbytes,當一張卡上有i個(gè)應用需要調到該庫的功能時(shí),第一種方法需要的代碼量是i*(n+m)Kbytes,而本方法需要的代碼量是n+i*m Kbytes,減少了(i-1)*n Kbytes的代碼量。代碼量的減少,可以在芯片選型時(shí),選擇空間較小,成本較低的芯片。

  與第二種方法相比,縮短了開(kāi)發(fā)時(shí)間,降低了開(kāi)發(fā)難度,并提高了運行效率。依靠傳統的補丁方式實(shí)現功能庫函數時(shí),需要在設計時(shí)就考慮到有可能出現的問(wèn)題,設計好補丁入口。在實(shí)現時(shí),有較多開(kāi)發(fā)上的限制。采用JAVA卡包來(lái)實(shí)現新增功能的庫函數,能縮短開(kāi)發(fā)時(shí)間,降低開(kāi)發(fā)難度。運行時(shí),傳統的補丁需要在函數調用時(shí)判斷是否具有補丁函數,在每個(gè)方法調用前都增加了運行時(shí)間成本,本方法提高了運行效率。

  與第三種方法相比,減少了版本維護,如果在ROM掩膜的芯片上,還節約了芯片掩膜成本。此方法在功能函數缺失或需要新增的時(shí)候,只需將Java庫實(shí)現包下載進(jìn)JAVA卡,并提供相應的庫接口包給應用開(kāi)發(fā)的用戶(hù),無(wú)需重新開(kāi)發(fā)一版COS,減少了COS的版本。在ROM掩膜的芯片上,無(wú)需再次進(jìn)行芯片掩膜,直接將功能庫進(jìn)行下載,大大節約了多次掩膜的成本。

  綜上所述,相比傳統方法,本文提出的JAVA卡庫包后下載的方法具有節省卡片空間、便于開(kāi)發(fā)、節約成本的優(yōu)點(diǎn)。

參考文獻:

  [1]王愛(ài)英.智能卡技術(shù)[M].北京:清華大學(xué)出版社, 2009.

  [2]馬多賀.Java智能卡開(kāi)發(fā)及應用技術(shù)研究[M].哈爾濱工業(yè)大學(xué),2006.

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

  [4]張旭.基于JavaCard的智能存儲卡多行業(yè)應用研究[M].北京郵電大學(xué),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.


本文來(lái)源于中國科技期刊《電子產(chǎn)品世界》2016年第10期第47頁(yè),歡迎您寫(xiě)論文時(shí)引用,并注明出處。



關(guān)鍵詞: JavaCard 庫包 后下載 201611

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>