歡迎您訪問(wèn)鄭州興邦電子股份有限公司官方網(wǎng)站!
阿里巴巴誠(chéng)信通企業(yè)
全國(guó)咨詢熱線:40000-63966
興邦電子,中國(guó)水控機(jī)第一品牌

聯(lián)系興邦電子

全國(guó)咨詢熱線:40000-63966

售后:0371-55132951/55132952

工廠:河南省 鄭州市 高新區(qū)蓮花街電子電器產(chǎn)業(yè)園

智能卡中Java軟件的開(kāi)發(fā)

文章出處:http://compasssalessolutions.com 作者:Admin   人氣: 發(fā)表時(shí)間:2011年09月27日

[文章內(nèi)容簡(jiǎn)介]:如何去開(kāi)發(fā)一個(gè)智能卡的java程序并運(yùn)行它?第1件事是所開(kāi)發(fā)的程序用于文本編輯器時(shí)能產(chǎn)生真正的java 源代碼,然后用任何所期望的java編譯器編譯源代碼,它產(chǎn)生與機(jī)器無(wú)關(guān)的字節(jié)碼。到此為止,和用java對(duì) pc機(jī)編程的過(guò)程是一樣的。

    如何去開(kāi)發(fā)一個(gè)智能卡的java程序并運(yùn)行它?第1件事是所開(kāi)發(fā)的程序用于文本編輯器時(shí)能產(chǎn)生真正的java 源代碼,然后用任何所期望的java編譯器編譯源代碼,它產(chǎn)生與機(jī)器無(wú)關(guān)的字節(jié)碼。到此為止,和用java對(duì) pc機(jī)編程的過(guò)程是一樣的。 

    現(xiàn)在,字節(jié)碼作為類文件被傳送到j(luò)ava虛擬機(jī)的卡外部分(卡外vivi),卡外vm檢查其格式、語(yǔ)法、字段 基準(zhǔn)和與程序有關(guān)的方面。如果所有這些檢查都通過(guò),則卡外vm建立起一個(gè)稱為卡的應(yīng)用cap(card application)文件。如有必要,可以隨應(yīng)用以數(shù)字簽名的方式來(lái)提供,數(shù)字簽名的提供保證了cap文件已被 卡外vm檢查過(guò)并已被鑒明。如果這里不存在可以被驗(yàn)證的簽名,則就將有可能用一個(gè)受操縱的支程序繞過(guò)卡 內(nèi)vm的安全機(jī)制,因?yàn)樵谥悄芸ㄉ蠜](méi)有足夠的存儲(chǔ)器能使卡內(nèi)vm本身去進(jìn)行所有的安全檢查。在此之后,支 程序以cap文件的格式裝入智能卡中。智能卡首先驗(yàn)證通常會(huì)存在的數(shù)字簽名,一旦檢驗(yàn)通過(guò)后就把支程序 傳給卡內(nèi)vm。在此之后所發(fā)生的事在很大程度上和pc機(jī)里的虛擬機(jī)執(zhí)行程序的情況很相似。卡內(nèi)vm逐行測(cè)試 并解釋字節(jié)碼,產(chǎn)生智能卡處理器的機(jī)器指令,這一過(guò)程如圖1所示。 

    圖1所產(chǎn)生的目標(biāo)處理器的本機(jī)程序代碼被執(zhí)行后將產(chǎn)生相應(yīng)的響應(yīng)apdu,從命令apdu到響應(yīng)apdu的數(shù)據(jù)流 程如圖2所示。

    實(shí)際的過(guò)程,自然要比上面所述的要復(fù)雜些。希望程序員在接受到任務(wù)后不要立即開(kāi)始java代碼的編寫, 相反,首先要分析和設(shè)計(jì)確定真正的需求。然后,才可開(kāi)始編程。 

從程序開(kāi)發(fā)到智能卡微控制器中的java虛擬機(jī)執(zhí)行程序的過(guò)程

圖1 從程序開(kāi)發(fā)到智能卡微控制器中的java虛擬機(jī)執(zhí)行程序的過(guò)程

以java智能卡層次模型為參考的命令apdu和相應(yīng)的響應(yīng)apdu的數(shù)據(jù)流程

