一種密鑰加載方法及設(shè)備的制造方法
【專利摘要】一種密鑰加載方法及設(shè)備,用于增強TPM加載密鑰的能力,從而提高系統(tǒng)的安全性。該方法包括:TPM確定所述TPM內(nèi)部的第一存儲器中留存的用于加載密鑰的空間的可用容量小于等于第一預(yù)設(shè)容量;所述TPM將至少一個第一密鑰存儲到第二存儲器;其中,所述第二存儲器位于所述TPM外部,所述至少一個第一密鑰包括待加載到所述第一存儲器的密鑰和/或已加載在所述第一存儲器中的密鑰。
【專利說明】
一種密鑰加載方法及設(shè)備
技術(shù)領(lǐng)域
[0001 ]本發(fā)明涉及安全存儲技術(shù)領(lǐng)域,特別涉及一種密鑰加載方法及設(shè)備。
【背景技術(shù)】
[0002]可信平臺模塊(Trusted Platform Module,TPM)是可信計算平臺的核心,TPM安全芯片為應(yīng)用(APP)提供密鑰安全保護和可信執(zhí)行環(huán)境支撐。
[0003]隨著電子技術(shù)的快速發(fā)展,片上系統(tǒng)(System-on-a_Chip,SoC)這個概念也隨之誕生,SoC是在一個芯片上實現(xiàn)一個完整的用戶系統(tǒng),可以實現(xiàn)控制、存貯、輸入輸出、數(shù)字信號處理等功能。現(xiàn)場可編程門陣列(Field — Programmable Gate Array,F(xiàn)PGA)經(jīng)過多年的改進,其內(nèi)部的邏輯單元以及集成度也越來越強大,所以在FPGA上實現(xiàn)SoC是一個必然趨勢。基于FPGA實現(xiàn)的TPM,可以通過通用串行總線(Universal Serial Bus,USB)等多種接口連接到個人計算機(PC)、移動終端等不同的設(shè)備,并通過TPM提供密鑰安全存儲、加解密、安全度量、或身份認證等功能,對這些設(shè)備和用戶信息進行安全保護。
[0004]然而,F(xiàn)PGA的片內(nèi)隨機存取存儲器(Random-Access Memory,RAM)空間是有限的,預(yù)留出來用于TPM加載密鑰的空間就更少,如果FPGA的片內(nèi)RAM里用于TPM加載密鑰的空間已滿,若再有應(yīng)用試圖通過TPM加載密鑰,則TPM只能返回空間已滿的錯誤碼,無法加載新的密鑰。這樣顯然給TPM的使用帶來了較大的限制,使得TPM無法為較多的應(yīng)用提供密鑰安全使用功能,降低了系統(tǒng)的安全性。
【發(fā)明內(nèi)容】
[0005]本發(fā)明實施例提供一種密鑰加載方法及設(shè)備,用于增強TPM加載密鑰的能力,從而提尚系統(tǒng)的安全性。
[0006]第一方面,提供一種密鑰加載方法,該方法包括:TPM確定TPM內(nèi)部的第一存儲器中留存的用于加載密鑰的空間的可用容量小于等于第一預(yù)設(shè)容量,則TPM將至少一個第一密鑰存儲到第二存儲器。其中,第二存儲器位于TPM外部,至少一個第一密鑰包括待加載到第一存儲器的密鑰和/或已加載在第一存儲器中的密鑰。
[0007]本發(fā)明實施例中,如果TPM內(nèi)部的第一存儲器中用于TPM加載密鑰的空間的容量小于等于第一預(yù)設(shè)容量,則TPM可以將至少一個第一密鑰存儲到位于TPM外部的第二存儲器,即,通過利用TPM外部的存儲器,擴展了用于加載密鑰的空間,提升了TPM加載密鑰的能力,使得TPM可以加載更多的密鑰,可以為更多的應(yīng)用提供密鑰安全使用功能,也就提升了系統(tǒng)的安全性。
[0008]結(jié)合第一方面,在第一方面的第一種可能的實現(xiàn)方式中,TPM將至少一個第一密鑰存儲到第二存儲器,可以通過以下方式實現(xiàn):TPM對至少一個第一密鑰分別進行加密,得到至少一個密文,TPM將至少一個密文存儲到第二存儲器。
[0009]TPM在將第一密鑰存儲到第二存儲器時,可以是對第一密鑰加密后再進行存儲,這樣可以提高存儲的第一密鑰的安全性,盡量避免第一密鑰在存儲的過程中被盜取。
[0010]結(jié)合第一方面的第一種可能的實現(xiàn)方式,在第一方面的第二種可能的實現(xiàn)方式中,TPM對至少一個第一密鑰分別進行加密,得到至少一個密文,可以通過以下方式實現(xiàn):TPM根據(jù)至少一個第一密鑰的句柄,生成用于對至少一個第一密鑰進行加密的至少一個第二密鑰,TPM通過至少一個第二密鑰對至少一個第一密鑰及至少一個第一密鑰的上下文進行加密,得到至少一個密文。其中每個第二密鑰用于對一個第一密鑰及該第一密鑰的上下文進行加密,以得到該第一密鑰的密文。
[0011]TPM可以根據(jù)一個第一密鑰的句柄來生成用于對該密鑰進行加密的第二密鑰,提供了一種獲得用于對第一密鑰進行加密的第二密鑰的方式,且直接根據(jù)第一密鑰的句柄來生成第二密鑰即可,無需額外獲取其他的信息來生成第二密鑰,方式較為簡單,所需的信息較少。
[0012]結(jié)合第一方面或第一方面的第一種可能的實現(xiàn)方式或第二種可能的實現(xiàn)方式,在第一方面的第三種可能的實現(xiàn)方式中,TPM在將至少一個第一密鑰存儲到第二存儲器之前,還可以對至少一個第一密鑰及至少一個第一密鑰的上下文進行哈希運算,得到至少一個哈希值,并存儲至少一個哈希值。其中,在進行哈希運算時,是對每個第一密鑰及該第一密鑰的上下文進行哈希運算,得到該第一密鑰的哈希值。
[0013]TPM可以對第一密鑰及第一密鑰的上下文進行哈希運算,得到第一密鑰的哈希值,該哈希值主要是為了驗證第一密鑰是否被篡改,比如,在后續(xù)對第一密鑰的密文解密后也會得到第一密鑰和第一密鑰的上下文,TPM也可以對第一密鑰和第一密鑰的上下文進行哈希運算,TPM可以將加密過程中得到的第一密鑰的哈希值和解密過程中得到的第一密鑰的哈希值進行比較,如果二者一致,則可以確定第一密鑰的密文在存儲的過程中安全,未被篡改,可以繼續(xù)使用,如果二者不一致,則可以認為第一密鑰此時已經(jīng)不安全,可能已被篡改。通過這種方式,進一步提高了密鑰的安全性。
[0014]結(jié)合第一方面或第一方面的第一種可能的實現(xiàn)方式或第二種可能的實現(xiàn)方式或第三種可能的實現(xiàn)方式,在第一方面的第四種可能的實現(xiàn)方式中,TPM還可以確定待獲取的第三密鑰位于第二存儲器中,TPM從第二存儲器中獲取第三密鑰。
[0015]如果需要使用存儲在第二存儲器中的第三密鑰,則TPM可以在確定第三密鑰存儲在第二存儲器之后,從第二存儲器中獲取第三密鑰,即TPM不僅具有將密鑰存儲到第二存儲器的能力,還具有從第二存儲器中獲取所存儲的密鑰的能力,從而TPM可以在暫時不使用時將密鑰存儲到第二存儲器,以節(jié)省第一存儲器的空間,在要使用時可以從第二存儲器中取出密鑰,不會影響正常使用。
[0016]結(jié)合第一方面的第四種可能的實現(xiàn)方式,在第一方面的第五種可能的實現(xiàn)方式中,TPM從第二存儲器中獲取第三密鑰,可以通過以下方式實現(xiàn):TPM從第二存儲器中獲取第三密鑰的密文,TPM對第三密鑰的密文進行解密,獲得第三密鑰及第三密鑰的上下文。
[0017]因為為了提高密鑰的安全性,在將密鑰存儲到第二存儲器時是將密鑰加密后進行的存儲,因此TPM從第二存儲器中獲取的可能是第三密鑰的密文,那么TPM在獲取第三密鑰的密文后可以對第三密鑰的密文進行解密,從而可以獲得第三密鑰和第三密鑰的上下文。
[0018]結(jié)合第一方面的第五種可能的實現(xiàn)方式,在第一方面的第六種可能的實現(xiàn)方式中,TPM對第三密鑰的密文進行解密,獲得第三密鑰及所述第三密鑰的上下文,可以通過以下方式實現(xiàn):TPM根據(jù)第三密鑰的句柄,生成用于對第三密鑰的密文進行解密的第四密鑰,TPM通過第四密鑰對第三密鑰的密文進行解密,得到第三密鑰及第三密鑰的上下文。
[0019]在對第三密鑰進行加密時,可能采用的是根據(jù)第三密鑰的句柄生成的密鑰對第三密鑰進行的加密,那么在對第三密鑰的密文進行解密時,也可以根據(jù)第三密鑰的句柄生成用于解密的第四密鑰,這樣加密的密鑰和解密的密鑰可以對應(yīng),從而可以對第三密鑰的密文進行正確的解密。
[0020]結(jié)合第一方面的第五種可能的實現(xiàn)方式或第六種可能的實現(xiàn)方式,在第一方面的第七種可能的實現(xiàn)方式中,在得到第三密鑰及第三密鑰的上下文之后,TPM還可以對第三密鑰及第三密鑰的上下文進行哈希運算,得到第三密鑰的哈希值,TPM可以將計算得到的第三密鑰的哈希值與存儲的第三密鑰的哈希值進行比較,判斷二者是否一致,若二者一致,則TPM可以將第三密鑰及第三密鑰的上下文加載到第一存儲器。其中,存儲的第三密鑰的哈希值可以是在將第三密鑰存儲到第二存儲器的過程中生成的。
[0021]在前面介紹了,在存儲第三密鑰時,可以對第三密鑰和第三密鑰的上下文進行哈希運算,得到的哈希值就是為了在解密時對第三密鑰進行驗證,那么在解密時,也可以對第三密鑰和第三密鑰的上下文進行哈希運算,TPM可以將加密過程中得到的哈希值和解密過程中得到的哈希值進行比較,如果二者一致,那么可以確定第三密鑰未被篡改,即確定第三密鑰安全,則可以繼續(xù)使用第三密鑰,而如果二者不一致,則可以認為第三密鑰不安全,比如可能被篡改,則可能不會再繼續(xù)使用第三密鑰,以保障系統(tǒng)的安全。
[0022]結(jié)合第一方面的第七種可能的實現(xiàn)方式,在第一方面的第八種可能的實現(xiàn)方式中,在判斷二者是否一致之后,若二者不一致,則TPM可以丟棄第三密鑰及第三密鑰的上下文。
[0023]如果二者不一致,則可以認為第三密鑰不安全,比如可能被篡改,則可能不會再繼續(xù)使用第三密鑰,為了保證系統(tǒng)安全,TPM可以丟棄第三密鑰和第三密鑰的上下文,以防止系統(tǒng)被可能的病毒侵襲。
[0024]第二方面,提供一種TPM,包括第一存儲器和處理器。其中,第一存儲器可以用于存儲密鑰,處理器可以用于確定第一存儲器中留存的用于加載密鑰的空間的可用容量小于等于第一預(yù)設(shè)容量,將至少一個第一密鑰存儲到第二存儲器。第二存儲器位于TPM外部,至少一個第一密鑰包括新生成的密鑰和/或加載在第一存儲器中的密鑰。
[0025]結(jié)合第二方面,在第二方面的第一種可能的實現(xiàn)方式中,處理器用于將至少一個第一密鑰存儲到第二存儲器,可以通過以下方式實現(xiàn):處理器對至少一個第一密鑰分別進行加密,得到至少一個密文,處理器將至少一個密文存儲到第二存儲器。
[0026]結(jié)合第二方面的第一種可能的實現(xiàn)方式,在第二方面的第二種可能的實現(xiàn)方式中,處理器用于對至少一個第一密鑰分別進行加密,得到至少一個密文,可以通過以下方式實現(xiàn):處理器根據(jù)至少一個第一密鑰的句柄,生成用于對至少一個第一密鑰進行加密的至少一個第二密鑰,處理器通過至少一個第二密鑰對至少一個第一密鑰及至少一個第一密鑰的上下文進行加密,得到至少一個密文。其中每個第二密鑰用于對一個第一密鑰及該第一密鑰的上下文進行加密,以得到該第一密鑰的密文。
[0027]結(jié)合第二方面或第二方面的第一種可能的實現(xiàn)方式或第二種可能的實現(xiàn)方式,在第二方面的第三種可能的實現(xiàn)方式中,處理器還可以用于:在將至少一個第一密鑰存儲到第二存儲器之前,對至少一個第一密鑰及至少一個第一密鑰的上下文進行哈希運算,得到至少一個哈希值,存儲至少一個哈希值。其中,在進行哈希運算時,是對每個第一密鑰及該第一密鑰的上下文進行哈希運算,得到該第一密鑰的哈希值。
[0028]結(jié)合第二方面或第二方面的第一種可能的實現(xiàn)方式或第二種可能的實現(xiàn)方式或第三種可能的實現(xiàn)方式,在第二方面的第四種可能的實現(xiàn)方式中,處理器還可以用于:確定待獲取的第三密鑰位于第二存儲器中,從第二存儲器中獲取第三密鑰。
[0029]結(jié)合第二方面的第四種可能的實現(xiàn)方式,在第二方面的第五種可能的實現(xiàn)方式中,處理器用于從所述第二存儲器中獲取所述第三密鑰,可以通過以下方式實現(xiàn):處理器從第二存儲器中獲取第三密鑰的密文,對第三密鑰的密文進行解密,獲得第三密鑰及第三密鑰的上下文。
[0030]結(jié)合第二方面的第五種可能的實現(xiàn)方式,在第二方面的第六種可能的實現(xiàn)方式中,處理器用于對所述第三密鑰的密文進行解密,獲得所述第三密鑰及所述第三密鑰的上下文,可以通過以下方式實現(xiàn):處理器根據(jù)第三密鑰的句柄,生成用于對第三密鑰的密文進行解密的第四密鑰,處理器通過第四密鑰對第三密鑰的密文進行解密,得到第三密鑰及第三密鑰的上下文。
[0031]結(jié)合第二方面的第五種可能的實現(xiàn)方式或第六種可能的實現(xiàn)方式,在第二方面的第七種可能的實現(xiàn)方式中,處理器還可以用于:在得到第三密鑰及第三密鑰的上下文之后,對第三密鑰及第三密鑰的上下文進行哈希運算,得到第三密鑰的哈希值,將計算得到的第三密鑰的哈希值與存儲的第三密鑰的哈希值進行比較,判斷二者是否一致,若二者一致,則將第三密鑰及第三密鑰的上下文加載到第一存儲器。其中,存儲的第三密鑰的哈希值是在將第三密鑰存儲到第二存儲器的過程中生成的。
[0032]結(jié)合第二方面的第七種可能的實現(xiàn)方式,在第二方面的第八種可能的實現(xiàn)方式中,處理器還可以用于:在判斷二者是否一致之后,若二者不一致,則丟棄第三密鑰及第三密鑰的上下文。
[0033]第三方面,提供一種開發(fā)板,該開發(fā)板可以包括第二存儲器和TPM。其中,第二存儲器可以用于存儲密鑰,TPM可以用于確定TPM的第一存儲器中留存的用于加載密鑰的空間的可用容量小于等于第一預(yù)設(shè)容量,將至少一個第一密鑰存儲到第二存儲器。至少一個第一密鑰包括待加載到第一存儲器的密鑰和/或已加載在第一存儲器中的密鑰。
[0034]結(jié)合第三方面,在第三方面的第一種可能的實現(xiàn)方式中,該開發(fā)板可以為FPGA開發(fā)板。
【附圖說明】
[0035]為了更清楚地說明本發(fā)明實施例的技術(shù)方案,下面將對本發(fā)明實施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面所介紹的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0036]圖1為本發(fā)明實施例提供的系統(tǒng)架構(gòu)圖;
[0037]圖2為本發(fā)明實施例提供的TPM模塊及第二存儲器的一種結(jié)構(gòu)圖;
[0038]圖3為本發(fā)明實施例提供的密鑰加載方法的一種流程圖;
[0039]圖4為本發(fā)明實施例提供的應(yīng)用使用密鑰的方法的一種流程圖;
[0040]圖5為本發(fā)明實施例提供的將第一存儲器中的密鑰搬移到第二存儲器的方法的一種流程圖;
[0041 ]圖6為本發(fā)明實施例提供的將第二存儲器中的密鑰重新加載到第一存儲器的方法的一種流程圖;
[0042]圖7為本發(fā)明實施例提供的TPM的一種結(jié)構(gòu)圖;
[0043]圖8為本發(fā)明實施例提供的開發(fā)板的一種結(jié)構(gòu)圖。
【具體實施方式】
[0044]為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述。
[0045]本發(fā)明實施例中,“多個”是指兩個或兩個以上?!昂?或”,描述關(guān)聯(lián)對象的關(guān)聯(lián)關(guān)系,表示可以存在三種關(guān)系,例如,A和/Sb,可以表示:單獨存在A,同時存在A和B,單獨存在B這三種情況。另外,字符,如無特殊說明,一般表示前后關(guān)聯(lián)對象是一種“或”的關(guān)系。
[0046]下面請參見圖1,介紹本發(fā)明實施例提供的系統(tǒng)架構(gòu),該架構(gòu)可以包括終端設(shè)備和開發(fā)板,該開發(fā)板以FPGA開發(fā)板為例,該開發(fā)板上可以設(shè)置有FPGA模塊,例如FPGA模塊的一種實現(xiàn)形式可以是FPGA芯片,此時FPGA芯片中可以包括TPM模塊,TPM模塊即可用于完成TPM的功能,當然FPGA芯片也還可以用于完成一些其他功能,比如FPGA芯片還可以包括一些其他的模塊,本發(fā)明實施例不作限制。
[0047]可選的,終端設(shè)備中可以安裝一個或多個應(yīng)用,其中的部分應(yīng)用或者全部應(yīng)用在使用密鑰時可能需要TPM為其加載密鑰。那么應(yīng)用可以通過可信計算組織軟件站(TrustedComputing Group Software Stack,TSS)與TPM進行交互。以終端設(shè)備和開發(fā)板通過USB連接為例,終端設(shè)備可以設(shè)置USB接口,開發(fā)板上可以設(shè)置USB控制芯片,從而終端設(shè)備和開發(fā)板可以通過USB連接實現(xiàn)通信。當然終端設(shè)備和開發(fā)板的通信方式不限于USB,圖1只是舉例。
[0048]從圖1可以看到,TPM模塊內(nèi)部可以具有第一存儲器,一般來說,應(yīng)用要使用密鑰時,需要TPM模塊將密鑰進行加載,之后才可以使用,那么第一存儲器的全部區(qū)域或者部分區(qū)域就可以預(yù)留用于加載密鑰,可選的,第一存儲器例如可以是易失性存儲器,例如可以包括隨機存取存儲器(Random Access Memory,RAM),或者也可以包括其他可能的易失性存儲器。需要注意的是,加載密鑰和存儲密鑰是不同的概念,例如,TPM模塊加載的密鑰可以存儲在TPM模塊內(nèi)部的其他存儲器中,例如可以存儲在TPM模塊內(nèi)部的非易失性存儲器中,或者也可以存儲在該開發(fā)板上的其他模塊中,或者也可以存儲在終端設(shè)備中,等等。另外該開發(fā)板上還可以設(shè)置有第二存儲器,第二存儲器可以位于TPM模塊外部,例如該第二存儲器可以認為是FPGA芯片的片外存儲器,本發(fā)明實施例可以利用第二存儲器中的部分區(qū)域或者全部區(qū)域來存儲對密鑰加密后得到的密文。
[0049]可選的,該開發(fā)板上還可以包括一些其他的模塊,例如圖1中所示的非易失性存儲器,例如非易失性存儲器可以包括可擦除可編程配置串行存儲器(Erasable programmableconfigurable serial,EPCS),或者也可以包括其他可能的非易失存儲器。另外該開發(fā)板還可以包括圖1中未示出的一些其他可能的模塊,本發(fā)明實施例不作限制。
[0050]可選的,圖1以該開發(fā)板是FPGA開發(fā)板為例,在實際應(yīng)用中,本發(fā)明實施例中的開發(fā)板不限于FPGA開發(fā)板,例如還可以是專門用于實現(xiàn)TPM功能的開發(fā)板,或者還可能是其他可能的能夠?qū)崿F(xiàn)TPM功能的開發(fā)板,等等。
[0051]請參見圖2,為本發(fā)明實施例提供的開發(fā)板上設(shè)置的TPM模塊及第二存儲器的一種結(jié)構(gòu)圖。
[0052]其中,TPM模塊可以包括加解密子模塊1、密鑰保存子模塊、密鑰恢復(fù)子模塊、用于存儲密鑰置換表的存儲子模塊(圖1中未示出存儲子模塊,只示出了密鑰置換表)、密鑰置換子模塊、及第一存儲器??蛇x的,TPM模塊中還可以包括用于存儲種子(seed)的種子子模塊。其中,存儲子模塊與第一存儲器是TPM模塊內(nèi)的兩個存儲區(qū)域。以上除了第一存儲器和存儲子模塊之外,均是本發(fā)明實施例在TPM模塊中新增的子模塊,TPM模塊中還可以包括一些TPM模塊中原有的子模塊,例如圖2中示出的加解密子模塊2和簽名子模塊,當然還可能包括一些TPM模塊中原有的其他子模塊,圖2中不再一一示出,對于這些TPM模塊中原有的子模塊的功能等也不做過多介紹,可參考現(xiàn)有技術(shù)。
[0053]加密時:
[0054]密鑰置換子模塊負責(zé)密鑰的換入和換出。在第一存儲器用于加載密鑰的空間不足時,密鑰置換子模塊可以選擇將第一存儲器中已加載的密鑰搬移到第二存儲器,或者密鑰置換子模塊也可以選擇將待加載到第一存儲器的密鑰搬移到第二存儲器。因為待加載到第一存儲器的密鑰很可能是應(yīng)用即將要使用的密鑰,如果將其搬移到第二存儲器,則很可能又需要很快將其搬移回第一存儲器,這樣應(yīng)用才可以使用,因此優(yōu)選的,可以選擇將第一存儲器中已加載的密鑰搬移到第二存儲器,下面以密鑰置換子模塊將第一存儲器中存儲的密鑰搬移到第二存儲器為例。密鑰置換子模塊可以根據(jù)存儲在第一存儲器中的密鑰加載表選擇要搬移到第二存儲器中的密鑰,密鑰加載表可以存儲已加載在第一存儲器中的每個密鑰的信息。例如密鑰置換子模塊可以選擇較長時間未使用的密鑰,或者可以選擇使用頻率較小的密鑰,等等。密鑰置換子模塊可以只選擇將一個密鑰搬移到第二存儲器,或者也可以選擇將多個密鑰搬移到第二存儲器,密鑰置換子模塊可以將選擇的密鑰及其上下文傳給密鑰保存子模塊,可選的,密鑰置換子模塊還可以修改密鑰加載表,例如密鑰加載表里可以存儲第一存儲器中加載的各個密鑰的上下文的句柄,還可以存儲每個密鑰在第一存儲器中的地址,在將一個密鑰搬移到第二存儲器后,密鑰置換子模塊例如可以將密鑰加載表里記載的該密鑰在第一存儲器中的地址設(shè)置為空,這樣就表明該密鑰已被搬移到第二存儲器,或者密鑰置換子模塊也可以為密鑰加載表中存儲的該密鑰的信息添加標識,以表明該密鑰已存儲到第二存儲器。
[0055]密鑰保存子模塊在接收待搬移到第二存儲器的密鑰及其上下文后,可以將接收的密鑰及其上下文傳給加解密子模塊I,加解密子模塊I可以利用待搬移到第二存儲器中的密鑰的上下文的句柄生成保護密鑰,為了區(qū)分不同的概念,將待搬移到第二存儲器中的密鑰稱為第一密鑰,將加解密子模塊I根據(jù)第一密鑰的上下文的句柄生成的保護密鑰稱為第二密鑰,加解密子模塊I在生成第二密鑰后,可以采用第二密鑰對該第二密鑰對應(yīng)的第一密鑰進行加密,得到該第一密鑰的密文。可選的,在存儲一個密鑰時,一般除了考慮密鑰本身之外還要考慮密鑰的上下文,因此,加解密子模塊I采用第二密鑰對該第二密鑰對應(yīng)的第一密鑰進行加密,可以是采用第二密鑰對該第二密鑰對應(yīng)的第一密鑰及該第一密鑰的上下文一起進行加密,以得到該第一密鑰的密文。在得到第一密鑰的密文后,加解密子模塊I可以將第一密鑰的密文傳給密鑰保存子模塊,密鑰保存子模塊可以將第一密鑰的密文存儲到第二存儲器。
[0056]可選的,seed可以是系統(tǒng)每次啟動時利用系統(tǒng)上電后的初始狀態(tài)產(chǎn)生的隨機數(shù),加解密子模塊I在生成第二密鑰時,可以根據(jù)第一密鑰的上下文的句柄來生成,或者也可以根據(jù)第一密鑰的上下文的句柄和種子子模塊中存儲的seed—起來生成,一般來說,根據(jù)第一密鑰的上下文的句柄和seed—起生成的第二密鑰一般都是對稱密鑰,這樣比較方便加密和解密。
[0057]可選的,密鑰保存子模塊在接收待搬移到第二存儲器的第一密鑰及其上下文后,除了可以將接收的第一密鑰及其上下文傳給加解密子模塊I之外,還可以對接收的每個第一密鑰和其上下文分別進行哈希(hash)運算,以得到每個密鑰的哈希值。密鑰保存子模塊可以將第一密鑰的哈希值、第一密鑰的上下文的句柄、及第一密鑰的密文在第二存儲器中的地址存儲在密鑰置換表中。其中,在加密過程中生成的第一密鑰的哈希值,可以用于在解密時對第一密鑰的安全性進行驗證。
[0058]解密時:
[0059]在要使用第二存儲器中存儲的第一密鑰時(其中,第二存儲器實際存儲的是第一密鑰的密文),需要先將第二存儲器中存儲的第一密鑰重新加載到第一存儲器。例如需要使用第二存儲器中存儲的第一密鑰I,則密鑰恢復(fù)子模塊根據(jù)密鑰置換表中記錄的第一密鑰的密文在第二存儲器中地址獲取存儲在第二存儲器中的第一密鑰I的密文,密鑰恢復(fù)子模塊可以調(diào)用加解密子模塊I對第一密鑰I的密文進行解密,得到第一密鑰I和第一密鑰I的上下文,加解密子模塊I可以將得到的第一密鑰I和第一密鑰I的上下文發(fā)送給密鑰恢復(fù)子模塊。密鑰恢復(fù)子模塊可以將第一密鑰I和第一密鑰I的上下文發(fā)送給密鑰置換子模塊,密鑰置換子模塊接收密鑰恢復(fù)子模塊發(fā)送的第一密鑰I和第一密鑰I的上下文,可以將第一密鑰I和第一密鑰I的上下文重新加載到第一存儲器??蛇x的,密鑰置換子模塊還可以修改密鑰加載表,以標識第一密鑰I已重新加載到第一存儲器??蛇x的,密鑰恢復(fù)子模塊在從第二存儲器中獲取第一密鑰I的密文后,可以在密鑰置換表中刪除第一密鑰I的相關(guān)信息。
[0060]可選的,加解密子模塊I需對第一密鑰I的密文進行解密,例如加解密子模塊I可以根據(jù)第一密鑰I的上下文的句柄生成與第一密鑰I對應(yīng)的第二密鑰I,加解密子模塊I可以采用第二密鑰I對第一密鑰I的密文進行解密?;蛘?,如果對第一密鑰I進行加密的第二密鑰I是根據(jù)第一密鑰I的上下文的句柄和seed生成的,那么加解密子模塊I可以根據(jù)第一密鑰I的上下文的句柄和seed生成與第一密鑰I對應(yīng)的第二密鑰I,并采用第二密鑰I對第一密鑰I的密文進行解密。
[0061]可選的,密鑰恢復(fù)子模塊在將第一密鑰I和第一密鑰I的上下文發(fā)送給密鑰置換子模塊之前,可以先對第一密鑰I和第一密鑰I的上下文進行哈希運算,在對密鑰進行加密和解密時可以采用相同的哈希算法。在對第一密鑰I和第一密鑰I的上下文進行哈希運算后,可以得到第一密鑰I的哈希值,而根據(jù)對加密過程的介紹可知,在存儲第一密鑰I和第一密鑰的上下文時,也根據(jù)第一密鑰I和第一密鑰I的上下文計算得到了哈希值,加密過程中得到的第一密鑰I的哈希值存儲在密鑰置換表中,那么密鑰恢復(fù)子模塊可以將解密過程中得到的第一密鑰I的哈希值和加密過程中得到的第一密鑰I的哈希值進行比較,以確定二者是否一致,如果一致,則可以確定第一密鑰I和第一密鑰I的上下文都未被篡改,可以確定第一密鑰I和第一密鑰I的上下文安全,則密鑰恢復(fù)子模塊可以將第一密鑰I和第一密鑰I的上下文發(fā)送給密鑰置換子模塊,而如果解密過程中得到的第一密鑰I的哈希值和加密過程中得到的第一密鑰I的哈希值不一致,則密鑰恢復(fù)子模塊可以確定第一密鑰I和/或第一密鑰I的上下文已被篡改,此時的第一密鑰I和/或第一密鑰I的上下文可能是不安全的,則密鑰恢復(fù)子模塊可以直接丟棄第一密鑰I和第一密鑰I的上下文,且可以向待使用第一密鑰I的應(yīng)用返回錯誤提示。
[0062]另外需注意的是,圖2所提供的各子模塊中,除了第一存儲器、第二存儲器、用于存儲seed的種子子模塊、以及用于存儲密鑰置換表的存儲子模塊等子模塊可以通過硬件實現(xiàn)夕卜,其他的子模塊既可以通過硬件方式實現(xiàn)也可以通過軟件方式實現(xiàn)。且以上對于TPM模塊所包括的子模塊的劃分方式及每個子模塊所完成的功能只是一種示例,在實際應(yīng)用中,如果按照以上方式在TPM模塊中劃分子模塊,則各子模塊所完成的功能也可以與如上介紹有所不同,或者還可以按照其他方式在TPM模塊中劃分不同的子模塊,本發(fā)明實施例均不作限制,只要TPM模塊整體能夠完成本發(fā)明實施例所提供的密鑰存儲方法即可。
[0063]另外,本發(fā)明實施例中提供的各個模塊以及子模塊的名稱不構(gòu)成對裝置的限定,在實際應(yīng)用時也可以為以上的模塊或子模塊命不同的名稱。
[0064]下面結(jié)合附圖介紹本發(fā)明實施例所提供的方法。
[0065]請參見圖3,提供一種密鑰加載方法,該方法可以通過圖1或圖2所示的TPM模塊和第二存儲器完成。該方法的流程描述如下:
[0066]步驟301:TPM確定TPM內(nèi)部的第一存儲器中留存的用于加載密鑰的空間的可用容量小于等于第一預(yù)設(shè)容量;
[0067]步驟302: TPM將至少一個第一密鑰存儲到第二存儲器;其中,第二存儲器位于TPM外部,至少一個第一密鑰包括待加載到第一存儲器的密鑰和/或已加載在第一存儲器中的密鑰。
[0068]其中,圖3中的TPM可以理解為圖1或圖2中的TPM模塊。
[0069]為了更為清楚地介紹圖3所述的密鑰加載方法,下面介紹幾個例子,這幾個例子涉及不同的處理流程,可以通過不同的側(cè)面來介紹圖3所述的密鑰加載方法??蛇x的,在下面的幾個例子中,繼續(xù)將需加載在第一存儲器的密鑰、即應(yīng)用使用的密鑰稱為第一密鑰,將用于對第一密鑰加密的密鑰稱為第二密鑰。
[0070]例I
[0071]請參見圖4,為安裝在終端設(shè)備中的應(yīng)用使用第一密鑰的過程。另外,為避免概念混淆,將圖4中的應(yīng)用稱為應(yīng)用I,將圖4中使用的第一密鑰稱為第一密鑰I。圖4的步驟介紹如下。
[0072]1、應(yīng)用I通過安裝的TSS向TPM模塊發(fā)送請求消息,該請求消息用于請求TPM模塊為應(yīng)用I創(chuàng)建第一密鑰。
[0073 ] 例如,應(yīng)用I在需要使用第一密鑰時,可以通過TSS向TPM模塊發(fā)送請求消息,TPM模塊接收請求消息后,即可生成第一密鑰。
[0074]2、TPM模塊接收請求消息后,創(chuàng)建第一密鑰I,且得到第一密鑰I的密鑰塊。
[0075]可選的,TPM創(chuàng)建第一密鑰I后,可以存儲第一密鑰I,例如可以存儲在TPM內(nèi)部的非易失性存儲器中,或者也可以將第一密鑰I存儲在其他模塊中,例如可以通過TSS進行存儲。
[0076]3、TPM模塊將第一密鑰I的密鑰塊通過TSS傳給應(yīng)用I。
[0077]4、應(yīng)用I通過TSS將第一密鑰I的密鑰塊傳給TPM模塊,并通知TPM模塊加載第一密鑰I。
[0078]應(yīng)用I若確定需要使用第一密鑰I,則可以通過TSS將第一密鑰I的密鑰塊傳給TPM模塊,這樣TPM模塊就可以知曉要加載第一密鑰I,其中,TPM模塊加載第一密鑰I,在TPM加載第一密鑰I后才可以使用第一密鑰I。
[0079]5、在TPM模塊加載第一密鑰I時,確定第一存儲器中預(yù)留的用于加載密鑰的空間,例如預(yù)留的用于加載密鑰的槽(slot),的可用容量不足,比如可用容量小于等于第一預(yù)設(shè)容量,則TPM模塊可以將至少一個第一密鑰搬移到第二存儲器。其中,第一預(yù)設(shè)容量可以由用戶設(shè)定,或者也可以由開發(fā)者設(shè)定,或者也可以由TPM模塊自動設(shè)定。
[0080]可選的,在TPM模塊加載第一密鑰I時,若確定第一存儲器中預(yù)留的用于加載密鑰的空間的可用容量小于等于第一預(yù)設(shè)容量,則TPM模塊可以主動將至少一個第一密鑰存儲到第二存儲器,或者TPM模塊也可以通過TSS向應(yīng)用I返回錯誤信息,TSS接收錯誤信息后,若確定需要使用第一密鑰I,則TSS可以指示TPM模塊將至少一個第一密鑰存儲到第二存儲器,那么TPM模塊在接收TSS的指示后,可以將至少一個第一密鑰存儲到第二存儲器,而如果TSS不指示TPM模塊將至少一個第一密鑰存儲到第二存儲器,或者如果TSS指示TPM模塊無需將第一密鑰存儲到第二存儲器,則TPM模塊可以不進行操作,即可以不向第二存儲器存儲任何的第一密鑰,在這種情況下,TPM模塊可能也無法將第一密鑰I加載到第一存儲器,則第一密鑰I可能無法使用。
[0081]可選的,至少一個第一密鑰中可以包括第一密鑰I,也可以不包括第一密鑰I。例如,因為第一密鑰I可能是待加載而又無法加載在第一存儲器中的第一密鑰,則TPM模塊可以直接將第一密鑰I存儲到第二存儲器,這樣無需挪動第一存儲器中原有的第一密鑰,方式較為簡單?;蛘呃纾虻谝幻荑€I是待加載的密鑰,而一般來說待加載的密鑰可能都是應(yīng)用即將使用的密鑰,而應(yīng)用在使用密鑰時需要密鑰加載在第一存儲器,否則可能無法使用,因此,TPM模塊也可以從第一存儲器中已加載的第一密鑰中選擇至少一個第一密鑰存儲到第二存儲器,而將第一密鑰I加載到第一存儲器,以方便及時使用第一密鑰I,例I以這種情況為例。
[0082]可選的,如果TPM模塊從第一存儲器中已加載的第一密鑰中選擇至少一個第一密鑰存儲到第二存儲器,那么TPM模塊在選擇至少一個第一密鑰時,可以選擇較長時間未使用的第一密鑰,例如可以預(yù)先設(shè)定預(yù)設(shè)時長,預(yù)設(shè)時長比如可以由用戶設(shè)定,或者也可以由開發(fā)者設(shè)定,或者也可以由TPM模塊自動設(shè)定,TPM模塊可以選擇將預(yù)設(shè)時長內(nèi)未使用的第一密鑰存儲到第二存儲器。因為較長時間未使用的第一密鑰可能在短時間內(nèi)被使用的可能性較小,將這樣的第一密鑰存儲到第二存儲器,可以盡量避免在存儲之后又因為馬上要使用而又要搬移到第一存儲器,盡量減少TPM模塊的工作量?;蛘呃?,TPM模塊可以選擇將使用頻率小于預(yù)設(shè)頻率的至少一個第一密鑰存儲到第二存儲器,例如預(yù)設(shè)頻率可以預(yù)先設(shè)定,比如可以由TPM模塊自動設(shè)定,或者也可以由開發(fā)者設(shè)定,或者也可以由用戶設(shè)定,因為使用頻率較低的第一密鑰可能在短時間內(nèi)被使用的可能性較小,將這樣的第一密鑰存儲到第二存儲器,可以盡量避免在存儲之后又因為馬上要使用而又要搬移到第一存儲器,盡量減少TPM模塊的工作量。當然,TPM模塊也可以有其他的選擇至少一個第一密鑰的方式,本發(fā)明實施例不作限制。
[0083]可選的,例I中是以第一存儲器預(yù)留的用于加載密鑰的空間的可用容量不足為例進行的介紹,在TPM模塊加載第一密鑰I時,若確定第一存儲器中預(yù)留的用于加載密鑰的空間足夠,即若確定第一存儲器中預(yù)留的用于加載密鑰的空間的可用容量大于第一預(yù)設(shè)容量,那么TPM模塊可以直接將第一密鑰I加載到第一存儲器。
[0084]6、TPM模塊將第一密鑰I加載到第一存儲器。在步驟5中介紹了,例I以將第一存儲器中已加載的至少一個第一密鑰存儲到第二存儲器,而將第一密鑰I加載到第一存儲器為例,即例I中至少一個第一密鑰中不包括第一密鑰I。
[0085]7、TPM模塊將加載第一密鑰I后得到的第一密鑰I的上下文的句柄通過TSS返回給應(yīng)用I,則應(yīng)用I可以通過TSS接收第一密鑰I的上下文的句柄。
[0086]在TPM模塊將第一密鑰I加載到第一存儲器后,TPM模塊可以將加載第一密鑰I后得到的第一密鑰I的上下文的句柄通過TSS返回給應(yīng)用I,且TPM模塊可以將第一密鑰I的上下文的句柄以及第一密鑰I在第一存儲器中的地址存儲在密鑰加載表中,這樣后續(xù)TPM模塊就可以根據(jù)第一密鑰I的上下文的句柄在第一存儲器中查找第一密鑰I。另外,為盡量減少特征的名稱的長度,在本發(fā)明實施例中也可以將密鑰的上下文的句柄這一特征稱為密鑰的句柄,例如,可以將第一密鑰I的上下文的句柄稱為第一密鑰I的句柄。
[0087]8、應(yīng)用I通過TSS將待加密的信息以及第一密鑰I的句柄發(fā)送給TPM模塊,則TPM模塊可以通過TSS接收將待加密的信息以及第一密鑰I的句柄。
[0088]其中,加解密過程可以由TPM模塊完成,因此應(yīng)用I可以通過TSS將待通過第一密鑰I加密的信息以及第一密鑰I的句柄發(fā)送給TPM模塊,這樣TPM模塊可以進行加密。
[0089 ] 9、TPM模塊通過第一密鑰I對待加密的信息進行加密。
[0090]其中,TPM模塊可以根據(jù)接收的第一密鑰I的句柄在密鑰加載表里查找第一密鑰I在第一存儲器中的地址,因為例I是以將第一密鑰I加載在第一存儲器為例,因此TPM模塊可以根據(jù)密鑰加載表里記載的第一密鑰I的地址從第一存儲器中獲取第一密鑰I,TPM模塊可以根據(jù)獲取的第一密鑰I對接收的待加密的信息進行加密。
[0091]可選的,TPM模塊根據(jù)第一密鑰I的句柄在密鑰加載表里查找第一密鑰I在第一存儲器中的地址,若根據(jù)密鑰加載表的記錄確定第一密鑰I搬移到了第二存儲器,則還需要先從第二存儲器中將第一密鑰I重新加載到第一存儲器,之后再從第一存儲器中獲取第一密鑰I,并根據(jù)獲取的第一密鑰I對接收的待加密的信息進行加密。
[0092]10、TPM模塊將通過第一密鑰I加密后的待加密的信息通過TSS發(fā)送給應(yīng)用I,應(yīng)用I可以通過TSS接收通過第一密鑰I加密后的待加密的信息。這樣就完成了信息的加密。
[0093]11、第一密鑰I使用結(jié)束后,TPM模塊可以清除第一密鑰I的相關(guān)信息。
[0094]步驟11為可選步驟??蛇x的,應(yīng)用I在無需使用第一密鑰I后,可以通過TSS通知TPM模塊從第一存儲器中卸載第一密鑰I,則TPM模塊可以根據(jù)應(yīng)用I的請求卸載第一密鑰1可選的,TPM模塊從第一存儲器中卸載第一密鑰I后,還可以從密鑰加載表中刪除第一密鑰I的信息,相當于TPM模塊不再存儲第一密鑰I。如果應(yīng)用I下次又要使用第一密鑰I,因為應(yīng)用I存儲了第一密鑰I的密鑰塊,則應(yīng)用I可以再通過TSS把第一密鑰I的密鑰塊傳給TPM模塊,TPM模塊可以重新加載第一密鑰I。即,如果一個應(yīng)用第二次使用同一個密鑰,可以無需再讓TPM模塊重新生成密鑰,減少TPM模塊的工作量。
[0095]另外,例I中的情況是有新的密鑰要加載時可以確認第一存儲器中預(yù)留的用于加載密鑰的空間的可用容量是否小于等于第一預(yù)設(shè)容量,這只是一種示例,比如,TPM模塊也可以實時地、或者周期性地監(jiān)控第一存儲器,以確認第一存儲器中預(yù)留的用于加載密鑰的空間的可用容量是否小于等于第一預(yù)設(shè)容量,如果第一存儲器中預(yù)留的用于加載密鑰的空間的可用容量小于等于第一預(yù)設(shè)容量,則TPM模塊就可以將第一存儲器中已加載的全部第一密鑰或者部分第一密鑰搬移到第二存儲器,這樣,無需有密鑰待加載時再進行密鑰的搬移,可以較為及時地加載待加載的密鑰。
[0096]例2
[0097]請參見圖5,為將第一存儲器中的密鑰搬移到第二存儲器的過程,在例2的介紹過程中,以該方法依托于圖2的架構(gòu)為例。另外,為避免概念混淆,將圖5中待搬移到第二存儲器的第一密鑰稱為第一密鑰2。圖5是以將一個第一密鑰(即第一密鑰2)搬移到第二存儲器為例,如果有多個第一密鑰需要從第一存儲器搬移到第二存儲器,每個第一密鑰的搬移過程都可以參考圖5所介紹的過程,且多個第一密鑰在搬移時可以串行執(zhí)行,以盡量避免出錯,或者也可以并行執(zhí)行,以提高效率。圖5的步驟介紹如下。
[0098]1、密鑰置換子模塊根據(jù)第一存儲器中存儲的密鑰加載表,獲取第一密鑰2的句柄。
[0099]可選的,密鑰置換子模塊獲取的句柄可以是在預(yù)設(shè)時長內(nèi)未使用的第一密鑰的句柄。若在預(yù)設(shè)時長內(nèi)未使用的第一密鑰有多個,則密鑰置換子模塊可以將句柄其全部獲取,或者也可以從中獲取部分第一密鑰的句柄。例2以密鑰置換子模塊獲取第一密鑰2的句柄為例。
[0100]2、密鑰置換子模塊將第一密鑰2的句柄發(fā)給密鑰保存子模塊。
[0101]3、密鑰保存子模塊根據(jù)接收的第一密鑰2的句柄,從第一存儲器中獲取第一密鑰2及第一密鑰2的上下文。
[0102]4、密鑰保存子模塊將第一密鑰2及第一密鑰2的上下文傳給加解密子模塊I。
[0103]可選的,密鑰保存子模塊除了可以將第一密鑰2和第一密鑰2的上下文傳給加解密子模塊I之外,還可以對第一密鑰2和第一密鑰2進行哈希運算,得到第一密鑰2的哈希值,例如將此時得到的哈希值稱為哈希值I。
[0104]5、加解密子模塊I對第一密鑰2及第一密鑰2的上下文進行加密,得到第一密鑰2的密文。
[0105]可選的,加解密子模塊I可以以第一密鑰2的句柄作為輸入,生成用于對第一密鑰2及第一密鑰2的上下文進行加密的第二密鑰,例如將該第二密鑰稱為第二密鑰I。
[0106]可替換的,加解密子模塊I也可以以第一密鑰2的句柄和種子子模塊中存儲的seed作為輸入,生成第二密鑰I。
[0107]加解密子模塊I可以通過第二密鑰I對第一密鑰2及第一密鑰2的上下文進行加密。
[0108]6、加解密子模塊I將第一密鑰2的密文傳給密鑰保存子模塊。
[0109]7、密鑰保存子模塊將第一密鑰2的密文存儲到第二存儲器。
[0110]可選的,密鑰保存子模塊可以在密鑰置換表中增加一個表項,該表項用于記錄第一密鑰2的相關(guān)信息,例如該表項中可以記錄第一密鑰2的句柄及第一密鑰2的密文在第二存儲器中的地址??蛇x的,如果密鑰保存子模塊還根據(jù)第一密鑰2和第一密鑰2的上下文進行哈希運算得到了哈希值I,則該表項中還可以記錄哈希值I。
[0111]8、密鑰保存子模塊通知加解密子模塊I銷毀第二密鑰I。
[0112]步驟8為可選步驟。銷毀第二密鑰I,可以避免第二密鑰I被盜取,從而可以在一定程度上保障存儲在第二存儲器中的第一密鑰2的密文的安全性。
[0113]可選的,密鑰保存子模塊可以通知密鑰置換子模塊修改密鑰加載表中記錄的第一密鑰2的信息,例如可以在密鑰加載表中將第一密鑰2在第一存儲器中的地址置為空,或者例如可以在密鑰加載表中將第一密鑰2標記為已搬移到第二存儲器。
[0114]例3
[0115]例如,當應(yīng)用需要使用某個第一密鑰時,若TPM模塊通過查找密鑰加載表發(fā)現(xiàn)該第一密鑰已加載但未存儲在第一存儲器,或者通過查找密鑰加載表確定該第一密鑰已搬移到第二存儲器,則TPM模塊可以主動將該第一密鑰從第二存儲器中重新加載到第一存儲器,例3以此情況為例,或者,若TPM模塊通過查找密鑰加載表發(fā)現(xiàn)該第一密鑰已加載但未存儲在第一存儲器,則TPM模塊可以通知TSS,若TSS確定要使用該第一密鑰,則TSS可以指示TPM模塊將該第一密鑰從第二存儲器中重新加載到第一存儲器?;蛘呃纾琓PM模塊也可以實時、或周期性地對第一存儲器進行監(jiān)控,若確定第一存儲器中預(yù)留的用于加載密鑰的空間的可用容量較多,例如大于第二預(yù)設(shè)容量,TPM模塊可以選擇將第二存儲器中存儲的全部密鑰或部分密鑰重新加載到第一存儲器。其中,第一預(yù)設(shè)容量與第二預(yù)設(shè)容量可以相同也可以不同,若不同的話,則第一預(yù)設(shè)容量可以小于第二預(yù)設(shè)容量。請參見圖6,為將第二存儲器中的密鑰重新加載到第一存儲器的過程,在例3的介紹過程中,繼續(xù)以該方法依托于圖2的架構(gòu)為例。另外,為避免概念混淆,將圖6中待重新加載到第一存儲器的第一密鑰稱為第一密鑰3 ο圖6是以將一個第一密鑰(即第一密鑰3)重新加載到第一存儲器為例,如果有多個第一密鑰需要從第二存儲器重新加載到第一存儲器,每個第一密鑰的重新加載的過程都可以參考圖6所介紹的過程,且多個第一密鑰在重新加載時可以串行執(zhí)行,以盡量避免出錯,或者也可以并行執(zhí)行,以提高效率。圖6的步驟介紹如下。
[0116]1、密鑰置換子模塊確定待重新加載的第一密鑰的句柄為第一密鑰3的句柄,則密鑰置換模塊根據(jù)第一密鑰3的句柄查找密鑰置換表,并將密鑰置換表中記錄的第一密鑰3的密文在第二存儲器中的地址發(fā)送給密鑰恢復(fù)子模塊,則密鑰恢復(fù)子模塊可以接收第一密鑰3的密文在第二存儲器中的地址。
[0117]可選的,密鑰置換子模塊如果在密鑰置換表中未查詢到第一密鑰3的句柄相關(guān)的表項,則可以返回錯誤信息。
[0118]2、密鑰恢復(fù)子模塊可以將第一密鑰3的密文發(fā)送給加解密子模塊I。
[0119]密鑰恢復(fù)子模塊根據(jù)接收的第一密鑰3的密文在第二存儲器的地址,可以從第二存儲器中獲取第一密鑰3的密文。
[0120]3、加解密子模塊I可以對第一密鑰3的密文進行解密。
[0121]可選的,加解密子模塊I可以將第一密鑰3的句柄作為輸入,生成用于對第一密鑰3的密文進行解密的保護密鑰,例如將該保護密鑰稱為第二密鑰2,加解密子模塊I可以通過第二密鑰2對第一密鑰3的密文進行解密,得到第一密鑰3及第一密鑰3的上下文。
[0122]可替換的,若在對第一密鑰3及第一密鑰3的上下文進行加密時所使用的保護密鑰是通過第一密鑰3的句柄和種子子模塊中存儲的種子生成的,那么加解密子模塊I可以將第一密鑰3的句柄和種子子模塊中存儲的種子作為輸入,生成用于對第一密鑰3的密文進行解密的第二密鑰2,加解密子模塊I可以通過第二密鑰2對第一密鑰3的密文進行解密,得到第一密鑰3及第一密鑰3的上下文。
[0123]4、加解密子模塊I可以將第一密鑰3及第一密鑰3的上下文發(fā)送給密鑰恢復(fù)子模塊。
[0124]5、密鑰恢復(fù)子模塊可以將第一密鑰3及第一密鑰3的上下文發(fā)送給密鑰置換子模塊。
[0125]可選的,在將第一密鑰3搬移到第二存儲器的過程中,若根據(jù)第一密鑰3和第一密鑰3進行了哈希運算,且在密鑰置換表中存儲了運算結(jié)果,例如為哈希值2,那么密鑰恢復(fù)子模塊在將第一密鑰3及第一密鑰3的上下文發(fā)送給密鑰置換子模塊之前,可以先根據(jù)第一密鑰3及第一密鑰3的上下文進行哈希運算,例如得到的哈希值稱為哈希值3。其中,針對同一個第一密鑰,在加密和解密過程中進行的哈希運算所采用的哈希算法可以相同。在得到哈希值3后,密鑰恢復(fù)子模塊可以將哈希值3和密鑰置換表中存儲的哈希值2進行比較,以判斷二者是否一致,如果二者一致,則可以認為第一密鑰3的密文在存儲的過程中未被篡改,傳輸過程也未出錯,則密鑰恢復(fù)子模塊可以將第一密鑰3及第一密鑰3的上下文發(fā)送給密鑰置換子模塊,而如果哈希值3和哈希值2不一致,則可以認為第一密鑰3的密文在存儲的過程中發(fā)生了錯誤,比如可能是存儲中出錯,或者也可能是被篡改,或者也可能在傳輸?shù)倪^程中發(fā)生了錯誤,總之第一密鑰3和/或第一密鑰3的上下文此時可能是不安全的,或者說第一密鑰3和/或第一密鑰3的上下文是錯誤的,無法正常使用,則密鑰恢復(fù)子模塊可以不將第一密鑰3及第一密鑰3的上下文發(fā)送給密鑰置換子模塊,比如密鑰恢復(fù)子模塊可以向密鑰置換子模塊則返回錯誤信息。可選的,如果哈希值3和哈希值2不一致,密鑰恢復(fù)子模塊可以丟棄第一密鑰3和第一密鑰3的上下文。
[0126]6、密鑰置換子模塊可以將第一密鑰3及第一密鑰3的上下文重新加載到第一存儲器。且密鑰置換子模塊可以修改密鑰加載表,例如可以在密鑰加載表中添加第一密鑰3在第一存儲器中的地址,或者可以刪除密鑰加載表中記錄的用于指示第一密鑰3已搬移到第二存儲器中的標記,或者可以在密鑰加載表中標記第一密鑰3已加載在第一存儲器。
[0127]可選的,密鑰置換子模塊在將第一密鑰3及第一密鑰3的上下文重新加載到第一存儲器之前,可以先確定第一存儲器中預(yù)留的用于加載密鑰的空間的可用容量是否大于第一預(yù)設(shè)容量,若第一存儲器中預(yù)留的用于加載密鑰的空間的可用容量大于第一預(yù)設(shè)容量,則密鑰置換模塊可以將第一密鑰3及第一密鑰3的上下文重新加載到第一存儲器,若第一存儲器中預(yù)留的用于加載密鑰的空間的可用容量小于等于第一預(yù)設(shè)容量,則密鑰置換模塊可以先從第一存儲器中選擇部分第一密鑰搬移到第二存儲器,再將第一密鑰3第一密鑰3的上下文重新加載到第一存儲器。其中,將第一存儲器中的第一密鑰搬移到第二存儲器的過程可參考例2的介紹。
[0128]7、密鑰置換子模塊可以通知加解密子模塊I銷毀第二密鑰2。
[0129]步驟7為可選步驟。銷毀第二密鑰2,可以避免第二密鑰2被盜取,也可以節(jié)省存儲空間。
[0130]本發(fā)明實施例中,TPM模塊除了可以將密鑰加載到第一存儲器之外,還可以將第一存儲器中無法加載的密鑰暫存儲到第二存儲器,提升了 TPM的加載能力,擴展了密鑰的存儲空間,也對TPM模塊所能夠完成的功能進行了改進,使得TPM的功能更加完善,提高了TPM模塊的處理效率。另外,無論是將密鑰存儲到第一存儲器還是第二存儲器,都可以由TPM模塊進行操作,中間無需TSS的參與,減少了運行在終端設(shè)備中的TSS與開發(fā)板上的TPM模塊進行交互的過程,節(jié)省傳輸資源,提高處理效率。在將密鑰存儲到第二存儲器之前對密鑰進行加密,且存儲到第二存儲器的密鑰的密文與終端設(shè)備相隔離,在一定程度上提高了密鑰的安全性。
[0131]請參見圖7,基于同一發(fā)明構(gòu)思,提供一種TPM,該TPM可以包括第一存儲器701和處理器702。
[0132]其中,處理器702可以包括中央處理器(CI3U)或特定應(yīng)用集成電路(Applicat1nSpecific Integrated Circuit,ASIC),可以包括一個或多個用于控制程序執(zhí)行的集成電路,可以是使用現(xiàn)場可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA)開發(fā)的硬件電路,可以是基帶芯片。
[0133]第一存儲器701可以包括易失性存儲器,例如可以包括隨機存取存儲器(RandomAccess Memory,RAM)等。第一存儲器701可以用于加載密鑰,還可以用于存儲如前所述的密鑰加載表,例如第一存儲器701中可以預(yù)留出部分空間或全部空間用于加載密鑰,如果第一存儲器701預(yù)留了部分空間用于加載密鑰,則第一存儲器701還可以存儲其他數(shù)據(jù)。
[0134]可選的,該TPM還可以包括一些對外接口,例如該TPM可以通過其中的部分接口與FPGA的第二存儲器進行通信等。
[0135]通過對處理器702進行設(shè)計編程,將前述所示的方法所對應(yīng)的代碼固化到芯片內(nèi),從而使芯片在運行時能夠執(zhí)行前述圖3-圖6所示的方法。如何對處理器702進行設(shè)計編程為本領(lǐng)域技術(shù)人員所公知的技術(shù),這里不再贅述。
[0136]該TPM可以用于執(zhí)行上述圖3-圖6所述的方法,例如可以是如前所述的TPM模塊,例如該TPM與圖1所示的TPM模塊可以是同一功能模塊,或者例如該TPM與圖2所示的TPM模塊可以是同一功能模塊,例如,處理器702可以實現(xiàn)圖2中的加解密子模塊1、密鑰保存子模塊、密鑰恢復(fù)子模塊、用于存儲密鑰置換表的存儲子模塊、種子子模塊及密鑰置換子模塊的功能,例如密鑰置換表、及種子子模塊中的seed可以存儲在處理器702的緩存中,或者也可以存儲在該TPM包括的其他的存儲器中。
[0137]因此,對于該TPM中的各單元所實現(xiàn)的功能等,可參考如前的描述,不多贅述。
[0138]請參見圖8,基于同一發(fā)明構(gòu)思,提供一種開發(fā)板,該開發(fā)板可以包括TPM801和第二存儲器802。
[0139]其中,TPM801可以是如圖1-圖7任一所述的TPM。
[0140]第二存儲器802可以包括易失性存儲器,例如可以包括RAM,或者第二存儲器802還可以包括非易失性存儲器,例如可以包括只讀存儲器(Read Only Memory,ROM)和磁盤存儲器等。第二存儲器802可以用于存儲密鑰的密文,例如第二存儲器中可以預(yù)留出部分空間或全部空間用于存儲密鑰的密文,如果第二存儲器802預(yù)留了部分空間用于存儲密鑰的密文,則第二存儲器802還可以存儲其他數(shù)據(jù)。
[0141]該開發(fā)板可以用于執(zhí)行上述圖3-圖6所述的方法,例如可以是如前所述的開發(fā)板,可選的,該開發(fā)板可以是FPGA開發(fā)板,例如該開發(fā)板與圖1所示的FPGA開發(fā)板可以是同一開發(fā)板,或者例如該開發(fā)板上包括的FPGA芯片可以包括圖2所示的TPM模塊,或者該開發(fā)板也可以是其他類型的開發(fā)板,例如可以是專門用于實現(xiàn)TPM功能的開發(fā)板,或者可能是其他的能夠?qū)崿F(xiàn)TPM功能的開發(fā)板,等等。因此,對于該開發(fā)板中的各功能模塊所實現(xiàn)的功能等,可參考如前的描述,不多贅述。
[0142]圖8以該開發(fā)板通過FPGA芯片實現(xiàn)TPM模塊的功能為例,在實際應(yīng)用中不限于此。
[0143]本發(fā)明實施例中,如果用于TPM的第一存儲器中用于加載密鑰的空間的容量小于等于第一預(yù)設(shè)容量,則TPM可以將至少一個第一密鑰存儲到第二存儲器,S卩,通過利用TPM外部的第二存儲器,擴展了用于加載密鑰的空間,提升了 TPM的密鑰加載能力,使得TPM可以加載更多的密鑰,可以為更多的應(yīng)用提供密鑰安全使用功能,也就提升了系統(tǒng)的安全性。
[0144]在本發(fā)明中,應(yīng)該理解到,所揭露的設(shè)備和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元或單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性或其它的形式。
[0145]所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本發(fā)明實施例。
[0146]在本發(fā)明實施例中的各功能單元可以集成在一個處理單元中,或者各個單元也可以均是獨立的物理模塊。
[0147]所述集成的單元如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)或處理器執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:通用串行總線閃存盤(Universal Serial Bus flash drive)、移動硬盤、R0M、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
[0148]以上所述,以上實施例僅用以對本發(fā)明的技術(shù)方案進行了詳細介紹,但以上實施例的說明只是用于幫助理解本發(fā)明實施例的方法,不應(yīng)理解為對本發(fā)明實施例的限制。本技術(shù)領(lǐng)域的技術(shù)人員可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明實施例的保護范圍之內(nèi)。
【主權(quán)項】
1.一種密鑰加載方法,其特征在于,包括: 可信平臺模塊TPM確定所述TPM內(nèi)部的第一存儲器中留存的用于加載密鑰的空間的可用容量小于等于第一預(yù)設(shè)容量; 所述TPM將至少一個第一密鑰存儲到第二存儲器;其中,所述第二存儲器位于所述TPM外部,所述至少一個第一密鑰包括待加載到所述第一存儲器的密鑰和/或已加載在所述第一存儲器中的密鑰。2.如權(quán)利要求1所述的方法,其特征在于,所述TPM將至少一個第一密鑰存儲到第二存儲器,包括: 所述TPM對所述至少一個第一密鑰分別進行加密,得到至少一個密文; 所述TPM將所述至少一個密文存儲到所述第二存儲器。3.如權(quán)利要求2所述的方法,其特征在于,所述TPM對所述至少一個第一密鑰分別進行加密,得到至少一個密文,包括: 所述TPM根據(jù)所述至少一個第一密鑰的句柄,生成用于對所述至少一個第一密鑰進行加密的至少一個第二密鑰; 所述TPM通過所述至少一個第二密鑰對所述至少一個第一密鑰及所述至少一個第一密鑰的上下文進行加密,得到所述至少一個密文;其中每個第二密鑰用于對一個第一密鑰及該第一密鑰的上下文進行加密,以得到該第一密鑰的密文。4.如權(quán)利要求1-3任一所述的方法,其特征在于,所述TPM在將至少一個第一密鑰存儲到第二存儲器之前,還包括: 所述TPM對所述至少一個第一密鑰及所述至少一個第一密鑰的上下文進行哈希運算,得到至少一個哈希值;其中,在進行哈希運算時,是對每個第一密鑰及該第一密鑰的上下文進行哈希運算,得到該第一密鑰的哈希值; 所述TPM存儲所述至少一個哈希值。5.如權(quán)利要求1-4任一所述的方法,其特征在于,所述方法還包括: 所述TPM確定待獲取的第三密鑰位于所述第二存儲器中; 所述TPM從所述第二存儲器中獲取所述第三密鑰。6.如權(quán)利要求5所述的方法,其特征在于,所述TPM從所述第二存儲器中獲取所述第三密鑰,包括: 所述TPM從所述第二存儲器中獲取所述第三密鑰的密文; 所述TPM對所述第三密鑰的密文進行解密,獲得所述第三密鑰及所述第三密鑰的上下文。7.如權(quán)利要求6所述的方法,其特征在于,所述TPM對所述第三密鑰的密文進行解密,獲得所述第三密鑰及所述第三密鑰的上下文,包括: 所述TPM根據(jù)所述第三密鑰的句柄,生成用于對所述第三密鑰的密文進行解密的第四密鑰; 所述TPM通過所述第四密鑰對所述第三密鑰的密文進行解密,得到所述第三密鑰及所述第三密鑰的上下文。8.如權(quán)利要求6或7所述的方法,其特征在于,在得到所述第三密鑰及所述第三密鑰的上下文之后,還包括: 所述TPM對所述第三密鑰及所述第三密鑰的上下文進行哈希運算,得到所述第三密鑰的哈希值; 所述TPM將計算得到的所述第三密鑰的哈希值與存儲的所述第三密鑰的哈希值進行比較,判斷二者是否一致;其中,存儲的所述第三密鑰的哈希值是在將所述第三密鑰存儲到所述第二存儲器的過程中生成的; 若二者一致,則所述TPM將所述第三密鑰及所述第三密鑰的上下文加載到所述第一存儲器。9.如權(quán)利要求8所述的方法,其特征在于,在判斷二者是否一致之后,還包括: 若二者不一致,則所述TPM丟棄所述第三密鑰及所述第三密鑰的上下文。10.一種可信平臺模塊TPM,其特征在于,包括: 第一存儲器,用于存儲密鑰; 處理器,用于確定所述第一存儲器中留存的用于加載密鑰的空間的可用容量小于等于第一預(yù)設(shè)容量,將至少一個第一密鑰存儲到第二存儲器;所述第二存儲器位于所述TPM外部,所述至少一個第一密鑰包括新生成的密鑰和/或加載在所述第一存儲器中的密鑰。11.如權(quán)利要求10所述的TPM,其特征在于,所述處理器用于將至少一個第一密鑰存儲到第二存儲器,包括: 對所述至少一個第一密鑰分別進行加密,得到至少一個密文; 將所述至少一個密文存儲到所述第二存儲器。12.如權(quán)利要求11所述的TPM,其特征在于,所述處理器用于對所述至少一個第一密鑰分別進行加密,得到至少一個密文,包括: 根據(jù)所述至少一個第一密鑰的句柄,生成用于對所述至少一個第一密鑰進行加密的至少一個第二密鑰; 通過所述至少一個第二密鑰對所述至少一個第一密鑰及所述至少一個第一密鑰的上下文進行加密,得到所述至少一個密文;其中每個第二密鑰用于對一個第一密鑰及該第一密鑰的上下文進行加密,以得到該第一密鑰的密文。13.如權(quán)利要求10-12任一所述的TPM,其特征在于,所述處理器還用于: 在將至少一個第一密鑰存儲到第二存儲器之前,對所述至少一個第一密鑰及所述至少一個第一密鑰的上下文進行哈希運算,得到至少一個哈希值;其中,在進行哈希運算時,是對每個第一密鑰及該第一密鑰的上下文進行哈希運算,得到該第一密鑰的哈希值; 存儲所述至少一個哈希值。14.如權(quán)利要求10-13任一所述的TPM,其特征在于,所述處理器還用于: 確定待獲取的第三密鑰位于所述第二存儲器中; 從所述第二存儲器中獲取所述第三密鑰。15.如權(quán)利要求14所述的TPM,其特征在于,所述處理器用于從所述第二存儲器中獲取所述第三密鑰,包括: 從所述第二存儲器中獲取所述第三密鑰的密文; 對所述第三密鑰的密文進行解密,獲得所述第三密鑰及所述第三密鑰的上下文。16.如權(quán)利要求15所述的TPM,其特征在于,所述處理器用于對所述第三密鑰的密文進行解密,獲得所述第三密鑰及所述第三密鑰的上下文,包括: 根據(jù)所述第三密鑰的句柄,生成用于對所述第三密鑰的密文進行解密的第四密鑰; 通過所述第四密鑰對所述第三密鑰的密文進行解密,得到所述第三密鑰及所述第三密鑰的上下文。17.如權(quán)利要求15或16所述的TPM,其特征在于,所述處理器還用于: 在得到所述第三密鑰及所述第三密鑰的上下文之后,對所述第三密鑰及所述第三密鑰的上下文進行哈希運算,得到所述第三密鑰的哈希值; 將計算得到的所述第三密鑰的哈希值與存儲的所述第三密鑰的哈希值進行比較,判斷二者是否一致;其中,存儲的所述第三密鑰的哈希值是在將所述第三密鑰存儲到所述第二存儲器的過程中生成的; 若二者一致,則將所述第三密鑰及所述第三密鑰的上下文加載到所述第一存儲器。18.如權(quán)利要求17所述的TPM,其特征在于,所述處理器還用于: 在判斷二者是否一致之后,若二者不一致,則丟棄所述第三密鑰及所述第三密鑰的上下文。19.一種開發(fā)板,其特征在于,包括: 第二存儲器,用于存儲密鑰; TPM,用于確定所述TPM的第一存儲器中留存的用于加載密鑰的空間的可用容量小于等于第一預(yù)設(shè)容量,將至少一個第一密鑰存儲到所述第二存儲器;所述至少一個第一密鑰包括待加載到所述第一存儲器的密鑰和/或已加載在所述第一存儲器中的密鑰。20.如權(quán)利要求19所述的開發(fā)板,其特征在于,所述開發(fā)板為現(xiàn)場可編程門陣列FPGA開發(fā)板。
【文檔編號】H04L9/08GK105847011SQ201610162361
【公開日】2016年8月10日
【申請日】2016年3月21日
【發(fā)明人】趙波, 謝特, 黃宇晴
【申請人】華為技術(shù)有限公司