智能卡中Java軟件的開(kāi)發(fā)
文章出處:http://psychicreadingswithdeb.com 作者:Admin 人氣: 發(fā)表時(shí)間:2011年09月27日
如何去開(kāi)發(fā)一個(gè)智能卡的java程序并運行它?第1件事是所開(kāi)發(fā)的程序用于文本編輯器時(shí)能產(chǎn)生真正的java 源代碼,然后用任何所期望的java編譯器編譯源代碼,它產(chǎn)生與機器無(wú)關(guān)的字節碼。到此為止,和用java對 pc機編程的過(guò)程是一樣的。
現在,字節碼作為類(lèi)文件被傳送到j(luò )ava虛擬機的卡外部分(卡外vivi),卡外vm檢查其格式、語(yǔ)法、字段 基準和與程序有關(guān)的方面。如果所有這些檢查都通過(guò),則卡外vm建立起一個(gè)稱(chēng)為卡的應用cap(card application)文件。如有必要,可以隨應用以數字簽名的方式來(lái)提供,數字簽名的提供保證了cap文件已被 卡外vm檢查過(guò)并已被鑒明。如果這里不存在可以被驗證的簽名,則就將有可能用一個(gè)受操縱的支程序繞過(guò)卡 內vm的安全機制,因為在智能卡上沒(méi)有足夠的存儲器能使卡內vm本身去進(jìn)行所有的安全檢查。在此之后,支 程序以cap文件的格式裝入智能卡中。智能卡首先驗證通常會(huì )存在的數字簽名,一旦檢驗通過(guò)后就把支程序 傳給卡內vm。在此之后所發(fā)生的事在很大程度上和pc機里的虛擬機執行程序的情況很相似??▋葀m逐行測試 并解釋字節碼,產(chǎn)生智能卡處理器的機器指令,這一過(guò)程如圖1所示。
圖1所產(chǎn)生的目標處理器的本機程序代碼被執行后將產(chǎn)生相應的響應apdu,從命令apdu到響應apdu的數據流 程如圖2所示。
實(shí)際的過(guò)程,自然要比上面所述的要復雜些。希望程序員在接受到任務(wù)后不要立即開(kāi)始java代碼的編寫(xiě), 相反,首先要分析和設計確定真正的需求。然后,才可開(kāi)始編程。
圖1 從程序開(kāi)發(fā)到智能卡微控制器中的java虛擬機執行程序的過(guò)程
圖2 以java智能卡層次模型為參考的命令apdu和相應的響應apdu的數據流程
為了在編碼時(shí)或其后能迅速對差錯定位,程序員可用一個(gè)智能卡java仿真器,這使其可對代碼的執行逐步跟蹤,去檢驗變量并方便而又迅速做出任何必需的糾正。這種仿真器的樣例,如圖3所示。
與此有關(guān)的是,對于比較大型的和那些把安全性作為關(guān)鍵的項目要執行一些適當的測試。這些測試對命令和響應的所有成功的結果和最重要的錯誤結果進(jìn)行檢查。由獨立方對源代碼所做的檢驗也可包括在內。
就像從此例中所看到的,用智能卡的java顯著(zhù)減少了編程所需時(shí)間,作為附帶的效果它還降低了差錯出現的機會(huì )。然而,編碼本身僅僅是開(kāi)發(fā)智能卡軟件的許多部分之一。java對智能卡的主要好處是它使得許多不同的程序員可以共同開(kāi)發(fā)智能卡的可執行程序,而不是少量的由卡制造商雇用的軟件開(kāi)發(fā)者。
為了生產(chǎn)智能卡的java支程序,不僅應把操作系統的特殊性能考慮在內,同時(shí)還應顧及java卡2.0規范的性能特點(diǎn),現將它們列舉簡(jiǎn)述如下:
1)執行速度
除了其存儲量的要求外,智能卡java的關(guān)鍵要點(diǎn)還在于其較低的執行速度。然而,在匯編程序和java之間比較難以做出合理的折中,對此的主要理由是只要程序的行為在對終端的接口處相同并沒(méi) 有絕對的必要像在匯編中那樣去在java中建立起同樣的處理過(guò)程。例如,對于java程序并不總是需要文件系 統,而且可能不會(huì )有任何人會(huì )用java來(lái)編寫(xiě)一個(gè)加密算法。
另一個(gè)普遍的考慮是應當盡可能多的在java架構中使用方法(method),因為它們是部分地使用目標處理 器的本機代碼編碼的,這樣可導致處理速度的明顯加快。作為一條準則,純處理時(shí)間,不包括數據傳輸所需 的時(shí)間,可以假定為普通匯編程序的2~3倍。
2)應用選擇
在java卡中選擇一特定的應用相當于用其惟一的aid去選擇相關(guān)的支程序。支程序在它被選中時(shí)就被調用, 所以它能進(jìn)行任何必需的初始化。此后,支程序自動(dòng)接收所有從終端發(fā)送至智能卡的命令apdu,如果支程序 未被選擇,它就是非活性的并且也不涉及任何數據傳送。
3)防火墻——保持應用間相隔離
從計算的觀(guān)點(diǎn)看來(lái),在智能卡中的各個(gè)支程序相互間是完全絕緣的,任何可能的相互影響都被java虛擬機 的安全管理器和智能卡操作系統所阻止。然而,一個(gè)支程序可以使它自己的數據對象在必要時(shí)為另外的支程 序使用,一個(gè)典型的例子是pin,它對卡中的所有應用(意即那些支程序)是同樣有效的。
4)交易完整性——原子進(jìn)程(atomic processes)會(huì )話(huà)期間的突然斷電必須不致引起支程序的數據處于未規定的狀態(tài)。當一對象被修改時(shí),這一點(diǎn)由虛擬機或操作系統隱含地予以保護。然而,如果必須無(wú)條件地保證跨越數個(gè)對象或過(guò)程時(shí)的完整性,則支程序的程序員可以采用那些專(zhuān)用的機制,使用這些機制,有可能確切保證所提及的這些對象或是保留在它們原來(lái)的狀態(tài),或是采取新?tīng)顟B(tài)。
5)文件系統
對于一個(gè)支程序并不強制它必須有自己的文件系統。對于某些應用,它完全合適于建立起與文件無(wú)關(guān)的數據對象,它們或是可用標準的命令訪(fǎng)問(wèn)或是用程序員自己定義的命令訪(fǎng)問(wèn)(私用命令)。沒(méi)有文件系統的支程序的好處再次和過(guò)去已有的在智能卡中需要節約使用存儲量聯(lián)系起來(lái)。此外,java的面向對象的特性使得對數據對象的訪(fǎng)問(wèn)可按照其相關(guān)的調用條件來(lái)調用對象。在這方面,對某些應用有可能實(shí)現滿(mǎn)足非常專(zhuān)門(mén)需求的訪(fǎng)問(wèn)。例如,該應用或用戶(hù)有可能提供使其他方面繼承他們的訪(fǎng)問(wèn)特權。
盡管如此,對pc機和智能卡二者來(lái)說(shuō),通?,F在的應用表明對數據的存儲和管理仍經(jīng)常采用面向文件的結構。這種選擇并未被java卡規范所排除,因為它提供了它本身的關(guān)于iso/iec 7816-4,文件結構的類(lèi)。這些接口也提供了兼容已有的具有標準文件樹(shù)的應用的java智能卡基礎。
6)刪除對象——持久的和暫時(shí)的對象
所有的對象當它們是用new()產(chǎn)生時(shí),都一致被建立為EEPROM中的持久對象。持久性指的是一對象保存到會(huì )話(huà)期結束的能力,它和暫時(shí)性是相對的。持久對象在會(huì )話(huà)期結束和突然掉電兩種情況下都能生存而不會(huì )丟失數據或連貫性。任何對象都只有在有指向它的引用時(shí)才存在,如果引用去掉了,雖然它仍舊占據著(zhù)存儲器然而對象實(shí)際上就不再存在了。對此的惟一的補救法是用一個(gè)具有碎片搜索的文件管理器,但是在java卡2.0規范中沒(méi)有提供它,它占用的存儲量太多。
有可能把一個(gè)持久對象轉換成暫時(shí)對象,然后可以把它放在ram中。轉換只能在這一方向上進(jìn)行。暫時(shí)對象的數據在現行會(huì )話(huà)期結束時(shí)會(huì )丟掉,然后用其標準值重新初始化。
7)刪除支程序
java卡2.0規范沒(méi)有提供在智能卡中刪除支程序的機制。最多可以做到的是依靠其本身的功能來(lái)阻塞支程序,但是它所占用的存儲器將永遠失去,不能為別的支程序使用。
在測試卡時(shí),通常具有可以刪掉存儲區域中的整個(gè)支程序的專(zhuān)門(mén)功能,這種能力僅在調整和測試的環(huán)境中才能見(jiàn)到其存在,而不存在于已發(fā)行的供一般使用的“真正”卡中。
如果智能卡java虛擬機的未來(lái)版本能夠包括一個(gè)碎片收集器,就將有可能從存儲器中刪除支程序。
8)加密算法
現在一般使用的許多加密算法或是做了些修改并在位水平上(諸如des)有所改變,或是使用了長(cháng)數字(諸如rsa)的算術(shù)。目前,有java的智能卡不適合于用java對這些算法編程,這是由于其執行速度較低或存儲容量有限的緣故。
結果,在這些卡中通常有著(zhù)javacardx,ct)rpto類(lèi),它們對用本機代碼編程的算法的實(shí)現提供了一個(gè)接口(api)。例如,這樣就使得具有三個(gè)獨立的56位密鑰的真正的3-des加密算法用相繼三次調用適當的具有56位密鑰的單重des算法得以用java編程。用java這樣實(shí)現的3-des所提供的數據保護水平僅僅較用本機匯編代碼所提供的約低30%。
9)密碼術(shù)和出口限制
許多國家對具有通用操作系統并經(jīng)內部接口可自由使用數據加密和解密功能的智能卡的出口是需要許可證的。這就是說(shuō),這些類(lèi)型的智能卡完全不能出口到某些國家,或者必須等待數月之久以取得由負赍機關(guān)發(fā)給的適當的許可證才能出口。
因此,在java卡中的加密功能的類(lèi)被構造成它們可直接用于對一般數據的解密和mac計算但卻不能加密。這完全適合于許多應用,因而在許多國家可以使用‘簡(jiǎn)化’的出口許可過(guò)程。
然而,如果一特定的應用需要把數據加密,則卡制造商可把類(lèi)…cryptoenc。des3ˉenckev和…cryptoenc.des-enckey包括在內,它使加密成為可能。不過(guò),從純粹的密碼術(shù)觀(guān)點(diǎn)看來(lái),完全有可能輕而易舉地實(shí)現自由地用于加密和解密的處理,而不必使用那些“加密”類(lèi)。
10)存儲量的使用最少