專利名稱:一種對(duì)java卡進(jìn)行初始化的方法和java卡的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及智能卡領(lǐng)域,特別涉及一種對(duì)java卡進(jìn)行初始化的方法和java卡。
背景技術(shù):
現(xiàn)有技術(shù)中,對(duì)掩膜后首次運(yùn)行的java卡,java虛擬機(jī)需要大量時(shí)間進(jìn)行初始化,初始化時(shí)間已經(jīng)遠(yuǎn)超IS07816-3所規(guī)定的ATR發(fā)送時(shí)間,導(dǎo)致必須使用專用讀卡器才能完成java卡的首次運(yùn)行。這將嚴(yán)重影響java卡的生產(chǎn)效率,尤其是發(fā)卡量數(shù)量級(jí)以萬為單位的情況下,問題更顯突出。
發(fā)明內(nèi)容
本發(fā)明提供了一種對(duì)java卡進(jìn)行初始化的方法和java卡,以解決上述現(xiàn)有技術(shù)中存在的問題。本發(fā)明提供了一種對(duì)java卡進(jìn)行初始化的方法,包括以下步驟①、java卡上電;②、所述java卡接收命令,對(duì)接收到的命令進(jìn)行判斷,如果所述接收到的命令為激活命令,則執(zhí)行步驟③;如果所述接收到的命令為切換命令,則執(zhí)行步驟④;如果所述接收到的命令為第一應(yīng)用協(xié)議數(shù)據(jù)單元APDU命令,則執(zhí)行步驟⑤;③、所述java卡判斷自身的激活成功標(biāo)志位是否已被置位,如果所述激活成功標(biāo)志位未被置位,所述java卡在被激活成功后,對(duì)所述java卡的激活成功標(biāo)志位進(jìn)行置位, 將所述生命周期標(biāo)志位的取值修改為第一預(yù)設(shè)值,并返回步驟②;否則,所述java卡返回錯(cuò)誤碼,并返回步驟②;④、所述java卡判斷所述生命周期標(biāo)志位的取值是否為所述第一預(yù)設(shè)值,如果為所述生命周期標(biāo)志位的取值為所述第一預(yù)設(shè)值,所述java卡將所述生命周期標(biāo)志位的取值修改為所述第二預(yù)設(shè)值,并返回步驟②;否則,所述java卡返回錯(cuò)誤碼,并返回步驟②;⑤、所述java卡判斷所述生命周期標(biāo)志位的取值是否為所述第二預(yù)設(shè)值,如果為所述生命周期標(biāo)志位的取值不是所述第二預(yù)設(shè)值,所述java卡返回錯(cuò)誤碼,并返回步驟 ②;否則,所述java卡從所述第一 APDU命令中獲取運(yùn)行環(huán)境數(shù)據(jù),將所述運(yùn)行環(huán)境數(shù)據(jù)寫入到自身的非易失性存儲(chǔ)器NVM中,并返回步驟②,所述運(yùn)行環(huán)境數(shù)據(jù)為運(yùn)行java卡虛擬機(jī)所必需的數(shù)據(jù)。本發(fā)明還提供了一種對(duì)java卡進(jìn)行初始化的方法,包括以下步驟①、java卡上電;②、所述java卡檢查自身的生命周期標(biāo)志位的取值以及激活成功標(biāo)志位是否被置位,如果所述激活成功標(biāo)志位未被置位,則執(zhí)行步驟③;如果所述生命周期標(biāo)志位的取值為第一預(yù)設(shè)值,則執(zhí)行步驟⑥;如果所述生命周期標(biāo)志位的取值為第二預(yù)設(shè)值,則執(zhí)行步驟 ③、所述java卡對(duì)接收到的命令進(jìn)行判斷,如果所述接收到的命令為激活命令,則執(zhí)行步驟④;否則,執(zhí)行步驟⑤;④、所述java卡在被激活成功后,對(duì)所述java卡的激活成功標(biāo)志位進(jìn)行置位,將所述生命周期標(biāo)志位的取值修改為第一預(yù)設(shè)值,并返回步驟③;⑤、所述java卡返回錯(cuò)誤碼,并返回步驟③;⑥、所述java卡對(duì)接收到的命令進(jìn)行判斷,如果所述接收到的命令為切換命令, 則執(zhí)行步驟⑦;⑦、所述java卡將所述生命周期標(biāo)志位的取值修改為第二預(yù)設(shè)值,并返回步驟⑧、所述java卡對(duì)接收到的命令進(jìn)行判斷,如果所述接收到的命令為第一應(yīng)用協(xié)議數(shù)據(jù)單元APDU命令,則執(zhí)行步驟⑨;⑨、所述java卡從所述第一 APDU命令中獲取運(yùn)行環(huán)境數(shù)據(jù),將所述運(yùn)行環(huán)境數(shù)據(jù)寫入到自身的非易失性存儲(chǔ)器NVM中,并返回步驟⑧,所述運(yùn)行環(huán)境數(shù)據(jù)為運(yùn)行java卡虛擬機(jī)所必需的數(shù)據(jù)。本發(fā)明還提供了一種java卡,包括接收模塊,用于接收命令;第一判斷模塊,用于對(duì)所述接收模塊接收到的命令進(jìn)行判斷;第二判斷模塊,用于在所述第一判斷模塊判斷所述接收到的命令為激活命令時(shí), 判斷所述java卡的激活成功標(biāo)志位是否已被置位;在所述第一判斷模塊判斷所述接收到的命令為切換命令時(shí),判斷所述生命周期標(biāo)志位的取值是否為所述第一預(yù)設(shè)值;在所述第一判斷模塊判斷接收到的命令為第一 APDU命令時(shí),判斷所述生命周期標(biāo)志位的取值是否為所述第二預(yù)設(shè)值;第一設(shè)置模塊,用于在所述第二判斷模塊判斷所述激活成功標(biāo)志位未被置位時(shí), 在所述java卡在被激活成功后,對(duì)所述java卡的激活成功標(biāo)志位進(jìn)行置位,將所述生命周期標(biāo)志位的取值修改為第一預(yù)設(shè)值;第二設(shè)置模塊,用于在所述第二判斷模塊判斷所述生命周期標(biāo)志位的取值為所述第一預(yù)設(shè)值時(shí),將所述生命周期標(biāo)志位的取值修改為所述第二預(yù)設(shè)值;處理模塊,用于在所述第二判斷模塊判斷所述生命周期標(biāo)志位的取值為所述第二預(yù)設(shè)值時(shí),從所述第一 APDU命令中獲取運(yùn)行環(huán)境數(shù)據(jù),將所述運(yùn)行環(huán)境數(shù)據(jù)寫入到自身的非易失性存儲(chǔ)器NVM中,所述運(yùn)行環(huán)境數(shù)據(jù)為運(yùn)行java卡虛擬機(jī)所必需的數(shù)據(jù);發(fā)送模塊,用于在所述第二判斷模塊判斷所述激活成功標(biāo)志位已被置位時(shí),返回錯(cuò)誤碼;在所述第二判斷模塊判斷所述生命周期標(biāo)志位的取值不是所述第一預(yù)設(shè)值時(shí),返回錯(cuò)誤碼;在所述第二判斷模塊判斷所述生命周期標(biāo)志位的取值不是所述第二預(yù)設(shè)值時(shí), 返回錯(cuò)誤碼。本發(fā)明還提供了一種java卡,包括檢查模塊,用于檢查所述java卡的生命周期標(biāo)志位的取值以及激活成功標(biāo)志位是否被置位;接收模塊,用于接收命令;第一判斷模塊,用于對(duì)所述接收模塊接收到的命令進(jìn)行判斷;第一設(shè)置模塊,用于在所述檢查模塊檢查到所述激活成功標(biāo)志位未被置位,且所述第一判斷模塊判斷接收到的命令為激活命令時(shí),在所述java卡被激活成功后,對(duì)所述 Java卡的激活成功標(biāo)志位進(jìn)行置位,將所述生命周期標(biāo)志位的取值修改為第一預(yù)設(shè)值;第二設(shè)置模塊,用于在所述檢查模塊檢查到所述生命周期標(biāo)志位的取值為第一預(yù)設(shè)值,且所述第一判斷模塊判斷所述接收到的命令為切換命令時(shí),將所述生命周期標(biāo)志位的取值修改為第二預(yù)設(shè)值;處理模塊,用于在所述檢查模塊檢查到所述生命周期標(biāo)志位的取值為第二預(yù)設(shè)值,且所述第一判斷模塊判斷所述接收到的命令為第一應(yīng)用協(xié)議數(shù)據(jù)單元APDU命令時(shí),從所述第一 APDU命令中獲取運(yùn)行環(huán)境數(shù)據(jù),將所述運(yùn)行環(huán)境數(shù)據(jù)寫入到自身的非易失性存儲(chǔ)器NVM中,所述運(yùn)行環(huán)境數(shù)據(jù)為運(yùn)行java卡虛擬機(jī)所必需的數(shù)據(jù);發(fā)送模塊,用于在所述檢查模塊檢查到所述激活成功標(biāo)志位未被置位,且所述第一判斷模塊判斷接收到的命令不為激活命令時(shí),返回錯(cuò)誤碼。本發(fā)明通過APDU命令將運(yùn)行環(huán)境數(shù)據(jù)寫入到j(luò)ava卡的NVM中,進(jìn)而實(shí)現(xiàn)對(duì)java 卡的初始化,能夠減少java卡的初始化時(shí)間,提高java卡的生產(chǎn)效率。
圖1為本發(fā)明實(shí)施例一提供的一種對(duì)java卡進(jìn)行初始化的方法流程圖;圖2為開發(fā)軟件向卡片發(fā)送腳本文件的過程的流程圖;圖3為本發(fā)明實(shí)施例二提供的另一種對(duì)java卡進(jìn)行初始化的方法流程圖;圖4為本發(fā)明實(shí)施例三提供的一種java卡的結(jié)構(gòu)圖;圖5為本發(fā)明實(shí)施例四提供的另一種java卡的結(jié)構(gòu)圖。
具體實(shí)施例方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍??ㄆ芷诘亩x1)非激活狀態(tài)(Non-Active)掩膜出廠的卡片所處的狀態(tài),即整個(gè)COS首次運(yùn)行所處的狀態(tài),此時(shí)卡片只處理激活命令,如在預(yù)設(shè)的激活次數(shù)內(nèi)未激活成功,卡片將作廢;2)激活狀態(tài)(Active)卡片處于非激活狀態(tài)時(shí),接收到正確的激活命令,經(jīng)過一系列的認(rèn)證后,不再處理重復(fù)接收到的激活命令,同時(shí)可以處理其它命令。此狀態(tài)又可以分為a)超級(jí)管理員狀態(tài)(Administrator)卡片處于此狀態(tài)時(shí),可以處理除激活命令外的其它命令,包括卡片參數(shù)設(shè)定、下載器選擇、切換至虛擬機(jī)狀態(tài)等。b)下載器狀態(tài)(Loader)卡片處于超級(jí)管理員狀態(tài)時(shí),接收到下載器切換命令后,將處于此狀態(tài)??ㄆ幱谙螺d器狀態(tài)時(shí),只處理與下載相關(guān)的命令序列,即NVM鏡像下載命令序列及切換回超級(jí)管理員狀態(tài)命令。c)JaVa虛擬機(jī)狀態(tài)(JCVM)卡片處于超級(jí)管理員狀態(tài)時(shí),接收到虛擬機(jī)切換命令,將處于此狀態(tài)。當(dāng)卡片處于JCVM狀態(tài)時(shí),卡片將作為java卡虛擬機(jī)正常運(yùn)行。實(shí)施例
本發(fā)明實(shí)施例一提供了一種對(duì)java卡進(jìn)行初始化的方法。該方法中,利用開發(fā)軟件從仿真卡片中獲取鏡像,對(duì)鏡像進(jìn)行處理后再應(yīng)用到未初始化的java卡中。在本實(shí)施例中,在利用開發(fā)軟件對(duì)未初始化的java卡進(jìn)行初始化之前,首先進(jìn)行以下操作將掩膜時(shí)寫入java卡的ROM中的二進(jìn)制文件下載至仿真器的ROM中,仿真器運(yùn)行所述二級(jí)制文件,得到運(yùn)行環(huán)境數(shù)據(jù),所述運(yùn)行環(huán)境數(shù)據(jù)存儲(chǔ)在所述仿真器的NVM中。所述仿真器則為仿真卡片,仿真卡片首次上電后處于未激活狀態(tài)。從所述仿真卡片中獲取鏡像的過程如下步驟A 仿真卡片插接到讀卡器中,首次上電;步驟B 開發(fā)軟件激活仿真卡片;在本實(shí)施例中,仿真卡片激活后處于超級(jí)管理員狀態(tài);步驟C 開發(fā)軟件發(fā)送命令使激活后的仿真卡片進(jìn)入虛擬機(jī)狀態(tài),并復(fù)位仿真卡片;在本實(shí)施例中,開發(fā)軟件通過讀卡器向仿真卡片發(fā)送切換狀態(tài)命令;步驟D 暫停仿真卡片的運(yùn)行,并使用仿真卡片工具將仿真卡片的NVM中存儲(chǔ)的內(nèi)容轉(zhuǎn)存至一文件中;所述NVM中存儲(chǔ)的內(nèi)容即為所述運(yùn)行環(huán)境數(shù)據(jù);步驟E 對(duì)所述文件加密計(jì)算,得到最終獲取的鏡像文件。對(duì)所述獲取的鏡像文件進(jìn)行處理的過程如下
步驟a 解密所述鏡像文件;步驟b 獲取所述解密鏡像文件得到的明文中的有效數(shù)據(jù);在本實(shí)施例中,仿真卡片處于虛擬機(jī)狀態(tài),仿真卡片的NVM中除了所述運(yùn)行環(huán)境數(shù)據(jù)之外,其他信息均為無效數(shù)據(jù),所以只從解密鏡像文件得到的明文數(shù)據(jù)中提取運(yùn)行環(huán)境數(shù)據(jù);步驟c 對(duì)所述有效數(shù)據(jù)加密計(jì)算,得到加密的APDU(application protocol data unit,應(yīng)用協(xié)議數(shù)據(jù)單元)數(shù)據(jù)域;在本實(shí)施例中,使用預(yù)先設(shè)置的數(shù)據(jù)轉(zhuǎn)換密鑰(Data Converter Key,以下簡(jiǎn)稱 DCK)對(duì)所述有效數(shù)據(jù)加密計(jì)算;優(yōu)選地,所述DCK密鑰為采用DES算法的16字節(jié)密鑰;步驟d 生成完整的APDU命令,并將所述生成的APDU命令以腳本的形式存放于腳本文件中;APDU命令的格式如表1所示表IAPDU命令格式表
權(quán)利要求
1.一種對(duì)java卡進(jìn)行初始化的方法,其特征在于,包括以下步驟①、java卡上電;②、所述java卡等待接收命令;③、所述java卡接收命令,對(duì)接收到的命令進(jìn)行判斷,如果所述接收到的命令為激活命令,則執(zhí)行步驟④;如果所述接收到的命令為切換命令,則執(zhí)行步驟⑤;如果所述接收到的命令為第一應(yīng)用協(xié)議數(shù)據(jù)單元APDU命令,則執(zhí)行步驟⑥;④、所述java卡判斷自身的激活成功標(biāo)志位是否已被置位,如果所述激活成功標(biāo)志位未被置位,所述java卡在被激活成功后,對(duì)所述java卡的激活成功標(biāo)志位進(jìn)行置位,將所述生命周期標(biāo)志位的取值修改為第一預(yù)設(shè)值,并返回步驟②;否則,所述java卡返回錯(cuò)誤碼,并返回步驟②;⑤、所述java卡判斷所述生命周期標(biāo)志位的取值是否為所述第一預(yù)設(shè)值,如果所述生命周期標(biāo)志位的取值為所述第一預(yù)設(shè)值,所述java卡將所述生命周期標(biāo)志位的取值修改為所述第二預(yù)設(shè)值,并返回步驟②;否則,所述java卡返回錯(cuò)誤碼,并返回步驟②;⑥、所述java卡判斷所述生命周期標(biāo)志位的取值是否為所述第二預(yù)設(shè)值,如果為所述生命周期標(biāo)志位的取值不是所述第二預(yù)設(shè)值,所述java卡返回錯(cuò)誤碼,并返回步驟②;否則,所述java卡從所述第一APDU命令中獲取運(yùn)行環(huán)境數(shù)據(jù),將所述運(yùn)行環(huán)境數(shù)據(jù)寫入到自身的非易失性存儲(chǔ)器NVM中,并返回步驟②,所述運(yùn)行環(huán)境數(shù)據(jù)為運(yùn)行java卡虛擬機(jī)所必需的數(shù)據(jù)。
2.如權(quán)利要求1所述的方法,其特征在于,所述java卡對(duì)所述接收到的命令進(jìn)行判斷之后,還包括當(dāng)所述接收到的命令為個(gè)人識(shí)別碼PIN碼驗(yàn)證命令時(shí),所述java卡判斷所述生命周期標(biāo)志位的取值是否為所述第一預(yù)設(shè)值;如果所述生命周期標(biāo)志位的取值不是所述第一預(yù)設(shè)值,所述java卡返回錯(cuò)誤碼,并返回步驟②;如果所述生命周期標(biāo)志位的取值為所述第一預(yù)設(shè)值,所述java卡在對(duì)所述PIN碼驗(yàn)證命令所包含的PIN碼驗(yàn)證成功后,對(duì)所述java卡的驗(yàn)證通過標(biāo)志位進(jìn)行置位,并返回步驟 ②,所述驗(yàn)證通過標(biāo)識(shí)位用于標(biāo)識(shí)所述java卡對(duì)PIN碼是否驗(yàn)證成功;所述java卡判斷所述接收到的命令為切換命令之后,還包括所述java卡判斷自身的驗(yàn)證通過標(biāo)志位是否已被置位;所述java卡將所述生命周期標(biāo)志位的取值修改為第二預(yù)設(shè)值,具體為當(dāng)所述驗(yàn)證通過標(biāo)志位已被置位時(shí),所述java卡將所述生命周期標(biāo)志位的取值修改為第二預(yù)設(shè)值。
3.如權(quán)利要求1所述的方法,其特征在于,所述java卡判斷所述生命周期標(biāo)志位的取值為所述第二預(yù)設(shè)值之后,還包括所述java卡判斷自身是否存儲(chǔ)有初始向量,如果存儲(chǔ)有初始向量,則使用所述初始向量和第一密鑰對(duì)所述第一 APDU命令進(jìn)行完整性驗(yàn)證,并在完整性驗(yàn)證成功時(shí),將所述初始向量更新為所述第一 APDU命令中的MAC碼;如果沒有存儲(chǔ)初始向量,則使用預(yù)設(shè)向量和所述第一密鑰對(duì)所述第一 APDU命令進(jìn)行完整性驗(yàn)證,并在完整性驗(yàn)證成功時(shí),將所述第一 APDU命令中的消息認(rèn)證碼MAC碼作為初始向量進(jìn)行存儲(chǔ);所述java卡從所述第一 APDU命令中獲取運(yùn)行環(huán)境數(shù)據(jù),具體為 當(dāng)完整性驗(yàn)證成功時(shí),所述java卡使用第二密鑰對(duì)所述第一 APDU命令中的APDU數(shù)據(jù)域進(jìn)行解密,得到所述運(yùn)行環(huán)境數(shù)據(jù)。
4.如權(quán)利要求1所述的方法,其特征在于,所述java卡對(duì)所述接收到的命令進(jìn)行判斷之后,還包括當(dāng)所述接收到的命令為第二 APDU命令時(shí),所述java卡從所述第二 APDU命令中獲取地址信息;所述java卡將所述運(yùn)行環(huán)境數(shù)據(jù)寫入到自身的NVM中,具體為 所述java卡根據(jù)所述地址信息,將所述運(yùn)行環(huán)境數(shù)據(jù)寫入到自身的NVM中。
5.如權(quán)利要求4所述的方法,其特征在于,所述地址信息為基地址; 所述java卡從所述第二 APDU命令中獲取地址信息,具體為 所述java卡從所述第二 APDU命令的命令頭中獲取所述基地址; 所述java卡將所述運(yùn)行環(huán)境數(shù)據(jù)寫入到自身的NVM中,具體為 所述java卡從所述第一 APDU命令中獲取偏移地址;所述java卡根據(jù)所述基地址和所述偏移地址,將所述運(yùn)行環(huán)境數(shù)據(jù)寫入到自身的NVM中。
6.一種對(duì)java卡進(jìn)行初始化的方法,其特征在于,包括以下步驟①、java卡上電;②、所述java卡檢查自身的生命周期標(biāo)志位的取值以及激活成功標(biāo)志位是否被置位, 如果所述激活成功標(biāo)志位未被置位,則執(zhí)行步驟③;如果所述生命周期標(biāo)志位的取值為第一預(yù)設(shè)值,則執(zhí)行步驟⑥;如果所述生命周期標(biāo)志位的取值為第二預(yù)設(shè)值,則執(zhí)行步驟⑧;③、所述java卡對(duì)接收到的命令進(jìn)行判斷,如果所述接收到的命令為激活命令,則執(zhí)行步驟④;否則,執(zhí)行步驟⑤;④、所述java卡在被激活成功后,對(duì)所述java卡的激活成功標(biāo)志位進(jìn)行置位,將所述生命周期標(biāo)志位的取值修改為第一預(yù)設(shè)值,并返回步驟③;⑤、所述java卡返回錯(cuò)誤碼,并返回步驟③;⑥、所述java卡對(duì)接收到的命令進(jìn)行判斷,如果所述接收到的命令為切換命令,則執(zhí)行步驟⑦;⑦、所述java卡將所述生命周期標(biāo)志位的取值修改為第二預(yù)設(shè)值,并返回步驟⑥;⑧、所述java卡對(duì)接收到的命令進(jìn)行判斷,如果所述接收到的命令為第一應(yīng)用協(xié)議數(shù)據(jù)單元APDU命令,則執(zhí)行步驟⑨;⑨、所述java卡從所述第一APDU命令中獲取運(yùn)行環(huán)境數(shù)據(jù),將所述運(yùn)行環(huán)境數(shù)據(jù)寫入到自身的非易失性存儲(chǔ)器NVM中,并返回步驟⑧,所述運(yùn)行環(huán)境數(shù)據(jù)為運(yùn)行java卡虛擬機(jī)所必需的數(shù)據(jù)。
7.如權(quán)利要求6所述的方法,其特征在于,所述步驟⑥,還包括如果所述接收到的命令為個(gè)人識(shí)別碼PIN碼驗(yàn)證命令,所述java卡在對(duì)所述PIN碼驗(yàn)證命令所包含的PIN碼驗(yàn)證成功后,對(duì)所述java卡的驗(yàn)證通過標(biāo)志位進(jìn)行置位,所述驗(yàn)證通過標(biāo)識(shí)位用于標(biāo)識(shí)所述java卡對(duì)PIN碼是否驗(yàn)證成功;所述java卡判斷所述接收到的命令為切換命令之后,還包括所述java卡判斷自身的驗(yàn)證通過標(biāo)志位是否已被置位;所述java卡將所述生命周期標(biāo)志位的取值修改為第二預(yù)設(shè)值,具體為當(dāng)所述驗(yàn)證通過標(biāo)志位已被置位時(shí),所述java卡將所述生命周期標(biāo)志位的取值修改為第二預(yù)設(shè)值。
8.如權(quán)利要求6所述的方法,其特征在于,所述java卡判斷所述接收的命令為第一 APDU命令之后,還包括所述java卡判斷自身是否存儲(chǔ)有初始向量,如果存儲(chǔ)有初始向量,則使用所述初始向量和第一密鑰對(duì)所述第一 APDU命令進(jìn)行完整性驗(yàn)證,并在完整性驗(yàn)證成功時(shí),將所述初始向量更新為所述第一 APDU命令中的MAC碼;如果沒有存儲(chǔ)初始向量,則使用預(yù)設(shè)向量和所述第一密鑰對(duì)所述第一 APDU命令進(jìn)行完整性驗(yàn)證,并在完整性驗(yàn)證成功時(shí),將所述第一 APDU命令中的消息認(rèn)證碼MAC碼作為初始向量進(jìn)行存儲(chǔ);所述java卡從所述第一 APDU命令中獲取運(yùn)行環(huán)境數(shù)據(jù),具體為 當(dāng)完整性驗(yàn)證成功時(shí),所述java卡使用第二密鑰對(duì)所述第一 APDU命令中的APDU數(shù)據(jù)域進(jìn)行解密,得到所述運(yùn)行環(huán)境數(shù)據(jù)。
9.如權(quán)利要求6所述的方法,其特征在于,所述步驟⑧,還包括當(dāng)所述接收到的命令為第二 APDU命令時(shí),所述java卡從所述第二 APDU命令中獲取地址信息;所述java卡將所述運(yùn)行環(huán)境數(shù)據(jù)寫入到自身的NVM中,具體為 所述java卡根據(jù)所述地址信息,將所述運(yùn)行環(huán)境數(shù)據(jù)寫入到自身的NVM中。
10.如權(quán)利要求9所述的方法,其特征在于,所述地址信息為基地址; 所述java卡從所述第二 APDU命令中獲取地址信息,具體為所述java卡從所述第二 APDU命令的命令頭中獲取所述基地址; 所述java卡將所述運(yùn)行環(huán)境數(shù)據(jù)寫入到自身的NVM中,具體為 所述java卡從所述第一 APDU命令中獲取偏移地址;所述java卡根據(jù)所述基地址和所述偏移地址,將所述運(yùn)行環(huán)境數(shù)據(jù)寫入到自身的NVM中。
11.一種java卡,其特征在于,包括 接收模塊,用于接收命令;第一判斷模塊,用于對(duì)所述接收模塊接收到的命令進(jìn)行判斷; 第二判斷模塊,用于在所述第一判斷模塊判斷所述接收到的命令為激活命令時(shí),判斷所述java卡的激活成功標(biāo)志位是否已被置位;在所述第一判斷模塊判斷所述接收到的命令為切換命令時(shí),判斷所述生命周期標(biāo)志位的取值是否為所述第一預(yù)設(shè)值;在所述第一判斷模塊判斷接收到的命令為第一 APDU命令時(shí),判斷所述生命周期標(biāo)志位的取值是否為所述第二預(yù)設(shè)值;第一設(shè)置模塊,用于在所述第二判斷模塊判斷所述激活成功標(biāo)志位未被置位時(shí),在所述java卡在被激活成功后,對(duì)所述java卡的激活成功標(biāo)志位進(jìn)行置位,將所述生命周期標(biāo)志位的取值修改為第一預(yù)設(shè)值;第二設(shè)置模塊,用于在所述第二判斷模塊判斷所述生命周期標(biāo)志位的取值為所述第一預(yù)設(shè)值時(shí),將所述生命周期標(biāo)志位的取值修改為所述第二預(yù)設(shè)值;處理模塊,用于在所述第二判斷模塊判斷所述生命周期標(biāo)志位的取值為所述第二預(yù)設(shè)值時(shí),從所述第一 APDU命令中獲取運(yùn)行環(huán)境數(shù)據(jù),將所述運(yùn)行環(huán)境數(shù)據(jù)寫入到自身的非易失性存儲(chǔ)器NVM中,所述運(yùn)行環(huán)境數(shù)據(jù)為運(yùn)行java卡虛擬機(jī)所必需的數(shù)據(jù);發(fā)送模塊,用于在所述第二判斷模塊判斷所述激活成功標(biāo)志位已被置位時(shí),返回錯(cuò)誤碼;在所述第二判斷模塊判斷所述生命周期標(biāo)志位的取值不是所述第一預(yù)設(shè)值時(shí),返回錯(cuò)誤碼;在所述第二判斷模塊判斷所述生命周期標(biāo)志位的取值不是所述第二預(yù)設(shè)值時(shí),返回錯(cuò)誤碼。
12.如權(quán)利要求11所述的java卡,其特征在于,還包括第三設(shè)置模塊和第三判斷模塊;所述第二判斷模塊,還用于在所述第一判斷模塊判斷所述接收到的命令為個(gè)人識(shí)別碼 PIN碼驗(yàn)證命令時(shí),判斷所述生命周期標(biāo)志位的取值是否為所述第一預(yù)設(shè)值;所述第三設(shè)置模塊,用于在所述第二判斷模塊判斷所述生命周期標(biāo)志位的取值為所述第一預(yù)設(shè)值時(shí),在對(duì)所述PIN碼驗(yàn)證命令所包含的PIN碼驗(yàn)證成功后,對(duì)所述java卡的驗(yàn)證通過標(biāo)志位進(jìn)行置位,所述驗(yàn)證通過標(biāo)識(shí)位用于標(biāo)識(shí)所述java卡對(duì)PIN碼是否驗(yàn)證成功;所述第三判斷模塊,用于判斷所述java卡的驗(yàn)證通過標(biāo)志位是否已被置位;所述第二設(shè)置模塊,具體用于在所述第二判斷模塊判斷所述生命周期標(biāo)志位的取值為所述第一預(yù)設(shè)值,且所述第三判斷模塊判斷所述驗(yàn)證通過標(biāo)志位已被置位時(shí),將所述生命周期標(biāo)志位的取值修改為第二預(yù)設(shè)值。
13.如權(quán)利要求11所述的java卡,其特征在于,所述處理模塊,具體用于在所述第二判斷模塊判斷所述生命周期標(biāo)志位的取值為所述第二預(yù)設(shè)值時(shí),判斷所述java卡是否存儲(chǔ)有初始向量,如果存儲(chǔ)有初始向量,則使用所述初始向量和第一密鑰對(duì)所述第一 APDU命令進(jìn)行完整性驗(yàn)證,并在完整性驗(yàn)證成功時(shí),將所述初始向量更新為所述第一 APDU命令中的MAC碼,使用第二密鑰對(duì)所述第一 APDU命令中的APDU數(shù)據(jù)域進(jìn)行解密,得到所述運(yùn)行環(huán)境數(shù)據(jù),將所述運(yùn)行環(huán)境數(shù)據(jù)寫入到自身的非易失性存儲(chǔ)器NVM中;如果沒有存儲(chǔ)初始向量,則使用預(yù)設(shè)向量和所述第一密鑰對(duì)所述第一 APDU命令進(jìn)行完整性驗(yàn)證,并在完整性驗(yàn)證成功時(shí),將所述第一 APDU命令中的消息認(rèn)證碼 MAC碼作為初始向量進(jìn)行存儲(chǔ),使用所述第二密鑰對(duì)所述第一 APDU命令中的APDU數(shù)據(jù)域進(jìn)行解密,得到所述運(yùn)行環(huán)境數(shù)據(jù),將所述運(yùn)行環(huán)境數(shù)據(jù)寫入到自身的非易失性存儲(chǔ)器NVM 中。
14.如權(quán)利要求11所述的java卡,其特征在于,還包括獲取模塊,用于在所述第一判斷模塊判斷所述接收到的命令為第二 APDU命令時(shí),從所述第二 APDU命令中獲取地址信息;所述處理模塊,具體用于在所述第二判斷模塊判斷所述生命周期標(biāo)志位的取值為所述第二預(yù)設(shè)值時(shí),從所述第一 APDU命令中獲取運(yùn)行環(huán)境數(shù)據(jù),根據(jù)所述地址信息,將所述運(yùn)行環(huán)境數(shù)據(jù)寫入到自身的NVM中。
15.如權(quán)利要求14所述的java卡,其特征在于,所述地址信息為基地址;所述獲取模塊,具體用于從所述第二 APDU命令的命令頭中獲取所述基地址;所述處理模塊,具體用于在所述第二判斷模塊判斷所述生命周期標(biāo)志位的取值為所述第二預(yù)設(shè)值時(shí),從所述第一 APDU命令中獲取運(yùn)行環(huán)境數(shù)據(jù)和偏移地址,根據(jù)所述基地址和所述偏移地址,將所述運(yùn)行環(huán)境數(shù)據(jù)寫入到自身的NVM中。
16.一種java卡,其特征在于,包括檢查模塊,用于檢查所述java卡的生命周期標(biāo)志位的取值以及激活成功標(biāo)志位是否被置位;接收模塊,用于接收命令;第一判斷模塊,用于對(duì)所述接收模塊接收到的命令進(jìn)行判斷; 第一設(shè)置模塊,用于在所述檢查模塊檢查到所述激活成功標(biāo)志位未被置位,且所述第一判斷模塊判斷接收到的命令為激活命令時(shí),在所述java卡被激活成功后,對(duì)所述java卡的激活成功標(biāo)志位進(jìn)行置位,將所述生命周期標(biāo)志位的取值修改為第一預(yù)設(shè)值;第二設(shè)置模塊,用于在所述檢查模塊檢查到所述生命周期標(biāo)志位的取值為第一預(yù)設(shè)值,且所述第一判斷模塊判斷所述接收到的命令為切換命令時(shí),將所述生命周期標(biāo)志位的取值修改為第二預(yù)設(shè)值;處理模塊,用于在所述檢查模塊檢查到所述生命周期標(biāo)志位的取值為第二預(yù)設(shè)值,且所述第一判斷模塊判斷所述接收到的命令為第一應(yīng)用協(xié)議數(shù)據(jù)單元APDU命令時(shí),從所述第一 APDU命令中獲取運(yùn)行環(huán)境數(shù)據(jù),將所述運(yùn)行環(huán)境數(shù)據(jù)寫入到自身的非易失性存儲(chǔ)器 NVM中,所述運(yùn)行環(huán)境數(shù)據(jù)為運(yùn)行java卡虛擬機(jī)所必需的數(shù)據(jù);發(fā)送模塊,用于在所述檢查模塊檢查到所述激活成功標(biāo)志位未被置位,且所述第一判斷模塊判斷接收到的命令不為激活命令時(shí),返回錯(cuò)誤碼。
17.如權(quán)利要求16所述的java卡,其特征在于,還包括第三設(shè)置模塊,用于在所述檢查模塊檢查到所述生命周期標(biāo)志位的取值為第一預(yù)設(shè)值,且所述第一判斷模塊判斷所述接收到的命令為個(gè)人識(shí)別碼PIN碼驗(yàn)證命令,在對(duì)所述 PIN碼驗(yàn)證命令所包含的PIN碼驗(yàn)證成功后,對(duì)所述java卡的驗(yàn)證通過標(biāo)志位進(jìn)行置位,所述驗(yàn)證通過標(biāo)識(shí)位用于標(biāo)識(shí)所述java卡對(duì)PIN碼是否驗(yàn)證成功;第二判斷模塊,用于判斷所述java卡的驗(yàn)證通過標(biāo)志位是否已被置位; 所述第二設(shè)置模塊,具體用于在所述檢查模塊檢查到所述生命周期標(biāo)志位的取值為第一預(yù)設(shè)值,且所述第一判斷模塊判斷所述接收到的命令為切換命令,以及所述第二判斷模塊判斷所述驗(yàn)證通過標(biāo)志位已被置位時(shí),將所述生命周期標(biāo)志位的取值修改為第二預(yù)設(shè)值。
18.如權(quán)利要求16所述的java卡,其特征在于,所述處理模塊,具體用于在所述檢查模塊檢查到所述生命周期標(biāo)志位的取值為第二預(yù)設(shè)值,且所述第一判斷模塊判斷所述接收到的命令為第一應(yīng)用協(xié)議數(shù)據(jù)單元APDU命令時(shí), 判斷所述java卡是否存儲(chǔ)有初始向量,如果存儲(chǔ)有初始向量,則使用所述初始向量和第一密鑰對(duì)所述第一 APDU命令進(jìn)行完整性驗(yàn)證,并在完整性驗(yàn)證成功時(shí),將所述初始向量更新為所述第一 APDU命令中的MAC碼,使用第二密鑰對(duì)所述第一 APDU命令中的APDU數(shù)據(jù)域進(jìn)行解密,得到所述運(yùn)行環(huán)境數(shù)據(jù),將所述運(yùn)行環(huán)境數(shù)據(jù)寫入到自身的非易失性存儲(chǔ)器NVM 中;如果沒有存儲(chǔ)初始向量,則使用預(yù)設(shè)向量和所述第一密鑰對(duì)所述第一 APDU命令進(jìn)行完整性驗(yàn)證,并在完整性驗(yàn)證成功時(shí),將所述第一 APDU命令中的消息認(rèn)證碼MAC碼作為初始向量進(jìn)行存儲(chǔ),使用所述第二密鑰對(duì)所述第一 APDU命令中的APDU數(shù)據(jù)域進(jìn)行解密,得到所述運(yùn)行環(huán)境數(shù)據(jù),將所述運(yùn)行環(huán)境數(shù)據(jù)寫入到自身的非易失性存儲(chǔ)器NVM中。
19.如權(quán)利要求16所述的java卡,其特征在于,還包括獲取模塊,用于在所述檢查模塊檢查到所述生命周期標(biāo)志位的取值為第二預(yù)設(shè)值,且所述第一判斷模塊判斷所述接收到的命令為第二 APDU命令時(shí),從所述第二 APDU命令中獲取地址信息;所述處理模塊,具體用于在所述檢查模塊檢查到所述生命周期標(biāo)志位的取值為第二預(yù)設(shè)值,且所述第一判斷模塊判斷所述接收到的命令為第一 APDU命令時(shí),從所述第一 APDU命令中獲取運(yùn)行環(huán)境數(shù)據(jù),根據(jù)所述地址信息,將所述運(yùn)行環(huán)境數(shù)據(jù)寫入到自身的NVM中。
20.如權(quán)利要求19所述的java卡,其特征在于,所述地址信息為基地址;所述獲取模塊,具體用于在所述檢查模塊檢查到所述生命周期標(biāo)志位的取值為第二預(yù)設(shè)值,且所述第一判斷模塊判斷所述接收到的命令為第二 APDU命令時(shí),從所述第二 APDU命令的命令頭中獲取所述基地址;所述處理模塊,具體用于在所述檢查模塊檢查到所述生命周期標(biāo)志位的取值為第二預(yù)設(shè)值,且所述第一判斷模塊判斷所述接收到的命令為第一 APDU命令時(shí),從所述第一 APDU命令中獲取運(yùn)行環(huán)境數(shù)據(jù)和偏移地址,根據(jù)所述基地址和所述偏移地址,將所述運(yùn)行環(huán)境數(shù)據(jù)寫入到自身的NVM中。
全文摘要
本發(fā)明公開一種對(duì)java卡進(jìn)行初始化的方法和java卡,該方法包括以下步驟java卡上電,接收命令,對(duì)接收到的命令進(jìn)行判斷,針對(duì)不同的命令執(zhí)行不同的操作,如果所述接收到的命令為第一APDU命令,則判斷所述生命周期標(biāo)志位的取值是否為所述預(yù)設(shè)值,如果為所述生命周期標(biāo)志位的取值不是所述預(yù)設(shè)值,所述java卡返回錯(cuò)誤碼;否則,所述java卡從所述第一APDU命令中獲取運(yùn)行環(huán)境數(shù)據(jù),將所述運(yùn)行環(huán)境數(shù)據(jù)寫入到自身的非易失性存儲(chǔ)器NVM中。本發(fā)明通過APDU命令將運(yùn)行環(huán)境數(shù)據(jù)寫入到j(luò)ava卡的NVM中,能夠減少java卡的初始化時(shí)間,提高java卡的生產(chǎn)效率。
文檔編號(hào)G06K7/00GK102521094SQ20111038567
公開日2012年6月27日 申請(qǐng)日期2011年11月28日 優(yōu)先權(quán)日2011年11月28日
發(fā)明者于華章, 陸舟 申請(qǐng)人:飛天誠信科技股份有限公司