自從Google推出免費Android作業系統後,全球興起一片智慧型手機熱。智慧型手機所提供的高運算能力,再加上Android的開放式平台,為手機上的應用服務帶來了各種不同的可能性。而由於應用多元化的緣故,某些對資訊安全特別敏感的應用,例如股票下單、電子轉帳、電子錢包等交易應用,均須搭配高防護等級的安全性機制,因此也使得安全性服務的商機出現,且深具發展潛力。
在推動安全性服務時,用來行使加解密、簽章等功能的金鑰扮演著重要的角色,但在目前的Android手機上對金鑰的保護仍有所不足。舉公眾金鑰(Public Key Infrastructure, PKI)為例,使用者用來加密簽章用的私鑰是由手機產生後,直接放在手機上,由Android以軟體的方式實現其密碼運算。
這種實作方式意味著手機是以軟體的方式來儲存這把私鑰,因此資料暴露的風險比較高,例如使用者手機遺失或遭到竊取,裡面的機密資料將一覽無遺。因此對於金融交易等具備高度安全性要求的服務而言,系統必須用更安全的方式來保護這把私鑰。
善用SIM卡保密功能Android手機安全無痛升級
目前在銀行或大型企業中,為求金鑰的安全性,都是使用硬體安全模組(Hardware Security Module, HSM)來儲存其金鑰。HSM是以硬體的方式儲存金鑰,而加解密運算(Cryptography)過程都在HSM內進行,並以真正的亂數器產生金鑰,安全等級遠優於軟體儲存的方式。但HSM要價不菲,一台往往動輒新台幣3~40萬元,且體積龐大,智慧型手機不可能使用HSM來保護金鑰。
然而,除了貨真價實的HSM外,其實在每部手機中都有一個類似HSM的裝置,亦即手機中的用戶識別模組(SIM)卡。目前台灣電信業者所發出的SIM卡多屬於Java卡,內建簡單的加解密運算模組,且具有電子可擦拭編程記憶體(EEPROM),可用來儲存金鑰等私密資料。一旦SIM卡遭到物理性破壞,卡裡面的資料也會馬上被破壞而無法讀取,是高安全性的儲存裝置。
因此,應用開發團隊只要能善用SIM卡的種種安全特性,就能大幅提升應用服務的安全等級,不必仰賴專用的HSM裝置。
目前昇陽(Sun)在微型版Java平台(Jave Platfrom, Micro Edition)上推出了JSR 177與JSR 257兩個JSR。JSR 177的全名是安全與信任服務應用中介層(Security and Trust Services API, SATSA),被設計用來提供安全性服務;JSR 257的全名是非接觸式通訊應用中介層(Contactless Communication API),用來提供非接觸式的卡片服務。
這兩組JSR都能提供API,讓手機上的Java程式可下達應用協定資料單元(Application Protocol Data Units, APDU)指令到手機的SIM卡中。因此開發安全性應用程式的人就能用JSR 177與JSR 257讀取SIM卡,並利用SIM卡來儲存金鑰與行使加解密的運算。
JSR 177除了讓手機應用程式對SIM下達APDU指令外,還提供了PKI與CRYPTO兩組API。PKI模組可用來申請與安裝憑證,並提供簽章的功能;CRYPTO則提供加解密的功能。為有意發展安全性服務的廠商提供了絕佳的介面。
JSR 257提供的功能則屬於近距離無線通訊(Near Field Communication, NFC)的應用,需要手機上有無線射頻辨識系統(RFID)天線來與其他NFC裝置溝通。 目前JSR 257的通訊類型包括用NFC資料交換格式(NFC Data Exchange Format, NDEF)讀寫RFID標籤,或下APDU命令給ISO14443卡片。因此JSR 257除了能與SIM卡溝通,還能用來發展悠遊錢包,門禁卡等非接觸式卡片服務,這也是目前看來最有機會在短時間內成形的應用。
JSR 177/ 257建置過程揭祕
JSR 177與JSR 257能提升手機的安全性等級,但Android上並未定義這種功能,因此研發人員必須自行設法將這兩種JSR整合實作到系統設計中。圖1是Android的分層架構圖,研發人員應該在各層進行的工作如下所述。首先,在Linux核心(Kernel)層部分,研發人員須自行掛載NFC或讀卡機的驅動程式,以和NFC裝置/SIM卡溝通。通常驅動程式和硬體抽象層(HAL)都是由晶片供應商提供,若手機開發人員想為產品添加安全交易功能,基本上不必擔心要從這層開始著手進行開發。
|
圖1 移植JSR 177與JSR 257到Android平台的架構圖 |
研發人員掛載完驅動程式後,須進一步在函式庫(Libraries)與應用程式框架(Application Framework)層實作JSR 177與JSR 256的程式邏輯部分。為求執行效能,Java的API通常還可分成JAVA與C兩層。JAVA層用來定義該API的框架,提供API給上層的應用程式使用;C層則是主要程式執行的部分,C的程式通常執行效能較好,所以大部分的程式也都在此執行。這兩層會用Java原生介面(Java Native Interface)銜接在一起。
當研發人員將驅動程式掛載完成,亦在函式庫和應用程式框架層上將JSR的程式邏輯設計好後,即可進一步利用應用程式框架層所定義的JAVA API開發出應用程式。
安全性升級帶動交易應用發展
在Android手機上布建好JSR 177與JSR 257功能後,由於交易安全性大為提升,因此可以帶動眾多與金流相關的應用發展,例如股票下單、網路轉帳、線上儲值等。
就這些應用服務而言,JSR 177的PKI功能是最為關鍵的要素之一。PKI可利用SIM卡裡的金鑰,對金融交易的訊息做簽章,因此能確認使用者的身分,也就能確保交易的不可否認性。
圖2是利用PKI對金融訊息簽章的流程,金融應用程式把金融交易訊息透過JSR 177 API傳到SIM卡中,SIM卡中的私鑰再對此訊息簽章。簽章好的訊息再由金融應用服務程式送到銀行驗章,銀行的驗章伺服器與認證授權(Certificate Authority, CA)相連,可藉由CA的幫助來驗證簽章的正確性。一旦驗證通過,則表示是本人所發的訊息,就可進行金融交易動作。
|
圖2 PKI簽章流程 |
悠遊錢包則是另一種與金融交易有關的服務,但Android手機若要提供該服務,必須同時移植JSR 177與JSR 257。如同一般的金融交易流程,JSR 177的PKI機制可對悠遊錢包的儲值訊息做簽章保證,當身分確認完成,銀行就會確認訊息到手機的SIM卡中並完成儲值,此時金額會被存在智慧卡的記憶體區塊中。當使用者要付款時,再利用JSR 257的NFC功能來與商家的非接觸讀卡機溝通,完成交易扣款。
一次性密碼(One Time Password, OTP)則是另一個可以用JSR 177或JSR 257功能實現的服務。使用一次性密碼的網站或系統會自動變更使用者的登入密碼,因此這類系統的破解難度很高,適用於各種對資料安全要求嚴格的使用情境。
OTP的基本運作方式如下,首先,當使用者欲進行系統登入時,OTP伺服器會對用戶端裝置提供足以算出正確密碼的種子資訊(Seed),當該種子資訊傳送到用戶端裝置,如手機上時,手機內安裝的OTP程式便會根據該種子進行演算,然後將演算結果回傳給登入系統,此時,驗算伺服器會根據OTP伺服器所發出的種子資訊進行驗算,若兩次運算的結果相符才可以登入。
因此,在OTP機制中最須要保護的就是同步用的種子資訊。在此建議的方式是將OTP程式放在SIM卡上,當手機收到種子資訊時,再利用JSR 177或JSR 257傳送APDU的功能傳送給SIM卡中的OTP程式進行演算,如此就能確保種子資訊的安全。
圖3是OTP服務的應用流程。當使用者想從電腦登入至伺服器時,可開啟手機上的OTP服務程式,再藉由JSR 177或JSR 257的API下指令到SIM卡中,SIM中的OTP產生器程式再產生一組OTP密碼,使用者就可以輸入帳號與OTP密碼來登入至伺服器中。
|
圖3 OTP應用流程 |
登入伺服器在收到帳號與OTP密碼時,可以把帳號與OTP密碼傳到驗證伺服器,驗證伺服器會根據帳號產生一組對應的OTP密碼,並用來驗證使用者輸入的OTP密碼是否正確。
若驗證通過,則回傳成功訊息,登入伺服器就可以同意使用者登入,反之則傳回登入密碼錯誤的失敗訊息。這種驗證機制的安全性相當高,甚至連使用者不慎外洩的風險都能避免,因為使用者自己都不知道正確的登入密碼為何。
門禁卡也是一種可以藉由JSR 257實現的功能。而且實作起來非常簡單,因為每張SIM卡都會有一個唯一的卡號,門禁系統只要利用JSR 257的功能去讀取手機裡SIM卡的卡號,就可以判別這個人的身分。
應用普及尚缺東風
雖然Android手機的開發者可利用JSR 177與JSR 257的功能,發展出許多創新的安全性應用,但這些應用在目前的市場上卻仍未普及。
導致這個現象的原因有很多,例如目前市場上具備JSR 177與JSR 257功能的手機不多,便是主要原因之一。缺乏手機支援,即使這類應用再好,也很難迅速推廣到所有的使用者身上。然而,這是個雞生蛋、蛋生雞的問題,如果市場上有一種具備高度吸引力的應用模式,甚至能引發轟動,手機製造商就會有動力去支援這兩項JSR功能;然而,在沒有足夠手機支援的情況下,應用服務開發者也很難有意願去投資研發新的服務。這類現象經常在許多不同領域中反覆發生。
其次,卡片主導權歸屬的問題,也阻礙了手機安全應用的普及。由於用來儲存高安全性資料的SIM卡,是整個技術中最重要的一塊,因此不管是電信業者、手機業者或是安全性服務的提供廠商,都想要擁有卡片的主導權,亦即控制卡片的金鑰。在各方勢力妥協出最終結果前,無論是哪一方想自行推廣應用服務都會有困難,因為這三個環節必須緊密搭配在一起,才能構成完整的服務。
SIM卡的高度安全性往往也是普及的一大障礙。因為要安裝應用程式到SIM卡中,必須先通過層層關卡。這樣的設計固然讓SIM卡成為一個相當安全的裝置,但也使得新應用程式的安裝工作變得相當棘手。
以目前的使用環境,若使用者要增加新的功能到卡片中,通常須由發卡者代為安裝,這也讓使用者在使用上造成不便。可行的解決方案是制定空中下載標準(OTA)並建立一共同平台,然此一共同平台須先取得各方利益團體的共識,方有可能成形。
最後,JSR 177與JSR 257所衍生出的應用較為創新,一般使用者也必須花時間去熟悉其操作,這點也不利於相關應用服務的普及。以PKI機制為例,使用者要使用這項功能,必須對相關的資安知識有一些基本認知,且操作流程上也更加複雜。這些因素都會讓使用者對應用產生距離感。
Android平台或可扭轉乾坤
手機上還有很多行動安全性服務可以發展,但現階段而言,要推廣這些安全性服務仍然有其困難在,尤其是使用者普遍沒有具JSR 177或JSR 257功能的手機,更讓應用服務供應商有巧婦難為無米之炊之憾。
所幸,Android是開放式的平台架構,易於將新的功能加到Android平台上,想推廣安全性服務的廠商,可先在Android手機上實作類似於JSR 177或JSR 257的功能,並藉由Android手機正在起步的時機,大力將這些功能拓展到每支Android手機中,一旦手機普遍有了類似JSR 177或JSR 257的功能,要進一步推廣高安全性的行動應用就會容易多了。
(本文作者任職於資策會網路多媒體研究所)
參考文獻 |
- SATSA Reference Implementation, Version 1.0”, Sun Microsystems, Inc.
- The Security and Trust Services API for J2ME, Part 1”, C. Enrique Ortiz, March 2005
- Contactless Communication API: JSR 257, Version 1.0”, JSR 257 Expert Group, Oct 2006
|