飛地 430可以是由在用戶飛地430外部運(yùn)行的軟件安裝器應(yīng)用程序432創(chuàng)建的用戶飛地。用戶 軟件應(yīng)用程序434可以在用戶飛地430內(nèi)部運(yùn)行。平臺服務(wù)飛地440可以是負(fù)責(zé)請求使用 處理器110外部的平臺410的特征的專用飛地,例如,所述特征是特殊存儲裝置、計數(shù)器、受 信任的輸入/輸出、和/或由外圍控制代理120提供的或通過外圍控制代理120可用的其 他特征。
[0037] ISV450可以表示能夠提供在平臺410上被運(yùn)行、消費(fèi)、或提供的軟件、內(nèi)容或服 務(wù)的任何軟件開發(fā)方、內(nèi)容提供方、服務(wù)提供方或任何其他實體。特征許可方460可以是可 以提供由平臺410上的軟件、內(nèi)容消費(fèi)、或服務(wù)使用的用于平臺410的安全性或其他特征的 安全證書的處理器供應(yīng)方、系統(tǒng)供應(yīng)方、或任何其他實體。例如,特征許可方460可以表示 Intel?公司,其中,處理器110是來自Intel?公司的處理器系列中的處理器。許可服務(wù)器 470可以是根據(jù)本發(fā)明的實施例的批準(zhǔn)許可的發(fā)布的任何系統(tǒng)。
[0038] 本發(fā)明的實施例可以提供由軟件、內(nèi)容、和/或服務(wù)提供方許可的平臺特征,以使 得提供這些特征的成本可以由這些提供方承擔(dān),而不是由平臺的購買者承擔(dān),并且平臺提 供方可以針對這些特征的使用,從這些提供方處獲得收益。這些特征可以包括用于保護(hù)軟 件應(yīng)用程序的代碼和數(shù)據(jù)不被未授權(quán)用戶、即使是具有最高可用特權(quán)級別的未授權(quán)用戶讀 取、修改、或篡改的能力。提供方可能期望使用這些特征來保護(hù)優(yōu)質(zhì)的媒介內(nèi)容、在線金融 信息、企業(yè)文件生產(chǎn)等。
[0039] 圖5示出了方法500,方法500是根據(jù)本發(fā)明的實施例的用于在安全處理環(huán)境中進(jìn) 行特征許可的方法。盡管本發(fā)明的實施例在此方面不受限制,但可以引用圖1、2、3、和4中 的元件來幫助描述圖5的方法實施例。方法500包括使用創(chuàng)建、添加、擴(kuò)展和初始化指令來 建立飛地、以及使用密鑰獲取指令來請求密鑰;然而,本發(fā)明的實施例并不被限制于這些被 特別命名的指令。
[0040] 在框510中,ISV450針對包括平臺410的平臺的一個或多個安全或其他特征的 許可證書來與特征許可方460協(xié)商。具有針對特定平臺特征的許可證書給予ISV450許可 平臺使用這些特征的權(quán)利。根據(jù)本發(fā)明的實施例,平臺的特定特征可以被啟用,以供ISV已 經(jīng)針對其獲取了許可證書的應(yīng)用程序所使用,以及相反地,被禁用。根據(jù)本發(fā)明的實施例的 其使用可以被啟用或禁用的每個特定特征在本文中都被稱為可許可特征。
[0041] 在框512中,ISV450從特征許可方460針對可許可特征中的一個或多個來獲取 許可證書。在本文中,許可證書已經(jīng)被獲取的每個特征被稱為被許可特征。許可證書可以 是表示ISV450與特征許可方460之間的許可協(xié)定的被數(shù)字簽名的數(shù)字證書,其包括對哪 些特征被許可的指示。
[0042] 在框514中,ISV450向平臺410提供軟件安裝器應(yīng)用程序432以及用戶軟件應(yīng) 用程序434。軟件安裝器應(yīng)用程序432包括用戶軟件應(yīng)用程序434的測量(如下文描述) 當(dāng)其被預(yù)期建立在用戶飛地中430時(用戶飛地430的預(yù)期測量)、ISV450的標(biāo)識符(例 如,公鑰)的測量、由用戶軟件應(yīng)用程序434或其運(yùn)行于其中的飛地使用的平臺特征的列表 (例如,在屬性位陣列中)、以及指示該軟件應(yīng)用程序434被許可使用被許可特征的許可證 書。許可證書還可以包括兩個測量和/或任何其他信息。
[0043] 在框520中,軟件安裝器應(yīng)用程序432開始準(zhǔn)備在平臺400上安裝用戶軟件應(yīng)用 程序434。在框522中,軟件安裝器應(yīng)用程序432從許可飛地420 (如本文中使用的,其包括 在許可飛地420中運(yùn)行的許可軟件應(yīng)用程序)來請求(例如,通過發(fā)布許可標(biāo)記請求調(diào)用 或指令)許可標(biāo)記。該許可標(biāo)記可以是針對要建立的飛地(例如,用戶飛地430)具有唯一 值的微架構(gòu)數(shù)據(jù)結(jié)構(gòu)(例如,LICT0KEN)。框522中的請求許可標(biāo)記可以包括提供(例如, 根據(jù)框514中提供的信息)用戶飛地430的預(yù)期測量、被請求用于用戶飛地430的平臺特 征的列表、以及許可證書。
[0044] 在框524中,許可飛地420對許可證書是否是真實的進(jìn)行驗證,例如,通過驗證其 數(shù)字簽名。在框526中,許可飛地420將軟件安裝器應(yīng)用程序432正在請求的平臺特征的 列表與許可證書中的被許可特征的列表相比較。如果每個被請求的平臺特征都是被許可特 征,則方法500在框528中繼續(xù)。如果不是,則方法在框590中繼續(xù)。
[0045] 在框528中,許可飛地420請求(例如,通過發(fā)布密鑰獲取指令)密鑰(例如,諸 如密鑰276等對處理器或平臺唯一密鑰)以在創(chuàng)建許可標(biāo)記中使用。在框530中,許可飛 地420創(chuàng)建許可標(biāo)記,該許可標(biāo)記包括用戶飛地430的預(yù)期測量以及屬性位陣列,其中許可 標(biāo)記屬性(LICTOKENATTRIBUTES)位陣列中的每位與特定平臺特征相對應(yīng)。如果許可標(biāo)記 屬性中的位被設(shè)置,則表示該飛地被許可使用相應(yīng)的特征。在框532中,計算MAC(例如, AES-MAC),例如,使用從密鑰276中獲得的許可密鑰來進(jìn)行計算,其中,該MAC基于許可標(biāo)記 的內(nèi)容并且被包括在許可標(biāo)記中。
[0046] 在框534中,許可標(biāo)記被提供(例如,從框522中的許可標(biāo)記調(diào)用或指令被返回) 給軟件安裝器應(yīng)用程序432。
[0047] 在框540中,平臺410上的用戶飛地430開始建立,以便于提供在其中運(yùn)行用戶軟 件應(yīng)用程序434的受保護(hù)的環(huán)境。在框542中,由軟件安裝器應(yīng)用程序432發(fā)布創(chuàng)建指令 以創(chuàng)建用戶飛地430。在框544中,開始對創(chuàng)建指令的執(zhí)行(例如,由執(zhí)行單元270或280 執(zhí)行)。在一個實施例中,創(chuàng)建指令的執(zhí)行包括分配一系列地址以供用戶飛地430使用。在 一個實施例中,地址可以是第一類型的地址,例如,虛擬地址或線性地址,其被轉(zhuǎn)換為第二 類型地址,例如,諸如系統(tǒng)存儲器130等系統(tǒng)存儲器中的物理地址。
[0048] 在框546中,對創(chuàng)建指令的執(zhí)行還可以包括,建立飛地的屬性并且將飛地屬性存 儲在SECS中,例如存儲在SECS310的屬性字段316中。微架構(gòu)數(shù)據(jù)結(jié)構(gòu)(例如,頁面信息 (PAGEINF0))可以與創(chuàng)建指令(例如,其在RBX寄存器中的地址)相關(guān)聯(lián)。頁面信息可以 具有指定要被復(fù)制到SECS310的源SECS的地址的字段。該源SECS可以包括要被復(fù)制到 SECS屬性字段316的源SECS屬性位陣列(例如,在框516中由ISV450提供)。源SECS 屬性位陣列中的每一位以及SECS屬性字段316中的相對應(yīng)的位可以與特定平臺特征相對 應(yīng)。如果源SECS屬性位陣列中的位被設(shè)置,則飛地的創(chuàng)建者(例如,軟件安裝器應(yīng)用程序 432)想要在正被創(chuàng)建的飛地(例如,用戶飛地430)中啟用相對應(yīng)的特征,換言之,想要使該 相應(yīng)的特征對在該飛地中運(yùn)行的軟件應(yīng)用程序或應(yīng)用程序(例如,用戶軟件應(yīng)用程序434) 可利用、可使用、或被用于所述軟件應(yīng)用程序或應(yīng)用程序。然而,如下文所述的或根據(jù)本發(fā) 明另一個實施例,除非使用該特征的許可得到驗證,否則該特征不會被啟用。
[0049] 在框548中,軟件安裝器應(yīng)用程序432可以向飛地添加一個或多個頁面(或其他 區(qū)),例如,通過發(fā)布一個或多個添加指令,并且使所述一個或多個頁面被測量,例如,通過 發(fā)布一個或多個擴(kuò)展指令。向飛地添加頁面可以包括將源頁面從系統(tǒng)存儲器復(fù)制到EPC 中,并且將EPC頁面與飛地的SECS相關(guān)聯(lián)。源頁面可以是包括用于飛地的數(shù)據(jù)區(qū)的未加密 代碼、數(shù)據(jù)或其他信息的常規(guī)頁面,或者,源頁面可以是包括用于TCS區(qū)的數(shù)據(jù)的TCS頁面。 使它們被測量可以包括基于頁面或多個頁面的內(nèi)容、位置、和/或其他屬性來遞增地計算 或擴(kuò)展加密散列,并且將所述散列存儲在MRENCLAVE312中。在本實施例中,被添加的頁面 可以包括用于用戶軟件應(yīng)用程序434的代碼、數(shù)據(jù)、棧、堆等。
[0050] 在框550中,軟件安裝器應(yīng)用程序發(fā)布初始化指令以便于完成用戶飛地430的建 立,并且對其進(jìn)行初始化。在一個實施例中,初始化指令是EAX寄存器中的具有值0x2的 ENCLS的葉子。在框522中,對初始化指令的執(zhí)行(例如,由執(zhí)行單元270或280執(zhí)行)開 始。
[0051 ] 在一個實施例中,對初始化指令的執(zhí)行可以包括,在框554中,對許可標(biāo)記進(jìn)行校 驗以保證相對應(yīng)的飛地是有效的???54中使用的許可標(biāo)記可以與初始化指令(例如,其 在RDX寄存器中的地址)相關(guān)聯(lián)。在本實施例中,許可標(biāo)記可以是在框534中由許可飛地 420提供給軟件安裝器應(yīng)用程序432的許可標(biāo)記。
[0052] 在框556中,對許可標(biāo)記進(jìn)行校驗可以包括,獲取在創(chuàng)建該許可標(biāo)記中使用的許 可密鑰(或用于獲得該許可密鑰的密鑰),以及在框558中,使用該許可密鑰來基于許可標(biāo) 記的內(nèi)容計算MAC。在框560中,將在框558中計算的MAC與包括在許可標(biāo)記中的MAC相比 較。如果它們相匹配,則方法500在框562中繼續(xù)。否則,方法500在框590中繼續(xù)。
[0053] 許可標(biāo)記可以包括屬性位陣列,其中,許可標(biāo)記屬性位陣列中的每位與SECS屬性 字段316中的位以及特定的平臺特征相對應(yīng),其中,SECS還可以與初始化指令(例如,其在 ECX中的地址)相關(guān)聯(lián)。如果許可標(biāo)記屬性位陣列中的位被設(shè)置,則表示飛地被許可使用相 對應(yīng)的特征。
[0054] 在框562中,對許可標(biāo)記進(jìn)行校驗還可以包括,將許可標(biāo)記屬性位陣列中的每位 與SECS屬性字段316中的相對應(yīng)的位相比較,該SECS屬性字段316保存有被用于創(chuàng)建飛 地的源SECS屬性位陣列的副本。如果SECS屬性字段中設(shè)置的每一位都具有被設(shè)置在許可 標(biāo)記屬性位陣列中的相對應(yīng)的位,則方法500在框564中繼