被掛起的處理器狀態(tài)。在一個實施例 中,在安全閃存中實現(xiàn)RPMC 810,該安全閃存可以是(或可以不是)與用于安全存儲設(shè)備 820和830的閃存相同的閃存。下文提供與RPMC 810有關(guān)的附加細節(jié)。
[0071] 如上所述,在一個實施例中,向處理器和其他系統(tǒng)組件中的每一個配對提供以加 密方式綁定到這些設(shè)備的標識。本文中將該標識稱為"配對ID",將其計算為MAC密鑰822 的加密散列或MAC。在生產(chǎn)期間,可在數(shù)據(jù)庫中注冊每個平臺中的配對ID。僅具有經(jīng)注冊 配對的平臺受認可,并且被供應(yīng)證實密鑰。
[0072] 圖9示出在其中配對飛地805中的配對ID生成邏輯902使用計數(shù)器MAC密鑰822 生成配對ID 904的一個實施例。在一個實施例中,這是通過使用私有密鑰生成對計數(shù)器 MAC密鑰822的散列或MAC來實現(xiàn)。所得到的配對ID904包括計數(shù)器MAC密鑰822的非敏 感版本。也就是說,該配對ID 904是基于唯一的計數(shù)器MAC密鑰822的唯一碼,但是,該計 數(shù)器MAC密鑰822是保密的,并且不能夠從該配對ID 904中導(dǎo)出。
[0073] 在一個實施例中,可由該配對飛地收集附加的配對數(shù)據(jù),并將這些附加的配對數(shù) 據(jù)用于注冊。這可包括例如與CSME 813有關(guān)的證實數(shù)據(jù)(如,被分配給CSME的增強型隱 私ID(EPID))。EPID是數(shù)字簽名方案,其中,一組公鑰對應(yīng)多個私鑰,可將這些私鑰中的一 個分配到該CSMA中??墒褂妹恳粋€唯一的EPID私鑰生成簽名,然后,可使用組公鑰來驗證 該簽名。因此,如果使用EPID,則可收集EPID信息并且將其用于注冊??蓪⒅T如配對飛地 805的度量(例如,該配對飛地805唯一的配置數(shù)據(jù)或標識數(shù)據(jù))之類的各種附加數(shù)據(jù)用于 注冊。
[0074] 在一個實施例中,配對飛地805中的注冊邏輯905在生產(chǎn)平臺數(shù)據(jù)庫950中注冊 配對ID和任何其他配對數(shù)據(jù)906 (例如,上文所述的EPID信息)。然后,可訪問該生產(chǎn)平 臺數(shù)據(jù)庫950以確保處理器和其他組件之間的配對保持一致。如果檢測到變化(例如,將 新的/未配對的組件引入了該系統(tǒng)),則在一個實施例中,將不供應(yīng)證實密鑰(例如,SGX密 鑰)并且/或者使證實密鑰不可用。
[0075] 圖10示出用于對計算系統(tǒng)的多個組件進行配對和注冊的方法的一個實施例。可 在圖8-9中所示系統(tǒng)的情境中實現(xiàn)該方法,但是該方法不限于任何特定的系統(tǒng)實現(xiàn)。
[0076] 在1001處,安全模塊(例如,一個實施例中的配對飛地805)生成計數(shù)器MAC密鑰 (在本文中有時被簡單地稱為"MAC密鑰")。例如,如所指出的那樣,該安全模塊可使用該 計算平臺上所提供的數(shù)字隨機數(shù)生成器(DRNG)來生成該計數(shù)器MAC密鑰822。
[0077] 在1002處,該安全模塊密封該計數(shù)器MAC密鑰,并將被密封的MAC密鑰存儲在安 全存儲設(shè)備中。在一個實施例中,"密封"的意思是使用僅為執(zhí)行該密封操作的實體(例如, 處理器)所知的機密密鑰、并且以僅能由該實體解密的方式來對該MC密鑰進行加密。
[0078] 在1003處,該安全模塊實現(xiàn)加密認證協(xié)議以建立與處理器外組件之間的安全通 信通道。在本文中所討論的某些實施例中,該處理器外組件是芯片組可管理性引擎(CSME)。 可使用任何安全通信協(xié)議來建立該安全連接。例如,如所指出的那樣,該加密認證協(xié)議可包 括基于增強型隱私ID(EPID)的密鑰交換協(xié)議,例如,(ISO 20009-2所指定的)直接匿名證 實(DAA)SIGMA協(xié)議。然而,本發(fā)明的基本原理不限于任何特定的加密認證協(xié)議。
[0079] 在1004處,一旦建立了安全通道,該安全模塊將該計數(shù)器MAC密鑰發(fā)送到處理器 外組件(OPC)中,并且在1005處,該OPC對該計數(shù)器MAC密鑰的副本進行加密。在1006處, 將經(jīng)OPC加密的和經(jīng)處理器密封的、該計數(shù)器MAC密鑰的副本存儲在安全的非易失性存儲 設(shè)備中,用于將來的掛起/恢復(fù)操作。如所指出的那樣,該處理器可利用與處理器外組件 分開的安全存儲設(shè)備,或者處理器和處理器外組件兩者都可使用同一個安全存儲設(shè)備(例 如,安全閃存)。在后一種情況下,該處理器將其計數(shù)器MC密鑰的被密封的副本發(fā)送到該 處理器外組件中,該處理器外組件執(zhí)行存儲操作。在前一種情況下,該處理器將其計數(shù)器 MC密鑰的副本保存到其安全存儲設(shè)備中。
[0080] 圖11示出用于注冊計算系統(tǒng)的多個組件的一個實施例。可在圖8-9中所示系統(tǒng) 的情境中實現(xiàn)該方法,但是該方法不限于任何特定的系統(tǒng)實現(xiàn)。
[0081] 在1101處,可使用計數(shù)器MAC密鑰來生成配對ID。例如,在一個實施例中,由安全 模塊來實現(xiàn),該安全模塊(例如,使用機密密鑰)執(zhí)行計數(shù)器MAC密鑰的加密散列或MAC。
[0082] 在1102處,可選地收集其他配對信息。該信息可包括例如與處理器外組件有關(guān)的 證實數(shù)據(jù)(例如,增強型隱私ID (EPID))。此外,如所指出的那樣,也可將與安全模塊有關(guān)的 信息用于注冊。
[0083] 在1103處,在生產(chǎn)平臺數(shù)據(jù)庫中注冊該配對ID(以及潛在的其他配對)。然后, 可訪問該生產(chǎn)平臺數(shù)據(jù)庫以確保處理器和其他組件之間的配對保持一致。如果檢測到變化 (例如,將新的/未配對的組件引入了該系統(tǒng)),則在一個實施例中,將不供應(yīng)證實密鑰(例 如,SGX密鑰),并且/或者使證實密鑰不可用。
[0084] 圖12示出在本發(fā)明的一個實施例中、在恢復(fù)操作(例如,當(dāng)系統(tǒng)從被掛起的狀態(tài) 蘇醒時)期間所采用的操作序列和架構(gòu)。在圖12中所示的特定實施例中,安全掛起/恢復(fù) (SSR)模塊1200使處理器(未示出)結(jié)合芯片組可管理性引擎(CSME) 813執(zhí)行一系列操 作,從而確保加載了有效的處理器狀態(tài)。
[0085] 執(zhí)行現(xiàn)時數(shù)(nonce)生成器1201 (其可包括GETSN0NCE (獲取現(xiàn)時數(shù))指令)以 生成加密現(xiàn)時數(shù)1202。如本領(lǐng)域技術(shù)人員所理解的那樣,加密現(xiàn)時數(shù)是在加密通信期間僅 能被使用一次的隨機數(shù)。然后,該SSR模塊1200將該現(xiàn)時數(shù)1202和INCREMENT命令傳送 到CSME 813。在一個實施例中,在不安全總線(如,HECI總線)上傳送該INCREMENT命令 和現(xiàn)時數(shù)。在另一實施例中,該SSR 1200可實現(xiàn)與CSME 813之間的加密認證協(xié)議以在該 總線上建立安全的通信通道。
[0086] 響應(yīng)于該INCREMENT指令,該CSME使RPMC 810遞增。在一個實施例中,計數(shù)器結(jié) 構(gòu)生成器 1205 生成 COUNTER_STRUCTURE (計數(shù)器結(jié)構(gòu))1206,該 COUNTER_STRUCTURE 包括 現(xiàn)時數(shù)和從RPMC 810中讀取的當(dāng)前計數(shù)器值。在一個實施例中,MAC生成模塊1210使用 MAC密鑰822,生成對該COUNTER_STRUCTURE的MAC (或其他散列操作)。然后,如所示出的 那樣,將所得到的COUNTER_STRUCTURE和MAC 1212傳回到SSR模塊1200中。
[0087] 然后,該SSR 1200執(zhí)行L0ADSTATE (加載狀態(tài))指令1220,該指令包括指針,該指 針指向:(1)由配對飛地(見圖8和10以及相關(guān)聯(lián)的文本)創(chuàng)建的SEALED_COUNTER_MAC_ KEY (被密封的計數(shù)器MAC密鑰)結(jié)構(gòu)825 ; (2)由CSME 813返回的C0UNTER_STATE (計數(shù) 器狀態(tài))1206;以及⑶PR0CESS0R_STATE 1225,其包括先前的(在掛起操作之前的)內(nèi)部 處理器狀態(tài)值以及正確的計數(shù)器。
[0088] 在一個實施例中,該L0ADSTATE指令對計數(shù)器MAC密鑰825進行解密,從而驗證 在處理器上創(chuàng)建了該計數(shù)器MAC密鑰825。該L0ADSTATE指令使用計數(shù)器MAC密鑰825驗 證由 CSME 813 在 COUNTER_STRUCTURE 上生成的 MAC。該 L0ADSTATE 指令驗證 C0UNTER_ STRUCTURE中的現(xiàn)時數(shù)與先前由現(xiàn)時數(shù)生成器1201提供的現(xiàn)時數(shù)相同。然后,該L0ADSTATE 指令對PR〇CESSOR_STATE 1225進行解密并校驗其完整性。最后,該L0ADSTATE指令通過驗 證COUNTER_STRUCTURE 1206中的當(dāng)前計數(shù)器與PR0CESS0R_STATE 1225中的計數(shù)器相同來 驗證PR0CESS0R_STATE1225是最新的狀態(tài)。如果COUNTER_STRUCTURE 1206中的當(dāng)前計數(shù)器 與PR0CESS0R_STATE 1225中的計數(shù)器匹配,則PR0CESS0R_STATE 1225是最新的狀態(tài)。如 果所有的安全校驗都通過了,則加載并執(zhí)行PR〇CESSOR_STATE。
[0089] 圖13示出可在處理器掛起時(例如,處理器進入高級配置和電源接口(ACPI)規(guī) 范所定義的S3或S4狀態(tài))由SSR模塊1200執(zhí)行的操作序列。響應(yīng)于掛起指示1301,執(zhí) 行EXP0RT_PR0CESS0R_STATE (輸出處理器狀態(tài))指令1302。在一個實施例中,該EXP0RT_ PR0CESS0R_STATE指令1302輸出包含當(dāng)前處理器狀態(tài)和下一計數(shù)器值1304(其是下一次 引導(dǎo)將預(yù)期的計數(shù)器)的新的PR〇CESSOR_STATE結(jié)構(gòu)1225。當(dāng)前的處理器狀態(tài)可包括諸 如處理器架構(gòu)狀態(tài)和軟件防護擴展(SGX)所使用的分頁密鑰數(shù)據(jù)(例如,分頁加密元數(shù)據(jù) (PCMD))、或成功地恢復(fù)計算系統(tǒng)的操作所需的任何其他數(shù)據(jù)之類的任何狀態(tài)信息。如果執(zhí) 行了附加的恢復(fù)和掛起,則該計數(shù)器將小于當(dāng)前計數(shù)器,并且將被檢測為舊的PR〇CESSOR_ STATE。在一個實施例中,在輸出該PR0CESS0R_STATE結(jié)構(gòu)1225之后,該操作系統(tǒng)關(guān)閉,并 且該系統(tǒng)進入被掛起的狀態(tài)(如,S3或S4狀態(tài))。
[0090] 在一個實施例中,可將由該系統(tǒng)使用的所有密鑰綁定到系統(tǒng)組件的配對中,并且 在任何重新配對事件之后必須改變所有這些密鑰。這對于防止將這些密鑰暴露給可使用不 受信任硬件的惡意發(fā)起的配對而言是重要的。為了實現(xiàn)所有密鑰之間的綁定以及實現(xiàn)配 對,在一個實施例中,將配對ID904注入到所有的密鑰中。
[0091] 如果配對環(huán)境比運行時引導(dǎo)環(huán)境更安全,則可在諸如通過使用下列方法導(dǎo)出安全 密鑰之后添加配對ID 904:
[0092] SuspendableKey = CMAC (PairingEnvironmentKey, PairingID)(可掛起密鑰= CMC (配對環(huán)境密鑰,配對ID))
[0093] 圖14示出在其中密鑰注入模塊1