李智聰, 凌力
(復(fù)旦大學(xué) 通信科學(xué)與工程系, 上海 200433)
智能卡(Smart Card)是內(nèi)嵌集成電路芯片的卡片的通稱,廣泛應(yīng)用于金融、電信、公安、交通、稅務(wù)、電子政務(wù)等領(lǐng)域[1]。傳統(tǒng)的Native卡的操作系統(tǒng)(Chip Operating System,COS)和硬件平臺緊密相關(guān),應(yīng)用的開發(fā)和底層COS密不可分。由Sun公司主導(dǎo)的Java智能卡則與之不同,卡片具有通用的API接口,應(yīng)用的開發(fā)與硬件平臺無關(guān),通用性更好。雖然國內(nèi)市場仍然是Native卡占據(jù)主導(dǎo)地位,但在國外,Java智能卡已經(jīng)廣泛應(yīng)用于用戶身份識別、交通、數(shù)字內(nèi)容發(fā)行、通訊以及金融等領(lǐng)域。下文將對Java Card技術(shù)進(jìn)行詳細(xì)的探討,并著重分析Java Card技術(shù)在移動支付領(lǐng)域的潛在應(yīng)用優(yōu)勢。
Java Card是基于Java語言的智能卡技術(shù),在傳統(tǒng)的智能卡平臺上實現(xiàn)了一個Java程序安裝和運行的軟硬件環(huán)境,與傳統(tǒng)的智能卡相比,Java智能卡具有以下的優(yōu)點:
(1)平臺無關(guān)性。符合Java Card規(guī)范的Java Card應(yīng)用程序可以運行在不同的芯片設(shè)計或者不同制造商的智能卡上。
(2)多應(yīng)用支持和動態(tài)性[2,3]。同一服務(wù)提供商或者不同服務(wù)提供商的多個應(yīng)用可以安全地運行在同一張卡上,并且在片發(fā)行后,支持應(yīng)用的動態(tài)下載、更新和刪除,更具多用途性和靈活性。
(3)開放性和通用性。Java Card技術(shù)規(guī)范兼容ISO 7816、EMV等智能卡國際標(biāo)準(zhǔn)和GP(Global Platform)、ETSI(European Telecommunications Standards Institute)等工業(yè)規(guī)范。
(4)安全性[4]。既繼承了Java語言的安全特性,又具備如事務(wù)、防火墻、字節(jié)碼驗證、分離的Java虛擬機(jī)等Java Card平臺獨有的安全特性,在Java Card 3平臺中,安全性又得到了進(jìn)一步的加強。
1.1 Java Card平臺的系統(tǒng)結(jié)構(gòu)
1.1.1 Java Card硬件系統(tǒng)
主要包括智能卡CPU與各種協(xié)處理器、存儲器(ROM、RAM、EEPROM)和IO模塊,硬件的各項指標(biāo)需要符合ISO/IEC 7816國際標(biāo)準(zhǔn)。
1.1.2 Java Card片上操作系統(tǒng)
COS與智能卡硬件系統(tǒng)緊密耦合,不同的硬件平臺COS差異很大,與一般意義的微機(jī)操作系統(tǒng)有很大區(qū)別,COS解決的基本問題包括:對外部通信命令的接收和處理、存儲管理、平臺硬件驅(qū)動管理等。
1.1.3 本地方法模塊
本地方法模塊由與硬件相關(guān)的語言編寫,負(fù)責(zé)底層通信協(xié)議實現(xiàn)以及存儲管理等硬件相關(guān)的功能,為上層應(yīng)用使用硬件資源提供接口。
1.1.4 Java Card運行時環(huán)境
Java Card運行時環(huán)境(Java Card Runtime Environment,JCRE)由Java Card虛擬機(jī)(Java Card Virtual Machine,JCVM)、Java Card框架(Java Card Framework)、Java Card應(yīng)用程序編程接口(Java Card API)、企業(yè)專用的擴(kuò)展類庫等模塊構(gòu)成。JCRE實際上等同于Java Card的操作系統(tǒng),對卡內(nèi)系統(tǒng)服務(wù)進(jìn)行封裝,對外提供統(tǒng)一的應(yīng)用接口。
1.1.5 Java Card Applet
Applet是運行在Java Card平臺上的小應(yīng)用程序,為用戶提供服務(wù),JCRE通過AID(Application Identifier)識別并管理Applet,Applet的生命周期包括install、select、process、deselect和uninstall,如圖1所示。
圖1 Java智能卡的系統(tǒng)結(jié)構(gòu)
Sun公司定義了一系列的Java Card技術(shù)規(guī)范,將Java技術(shù)應(yīng)用于智能卡及其它可用資源有限(存儲資源和計算能力)的設(shè)備。Java Card技術(shù)規(guī)范的最新版本是3.0.5,包括3部分:Java Card虛擬機(jī)規(guī)范、Java Card運行環(huán)境規(guī)范和Java Card API規(guī)范。Java Card 3平臺包含兩個不同的版本,分別是Classic版本和Connected版本,Classic版本是Java Card 2平臺的改進(jìn)版本,兼容Java Card 2平臺,而Connected版本是面向高端智能卡應(yīng)用的,如圖2所示。
圖2 Java Card 3平臺的技術(shù)架構(gòu)
2.1 JCRE規(guī)范
JCRE規(guī)范[5]由Java Card虛擬機(jī)、Java Card API(包括企業(yè)專用的擴(kuò)展)和系統(tǒng)服務(wù)等組成。JCRE規(guī)范定義了Java Card虛擬機(jī)生命周期、Applet生命周期、Applet隔離和對象共享、事務(wù)和原子性、遠(yuǎn)程方法調(diào)用、API調(diào)用、Java虛擬機(jī)以及Applet的安裝與卸載等相關(guān)內(nèi)容。JCRE建立在底層硬件和片上操作系統(tǒng)之上,負(fù)責(zé)卡片資源的管理、網(wǎng)絡(luò)通信、Applet的執(zhí)行、卡內(nèi)系統(tǒng)和Applet的安全,同時封裝系統(tǒng)服務(wù),對外提供與平臺無關(guān)的接口。
2.2 JCVM規(guī)范
JCVM規(guī)范[6]定義了Java編程語言的子集和用于智能卡的Java虛擬機(jī),包括二進(jìn)制數(shù)據(jù)表示、文件格式以及JCVM指令集。Java Card平臺的虛擬機(jī)實現(xiàn)分為兩部分:卡外虛擬機(jī)和卡上虛擬機(jī)??ㄉ系腏ava虛擬機(jī)負(fù)責(zé)解釋字節(jié)碼、管理類和對象等工作??ㄍ馓摂M機(jī)是一個開發(fā)工具,也稱為Java Card轉(zhuǎn)換器工具,負(fù)責(zé)加載、驗證和準(zhǔn)備Java類,為Applet在卡上運行做準(zhǔn)備。JCVM使得用Java編寫的應(yīng)用程序可以運行在不同的智能卡平臺上,實現(xiàn)了“一次編寫,到處運行”。
2.3 Java Card API規(guī)范
Java Card API規(guī)范[7]定義了傳統(tǒng)Java編程語言API的小型子集,甚至比J2ME的CLDC(Connected, Limited Device Configuration)子集還要小,除此之外,Java Card框架定義了Java Card平臺的核心類以便專門支持Java Card開發(fā)。由于智能卡的存儲資源和計算能力比較有限,所以Java Card并不支持Java的全部功能。
Java Card 3平臺的Connected版本為高端智能卡開發(fā)提供高級功能,如多線程、并發(fā)、豐富的連接功能、支持ISO 7816-4協(xié)議的接觸式和ISO 14443協(xié)議的非接觸式高速IO。Connected版本中的Java虛擬機(jī)基于在智能手機(jī)中廣泛使用的J2ME的CLDC(Connected Limited Device Configuration)虛擬機(jī),具備更豐富的Java語言特性,能提供更安全的執(zhí)行環(huán)境。
3.1 增強的Java虛擬機(jī)
Java Card 3平臺的Connected版本增強了Java虛擬機(jī)的功能和性能,并且實現(xiàn)了部分了J2SE平臺的最新功能。Connected版本支持多線程、卡上字節(jié)碼驗證、自動垃圾回收、更多的數(shù)據(jù)類型(Char、Long、String)、多維數(shù)組、基本的包裝類(Boolean、Integer)、字符串操作類(StringTokenizer、StringBuffer、StringBuilder)、多線程支持類(Thread)、I/O類(Reader、Writer、Stream)、容器類(Vector、HashTable、Iterator)、日期時間使用類(Calendar、Date、TimeZone)、本地化和國際化支持類(Locale、ResourceBundle)等Classic版本不具備的特性[8]。而且還具備泛型、注解、斷言、循環(huán)增強、可變參數(shù)、靜態(tài)導(dǎo)入等J2SE技術(shù)的高級特性。
3.2 增強的編程模型
Java Card 3平臺的Connected版本提供更接近主流Java編程環(huán)境的編程體驗,支持如下的Web應(yīng)用開發(fā)、持久化、多線程等新功能[9]:
(1)Web應(yīng)用。Web應(yīng)用由卡上的Web應(yīng)用容器管理,Web應(yīng)用通過HTTP或者HTTPS協(xié)議與卡外客戶端通信,Web應(yīng)用容器可并發(fā)處理HTTP請求。Java Card 3平臺實現(xiàn)了servlet、filter、listener、靜態(tài)資源(如html文件、圖片)、Web應(yīng)用程序部署描述符(Web Application Deployment Descriptor)等基本W(wǎng)eb應(yīng)用組件,融合了Web服務(wù)架構(gòu)。
(2)擴(kuò)展的Applet應(yīng)用模型。Applet是擴(kuò)展的Applet應(yīng)用模型中處理APDU命令的組件,一個擴(kuò)展的Applet應(yīng)用可包含多個Applet。擴(kuò)展的Applet應(yīng)用由卡上Applet容器管理。與Classic版本的Applet應(yīng)用模型不同,在擴(kuò)展的Applet應(yīng)用模型中,源碼可包含多個類包,可以調(diào)用Connected版本的類庫,可以多線程并發(fā)處理APDU命令。
(3)多線程。Java Card虛擬機(jī)支持應(yīng)用的多線程和并發(fā)執(zhí)行,并提供J2SE中的部分多線程API,前面提到的Web應(yīng)用和擴(kuò)展的Applet應(yīng)用模型的以及異步的事件通知模型等都是多線程執(zhí)行環(huán)境。
(4)持久化。存儲空間分為易失性內(nèi)存(如DRAM)和非易失性內(nèi)存(如ROM、EEPROM和flash),分別存放生命周期短的瞬態(tài)對象和生命周期長的持久化對象,JCVM通過對象可達(dá)性分析策略控制瞬態(tài)對象向持久化對象轉(zhuǎn)換。
(5)增強的事務(wù)。Connected版本的事務(wù)機(jī)制除了具備原子性、一致性和持久性等一般特性外,還支持并發(fā)事務(wù)、內(nèi)嵌事務(wù)、注解事務(wù)等新特征。
(6)可重復(fù)的任務(wù)。允許Web應(yīng)用和擴(kuò)展的Applet應(yīng)用在獨立的線程中注冊并運行周期性的任務(wù),這些任務(wù)可在平臺重啟時自動重新執(zhí)行。
(7)增強的內(nèi)部應(yīng)用間通信。除了原有的共享接口機(jī)制(Shareable Interface Mechanism)外,還包括基于共享接口對象的服務(wù)機(jī)制和事件通知機(jī)制兩種擴(kuò)展的應(yīng)用間通信機(jī)制。
(8)豐富的網(wǎng)絡(luò)通信功能??ㄉ系膽?yīng)用不僅可以為卡外客戶端提供服務(wù),還可以作為客戶端訪問網(wǎng)絡(luò)服務(wù)。網(wǎng)絡(luò)連接功能由通用連接框架(Generic Connection Framework)提供,支持TCP、UDP、TLS、HTTP、HTTPS協(xié)議,如圖3所示。
圖3 Java Card 3平臺連接層及協(xié)議棧
Java Card技術(shù)是Sun公司通過與來自金融機(jī)構(gòu)、通信運營商、智能卡制造商、半導(dǎo)體生產(chǎn)商、軟件開發(fā)等智能卡行業(yè)相關(guān)領(lǐng)域的專家廣泛合作,基于J2SE技術(shù)開發(fā)而來。Java Card平臺已廣泛應(yīng)用于各個行業(yè),經(jīng)受了真實世界的安全考驗。Java Card平臺是唯一一個經(jīng)過所有主要金融支付協(xié)會安全評估的平臺,且通過了美國國防部和美國國家安全局這樣的政府機(jī)構(gòu)的安全評估并已實現(xiàn)兼容FIPS 140-1標(biāo)準(zhǔn)[10]。
4.1 Java編程語言的安全性
與其它專有的智能卡片上操作系統(tǒng)相比,Java Card技術(shù)具備面向?qū)ο?、作用域管理機(jī)制、契約式編程、強類型、嚴(yán)格的Java字節(jié)碼規(guī)范、不支持指針、數(shù)組邊界檢查、透明的內(nèi)存分配和管理機(jī)制等一些Java語言的安全特性,這些特性體現(xiàn)了Java Card技術(shù)在編程語言層面的安全性。
4.2 Java Card平臺的安全特性
JCRE通過以下一些重要的機(jī)制為Java Card平臺上的應(yīng)用運行和管理提供安全保護(hù):
(1)事務(wù)和原子性。JCRE對程序的執(zhí)行提供事務(wù)操作,對于一個事務(wù)中的多次數(shù)據(jù)更新操作,如果事務(wù)成功完成,則所有更新被執(zhí)行,否則,所有更新被撤銷。即使發(fā)生斷電或程序錯誤,原子性也能確保數(shù)據(jù)完整性和狀態(tài)一致性。
(2)Applet防火墻 。Java Card平臺通過Applet防火墻為同一個智能卡上的Applet提供隔離的安全執(zhí)行環(huán)境,Applet防火墻機(jī)制為Applet的執(zhí)行提供了透明的私有內(nèi)存,保護(hù)了Applet中的數(shù)據(jù)安全,Applet的執(zhí)行錯誤或者惡意行為并不影響智能卡上的其它Applet,如圖4所示。
圖4 Java Card防火墻和數(shù)據(jù)共享
(3)代碼隔離和包訪問控制。通過類裝載器委托機(jī)制,實現(xiàn)不同的命名空間,保證一個應(yīng)用的代碼不影響其它應(yīng)用的代碼,并且不被其它應(yīng)用覆蓋或者直接訪問。此外還能防止系統(tǒng)類被用戶代碼覆蓋,支持標(biāo)準(zhǔn)的Jar包封裝機(jī)制,防止已加載的包被覆蓋或者擴(kuò)展。
(4)分離的Java虛擬機(jī)架構(gòu)。Java Card平臺的分離虛擬機(jī)架構(gòu)是Java Card平臺獨有的,在保證安全的前提下,減少了下載到卡上的Applet大小和降低了卡上運行時環(huán)境對內(nèi)存的要求??ㄍ馓摂M機(jī)負(fù)責(zé)類的連接、引用解析、源碼的轉(zhuǎn)換和安全校驗,卡上虛擬機(jī)負(fù)責(zé)Java字節(jié)碼的解析執(zhí)行??ㄍ馓摂M機(jī)確保了Applet的可執(zhí)行代碼的格式正確性和數(shù)據(jù)完整性,卡上虛擬機(jī)保證了程序運行時的安全性。
(5)安全和加密類。Java Card平臺的安全和加密包允許類似于J2SE的安全類加載器的應(yīng)用程序管理,可實現(xiàn)Applet的安全下載和校驗。安全和加密包支持對稱密鑰算法、非對稱密鑰算法、密鑰接口、簽名的生成和驗證、信息摘要、隨機(jī)數(shù)據(jù)生成以及PIN管理等。
(6)獨立的應(yīng)用命名空間。支持統(tǒng)一的命名機(jī)制(Unified Naming Scheme),對Java Card 3平臺上的應(yīng)用及其資源唯一命名,應(yīng)用由URI(Uniform Resource Identifier)標(biāo)識,應(yīng)用的資源路徑相對于應(yīng)用的URI。獨立的應(yīng)用命名空間更利于多應(yīng)用的安全發(fā)布與管理。
(7)完善的安全策略。Java Card平臺支持基于權(quán)限和基于角色的安全策略,根據(jù)應(yīng)用類型劃分不同的安全域,支持多重的用戶驗證和授權(quán),兼容如GlobalPlatform的卡應(yīng)用管理框架。
(8)網(wǎng)絡(luò)安全。通過安全通信協(xié)議(SSL、TLS、HTTPS)、加密服務(wù)和認(rèn)證授權(quán)等方式保證實現(xiàn)點對點的安全通信。Web應(yīng)用還可以指定專用的安全端口和特定的安全策略。
(9)可擴(kuò)展的加密框架。Java Card 3平臺的實現(xiàn)者為每種加密服務(wù)提供多種算法及實現(xiàn),開發(fā)人員可以選擇最合適的加密算法及實現(xiàn),例如可以選擇特定的提供者的加密算法實現(xiàn)。
在移動互聯(lián)網(wǎng)時代,移動支付已經(jīng)融入到人們生活的方方面面,Apple Pay的面世極大地推動了NFC移動支付的發(fā)展。隨著移動支付行業(yè)的發(fā)展,更安全可靠、功能更豐富、使用更便捷的支付體驗是隨之而來的需求,如何整合多樣化的服務(wù),完善支付生態(tài)圈是移動支付服務(wù)提供者需要考慮的問題。我們可以考慮利用Java Card技術(shù)實現(xiàn)NFC移動支付,幫助提升支付服務(wù)的質(zhì)量。
目前在NFC移動支付的實現(xiàn)方案中,一般由安全單元為用戶信息和交易數(shù)據(jù)提供加密保護(hù),安全單元通常內(nèi)置于智能手機(jī)硬件平臺中,應(yīng)用起來不夠靈活,可擴(kuò)展性差,而且安全單元沒有統(tǒng)一的開發(fā)規(guī)范,支付應(yīng)用通用性差。我們可以考慮將安全單元集成到手機(jī)SIM卡上,并在SIM卡上運行Java Card平臺,使傳統(tǒng)的SIM卡成為一個Java智能卡,在提供常規(guī)的手機(jī)通信功能的同時,實現(xiàn)移動支付功能?;诳刹灏蔚腏ava智能SIM卡的移動支付方案具備以下一些優(yōu)勢:
(1)靈活性好。SIM卡是手機(jī)可拆卸部分,可以自由地更換,降低了支付應(yīng)用對具體手機(jī)平臺的依賴,應(yīng)用起來更靈活;可以在不更換手機(jī)的情況下,對支付應(yīng)用的硬件進(jìn)行升級;支付應(yīng)用可在符合標(biāo)準(zhǔn)的不同Java智能卡平臺中移植,通用性更強。
(2)安全性高。Java智能卡不僅具備一般智能卡的硬件層面的安全保護(hù),而且還進(jìn)一步在軟件層面為支付應(yīng)用的運行提供安全保護(hù)。Java Card平臺的安全特性為支付應(yīng)用的整個生命周期提供更多的保護(hù),而且應(yīng)用的易開發(fā)性好,能很好地適應(yīng)移動支付領(lǐng)域的快速發(fā)展。
(3)更快的執(zhí)行速度。Java Card平臺的多線程和并發(fā)特點,可以提高移動支付應(yīng)用處理任務(wù)的能力,可以在不影響響應(yīng)時間的情況下,應(yīng)用更復(fù)雜的加密算法,執(zhí)行多重的認(rèn)證,增強支付安全性。
(4)更豐富的網(wǎng)絡(luò)通信功能。相比于傳統(tǒng)SIM卡的OTA技術(shù)[11],Java智能卡支持加密通信、點對點通信,兼容成熟的Web技術(shù),更能滿足移動互聯(lián)網(wǎng)時代對終端網(wǎng)絡(luò)連接性的要求。除了通過移動終端的加密和認(rèn)證保護(hù)支付流程,還可以通過網(wǎng)絡(luò)連接云端服務(wù)器,進(jìn)行動態(tài)的加密和多重認(rèn)證,進(jìn)一步提高支付操作的安全性。而且Java智能卡可直接進(jìn)行點對點通信,無需借助移動終端,從而降低移動終端的安全漏洞對支付應(yīng)用的威脅。
(5)動態(tài)管理。在發(fā)卡后,仍可通過網(wǎng)絡(luò)對卡上的應(yīng)用執(zhí)行漏洞修復(fù)、更新升級等操作。使用過程中出現(xiàn)的問題和威脅可及時地報告云端服務(wù)器,由云端服務(wù)器進(jìn)行分析并處理,以應(yīng)對不斷變化的安全挑戰(zhàn)。
(6)多服務(wù)融合。不同服務(wù)提供商的應(yīng)用可在通過授權(quán)和驗證后安裝到卡片上,支付應(yīng)用可以為這些應(yīng)用提供充值、繳費、支付等服務(wù),在Java智能卡的安全環(huán)境中,搭建一個以支付功能為基礎(chǔ)的多功能支付生態(tài)圈,促進(jìn)多服務(wù)融合,打通線上線下支付領(lǐng)域,為用戶提供更加智能、更加多樣化的金融服務(wù),如圖5所示。
本文主要分析了Java Card的技術(shù)特點,并探討了Java Card技術(shù)應(yīng)用于NFC移動支付的潛在優(yōu)勢。在移動支付多服務(wù)融合、高安全性的發(fā)展趨勢下,Java Card技術(shù)作為一項開放、安全的智能卡技術(shù),應(yīng)用于NFC移動支付,能發(fā)揮其在功能和性能方面的優(yōu)勢,為用戶提供高質(zhì)量的支付服務(wù)。本文對于Java Card技術(shù)的應(yīng)用只是作了簡要的分析,更具體的研究工作還有待深入。
圖5 Java智能SIM卡應(yīng)用示意圖
[1] Raja Naeem Akram, Konstantinos Markantonakis. Smart cards: State-of-the-art to future directions[C]//IEEE International Symposium on Signal Processing and Information Technology, 2013:12-15.
[2] 董威. 多應(yīng)用智能卡新技術(shù)研究[D]. 北京:北京郵電大學(xué),2008.
[3] 柴洪峰. 智能卡多應(yīng)用操作系統(tǒng)的發(fā)展趨勢及研究[J]. 計算機(jī)應(yīng)用與軟件,2012,29(2):199-205.
[4] Mohammad R Eletriby, Mohamed Sobh, Ayman M, et al. High Performance Java Card Operating System[C]//2014 Eighth International Conference on Software Security and Reliability (SERE), 2014:30-39.
[5] Sun Microsystems, Inc.Specifications for the Java Card 3 Platform Version 3.0.5, Classic Edition[P]. 2015.
[6] Sun Microsystems, Inc. Java Card 3 Platform Virtual Machine Specification, Classic Edition Version 3.0.5[P]. 2015.
[7] Sun Microsystems, Inc. Java Card Platform Security White Paper[P]. 2001.
[8] Sun Microsystems, Inc. Java Card 3 Platform Virtual Machine Specification, Connected Edition Version 3.0.1[P]. 2009.
[9] Sun Microsystems, Inc. Java Card 3 Platform Runtime Environment Specification, Connected Edition Version 3.0.1[P]. 2009.
[10] Sun Microsystems, Inc. Java Card 3 Platform White paper[P]. 2008.
[11] 基于OTA技術(shù)的手機(jī)錢包的安全機(jī)制研究[D]. 成都:成都理工大學(xué),2014.