專利名稱:一種智能卡及向智能卡中創(chuàng)建應用、插入對象的方法
技術領域:
本發(fā)明涉及一種數(shù)據(jù)存儲及信息處理領域,特別是涉及一種智能卡及向智能卡中創(chuàng)建應用、插入對象的方法。
背景技術:
由于現(xiàn)有的磁條卡存在安全性差等缺陷,所以國內(nèi)外各銀行都在逐步采用智能卡(CPU卡)來代替磁條卡,并單獨或聯(lián)合行業(yè)用戶發(fā)行了大量的智能卡。一般而言,智能卡是一個包含嵌入集成電路(IC)的塑料卡片,集成電路內(nèi)包含一個微型的中央處理器(CPU)、ROM、RAM及其它附屬外圍電路,該集成電路具有和計算機類似的能力,例如運行程序,處理輸入和輸出數(shù)據(jù)。當使用上述CPU卡的時候,需要由外部提供電源及其它接口設備。
為了規(guī)范從磁條卡向IC卡(通常指CPU卡)的遷移過程,三大國際卡組織Europay、MasterCard、Visa共同制訂了基于IC卡的金融支付應用標準,簡稱EMV規(guī)范。所謂EMV遷移是指,按照EMV規(guī)范,在發(fā)卡、收單、信息轉接、業(yè)務處理、相關產(chǎn)品認證等各個環(huán)節(jié)從磁條卡向IC卡遷移。
為了迅速適應國際化競爭的需要,盡快提高自身競爭力,國內(nèi)銀行卡EMV遷移正在逐步實施中,在不遠的將來,CPU卡將成為大多數(shù)人隨身攜帶的智能卡。發(fā)卡行通常都比較積極的拓展自己智能卡的功能,如何將發(fā)卡行的這種需求和行業(yè)用戶的項目結合就是非常重要的課題。
國際標準化組織規(guī)定的ISO7816第1~7部分規(guī)定了一組覆蓋CPU卡各個方面的標準。ISO7816包括物理特性(第1部分)、尺寸和觸點位置(第2部分)、電子信號和傳輸協(xié)議(第3部分)、行業(yè)間交換指令(第4部分)、應用程序標識符(第5部分)、行業(yè)間數(shù)據(jù)元素(第6部分)和行業(yè)間SCQL指令(第7部分)。
對于CPU卡來說,實現(xiàn)CPU卡的多應用是一個迫切的發(fā)展方向,所謂多應用是指在同一張智能卡上存在多個應用,如金融錢包、加油錢包、考勤門禁等,通常這些應用在邏輯上分別處于不同的應用區(qū)。實現(xiàn)CPU卡多應用必須主要考慮以下三部分內(nèi)容應用數(shù)據(jù)在智能卡上的存儲機制;應用數(shù)據(jù)如何存取卡上數(shù)據(jù);智能卡如何配合實際的應用實現(xiàn)具體的應用流程。
現(xiàn)有的普通IC卡操作系統(tǒng)遵循基于ISO7816標準的目錄和文件方式,實現(xiàn)應用數(shù)據(jù)在智能卡上的存儲機制,如圖1所示。
現(xiàn)有的IC卡中采用目錄和文件的方式進行應用數(shù)據(jù)的存儲,即現(xiàn)有的基本都是面向文件系統(tǒng)的智能卡。所述文件數(shù)據(jù)的存儲過程類似普通軟盤等的存儲機制,只不過現(xiàn)在常用的CPU卡的容量僅僅為8K或者16K字節(jié),容量較小而已。并且,現(xiàn)在常用的CPU卡在操作文件時,存在以下限制1、CPU卡創(chuàng)建一個文件時必須先聲明創(chuàng)建的文件的類型以及創(chuàng)建文件的空間大??;并且,確定后文件的長度就是固定、不能改變的了,從而導致以前申請的空間無法再次使用。
2、CPU卡創(chuàng)建完一個文件后不可以刪除。(測試發(fā)卡的時候可以例外,但此時刪除的是MF,即刪除智能卡中的所有文件和目錄)3、CPU卡文件類型只有很少幾種,即文件類型是固定的。
4、CPU卡創(chuàng)建文件、寫文件必須通過向智能卡發(fā)送報文的方式進行,并且每次寫的字節(jié)數(shù)一般不能超過256字節(jié),處理過程復雜。
參照圖1,現(xiàn)在常用的CPU卡一般包括主文件MF、專用文件DF以及基本數(shù)據(jù)文件MF等文件類型。卡的專用文件(DF,Dedicated File)與基本數(shù)據(jù)文件(EF)呈樹狀結構,每個專用文件是其下屬基本數(shù)據(jù)文件的入口點。
所述主文件MF(Master File)即根目錄,是智能卡文件系統(tǒng)的根,相當于DOS的根目錄,每張卡有且只有一個MF文件。當然,不同智能卡廠商的MF的創(chuàng)建方式是不同的。主要有兩種方式在智能卡個人化過程中由發(fā)卡方創(chuàng)建,如明華、德生智能卡;或者,廠商提供智能卡的時候已經(jīng)創(chuàng)建,發(fā)卡方不能再創(chuàng)建,如握奇智能卡。
所述DF(Dedicated File)文件相當于DOS的子目錄。所述DF文件又可以進一步分為DDF和ADF,一般將包含下級目錄的DF稱之為DDF,不包含下級目錄的稱之為ADF。
對于現(xiàn)有IC卡多應用的實現(xiàn)是通過創(chuàng)建多個ADF(即創(chuàng)建多個目錄)達到的。每個ADF代表一個應用。每個ADF下有相應的文件,相應的文件中存放相應的數(shù)據(jù)。
ISO7816標準也定義了一些針對文件系統(tǒng)的存取指令,如讀二進制文件、寫二進制文件等,現(xiàn)有的IC卡操作系統(tǒng)基本上都采用7816里定義的機制,另外再加入自定義的或行業(yè)應用的特殊指令來實現(xiàn)。
例如,CPU卡有這么一個指令SELECT MF,這個指令表示進入智能卡的根目錄,但由于CPU卡的操作系統(tǒng)比較簡單,它處理不了這種純粹字符的東西,向智能卡發(fā)送指令的時候必須把指令轉換成十六進制的格式轉換成智能卡的指令格式是00 A4 00 00 02 3F 00。
由于ISO7816標準僅僅規(guī)定了一些簡單的存取指令,對于不同的應用則需要加入自定義的或行業(yè)應用的特殊指令來實現(xiàn),所以,智能卡如何配合具體的應用的實現(xiàn)流程是無法統(tǒng)一的,例如,人民銀行定義了實現(xiàn)消費和圈存的指令、中石化定義了灰鎖的加鎖解扣指令、勞動部定義了自己的實現(xiàn)老保和社保的指令等等。不同的行業(yè)應用根據(jù)自身需要,設置不同的文件結構、長度等進行存儲,設置不同的專用指令來實現(xiàn)不同的應用流程。
總之,現(xiàn)有的CPU卡的存儲機制導致下述的幾個問題
由于創(chuàng)建一個文件時必須先聲明創(chuàng)建的文件的類型以及創(chuàng)建文件的空間大??;并且,確定后文件的類型、長度就是固定的,且不可以刪除,從而導致以前申請過的空間無法再次使用。
由于不同行業(yè)應用發(fā)行CPU卡時都需要進行相應的開發(fā)過程,使得該CPU卡可以執(zhí)行本行業(yè)或企業(yè)的專用指令、流程。本行業(yè)或者其他行業(yè)的新應用希望共同使用該CPU卡(即向該CPU卡中創(chuàng)建新應用)時,但是由于該CPU卡無法執(zhí)行其特殊指令、流程,則不得不重新開發(fā)一個新卡,一方面導致開發(fā)成本極高,并且后續(xù)升級或業(yè)務整合的難以實現(xiàn);另一方面又導致不同的應用需要使用不同的CPU卡,給消費者以及服務提供商帶來不便。也就是說,現(xiàn)有技術向智能卡中創(chuàng)建應用的過程必須包括一個針對卡本身的開發(fā)過程,而且無法方便的向該智能卡中創(chuàng)建另一個應用,因為需要針對該新應用重新進行開發(fā)過程。
并且由于各行業(yè)的應用具有獨特的特點,自定義了各種不同的應用指令和流程,而現(xiàn)有的智能卡無法適應各行業(yè)不同的具體應用流程,所以帶來智能卡多應用實現(xiàn)中的困難。
現(xiàn)有技術中智能卡應用的開發(fā)主要是某個公司私有的開發(fā)行為。雖然所有智能卡看起來很像,但是每個智能卡的操作系統(tǒng)軟件都是不盡相同的,在設計應用的接口上存在差異。這意味著如果A公司制造了一種智能卡,B公司也制造了一種智能卡,在這兩種卡上構建相同的應用存在很大的不確定性,甚至不可能完成。這就導致智能卡的應用開發(fā)被限制在一個相對較小的圈子里,很難實現(xiàn)和推動智能卡的多應用。
由于現(xiàn)有技術無法制定出一套能夠滿足各行業(yè)對CPU卡應用的指令或流程,使得開發(fā)成本極高,并且后續(xù)升級或業(yè)務整合的難以實現(xiàn)。行業(yè)應用提供方單獨發(fā)卡或為了某種原因和銀行聯(lián)合發(fā)卡,也迫切需要一個通用的規(guī)范來指導,以減少后續(xù)升級或業(yè)務整合時帶來的風險和代價。
發(fā)明內(nèi)容
鑒于上述問題,本發(fā)明的目的是提供一種公共的開放的智能卡平臺,以便減小或消除發(fā)卡行在業(yè)務開拓時的技術障礙,快速推動對智能卡多應用市場的開發(fā);滿足行業(yè)應用的特點和需求,保護各行業(yè)應用的獨立性和私密性;并相互兼容多個應用開發(fā)商的應用。
為解決上述技術問題,本發(fā)明的目的是通過以下技術方案實現(xiàn)的一種向智能卡中創(chuàng)建應用的方法,所述智能卡采用容器和對象的方式存儲數(shù)據(jù),包括根據(jù)指令報文數(shù)據(jù)進行容器認證步驟;如果認證通過,則在容器內(nèi)創(chuàng)建應用類入口;從指令報文中解析出對象標識,判斷是否與當前應用類入口的應用類標識相同;如果匹配,則將當前解析的對象插入到當前應用類入口的對象列表中,并存儲該對象。
優(yōu)選的,所述的向智能卡中創(chuàng)建應用的方法,還包括,如果所述對象標識與當前應用類入口的應用類標識相同,則解析出對象屬性,并判斷該對象屬性是否和指令報文的參數(shù)中設定的需要插入的對象的類型匹配。優(yōu)選的,如果所述當前解析的對象為密鑰對象,則解析屬性的后續(xù)字節(jié),并根據(jù)密鑰的算法計算密鑰的長度。優(yōu)選的,所述的向智能卡中創(chuàng)建應用的方法,還包括解析對象的內(nèi)容,分析并保存存取條件列表ACL以及數(shù)據(jù)項。優(yōu)選的,如果前解析的對象為密鑰對象,則記錄對象的引用條件、計數(shù)器及更新條件到當前應用類入口的狀態(tài)機描述列表中。優(yōu)選的,如果在解析對象內(nèi)容時出現(xiàn)數(shù)據(jù)域內(nèi)容不正確的情況,則釋放為該對象申請的臨時空間,并恢復卡片數(shù)據(jù)至插入該對象前的狀態(tài)。優(yōu)選的,所述插入的對象包括用于實現(xiàn)一定應用指令功能的APDU對象。
優(yōu)選的,所述的向智能卡中創(chuàng)建應用的方法,還可以包括,如果卡讀取設備選擇離開容器或進行重新認證,則釋放當前的應用類入口。
本發(fā)明還公開了一種向智能卡中插入對象的方法,所述智能卡采用容器和對象的方式存儲數(shù)據(jù),包括以下步驟根據(jù)指令報文數(shù)據(jù)進行容器認證步驟;如果認證通過,則選擇指定的應用類入口;從指令報文中解析出對象標識,判斷是否與當前應用類入口的應用類標識相同;如果匹配,則將當前解析的對象插入到當前應用類入口的對象列表中,并存儲該對象。
本發(fā)明還提供了一種數(shù)據(jù)處理裝置,特別是智能卡,包括微處理器、非易失性存儲器以及操作系統(tǒng);所述操作系統(tǒng)將數(shù)據(jù)按照容器和對象的方式存儲在非易失性存儲器中,存儲在至少一個容器中,每個容器內(nèi)包含至少一個應用的對象集合;所述操作系統(tǒng)設置容器的操作接口,以實現(xiàn)通用的針對對象的操作。
本發(fā)明還提供了一種實現(xiàn)智能卡多應用的方法,包括設置至少一個容器;將數(shù)據(jù)按照容器和對象的方式存儲,每個容器內(nèi)包含至少一個應用的對象集合;設置容器的操作接口,以實現(xiàn)通用的針對對象的操作。優(yōu)選的,根據(jù)數(shù)據(jù)的特性,將數(shù)據(jù)分別存儲為數(shù)據(jù)對象、計算對象、密鑰對象及應用協(xié)議數(shù)據(jù)單元APDU對象;所述數(shù)據(jù)對象用于存儲應用數(shù)據(jù),所述計算對象用于存儲敏感數(shù)據(jù),所述密鑰對象用于存儲應用的密鑰數(shù)據(jù);所述APDU對象用于存儲實現(xiàn)特定功能的指令序列數(shù)據(jù)。
與現(xiàn)有技術相比,從上述技術方案可以得出,本發(fā)明具有以下優(yōu)點由于本發(fā)明所述智能卡采用容器、對象的概念對應用數(shù)據(jù)進行存儲,并在容器端提供通用的針對對象的操作,而將多應用的本身的安全機制和應用流程完全交給外部處理,達到了最大的通用性,這是采用ISO7816文件系統(tǒng)的規(guī)范難以做到的。所述通用性體現(xiàn)在,采用本發(fā)明所述智能卡的數(shù)據(jù)存儲方法,只需要針對該智能卡進行一次開發(fā)即可,以后的個人化過程以及使用流程都可以采用通用流程實現(xiàn),而不需要由于某個具體應用的特殊需要或者特殊指令對該智能卡進行重新開發(fā)的過程。
采用對象的概念解決應用數(shù)據(jù)存儲問題,并且提供標準的接口來實現(xiàn)對象的插入和存取操作,所以本發(fā)明對應用數(shù)據(jù)的具體格式?jīng)]有限制,由應用本身自行定義和設定,從而同時解決了數(shù)據(jù)的存取問題;優(yōu)選的,本發(fā)明還可以采用與傳統(tǒng)方式一致的安全報文機制來保證系統(tǒng)和數(shù)據(jù)安全。
由于本發(fā)明采用了容器和對象的數(shù)據(jù)存儲方式,所以本發(fā)明所述智能卡還可以具體將某個單獨的應用作為容器,在該應用下面創(chuàng)建更多的子應用,從而可以實現(xiàn)多個微應用。
本發(fā)明所述的向智能卡中創(chuàng)建應用的流程可以適用于各種行業(yè),提供了一種通用的創(chuàng)建流程。智能卡的發(fā)行過程中只需要進行一次開發(fā)即可,各種行業(yè)應用都可以采用本發(fā)明所述的創(chuàng)建應用的方法,向智能卡中創(chuàng)建應用,即本發(fā)明可以很方便的實現(xiàn)向智能卡中創(chuàng)建多應用。
為了配合應用流程的實現(xiàn),本發(fā)明采用APDU對象來實現(xiàn)以前定義專用的指令的功能,將解決這個問題的主動權從智能卡交到應用一方,可以由應用具體設計相應的對象,只要插入容器就可以了。容器處理APDU對象類似一個鉤子,當發(fā)現(xiàn)卡讀取設備發(fā)來的指令不是標準的指令,則查看當前的APDU對象列表,如果某個對象符合處理請求則調(diào)用處理,即可實現(xiàn)以前定義專用指令的功能。
由于APDU對象的采用,使得本發(fā)明的存取對象的流程可以適用于各種行業(yè)的具體應用流程。一般的讀取、引用對象等流程是統(tǒng)一的,而且執(zhí)行特殊指令的流程也是統(tǒng)一的先引用相應的APDU對象,然后由該APDU對象控制流程完成特殊的指令功能。
由于解決了數(shù)據(jù)的存儲問題和存取問題,而且將應用流程的處理也交到實際應用去處理,本發(fā)明就可以提供統(tǒng)一的多應用平臺。IC卡產(chǎn)業(yè)鏈的所有廠商都將可以開發(fā)出通用的、互相兼容的產(chǎn)品,降低成本,并推動整個產(chǎn)業(yè)的發(fā)展。
一個開放的、可互操作的多應用智能卡平臺給不同的機構都將帶來益處,例如,持卡人、商戶、發(fā)卡方、收單方、系統(tǒng)集成商、智能卡供應商和卡讀取設備供應商等。對發(fā)卡方而言,可以提供共同的平臺供商業(yè)合作伙伴使用,給持卡人提供便利,保持其忠誠度,提高使用本行卡的積極性;對持卡人而言,可以很容易的、及時的獲得發(fā)卡方提供的各種服務,隨時能了解自己的積分額或VIP等級等信息;對商戶、收單方、系統(tǒng)集成商、智能卡供應商和卡讀取設備供應商而言,可以通過公共的平臺和POS系統(tǒng)為各種應用服務,比如可以在持卡人的卡上輕松加入自己的積分系統(tǒng),而無需任何投資。
由于本發(fā)明所述智能卡具有統(tǒng)一的接口,所以系統(tǒng)集成商、機具供應商都可以開發(fā)標準的產(chǎn)品,避免對某個具體的項目開發(fā)產(chǎn)品而增加開發(fā)成本,而發(fā)卡者也可以降低系統(tǒng)的兼容風險,并保持足夠的開放性,確保后續(xù)業(yè)務能及時更新到智能卡和相關環(huán)節(jié),保護投資收益。
下面結合附圖和具體實施方式
對本發(fā)明作進一步詳細的說明。
圖1是基于ISO7816標準的目錄和文件的智能卡數(shù)據(jù)存儲方式示意圖;圖2是智能卡的應用的裝置框圖;圖3是實現(xiàn)APDU對象的信息流程圖;圖4是實現(xiàn)APDU對象的系統(tǒng)結構圖;圖5是智能卡中數(shù)據(jù)存儲的容器和對象的概念圖;圖6是智能卡中數(shù)據(jù)存儲的容器中不同類型的對象之間的關系圖;圖7是容器認證流程的步驟圖;圖8是插入對象的處理流程的步驟圖;圖9是存取對象的處理流程的步驟圖;
圖10是引用對象的處理流程的步驟圖;圖11是刪除對象的處理流程的步驟圖;圖12是讀取對象的處理流程的步驟圖;圖13是更新對象的處理流程的步驟圖;圖14是對象加值的處理流程的步驟圖;圖15是對象減值的處理流程的步驟圖;圖16是解鎖容器認證密鑰的處理流程的步驟圖。
具體實施例方式
本發(fā)明中所述應用(Application)一般是指智能卡和卡讀取設備(CardAcceptance Device,CAD)之間的應用協(xié)議以及相關的數(shù)據(jù)。一個典型的智能卡設備一般包括一個8或16位的運行在3.7MHz的微處理器,帶有1K的RAM和多于16K的非易失性存儲器(可編程只讀存儲器或者閃存)。智能卡可以分為可接觸和非可接觸??山佑|智能卡通過讀卡器和智能卡的8個觸點物理接觸來通訊并工作,而非可接觸智能卡依靠在小于2英尺的一般距離之內(nèi)的射頻信號通訊。
本發(fā)明所述的典型的智能卡的應用并不是孤立的,而是包含智能卡、卡讀取設備以及后端應用程序。參照圖2,智能卡的應用的裝置框圖。
智能卡插入可以與另一臺計算機相連的卡讀取設備,從而實現(xiàn)數(shù)據(jù)傳輸和處理。卡讀取設備又可稱作終端、讀卡器或者接口設備(IFD)。上述卡讀取設備都具有向智能卡提供電源和建立數(shù)據(jù)傳輸連接的基本功能。
所述后端應用程序可以提供支持卡上APDU對象(或者稱為小應用程序)的服務。例如,一個后端應用程序可以提供安全系統(tǒng)和卡上的證書的連接,提供強大的安全性。在一個電子付款系統(tǒng)中,后端應用程序可以提供信用卡訪問其他付款信息的服務。所述APDU是指應用協(xié)議數(shù)據(jù)單元(Application ProtocolData Unit)。所述APDU對象類似JAVA小程序,包括能夠實現(xiàn)一定功能的指令集合。
卡讀取設備端主應用程序存在于一個例如個人計算機這樣的臺式機、電子付款終端、手機或者一個安全子系統(tǒng)中。所述卡讀取設備主應用程序處理智能卡、APDU對象和供應商的后端應用程序之間的通訊。
卡讀取設備(CAD)是處于主應用程序和智能卡設備之間的接口設備。所述卡讀取設備CAD為智能卡提供電力,以及與該智能卡進行電子或者射頻通信。所述卡讀取設備CAD可能是一個使用串行端口附于臺式計算機的讀卡器,或者可能被整合到其他終端內(nèi),例如飯店或者加油站內(nèi)的電子付款終端。該接口設備從主應用程序到智能卡轉送應用協(xié)議數(shù)據(jù)單元(Application ProtocolData Unit,簡稱APDU)指令,并且從智能卡向主應用程序轉送響應。當然,某些卡讀取設備CAD還可以有用于輸入個人識別號碼的鍵盤,設置還有顯示屏。
本發(fā)明所述智能卡中優(yōu)選存在一個或多個能夠實現(xiàn)一定指令功能的APDU對象,還需要存在支持軟件,例如,智能卡的操作系統(tǒng)等。由于本發(fā)明所述智能卡可以存儲APDU對象,使用APDU對象可以模擬任何已知的或可能的指令,則必須有相應的虛擬機和指令系統(tǒng)支持,即本發(fā)明所述智能卡還可以包括相應的虛擬機和指令系統(tǒng),用以保證指令的執(zhí)行。
參照圖3,是實現(xiàn)APDU對象的信息流程圖;參照圖4,是實現(xiàn)APDU對象的系統(tǒng)結構圖。
APDU對象是一個預定義的程序,通過CLA和INS與卡讀取設備(CAD)發(fā)出的APDU命令建立關聯(lián)。當容器內(nèi)存在某個APDU對象,且卡讀取設備CAD發(fā)出的APDU命令的CLA、INS字節(jié)與該APDU對象關聯(lián)的CLA、INS相同,則該程序就會被執(zhí)行,從而完成特定的應用功能。
要實現(xiàn)APDU對象,則需要設置相應的指令系統(tǒng)和虛擬機進行支持,引用APDU對象,其內(nèi)容(用高級語言編寫的程序)將被編譯成一串指令序列,程序的執(zhí)行其實就是對應的指令序列在機器碼上執(zhí)行,將APDU對象的程序編譯成指令序列是一個轉換過程,將人類容易理解的語言轉換成機器容易理解的語言。為了提高運行效率,轉換(編譯)過程可以在卡片外部實現(xiàn),下載到卡片上的是轉換后的指令序列。
對APDU對象的引用其實就是執(zhí)行相應的指令序列,指令序列里的每一條指令又叫微指令。實際中,不同的芯片可能具有不同的機器結構和指令集,將微指令定義的功能在具體的芯片平臺上實現(xiàn)必須將其再次翻譯稱該芯片平臺的專用的指令,這個翻譯的機制和方法就稱之為虛擬機。
參照圖3可知,由于設置了實現(xiàn)APDU對象的指令系統(tǒng),所以編譯后的APDU對象(微指令序列)可以在任何芯片平臺上運行,因為其指令系統(tǒng)與具體的芯片平臺無關。圖4示出了實現(xiàn)APDU對象的系統(tǒng)結構圖。虛擬機定義微指令的翻譯規(guī)則和過程,包括如何存取操作數(shù)等、如何維護指令棧、指令寄存器及符號表。不同的芯片實現(xiàn)APDU對象的虛擬機是相同的。
實現(xiàn)APDU對象的指令系統(tǒng)可以根據(jù)實際數(shù)據(jù)處理過程的需要進行設定。當然,一般指令系統(tǒng)可以設定加指令、減指令、乘指令、除指令、比較指令、條件轉移指令、左位移指令、右位移指令、壓棧指令、出棧指令、存操作數(shù)等,本發(fā)明對此并不加以限定。
參照圖5,首先對智能卡中數(shù)據(jù)存儲的容器和對象的概念進行詳述。
容器在現(xiàn)實環(huán)境中,有許多物體可以參照,比如辦公室、城市、村莊和社會等,其中包含了許多其它的、各種各樣的東西,被容器包容的稱之為對象。對象在容器內(nèi)有一定的關聯(lián),也可能沒有,但是容器內(nèi)的對象需要共同遵守容器的規(guī)則。
對于智能卡來說,智能卡本身其實就是一個容器,主文件(MF,Master File)包含了卡上所有的應用對象,MF下的DF又是一個子容器,包含了應用具體的數(shù)據(jù)或者密鑰。容器就是一組提供一系列服務的管理器,只要符合容器的服務要求(規(guī)范)容器就可以允許使用范圍內(nèi)的管理服務(針對對象的操作)。智能卡上的一個DF,以唯一的應用標識符(AID)標識,在支付系統(tǒng)環(huán)境(PSE)里可以標識成一個應用。
本發(fā)明的核心之一就在于是采用了容器和對象的數(shù)據(jù)存儲架構,并在容器端提供通用的插入和引用對象的操作,用以達到通用平臺的目的;而將多應用的本身的安全機制和應用流程完全交給外部處理,達到了最大的通用性,這是采用ISO7816文件系統(tǒng)的規(guī)范難以做到的。
由于不同的數(shù)據(jù)涉及的操作、操作條件以及安全程度是不盡相同的,因此為了使容器提供的基本通用操作更好的滿足各種數(shù)據(jù),本發(fā)明所述智能卡根據(jù)不同的數(shù)據(jù)類型,分別存儲成不同類型的對象。例如,可以定義以下四類對象數(shù)據(jù)對象、計算對象、密鑰對象和APDU對象。參照圖6,是不同類型對象之間的關系圖。
數(shù)據(jù)對象是用來存儲具體應用數(shù)據(jù)的,一個應用可以有多個數(shù)據(jù)對象。所有應用數(shù)據(jù)都必須對應到相應的對象上,一個數(shù)據(jù)對象可以包含一個或多個應用數(shù)據(jù)項,不同的數(shù)據(jù)項采用TLV結構封裝,每個數(shù)據(jù)項的存取條件(AC,Access Condition)都可以單獨定義。所述TLV是一種結構形式,其中T=TAG標識;L=LENTGTH長度;V=value值。當然,具體數(shù)據(jù)項也可以采用其他可以變長度的結構體,但是所述TLV結構使用起來非常方便,創(chuàng)建時,定義一段結構體大小加上可變長數(shù)據(jù)長度的空間給它即可;釋放時,直接把整個結構體釋放掉就可以了;所述釋放是指將整個結構占用的空間釋放,故本發(fā)明采用數(shù)據(jù)對象的形式可以重復使用申請過的空間。
計算對象是一種特殊的數(shù)據(jù)對象,用來存儲特殊的敏感數(shù)據(jù),比如忠誠項目里的積分值等,一個計算對象只能存儲一個敏感數(shù)據(jù)項。計算對象的其他設置與數(shù)據(jù)對象相同。
密鑰對象存儲應用安全控制的密鑰,一個密鑰對應一個密鑰對象,密鑰對象用來保護數(shù)據(jù)對象。一個密鑰對象只能存儲一個密鑰,密鑰本身的使用也可以指定其它的密鑰對象來保護。所述密鑰對象可以采用單倍長和雙倍長對稱密鑰,也支持非對稱密鑰。通過密鑰對象,可以實現(xiàn)外部認證或線路保護等安全機制。
APDU對象類似JAVA小程序,包括能夠實現(xiàn)一定功能的指令集合,它可以應用自定義的接口,微處理器負責將卡讀取設備發(fā)來的APDU指令轉接到對應的APDU對象,由它來執(zhí)行具體的動作。APDU對象類似一個鉤子函數(shù),當進入容器內(nèi)指定的應用,一旦發(fā)出APDU對象定義的APDU指令時,容器將控制權交給APDU對象,由它解釋這條指令。通過相應的虛擬機和指令系統(tǒng)支持,APDU對象可以模擬任何已知的或可能的指令,從而達到較高的通用性。
由于智能卡大多數(shù)情況下是由主應用的發(fā)行者擁有,所述多應用容器可以設置一個控制密鑰用以控制應用的增加和刪除。各應用內(nèi)的對象則可以由自定義的安全策略控制,即應用本身的安全機制、應用流程交給外部進行處理,進一步提高行業(yè)應用的通用性。
所有的數(shù)據(jù)對象都可能受密鑰對象保護,密鑰對象也可能受其它密鑰對象保護,但是APDU對象不受密鑰對象保護,因為所述APDU對象用來模擬一個通用接口。當APDU對象的內(nèi)部處理引用到數(shù)據(jù)對象或密鑰對象時,和外部引用的條件是一樣的,即需要滿足不同對象各自的存取條件(AC)。
當兩臺計算機彼此進行通信時,它們之間交換的是根據(jù)一系列協(xié)議構造的數(shù)據(jù)包。類似地,智能卡也使用自己的數(shù)據(jù)包---稱作APDU(ApplicationProtocol Data Unit,應用協(xié)議數(shù)據(jù)單元)與卡讀取設備進行對話。一個APDU數(shù)據(jù)包包含一條指令或響應信息。智能卡的通信采用的是主從模式,而智能卡永遠扮演從動的角色;換句話說,智能卡總是在等待來自卡讀取設備的命令APDU。隨后,智能卡執(zhí)行APDU規(guī)定的動作,并以一個應答APDU向卡讀取設備做出回答,即智能卡與卡讀取設備之間互相交換命令APDU和應答APDU。
下表分別詳述命令APDU和應答APDU的格式。
表1命令APDU和應答APDU的格式
上表中所述命令APDU的標題頭對被選指令進行編碼,它包括4個字段類(CLA)、指令(INS)、和參數(shù)1和2(P1和P2),其中每個字段包含一個字節(jié)。
CLA類字節(jié),該字節(jié)用來表示指令的類別;INS指令字節(jié),該字節(jié)表示指令代碼;P1-P2參數(shù)字節(jié),該字節(jié)對命令APDU提供進一步說明。
上表中所述命令APDU的主體部分包括三個字段,其中,Lc表示命令APDU的數(shù)據(jù)字段的字節(jié)數(shù);Le表示以下應答APDU的數(shù)據(jù)字段希望的字節(jié)數(shù)。
上表中所述應答APDU的尾部的狀態(tài)字節(jié)SW1和SW2表示命令APDU在智能卡中的處理狀態(tài)。
下面對本發(fā)明所述智能卡在與卡讀取設備進行APDU交互時使用的數(shù)據(jù)元進行描述,其長度以字節(jié)為單位。
容器至少包括兩個數(shù)據(jù)元容器實現(xiàn)版本和容器唯一性標識,當然,所述容器還可以包括其他的數(shù)據(jù)元,例如下面所示表2容器數(shù)據(jù)元
表3對象包含的數(shù)據(jù)元
表3描述了對象可能包括的一些數(shù)據(jù)元。其中對象標識用于唯一的標識容器內(nèi)的一個對象,由于容器內(nèi)可能容納了多個應用,每個應用都定義個多個對象,這就要求對象標識必須能區(qū)別不同的應用和相同應用內(nèi)的不同對象。
在ISO7816里,標識一個應用使用稱為AID的定義方法,AID的長度可以是從5到16字節(jié);ASN.1(Abstract Syntax Notation 1)標準定義了一種通用的對象標識方法OID,具體定義和編碼格式請參閱X.208。OID的長度沒有限制,OID的格式是按照樹狀的規(guī)則定義的,每一層都由ISO或其它國際組織定義。OID存儲時有特殊的壓縮存儲格式,可以節(jié)省很多空間。所以,在這里優(yōu)選采用OID來標識容器內(nèi)的對象。下面的例子是部分OID定義及存儲格式表4OID格式及存儲示例
采用OID類型作為對象標識(OUID),OUID可以分為兩部分末位域標識對象在本應用內(nèi)的編號(OSN),前邊所有的域標識對象所屬的應用類(OAID)。在一個容器內(nèi)使用OAID來唯一的標識一個應用類,OSN的取值范圍限制為1~254,也就是一個容器內(nèi)的應用最多可有254個對象。例如
對象數(shù)據(jù)元中的對象屬性可以用兩個字節(jié)定義,分別定義對象的類型和屬性,下面詳述。
表5對象屬性第一字節(jié)定義 第一字節(jié)位8、7標識了一個對象的類型,如果是數(shù)據(jù)對象、計算對象或APDU對象,剩余位和第二字節(jié)均保留使用。
如果是密鑰對象,則第一字節(jié)的剩余位,用于定義密鑰對象的用途。如果是密鑰對象,則第二字節(jié)用于定義密鑰的屬性。表5示出了定義的一些具體情況表6對象屬性第二字節(jié)定義
每個在容器內(nèi)的數(shù)據(jù)對象可以通過APDU被外部引用,密鑰對象可以被數(shù)據(jù)對象或其它密鑰對象引用,APDU對象可以被外部調(diào)用;對象間的引用僅限于容器內(nèi)的同一應用,即對象都具有相同的OAID,所述OAID用來標識對象所屬的應用類;所有的對象也可以被刪除,引用或刪除的前提定義為使用條件(AC,Access Condition)。
基于對象的操作可以有兩類引用(Reference)和刪除(Delete)。
數(shù)據(jù)對象的引用條件沒有意義,對象只是一個數(shù)據(jù)項的集合,并且所有數(shù)據(jù)項都分別有自己的AC。APDU對象的引用條件也沒有意義。
密鑰對象的引用操作根據(jù)密鑰的用途和屬性解釋,如果是PIN,則解釋為校驗口令,如果是外部認證密鑰,則解釋為使用外部認證;如果是加密密鑰則解釋稱線路保護密鑰,由密鑰屬性決定保護方式,如果是屬性定義為MAC KEY,是明文加MAC的保護方式,如果屬性定義為ENC & MAC KEY,則為密文加MAC的保護方式;下表是當引用到一個密鑰對象時的動作解釋。
表7密鑰對象的動作解釋
對象的使用條件(AC)可以定義為一個字節(jié),取值為0~255。根據(jù)基于對象的操作,每個對象有兩個AC,第一字節(jié)定義為引用條件(Reference AC,RAC),第二字節(jié)定義為刪除條件(Delete AC,DAC),AC的定義如下表所示表8對象AC的定義
當AC取值為0時,表示無條件,即任何條件都可以訪問;如果為255,則表示為禁止;其它則指向某個對象,由該對象的屬性定義來決定訪問的條件。
對象的內(nèi)容可以分為兩部分結構,一部分定義對象內(nèi)部存儲的數(shù)據(jù)項的屬性,一部分是數(shù)據(jù)項本身。數(shù)據(jù)項的屬性是指數(shù)據(jù)元的存取條件,多個數(shù)據(jù)項的存取條件組成一個列表。即對象的內(nèi)容由數(shù)據(jù)項使用條件列表(ACL)與數(shù)據(jù)項本身組成。使用條件列表(ACL)的格式可以采用類似EMV規(guī)范里的DOL的概念,由一組標簽(Tag)和存取條件(AC)組成,格式是一個Tag后緊跟此Tag定義的數(shù)據(jù)元的AC。為了減少ACL的長度以及增強易用性,建議將具有相同AC的數(shù)據(jù)項用一個模板來包裝,模板內(nèi)的所有數(shù)據(jù)項都將繼承模板的AC。
下面描述基于數(shù)據(jù)項的操作和使用條件在數(shù)據(jù)對象內(nèi),數(shù)據(jù)項的操作通常是讀(Read)和寫(Update),對于特殊的數(shù)據(jù)項,比如金額或點券等敏感信息,出于安全的考慮,允許的操作是遞增(Increase)和遞減(Decrease);對于密鑰對象的數(shù)據(jù)項,允許的操作只有寫(Update);而對于APDU對象,優(yōu)選的,不允許進行操作。
數(shù)據(jù)項使用條件可以定義為兩個字節(jié),對于數(shù)據(jù)對象,第一字節(jié)定義為讀條件或遞增條件,第二字節(jié)定義為寫條件或遞減條件;對于密鑰對象,第一字節(jié)定義為密鑰的錯誤使用保護計數(shù)器,高半字節(jié)為最大值,低半字節(jié)為初始值,第二字節(jié)定義為寫條件。
所有的數(shù)據(jù)項都可以用TLV結構表示,一個對象內(nèi)不允許出現(xiàn)相同標簽的數(shù)據(jù)項,不同的對象的數(shù)據(jù)項可以采用相同的標簽。
下面描述容器和應用類的創(chuàng)建和選擇機制由于本發(fā)明是針對多應用而設計的,可以涵蓋開放平臺和非開放平臺,所以容器的創(chuàng)建這里不作要求和描述,即對此不進行限定。
容器作為多應用的載體,當卡讀取設備發(fā)出SELECT命令選擇容器后,智能卡需要返回容器本身的一些信息和公共信息,需要返回的容器信息見下表表9SELECT命令后需要返回的容器信息
公共信息可以保存在一個公共信息對象中,當卡讀取設備選擇容器后,智能卡檢查容器內(nèi)如果存在這個對象,則把它的數(shù)據(jù)項附加在容器信息后返回。公共信息對象的創(chuàng)建是在創(chuàng)建容器時一起創(chuàng)建的,如何創(chuàng)建及寫入信息本發(fā)明不進行限定。當然,優(yōu)選的,可以將持卡人的信息作為公共信息對象內(nèi)容的一部分。
容器的認證可以是外部認證,也可以是PIN認證,一旦完成容器的認證過程,容器就允許進入創(chuàng)建對象的狀態(tài)。
應用類的創(chuàng)建必須在完成容器的認證后才可以使用Insert Object命令創(chuàng)建,一個應用類可以創(chuàng)建多達254個對象,插入的對象的OID的OAID必須是認證時使用的OAID。
當卡讀取設備發(fā)出本發(fā)明定義的應用類選擇命令后,相應的應用類被選中,并根據(jù)當前應用類的密鑰對象的設置復位容器的狀態(tài)機。
創(chuàng)造性的提出采用容器和對象的概念存儲多應用數(shù)據(jù)之后,本發(fā)明還需要解決應用流程中如何實現(xiàn)對智能卡上的對象數(shù)據(jù)的存取。下面主要詳細介紹涉及容器的認證、插入對象和存取對象的流程步驟。其中,有可能涉及到采用狀態(tài)字表示的結果,下表描述了優(yōu)選使用的狀態(tài)字及其含義。
表10優(yōu)選使用的狀態(tài)字及其含義
參照圖7,下面詳細介紹容器的認證流程步驟。
容器的認證流程即獲取訪問權限(GET ACCESS RIGHT)的過程,容器認證可以采用PIN認證或者外部認證方式。取得容器的認證以獲取插入對象的權限,可以在認證的同時創(chuàng)建該應用類,也可以選擇以前創(chuàng)建的應用類以添加對象。但是經(jīng)過認證獲取的訪問權限,當遇到下列任何一種情況時,這種權限將立即失效□□卡讀取設備發(fā)出了一個SELECT CLASS命令□□卡讀取設備發(fā)出了GET ACCESS RIGHT命令□□卡讀取設備退出容器通過容器的認證流程之后就可以將對象插入到容器內(nèi),容器的認證流程步驟一般可以包括以下步驟步驟1根據(jù)P1判斷是認證還是操作,如果是操作則轉入步驟4。
步驟2根據(jù)P1判斷認證模式,如果是創(chuàng)建模式則轉入步驟4,否則轉步驟3。
步驟3當前認證模式為添加模式,在容器內(nèi)搜索指定的應用類,如果找到轉步驟4,否則報引用數(shù)據(jù)未找到(6A88)。
步驟4根據(jù)容器內(nèi)的特征信息,判斷認證的具體方法,如果是PIN認證則轉到步驟5,否則轉到步驟6。
步驟5如果是PIN認證模式,則校驗容器PIN,首先判別PIN是否鎖定,如果鎖定則終止并返回0x6983;否則比較校驗值和對象內(nèi)存儲的值作比較,如果不同,則將錯誤計數(shù)器減1,返回0x6Cxx,xx為剩余的可嘗試次數(shù);如果錯誤計數(shù)器為0,則表示該PIN已鎖定;如果校驗成功則恢復PIN的錯誤計數(shù)器為初始值,轉到步驟9。
步驟6首先判別容器認證密鑰是否鎖定,如果鎖定則終止并返回0x6983;否則繼續(xù)解析輸入的OAID,如果其長度不足8字節(jié),則后補0xFF直到補齊8字節(jié),之后用作分散因子;如果OAID長度大于8字節(jié),則取其最右8字節(jié)作為分散因子。用分散因子分散容器主控密鑰得到應用類控制密鑰,分散方式詳見《中國金融集成電路卡規(guī)范-電子錢包電子存折應用規(guī)范》即可。
步驟7利用相同的分散方法,用智能卡唯一性標識將應用類控制密鑰分散,得到認證過程密鑰。
步驟8檢查卡讀取設備是否取過隨機數(shù),如果隨機數(shù)有效則用該隨機數(shù)作為輸入,用認證過程密鑰將其加密得到認證密文,和輸入的密文比較,如果不一致則認證過程失敗,將錯誤計數(shù)器減1,返回0x6Cxx,xx為剩余的可嘗試次數(shù);如果錯誤計數(shù)器為0,則表示該密鑰已鎖定;如果認證成功恢復認證密鑰的錯誤計數(shù)器為初始值轉步驟9。
步驟9判斷是認證還是認證開關操作,如果是認證轉步驟10,如果是認證開關操作轉步驟11。
步驟10根據(jù)P1的設置,在容器內(nèi)創(chuàng)建新的應用類入口或選擇指定的應用類入口,且在容器內(nèi)并設置認證成功標志。
步驟11根據(jù)P1的設置,激活或關閉容器認證功能。
參照圖8,下面詳述插入對象Insert Object的處理流程。所述插入對象的過程是指對象的創(chuàng)建過程,在創(chuàng)建對象的過程中將同時進行容器管理。
步驟1檢查P2是否為0x00;同時檢查P1是否是指定范圍內(nèi)的值,如果有一項不滿足則終止并返回6B00;步驟2檢查內(nèi)部狀態(tài),確認是否成功完成認證過程,如果完成則允許插入對象,否則終止并返回安全條件不滿足代碼6982。
步驟3從數(shù)據(jù)內(nèi)解析出對象標識OUID,檢查是否具有和當前應用類入口相同的OAID,如果不滿足則終止并返回數(shù)據(jù)域不正確代碼6A80。
如果滿足,則解析出對象屬性Attrib和對象存取條件OAC。分析對象屬性是否和P1參數(shù)里設定的插入對象的類型匹配,如果不滿足則終止并返回數(shù)據(jù)域不正確6A80,否則繼續(xù)分析,如果是密鑰對象則解析屬性的后續(xù)字節(jié),并根據(jù)密鑰的算法計算密鑰的長度。
如果屬性滿足,則解析對象的內(nèi)容,首先分析并保存存取條件列表ACL,在識別數(shù)據(jù)項內(nèi)容時逐項在ACL里檢索,如果定義了數(shù)據(jù)項的AC,則記錄該數(shù)據(jù)項的AC到對象的ACL列表;如果在ACL里定義的標簽是一個應用定義的模板,則模板內(nèi)的所有數(shù)據(jù)項繼承模板的AC;如果在ACL里沒有定義數(shù)據(jù)項的AC,則設置缺省值0x00FF,表示讀寫權限為自由;如果是密鑰對象,則記錄對象的引用條件、計數(shù)器及更新條件到當前應用類入口的狀態(tài)機描述列表中。
如果在解析對象內(nèi)容時出現(xiàn)數(shù)據(jù)域內(nèi)容不正確的情況,應終止并返回6A80,智能卡必須釋放所有為該對象申請的臨時空間,其它狀態(tài)應恢復到插入該對象前的狀態(tài)。
步驟4將當前解析的對象插入當前應用類入口的對象列表中。
如果認證過程成功后,沒有一個該應用類的對象插入到容器內(nèi),當卡讀取設備選擇離開容器或用另一個應用類的OAID進行認證時,當前的應用類入口應該釋放。
參照圖9,下面詳述對象的存取Access Object處理流程。
對象的存取過程實際是對應用數(shù)據(jù)的存取,也可能是執(zhí)行某個特定的功能,基于對象的操作可以至少包括兩類引用(Reference)和刪除(Delete)。所述對象的存取Access Object處理流程可以包括以下步驟步驟1檢查P1、P2的值以及合法性,如果P2不為0x00或P1的值位8沒置位,則終止并返回6B00。同時分析P1的值,進而確定具體的操作類型。
步驟2解析輸入的對象OUID,確認和當前應用類入口具有相同的OAID,如果不滿足則終止并返回數(shù)據(jù)域不正確代碼6A80。
在當前應用類入口對象列表里檢索該對象,如果沒找到,則終止并返回6A88。
步驟3根據(jù)步驟1分析得到的操作類型,分別進入對應的操作流程。
下面分別對具體的操作流程進行詳述引用(Reference)過程流程、刪除(Delete)過程流程、讀取(Read)過程流程、更新(Update)過程流程、加值(Increase)過程流程、減值(Decrease)過程流程以及Unblock CAK處理流程。
(1)參照圖10,詳細描述引用(Reference)過程的流程步驟步驟4將指令的數(shù)據(jù)域內(nèi)容分解并檢查數(shù)據(jù)域長度Lc和數(shù)據(jù)域是否匹配,以及數(shù)據(jù)域內(nèi)部的結構是否正確。如果不正確返回數(shù)據(jù)域長度不正確代碼6700。
步驟5檢查當前對象是否允許引用,如果不能引用則終止并返回6985。
根據(jù)對象的屬性確定當前的引用操作是否合法,如果不正確返回使用條件不滿足代碼6985。
步驟6如果當前對象為PIN密鑰對象且P1指明是校驗口令,則進入校驗口令過程,首先判別此密鑰對象是否鎖定,如果鎖定則終止并返回0x6983;否則比較校驗值和對象內(nèi)存儲的值作比較,如果不同,則將錯誤計數(shù)器減1,返回0x6Cxx,xx為剩余的可嘗試次數(shù);如果錯誤計數(shù)器為0,則表示該密鑰已鎖定。
步驟7如果當前對象為PUK密鑰對象且P1指明是PIN解鎖,則進入PIN解鎖過程,首先判別此密鑰對象是否鎖定,如果鎖定則終止并返回0x6983;否則繼續(xù)檢查目標對象是否為PIN對象,如果不是則終止并返回使用條件不滿足6985,如果目標對象是PIN密鑰對象則繼續(xù)檢查該對象是否已經(jīng)鎖定,如果沒有鎖定則終止并返回安全狀態(tài)不滿足6982,否則就比較校驗值和PUK對象內(nèi)存儲的值,如果相同則將目標PIN對象解鎖,并設置其錯誤計數(shù)器為該密鑰對象允許的最大值,如果不同,則將PUK密鑰對象的錯誤計數(shù)器減1,返回0x6Cxx,xx為剩余的可嘗試次數(shù);如果錯誤計數(shù)器為0,則將該密鑰設置鎖定標記。
步驟8如果當前對象為密鑰對象,當密鑰屬性是允許外部認證且P1指明是外部認證,則進入外部認證過程,首先判別此密鑰對象是否鎖定,如果鎖定則終止并返回0x6983;如果沒有鎖定,則檢查卡讀取設備是否取過隨機數(shù),如果隨機數(shù)有效則用該隨機數(shù)作為輸入,用對象內(nèi)的密鑰將其加密得到認證密文,和輸入的密文比較,如果不一致則認證過程失敗。
如果密鑰類型為非對稱密鑰,則按密鑰屬性里指明的方法補齊數(shù)據(jù)后處理。
步驟9如果當前對象為密鑰對象,當密鑰屬性是允許內(nèi)部認證且P1指明是內(nèi)部認證,則進入內(nèi)部認證過程,首先判別此密鑰對象是否鎖定,如果鎖定則終止并返回0x6983;如果沒有鎖定,則將輸入數(shù)據(jù)作為輸入,用對象內(nèi)的密鑰將其加密得到密文并返回。
如果密鑰類型為非對稱密鑰,則按密鑰屬性里指明的方法補齊數(shù)據(jù)后處理。
步驟10如果當前對象為密鑰對象,當密鑰屬性標是允許計算簽名且P1指明是計算簽名,則進入計算簽名過程,首先判別此密鑰對象是否鎖定,如果鎖定則終止并返回0x6983;如果沒有鎖定,則檢查卡內(nèi)是否設置或計算Hash值,如果沒有報6985,否則將Hash值按密鑰屬性里指明的算法補齊到密鑰模長計算簽名。
步驟11如果當前對象為密鑰對象,當密鑰屬性是允許校驗簽名且P1指明是校驗簽名,則進入校驗簽名過程,首先判別此密鑰對象是否鎖定,如果鎖定則終止并返回0x6983;檢查卡內(nèi)是否設置或計算Hash值,如果沒有報6985,否則將輸入的簽名數(shù)據(jù)解開,解析出Hash值,和卡內(nèi)的Hash值比較,比較結果一致返回9000,否則返回9xxx。
(2)參照圖11,詳細描述刪除(Delete)過程的流程步驟步驟12檢查LC及數(shù)據(jù)的長度,如果不匹配則終止并返回6700。
步驟13檢查當前應用類的狀態(tài)機,如果對象的刪除條件滿足,則將對象釋放,并更新與此對象相關的列表。
(3)參照圖12,詳細描述讀取(Read)過程的流程步驟步驟14檢查LC及數(shù)據(jù)的長度,如果不匹配則終止并返回6700。檢查當前對象的屬性是否為普通的數(shù)據(jù)對象,如果是計算對象或密鑰對象,則終止并返回6985。
步驟15根據(jù)讀取數(shù)據(jù)項列表(DOL),逐項檢查當前應用類的狀態(tài)機,如果數(shù)據(jù)項的讀取條件滿足,則將該數(shù)據(jù)項的內(nèi)容讀出并保存到一個列表,直到所有數(shù)據(jù)項處理完成。如果有一項的讀取條件不滿足,則終止并返回6985。數(shù)據(jù)項的內(nèi)容讀取完成后,返回讀取的數(shù)據(jù)項內(nèi)容列表。
(4)參照圖13,詳細描述更新(Update)過程流程步驟16檢查LC及數(shù)據(jù)的長度,如果不匹配則終止并返回6700。檢查當前對象的屬性是否為普通的數(shù)據(jù)對象,如果是計算對象或密鑰對象,則終止并返回6985。
步驟17根據(jù)更新數(shù)據(jù)項列表(DOL),逐項檢查當前應用類的狀態(tài)機,如果所有數(shù)據(jù)項的更新條件都滿足,則將該數(shù)據(jù)項的內(nèi)容更新。如果有一項的讀取條件不滿足,則終止并返回6985,智能卡必須確保沒有一項數(shù)據(jù)被更新。
(5)參照圖14,詳細描述加值(Increase)過程流程步驟18檢查LC及數(shù)據(jù)的長度,如果不匹配則終止并返回6700。檢查當前對象的屬性是否為計算對象,如果不是則終止并返回6985。
步驟19檢查當前應用類的狀態(tài)機,如果數(shù)據(jù)項的加值條件滿足,則將該數(shù)據(jù)項的內(nèi)容更新,否則終止并返回6985,(6)參照圖15,詳細描述減值(Decrease)過程流程步驟20檢查LC及數(shù)據(jù)的長度,如果不匹配則終止并返回6700。檢查當前對象的屬性是否為計算對象,如果不是則終止并返回6985。
步驟21檢查當前應用類的狀態(tài)機,如果數(shù)據(jù)項的減值條件滿足,則將該數(shù)據(jù)項的內(nèi)容更新,否則終止并返回6985,(7)參照圖16,詳細描述Unblock CAK解鎖處理流程UnBlock CAK解鎖處理流程可以用來解鎖容器認證密鑰,所述密鑰可以是PIN密鑰或是認證密鑰。所述解鎖處理流程優(yōu)選的可以包括以下步驟步驟1檢查LC及數(shù)據(jù)的長度,如果不匹配則終止并返回6700。
步驟2判斷當前容器的認證模式,并判斷指令里指明的模式是否正確,如果不正確,終止并返回安全條件不滿足代碼;否則繼續(xù),如果是PIN認證模式,轉步驟3;如果是外部認證模式轉步驟6。
步驟3判斷具體的操作類型,如果是解鎖PIN,則轉步驟4;如果是修改PIN,則轉步驟5。
步驟4首先判別用于容器認證的PIN密鑰是否鎖定,如果沒有鎖定則終止并返回0x6985;否則繼續(xù)判斷用于容器認證的PUK密鑰是否鎖定,如果鎖定則終止并返回0x6983;
否則比較校驗值和保存PUK的值作比較,如果不同,則將PUK錯誤計數(shù)器減1,返回0x6Cxx,xx為剩余的可嘗試次數(shù);如果錯誤計數(shù)器為0,則表示PUK密鑰已鎖定。如果校驗成功則44將容器認證PIN的錯誤計數(shù)器恢復為初始值,同時恢復PUK密鑰的錯誤計數(shù)器為初始值并結束指令流程。
步驟5首先判別用于容器認證的PIN密鑰是否鎖定,如果鎖定則終止并返回0x6983;否則比較校驗值和保存的PIN值作比較,如果不同,則將PIN錯誤計數(shù)器減1,返回0x6Cxx,xx為剩余的可嘗試次數(shù);如果錯誤計數(shù)器為0,則表示PIN密鑰已鎖定。如果校驗成功則更新PIN的值,恢復PIN的錯誤計數(shù)器為初始值并結束指令流程。
步驟6首先判別容器認證密鑰是否鎖定,如果沒有鎖定則終止并返回0x6985;否則繼續(xù)判斷解鎖容器認證密鑰的密鑰是否鎖定,如果鎖定則終止并返回0x6983;解析輸入的OAID并檢查長度,如果不足8字節(jié),則后補0xFF直到補齊8字節(jié),之后用作分散因子;如果OAID長度大于8字節(jié),則取其最右8字節(jié)作為分散因子。用分散因子分散用于解鎖容器認證密鑰的解鎖密鑰,得到應用類解鎖密鑰,分散方式可以詳見《中國金融集成電路卡規(guī)范-電子錢包電子存折應用規(guī)范》。
利用相同的分散方法,用智能卡唯一性標識將應用類解鎖密鑰分散,得到解鎖過程密鑰。
檢查卡讀取設備是否取過隨機數(shù),如果隨機數(shù)有效則用該隨機數(shù)作為輸入,用解鎖過程密鑰將其加密得到認證密文,和輸入的密文比較,如果不一致則解鎖過程失敗,將解鎖密鑰的錯誤計數(shù)器減1,返回0x6Cxx,xx為剩余的可嘗試次數(shù);如果錯誤計數(shù)器為0,則表示該密鑰已鎖定;如果比較結果一致則將容器認證密鑰的錯誤計數(shù)器恢復為初始值,同時恢復解鎖密鑰的錯誤計數(shù)器為初始值并結束指令流程。
由于本發(fā)明所述智能卡上可以存在多個應用,則為了獨立地管理容器內(nèi)的不同應用類,每一個應用類優(yōu)選的應該放在一個單獨的區(qū)間。亦即在應用類之間應該設計一道“防火墻”以防止跨過應用類進行非法訪問。
為了實現(xiàn)密鑰功能的獨立性,優(yōu)選的,用于一種特定功能的加密/解密密鑰不能被任何其他功能所使用,包括保存在IC卡中的密鑰和用來產(chǎn)生、派生、傳輸這些密鑰的密鑰。
安全報文傳送的目的是保證數(shù)據(jù)的可靠性、完整性和對發(fā)送方的認證。數(shù)據(jù)完整性和對發(fā)送方的認證可以通過使用MAC來實現(xiàn)。數(shù)據(jù)的可靠性可以通過對數(shù)據(jù)域的加密來得到保證。
實現(xiàn)上述的安全報文傳送的具體方式可以參見下述實例。
例如,采用APDU報文進行傳送,當CLA字節(jié)的第二個半字節(jié)等于十六進制數(shù)字“4”時,表明對發(fā)送方命令數(shù)據(jù)要采用安全報文傳送。當使用安全報文傳送時,命令數(shù)據(jù)域中的數(shù)據(jù)用TLV結構標識,格式可以采用“OUID+命令關聯(lián)數(shù)據(jù)+MAC”。為保證命令中明文數(shù)據(jù)的保密性,可以將數(shù)據(jù)加密。加密時包含加密數(shù)據(jù)的標簽和長度,在APDU加密數(shù)據(jù)中不包括OUID和讀寫數(shù)據(jù)時的DOL。
在執(zhí)行安全報文前從智能卡取得的隨機數(shù)前兩個字節(jié)定義為ICVprefix,將ICVprefix用指定數(shù)據(jù)補齊為8字節(jié)作為計算MAC得ICV。
ICVprefix=智能卡隨機數(shù)前兩個字節(jié)ICV=ICVprefix+“0F 00 00 00 00 F0”如果連續(xù)進行安全報文傳輸,則將ICVprefix作為整數(shù)值加1后的值做為新得ICVprefix,重新補齊后做為新得ICV參與安全報文MAC得計算,如此類推。如果在連續(xù)的安全報文之間有使用隨機數(shù)的命令、發(fā)出選擇容器命令或選擇應用類命令出現(xiàn),則前面取得的隨機數(shù)失效,卡讀取設備必須重新取智能卡隨機數(shù)以計算ICVprefix。MAC的計算數(shù)據(jù)從CLA字節(jié)開始到數(shù)據(jù)域結束。
下面通過一個咖啡店對顧客發(fā)行積分卡的具體實施例對本發(fā)明的思想進行詳細說明。
某咖啡店準備對顧客發(fā)行積分卡,以便在激烈的市場競爭中保持顧客的忠誠度,計劃將對持積分卡的顧客實行一定的優(yōu)惠和贈送,但這些優(yōu)惠計劃是可變的,也可能針對不同的顧客群實施不同的優(yōu)惠計劃。對智能卡的要求是智能卡上要記錄顧客的積分值、VIP級別和身份識別信息,可以在發(fā)卡后安全的修改相關內(nèi)容。
根據(jù)積分計劃需求,可以做如下設計表11發(fā)行積分卡的初始化信息
所需要發(fā)行的智能卡設計完成之后,就可以開始智能卡個人化過程。所述個人化階段主要是將應用對象插入到容器中,如何在智能卡上創(chuàng)建容器這里不做描述,在個人化時,根據(jù)實際的商業(yè)營運模式,可能是單獨發(fā)卡,也可能是在合作伙伴的卡上添加本積分計劃。
假定所述需要個人化的智能卡采用以下的APDU命令編碼表12預置的APDU命令編碼
所述智能卡個人化過程可以包括以下步驟,其中命令部分采用上表進行代替對應示出。
步驟1選擇容器,得到容器的認證信息To Card00 A4 04 00 10“CUP CONTAINER001”From Card70 1D 5F01 01 40 5F02 08 11 22 33 44 55 66 77 88 5F03 01 00 5F0402 FF FE 5F05 02 A0 00在此假定容器的認證功能為激活狀態(tài),認證模式為PIN認證;同時已經(jīng)獲知容器的剩余空間以及容器的版本號等信息。
步驟2認證容器To Card80 46 01 00 1D 61 11 4F 05 46 01 00 00 01 50 08“QQ咖啡店”57 0826 12 34 56 FF FF FF FFFrom Card90 00根據(jù)第1步得到的信息,用容器的PIN對容器進行認證并創(chuàng)建本應用類,假設容器PIN的值為“123456”。
在該步驟中,如果是外部認證模式,則首先從智能卡取隨機數(shù),將用認證密鑰加密隨機數(shù)后的認證數(shù)據(jù)替換上面的認證數(shù)據(jù);如果第一步標明容器認證功能為關閉,則可以跳過這一步。
步驟3插入應用對象首先需要插入所有應用密鑰到容器中To Card80 40 80 00 2E 7A 2C 51 06 46 01 00 00 01 01 52 03 80 69 0053 02 00 01 7B 19 54 03 55 FF 02 55 12 00 00 DropKey
From Card90 00To Card80 40 80 00 2E 7A 2C 51 06 46 01 00 00 01 02 52 03 80 89 0053 02 00 01 7B 19 54 03 55 FF 02 55 12 00 00 MtKeyFrom Card90 00To Card80 40 80 00 2E 7A 2C 51 06 46 01 00 00 01 03 52 03 80 89 0053 02 00 01 7B 19 54 03 55 FF 02 55 12 00 00 IncKeyFrom Card90 00To Card80 40 80 00 2E 7A 2C 51 06 46 01 00 00 01 04 52 03 80 89 0053 02 00 01 7B 19 54 03 55 FF 02 55 12 00 00 DecKeyFrom Card90 00需要注意的是,如果需要密文安裝密鑰,則首先必須安裝一個傳輸密鑰,再將所有準備密文安裝的密鑰的屬性和ACL列表用Insert object指令寫入容器后,用Access object以密文的方式將密鑰值導入容器。
再插入應用的數(shù)據(jù)對象To Card80 40 00 00 2C 7A 2A 51 06 46 01 00 00 01 05 52 01 0053 02 00 01 7B 19 54 06 B1 00 FF 93 00 02 B1 0C 91 05“Tiger”92 0339 35 38 93 01 01From Card90 00To Card80 40 40 00 1E 7A 1C 51 06 46 01 00 00 01 06 52 01 40 53 0200 01 7B 0B 54 03 56 03 04 56 04 00 00 00 00From Card90 00至此,積分應用的個人化工作就完成了。
積分智能卡的個人化完成之后,下面對積分應用的使用示例進行詳細介紹根據(jù)實際的業(yè)務需求,積分應用的使用示例包括兩方面,一方面是查詢積分和個人信息,另一方面是增減積分值。
假設,我們已經(jīng)預定義了一些算法和數(shù)據(jù)代碼,如下表所述,表13預置的算法和數(shù)據(jù)代碼
□□查詢積分和個人信息查詢個人信息To Card80 A4 00 00 05 46 01 00 00 01From Card90 00To Card80 42 B0 00 0D 51 06 46 01 00 00 01 05 58 03 91 92 93From Card“Tiger”39 35 38 01
查詢積分To Card80 A4 00 00 05 46 01 00 00 01From Card90 00To Card80 42 B0 00 0B 51 06 46 01 00 00 01 06 58 01 56From Card00 00 00 00□□增減積分值增加1000點積分To Card80 A4 00 00 05 46 01 00 00 01From Card90 00To Card00 84 00 00 08From CardF2 87 AA 3D 93 6A C1 8F 90 00To Card84 42 C0 00 1B 51 06 46 01 00 00 01 05 58 01 9357 08 EncValue 59 04 MacFrom Card90 00EncValue=Fenc(IncKey,“00 00 03 E8”)MD=Fpad(“84 42 D0 00 1B 51 06 46 01 00 00 01 06 58 01 56 57 08”EncValue)ICVprefix=“B0 01”ICV=ICVprefix+“0F 00 00 00 00 F0”Mac=Fmac(IncKey,ICV,MD)
扣減500點積分To Card84 42 E0 00 1B 51 06 46 01 00 00 01 06 58 01 5657 08 EncValue 59 04 MacFrom Card90 00EncValue=Fenc(DecKey,“00 00 01 F4”)MD=Fpad(84 42 E0 00 1B 51 06 46 01 00 00 01 06 58 01 56 57 08EncValue)ICVprefix++ICV=ICVprefix+“0F 00 00 00 00 F0”Mac=Fmac(DecKey,ICV,MD)□□修改VIP等級To Card80 A4 00 00 05 46 01 00 00 01From Card90 00To Card00 84 00 00 08From CardB0 01 0E 6F 1E 76 5E 60 90 00To Card84 42 D0 00 1B 51 06 46 01 00 00 01 06 58 01 5657 08 EncValue 59 04 MacFrom Card90 00EncValue=Fenc(MtKey,“02”)MD=Fpad(“84 42 C0 00 1B 51 06 46 01 00 00 01 05 58 01 93 57 08”EncValue)ICVprefix=“F2 87”ICV=ICVprefix+“0F 00 00 00 00 F0”Mac=Fmac(MtKey,ICV,MD)在積分應用使用一段時間后,可能要添加新的對象來支撐新的業(yè)務需求,這其實就是對已發(fā)行應用的修改或維護。下面對可能發(fā)生的積分計劃變更的流程進行說明□□刪除對象刪除對象的權限可以由應用類自己控制,所以無需對容器進行認證,只要符合對象的刪除條件,就可以將指定的對象刪除。
□□添加對象添加對象必須完成對容器的認證,過程和個人化相同。
□□修改對象由于對象創(chuàng)建后只能修改數(shù)據(jù)項的內(nèi)容,無法添加數(shù)據(jù)項或修改數(shù)據(jù)項的屬性,如果應用必須修改對象的內(nèi)容,則必須首先刪除該對象,然后再重新創(chuàng)建該對象。
以上對本發(fā)明所提供的一種智能卡及向智能卡中創(chuàng)建應用、插入對象的方法進行了詳細介紹,本文中應用了具體個例對本發(fā)明的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時,對于本領域的一般技術人員,依據(jù)本發(fā)明的思想,在具體實施方式
及應用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應理解為對本發(fā)明的限制。
權利要求
1.一種向智能卡中創(chuàng)建應用的方法,其特征在于,所述智能卡采用容器和對象的方式存儲數(shù)據(jù),包括根據(jù)指令報文數(shù)據(jù)進行容器認證步驟;如果認證通過,則在容器內(nèi)創(chuàng)建應用類入口;從指令報文中解析出對象標識,判斷是否與當前應用類入口的應用類標識相同;如果匹配,則將當前解析的對象插入到當前應用類入口的對象列表中,并存儲該對象。
2.如權利要求1所述的向智能卡中創(chuàng)建應用的方法,其特征在于,還包括,如果所述對象標識與當前應用類入口的應用類標識相同,則解析出對象屬性,并判斷該對象屬性是否和指令報文的參數(shù)中設定的需要插入的對象的類型匹配。
3.如權利要求2所述的向智能卡中創(chuàng)建應用的方法,其特征在于,如果所述當前解析的對象為密鑰對象,則解析屬性的后續(xù)字節(jié),并根據(jù)密鑰的算法計算密鑰的長度。
4.如權利要求1或2所述的向智能卡中創(chuàng)建應用的方法,其特征在于,還包括解析對象的內(nèi)容,分析并保存存取條件列表ACL以及數(shù)據(jù)項。
5.如權利要求4所述的向智能卡中創(chuàng)建應用的方法,其特征在于,如果當前解析的對象為密鑰對象,則記錄對象的引用條件、計數(shù)器及更新條件到當前應用類入口的狀態(tài)機描述列表中。
6.如權利要求1或2所述的向智能卡中創(chuàng)建應用的方法,其特征在于,還包括,如果卡讀取設備選擇離開容器或進行重新認證,則釋放當前的應用類入口。
7.如權利要求4所述的向智能卡中創(chuàng)建應用的方法,其特征在于,還包括,如果在解析對象內(nèi)容時出現(xiàn)數(shù)據(jù)域內(nèi)容不正確的情況,則釋放為該對象申請的臨時空間,并恢復卡片數(shù)據(jù)至插入該對象前的狀態(tài)。
8.如權利要求1或2所述的向智能卡中創(chuàng)建應用的方法,其特征在于,所述插入的對象包括用于實現(xiàn)一定應用指令功能的APDU對象。
9.一種向智能卡中插入對象的方法,其特征在于,所述智能卡采用容器和對象的方式存儲數(shù)據(jù),包括以下步驟根據(jù)指令報文數(shù)據(jù)進行容器認證步驟;如果認證通過,則選擇指定的應用類入口;從指令報文中解析出對象標識,判斷是否與當前應用類入口的應用類標識相同;如果匹配,則將當前解析的對象插入到當前應用類入口的對象列表中,并存儲該對象。
10.一種數(shù)據(jù)處理裝置,特別是智能卡,其特征在于,包括微處理器、非易失性存儲器以及操作系統(tǒng);所述操作系統(tǒng)將數(shù)據(jù)按照容器和對象的方式存儲在非易失性存儲器中,存儲在至少一個容器中,每個容器內(nèi)包含至少一個應用的對象集合;所述操作系統(tǒng)設置容器的操作接口,以實現(xiàn)通用的針對對象的操作。
11.一種實現(xiàn)智能卡多應用的方法,其特征在于,包括設置至少一個容器;將數(shù)據(jù)按照容器和對象的方式存儲,每個容器內(nèi)包含至少一個應用的對象集合;設置容器的操作接口,以實現(xiàn)通用的針對對象的操作。
12.如權利要求11所述的實現(xiàn)智能卡多應用的方法,其特征在于,還包括根據(jù)數(shù)據(jù)的特性,將數(shù)據(jù)分別存儲為數(shù)據(jù)對象、計算對象、密鑰對象及應用協(xié)議數(shù)據(jù)單元APDU對象;所述數(shù)據(jù)對象用于存儲應用數(shù)據(jù),所述計算對象用于存儲敏感數(shù)據(jù),所述密鑰對象用于存儲應用的密鑰數(shù)據(jù);所述APDU對象用于存儲實現(xiàn)特定功能的指令序列數(shù)據(jù)。
全文摘要
本發(fā)明提供了一種向智能卡中創(chuàng)建應用的方法,所述智能卡采用容器和對象的方式存儲數(shù)據(jù),包括根據(jù)指令報文數(shù)據(jù)進行容器認證步驟;如果認證通過,則在容器內(nèi)創(chuàng)建應用類入口;從指令報文中解析出對象標識,判斷是否與當前應用類入口的應用類標識相同;如果匹配,則將當前解析的對象插入到當前應用類入口的對象列表中,并存儲該對象。本發(fā)明所述的向智能卡中創(chuàng)建應用的流程可以適用于各種行業(yè),提供了一種通用的創(chuàng)建流程。智能卡的發(fā)行過程中只需要進行一次開發(fā)即可,各種行業(yè)應用都可以采用本發(fā)明所述的創(chuàng)建應用的方法,向智能卡中創(chuàng)建應用,即本發(fā)明可以很方便的實現(xiàn)向智能卡中創(chuàng)建多應用。
文檔編號G06F9/44GK101042737SQ20061002513
公開日2007年9月26日 申請日期2006年3月24日 優(yōu)先權日2006年3月24日
發(fā)明者徐晉耀, 孟宏文, 楊輔祥, 李春歡, 柏建寧 申請人:中國銀聯(lián)股份有限公司