一種對(duì)智能卡應(yīng)用進(jìn)行初始化的方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及信息安全領(lǐng)域,尤其涉及一種對(duì)智能卡應(yīng)用進(jìn)行初始化的方法和裝置。
【背景技術(shù)】
[0002]智能卡內(nèi)嵌有安全處理芯片,智能卡操作系統(tǒng)通常稱為芯片操作系統(tǒng);芯片操作系統(tǒng)通常都會(huì)依據(jù)應(yīng)用范圍而特定設(shè)計(jì)開發(fā)的,所以智能卡中的芯片操作系統(tǒng)通常是各不相同的。為使智能卡為特定應(yīng)用場景服務(wù),需要事先在智能卡中建立卡結(jié)構(gòu)、卡安全配置并寫入初始數(shù)據(jù),即智能卡需要進(jìn)行初始化的操作。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的目的是為了克服現(xiàn)有技術(shù)的不足,提供一種對(duì)智能卡應(yīng)用進(jìn)行初始化的方法和裝置,是一種安全、便捷、可靠的智能卡多應(yīng)用場景下的初始化方法,所建立的智能卡結(jié)構(gòu)完整、尚效。
[0004]本發(fā)明提供的一種對(duì)智能卡應(yīng)用進(jìn)行初始化的方法,包括:
[0005]步驟S1:當(dāng)智能卡獲取到卡外傳入的第一應(yīng)用AID時(shí),根據(jù)第一應(yīng)用AID選擇根應(yīng)用;
[0006]步驟S2:當(dāng)所述智能卡獲取到卡外傳入的被認(rèn)證的密鑰的密鑰號(hào)時(shí),生成第一隨機(jī)數(shù),根據(jù)所述第一隨機(jī)數(shù)對(duì)與被認(rèn)證的密鑰的密鑰號(hào)對(duì)應(yīng)的根應(yīng)用的主控密鑰進(jìn)行安全認(rèn)證;所述智能卡判斷所述主控密鑰是否通過安全認(rèn)證,是則執(zhí)行步驟S3,否則向上位機(jī)返回錯(cuò)誤碼,結(jié)束;
[0007]步驟S3:當(dāng)所述智能卡獲取到卡外傳入的初始化字符時(shí),進(jìn)行初始化;
[0008]步驟S4:當(dāng)所述智能卡獲取到卡外傳入的第二應(yīng)用AID、密鑰屬性和密鑰個(gè)數(shù)時(shí),根據(jù)第二應(yīng)用AID、密鑰屬性和密鑰個(gè)數(shù)在所述根應(yīng)用下創(chuàng)建應(yīng)用和所述應(yīng)用中的密鑰;
[0009]步驟S5:當(dāng)所述智能卡獲取到卡外傳入的第三應(yīng)用AID時(shí),判斷是否能在卡內(nèi)查找到具有與所述第三應(yīng)用AID相同的應(yīng)用AID的應(yīng)用,是則將查找到的應(yīng)用設(shè)置為當(dāng)前應(yīng)用,執(zhí)行步驟S6,否則向上位機(jī)返回錯(cuò)誤碼,結(jié)束;
[0010]步驟S6:當(dāng)所述智能卡獲取到卡外傳入的被認(rèn)證的密鑰的密鑰號(hào)時(shí),生成第三隨機(jī)數(shù),根據(jù)所述第三隨機(jī)數(shù)對(duì)創(chuàng)建應(yīng)用時(shí)寫入的密鑰屬性中指定的修改過程中使用的權(quán)限密鑰進(jìn)行安全認(rèn)證;所述智能卡判斷所述權(quán)限密鑰是否通過安全認(rèn)證,是則執(zhí)行步驟S7,否則向上位機(jī)返回錯(cuò)誤碼,結(jié)束;
[0011 ]步驟S7:當(dāng)所述智能卡獲取到卡外傳入的被修改密鑰的密鑰號(hào)和密鑰數(shù)據(jù)時(shí),根據(jù)被修改密鑰的密鑰號(hào)和密鑰數(shù)據(jù),對(duì)當(dāng)前應(yīng)用中的密鑰進(jìn)行修改;
[0012]步驟S8:當(dāng)所述智能卡獲取到卡外傳入的第一文件ID時(shí),根據(jù)第一文件ID在當(dāng)前應(yīng)用中創(chuàng)建文件;
[0013]步驟S9:當(dāng)所述智能卡獲取到卡外傳入的第二文件ID、數(shù)據(jù)偏移、數(shù)據(jù)長度和初始數(shù)據(jù)時(shí),根據(jù)所述第二文件ID在當(dāng)前應(yīng)用中查找對(duì)應(yīng)的文件,判斷是否能夠查找到與所述第二文件ID查找對(duì)應(yīng)的文件,是則根據(jù)數(shù)據(jù)偏移、數(shù)據(jù)長度和初始數(shù)據(jù),在查找到的文件中寫入初始數(shù)據(jù),否則向上位機(jī)返回錯(cuò)誤碼,結(jié)束。
[0014]本發(fā)明提供一種對(duì)智能卡應(yīng)用進(jìn)行初始化的裝置,包括:第一選擇模塊、第一認(rèn)證模塊、初始化模塊、創(chuàng)建應(yīng)用模塊、第二選擇模塊、第二認(rèn)證模塊、修改密鑰模塊、創(chuàng)建文件模塊和寫數(shù)據(jù)模塊;
[0015]所述第一選擇模塊,用于當(dāng)獲取到卡外傳入的第一應(yīng)用AID時(shí),根據(jù)第一應(yīng)用AID選擇根應(yīng)用;
[0016]所述第一認(rèn)證模塊,用于當(dāng)獲取到卡外傳入的被認(rèn)證的密鑰的密鑰號(hào)時(shí),生成第一隨機(jī)數(shù),根據(jù)所述第一隨機(jī)數(shù)對(duì)與被認(rèn)證的密鑰的密鑰號(hào)對(duì)應(yīng)的根應(yīng)用的主控密鑰進(jìn)行安全認(rèn)證;判斷所述主控密鑰是否通過安全認(rèn)證,如果否,則向上位機(jī)返回錯(cuò)誤碼;
[0017]所述初始化模塊,用于當(dāng)所述第一認(rèn)證模塊安全認(rèn)證成功并且獲取到卡外傳入的初始化字符時(shí),進(jìn)行初始化;
[0018]所述創(chuàng)建應(yīng)用模塊,用于當(dāng)獲取到卡外傳入的第二應(yīng)用AID、密鑰屬性和密鑰個(gè)數(shù)時(shí),根據(jù)第二應(yīng)用AID、密鑰屬性和密鑰個(gè)數(shù)在所述根應(yīng)用下創(chuàng)建應(yīng)用和所述應(yīng)用中的密鑰;
[0019]所述第二選擇模塊,用于當(dāng)獲取到卡外傳入的第三應(yīng)用AID時(shí),判斷是否能在卡內(nèi)查找到具有與所述第三應(yīng)用AID相同的應(yīng)用AID的應(yīng)用,是則將查找到的應(yīng)用設(shè)置為當(dāng)前應(yīng)用,否則向上位機(jī)返回錯(cuò)誤碼;
[0020]所述第二認(rèn)證模塊,用于當(dāng)獲取到卡外傳入的被認(rèn)證的密鑰的密鑰號(hào)時(shí),生成第三隨機(jī)數(shù),根據(jù)所述第三隨機(jī)數(shù)對(duì)創(chuàng)建應(yīng)用時(shí)寫入的密鑰屬性中指定的修改過程中使用的權(quán)限密鑰進(jìn)行安全認(rèn)證;判斷所述權(quán)限密鑰是否通過安全認(rèn)證,如果否,則向上位機(jī)返回錯(cuò)誤碼;
[0021]所述修改密鑰模塊,用于當(dāng)所述第二認(rèn)證模塊安全認(rèn)證成功并且獲取到卡外傳入的被修改密鑰的密鑰號(hào)和密鑰數(shù)據(jù)時(shí),根據(jù)被修改密鑰的密鑰號(hào)和密鑰數(shù)據(jù),對(duì)當(dāng)前應(yīng)用中的密鑰進(jìn)行修改;
[0022]所述創(chuàng)建文件模塊,用于當(dāng)獲取到卡外傳入的第一文件ID時(shí),根據(jù)第一文件ID在當(dāng)前應(yīng)用中創(chuàng)建文件;
[0023]所述寫數(shù)據(jù)模塊,用于當(dāng)獲取到卡外傳入的第二文件ID、數(shù)據(jù)偏移、數(shù)據(jù)長度和初始數(shù)據(jù)時(shí),根據(jù)所述第二文件ID在當(dāng)前應(yīng)用中查找對(duì)應(yīng)的文件,判斷是否能夠查找到與所述第二文件ID查找對(duì)應(yīng)的文件,是則根據(jù)數(shù)據(jù)偏移、數(shù)據(jù)長度和初始數(shù)據(jù),在查找到的文件中寫入初始數(shù)據(jù),否則向上位機(jī)返回錯(cuò)誤碼。
[0024]本發(fā)明與現(xiàn)有技術(shù)相比,具有以下優(yōu)點(diǎn):
[0025]本發(fā)明提供的一種基于USB設(shè)備的異步調(diào)用方法和裝置,在上位機(jī)中增加通信庫,上位機(jī)中的主控裝置通過通信庫向USB設(shè)備發(fā)送指令,通信庫通過回調(diào)函數(shù)的方式將USB設(shè)備的響應(yīng)返回給上位機(jī)的主控裝置,主控裝置在發(fā)送指令之后不必等待接收響應(yīng)。
【附圖說明】
[0026]圖1是本發(fā)明實(shí)施例1提供的一種對(duì)智能卡應(yīng)用進(jìn)行初始化的方法的流程圖;
[0027]圖2是本發(fā)明實(shí)施例1提供的步驟102的具體實(shí)現(xiàn)的流程圖;
[0028]圖3是本發(fā)明實(shí)施例1提供的步驟103的具體實(shí)現(xiàn)的流程圖;
[0029]圖4是本發(fā)明實(shí)施例1提供的步驟104的具體實(shí)現(xiàn)的流程圖;
[0030]圖5是本發(fā)明實(shí)施例1提供的步驟107的具體實(shí)現(xiàn)的流程圖;
[0031 ]圖6是本發(fā)明實(shí)施例1提供的步驟108的具體實(shí)現(xiàn)的流程圖;
[0032]圖7是本發(fā)明實(shí)施例1提供的步驟110的具體實(shí)現(xiàn)的流程圖;
[0033]圖8是本發(fā)明實(shí)施例2提供的一種對(duì)智能卡應(yīng)用進(jìn)行初始化的裝置的模塊圖。
【具體實(shí)施方式】
[0034]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0035]實(shí)施例1
[0036]本發(fā)明的實(shí)施例1提供了一種對(duì)智能卡應(yīng)用進(jìn)行初始化的方法,如圖1所示,包括:
[0037]步驟101:當(dāng)智能卡獲取到卡外傳入的第一應(yīng)用AID時(shí),智能卡根據(jù)第一應(yīng)用AID選擇根應(yīng)用;
[0038]具體地,本實(shí)施例中,當(dāng)智能卡接收到第一選擇應(yīng)用指令時(shí),智能卡根據(jù)第一選擇應(yīng)用指令中的第一應(yīng)用AID選擇根應(yīng)用;
[0039]優(yōu)選地,智能卡接收上位機(jī)發(fā)送的指令,根據(jù)接收到的指令中的指令碼判斷指令類型,若指令碼為第四預(yù)設(shè)值則確定接收到的指令為第一選擇應(yīng)用指令;優(yōu)選地,第四預(yù)設(shè)值為5A;
[0040]該步驟101包括:
[0041]步驟H00:智能卡判斷第一選擇應(yīng)用指令是否有效,是則執(zhí)行步驟HOl,否則向上位機(jī)返回錯(cuò)誤碼,結(jié)束;
[0042]本實(shí)施例中,選擇應(yīng)用指令包括被選擇的應(yīng)用AID;
[0043]例如,選擇應(yīng)用指令為5A00 00 00;其中,指令碼為5A,智能卡獲取選擇應(yīng)用指令中指令碼之后的3個(gè)字節(jié)的數(shù)據(jù)作為被選擇的應(yīng)用AID,即被選擇的應(yīng)用AID為00 00 00;
[0044]步驟HOl:智能卡清除過程密鑰,初始化各個(gè)密鑰的認(rèn)證標(biāo)識(shí);
[0045]步驟H02:智能卡根據(jù)第一選擇應(yīng)用指令中被選擇的應(yīng)用AID,將當(dāng)前應(yīng)用設(shè)置為根應(yīng)用,向上位機(jī)返回成功信息;
[0046]步驟102:當(dāng)智能卡獲取到卡外傳入的被認(rèn)證的密鑰的密鑰號(hào)時(shí),智能卡生成第一隨機(jī)數(shù),根據(jù)第一隨機(jī)數(shù)對(duì)與被認(rèn)證的密鑰的密鑰號(hào)對(duì)應(yīng)的根應(yīng)用的主控密鑰進(jìn)行安全認(rèn)證;智能卡判斷主控密鑰是否通過安全認(rèn)證,是則執(zhí)行步驟103,否則向上位機(jī)返回錯(cuò)誤碼,結(jié)束;
[0047]具體地,本實(shí)施例中,當(dāng)智能卡接收到第一安全認(rèn)證指令時(shí),智能卡根據(jù)第一安全認(rèn)證指令中的被認(rèn)證的密鑰的密鑰號(hào),將主控密鑰作為對(duì)被認(rèn)證的密鑰進(jìn)行安全認(rèn)證;
[0048]優(yōu)選地,智能卡接收上位機(jī)發(fā)送的指令,根據(jù)接收到的指令中的指令碼判斷指令類型,若指令碼為第一預(yù)設(shè)值則確定接收到的指令為第一安全認(rèn)證指令;優(yōu)選地,第一預(yù)設(shè)值為OA;
[0049]該步驟102包括以下步驟,如圖2所示:
[0050]步驟A00:智能卡判斷第一安全認(rèn)證指令是否有效,是則執(zhí)行步驟AOl,否則向上位機(jī)返回錯(cuò)誤碼,結(jié)束;
[0051 ]本實(shí)施例中,第一安全認(rèn)證指令包括被認(rèn)證的密鑰的密鑰號(hào);
[0052]例如,第一安全認(rèn)證指令為OA00;其中,指令碼為0A,智能卡獲取第一安全認(rèn)證指令中指令碼之后的I個(gè)字節(jié)的數(shù)據(jù)作為被認(rèn)證的密鑰的密鑰號(hào),即被認(rèn)證的密鑰的密鑰號(hào)為00,即主控密鑰的密鑰號(hào)為00;
[0053]步驟A01:智能卡根據(jù)第一安全認(rèn)證指令中的密鑰號(hào)獲取被認(rèn)證的密鑰;
[0054]本實(shí)施例中,與第一安全認(rèn)證指令中的密鑰號(hào)對(duì)應(yīng)的密鑰即為被認(rèn)證的密鑰;
[0055]步驟A02:智能卡生成第一隨機(jī)數(shù),根據(jù)被認(rèn)證的密鑰對(duì)第一隨機(jī)數(shù)進(jìn)行加密,得到第一密文,向上位機(jī)返回第一密文;
[0056]優(yōu)選地,第一隨機(jī)數(shù)的長度為8個(gè)字節(jié);
[0057]例如,第一隨機(jī)數(shù)為A6 CF 4E 2A 46 97 5F F7,智能卡對(duì)第一隨機(jī)數(shù)進(jìn)行加密得到的第一密文為9F 2D IC 6F 2C 87 4C 9E;
[0058]步驟A03:智能卡判斷是否接收到第二安全認(rèn)證指令,是則執(zhí)行步驟A04,否則向上位機(jī)返回錯(cuò)誤碼,結(jié)束;
[0059]具體地,智能卡接收上位機(jī)發(fā)送的指令,判斷接收到的指令的指令碼是否為第八預(yù)設(shè)值,是則確定接收到第二安全認(rèn)證指令,否則確定未接收到第二安全認(rèn)證指令;優(yōu)選地,第八預(yù)設(shè)值為AF;
[0060]例如,智能卡接收到的指令為AF8C A6 4D E9 Cl BI 23 A7 C5 FE B3 DF OB 53E6 CE;智能卡獲取指令的第I個(gè)字節(jié)的數(shù)據(jù)作為指令碼,即指令的指令碼為AF,智能卡確定接收到第二安全認(rèn)證指令;
[0061]當(dāng)智能卡接收到第二安全認(rèn)證指令之后,還包括:智能卡判斷第二安全認(rèn)證指令是否有效,是則執(zhí)行步驟A04,否則向上位機(jī)返回錯(cuò)誤碼,結(jié)束;
[0062]步驟A04:智能卡根據(jù)被認(rèn)證的密鑰對(duì)第二安全認(rèn)證指令中的第二密文進(jìn)行解密,得到第二隨機(jī)數(shù)和第一組合數(shù)據(jù);
[0063]具體地,智能卡對(duì)第二安全認(rèn)證指令中的第二密文進(jìn)行DES或者3DES解密,得到第二隨機(jī)數(shù)和第一組合數(shù)據(jù);例如,智能卡獲取第二安全認(rèn)證指令中的指令碼之后的數(shù)據(jù)作為第二密文,即第二密文為8C A6 4D E9 Cl BI 23 A7 C5 FE B3 DF OB 53 E6 CE,對(duì)第二密文解密的解密結(jié)果為00 00 00 00 00 00 00 00 CF 4E 2A 46 97 5F F7 A6;智能卡獲取解密結(jié)果的前8個(gè)字節(jié)的數(shù)據(jù)作為第二隨機(jī)數(shù),即第二隨機(jī)數(shù)為00 00 00 00 00 00 0000,獲取第二隨機(jī)數(shù)之后的8個(gè)字節(jié)的數(shù)據(jù)作為第一組合數(shù)據(jù),即第一組合數(shù)據(jù)為CF 4E 2A46 97 5F F7 A6;
[0064]步驟A05:智能卡判斷第一組合數(shù)據(jù)是否與第一隨機(jī)數(shù)匹配,是則執(zhí)行步驟A06,否則向上位機(jī)返回錯(cuò)誤碼,結(jié)束;
[0065]具體地,智能卡將第一組合數(shù)據(jù)的最后I個(gè)字節(jié)的數(shù)據(jù)移動(dòng)到第一組合數(shù)據(jù)的第I個(gè)字節(jié)的數(shù)據(jù)之前,判斷移動(dòng)后的第一組合數(shù)據(jù)是否與第一隨機(jī)數(shù)相同,是則確定第一組合數(shù)據(jù)與第一隨機(jī)數(shù)匹配,否則確定第一組合數(shù)據(jù)與第一隨機(jī)數(shù)不匹配;
[0066]例如,第一組合數(shù)據(jù)為CF 4E 2A 46 97 5F F7 A6,將第一組合數(shù)據(jù)的最后I個(gè)字節(jié)的數(shù)據(jù)移動(dòng)到第一組合數(shù)據(jù)的第I個(gè)字節(jié)的數(shù)據(jù)之前,移動(dòng)后的第一組合數(shù)據(jù)為A6 CF4E 2A 46 97 5F F7,移動(dòng)后的第一組合數(shù)據(jù)是與第一隨機(jī)數(shù)相同,則智能卡確定第一組合數(shù)據(jù)與第一隨機(jī)數(shù)匹配;
[0067]步驟A06:智能卡將與被認(rèn)證的密鑰對(duì)應(yīng)的密鑰認(rèn)證標(biāo)識(shí)置位,對(duì)第二隨機(jī)數(shù)進(jìn)行加密得到第三密文,向上位機(jī)返回第三密文;
[0068]具體地,智能卡中的各個(gè)密鑰的認(rèn)證標(biāo)識(shí)的初始狀態(tài)為復(fù)位,被認(rèn)證的密鑰包括主控密鑰和智能卡內(nèi)部各個(gè)應(yīng)用中的密鑰,該步驟還包括:智能卡將本次安全認(rèn)證中未進(jìn)行認(rèn)證的密鑰對(duì)應(yīng)的密鑰認(rèn)證標(biāo)識(shí)復(fù)位;
[0069]例如,第二隨機(jī)數(shù)為00 00 00 00 00 00 00 00,智能卡對(duì)第二隨機(jī)數(shù)進(jìn)行加密得到的第三密文為8C A6 4D E9 Cl BI 23 A7;
[0070]該步驟還包括:智能卡對(duì)第一隨機(jī)數(shù)和第二隨機(jī)數(shù)進(jìn)行拼接組合,得到過程密鑰;
[0071]具體地,若被認(rèn)證的密鑰的前8個(gè)字節(jié)的數(shù)據(jù)與后8個(gè)字節(jié)的數(shù)據(jù)不相同,則將第二隨機(jī)數(shù)的前4個(gè)字節(jié)的數(shù)據(jù)、第一隨機(jī)數(shù)的前4個(gè)字節(jié)的數(shù)據(jù)、第二隨機(jī)數(shù)的后4個(gè)字節(jié)的數(shù)據(jù)與第一隨機(jī)數(shù)的后4個(gè)字節(jié)數(shù)據(jù)順序拼接,得到16個(gè)字節(jié)的過程密鑰;若被認(rèn)證的密鑰的前8個(gè)字節(jié)的數(shù)據(jù)與后8個(gè)字節(jié)的數(shù)據(jù)相同,則將第二隨機(jī)數(shù)的前4個(gè)字節(jié)的數(shù)據(jù)、第一隨機(jī)數(shù)的前4個(gè)字節(jié)的數(shù)據(jù)順序拼接,得到8個(gè)字節(jié)的過程密鑰;
[0072]例如,被認(rèn)證的密鑰為11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11,則被認(rèn)證的密鑰的前8個(gè)字節(jié)的數(shù)據(jù)與后8個(gè)字節(jié)的數(shù)據(jù)相同,則智能卡獲取第二隨機(jī)數(shù)的前4個(gè)字節(jié)的數(shù)據(jù),S卩00 00 00 00,獲取第一隨機(jī)數(shù)的前4個(gè)字節(jié)的數(shù)據(jù),S卩A6 CF 4E 2A,順序拼接得到的8個(gè)字節(jié)的過程密鑰為00 00 00 00A6 CF 4E 2A;
[0073]步驟103:當(dāng)智能卡獲取到卡外傳入的初始化字符時(shí),智能卡進(jìn)行初始化;
[0074]具體地,本實(shí)施例中,當(dāng)智能卡接收到初始化指令時(shí),智能卡進(jìn)行初始化;