專利名稱:一種智能卡安全通訊的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及信息安全領(lǐng)域,特別涉及一種智能卡安全通訊的方法。
背景技術(shù):
隨著通信技術(shù)的迅猛發(fā)展,信息網(wǎng)絡(luò)得到廣泛應(yīng)用,同時(shí)計(jì)算機(jī)網(wǎng)絡(luò)犯罪也不斷出現(xiàn)。人們采用身份識(shí)別和加密技術(shù)對(duì)信息網(wǎng)絡(luò)內(nèi)的數(shù)據(jù)進(jìn)行保護(hù),并廣泛使用智能卡產(chǎn)品作為用戶身份識(shí)別的標(biāo)識(shí)工具。安全、有效地利用智能卡對(duì)網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)實(shí)現(xiàn)實(shí)時(shí)力口、解密處理,從而保證用戶在安全、快捷、方便的前提下享受信息網(wǎng)絡(luò)提供的服務(wù)。對(duì)于信息安全通信領(lǐng)域涉及到的安全層面,目前使用的技術(shù)并不完善,不能夠避免通訊數(shù)據(jù)被監(jiān)聽(tīng)或截取的問(wèn)題。
發(fā)明內(nèi)容
為解決現(xiàn)有技術(shù)中存在的問(wèn)題,本發(fā)明提出了一種智能卡安全通訊的方法。本發(fā)明采取的技術(shù)方案是:一種智能卡安全通訊的方法,包括,S1:智能卡上電;S2:設(shè)置安全標(biāo)識(shí)和安全變量;S3:等待接收命令,并判斷收到的命令的類型;如是第一命令,則將認(rèn)證方法標(biāo)識(shí)設(shè)置為外部認(rèn)證標(biāo)識(shí)或相互認(rèn)證標(biāo)識(shí),然后將證書(shū)認(rèn)證標(biāo)識(shí)置位,獲取RSA公鑰引用和RSA私鑰引用,將安全環(huán)境管理標(biāo)識(shí)置位,返回
S3;如是第二命令,則判斷是否同時(shí)滿足所述安全環(huán)境管理標(biāo)識(shí)置位和所述證書(shū)認(rèn)證標(biāo)識(shí)置位,是則驗(yàn)證證書(shū),將證書(shū)驗(yàn)證標(biāo)識(shí)置位,返回S3 ;否則報(bào)錯(cuò),返回S2 ;如是第三命令,則判斷所述證書(shū)驗(yàn)證標(biāo)識(shí)是否置位,是則向卡外設(shè)備發(fā)送證書(shū),然后返回S3;否則報(bào)錯(cuò),返回S2;如是第四命令,則執(zhí)行S4 ;如是第五命令,則執(zhí)行S5 ;如是第六命令,則執(zhí)行S6 ;如是第七命令,則執(zhí)行S7 ;如是其他命令,則判斷該命令是否符合預(yù)設(shè)條件,是,則根據(jù)安全級(jí)別和會(huì)話密鑰對(duì)命令進(jìn)行驗(yàn)證,驗(yàn)證成功后執(zhí)行相應(yīng)操作,然后返回S3 ;否則報(bào)錯(cuò);S4:判斷是否同時(shí)滿足所述安全環(huán)境管理標(biāo)識(shí)未置位和所述證書(shū)認(rèn)證標(biāo)識(shí)置位,是則報(bào)錯(cuò),返回S2 ;否則,用所述RSA公鑰引用所引用的公鑰對(duì)所述第四命令解密,得到解密結(jié)果,從所述解密結(jié)果中獲取安全級(jí)別TLV結(jié)構(gòu),保存安全級(jí)別,建立會(huì)話密鑰,保存所述會(huì)話密鑰,設(shè)置簽名信息,將會(huì)話密鑰建立標(biāo)識(shí)置位,返回S3 ;S5:判斷是否滿足所述會(huì)話密鑰建立標(biāo)識(shí)置位,是則生成第一隨機(jī)數(shù),保存第一隨機(jī)數(shù),并將其發(fā)送給卡外設(shè)備,然后將獲取隨機(jī)數(shù)標(biāo)識(shí)置位,返回S3 ;否則報(bào)錯(cuò),返回S2 ;S6:判斷所述獲取隨機(jī)數(shù)標(biāo)識(shí)是否置位,否則報(bào)錯(cuò),返回步驟S2 ;是則構(gòu)造包含所述安全級(jí)別TLV結(jié)構(gòu)、所述會(huì)話密鑰、所述第一隨機(jī)數(shù)的第一數(shù)據(jù)塊,用第一算法對(duì)所述第一數(shù)據(jù)塊進(jìn)行計(jì)算,得到第一計(jì)算結(jié)果,構(gòu)造包含所述第一計(jì)算結(jié)果和第一算法的第二數(shù)據(jù)塊,從所述第六命令中讀取卡外設(shè)備的簽名結(jié)果,用所述RSA公鑰引用所引用的公鑰、所述第二數(shù)據(jù)塊對(duì)其進(jìn)行驗(yàn)證,如果驗(yàn)證成功則將外部認(rèn)證標(biāo)識(shí)置位,判斷認(rèn)證方法標(biāo)識(shí)是否為外部認(rèn)證標(biāo)識(shí),是則將相互認(rèn)證標(biāo)識(shí)置位,返回S3,否則返回S3 ;如果驗(yàn)證未成功,則報(bào)錯(cuò),返回S2;S7:從第七命令中獲取第二隨機(jī)數(shù),保存第二隨機(jī)數(shù),判斷是否同時(shí)滿足所述認(rèn)證方法標(biāo)識(shí)為所述外部認(rèn)證標(biāo)識(shí)并且所述外部認(rèn)證標(biāo)識(shí)置位,是則構(gòu)造包含所述會(huì)話密鑰和所述第二隨機(jī)數(shù)的第三數(shù)據(jù)塊,用第一算法對(duì)所述第三數(shù)據(jù)塊進(jìn)行計(jì)算,得到第二計(jì)算結(jié)果,構(gòu)造包含所述第二計(jì)算結(jié)果和第一算法的第四數(shù)據(jù)塊,用所述RSA私鑰引用所引用的私鑰加密所述第四數(shù)據(jù)塊,得到的加密結(jié)果為第一簽名結(jié)果,將所述第一簽名結(jié)果發(fā)送給卡外設(shè)備,將相互認(rèn)證標(biāo)識(shí)置位,清除所述第一隨機(jī)數(shù)和所述第二隨機(jī)數(shù),然后返回S3 ;否則返回S2。所述設(shè)置安全標(biāo)識(shí),具體包括,安全環(huán)境管理標(biāo)識(shí)復(fù)位,會(huì)話安全標(biāo)識(shí)設(shè)置為沒(méi)有安全級(jí)別,證書(shū)驗(yàn)證標(biāo)識(shí)復(fù)位,獲取隨機(jī)數(shù)標(biāo)識(shí)復(fù)位,會(huì)話密鑰建立標(biāo)識(shí)復(fù)位,外部認(rèn)證標(biāo)識(shí)復(fù)位,相互認(rèn)證標(biāo)識(shí)復(fù)位;所述設(shè)置安全變量,具體包括,RSA公鑰引用設(shè)置為默認(rèn)的RSA公鑰引用;RSA私鑰引用設(shè)置為默認(rèn)的RSA私鑰引用;第一會(huì)話密鑰、第二會(huì)話密鑰、第三會(huì)話密鑰、第四會(huì)話密鑰、第五會(huì)話密鑰分別設(shè)置為默認(rèn)值。所述將認(rèn)證方法標(biāo)識(shí)設(shè)置為外部認(rèn)證標(biāo)識(shí)或相互認(rèn)證標(biāo)識(shí),具體包括,根據(jù)第一命令的第一預(yù)設(shè)字節(jié)的取值設(shè)置認(rèn)證方法標(biāo)識(shí),當(dāng)?shù)谝幻畹牡谝活A(yù)設(shè)字節(jié)的取值為第一預(yù)設(shè)值時(shí),將認(rèn)證方法標(biāo)識(shí)設(shè)置為外部認(rèn)證標(biāo)識(shí);當(dāng)?shù)谝幻畹牡谝活A(yù)設(shè)字節(jié)的取值為第二預(yù)設(shè)值時(shí),將認(rèn)證方法標(biāo)識(shí)設(shè)置為相互認(rèn)證標(biāo)識(shí);所述將證書(shū)認(rèn)證標(biāo)識(shí)置位,具體包括,根據(jù)第一命令的第三預(yù)設(shè)字節(jié)的取值設(shè)置證書(shū)認(rèn)證標(biāo)識(shí),當(dāng)?shù)谌A(yù)設(shè)字節(jié)的取值等于第三預(yù)設(shè)值時(shí),將證書(shū)認(rèn)證標(biāo)識(shí)復(fù)位;當(dāng)?shù)谌A(yù)設(shè)字節(jié)的取值等于第四預(yù)設(shè)值時(shí),將證書(shū)認(rèn)證標(biāo)識(shí)置位;所述獲取RSA公鑰引用和RSA私鑰引用,具體包括,步驟al:判斷第一命令的數(shù)據(jù)域中的第一個(gè)TLV結(jié)構(gòu)是否符合第一預(yù)設(shè)結(jié)構(gòu);是則執(zhí)行步驟a2 ;否則報(bào)錯(cuò),然后返回S2 ;步驟a2:判斷所述數(shù)據(jù)域中是否存在符合第二預(yù)設(shè)結(jié)構(gòu)的TLV結(jié)構(gòu);是則獲取并保存RSA公鑰引用;否則報(bào)錯(cuò),然后返回S2 ;步驟a3:判斷所述數(shù)據(jù)域中是否存在符合第三預(yù)設(shè)結(jié)構(gòu)的TLV結(jié)構(gòu);是則獲取并保存RSA私鑰引用;否則報(bào)錯(cuò),然后返回S2。所述獲取并保存RSA公鑰引用,具體包括,根據(jù)第二預(yù)設(shè)結(jié)構(gòu)的取值獲取并保存RSA公鑰引用,當(dāng)?shù)诙A(yù)設(shè)結(jié)構(gòu)的取值為第一結(jié)構(gòu)值時(shí),則獲取第一結(jié)構(gòu)值的最后兩個(gè)字節(jié),并將其保存為RSA公鑰引用;當(dāng)?shù)诙A(yù)設(shè)結(jié)構(gòu)的取值為第二結(jié)構(gòu)值時(shí),則卡片使用默認(rèn)的RSA公鑰引用;所述獲取并保存RSA私鑰引用,具體包括,根據(jù)第三預(yù)設(shè)結(jié)構(gòu)的取值獲取RSA私鑰引用,當(dāng)?shù)谌A(yù)設(shè)結(jié)構(gòu)的取值為第三結(jié)構(gòu)值時(shí),則獲取第三結(jié)構(gòu)值的最后兩個(gè)字節(jié),并將其保存為RSA私鑰引用;當(dāng)?shù)谌A(yù)設(shè)結(jié)構(gòu)的取值為第四結(jié)構(gòu)值時(shí),則卡片使用默認(rèn)的RSA私鑰引用。
所述判斷是否同時(shí)滿足所述安全環(huán)境管理標(biāo)識(shí)置位和所述證書(shū)認(rèn)證標(biāo)識(shí)置位之后包括:判斷所述第二命令是否符合第一條件,是則用所述RSA公鑰引用所引用的公鑰驗(yàn)證證書(shū),判斷是否存在需要驗(yàn)證的證書(shū),存在,則返回S2,不存在,則將證書(shū)驗(yàn)證標(biāo)識(shí)置位,返回S3;否則報(bào)錯(cuò),返回S2。所述第二命令符合第一條件,具體包括,所述第二命令的指定部分的取值等于第五預(yù)設(shè)值;所述判斷是否存在需要驗(yàn)證的證書(shū),具體包括,根據(jù)第二命令第一字節(jié)的第五位的取值判斷是否存在需要驗(yàn)證的證書(shū);如果第二命令第一字節(jié)的第五位的取值為第九預(yù)設(shè)值,則不存在需要驗(yàn)證的證書(shū),如果第二命令第一字節(jié)的第五位的取值不為第九預(yù)設(shè)值,則存在需要驗(yàn)證的證書(shū)。所述用所述RSA公鑰引用所引用的公鑰對(duì)第四命令解密之前還包括,判斷是否滿足第四命令數(shù)據(jù)域長(zhǎng)度等于所述RSA公鑰引用所引用的公鑰的模長(zhǎng),是則用所述RSA公鑰引用所引用的公鑰對(duì)第四命令解密;否則報(bào)錯(cuò),返回S3 ;所述保存安全級(jí)別之后所述建立會(huì)話密鑰之前,還包括,判斷是否能建立會(huì)話密鑰,是則建立會(huì)話密鑰,否則報(bào)錯(cuò),返回S3。所述判斷是否能建立會(huì)話密鑰,具體包括,判斷是否同時(shí)滿足控制引用模板的總標(biāo)簽的取值等于第七預(yù)設(shè)值和控制引用模板中存在第一 TLV結(jié)構(gòu),并且存在與第一預(yù)設(shè)長(zhǎng)度相等的第二 TLV結(jié)構(gòu),是則能建立會(huì)話密鑰;否則不能建立會(huì)話密鑰;所述第七預(yù)設(shè)值為第一標(biāo)簽或第二標(biāo)簽;所述建立會(huì)話密鑰具體包括,根據(jù)控制引用模板的總標(biāo)簽的取值建立相應(yīng)的會(huì)話密鑰,當(dāng)控制引用模板的總標(biāo)簽的取值為第一標(biāo)簽時(shí),如果TAG為95的TLV結(jié)構(gòu)中的Value的取值為第一數(shù)值,則建立第一會(huì)話密鑰;如果TAG為95的TLV結(jié)構(gòu)中的Value的取值為第二數(shù)值,則建立第二會(huì)話密鑰;如果TAG為95的TLV結(jié)構(gòu)中的Value的取值為第三數(shù)值,則建立第一會(huì)話密鑰、
第二會(huì)話密鑰;當(dāng)控制引用模板的總標(biāo)簽的取值為第二標(biāo)簽時(shí),如果TAG為95的TLV結(jié)構(gòu)中的Value的取值為第一數(shù)值,則建立第三會(huì)話密鑰;如果TAG為95的TLV結(jié)構(gòu)中的Value的取值為第二數(shù)值,則建立第四會(huì)話密鑰;如果TAG為95的TLV結(jié)構(gòu)中的Value的取值為第三數(shù)值,則建立第三會(huì)話密鑰、第四會(huì)話密鑰;如果TAG為95的TLV結(jié)構(gòu)中的Value的取值為第四數(shù)值,則建立第五會(huì)話密鑰;所述保存所述會(huì)話密鑰之后設(shè)置簽名信息之前,還包括,判斷是否需要設(shè)置簽名信息,是則設(shè)置簽名,否則報(bào)錯(cuò)返回S2。所述判斷是否能建立會(huì)話密鑰,具體為,判斷是否同時(shí)滿足控制引用模板的總標(biāo)簽的取值等于第七預(yù)設(shè)值和所述控制引用模板中存在第一 TLV結(jié)構(gòu),并且存在長(zhǎng)度與第一預(yù)設(shè)長(zhǎng)度相等的第二 TLV結(jié)構(gòu),是則能建立會(huì)話密鑰,否則不能建立會(huì)話密鑰;所述判斷是否需要設(shè)置簽名信息,具體為,判斷控制引用模板中是否存在TAG的取值等于第八預(yù)設(shè)值,并且長(zhǎng)度等于第二預(yù)設(shè)長(zhǎng)度的第三TLV結(jié)構(gòu),是則需要設(shè)置簽名信息;否則不需要設(shè)置簽名信息。所述S4-S7 替換為,S4’ -S7’,S4’:報(bào)錯(cuò),返回 S2;S5’:判斷是否滿足所述安全環(huán)境管理標(biāo)識(shí)未置位和所述證書(shū)認(rèn)證標(biāo)識(shí)置位,是則報(bào)錯(cuò),返回S2 ;否則生成第一隨機(jī)數(shù),保存第一隨機(jī)數(shù),并將其發(fā)送給卡外設(shè)備,然后將獲取隨機(jī)數(shù)標(biāo)識(shí)置位,返回S3 ;S6’:判斷是否同時(shí)滿足所述獲取隨機(jī)數(shù)標(biāo)識(shí)置位和成功驗(yàn)證用所述RSA公鑰引用所引用的公鑰對(duì)第六命令的數(shù)據(jù)域進(jìn)行解密得到的解密結(jié)果;否則報(bào)錯(cuò),返回S2 ;是則從所述解密結(jié)果中獲取安全級(jí)別,生成卡片保密數(shù)據(jù),判斷所述解密結(jié)果的控制引用模板是否符合預(yù)設(shè)要求,如果符合預(yù)設(shè)要求,則獲取并保存卡外設(shè)備保密數(shù)據(jù),根據(jù)所述卡片保密數(shù)據(jù)和所述卡外設(shè)備保密數(shù)據(jù)生成會(huì)話密鑰,根據(jù)所述卡外設(shè)備保密數(shù)據(jù)的指定字節(jié)和所述卡片保密數(shù)據(jù)的指定字節(jié)生成簽名信息,將會(huì)話密鑰建立標(biāo)識(shí)置位,將獲取隨機(jī)數(shù)標(biāo)識(shí)置位;如果不符合預(yù)設(shè)要求,則報(bào)錯(cuò),返回S2 ;S7’:從第七命令中獲取第二隨機(jī)數(shù),保存第二隨機(jī)數(shù),判斷是否同時(shí)滿足所述會(huì)話密鑰建立標(biāo)識(shí)置位和所述獲取隨機(jī)數(shù)標(biāo)識(shí)置位,否則返回S2 ;是則從第七命令中獲取第七命令數(shù)據(jù)域,構(gòu)造包含所述卡片保密數(shù)據(jù)、第七命令數(shù)據(jù)域的第三數(shù)據(jù)塊,用第一算法對(duì)所述第三數(shù)據(jù)塊進(jìn)行計(jì)算,計(jì)算的結(jié)果為第二計(jì)算結(jié)果,構(gòu)造包含所述卡片保密數(shù)據(jù)、所述第二計(jì)算結(jié)果的第四數(shù)據(jù)塊,用所述RSA私鑰引用所引用的私鑰加密所述第四數(shù)據(jù)塊,得到的加密結(jié)果為第一簽名結(jié)果,將所述第一簽名結(jié)果發(fā)送給卡外設(shè)備,將相互認(rèn)證標(biāo)識(shí)置位,清除所述第一隨機(jī)數(shù)和所述第二隨機(jī)數(shù),然后返回S3。所述根據(jù)所述卡片保密數(shù)據(jù)和所述卡外設(shè)備保密數(shù)據(jù)生成會(huì)話密鑰,具體包括,所述卡外設(shè)備保密數(shù)據(jù)與所述卡片保密數(shù)據(jù)異或運(yùn)算,得到異或運(yùn)算結(jié)果,然后根據(jù)需要生成的會(huì)話密鑰類型設(shè)置相應(yīng)的計(jì)數(shù)值,將異或運(yùn)算結(jié)果與所述計(jì)數(shù)值順序拼接,拼接結(jié)果用第一算法計(jì)算,得到第三計(jì)算結(jié)果,獲取所述第三計(jì)算結(jié)果中的預(yù)設(shè)字節(jié)數(shù)據(jù),將其保存為會(huì)話密鑰。本發(fā)明實(shí)施例提供的技術(shù)方案有益效果為:采用本發(fā)明的方法,能夠?yàn)榭ㄆ峁┮欢ūU系陌踩ㄐ艡C(jī)制,通過(guò)發(fā)起一個(gè)會(huì)話,通訊雙方互相認(rèn)證,確定對(duì)方身份的合法性和通訊數(shù)據(jù)的完整性,并為后續(xù)的通訊提供安全約束,從而提高了通訊的安全性。
圖1-1、1-2、1_3為本發(fā)明實(shí)施例一提供的一種智能卡安全通訊的方法流程圖。
具體實(shí)施例方式本發(fā)明實(shí)施例基于智能卡中安全通道的管理提供了一種智能卡安全通訊的方法,下面結(jié)合附圖對(duì)本發(fā)明實(shí)施例進(jìn)行詳細(xì)介紹。實(shí)施例一參見(jiàn)圖1-1、1-2和1-3,實(shí)施例一提供了一種智能卡安全通訊的方法,具體包括:步驟101:智能卡上電;步驟102:設(shè)置安全標(biāo)識(shí)和安全變量;
本實(shí)施例中,設(shè)置安全標(biāo)識(shí)具體包括,將安全環(huán)境管理標(biāo)識(shí)設(shè)置為未完成標(biāo)識(shí),將會(huì)話安全標(biāo)識(shí)的初始狀態(tài)設(shè)置為沒(méi)有安全級(jí)別,將證書(shū)驗(yàn)證完成標(biāo)識(shí)設(shè)置為未完成標(biāo)識(shí),將獲取隨機(jī)數(shù)標(biāo)識(shí)設(shè)置為未完成標(biāo)識(shí),將會(huì)話密鑰標(biāo)識(shí)設(shè)置為未建立標(biāo)識(shí),將外部認(rèn)證標(biāo)識(shí)設(shè)置為未完成標(biāo)識(shí),將相互認(rèn)證標(biāo)識(shí)設(shè)置為未完成標(biāo)識(shí);本實(shí)施例中,設(shè)置安全變量具體包括,將RSA公鑰引用設(shè)置為PKV1,PKIl ;將RSA私鑰引用設(shè)置為SKV1, SKIl ;將第一會(huì)話密鑰、第二會(huì)話密鑰、第三會(huì)話密鑰、第四會(huì)話密鑰、第五會(huì)話密鑰設(shè)置為初始值,初始值可以為16個(gè)字節(jié)的‘00’,將簽名信息設(shè)置為初始值,初始值可以為8個(gè)字節(jié)的‘00’,優(yōu)選的,第一會(huì)話密鑰為CMAC會(huì)話密鑰,第二會(huì)話密鑰為RMAC會(huì)話密鑰,第三會(huì)話密鑰為CENC會(huì)話密鑰,第四會(huì)話密鑰為RENC會(huì)話密鑰,第五會(huì)話密鑰為DEK會(huì)話密鑰。步驟103:等待接收命令;本實(shí)施例中,命令包括:第一命令、第二命令、第三命令、第四命令、第五命令、第六命令、第七命令及其他命令。優(yōu)選的,第一命令為安全環(huán)境管理命令,第二命令為執(zhí)行安全操作證書(shū)驗(yàn)證命令,第三命令為獲取證書(shū)命令,第四命令為執(zhí)行安全操作解密命令,第五命令為獲取隨機(jī)數(shù)命令,第六命令為外部認(rèn)證命令,第七命令為內(nèi)部認(rèn)證命令。步驟104:判斷接收到的命令類型;本實(shí)施例中,根據(jù)命令的第二至第四個(gè)字節(jié)的取值判斷命令類型,具體包括:如果命令的第二至第四個(gè)字節(jié)的取值為2281A4或22C1A4或2281B6或22C1B6,則該命令是第一命令,執(zhí)行步驟105 ;如果命令的第二至第四個(gè)字節(jié)的取值為2A00AE或2A00BE,則該命令是第二命令,執(zhí)行步驟113 ;如果命令的第二至第四個(gè)字節(jié)的取值為CA7F21或CB7F21則該命令是第三命令,執(zhí)行步驟116 ;如果命令的第二至第四個(gè)字節(jié)的取值為2A8084,則該命令是第四命令,執(zhí)行步驟118 ;如果命令的第二至第四個(gè)字節(jié)的取值為840000,則該命令是第五命令,執(zhí)行步驟128 ;如果命令的第二至第四個(gè)字節(jié)的取值為820000,則該命令是第六命令,執(zhí)行步驟131 ;如果命令的第二至第四個(gè)字節(jié)的取值為880000,則該命令是第七命令,執(zhí)行步驟140 ;如果為其他的命令則執(zhí)行步驟146。步驟105:判斷第一命令的第三個(gè)字節(jié)的取值;如果等于第一預(yù)設(shè)值,則執(zhí)行步驟106 ;如果等于第二預(yù)設(shè)值,則執(zhí)行步驟107。本實(shí)施例中,優(yōu)選的,第一預(yù)設(shè)值為81,第二預(yù)設(shè)值為Cl ;步驟106:將認(rèn)證方法標(biāo)識(shí)設(shè)置為外部認(rèn)證標(biāo)識(shí),然后執(zhí)行步驟108 ;步驟107:將認(rèn)證方法標(biāo)識(shí)設(shè)置為相互認(rèn)證標(biāo)識(shí);步驟108:判斷第一命令的第四個(gè)字節(jié)的取值;
如果等于第三預(yù)設(shè)值,則執(zhí)行步驟109 ;如果等于第四預(yù)設(shè)值,則執(zhí)行步驟110 ;本實(shí)施例中,優(yōu)選的,第三預(yù)設(shè)值為A4,第四預(yù)設(shè)值為B6。步驟109:將證書(shū)認(rèn)證標(biāo)識(shí)設(shè)置為不需要認(rèn)證標(biāo)識(shí),然后執(zhí)行步驟111 ;步驟110:將證書(shū)認(rèn)證標(biāo)識(shí)設(shè)置為需要認(rèn)證標(biāo)識(shí); 步驟111:獲取RSA公鑰引用和RSA私鑰引用,判斷是否成功獲取RSA公鑰引用和RSA私鑰引用;是,執(zhí)行步驟112 ;否,輸出錯(cuò)誤信息,然后返回步驟102。本實(shí)施例中,獲取RSA公鑰引用和RSA私鑰引用具體操作包括:步驟al:判斷第一命令的數(shù)據(jù)域中的第一個(gè)TLV結(jié)構(gòu)是否符合第一預(yù)設(shè)結(jié)構(gòu);是,執(zhí)行步驟a2 ;否,輸出錯(cuò)誤信息,然后返回步驟102。其中,第一預(yù)設(shè)結(jié)構(gòu)可以為80021002 ;步驟a2:判斷數(shù)據(jù)域中是否存在符合第二預(yù)設(shè)結(jié)構(gòu)的TLV結(jié)構(gòu);是,獲取RSA公鑰引用;否,輸出錯(cuò)誤信息,然后返回步驟102。第二預(yù)設(shè)結(jié)構(gòu)可以為8302N1N2或8300。當(dāng)?shù)诙A(yù)設(shè)結(jié)構(gòu)為8302N1N2時(shí),則獲取N1、N2,并將其保存為RSA公鑰引用;其中NI表示RSA公鑰密鑰版本號(hào),N2表示RSA公鑰密鑰索引號(hào)。當(dāng)?shù)诙A(yù)設(shè)結(jié)構(gòu)為8300時(shí),則卡片使用默認(rèn)的RSA公鑰引用PKV1,PKIl ;其中PKVl表示默認(rèn)的RSA公鑰密鑰版本號(hào),PKIl表示默認(rèn)的公鑰密鑰索引號(hào)。步驟a3:判斷數(shù)據(jù)域中是否存在符合第三預(yù)設(shè)結(jié)構(gòu)的TLV結(jié)構(gòu);是,獲取RSA私鑰引用;否,輸出錯(cuò)誤信息,然后返回步驟102。第三預(yù)設(shè)結(jié)構(gòu)可以為8402N3N4或8400。當(dāng)?shù)谌A(yù)設(shè)結(jié)構(gòu)為8402N3N4時(shí),則獲取N3、N4,并將其保存為RSA私鑰引用;其中N3表示私鑰密鑰版本號(hào),N4表示私鑰密鑰索引號(hào)。當(dāng)?shù)谌A(yù)設(shè)結(jié)構(gòu)為8400時(shí),則卡片使用默認(rèn)的RSA私鑰引用SKV1,SKIl ;其中SKVl表示默認(rèn)的私鑰密鑰版本號(hào),SKIl表示默認(rèn)的私鑰密鑰索引號(hào)。步驟112:將安全環(huán)境管理標(biāo)識(shí)設(shè)置為完成標(biāo)識(shí),然后返回步驟103 ;如果接收到第二命令,則執(zhí)行步驟113至步驟115。步驟113:判斷第二命令是否符合第一預(yù)設(shè)條件;是,執(zhí)行步驟114 ;否,輸出錯(cuò)誤信息,然后返回步驟102。本實(shí)施例中,具體的可以判斷第二命令是否同時(shí)滿足以下條件:I)安全環(huán)境管理標(biāo)識(shí)為完成標(biāo)識(shí);2)證書(shū)認(rèn)證標(biāo)識(shí)為需要認(rèn)證標(biāo)識(shí);3)第二命令指定部分的取值等于第五預(yù)設(shè)值,其中,第二命令的指定部分為T(mén)LV結(jié)構(gòu)的TAG (證書(shū)標(biāo)簽)部分,第五預(yù)設(shè)值可以為7F21 ;4)成功用RSA公鑰引用所引用的公鑰驗(yàn)證證書(shū)。如果同時(shí)滿足上述所有條件,則確定第二命令符合第一預(yù)設(shè)條件;否則,確定第二命令不符合第一預(yù)設(shè)條件。步驟114:判斷是否存在需要驗(yàn)證的證書(shū);是,返回步驟103 ;否,執(zhí)行步驟115。
本實(shí)施例中,根據(jù)第二命令第一字節(jié)的第五位的取值判斷是否存在需要驗(yàn)證的證書(shū)。如果第二命令第一字節(jié)第五位的取值不等于0,則表示存在需要驗(yàn)證的證書(shū)。如果第二命令第一字節(jié)第五位的取值等于0,則表示不存在需要驗(yàn)證的證書(shū)。步驟115:將證書(shū)驗(yàn)證標(biāo)識(shí)設(shè)置為完成標(biāo)識(shí),然后返回步驟103 ;如果接收到第三命令,則執(zhí)行步驟116至步驟117。步驟116:判斷證書(shū)驗(yàn)證標(biāo)識(shí)是否為完成標(biāo)識(shí);是,執(zhí)行步驟117 ;否,輸出錯(cuò)誤信息,然后返回步驟102。步驟117:向卡外設(shè)備發(fā)送證書(shū),然后返回步驟103 ;本實(shí)施例中,具體向卡外設(shè)備發(fā)送保存在卡內(nèi)安全域中的證書(shū)。如圖1-2所示,如果接收到第四命令,則執(zhí)行步驟118至步驟127。步驟118:判斷安全環(huán)境管理標(biāo)識(shí)是否為完成標(biāo)識(shí);是,執(zhí)行步驟120 ;否,執(zhí)行步驟119。步驟119:判斷證書(shū)認(rèn)證標(biāo)識(shí)是否為需要認(rèn)證標(biāo)識(shí);是,輸出錯(cuò)誤信息,然后返回步驟102 ;否,執(zhí)行步驟120。步驟120:判斷第四命令是否符合第三預(yù)設(shè)條件;是,執(zhí)行步驟121 ;否,輸出錯(cuò)誤信息,然后返回步驟103。本實(shí)施例中,如果第四命令的數(shù)據(jù)域長(zhǎng)度等于RSA公鑰引用所引用的公鑰的模長(zhǎng),則第四命令符合第三預(yù)設(shè)條件。否則,第四命令不符合第三預(yù)設(shè)條件。步驟121:用RSA公鑰引用所引用的公鑰對(duì)第四命令解密;本實(shí)施例中,具體的用RSA公鑰引用所引用的公鑰對(duì)第四命令的數(shù)據(jù)域采用預(yù)設(shè)的方式進(jìn)行解密。步驟122:判斷是否成功得到解密結(jié)果;是,執(zhí)行步驟123 ;否,輸出錯(cuò)誤信息,然后返回步驟103。本實(shí)施例中,如果解密結(jié)果的第一至第二個(gè)字節(jié)的取值等于第六預(yù)設(shè)值,則得到正確的解密結(jié)果。優(yōu)選的,第六預(yù)設(shè)值為0002。步驟123:判斷是否成功獲取安全級(jí)別的TLV結(jié)構(gòu);是,執(zhí)行步驟125 ;否,輸出錯(cuò)誤信息,然后返回步驟103。本實(shí)施例中,從解密結(jié)果中獲取安全級(jí)別TLV結(jié)構(gòu),根據(jù)安全級(jí)別的TLV結(jié)構(gòu)的前兩個(gè)字節(jié)的取值判斷是否成功獲取安全級(jí)別的TLV。如果安全級(jí)別的TLV結(jié)構(gòu)的前兩個(gè)字節(jié)的取值為D301,則表示成功讀取獲取安全級(jí)別TLV結(jié)構(gòu);否則,未成功獲取安全級(jí)別的TLV結(jié)構(gòu)。步驟124:保存安全級(jí)別,判斷是否能建立會(huì)話密鑰;是,執(zhí)行步驟125 ;否,輸出錯(cuò)誤信息,然后返回步驟103。本實(shí)施例中,將安全級(jí)別TLV結(jié)構(gòu)的第三個(gè)字節(jié)的取值保存為安全級(jí)別。如果CRT控制引用模板的總標(biāo)簽的取值等于第七預(yù)設(shè)值,控制引用模板中存在第一 TLV結(jié)構(gòu),并且存在與第一預(yù)設(shè)長(zhǎng)度相等的第二 TLV結(jié)構(gòu),則能建立會(huì)話密鑰;否則,不能建立會(huì)話密鑰。優(yōu)選的,第七預(yù)設(shè)值為B4或B8,第一 TLV結(jié)構(gòu)為T(mén)AG的取值等于95的TLV結(jié)構(gòu),第二 TLV結(jié)構(gòu)為T(mén)AG的取值等于Dl的TLV結(jié)構(gòu),第一預(yù)設(shè)長(zhǎng)度為16。
步驟125:建立會(huì)話密鑰,并保存會(huì)話密鑰;本實(shí)施例中,根據(jù)CRT控制引用模板的總標(biāo)簽的取值建立相應(yīng)的會(huì)話密鑰;當(dāng)CRT控制引用模板的總標(biāo)簽的取值為B4時(shí),如果TAG為95的TLV結(jié)構(gòu)中的Value的取值為10,則建立Dl為T(mén)AG的TLV結(jié)構(gòu)數(shù)據(jù)的第一會(huì)話密鑰;如果TAG為95的TLV結(jié)構(gòu)中的Value的取值為20,則建立Dl為T(mén)AG的TLV結(jié)構(gòu)數(shù)據(jù)的第二會(huì)話密鑰;如果TAG為95的TLV結(jié)構(gòu)中的Value的取值為30,則建立Dl為T(mén)AG的TLV結(jié)構(gòu)
數(shù)據(jù)的第一會(huì)話密鑰、第二會(huì)話密鑰。如果TAG為95的TLV結(jié)構(gòu)中的Value的的取值滿足以上條件之一的,則為成功執(zhí)行操作,否則為未成功執(zhí)行操作。當(dāng)CRT控制引用模板的總標(biāo)簽的取值為B8時(shí),如果TAG為95的TLV結(jié)構(gòu)中的Value的取值為10,則建立Dl為T(mén)AG的TLV結(jié)構(gòu)數(shù)據(jù)的第三會(huì)話密鑰;如果TAG為95的TLV結(jié)構(gòu)中的Value的取值為20,則建立Dl為T(mén)AG的TLV結(jié)構(gòu)數(shù)據(jù)的第四會(huì)話密鑰;如果TAG為95的TLV結(jié)構(gòu)中的Value的取值為30,則建立Dl為T(mén)AG的TLV結(jié)構(gòu)數(shù)據(jù)的第三會(huì)話密鑰、第四會(huì)話密鑰;如果TAG為95的TLV結(jié)構(gòu)中的Value的取值為CO,則建立Dl為T(mén)AG的TLV結(jié)構(gòu)
數(shù)據(jù)的第五會(huì)話密鑰。步驟126:判斷是否需要設(shè)置簽名信息;是,執(zhí)行步驟127 ;否,輸出錯(cuò)誤信息,然后返回步驟102。本實(shí)施例中,如果CRT控制引用模板中存在TAG的取值等于91并且長(zhǎng)度等于第二預(yù)設(shè)長(zhǎng)度的第三TLV結(jié)構(gòu),則需要設(shè)置簽名信息。優(yōu)選的,第二預(yù)設(shè)長(zhǎng)度為8。步驟127:設(shè)置簽名信息,將會(huì)話密鑰建立標(biāo)識(shí)設(shè)置為完成標(biāo)識(shí),然后返回步驟103 ;本實(shí)施例中,將簽名信息設(shè)置為八個(gè)字節(jié)的數(shù)據(jù),優(yōu)選的可以為‘0000000000000000,。如果接收到第五命令,則執(zhí)行步驟128至步驟130。步驟128:判斷第五命令是否符合第四預(yù)設(shè)條件;是,執(zhí)行步驟129 ;否,輸出錯(cuò)誤信息,然后返回步驟102。本實(shí)施例中,如果會(huì)話密鑰建立標(biāo)識(shí)為完成標(biāo)識(shí),則確定第五命令符合第四預(yù)設(shè)條件;否則,確定第五命令不符合第四預(yù)設(shè)條件。步驟129:生成第一隨機(jī)數(shù),保存第一隨機(jī)數(shù),并將其發(fā)送給卡外設(shè)備;本實(shí)施例中,優(yōu)選的,第一隨機(jī)數(shù)可以為16個(gè)字節(jié)的隨機(jī)數(shù);步驟130:將獲取隨機(jī)數(shù)標(biāo)識(shí)設(shè)置為完成標(biāo)識(shí),然后返回步驟103。如果接收到第六命令,則執(zhí)行步驟131至步驟139。步驟131:判斷獲取隨機(jī)數(shù)標(biāo)識(shí)是否為完成標(biāo)識(shí);是,執(zhí)行步驟132 ;否,輸出錯(cuò)誤信息,然后返回步驟102。步驟132:構(gòu)造包含安全級(jí)別TLV結(jié)構(gòu)、會(huì)話密鑰和第一隨機(jī)數(shù)的第一數(shù)據(jù)塊;
步驟133:用第一算法對(duì)第一數(shù)據(jù)塊運(yùn)算,得到第一計(jì)算結(jié)果;本實(shí)施例中,優(yōu)選的,第一算法可以為SHAl算法。步驟134:構(gòu)造包含第一計(jì)算結(jié)果和第一算法的第二數(shù)據(jù)塊;步驟135:從第六命令中讀取卡外設(shè)備的簽名結(jié)果,并用RSA公鑰引用所引用的公鑰和第二數(shù)據(jù)塊對(duì)其進(jìn)行驗(yàn)證;步驟136:判斷驗(yàn)證是否成功;是,執(zhí)行步驟137 ;否,輸出錯(cuò)誤信息,然后返回步驟102。步驟137:將外部認(rèn)證標(biāo)識(shí)設(shè)置為完成標(biāo)識(shí);步驟138:判斷認(rèn)證方法標(biāo)識(shí)是否為外部認(rèn)證標(biāo)識(shí);是,執(zhí)行步驟139 ;否,返回步驟103。步驟139:將相互認(rèn)證標(biāo)識(shí)設(shè)置為完成標(biāo)識(shí),然后返回步驟103 ;如圖1-3所示,如果接收到第七命令,則執(zhí)行步驟140至步驟145。步驟140:從第七命令中讀取第二隨機(jī)數(shù),保存第二隨機(jī)數(shù),判斷第七命令是否符合第五預(yù)設(shè)條件;是,執(zhí)行步驟141 ;否,輸出錯(cuò)誤信息,返回步驟102。本實(shí)施例中,讀取第七命令的前16個(gè)字節(jié)為第二隨機(jī)數(shù)。判斷第七命令是否同時(shí)滿足以下條件:I)認(rèn)證方法標(biāo)識(shí)為外部認(rèn)證標(biāo)識(shí);2)外部認(rèn)證標(biāo)識(shí)為完成標(biāo)識(shí);如果同時(shí)滿足上述所有條件,則確定第七命令符合第五預(yù)設(shè)條件;否則,確定第七命令不符合第五預(yù)設(shè)條件。步驟141:構(gòu)造包含會(huì)話密鑰和第二隨機(jī)數(shù)的第三數(shù)據(jù)塊;步驟142:用第一算法對(duì)第三數(shù)據(jù)塊運(yùn)算,得到第二計(jì)算結(jié)果;步驟143:構(gòu)造包含第二計(jì)算結(jié)果和第一算法的第四數(shù)據(jù)塊;步驟144:用RSA私鑰引用所引用的私鑰對(duì)第四數(shù)據(jù)塊加密,得到第一簽名結(jié)果,并將其發(fā)送給卡外設(shè)備;步驟145:將相互認(rèn)證標(biāo)識(shí)設(shè)置為完成標(biāo)識(shí),清除第一隨機(jī)數(shù)、第二隨機(jī)數(shù),然后返回步驟103 ;如果為其他命令則執(zhí)行如下操作:步驟146:判斷命令是否符合第六預(yù)設(shè)條件;是,執(zhí)行步驟147 ;否,執(zhí)行相應(yīng)操作后返回步驟103。本實(shí)施例中,如果命令的第一字節(jié)的第三位的取值等于預(yù)設(shè)值,則確定符合第六預(yù)設(shè)條件;否則,不符合第六預(yù)設(shè)條件,預(yù)設(shè)值優(yōu)選為O。步驟147:判斷互相認(rèn)證標(biāo)識(shí)是否為完成標(biāo)識(shí);是,執(zhí)行步驟148 ;否,輸出錯(cuò)誤信息。步驟148:獲取安全級(jí)別,并判斷如果安全級(jí)別指示存在命令消息驗(yàn)證碼并且需要數(shù)據(jù)域加密,則執(zhí)行步驟149 ;如果安全級(jí)別指示只存在命令消息驗(yàn)證碼,則執(zhí)行步驟153 ;如果安全級(jí)別指示既不需要數(shù)據(jù)域加密也不存在命令消息驗(yàn)證碼,則執(zhí)行相應(yīng)操作,然后返回步驟103 ;
步驟149:從命令中獲取命令消息驗(yàn)證碼,根據(jù)安全級(jí)別獲取第一會(huì)話密鑰和第三會(huì)話密鑰,用第一會(huì)話密鑰的指定部分對(duì)簽名信息加密,得到第一加密信息;本實(shí)施例中,從命令的指定TLV結(jié)構(gòu)中獲取命令消息驗(yàn)證碼。第一會(huì)話密鑰的指定部分為第一會(huì)話密鑰的前8個(gè)字節(jié)。步驟150:構(gòu)造包含第一會(huì)話密鑰、第一加密信息及命令的第一指定部分的第一數(shù)據(jù),作為第一指定算法輸入,完成第一數(shù)據(jù)簽名,得到第一數(shù)據(jù)簽名結(jié)果;本實(shí)施例中,命令的第一指定部分為指定TLV結(jié)構(gòu)之前以及指定TLV結(jié)構(gòu)中的數(shù)據(jù)。優(yōu)選的,第一指定算法為IS09797M2_ALG3。步驟151:判斷第一數(shù)據(jù)簽名結(jié)果是否等于命令消息驗(yàn)證碼;是,執(zhí)行步驟152 ;否,輸出錯(cuò)誤信息。步驟152:簽名信息作為一個(gè)整數(shù)自增1,修改命令的第二指定部分,用第三會(huì)話密鑰采用第二指定算法對(duì)命令的第三指定部分解密,然后執(zhí)行相應(yīng)操作,返回步驟103 ;本實(shí)施例中,第二指定部分為命令的數(shù)據(jù)域長(zhǎng)度值。優(yōu)選的,第二指定算法為IS09797M2。例如,對(duì)命令的數(shù)據(jù)域中87L01XX中的數(shù)據(jù)解密。步驟153:從命令中獲取命令消息驗(yàn)證碼,根據(jù)安全級(jí)別獲取第一會(huì)話密鑰,用第一會(huì)話密鑰的指定部分對(duì)簽名信息加密,得到第二加密信息;步驟154:構(gòu)造包含第一會(huì)話密鑰、第二加密信息及命令的第一指定部分的第二數(shù)據(jù),作為第一指定算法的輸入,完成對(duì)第二數(shù)據(jù)簽名,得到第二數(shù)據(jù)簽名結(jié)果;步驟155:判斷第二數(shù)據(jù)簽名結(jié)果是否等于命令消息驗(yàn)證碼;是,執(zhí)行步驟156 ;否,輸出錯(cuò)誤信息。步驟156:簽名信息作為一個(gè)整數(shù)自增1,修改命令的第二指定部分,然后執(zhí)行相應(yīng)操作。需要說(shuō)明的是,本發(fā)明實(shí)施方式中,將步驟118-步驟127替換為:輸出錯(cuò)誤信息,然后返回步驟102 ;步驟128替換為步驟128’,步驟131-步驟134替換為步驟131’-步驟134’,將步驟135-步驟139替換為:將會(huì)話密鑰建立標(biāo)識(shí)和獲取隨機(jī)數(shù)標(biāo)識(shí)均設(shè)為完成標(biāo)識(shí),然后返回步驟103 ;步驟140-步驟141替換為步驟140’ -步驟141’,步驟143替換為步驟143’ ;步驟128’:判斷安全環(huán)境管理標(biāo)識(shí)和證書(shū)認(rèn)證標(biāo)識(shí),如果安全環(huán)境管理標(biāo)識(shí)為未完成標(biāo)識(shí),并且證書(shū)認(rèn)證標(biāo)識(shí)為需要認(rèn)證標(biāo)識(shí),則報(bào)錯(cuò),否則執(zhí)行步驟129至步驟130 ;步驟131’:判斷第六命令是否符合預(yù)設(shè)條件;具體的可以判斷是否滿足以下條件:獲取隨機(jī)數(shù)標(biāo)識(shí)為完成標(biāo)識(shí),成功驗(yàn)證用RSA公鑰所引用的公鑰對(duì)第六命令的數(shù)據(jù)域進(jìn)行解密得到的解密結(jié)果;是,繼續(xù)執(zhí)行;否則報(bào)錯(cuò)返回步驟102。步驟132’:從解密結(jié)果中獲取安全級(jí)別,生成卡片保密數(shù)據(jù),其中,卡片保密數(shù)據(jù)可以為32字節(jié)的隨機(jī)數(shù)。步驟133’:判斷解密結(jié)果的CRT控制引用模板,如果符合預(yù)設(shè)要求,其中,預(yù)設(shè)要求為CRT的總TAG為0xB4或0xB8,下一個(gè)TLV是9501XX,存在TLV是80LXX,其中L的取值為O或1,存在TLV是D1LXX,其中L的取值為0,存在TLV是91LXX,其中,L的取值為O ;繼續(xù)執(zhí)行;否則,輸出錯(cuò)誤信息,然后返回步驟102。步驟134’:獲取并保存卡外設(shè)備保密數(shù)據(jù),根據(jù)卡片保密數(shù)據(jù)和卡外設(shè)備保密數(shù)據(jù)生成會(huì)話密鑰,將卡外設(shè)備保密數(shù)據(jù)、卡片保密數(shù)據(jù)的前4個(gè)字節(jié)拼接,拼接結(jié)果保存為簽名信息。本實(shí)施例中,根據(jù)卡片保密數(shù)據(jù)和卡外設(shè)備保密數(shù)據(jù)生成會(huì)話密鑰具體包括,卡外設(shè)備保密數(shù)據(jù)與卡片保密數(shù)據(jù)異或運(yùn)算,得到異或運(yùn)算結(jié)果,然后根據(jù)需要生成的會(huì)話密鑰類型設(shè)置32個(gè)字節(jié)的計(jì)數(shù)值,將異或運(yùn)算結(jié)果與計(jì)數(shù)值順序拼接,拼接結(jié)果作SHAl計(jì)算,得到第三計(jì)算結(jié)果,獲取第三計(jì)算結(jié)果的前16個(gè)字節(jié),將其保存為會(huì)話密鑰。當(dāng)計(jì)數(shù)值設(shè)置為I時(shí),對(duì)應(yīng)生成的會(huì)話密鑰為第一會(huì)話密鑰;當(dāng)計(jì)數(shù)值設(shè)置為2時(shí),對(duì)應(yīng)生成的會(huì)話密鑰為第二會(huì)話密鑰;當(dāng)計(jì)數(shù)值設(shè)置為3時(shí),對(duì)應(yīng)生成的會(huì)話密鑰為第三會(huì)話密鑰;當(dāng)計(jì)數(shù)值設(shè)置為4時(shí),對(duì)應(yīng)生成的會(huì)話密鑰為第四會(huì)話密鑰;當(dāng)計(jì)數(shù)值設(shè)置為5時(shí),對(duì)應(yīng)生成的會(huì)話密鑰為第五會(huì)話密鑰;步驟140’:判斷是否滿足會(huì)話密鑰建立標(biāo)識(shí)為完成標(biāo)識(shí)和獲取隨機(jī)數(shù)標(biāo)識(shí)為完成標(biāo)識(shí),是,繼續(xù)執(zhí)行;否,報(bào)錯(cuò),返回步驟102。步驟141’:從第七命令中獲取第七命令數(shù)據(jù)域,構(gòu)造包含卡片保密數(shù)據(jù)、第七命令數(shù)據(jù)域的第三數(shù)據(jù)塊,然后執(zhí)行步驟142 ;步驟143’:構(gòu)造包含卡片保密數(shù)據(jù)、第二計(jì)算結(jié)果的第四數(shù)據(jù)塊,然后執(zhí)行步驟144-步驟145。以上實(shí)施方式同樣可以實(shí)現(xiàn)本發(fā)明的發(fā)明目的。以上所述,僅為本發(fā)明較佳的具體實(shí)施方式
,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明公開(kāi)的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
權(quán)利要求
1.一種智能卡安全通訊的方法,其特征在于,包括, S1:智能卡上電; 52:設(shè)置安全標(biāo)識(shí)和安全變量; 53:等待接收命令,并判斷收到的命令的類型; 如是第一命令,則將認(rèn)證方法標(biāo)識(shí)設(shè)置為外部認(rèn)證標(biāo)識(shí)或相互認(rèn)證標(biāo)識(shí),然后將證書(shū)認(rèn)證標(biāo)識(shí)置位,獲取RSA公鑰引用和RSA私鑰引用,將安全環(huán)境管理標(biāo)識(shí)置位,返回S3 ; 如是第二命令,則判斷是否同時(shí)滿足所述安全環(huán)境管理標(biāo)識(shí)置位和所述證書(shū)認(rèn)證標(biāo)識(shí)置位,是則驗(yàn)證證書(shū),將證書(shū)驗(yàn)證標(biāo)識(shí)置位,返回S3 ;否則報(bào)錯(cuò),返回S2 ; 如是第三命令,則判斷所述證書(shū)驗(yàn)證標(biāo)識(shí)是否置位,是則向卡外設(shè)備發(fā)送證書(shū),然后返回S3;否則報(bào)錯(cuò),返回S2; 如是第四命令,則執(zhí)行S4 ;如是第五命令,則執(zhí)行S5 ;如是第六命令,則執(zhí)行S6 ;如是第七命令,則執(zhí)行S7 ; 如是其他命令,則判斷該命令是否符合預(yù)設(shè)條件,是,則根據(jù)安全級(jí)別和會(huì)話密鑰對(duì)命令進(jìn)行驗(yàn)證,驗(yàn)證成功后執(zhí)行相應(yīng)操作,然后返回S3 ;否則報(bào)錯(cuò); 54:判斷是否同時(shí)滿足所述安全環(huán)境管理標(biāo)識(shí)未置位和所述證書(shū)認(rèn)證標(biāo)識(shí)置位,是則報(bào)錯(cuò),返回S2 ;否則,用所述RSA公鑰引用所引用的公鑰對(duì)所述第四命令解密,得到解密結(jié)果,從所述解密結(jié)果中獲取安全級(jí)別TLV結(jié)構(gòu),保存安全級(jí)別,建立會(huì)話密鑰,保存所述會(huì)話密鑰,設(shè)置簽名信息,將會(huì)話密鑰建立標(biāo)識(shí)置位,返回S3 ; 55:判斷是否滿足所述會(huì)話密鑰建立標(biāo)識(shí)置位,是則生成第一隨機(jī)數(shù),保存第一隨機(jī)數(shù),并將其發(fā)送給卡外設(shè)備,然后將獲取隨機(jī)數(shù)標(biāo)識(shí)置位,返回S3 ;否則報(bào)錯(cuò),返回S2 ; 56:判斷所述獲取隨機(jī)數(shù)標(biāo)識(shí)是否置位,否則報(bào)錯(cuò),返回步驟S2 ;是則構(gòu)造包含所述安全級(jí)別TLV結(jié)構(gòu)、所述會(huì)話密鑰、所述第一隨機(jī)數(shù)的第一數(shù)據(jù)塊,用第一算法對(duì)所述第一數(shù)據(jù)塊進(jìn)行計(jì)算,得到第一計(jì)算結(jié)果,構(gòu)造包含所述第一計(jì)算結(jié)果和第一算法的第二數(shù)據(jù)塊,從所述第六命令中讀取卡外設(shè)備的簽名結(jié)果,用所述RSA公鑰引用所引用的公鑰、所述第二數(shù)據(jù)塊對(duì)其進(jìn)行驗(yàn)證,如果驗(yàn)證成功則將外部認(rèn)證標(biāo)識(shí)置位,判斷認(rèn)證方法標(biāo)識(shí)是否為外部認(rèn)證標(biāo)識(shí),是則將相互認(rèn)證標(biāo)識(shí)置位,返回S3,否則返回S3 ;如果驗(yàn)證未成功,則報(bào)錯(cuò),返回S2 ; 57:從第七命令中獲取第二隨機(jī)數(shù),保存第二隨機(jī)數(shù),判斷是否同時(shí)滿足所述認(rèn)證方法標(biāo)識(shí)為所述外部認(rèn)證標(biāo)識(shí)并且所述外部認(rèn)證標(biāo)識(shí)置位,是則構(gòu)造包含所述會(huì)話密鑰和所述第二隨機(jī)數(shù)的第三數(shù)據(jù)塊,用第一算法對(duì)所述第三數(shù)據(jù)塊進(jìn)行計(jì)算,得到第二計(jì)算結(jié)果,構(gòu)造包含所述第二計(jì)算結(jié)果和第一算法的第四數(shù)據(jù)塊,用所述RSA私鑰引用所引用的私鑰加密所述第四數(shù)據(jù)塊,得到的加密結(jié)果為第一簽名結(jié)果,將所述第一簽名結(jié)果發(fā)送給卡外設(shè)備,將相互認(rèn)證標(biāo)識(shí)置位,清除所述第一隨機(jī)數(shù)和所述第二隨機(jī)數(shù),然后返回S3 ;否則返回S2。
2.按權(quán)利要求1所述的方法,其特征在于, 所述設(shè)置安全標(biāo)識(shí),具體包括,安全環(huán)境管理標(biāo)識(shí)復(fù)位,會(huì)話安全標(biāo)識(shí)設(shè)置為沒(méi)有安全級(jí)別,證書(shū)驗(yàn)證標(biāo)識(shí)復(fù)位,獲取隨機(jī)數(shù)標(biāo)識(shí)復(fù)位,會(huì)話密鑰建立標(biāo)識(shí)復(fù)位,外部認(rèn)證標(biāo)識(shí)復(fù)位,相互認(rèn)證標(biāo)識(shí)復(fù)位;所述設(shè)置安全變量,具體包括,RSA公鑰引用設(shè)置為默認(rèn)的RSA公鑰引用;RSA私鑰引用設(shè)置為默認(rèn)的RSA私鑰引用;第一會(huì)話密鑰、第二會(huì)話密鑰、第三會(huì)話密鑰、第四會(huì)話密鑰、第五會(huì)話密鑰分別設(shè)置為默認(rèn)值。
3.按權(quán)利要求1所述的方法,其特征在于, 所述將認(rèn)證方法標(biāo)識(shí)設(shè)置為外部認(rèn)證標(biāo)識(shí)或相互認(rèn)證標(biāo)識(shí),具體包括,根據(jù)第一命令的第一預(yù)設(shè)字節(jié)的取值設(shè)置認(rèn)證方法標(biāo)識(shí),當(dāng)?shù)谝幻畹牡谝活A(yù)設(shè)字節(jié)的取值為第一預(yù)設(shè)值時(shí),將認(rèn)證方法標(biāo)識(shí)設(shè)置為外部認(rèn)證標(biāo)識(shí);當(dāng)?shù)谝幻畹牡谝活A(yù)設(shè)字節(jié)的取值為第二預(yù)設(shè)值時(shí),將認(rèn)證方法標(biāo)識(shí)設(shè)置為相互認(rèn)證標(biāo)識(shí); 所述將證書(shū)認(rèn)證標(biāo)識(shí)置位,具體包括,根據(jù)第一命令的第三預(yù)設(shè)字節(jié)的取值設(shè)置證書(shū)認(rèn)證標(biāo)識(shí),當(dāng)?shù)谌A(yù)設(shè)字節(jié)的取值等于第三預(yù)設(shè)值時(shí),將證書(shū)認(rèn)證標(biāo)識(shí)復(fù)位;當(dāng)?shù)谌A(yù)設(shè)字節(jié)的取值等于第四預(yù)設(shè)值時(shí),將證書(shū)認(rèn)證標(biāo)識(shí)置位; 所述獲取RSA公鑰引用和RSA私鑰引用,具體包括, 步驟al:判斷第一命令的數(shù)據(jù)域中的第一個(gè)TLV結(jié)構(gòu)是否符合第一預(yù)設(shè)結(jié)構(gòu); 是則執(zhí)行步驟a2 ;否則報(bào)錯(cuò),然后返回S2 ; 步驟a2:判斷所述數(shù)據(jù)域中是否存在符合第二預(yù)設(shè)結(jié)構(gòu)的TLV結(jié)構(gòu); 是則獲取并保存RSA公鑰引用;否則報(bào)錯(cuò),然后返回S2 ; 步驟a3:判斷所述數(shù)據(jù)域中是否存在符合第三預(yù)設(shè)結(jié)構(gòu)的TLV結(jié)構(gòu); 是則獲取并保存RSA私鑰引用;否則報(bào)錯(cuò),然后返回S2。
4.按權(quán)利要求3所述的方法,其特征在于, 所述獲取并保存RSA公鑰引用,具體包括,根據(jù)第二預(yù)設(shè)結(jié)構(gòu)的取值獲取并保存RSA公鑰引用,當(dāng)?shù)诙A(yù)設(shè)結(jié)構(gòu)的取值為第一結(jié)構(gòu)值時(shí),則獲取第一結(jié)構(gòu)值的最后兩個(gè)字節(jié),并將其保存為RSA公鑰引用;當(dāng)?shù)诙A(yù)設(shè)結(jié)構(gòu)的取值為第二結(jié)構(gòu)值時(shí),則卡片使用默認(rèn)的RSA公鑰引用; 所述獲取并保存RSA私鑰引用,具體包括,根據(jù)第三預(yù)設(shè)結(jié)構(gòu)的取值獲取RSA私鑰引用,當(dāng)?shù)谌A(yù)設(shè)結(jié)構(gòu)的取值為第三結(jié)構(gòu)值時(shí),則獲取第三結(jié)構(gòu)值的最后兩個(gè)字節(jié),并將其保存為RSA私鑰引用;當(dāng)?shù)谌A(yù)設(shè)結(jié)構(gòu)的取值為第四結(jié)構(gòu)值時(shí),則卡片使用默認(rèn)的RSA私鑰引用。
5.按權(quán)利要求1所述的方法,其特征在于, 所述判斷是否同時(shí)滿足所述安全環(huán)境管理標(biāo)識(shí)置位和所述證書(shū)認(rèn)證標(biāo)識(shí)置位之后包括:判斷所述第二命令是否符合第一條件,是則用所述RSA公鑰引用所引用的公鑰驗(yàn)證證書(shū),判斷是否存在需要驗(yàn)證的證書(shū),存在,則返回S2,不存在,則將證書(shū)驗(yàn)證標(biāo)識(shí)置位,返回S3;否則報(bào)錯(cuò),返回S2。
6.按權(quán)利要求5所述的方法,其特征在于, 所述第二命令符合第一條件,具體包括,所述第二命令的指定部分的取值等于第五預(yù)設(shè)值; 所述判斷是否存在需要驗(yàn)證的證書(shū),具體包括,根據(jù)第二命令第一字節(jié)的第五位的取值判斷是否存在需要驗(yàn)證的證書(shū);如果第二命令第一字節(jié)的第五位的取值為第九預(yù)設(shè)值,則不存在需要驗(yàn)證的證書(shū),如果第二命令第一字節(jié)的第五位的取值不為第九預(yù)設(shè)值,則存在需要驗(yàn)證的證書(shū)。
7.按權(quán)利要求1所述的方法,其特征在于, 所述用所述RSA公鑰引用所引用的公鑰對(duì)第四命令解密之前還包括,判斷是否滿足第四命令數(shù)據(jù)域長(zhǎng)度等于所述RSA公鑰引用所引用的公鑰的模長(zhǎng),是則用所述RSA公鑰引用所引用的公鑰對(duì)第四命令解密;否則報(bào)錯(cuò),返回S3 ; 所述保存安全級(jí)別之后所述建立會(huì)話密鑰之前,還包括,判斷是否能建立會(huì)話密鑰,是則建立會(huì)話密鑰,否則報(bào)錯(cuò),返回S3。
8.按權(quán)利要求7所述的方法,其特征在于,所述判斷是否能建立會(huì)話密鑰,具體包括, 判斷是否同時(shí)滿足控制引用模板的總標(biāo)簽的取值等于第七預(yù)設(shè)值和控制引用模板中存在第一 TLV結(jié)構(gòu),并且存在與第一預(yù)設(shè)長(zhǎng)度相等的第二 TLV結(jié)構(gòu),是則能建立會(huì)話密鑰;否則不能建立會(huì)話密鑰;所述第七預(yù)設(shè)值為第一標(biāo)簽或第二標(biāo)簽; 所述建立會(huì)話密鑰具體包括,根據(jù)控制引用模板的總標(biāo)簽的取值建立相應(yīng)的會(huì)話密鑰,當(dāng)控制引用模板的總標(biāo)簽的取值為第一標(biāo)簽時(shí), 如果TAG為95的TLV結(jié)構(gòu)中的Value的取值為第一數(shù)值,則建立第一會(huì)話密鑰; 如果TAG為95的TLV結(jié)構(gòu)中的Value的取值為第二數(shù)值,則建立第二會(huì)話密鑰; 如果TAG為95的TLV結(jié)構(gòu)中的Value的取值為第三數(shù)值,則建立第一會(huì)話密鑰、第二會(huì)話密鑰; 當(dāng)控制引用模板的總標(biāo)簽的取值為第二標(biāo)簽時(shí), 如果TAG為95的TLV結(jié)構(gòu)中的Value的取值為第一數(shù)值,則建立第三會(huì)話密鑰; 如果TAG為95的TLV結(jié)構(gòu)中的Value的取值為第二數(shù)值,則建立第四會(huì)話密鑰; 如果TAG為95的TLV結(jié)構(gòu)中的Value的取值為第三數(shù)值,則建立第三會(huì)話密鑰、第四會(huì)話密鑰; 如果TAG為95的TLV結(jié)構(gòu)中的Value的取值為第四數(shù)值,則建立第五會(huì)話密鑰; 所述保存所述會(huì)話密鑰之后設(shè)置簽名信息之前,還包括, 判斷是否需要設(shè)置簽名信息,是則設(shè)置簽名,否則報(bào)錯(cuò)返回S2。
9.按權(quán)利要求8所述的方法,其特征在于, 所述判斷是否能建立會(huì)話密鑰,具體為, 判斷是否同時(shí)滿足控制引用模板的總標(biāo)簽的取值等于第七預(yù)設(shè)值和所述控制引用模板中存在第一 TLV結(jié)構(gòu),并且存在長(zhǎng)度與第一預(yù)設(shè)長(zhǎng)度相等的第二 TLV結(jié)構(gòu),是則能建立會(huì)話密鑰,否則不能建立會(huì)話密鑰; 所述判斷是否需要設(shè)置簽名信息,具體為, 判斷控制引用模板中是否存在TAG的取值等于第八預(yù)設(shè)值,并且長(zhǎng)度等于第二預(yù)設(shè)長(zhǎng)度的第三TLV結(jié)構(gòu),是則需要設(shè)置簽名信息;否則不需要設(shè)置簽名信息。
10.按權(quán)利要求1所述的方法,其特征在于,所述S4-S7替換為,S4’-S7’, S4’:報(bào)錯(cuò),返回S2; S5’:判斷是否滿足所述安全環(huán)境管理標(biāo)識(shí)未置位和所述證書(shū)認(rèn)證標(biāo)識(shí)置位,是則報(bào)錯(cuò),返回S2 ;否則生成第一隨機(jī)數(shù),保存第一隨機(jī)數(shù),并將其發(fā)送給卡外設(shè)備,然后將獲取隨機(jī)數(shù)標(biāo)識(shí)置位,返回S3; S6’:判斷是否同時(shí)滿足所述獲取隨機(jī)數(shù)標(biāo)識(shí)置位和成功驗(yàn)證用所述RSA公鑰引用所引用的公鑰對(duì)第六命令的數(shù)據(jù)域進(jìn) 行解密得到的解密結(jié)果;否則報(bào)錯(cuò),返回S2 ;是則從所述解密結(jié)果中獲取安全級(jí)別,生成卡片保密數(shù)據(jù),判斷所述解密結(jié)果的控制引用模板是否符合預(yù)設(shè)要求,如果符合預(yù)設(shè)要求,則獲取并保存卡外設(shè)備保密數(shù)據(jù),根據(jù)所述卡片保密數(shù)據(jù)和所述卡外設(shè)備保密數(shù)據(jù)生成會(huì)話密鑰,根據(jù)所述卡外設(shè)備保密數(shù)據(jù)的指定字節(jié)和所述卡片保密數(shù)據(jù)的指定字節(jié)生成簽名信息,將會(huì)話密鑰建立標(biāo)識(shí)置位,將獲取隨機(jī)數(shù)標(biāo)識(shí)置位;如果不符合預(yù)設(shè)要求,則報(bào)錯(cuò),返回S2 ; S7’:從第七命令中獲取第二隨機(jī)數(shù),保存第二隨機(jī)數(shù),判斷是否同時(shí)滿足所述會(huì)話密鑰建立標(biāo)識(shí)置位和所述獲取隨機(jī)數(shù)標(biāo)識(shí)置位,否則返回S2 ;是則從第七命令中獲取第七命令數(shù)據(jù)域,構(gòu)造包含所述卡片保密數(shù)據(jù)、第七命令數(shù)據(jù)域的第三數(shù)據(jù)塊,用第一算法對(duì)所述第三數(shù)據(jù)塊進(jìn)行計(jì)算,計(jì)算的結(jié)果為第二計(jì)算結(jié)果,構(gòu)造包含所述卡片保密數(shù)據(jù)、所述第二計(jì)算結(jié)果的第四數(shù)據(jù)塊,用所述RSA私鑰引用所引用的私鑰加密所述第四數(shù)據(jù)塊,得到的加密結(jié)果為第一簽名結(jié)果,將所述第一簽名結(jié)果發(fā)送給卡外設(shè)備,將相互認(rèn)證標(biāo)識(shí)置位,清除所述第一隨機(jī)數(shù)和所述第二隨機(jī)數(shù),然后返回S3。
11.按權(quán)利要求10所述的方法,其特征在于, 所述根據(jù)所述卡片保密數(shù)據(jù)和所述卡外設(shè)備保密數(shù)據(jù)生成會(huì)話密鑰,具體包括,所述卡外設(shè)備保密數(shù)據(jù)與所述卡片保密數(shù)據(jù)異或運(yùn)算,得到異或運(yùn)算結(jié)果,然后根據(jù)需要生成的會(huì)話密鑰類型設(shè)置相應(yīng)的計(jì)數(shù)值,將異或運(yùn)算結(jié)果與所述計(jì)數(shù)值順序拼接,拼接結(jié)果用第一算法計(jì)算, 得到第三計(jì)算結(jié)果,獲取所述第三計(jì)算結(jié)果中的預(yù)設(shè)字節(jié)數(shù)據(jù),將其保存為會(huì)話密鑰。
全文摘要
本發(fā)明公開(kāi)一種智能卡安全通訊的方法,涉及信息安全領(lǐng)域??山鉀Q通訊數(shù)據(jù)被監(jiān)聽(tīng)或截取的問(wèn)題。采用本發(fā)明的方法,能夠?yàn)榭ㄆ峁┮欢ūU系陌踩ㄐ艡C(jī)制,通過(guò)發(fā)起一個(gè)會(huì)話,通訊雙方互相認(rèn)證,確定對(duì)方身份的合法性和通訊數(shù)據(jù)的完整性,并為后續(xù)的通訊提供安全約束,從而提高了通訊的安全性。
文檔編號(hào)H04L9/08GK103095460SQ20131002354
公開(kāi)日2013年5月8日 申請(qǐng)日期2013年1月22日 優(yōu)先權(quán)日2013年1月22日
發(fā)明者陸舟, 于華章 申請(qǐng)人:飛天誠(chéng)信科技股份有限公司