USIM 3GPP SIM LTE 4G

以軟體模擬實體卡片 虛擬USIM加速LTE設備開發

2013-11-11
4G行動通訊時代,全球用戶識別卡(USIM)是必須使用的身分識別元件,在通訊協定開發過程中,通常是使用Test USIM來進行測試。然而Test USIM是一張實體的卡片,需要硬體裝置的配合,再加上卡片內的資料可能有讀寫或修改上的限制,因此本文提出一個以軟體程式的方式來模擬USIM的行為,暫時性取代實體的USIM卡片。
虛擬USIM的想法完全是以軟體程式實作USIM的存取動作及檔案系統,提供應用程式一致的介面(API),並包裝成一個C語言的函式庫(Library)。其原理是利用Linux作業系統具有的Library Pre-load特性,將應用程式連結到虛擬USIM的函式庫(以下稱為Virtual USIM Library),使得應用程式讀寫實體USIM的動作轉為對虛擬USIM,當Library Pre-load機制解除,便可回復成對實體USIM的存取。

以下的文章中,將對Virtual USIM Library的軟體實作方法做介紹,首先會說明Library的架構,接著再介紹USIM檔案系統的模擬方式,最後以LTE為例,說明虛擬USIM在使用者裝置上的實際使用例子。

Virtual USIM Library軟體實作方法

圖1為虛擬USIM系統架構圖,其中粗黑框的部分是Virtual USIM Library,圓柱為XML格式的檔案,用來描述USIM內的檔案系統。Library與XML檔案形成整個虛擬USIM的軟體系統,最上方長框代表應用程式,可透過標準的PC/SC API存取USIM卡。

圖1 虛擬USIM系統架構圖


Virtual USIM Library本身分為三個功能區塊,PC/SC API、Smart Card Command and Response以及USIM Entity。

其中,最上層的PC/SC API是給應用程式讀寫Smart Card的一套標準介面,Virtual USIM Library使用相同的介面,就可以在不修改應用程式的情況下,讀寫實體USIM卡的應用程式,亦能存取虛擬USIM。

位於PC/SC API與USIM Entity之間的是Smart Card Command and Response區塊,其功能是模擬讀、寫卡片的動作。當應用程式存取實體USIM時,是經由一連串的Command與Response來完成的,從應用程式送到USIM的訊息為Command,而從USIM傳給應用程式的訊息為Response,這些訊息在實體卡片上會轉成電流訊號並由電子電路來處理。因此,Virtual USIM Library必須以軟體程式模擬出訊息處理的功能,才能讓應用程式與虛擬USIM溝通。最下層的是USIM卡片的模擬程式,稱為USIM Entity,是實作虛擬USIM的軟體核心部分。

事實上,Virtual USIM Library的設計是可模擬多種的Smart Card,在此區塊實作出不同卡片的行為程式(以下稱Entity),搭配XML檔案來描述不同卡片各自的檔案內容,Library便能增加其虛擬Smart Card的種類。

如圖1中粗黑框下半部的示意,Virtual USIM Library己建構出SIM及USIM兩種同屬於SIM卡的Entity,若能再開發出其他Smart Card的Entity,更可以將Virtual USIM Library進一步擴展成為Virtual Smart Card Library。以下將對PC/SC API、Smart Card Command and Response以及USIM Entity這三大功能區塊做介紹:

PC/SC API
PC/SC的全名為Personal Computer/Smart Card,是一套用來存取Smart Card的標準API,在Windows或Linux作業系統上的應用程式只要遵循此API,就能正確的開發讀、寫Smart Card的程式。

使用PC/SC API有固定的步驟。首先,應用程式必須向PC/SC函式庫要求一個Context,代表程式已成功的啟用讀卡機;接著若Smart Card已插入讀卡機時,程式可連線至Smart Card,並且能夠對Smart Card進行資料的傳送與接收。當資料傳輸結束時,先停止對Smart Card的連線,再釋放Context,完整的流程如圖2所示。

圖2 使用PC/SC API建立Smart Card連線流程圖


Linux作業系統的Library Pre-load機制,可使得應用程式執行時預先連結特定的函式庫,以這個方法讓應用程式呼叫的PC/SC API是由Virtual USIM Library提供的API,而不是系統內建的PC/SC Library,應用程式存取Smart Card的動作就會轉為對虛擬USIM。

故Virtual USIM Library要實作出符合PC/SC標準的介面函式,使得應用程式在存取虛擬USIM與實體卡片的程序上完全相同,應用程式不須要知道目前讀寫的USIM是實體或是虛擬的。表1列出存取Smart Card所需的幾個基本介面函式,完整的PC/SC API請參見PC/SC Workgroup的相關文件。



Smart Card Command and Response
應用程式存取Smart Card是透過PC/SC API來傳送及接收資料,而對Smart Card進行操作,例如選取檔案、讀寫檔案、檔案權限認證等,是由稱為APDU Command與Response的指令來完成的。APDU Command是應用程式對Smart Card的命令,APDU Response則是Smart Card完成命令後的回應。



ISO 7816-4標準制定五十幾個的APDU Command,表2列出Virtual USIM Library使用的命令。Smart Card Command and Response這個功能區塊就是在Virtual USIM Library中實作出APDU Command的通用處理程序。

應用程式使用PC/SC API的SCardTransmit函式來收送APDU命令及回應,在Virtual USIM Library內部有SIM與USIM兩個Entity,所以Smart Card Command and Response的功能就是進行命令分派的任務,將應用程式送來的命令交給正確的Smart Card Entity的去執行,同時也將回應訊息傳回給應用程式,如圖3所示。