圖2 以java智能卡層次模型為參考的命令apdu和相應(yīng)的響應(yīng)apdu的數(shù)據(jù)流程

    為了在編碼時(shí)或其后能迅速對(duì)差錯(cuò)定位,程序員可用一個(gè)智能卡java仿真器,這使其可對(duì)代碼的執(zhí)行逐步跟蹤,去檢驗(yàn)變量并方便而又迅速做出任何必需的糾正。這種仿真器的樣例,如圖3所示。

    與此有關(guān)的是,對(duì)于比較大型的和那些把安全性作為關(guān)鍵的項(xiàng)目要執(zhí)行一些適當(dāng)?shù)臏y(cè)試。這些測(cè)試對(duì)命令和響應(yīng)的所有成功的結(jié)果和最重要的錯(cuò)誤結(jié)果進(jìn)行檢查。由獨(dú)立方對(duì)源代碼所做的檢驗(yàn)也可包括在內(nèi)。

    就像從此例中所看到的,用智能卡的java顯著減少了編程所需時(shí)間,作為附帶的效果它還降低了差錯(cuò)出現(xiàn)的機(jī)會(huì)。然而,編碼本身僅僅是開(kāi)發(fā)智能卡軟件的許多部分之一。java對(duì)智能卡的主要好處是它使得許多不同的程序員可以共同開(kāi)發(fā)智能卡的可執(zhí)行程序,而不是少量的由卡制造商雇用的軟件開(kāi)發(fā)者。

    為了生產(chǎn)智能卡的java支程序,不僅應(yīng)把操作系統(tǒng)的特殊性能考慮在內(nèi),同時(shí)還應(yīng)顧及java卡2.0規(guī)范的性能特點(diǎn),現(xiàn)將它們列舉簡(jiǎn)述如下: 

    1)執(zhí)行速度

    除了其存儲(chǔ)量的要求外,智能卡java的關(guān)鍵要點(diǎn)還在于其較低的執(zhí)行速度。然而,在匯編程序和java之間比較難以做出合理的折中,對(duì)此的主要理由是只要程序的行為在對(duì)終端的接口處相同并沒(méi) 有絕對(duì)的必要像在匯編中那樣去在java中建立起同樣的處理過(guò)程。例如,對(duì)于java程序并不總是需要文件系 統(tǒng),而且可能不會(huì)有任何人會(huì)用java來(lái)編寫一個(gè)加密算法。 

    另一個(gè)普遍的考慮是應(yīng)當(dāng)盡可能多的在java架構(gòu)中使用方法(method),因?yàn)樗鼈兪遣糠值厥褂媚繕?biāo)處理 器的本機(jī)代碼編碼的,這樣可導(dǎo)致處理速度的明顯加快。作為一條準(zhǔn)則,純處理時(shí)間,不包括數(shù)據(jù)傳輸所需 的時(shí)間,可以假定為普通匯編程序的2~3倍。

    2)應(yīng)用選擇

    在java卡中選擇一特定的應(yīng)用相當(dāng)于用其惟一的aid去選擇相關(guān)的支程序。支程序在它被選中時(shí)就被調(diào)用, 所以它能進(jìn)行任何必需的初始化。此后,支程序自動(dòng)接收所有從終端發(fā)送至智能卡的命令apdu,如果支程序 未被選擇,它就是非活性的并且也不涉及任何數(shù)據(jù)傳送。

    3)防火墻——保持應(yīng)用間相隔離

    從計(jì)算的觀點(diǎn)看來(lái),在智能卡中的各個(gè)支程序相互間是完全絕緣的,任何可能的相互影響都被java虛擬機(jī) 的安全管理器和智能卡操作系統(tǒng)所阻止。然而,一個(gè)支程序可以使它自己的數(shù)據(jù)對(duì)象在必要時(shí)為另外的支程 序使用,一個(gè)典型的例子是pin,它對(duì)卡中的所有應(yīng)用(意即那些支程序)是同樣有效的。

    4)交易完整性——原子進(jìn)程(atomic processes)會(huì)話期間的突然斷電必須不致引起支程序的數(shù)據(jù)處于未規(guī)定的狀態(tài)。當(dāng)一對(duì)象被修改時(shí),這一點(diǎn)由虛擬機(jī)或操作系統(tǒng)隱含地予以保護(hù)。然而,如果必須無(wú)條件地保證跨越數(shù)個(gè)對(duì)象或過(guò)程時(shí)的完整性,則支程序的程序員可以采用那些專用的機(jī)制,使用這些機(jī)制,有可能確切保證所提及的這些對(duì)象或是保留在它們?cè)瓉?lái)的狀態(tài),或是采取新?tīng)顟B(tài)。

    5)文件系統(tǒng)

    對(duì)于一個(gè)支程序并不強(qiáng)制它必須有自己的文件系統(tǒng)。對(duì)于某些應(yīng)用,它完全合適于建立起與文件無(wú)關(guān)的數(shù)據(jù)對(duì)象,它們或是可用標(biāo)準(zhǔn)的命令訪問(wèn)或是用程序員自己定義的命令訪問(wèn)(私用命令)。沒(méi)有文件系統(tǒng)的支程序的好處再次和過(guò)去已有的在智能卡中需要節(jié)約使用存儲(chǔ)量聯(lián)系起來(lái)。此外,java的面向?qū)ο蟮奶匦允沟脤?duì)數(shù)據(jù)對(duì)象的訪問(wèn)可按照其相關(guān)的調(diào)用條件來(lái)調(diào)用對(duì)象。在這方面,對(duì)某些應(yīng)用有可能實(shí)現(xiàn)滿足非常專門需求的訪問(wèn)。例如,該應(yīng)用或用戶有可能提供使其他方面繼承他們的訪問(wèn)特權(quán)。

    盡管如此,對(duì)pc機(jī)和智能卡二者來(lái)說(shuō),通?,F(xiàn)在的應(yīng)用表明對(duì)數(shù)據(jù)的存儲(chǔ)和管理仍經(jīng)常采用面向文件的結(jié)構(gòu)。這種選擇并未被java卡規(guī)范所排除,因?yàn)樗峁┝怂旧淼年P(guān)于iso/iec 7816-4,文件結(jié)構(gòu)的類。這些接口也提供了兼容已有的具有標(biāo)準(zhǔn)文件樹(shù)的應(yīng)用的java智能卡基礎(chǔ)。

     6)刪除對(duì)象——持久的和暫時(shí)的對(duì)象

    所有的對(duì)象當(dāng)它們是用new()產(chǎn)生時(shí),都一致被建立為EEPROM中的持久對(duì)象。持久性指的是一對(duì)象保存到會(huì)話期結(jié)束的能力,它和暫時(shí)性是相對(duì)的。持久對(duì)象在會(huì)話期結(jié)束和突然掉電兩種情況下都能生存而不會(huì)丟失數(shù)據(jù)或連貫性。任何對(duì)象都只有在有指向它的引用時(shí)才存在,如果引用去掉了,雖然它仍舊占據(jù)著存儲(chǔ)器然而對(duì)象實(shí)際上就不再存在了。對(duì)此的惟一的補(bǔ)救法是用一個(gè)具有碎片搜索的文件管理器,但是在java卡2.0規(guī)范中沒(méi)有提供它,它占用的存儲(chǔ)量太多。

    有可能把一個(gè)持久對(duì)象轉(zhuǎn)換成暫時(shí)對(duì)象,然后可以把它放在ram中。轉(zhuǎn)換只能在這一方向上進(jìn)行。暫時(shí)對(duì)象的數(shù)據(jù)在現(xiàn)行會(huì)話期結(jié)束時(shí)會(huì)丟掉,然后用其標(biāo)準(zhǔn)值重新初始化。

    7)刪除支程序

    java卡2.0規(guī)范沒(méi)有提供在智能卡中刪除支程序的機(jī)制。最多可以做到的是依靠其本身的功能來(lái)阻塞支程序,但是它所占用的存儲(chǔ)器將永遠(yuǎn)失去,不能為別的支程序使用。

    在測(cè)試卡時(shí),通常具有可以刪掉存儲(chǔ)區(qū)域中的整個(gè)支程序的專門功能,這種能力僅在調(diào)整和測(cè)試的環(huán)境中才能見(jiàn)到其存在,而不存在于已發(fā)行的供一般使用的“真正”卡中。 

    如果智能卡java虛擬機(jī)的未來(lái)版本能夠包括一個(gè)碎片收集器,就將有可能從存儲(chǔ)器中刪除支程序。

    8)加密算法

    現(xiàn)在一般使用的許多加密算法或是做了些修改并在位水平上(諸如des)有所改變,或是使用了長(zhǎng)數(shù)字(諸如rsa)的算術(shù)。目前,有java的智能卡不適合于用java對(duì)這些算法編程,這是由于其執(zhí)行速度較低或存儲(chǔ)容量有限的緣故。

    結(jié)果,在這些卡中通常有著javacardx,ct)rpto類,它們對(duì)用本機(jī)代碼編程的算法的實(shí)現(xiàn)提供了一個(gè)接口(api)。例如,這樣就使得具有三個(gè)獨(dú)立的56位密鑰的真正的3-des加密算法用相繼三次調(diào)用適當(dāng)?shù)木哂?6位密鑰的單重des算法得以用java編程。用java這樣實(shí)現(xiàn)的3-des所提供的數(shù)據(jù)保護(hù)水平僅僅較用本機(jī)匯編代碼所提供的約低30%。

    9)密碼術(shù)和出口限制

    許多國(guó)家對(duì)具有通用操作系統(tǒng)并經(jīng)內(nèi)部接口可自由使用數(shù)據(jù)加密和解密功能的智能卡的出口是需要許可證的。這就是說(shuō),這些類型的智能卡完全不能出口到某些國(guó)家,或者必須等待數(shù)月之久以取得由負(fù)赍機(jī)關(guān)發(fā)給的適當(dāng)?shù)脑S可證才能出口。

    因此,在java卡中的加密功能的類被構(gòu)造成它們可直接用于對(duì)一般數(shù)據(jù)的解密和mac計(jì)算但卻不能加密。這完全適合于許多應(yīng)用,因而在許多國(guó)家可以使用‘簡(jiǎn)化’的出口許可過(guò)程。

    然而,如果一特定的應(yīng)用需要把數(shù)據(jù)加密,則卡制造商可把類…cryptoenc。des3ˉenckev和…cryptoenc.des-enckey包括在內(nèi),它使加密成為可能。不過(guò),從純粹的密碼術(shù)觀點(diǎn)看來(lái),完全有可能輕而易舉地實(shí)現(xiàn)自由地用于加密和解密的處理,而不必使用那些“加密”類。

    10)存儲(chǔ)量的使用最少

本文關(guān)鍵詞:智能卡,java,cap,仿真器
回到頂部