譚良,齊能,胡玲碧
(1. 四川師范大學(xué)計算機(jī)科學(xué)學(xué)院,四川 成都 610101;2. 中國科學(xué)院計算技術(shù)研究所,北京 100190)
IT資源服務(wù)化是云計算中最重要的外部特征[1-4],云端虛擬平臺包括物理硬件層、虛擬化管理層和客戶虛擬機(jī)層,其中,客戶虛擬機(jī)是資源服務(wù)化的直接依托環(huán)境。因此,云端虛擬平臺和客戶虛擬機(jī)的可信是云安全中最為核心的問題,是解決云租戶與云服務(wù)提供商之間相互信任的基礎(chǔ)[5-9]。文獻(xiàn)[5-9]均認(rèn)為,解決云端虛擬平臺和客戶虛擬機(jī)的可信問題是推動云計算在更廣的范圍內(nèi)擴(kuò)展、沿拓的重大安全問題。而可信計算[10-11]是保障計算平臺可信的基礎(chǔ)手段,它通過提供數(shù)據(jù)保護(hù)、身份證明以及完整性測量、存儲與報告等功能以提高計算平臺整體的可信性。因此,將可信計算技術(shù)融入云端虛擬平臺已成為云安全研究領(lǐng)域的一大熱點(diǎn)[12-16],其中,可信平臺模塊(TPM, trusted platform model)的虛擬化是可信計算和虛擬化結(jié)合的關(guān)鍵技術(shù)之一[17-24]。
目前,TPM的虛擬化可以采用3種方式:軟件仿真型TPM虛擬化、硬件共享型TPM虛擬化和聚合型TPM虛擬化。所謂軟件仿真型TPM虛擬化,就是指虛擬平臺為每一個需要為用戶提供可信執(zhí)行環(huán)境的虛擬機(jī)創(chuàng)建一個軟件仿真型虛擬TPM實例。所謂硬件共享型TPM虛擬化,就是各虛擬機(jī)分時訪問物理TPM。所謂聚合型TPM虛擬化,即在一個TPM 內(nèi)聚合出多個 TPM 虛擬功能(VF, virtual function)——vTPM,然后將 vTPM 直接分配或調(diào)度給需要的客戶虛擬機(jī)使用。TPM無論采用何種虛擬化方式,均需向虛擬機(jī)提供一個具有TPM功能的邏輯實體——vTPM。在云環(huán)境中,通過vTPM為客戶虛擬機(jī)提供可信保障,使每個客戶虛擬機(jī)在邏輯上都能擁有單個“獨(dú)有”的TPM,就像擁有一個真實的物理 TPM 一樣??蛻籼摂M機(jī)環(huán)境可以使用vTPM提供的度量、存儲和報告等功能,特別是可通過vTPM的完整性校驗功能實現(xiàn)客戶虛擬機(jī)環(huán)境的信任鏈傳遞,也可通過vTPM的數(shù)據(jù)保護(hù)功能實現(xiàn)客戶虛擬機(jī)數(shù)據(jù)的密封存儲,還可通過vTPM的遠(yuǎn)程證明功能實現(xiàn)客戶虛擬機(jī)環(huán)境的身份證明。
然而,在虛擬環(huán)境下,當(dāng)客戶虛擬機(jī)進(jìn)行遠(yuǎn)程證明時,不僅需要向挑戰(zhàn)者證明頂層虛擬機(jī)環(huán)境的可信,還必須向挑戰(zhàn)者證明底層虛擬平臺的可信,因此,必須建立從物理TPM到vTPM的證書鏈,構(gòu)建物理平臺、虛擬平臺到客戶虛擬機(jī)平臺的綁定關(guān)系[17]。目前,在如何將底層物理TPM 的證書鏈擴(kuò)展延伸到虛擬機(jī)方面已有多種方案,包括vTPM vEK to hTPM AIK Binding[17]、TPM AIK signs vTPM vAIK[17]、vEK Certificate Signing CA[17]、vTPM vEK to hTPM EK Binding[25]、vTPM vAIK to hTPM SK Binding[26]和 hTPM EPS Product vEK[27]等,但以上這些方面均不完善,有的方案存在違背 TCG規(guī)范的情況,有的方案增加密鑰冗余,有的方案增加Privacy CA的性能負(fù)擔(dān),有的方案甚至不能進(jìn)行證書信任擴(kuò)展。
針對這一問題,本文提出了對應(yīng)的解決方案,并通過實驗驗證其功能,具體實現(xiàn)思路及實驗方案將在后續(xù)篇章做詳細(xì)介紹。
所謂vTPM的證書信任擴(kuò)展,是指如何將物理TPM的證書信任關(guān)系擴(kuò)展到vTPM,構(gòu)造TPM到vTPM的證書信任鏈關(guān)系。
目前,國內(nèi)外對vTPM的證書信任擴(kuò)展進(jìn)行了大量研究。文獻(xiàn)[17]在研究中提出了4種構(gòu)建vTPM證書鏈的設(shè)計思路,但最后一種與特殊硬件有關(guān),為不失一般性,本文不討論第4種,只討論前3種。
1) vTPM vEK to hTPM AIK Binding
如圖1所示,此方法中vEK和vAIK均由vTPM產(chǎn)生,vEK由TPM的AIK簽名綁定,vAIK由Privacy CA 的私鑰簽名,驗證方用Privacy CA的公鑰進(jìn)行驗證。此方法不僅將底層的證書信任擴(kuò)展到了虛擬機(jī),而且vTPM的證書結(jié)構(gòu)與TPM一致,便于理解和已有成果的移植,但缺點(diǎn)包括2個方面,一是用TPM的AIK對vEK簽名,違背了TCG規(guī)范,AIK只能對TPM內(nèi)部產(chǎn)生的信息進(jìn)行簽名,而vEK是TPM的外部信息;二是AIK的有效期通常很短,AIK的失效導(dǎo)致對vEK的簽名失效,從而導(dǎo)致vAIK失效,需要頻繁向Privacy CA重新申請vAIK,因此,Privacy CA的性能負(fù)擔(dān)重。
2) hTPM AIK signs vTPM vAIK
如圖2所示,此方法用TPM的AIK直接對vTPM的vAIK進(jìn)行簽名,不需要Privacy CA。此方法不僅將底層的證書信任擴(kuò)展到了虛擬機(jī),而且降低了Privacy CA的負(fù)擔(dān)。但該方法依賴于TPM的AIK對vAIK簽名,不僅同樣違反了TCG規(guī)范,而且AIK的失效同樣會導(dǎo)致其對vAIK的簽名失效,從而會頻繁更新AIK對vAIK的簽名,增加性能負(fù)擔(dān)。
圖1 vTPM vEK to hTPM AIK Binding
圖2 hTPM AIK signs vTPM vAIK
3) Local CA issue vEK Certificate
即由本地證書機(jī)關(guān)(注:不是Privacy CA)為vTPM發(fā)布vEK,如圖3所示。本文方案的優(yōu)點(diǎn)是vEK相對穩(wěn)定,不會隨著底層虛擬平臺和TPM的變化而變化,缺點(diǎn)是不僅需要增加額外的證書機(jī)關(guān),而且與TPM沒發(fā)生綁定關(guān)系,即TPM的可信證書擴(kuò)展沒有傳遞到vTPM。
文獻(xiàn)[25]提出了vTPM vEK to hTPM EK Binding方案,即vEK由TPM的EK簽名綁定,如圖4所示。這個方案的優(yōu)點(diǎn)是避免由于AIK的失效導(dǎo)致對vEK簽名的失效,而且與TPM的綁定關(guān)系清楚、簡單,將底層的TPM證書信任擴(kuò)展到了虛擬機(jī)。但缺點(diǎn)是違反了TCG規(guī)范,即EK證書不能用于簽名。
圖3 Local CA issue vEK Certificate
圖4 vTPM vEK to hTPM EK Binding
另外,為了對上述方案進(jìn)行改進(jìn),文獻(xiàn)[26]提出了vTPM vAIK to hTPM SK Binding方案,即引入了簽名密鑰SK作為中介,實現(xiàn)了AIK對vAIK的間接簽名,使AIK不再對TPM外部數(shù)據(jù)進(jìn)行簽名,更好地滿足TCG規(guī)范,而且vAIK的生成不依賴于Privacy CA,降低了Privacy CA的負(fù)擔(dān),如圖5所示。但該方案不僅增加了生成vAIK證書的復(fù)雜性,且沒有解決AIK失效會導(dǎo)致vAIK失效的問題,而重構(gòu)vAIK需要重新生成SK,從而帶來新的性能負(fù)擔(dān)。另外,每一個vAIK證書對應(yīng)一個SK,會產(chǎn)生大量的密鑰冗余。
文獻(xiàn)[27]結(jié)合TPM 2.0的新特性,提出hTPM EPS Product vEK方案,如圖6所示。在該方案中,vTPM的身份證書vAIK由EPS推導(dǎo)產(chǎn)生的vEK向Privacy CA驗證生成。文中認(rèn)為,基于vEK和EPS的映射關(guān)系,就能夠較為直接地標(biāo)識虛擬機(jī)中的真實物理身份,建立從物理平臺到虛擬平臺的信任鏈,但實際上是不行的。EPS僅僅是Endorsement Key的基礎(chǔ)密鑰種子,用KDF算法生成Endorsement Key,雖然簡單、容易,但僅僅是生成了vEK的密鑰對而已,不存在信任擴(kuò)展和傳遞的問題,外界不能通過這個密鑰對的公鑰推導(dǎo)出該公鑰是底層TPM的EPS產(chǎn)生的。vTPM證書信任鏈的擴(kuò)展仍然需要將EPS產(chǎn)生的vEK的密鑰公鑰、底層虛擬化平臺的簽名信息和vTPM的相關(guān)信息傳遞給Privacy CA生成vEK證書,再由vEK證書向Privacy CA生成vAIK來實現(xiàn)。
圖5 vTPM vAIK to hTPM SK Binding
圖6 hTPM EPS Product vEK
從上面的分析可以看出,無論采用什么方式,將底層物理TPM的證書信任關(guān)系擴(kuò)展到vTPM證書均不完善,有的方案存在違背TCG規(guī)范的情況,有的方案增加密鑰冗余,有的方案增加Privacy CA的性能負(fù)擔(dān),有的方案甚至不能進(jìn)行證書信任擴(kuò)展。這將降低用戶使用的方便性和信任度。
為了解決以上問題,本文特為 TPM 增加一種可選的新證書——VMEK(virtual machine extension key),該證書由TPM擁有者通過PCA生成并激活,私鑰由SRK保護(hù),不可遷移,可對TPM內(nèi)和TPM外的數(shù)據(jù)進(jìn)行簽名和加密,只用于虛擬機(jī)證書信任擴(kuò)展和虛擬機(jī)遷移(或 vTPM 遷移)。由于本文只研究證書信任擴(kuò)展,因此,在設(shè)計 VEMK時不討論遷移問題。
TPM 中每種證書均要設(shè)定特定操作的數(shù)據(jù)段信息,包括背書證書、一致性證書、平臺證書、確認(rèn)證書和身份證書。VMEK證書的數(shù)據(jù)段如表1所示,包含VMEK公鑰、TPM制造商、TPM模塊、TPM一致性參考、平臺類型、平臺制造商、發(fā)布者、簽名值、TPM規(guī)范、PCR值、源VMEK證書、有效期、策略參考和其他。
表1 VMEK證書的數(shù)據(jù)結(jié)構(gòu)
其中,設(shè)置PCR值數(shù)據(jù)段的目的是通過該證書可以驗證虛擬平臺的可信性,通常包含PCR[0]~PCR[15],源 VMEK 證書數(shù)據(jù)段存放的是虛擬機(jī)遷移之前的虛擬平臺VMEK,設(shè)置該數(shù)據(jù)段的目的是通過該證書回溯原虛擬平臺。
VEMK密鑰具有不可遷移性,在加密方面,具有與存儲密鑰相同的作用;在簽名方面,具有與簽名密鑰相同的作用。具體比較如表2所示。
表2 VMEK證書的密鑰屬性與簽名密鑰和存儲密鑰的比較
表3是VMEK與背書證書、一致性證書、平臺證書、確認(rèn)證書、AIK證書和 VMEK證書這 6種證書的比較。
VMEK證書與EK證書、平臺證書和一致性證書之間還存在著一定的相互聯(lián)系和相互制約關(guān)系,具體如圖7所示。
VMEK證書包括EK證書里的信息,如 TPM制造商、TPM 模塊等;VMEK證書也包括平臺證書里的信息,如平臺類型、平臺制造商等;VMEK證書還包括一致性證書。VMEK證書并不涉及EK公鑰部分、平臺證書公鑰部分、一致性證書公鑰部分等的私有敏感信息。
VMEK證書管理包括2個方面的內(nèi)容,一方面是VMEK證書的生成和使用,另一方面是VMEK證書的存儲。
對于 VMEK證書的生成和使用,本文定義 4個接口,分別是 TPM_CreateVMEKKeyPair、TPM_ActiveVMEK、TPM_VMEKLoad和TPM_VMEK_Signing。特別需要說明的是,為了節(jié)省篇幅和便于理解閱讀,接口中出現(xiàn)的類型、符號常量等與TPM規(guī)范一致。敘述中只定義與VMEK相關(guān)的接口和關(guān)鍵數(shù)據(jù)結(jié)構(gòu)。
表3 TPM中證書功能比較
圖7 VMEK證書與其他證書之間的關(guān)系
定義1 TPM_Result TPM_CreateVMEKKeyPair (
TPM_ENCAUTH *VMEKAuth, //輸入?yún)?shù),VMEK的加密授權(quán)數(shù)據(jù)
TPM_CHOSENID_HASH *labelPrivCADigest,//輸入?yún)?shù),PCA身份標(biāo)簽摘要
TPM_KEY *VMEKKeyParams, //輸入?yún)?shù),VMEK密鑰的所有相關(guān)參數(shù)
TPM_AUTH *auth1, //輸入輸出參數(shù),授權(quán)協(xié)議參數(shù)1
TPM_AUTH *auth2, //輸入輸出參數(shù),授權(quán)協(xié)議參數(shù)2
TPM_KEY *VMEKKey, //輸出參數(shù),創(chuàng)建的VMEK密鑰對
UINT32 *VMEKBindingSize, //輸出參數(shù),用VMEK簽名的內(nèi)容長度
BYTE **VMEKBinding //輸出參數(shù), VMEK對TPM_VMEK_CONTENTS的簽名值
);
該接口用于創(chuàng)建 VMEK公私鑰對(長度至少是2 048 bit)。如果執(zhí)行成功,返回TPM_SUCCESS;否則,返回 TPM錯誤代碼。具體流程如圖 8所示。
首先,TPM owner使用TPM_Create VMEKKeyPair命令生成一對VMEK公私鑰對(長度至少是2 048 bit),同時產(chǎn)生一個TPM_VMEK_ CONTENTS結(jié)構(gòu),該結(jié)構(gòu)中包括剛生成的VMEK的公鑰部分以及TPM的一些標(biāo)識信息。然后,使用 VMEK的私鑰部分對剛產(chǎn)生的TTPM_VMEK_ CONTENTS進(jìn)行簽名。最后,將簽名值、TPM_VMEK_CONTENTS、背書證書、平臺證書和一致性證書等一起發(fā)送給一個Privacy CA并等待其接受請求后生成VMEK證書,而VMEK的私鑰部分則通過SRK加密保存在TPM內(nèi)部。
其中,TPM_VMEK_CONTENTS定義如下。
struct TPM_VMEK _CONTENTS {
TPM_STRUCT_VER ver;//版本
UINT32 ordinal; //序號
TPM_CHOSENID_HASH labelPrivCADigest;// PCA身份標(biāo)簽摘要
TPM_PUBKEY VMEKPubKey; //VMEK公鑰
};
圖8 TPM_CreateVMEKKeyPair接口實現(xiàn)流程
隨后,Privacy CA產(chǎn)生一個會話密鑰,并使用這個密鑰對剛生成的 VMEK證書進(jìn)行加密,然后使用用戶TPM的EK公鑰對該會話加密,產(chǎn)生一個TPM_ASYM_CA_ ATTESTATION結(jié)構(gòu),其中,包括被加密的會話密鑰、被加密的證書以及一些加密算法參數(shù)等。最后,Privacy CA將TPM_ASYM_CA_ATTESTATION發(fā)送給TPM。
定義2 TPM_Result TPM_ActiveVMEK (
TPM_KEY_HANDLE VMEKKeyHandle, //輸入?yún)?shù),VMEK密鑰句柄
UINT32 blobSize, //輸入?yún)?shù),來自PCA的TPM_SYM_CA_ATTESTATION的長度
BYTE *blob, //輸入?yún)?shù),來自 PCA的TPM_SYM_CA_ATTESTATION
TPM_AUTH *auth1, //輸入輸出參數(shù),授權(quán)協(xié)議參數(shù)1
TPM_AUTH *auth2, //輸入輸出參數(shù),授權(quán)協(xié)議參數(shù)2
TPM_SYMMETRIC_KEY *symmetricKey //輸出參數(shù),和PCA交互的會話密鑰
);
該接口的主要作用是獲取 VMEK證書,并激活。如果執(zhí)行成功,返回TPM_SUCCESS;否則,返回TPM錯誤代碼。具體流程如圖9所示。
圖9 TPM_ActiveVMEK實現(xiàn)流程
首先,TPM owner驗證從 PCA接收到的TPM_VMEK_CA_ATTESTATION是否為當(dāng)前自己申請的VMEK證書結(jié)構(gòu);然后,使用自己的vEK私鑰解密加密證書的會話密鑰;最后,使用該會話密鑰解密證書密文,獲得VMEK證書。
定義3 TPM_Result TPM_VMEKLoad (
TPM_KEY_HANDLE SRKHandle, // 輸入?yún)?shù),SRK的密鑰句柄
TPM_KEY *inVMEK, //輸入?yún)?shù),VMEK的私鑰和公鑰部分
TPM_AUTH *auth1, //輸入輸出參數(shù),授權(quán)協(xié)議參數(shù)
TPM_KEY_HANDLE *inVMEKHandle, //輸出參數(shù),TPM內(nèi)部的VMEK句柄
);
該接口的主要作用是加載VMEN私鑰到TPM內(nèi)。如果執(zhí)行成功,返回TPM_SUCCESS;否則,返回TPM錯誤代碼。具體流程如圖10所示。
圖10 TPM_VMEKLoad實現(xiàn)流程
首先,確保執(zhí)行此操作是經(jīng)過授權(quán)的;然后,驗證準(zhǔn)備加載的密鑰的父密鑰是否是 SRK,并用SRK對該密鑰進(jìn)行解密;接著,驗證解密后密鑰的屬性;最后,把密鑰裝載到 TPM 內(nèi)部存儲器,并根據(jù)TPM規(guī)則給裝載的密鑰分配句柄。
定義4 TPM_Result TPM_VMEK_Signing (TPM_KEY_HANDLE VMEKHandle, //輸入?yún)?shù),VMEK密鑰句柄
TPM_NONCE *extrnalData, //輸入?yún)?shù),現(xiàn)時nonce
UINT32 vEKbolb Size, //輸入?yún)?shù),vEK密鑰長度
TPM_PRIKEY *vEK, //輸入?yún)?shù),vEK私鑰
TPM_AUTH *auth1, //輸入?yún)?shù),授權(quán)協(xié)議參數(shù)
UINT32 *sigSize, //輸出參數(shù),簽名值長度
BYTE **sig//輸出參數(shù),簽名值
);
該接口的主要作用是用VMEK私鑰對vEK簽名。如果執(zhí)行成功,返回TPM_SUCCESS;否則,返回TPM錯誤代碼。具體流程如圖11所示。
圖11 TPM_VMEK_Signing實現(xiàn)流程
首先,確保執(zhí)行 TPM_VMEK_Signing操作是經(jīng)過授權(quán)的;其次,確認(rèn) VMEK的私鑰是用作簽名的;接著,創(chuàng)建TPM_Sign_INFO結(jié)構(gòu),記為Q1,并對Q1做hash運(yùn)算;最后,用VMEK的私鑰對此hash結(jié)果簽名,返回簽名結(jié)果。
另外,VMEK證書私鑰的存儲和使用如圖 12所示。從圖12可以看出,VMEK私鑰存放在系統(tǒng)存儲區(qū),受SRK保護(hù),TPM owner可以通過相關(guān)命令使用VMEK私鑰,應(yīng)用程序則可以通過TCS使用VMEK私鑰。特別需要指出的是,VMEK的
簽名和加密可以由用戶的應(yīng)用程序調(diào)用實施。
本節(jié)主要介紹基于VMEK的證書信任鏈擴(kuò)展,稱為vTPM vEK to hTPM VMEK Binding方案,并和已有6種方案進(jìn)行比較。
對于 vTPM 的證書信任擴(kuò)展,本文采用 hTPM VMEK signs vTPM vEK,即基于VMEK的vTPM證書信任擴(kuò)展,如圖13所示。該方案首先利用底層TPM的VMEK調(diào)用TPM_VMEK_Signing接口對vTPM的vEK簽名,將底層信任傳遞到vTPM,然后再由vTPM調(diào)用相關(guān)接口和Privacy CA一起生成vAIK。本文方案的實質(zhì)是用VMEK來替代AIK,有以下2個優(yōu)點(diǎn),一是VMEK可以對TPM內(nèi)外部信息進(jìn)行簽名,而AIK不能,不存在違反TCG規(guī)范的情況;二是相比AIK,VMEK不會頻繁失效,從而不會引起其簽名的失效,因而不會帶來多余的性能負(fù)擔(dān)。
具體的實施流程如下。
1) TPM首先調(diào)用 TPM_CreateVMEKKeyPair生成VEMK密鑰對,然后調(diào)用TPM_ActiveVMEK生成VMEK證書,并激活。此步驟TPM owner只需操作一次。
2) 當(dāng)虛擬平臺產(chǎn)生新的vTPM時,會為vTPM生成vEK,此時TPM調(diào)用TPM_VMEK_ Signing對vEK進(jìn)行簽名,將底層TPM的證書信任擴(kuò)展到vTPM。
3) vTPM owner調(diào)用TPM_MakeIdentity命令生成一對vAIK公私鑰對(長度至少是2 048 bit)。
圖12 VMEK證書私鑰的存儲和使用
4) vTPM owner再調(diào)用TPM_ActivateIdentity,獲得vAIK證書。
圖13 vTPM vAIKto hTPM VMEK Binding
從4.1節(jié)可以看出,本文方案由于采用vTPM vEK to hTPM VMEK Binding方式進(jìn)行證書信任擴(kuò)展具有以下4個優(yōu)點(diǎn)。
1) 不存在違背TCG規(guī)范的情況。
2) 沒有產(chǎn)生密鑰冗余。
3) 沒有增加Privacy CA的性能負(fù)擔(dān)。
4) 通過VMEK對vTPM的vEK進(jìn)行簽名,實現(xiàn)了底層TPM證書信任擴(kuò)展到vTPM。
vTPM vEK to hTPM AIK Binding與本文方案相比,由于vTPM vEK to hTPM AIK Binding方案用AIK對vEK簽名,存在違背TCG規(guī)范中AIK不能對TPM外部信息簽名的要求,另外,AIK容易失效,會導(dǎo)致AIK對vEK簽名的失效,從而導(dǎo)致需重新向Privacy CA申請vAIK,增加了Privacy CA的負(fù)擔(dān)。而本文方案既不存在違背 TCG規(guī)范的情況,也沒有增加Privacy CA的負(fù)擔(dān)。顯然本文方案優(yōu)于vTPM vEK to hTPM AIK Binding。
hTPM AIK signs vTPM vAIK與本文方案相比,由于hTPM AIK signs vTPM vAIK方案仍然用AIK對 vAIK簽名,同樣存在違背 TCG規(guī)范和增加Privacy CA負(fù)擔(dān)的問題。顯然本文方案優(yōu)于hTPM AIK signs vTPM vAIK。
Local CA issue vEK Certificate與本文方案相比,由于Local CA issue vEK Certificate方案采用的是本地證書機(jī)關(guān)發(fā)放vEK證書,與TPM沒發(fā)生綁定關(guān)系,即 TPM 的證書信任擴(kuò)展沒有傳遞到vTPM,而本文方案不存在此類不足。
vTPM vEK to hTPM EK Binding與本文方案相比,由于vTPM vEK to hTPM EK Binding方案用EK對vEK簽名,違反了TCG對EK的使用規(guī)范,而本文方案不存在此類不足。
vTPM vAIK to hTPM SK Binding與本文方案相比,由于vTPM vAIK to hTPM SK Binding方案需生成SK替代AIK對vAIK簽名,這需要SK與AIK一一對應(yīng),當(dāng)AIK失效時,需要生成新的SK,帶來較大的密鑰冗余,增加了 TPM 的性能負(fù)擔(dān),而本文方案不存在此類不足。
hTPM EPS Product vEK與本文方案相比,由于hTPM EPS Product vEK方案僅僅是通過TPM中的種子密鑰ESP產(chǎn)生vTPM的vEK,不存在信任擴(kuò)展和傳遞的問題,即底層 TPM 的證書信任并沒有通過ESP產(chǎn)生vEK傳遞到頂層的vTPM和虛擬機(jī),而本文方案不存在此類不足。
表4是本文方案與其他6種方案的比較統(tǒng)計結(jié)果。
表4 本文方案與其他6種方案的比較統(tǒng)計結(jié)果
目前,在Xen 4.4.0實現(xiàn)了基于VMEK證書的信任鏈擴(kuò)展。其中,特權(quán)管理域 Domain0為Ubuntu14.04 LTS,客戶虛擬機(jī)操作系統(tǒng)為Ubuntu14.04 LTS,并且為保證實驗的可靠性和可操作性,選擇TPM_Emulator-0.7.4對TPM環(huán)境進(jìn)行仿真,TSS軟件棧為最新版本 TrouSerS0.3.14,并結(jié)合IBM發(fā)布的IBM's TPM 2.0 TSS,對實驗參數(shù)進(jìn)行參考和調(diào)整。具體的實驗設(shè)備配置如表5所示。
表5 物理平臺(Dom0)和用戶虛擬機(jī)(DomU-Ubuntu)配置信息
為了實現(xiàn)VMEK及其管理,對TPM_Emulator-0.7.4和Xen的源碼做出了相應(yīng)的增加,添加了相關(guān)的數(shù)據(jù)結(jié)構(gòu)及管理接口。限于篇幅,本文僅列出數(shù)據(jù)結(jié)構(gòu)和接口增加的具體位置,具體實現(xiàn)流程和接口功能描述可詳見第3節(jié)和第4節(jié)。主要的實現(xiàn)如表6所示。
其中,在實現(xiàn)過程中涉及的一些輔助實現(xiàn)函數(shù)本文不再贅述。具體的實現(xiàn)步驟描述如下。
1) 在tpm_emulator-0.7.4/tpm/tpm_structures.h的TPM_KEY_USAGE中新增一種證書類型符號常量。
2) 在tpm_emulator-0.7.4/tpm/tpm_structures.h中添加VMEK證書,結(jié)構(gòu)用于描述VMEK證書。
3) 在tpm_emulator-0.7.4/tpm/tpm_structures.h中定義數(shù)據(jù)結(jié)構(gòu)TPM_VMEK_CONTENTS。
4) 在 tpm_emulator-0.7.4/tpm/tpm_structures.h中新增函數(shù)TPM_CreateVMEKKeyPair、TPM_Active-VMEK、TPM_VMEKLoad和TPM_VMEK_Signing的接口定義。
5) 在 tpm_emulator-0.7.4/tpm/tpm_identity.c和tpm_emulator-0.7.4/tpm/tpm_vmekref.c實現(xiàn)了TPM_CreateVMEKKeyPair、TPM_ActiveVMEK、TPM_VMEKLoad和TPM_VMEK_Signing函數(shù)。
6) 在Xen中//xen-4.4.0/xen/include/public/ xen.h,在虛擬機(jī)的信息結(jié)構(gòu)體中添加 VMEK的相關(guān)標(biāo)識。
7) 在//xen-4.4.0/stubdom/下的vtpm和vtpmmgr中添加VMEK字段。
至此,TPM_Emulator-0.7.4和 Xen中 VMEK及其管理實現(xiàn)完成。
在TrouSerS0.3.14中對TPM_CreateVMEKKey Pair、TPM_VMEKLoad、TPM_ActiveVMEK 和TPM_VMEK_Signing進(jìn)行了封裝。主要實現(xiàn)的接口如表7所示。
表6 VMEK在Xen中的實現(xiàn)
表7 擴(kuò)展vTPM管理器的TSS接口
其中,VTPM_CreateVMEKKeyPair函數(shù)用于在應(yīng)用層創(chuàng)建 VMEK公私鑰對;VTPM_TPM_VMEKLoad函數(shù)用于在應(yīng)用層獲取VMEK證書,并激活;VTPM_ActiveVMEK函數(shù)用于在應(yīng)用層加載VMEN私鑰到TPM內(nèi);VTPM_VMEK_Signing函數(shù)用于在應(yīng)用層用VMEK私鑰簽名。
為驗證 VMEK設(shè)計和實現(xiàn)的有效性,本節(jié)對虛擬平臺環(huán)境進(jìn)行遠(yuǎn)程證明測試,主要分 VMEK的生成、VMEK對vEK證書的簽名、vAIK證書的生成和遠(yuǎn)程證明中證明方平臺有效性驗證 4個方面。具體的物理平臺配置參考表5。
首先,測試了 VMEK的生成,更改./tpm_emulator-0.7.4/tpm/tpm_testing.c下的測試代碼,測試VMEK的生成,實驗結(jié)果如圖14和圖15所示。
圖14 VMEK相關(guān)函數(shù)測試
圖15 VMEK證書部分內(nèi)容(加密后)
其次,測試VMEK對vEK證書的簽名,利用TPM_VMEK_Signing()接口函數(shù),對vEK進(jìn)行簽名,返回執(zhí)行結(jié)果,如圖16所示。
圖16 VMEK簽名vEK測試
第三,vAIK證書的生成時間,并與物理AIK證書的生成時間做對比,其中,物理AIK證書的簽發(fā)使用隱私CA測試網(wǎng)站,具體實驗結(jié)果如表8所示。
表8 生成AIK證書與vAIK證書時間對比
最后,本節(jié)在虛擬計算環(huán)境下進(jìn)行了遠(yuǎn)程證明實驗,結(jié)果如圖 17所示。該遠(yuǎn)程證明采用基于二進(jìn)制的直接模型,流程如圖18所示。
驗證方通過以下步驟確認(rèn)證明方平臺的可信性。
1) 通過驗證VMEK對vEK的簽名,可知vAIK是可信的,并且是由vTPM提供的。
2) 通過VMEK對SK的簽名,可知vTPM是可信的,并且是受到物理TPM保護(hù)的。
圖17 虛擬平臺下的遠(yuǎn)程證明實現(xiàn)
圖18 遠(yuǎn)程證明流程
3) 通過驗證VMEK證書,證明物理TPM真實可信。
4) 通過驗證物理平臺的Quote可知,當(dāng)前虛擬平臺的運(yùn)行環(huán)境(VMM及特權(quán)域)是真實可信的。
5)驗證客戶虛擬域Domain U的Quote簽名,以驗證當(dāng)前虛擬執(zhí)行環(huán)境的可信性。
值得說明的是,在TCG規(guī)范中,TPM共定義了5種證書,學(xué)術(shù)界認(rèn)為其過于復(fù)雜,在我國的可信計算標(biāo)準(zhǔn)規(guī)范中,已減少到3種證書。本文又增加了一種新的證書,現(xiàn)任提升了管理的復(fù)雜度。不過,本文提出的 VMEK證書主要針對虛擬平臺環(huán)境,是一種可選的證書,因此,對非虛擬化平臺環(huán)境,只要用戶屏蔽不用,幾乎沒有額外負(fù)擔(dān)。
通過新增一類證書——VMEK,解決了在虛擬平臺環(huán)境中可信證書鏈擴(kuò)展時存在的違背 TCG規(guī)范、增加密鑰冗余或Privacy CA的性能負(fù)擔(dān)問題。
下一步的工作是將 VMEK應(yīng)用到 vTPM 或TPM的密鑰遷移中。TPM或vTPM允許其可遷移密鑰從一個平臺遷移到另一個平臺,在遷移過程中,VMEK可以用來確保該可遷移密鑰公鑰的正確性和安全性。