圖3 APDU Command的處理流程


此外,Smart Card Command and Response功能區塊還有一個Database的子功能(見圖1),用來儲存兩種資料,分別是PC/SC API建立的Smart Card連線的資訊及Smart Card Entity自訂的內部資料結構。

圖4 Virtual USIM Library的資料結構


Database為三層的資料結構,如圖4所示。最外層是記錄每次應用程式與Smart Card連線前所需要的Context資訊,結構名稱為SCard Context。當應用程式同時與多個Smart Card連線時,會產生多個Context,就以串列的方式來管理。第二層的SCard Handle資料結構才是真正儲存應用程式與Smart Card建立連線的資訊,應用程式必須先有SCard Context才能取得SCard Handle。

Context與Handle是PC/SC制定的API的輸入參數,對Smart Card的操作會使用到此兩個資料結構。第三層有XML Doc及USIM Data兩塊結構,其中XML Doc是使用Open Source的Libxml2所定義的XML格式的資料結構,用來儲存XML檔案經過解析後的內容,也就是前面提到的以XML來描述USIM的檔案系統。

USIM Data則是儲存應用程式存取USIM時動態產生的資料,例如完成身分認證時會重新計算出新的金鑰(Key)。

XML Doc及USIM Data結構是隨著Smart Card Entity而不同,若應用程式存取的是Virtual USIM Library的虛擬USIM,則XML Doc是儲存SIM卡的檔案系統。相反地,應用程式存取的是虛擬USIM,則XML Doc是儲存USIM卡的檔案系統。

SIM/USIM Entity
Virtual USIM Library的USIM模擬程式都實作於SIM與USIM這兩個Entity之中,SIM/USIM Entity主要是處理表2列的APDU Command。由於USIM相容於SIM,故USIM Entity除INTERNAL AUTHENTICATE外,均共用SIM Entity的APDU Command處理函式(如圖3)。

當應用程式下達的Command是存取USIM內的檔案或目錄時,Entity會讀取前述的XML Doc來回應Command,當應用程式修改USIM的檔案內容時,Entity也會透過XML Doc將新的資料寫回XML檔案。關於SIM與USIM的Command說明請參見第三代合作夥伴計畫(3GPP)的TS 11.11、TS 51.011以及TS 31.102文件。

XML檔案系統
USIM的檔案系統定義於3GPP TS 31.102,類似於一般作業系統的階層式檔案與目錄架構,位於最上層的根目錄是MF,其他目錄稱為DF或ADF,檔案則稱為EF,如圖5所示。假設應用程式要讀取IMSI這個EF(6F07)的內容時,必須先以SELECT命令選取MF(3F00),再選取下一層的目錄ADF USIM,才能選取到檔案EF(6F07),然後以READ BINARY命令讀取其值。

圖5 USIM的階層式檔案系統


實體的USIM卡片內有完整的檔案系統,虛擬USIM則是以XML格式來模擬這些檔案及目錄並存成一個「.xml"」的檔案。當應用程式與虛擬USIM建立連線後,Virtual USIM Library的Database元件就會呼叫XML函式庫的相關API去讀取「.xml"」檔案,經過解析轉換成XML函式庫定義的資料結構,最後以指標的方式掛在Database的資料結構之下,即前述的XML Doc。

Virtual USIM Library目前可模擬SIM與USIM的兩種Smart Card,卡片的數量、類別、檔案的內容與屬性等資訊都會記錄於「.xml"」檔案中。USIM的目錄層次最多為兩層,就以XML標籤表示根目錄,分別表示MF下的第一與第二層目錄,用來表示特殊的Application目錄,分別表示位於根目錄下的檔案、位於第一層目錄下的檔案,以及位於第二層目錄下的檔案。

虛擬USIM應用於LTE UE裝置

UE(User Equipment)是長程演進計畫(LTE)使用者端的裝置,LTE使用USIM卡做為身分識別,UE要有營運商的USIM才能使用LTE網路的服務,圖6為UE加入LTE網路時,須要對USIM進行的動作。

圖6 UE加入LTE網路的程序


UE啟動後要先搜尋基地台,搜尋的條件是比對PLMN ID,這是營運商的識別碼,例如中華電信是466-92、台灣大哥大是466-97,而做為測試用的代碼為001-01。USIM內記錄著其營運商的PLMN ID,所以UE最初的動作是讀取IMSI及相關的PLMN資訊,IMSI則是營運商對用戶的識別碼。

當UE的實體層完成與基地台的連線後,UE對LTE網路端提出加入網路的要求,會將其IMSI帶在送給網路端(即圖6的MME)的訊息內,而MME要先驗證該用戶的身分,認證演算法是與3G相同的Authentication and Key Agreement(AKA),在USIM與MME兩邊各自執行AKA演算法,並產生出新的金鑰,詳細內容請參見3GPP TS 33.102。

認證完成後,MME就會接受UE加入網路,UE也會更新USIM內的Security與Location的資訊。所以USIM在LTE會被使用到的部分是IMSI、PLMN ID以及AKA認證等功能,關於LTE網路的連線程序請參見3GPP TS 24.301。

虛擬USIM優點是在UE開發初期,若與USIM卡片存取的硬體尚未完成,可先以純軟體的虛擬USIM替代。此外,只要對XML檔案內的IMSI、PLMN欄位做修改,就可以很容易測試基地台搜尋、漫遊、緊急電話等項目。

虛擬USIM也有其不足處,如功能模擬的完整度、例外狀況、受限於Linux作業系統等,是可以再改進的部分。

(本文作者任職於資策會智慧網通系統研究所)

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!