專利名稱:包含可進(jìn)入安全執(zhí)行模式的處理器的一計(jì)算機(jī)系統(tǒng)的初始化的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及采用可進(jìn)入安全執(zhí)行模式的處理器的計(jì)算機(jī)系統(tǒng),特別是涉及計(jì)算機(jī)系統(tǒng)及可進(jìn)入安全執(zhí)行模式的處理器的初始化。
背景技術(shù):
現(xiàn)代的計(jì)算機(jī)系統(tǒng)正在徹底改變?nèi)祟惿畹姆绞健_@種現(xiàn)象在其中包含采用x86系統(tǒng)架構(gòu)的微處理器的系統(tǒng)平臺尤為真切。由于采用x86處理器的系統(tǒng)對大量用戶可安裝的第三方外圍設(shè)備及應(yīng)用程序的開放性,因而促成了具有競爭性、創(chuàng)新性及進(jìn)化性的硬件及軟件供貨商的廣大市場。這種進(jìn)化性的一個例子就是現(xiàn)在已將該平臺廣泛地用來作為品質(zhì)及能力愈來愈進(jìn)步的數(shù)字通訊及媒體系統(tǒng)。在與互聯(lián)網(wǎng)配合之下,這些系統(tǒng)平臺正明確地徹底改變了數(shù)字內(nèi)容的大量配送,可對報(bào)紙、全世界的實(shí)時(shí)天氣狀況及廣播電臺、在線銀行及購物以及音樂及基于視頻的娛樂節(jié)目進(jìn)行獲取點(diǎn)播。
因?yàn)閤86平臺是一種開放性的架構(gòu),所以各裝置通常具有由供貨商提供且在核心模式下執(zhí)行以便存取該裝置的驅(qū)動程序,且某些應(yīng)用軟件可包含核心模式模塊。因此,雖然這種開放性架構(gòu)有其優(yōu)點(diǎn),且對各應(yīng)用程序之間偶發(fā)性的干擾仍然提供了相當(dāng)程度的保護(hù),但是現(xiàn)有架構(gòu)上的保護(hù)機(jī)制在這種環(huán)境下仍然可能受到不當(dāng)?shù)牟倏v。
其中包含采用x86架構(gòu)的微處理器的計(jì)算機(jī)系統(tǒng)包括設(shè)計(jì)成不會受到各應(yīng)用程序之間相互干擾的一些特征。例如,基于x86的操作系統(tǒng)有賴于x86保護(hù)模式架構(gòu)的兩項(xiàng)特征,而提供一種使各應(yīng)用程序相互隔離且使關(guān)鍵性的操作系統(tǒng)程序代碼及數(shù)據(jù)與應(yīng)用程序隔離的環(huán)境,這兩項(xiàng)特征是1)分頁式虛擬內(nèi)存;以及2)執(zhí)行優(yōu)先級等級。
分頁式虛擬內(nèi)存可讓操作系統(tǒng)(OS)為每一應(yīng)用程序定義一獨(dú)立的虛擬地址空間,并利用一組地址轉(zhuǎn)換表而將各個分頁的物理內(nèi)存選擇性地映射到這些虛擬地址空間的每一虛擬地址空間。這種方式給每一應(yīng)用程序提供物理內(nèi)存各自的專用區(qū)段,用于其它應(yīng)用程序不得存取的程序代碼及數(shù)據(jù),。該虛擬內(nèi)存機(jī)制也可讓操作系統(tǒng)將各分頁的物理內(nèi)存選擇性地映射到多個虛擬地址空間,并將虛擬空間中的這些分頁選擇性地指定為只讀。這種共享的映射能力也可讓操作系統(tǒng)核心本身的一拷貝常駐在每一應(yīng)用程序的地址空間,且同樣地可以以共享方式映射各外圍設(shè)備存取端口及相關(guān)聯(lián)的裝置驅(qū)動例程,因而可使各應(yīng)用程序有效率地使用操作系統(tǒng)服務(wù),而無須高代價(jià)的地址空間切換。但是,地址空間的操作系統(tǒng)部分必然包含操作系統(tǒng)程序代碼必須可修改的系統(tǒng)數(shù)據(jù)區(qū),且仍然要使應(yīng)用程序代碼無法修改這些系統(tǒng)數(shù)據(jù)區(qū)。這種只讀的指定可能無法對這些區(qū)域提供適當(dāng)?shù)谋Wo(hù)。
x86架構(gòu)也定義了0至3的四個優(yōu)先級等級,而由操作系統(tǒng)將這些優(yōu)先級等級指定給各程序代碼區(qū),且將這些優(yōu)先級等級保存在程序代碼片段描述符中。當(dāng)前執(zhí)行的程序代碼或程序的優(yōu)先級等級通常將被儲存為當(dāng)前優(yōu)先級等級(Current Privilege Level;簡稱CPL)。因此,通常將這些優(yōu)先級等級稱為CPL0至CPL3。使用這些優(yōu)先級等級時(shí),只能由在適當(dāng)?shù)燃壪聢?zhí)行的程序代碼使用某些系統(tǒng)資源。該分頁式虛擬內(nèi)存架構(gòu)可以允許存取被優(yōu)先級等級限制的各分頁的虛擬內(nèi)存。雖然定義了四個優(yōu)先級等級,但是主流的操作系統(tǒng)通常只使用CPL0及CPL3等級,這是因?yàn)榉猪撌教摂M內(nèi)存架構(gòu)并未將CPL1或CPL2與CPL3加以區(qū)分。通常將CPL0稱為核心模式,且是最高的優(yōu)先級等級,而通常將CPL3稱為用戶模式,且是最低的優(yōu)先級等級。通常將CPL0指定給操作系統(tǒng)程序代碼及數(shù)據(jù),而將CPL3指定給應(yīng)用程序代碼及數(shù)據(jù)。CPL0執(zhí)行優(yōu)先級并不會凌駕于只讀保護(hù)之上;這兩種屬性是獨(dú)立的。程序代碼片段描述符被用來指定這些等級。
除了該內(nèi)存保護(hù)之外,所有的處理器控制寄存器(包括用來控制虛擬內(nèi)存操作操作的那些處理器控制寄存器)在架構(gòu)定義下只能在CPL0下被存取。此外,通常需要特殊的控制轉(zhuǎn)移指令將執(zhí)行自一片段切換到另一片段,且因而切換優(yōu)先級等級。這些指令可讓操作系統(tǒng)將這種控制轉(zhuǎn)移的目標(biāo)限制在受操作系統(tǒng)控制的程序代碼中的特定進(jìn)入點(diǎn),因而一應(yīng)用程序無法在不同時(shí)將控制遞交給操作系統(tǒng)的情形下改變優(yōu)先級等級。
虛擬內(nèi)存地址轉(zhuǎn)換表的內(nèi)容可完全控制各地址空間的相互隔離以及操作系統(tǒng)與各應(yīng)用程序間的隔離。這些轉(zhuǎn)換表定義了使各應(yīng)用程序的內(nèi)存相互隔離的虛擬至物理分頁映射關(guān)系,且還定義了用來保護(hù)共享的函式庫及操作系統(tǒng)的只讀及優(yōu)先級等級屬性。這些表本身是常駐在內(nèi)存的數(shù)據(jù)結(jié)構(gòu),且包含若干轉(zhuǎn)換數(shù)據(jù)項(xiàng),用以將各轉(zhuǎn)換數(shù)據(jù)項(xiàng)映射到共享的操作系統(tǒng)內(nèi)存區(qū)域,并限制這些轉(zhuǎn)換數(shù)據(jù)項(xiàng)對核心模式程序代碼的存取。
現(xiàn)有的保護(hù)機(jī)制似乎對應(yīng)用程序及操作系統(tǒng)提供了適當(dāng)?shù)谋Wo(hù)。在一行為端正的系統(tǒng)(例如,操作系統(tǒng)正確地應(yīng)用這些機(jī)制,正確地操作用來控制這些機(jī)制的操作系統(tǒng)程序代碼,且在核心模式下執(zhí)行的所有其它程序代碼并不會干擾該機(jī)制)中,這些保護(hù)機(jī)制的確能發(fā)揮作用。然而,典型的x86系統(tǒng)包含來自操作系統(tǒng)供貨商以及來自許多獨(dú)立來源的大量的核心模式程序代碼,因而任何人都無法保證不會發(fā)生偶發(fā)的或以其它方式進(jìn)行的干擾。
根據(jù)用戶正在執(zhí)行的操作類型,且根據(jù)正在執(zhí)行的應(yīng)用軟件的類型,外部的存取可能易于傷害到計(jì)算機(jī)系統(tǒng)內(nèi)儲存的或在計(jì)算機(jī)系統(tǒng)上執(zhí)行的信息。因此,目前需要改良安全性,且因而可使x86架構(gòu)系統(tǒng)較不易受到這種存取的傷害。
發(fā)明內(nèi)容
本發(fā)明揭示了其中包含一可進(jìn)入安全執(zhí)行模式的處理器的一計(jì)算機(jī)系統(tǒng)的初始化的各實(shí)施例。在一實(shí)施例中,一種將其中包含一可進(jìn)入安全執(zhí)行模式的處理器及一系統(tǒng)內(nèi)存的一計(jì)算機(jī)系統(tǒng)初始化的方法包含下列步驟將一安全操作系統(tǒng)程序代碼片段加載程序儲存在對應(yīng)于該系統(tǒng)內(nèi)存內(nèi)的一特定地址范圍的多個位置。該方法還包含下列步驟執(zhí)行一安全初始化指令。執(zhí)行該安全初始化指令時(shí),可使其中包括傳輸其中包含該特定地址范圍的一基址的一起始事務(wù)處理的數(shù)個操作被執(zhí)行。此外,執(zhí)行該安全指令時(shí),也可使另一操作被執(zhí)行,該另一操作包括自系統(tǒng)內(nèi)存獲取該安全操作系統(tǒng)程序代碼片段加載程序,并以多個數(shù)據(jù)事務(wù)處理的形式傳輸該安全操作系統(tǒng)程序代碼片段加載程序,以供驗(yàn)證。
在另一實(shí)施例中,該方法也可包含下列步驟除了可進(jìn)入安全執(zhí)行模式的處理器之外,禁止任何裝置存取該特定地址范圍。
在另一實(shí)施例中,安全初始化指令可以是其中包括多個以不可分割方式執(zhí)行的微碼成分的一單一指令,而當(dāng)執(zhí)行這些微碼成分時(shí)可使這些操作被執(zhí)行。
圖1為根據(jù)一可進(jìn)入安全執(zhí)行模式的處理器的一實(shí)施例的操作領(lǐng)域以及在這些領(lǐng)域中操作的程序代碼的行為。
圖2為采用一可信賴的運(yùn)算平臺的一計(jì)算機(jī)系統(tǒng)的一實(shí)施例的一方框圖。
圖3為一可進(jìn)入安全執(zhí)行模式的處理器的一實(shí)施例的一方框圖。
圖4為其中包含一可進(jìn)入安全執(zhí)行模式的處理器的一計(jì)算機(jī)系統(tǒng)的一實(shí)施例在一安全初始化期間的操作的一流程圖。
雖然本發(fā)明易于作出各種修改及替代形式,但是這些圖式中以舉例方式示出本發(fā)明的一些特定實(shí)施例,且已在本文中詳細(xì)說明了這些特定實(shí)施例。然而,我們當(dāng)了解,這些圖標(biāo)及本文中詳細(xì)說明的用意并非將本發(fā)明限制在所揭示的這些特定形式,相反地,本發(fā)明將涵蓋最后的權(quán)利要求范圍所定義的本發(fā)明的精神及范圍內(nèi)的所有修改、等效物及替代。
具體實(shí)施例方式
安全運(yùn)算平臺概觀可信賴的運(yùn)算可讓計(jì)算機(jī)系統(tǒng)(例如個人計(jì)算機(jī))的用戶參與諸如下載電子現(xiàn)金及電影同時(shí)使其隱私不會受到侵犯等的新活動。要成為一可信賴的運(yùn)算環(huán)境中的一部分時(shí),用戶以及諸如銀行及內(nèi)容提供者等的外部實(shí)體都必須信賴該P(yáng)C本身。產(chǎn)生一可信賴的PC所必需的關(guān)鍵性要素包括一可信賴的處理環(huán)境、特定平臺的秘密、密碼處理、安全儲存以及被稱為一安全核心(Security Kernel;簡稱SK)的安全操作系統(tǒng)程序代碼片段。在下文中將更詳細(xì)地說明用來實(shí)施這些要素的建構(gòu)模塊。
被設(shè)定成執(zhí)行x86指令的處理器通常包含諸如提供分頁式虛擬內(nèi)存及優(yōu)先級執(zhí)行模式的保護(hù)模式等的一些架構(gòu)功能、以及控制這些功能的一組控制寄存器。對這些控制寄存器及分頁表存取的控制可提供禁止對一計(jì)算機(jī)系統(tǒng)內(nèi)的程序代碼及數(shù)據(jù)進(jìn)行未經(jīng)授權(quán)的存取的額外保護(hù)。因此,增添這種處理器的一組架構(gòu)延伸以及對應(yīng)的軟件支持時(shí),可提供這種保護(hù)??蓪⒁惶幚砥鞯恼w安全強(qiáng)化措施稱為一安全執(zhí)行模式(Secure Execution Mode;簡稱SEM)。安全執(zhí)行模式是一種加入一處理器的新操作模式,用以產(chǎn)生可使一安全核心在不會被外部篡改的情形下執(zhí)行的一可信賴的執(zhí)行環(huán)境。
因此,可在SEM中工作的一處理器可包含安全硬件(圖中未示出),而當(dāng)該安全硬件被SEM啟動時(shí),將提供諸如操作的一可信賴的執(zhí)行(TX)模式等的對SEM操作模式的支持。如將在下文中更詳細(xì)說明的,根據(jù)正在執(zhí)行的何種軟件及其優(yōu)先級等級,該可信賴的執(zhí)行模式包含了除了可在正常用戶模式及正常核心模式中操作外還可在一安全用戶模式及一安全核心模式中操作的可進(jìn)入SEM的處理器。還可提供用來產(chǎn)生一受保護(hù)的內(nèi)存區(qū)域的機(jī)制,其中只能由在該環(huán)境內(nèi)執(zhí)行的軟件存取該受保護(hù)的內(nèi)存區(qū)域,并禁止某些硬件內(nèi)存存取(例如直接內(nèi)存訪問(Direct Memory Access;簡稱DMA))操作對該區(qū)域的存取。
這個新的可信賴的執(zhí)行環(huán)境(TX)有些類似于用來將用戶與核心環(huán)境隔離的傳統(tǒng)的正常/保護(hù)模式(CPL3/CPL0)。如將在下文中配合圖1而更詳細(xì)說明的,用戶/核心模式與可信賴的/不可信賴的模式的組合產(chǎn)生了一種四個象限的模式。因此,一可進(jìn)入SEM的CPU包含用來產(chǎn)生并強(qiáng)化TX模式的硬件機(jī)制。
現(xiàn)在請參閱圖1,圖中示出一可進(jìn)入安全執(zhí)行模式的處理器的一實(shí)施例的操作領(lǐng)域、以及在這些領(lǐng)域中操作的程序代碼的行為。如上所述,現(xiàn)有的基于x86的操作系統(tǒng)通常使用四個可用優(yōu)先級等級中的兩個優(yōu)先級等級(例如CPL0及CPL3)來實(shí)施一正常執(zhí)行模式或保護(hù)領(lǐng)域內(nèi)的兩種模式正常核心模式及正常用戶模式。當(dāng)SEM被啟動時(shí),這些SEM強(qiáng)化措施定義了被稱為可信賴的執(zhí)行(TX)模式的一新的執(zhí)行模式。當(dāng)將TX模式與現(xiàn)有的正常執(zhí)行模式保護(hù)領(lǐng)域結(jié)合時(shí),TX模式產(chǎn)生了將在下文中說明的四個不同的模式或軟件操作領(lǐng)域。在所示實(shí)施例中,這些四個領(lǐng)域是正常用戶(Normal User;簡稱NU)領(lǐng)域1010、正常核心(Normal Kernel;簡稱NK)領(lǐng)域1020、安全用戶(SecureUser;簡稱SU)領(lǐng)域1030、以及安全核心(Secure Kernel;簡稱SK)領(lǐng)域1040。
NU領(lǐng)域1010的特征為可在一正常用戶模式(亦即CPL=3)中執(zhí)行但無法在可信賴的執(zhí)行(TX)模式中執(zhí)行的一處理器。在NU領(lǐng)域1010中,典型的虛擬內(nèi)存環(huán)境可允許未經(jīng)修改的應(yīng)用程序的正常操作。然而,在SEM之下,不允許這些應(yīng)用程序存取常駐在SU領(lǐng)域1030的應(yīng)用程序的內(nèi)存、或存放了SK領(lǐng)域1040中的安全核心1021的內(nèi)存。此外,諸如U/S及R/W分頁屬性等現(xiàn)有的保護(hù)邏輯機(jī)制也不允許這些應(yīng)用程序存取操作系統(tǒng)核心1023或正常核心領(lǐng)域1023中的裝置驅(qū)動程序。
在NK領(lǐng)域1020中,SEM可允許未經(jīng)修改的操作系統(tǒng)核心1023組件及核心模式裝置驅(qū)動程序的正常操作。在該領(lǐng)域中執(zhí)行的程序代碼可存取NU領(lǐng)域1010中的對象,但是在SEM之下禁止這些程序代碼存取SU領(lǐng)域1030或SK領(lǐng)域1040中的對象。此外,NK領(lǐng)域1020的特征為可在一正常核心模式(亦即CPL=0)中執(zhí)行但無法在TX模式中執(zhí)行的一處理器。當(dāng)在NK領(lǐng)域1020中啟動分頁機(jī)制時(shí),有時(shí)可將一處理器稱為在一本地核心模式(Native kernel mode)中操作。
在SU領(lǐng)域1030中,SEM可允許執(zhí)行諸如高安全應(yīng)用程序(HighSecurity Application;簡稱HSA)1等的一新類型的應(yīng)用軟件?,F(xiàn)有的x86分頁保護(hù)及分頁映射機(jī)制可禁止HSA軟件存取任何其它領(lǐng)域中的對象。此外,禁止HSA對其中包括操作系統(tǒng)核心1023及裝置驅(qū)動程序(圖2中未示出)的NU領(lǐng)域1010及NK領(lǐng)域1020中執(zhí)行的任何程序代碼作未經(jīng)授權(quán)的存取。如將在下文中更詳細(xì)說明的,安全核心1021可負(fù)責(zé)建立并維護(hù)各HSA的虛擬地址空間。此外,SU領(lǐng)域1030的特征為可在用戶模式(亦即CPL=3)中且可在TX模式中執(zhí)行的一處理器,因而也可將SU領(lǐng)域1030稱為一安全用戶模式。
在SK領(lǐng)域1040中,SEM可允許安全核心1021完整地存取所有的平臺資源,此外,也可將對這些資源的唯一控制權(quán)授予安全核心1021。SK領(lǐng)域1040的特征為可在核心模式(亦即CPL=0)中且可在TX模式中執(zhí)行的一處理器,因而也可將SK領(lǐng)域1040稱為一安全核心模式。
一般而言,安全核心1021是在可信賴的執(zhí)行(TX)模式中執(zhí)行的軟件。在一實(shí)施例中,安全核心1021可以是在SK領(lǐng)域1040中執(zhí)行的唯一軟件。在SK領(lǐng)域1040中,安全核心1021可控制所有的虛擬至物理內(nèi)存映射,且可控制外部裝置可存取物理內(nèi)存的哪些區(qū)域。然而,安全核心1021將依賴操作系統(tǒng)核心的程序產(chǎn)生功能,其中包括正常模式的虛擬內(nèi)存映射、HSA內(nèi)存起始映射以及HSA程序代碼及數(shù)據(jù)區(qū)段的加載。然而,安全核心1021可監(jiān)視每一這種內(nèi)存映射,以便確保不會將可信賴的內(nèi)存未經(jīng)授權(quán)地映射到不可信賴的虛空間。因此,安全核心1021可將內(nèi)存中不可信賴的所有區(qū)域視為不可信賴的。此外,安全核心1021可將不受安全核心1021控制的所有執(zhí)行中的程序代碼視為不可信賴的。請注意,在一實(shí)施例中,安全核心1021可以是可能為一現(xiàn)有操作系統(tǒng)的修補(bǔ)程序的一獨(dú)立程序代碼片段。在替代實(shí)施例中,安全核心1021可以是在一特定操作系統(tǒng)內(nèi)且為該特定操作系統(tǒng)的一部分的一模塊或程序代碼片段。
SEM的主要功能包括通過將在SEM執(zhí)行的處理器初始化,而將系統(tǒng)置于可信賴的環(huán)境;驗(yàn)證SK的可信賴性;以及使該可信賴的環(huán)境不會受到外部的攻擊。請注意,可互換地使用CPU、微處理器及處理器這些術(shù)語。因此,SEM的一項(xiàng)主要特征是在系統(tǒng)開機(jī)及執(zhí)行之后,可易于啟動SEM保護(hù)。在一實(shí)施例中,可以不需要改變典型x86平臺的啟動程序。通??捎梢幌到y(tǒng)軟件模塊(為了便于說明本文件,將該系統(tǒng)軟件模塊稱為一SEM驅(qū)動程序(圖中未示出))開啟SEM保護(hù)。該SEM驅(qū)動程序可獨(dú)立于操作系統(tǒng)核心,但在核心模式中執(zhí)行,非常像任何裝置驅(qū)動程序。如將于下文中參照圖2至4而更詳細(xì)說明的,自典型x86平臺的未受保護(hù)的系統(tǒng)環(huán)境可靠地建立SEM保護(hù)的的關(guān)鍵是被稱為安全核心初始化(Security Kernel Initialization;簡稱SKINIT)指令的一個新的安全指令,而該SKINIT指令將為SEM驅(qū)動程序所使用。
產(chǎn)生一可信賴的PC的主要部分是一唯一的且為特定平臺的秘密。實(shí)際上,該秘密可以是一公開/私有密鑰對的那私密的一半。只有在可信賴的環(huán)境內(nèi)執(zhí)行該P(yáng)C時(shí),才必須使用該秘密,且必須將該秘密泄漏給任何人或任何程序代碼??尚孤┦褂迷撁孛艿拿艽a操作的結(jié)果,但不可泄漏該秘密本身。為了使上述步驟可運(yùn)作,該秘密以及使用該秘密的密碼處理機(jī)必須存在于具有受控制的輸入及輸出的一密封盒子中。以實(shí)際的術(shù)語而言,一密封的盒子意指包含處理能力及非易失性儲存單元的一單一集成電路(IC)封裝。該裝置被稱為一安全服務(wù)處理器(Security Service Processor;簡稱SSP)。在一實(shí)施例中,需要至少一個SSP,且正好只有一個SSP參與該平臺初始化程序。
以架構(gòu)而言,可將該SSP放置在該平臺中的任何位置。唯一的要求是在可進(jìn)入SEM的處理器與該SSP之間存在有一條無法仿冒的且為安全的通訊路徑。在本說明書的用法中,在可進(jìn)入SEM的處理器與該SSP之間的一條無法仿冒的通訊路徑意指該SSP不會從在該可信賴的環(huán)境之外執(zhí)行的軟件或DMA硬件接收到命令的一條安全通訊路徑。當(dāng)正在將可信賴的環(huán)境初始化時(shí),上述的狀況可能尤其復(fù)雜。在這點(diǎn)上,該SSP必須驗(yàn)證SK的有效性,且必須確定正在被驗(yàn)證的該SK實(shí)際上就是此時(shí)在該可進(jìn)入SEM的處理器上執(zhí)行的程序代碼。該驗(yàn)證采取該SK的映射文件的一密碼散列值(cryptographic hash)的形式。必須以一種無法由正常軟件的操作而產(chǎn)生的方式將該散列值傳送到該SSP。此外,該可進(jìn)入SEM的處理器必須從一干凈的初始化狀態(tài)(且該SSP必須得知此點(diǎn))開始執(zhí)行該SK??墒褂谜\浖o法利用的CPU微碼及硬件機(jī)構(gòu),而符合上述那些要求。使用該SKINIT指令來執(zhí)行各種安全初始化功能,例如將可進(jìn)入SEM的處理器重新初始化;證實(shí)一多重處理(MP)系統(tǒng)中的其它處理器都被停止了;以及諸如使用保留的系統(tǒng)地址及特有的總線事務(wù)處理并跳到SK程序代碼,而與該SSP通訊。請注意,在一實(shí)施例中,該SKINIT指令是具有以不可分割方式執(zhí)行的多個微碼成分的一單一指令。在本說明書的用法中,不可分割方式執(zhí)行(to execute atomically)意指在不中斷的情形下按照一指定的順序一直執(zhí)行到完成。又請注意,在一實(shí)施例中,該初始化程序包含兩個步驟由該SSP確認(rèn)一小的安全加載程序(Security Loader;簡稱SL);以及隨即確認(rèn)大許多的SK。該SL是用來執(zhí)行與SK的加載相關(guān)聯(lián)的功能的一安全操作系統(tǒng)程序代碼片段加載程序。
采用一可信賴的運(yùn)算平臺的計(jì)算機(jī)系統(tǒng)請參閱圖2,圖中示出采用一可信賴的運(yùn)算平臺的一計(jì)算機(jī)系統(tǒng)的一實(shí)施例的一方框圖。計(jì)算機(jī)系統(tǒng)10包含標(biāo)示為SEM處理器100A及SEM處理器100B的兩個可進(jìn)入SEM的處理器。通過一處理器總線105將SEM處理器100A連接到SEM處理器100B。計(jì)算機(jī)系統(tǒng)10還包含被連接到SEM處理器100A的一系統(tǒng)內(nèi)存110A以及被連接到SEM處理器100B的一系統(tǒng)內(nèi)存110B。通過一系統(tǒng)總線125將SEM處理器100A連接到一I/O接口120。在所示的實(shí)施例中,通過一外圍設(shè)備總線145而將I/0接口120連接到一儲存裝置140及一外圍設(shè)備150。又通過外圍設(shè)備總線135而將I/O接口120連接到SSP130。在另一個實(shí)施例中,SSP130并未被連接到外圍設(shè)備總線135,而是可被連接到外圍設(shè)備總線145。請注意,雖然圖中示出兩個SEM處理器,但是其它的實(shí)施例可包含其它數(shù)目的SEM處理器。還請注意,具有相同代號及一英文字母的各組件可被單獨(dú)的代號所代表。例如,在適當(dāng)?shù)臅r(shí)機(jī),可只以SEM處理器100來表示SEM處理器100A。又請注意,在另一個實(shí)施例中,可將系統(tǒng)內(nèi)存110直接連接到I/O接口120。在這些實(shí)施例中,可在集成電路中以獨(dú)立于SEM處理器100A及100B的方式制造一個或多個內(nèi)存控制器。例如,在這些實(shí)施例中,I/O接口120可包含一個或多個內(nèi)存控制器。
SEM處理器100是采用x86架構(gòu)的一處理器的例子。例如,在一實(shí)施例中,SEM處理器100可以是由Advanced Micro Devices,Inc.所提供的一AthlonTM處理器。因此,SEM處理器100被設(shè)定成執(zhí)行可被儲存在系統(tǒng)內(nèi)存110或儲存裝置140中的x86指令。在所示實(shí)施例中,SEM處理器100可包含安全硬件(圖2中未示出),而當(dāng)該安全硬件被SEM啟動時(shí),提供對諸如前文中參照圖1所述的可信賴的執(zhí)行(TX)模式等的SEM操作模式的支持。
在所示實(shí)施例中,SEM處理器100A及SEM處理器100B分別包含被標(biāo)示為內(nèi)存控制器101A及101B的集成內(nèi)存控制器。如將在下文中更詳細(xì)說明的,內(nèi)存控制器101包含可使用來儲存SL映像的一個64KB的地址范圍不會受到未經(jīng)授權(quán)的存取的安全硬件(圖2中未示出)。也可將該安全硬件設(shè)定成將與SKINIT指令相關(guān)聯(lián)的各事務(wù)處理繞送到I/O接口120。請注意,在與SEM處理器100A及100B相同的集成電路上分別制造諸如內(nèi)存控制器101A及101B等的集成內(nèi)存控制器。
請注意,在諸如圖2所示配置的一多處理器實(shí)施例中,根據(jù)現(xiàn)有的高級可編程中斷控制器(Advanced Programmable InterruptController;簡稱APIC)標(biāo)準(zhǔn)特征,將其中一個處理器稱為啟動處理器(BootStrap Processor;簡稱BSP),且將另一處理器稱為應(yīng)用處理器(Application Processor;簡稱AP)。在所示實(shí)施例中,為了便于說明,SEM處理器100A是BSP,而SEM處理器100B是一AP。然而,在其它的實(shí)施例中,SEM處理器100B可以是BSP,而SEM處理器100A可以是AP。因此,一INIT處理器間中斷(Inter-Processor Interrupt;簡稱IPI)可將這些AP置于一暫停狀態(tài),而該暫停狀態(tài)只響應(yīng)一后續(xù)的啟動IPI。該啟動IPI可使各API在內(nèi)存中由該BSP所指定且連同該啟動IPI而傳送的一記憶位置上開始執(zhí)行。如將在下文中參照圖3而更詳細(xì)說明的,雖然被用來作為一AP,但是SEM處理器100A或100B都可被設(shè)定成響應(yīng)一啟動IPI,而支持一SEM初始化。
在所示實(shí)施例中,SEM處理器100A及SEM處理器100B分別包含被分別標(biāo)示為系統(tǒng)接口102A及102B的一系統(tǒng)接口單元。如將在下文中更詳細(xì)說明的,系統(tǒng)接口102包含可被設(shè)定成支持多處理器安全初始化的安全硬件(圖2中未示出)。
系統(tǒng)內(nèi)存110被設(shè)定成儲存SEM處理器100經(jīng)常使用的程序指令及數(shù)據(jù)。在一典型的系統(tǒng)配置中,可將儲存裝置140用來更持久地儲存程序指令及數(shù)據(jù),且當(dāng)SEM處理器100需要數(shù)據(jù)及程序代碼時(shí),可將這些數(shù)據(jù)及程序代碼轉(zhuǎn)移到系統(tǒng)內(nèi)存110。在SEM處理器100的操作期間,來自系統(tǒng)內(nèi)存110且可配合操作系統(tǒng)而執(zhí)行的安全核心可提供對SEM操作模式的額外支持。此外,可將系統(tǒng)內(nèi)存110分成一可信賴的部分及一不可信賴的部分。該安全核心為常駐在系統(tǒng)內(nèi)存110的可信賴的部分。如前文所述,通常利用分頁式虛擬內(nèi)存機(jī)制來存取系統(tǒng)內(nèi)存110。在這種配置中,內(nèi)存的個別分頁或塊塊可使用系統(tǒng)內(nèi)存110。通常由操作系統(tǒng)內(nèi)存管理功能來處理該該分頁功能。
在一實(shí)施例中,可使用以動態(tài)隨機(jī)存取內(nèi)存(Dynamic RandomAccess Memory;簡稱DRAM)技術(shù)或諸如同步DRAM(Synchronous DRAM;簡稱SDRAM)等可用的各種DRAM技術(shù)中的一種DRAM技術(shù)實(shí)現(xiàn)的多個內(nèi)存芯片來實(shí)現(xiàn)系統(tǒng)內(nèi)存110。通常是將這些DRAM芯片安裝在具有一邊緣連接器的小型電路板上,而這些小型電路板則被插入一主機(jī)板上的一插座連接器中。根據(jù)電路板的配置,可將這些小型電路板稱為單列直插內(nèi)存模塊(Single In-line Memory Module;簡稱SIMM)或雙列直插內(nèi)存模塊(Dual In-line Memory DModule;簡稱DIMM)。系統(tǒng)內(nèi)存110可包括多組內(nèi)存模塊,而可允許內(nèi)存擴(kuò)充。
如前文所述,儲存裝置140可儲存程序代碼及數(shù)據(jù)。在一實(shí)施例中,儲存裝置140可以是一硬盤機(jī)或一組硬盤機(jī),但是也可考慮包含諸如光驅(qū)、軟盤機(jī)及磁帶機(jī)等的其它大量儲存裝置的其它實(shí)施例。
外圍設(shè)備150可以是諸如調(diào)制解調(diào)器、視頻捕捉裝置或其它一般用途輸入輸出裝置等的任何外圍設(shè)備。請注意,在其它的實(shí)施例中,可使用其它數(shù)目的外圍設(shè)備。
可將I/O接口120設(shè)定成總線控制及事務(wù)處理,以供正常系統(tǒng)操作期間在不同的外圍設(shè)備總線與SEM處理器100A及100B間的事務(wù)處理。在一實(shí)施例中,I/O接口120可執(zhí)行與一北橋芯片相關(guān)聯(lián)的各功能。例如,外圍設(shè)備總線145可以是一外圍設(shè)備互連(PeripheralComponent Interconnect;簡稱PCI)總線,且外圍設(shè)備總線135可以是一低引腳數(shù)(Low Pin Count;簡稱LPC)的總線。此外,可將I/O接口120設(shè)定成決定是否有一SSP被連接到該I/O接口以及該SSP被連接到哪一總線,并可允許在一安全初始化期間在SEM處理器100與SSP130之間進(jìn)行無法仿冒的通訊。還將I/O接口120設(shè)定成識別與SKINIT指令相關(guān)的消息,并以外圍設(shè)備總線135的特定格式而將這些消息傳送到SSP130。
安全執(zhí)行模式初始化一般而言,在諸如SEM處理器100A及SEM處理器100B等的可進(jìn)入SEM的處理器上執(zhí)行安全核心初始化指令(SKINIT)。如前文所述,SKINIT指令可以是具有以不可分割方式執(zhí)行的多個微碼成分的一單一指令。此外,在一實(shí)施例中,該SKINIT指令可具有諸如EAX寄存器的內(nèi)容的一單一輸入操作數(shù)。在一實(shí)施例中,該SKINIT指令包含三個執(zhí)行階段初始化、數(shù)據(jù)轉(zhuǎn)移及跳越。該SKINIT指令可包含一特殊的協(xié)議,而該協(xié)議包含明確的轉(zhuǎn)移開始(例如散列開始,Hash_Start)及轉(zhuǎn)移終止(例如散列結(jié)束,Hash_End)指示,用以規(guī)范一可變量目的數(shù)據(jù)轉(zhuǎn)移周期(例如散列數(shù)據(jù),Hash_Data)。
在執(zhí)行該SKINIT指令之前,該SEM驅(qū)動程序可作各種系統(tǒng)準(zhǔn)備,例如分配內(nèi)存以供SL及SK使用;建立信息,而在SK取得控制權(quán)之后,該信息可恢復(fù)操作系統(tǒng)的狀態(tài)(該信息尤指諸如CR3、IDTR及LDTR等的各處理器控制寄存器的內(nèi)容);以及將可執(zhí)行的SL(及或有的SK)映射文件加載諸如系統(tǒng)內(nèi)存。
在成功地完成了該SKINIT指令之后,該SL可將其它的SEM硬件機(jī)構(gòu)及數(shù)據(jù)結(jié)構(gòu)初始化,確認(rèn)該可執(zhí)行的SK映像,啟動SEM,并開始執(zhí)行該SK。該SK然后可取得各地址轉(zhuǎn)換表、各控制寄存器、及各SEM硬件機(jī)構(gòu)的控制權(quán),然后回到可恢復(fù)操作的正常操作系統(tǒng),此時(shí)該SK退出,但使完全的SEM保護(hù)就定位。SEM驅(qū)動程序及SL操作的確切細(xì)節(jié)與實(shí)施例有關(guān),且取決于特定的操作系統(tǒng)、SL及SL特征。
在一實(shí)施例中,該SL映像可包含一安全加載程序的一完整實(shí)施例的程序代碼及初始化后的數(shù)據(jù)區(qū)段。該SL映像包含以一種完全安全的方式將一安全核心初始化并啟動所需的所有程序代碼及起始數(shù)據(jù)。該初始化包括分配給SL及SK使用的內(nèi)存建立DMA排除的保護(hù)。該SEM驅(qū)動程序可將SL加載內(nèi)存中被稱為安全加載程序塊(Secure LoaderBlock;簡稱SLB)的一區(qū)域,且將在下文中說明該SLB。該SLB的容量可以是64KB,且可以硬件來強(qiáng)化該SLB。然而,實(shí)際上,由于將在下文中說明的理由,該最大的容量可以稍微少些。在一實(shí)施例中,SL映像的第一字組包含到SL進(jìn)入點(diǎn)的SL映像之一無正負(fù)號的位移量。第二字組包含該映像的長度。SKINIT指令可使用這兩個值。軟件常規(guī)可決定該映射文件的其余部分的配置。該映像也可包含用于驗(yàn)證用途的一數(shù)字簽章,而該數(shù)字簽章的散列值可包含進(jìn)入點(diǎn)及長度字段。在開始SL執(zhí)行之前,SKINIT指令將該SL映像轉(zhuǎn)移到SSP以供驗(yàn)證。該SL至少在初始化時(shí)可在關(guān)閉分頁機(jī)制的32位平坦保護(hù)模式(32-bitflat protected mode)下執(zhí)行。為了使SL程序代碼的位置具有獨(dú)立性,可自EAX寄存器中的值推導(dǎo)出一基址,以便利用基址加位移量尋址法存取該SL映射文件內(nèi)的數(shù)據(jù)區(qū)域。
請參閱圖3,圖中示出一可進(jìn)入SEM的處理器的一實(shí)施例的一方框圖。SEM處理器300包含被連接到一內(nèi)存控制器330、一系統(tǒng)接口320及一中斷控制邏輯340的一執(zhí)行單元310。此外,中斷控制邏輯340被連接到系統(tǒng)標(biāo)識邏輯350。在一實(shí)施例中,SEM處理器300可以是圖2所示SEM處理器100A及100B的代表。
如前文所述,在初始化階段中,內(nèi)存控制器330可將SL映射文件加載系統(tǒng)內(nèi)存110A中。以在禁止DMA存取之前先保護(hù)該SL映像,阻止對SLB的存取。該64K字節(jié)空間的基址是SKINIT指令的一參數(shù)(例如,使用EAX輸入到SKINIT)。一Hash_Start事務(wù)處理載送該基址作為其地址字段的一部分。在這種方式下,可將哪一內(nèi)存區(qū)域受到保護(hù)的消息通知接收到該Hash_Start事務(wù)處理的所有內(nèi)存控制器。
在一實(shí)施例中,該安全加載程序塊是可位于任何64KB對準(zhǔn)地址的一64KB物理內(nèi)存范圍。SEM驅(qū)動程序可分配該內(nèi)存。在另一個實(shí)施例中,可預(yù)先在任何時(shí)間分配該內(nèi)存。SEM驅(qū)動程序可在執(zhí)行SKINIT之前的任何時(shí)間將該SL映像加載開始于位移量0的SLB。在一實(shí)施例中,在為內(nèi)存的其余部分建立DMA排除向量(DMA Exclusion Vector;簡稱DEV)保護(hù)之前,在安全加載程序進(jìn)行輸入時(shí),可立即使用介于SL映像的末尾與SLB的末尾之間的內(nèi)存作為諸如一起始堆棧的安全暫時(shí)儲存空間(secure scratch space)。
為了使SLB不會受到SEM處理器300以外的任何裝置的存取,內(nèi)存控制器330包含被連接到一直接內(nèi)存訪問(DMA)排除向量控制寄存器331及SL_DEV基址寄存器332的MC控制邏輯333。
DMA排除向量控制寄存器331包含對應(yīng)于MC控制邏輯333的操作的控制信息。在所示實(shí)施例中,DEV控制寄存器331包含被標(biāo)示為“DEV啟動”及“SL_DEV啟動”的控制位。該“DEV啟動”位可控制DEV存取保護(hù)被啟動或關(guān)閉。在所示實(shí)施例中,當(dāng)該“DEV啟動”位被觸發(fā)時(shí),即啟動DEV保護(hù),且當(dāng)該“DEV啟動”位被停止觸發(fā)時(shí),即關(guān)閉DEV保護(hù)。該“SL_DEV啟動”位可控制該SLB是否不會受到DMA存取。在所示實(shí)施例中,當(dāng)該“SL_DEV啟動”位被觸發(fā)時(shí),將使該SLB不會受到DMA存取,且當(dāng)該“SL_DEV啟動”位被停止觸發(fā)時(shí),將關(guān)閉對SLB的保護(hù)。請注意,在其它的實(shí)施例中,DEV控制寄存器331可包含具有額外功能的其它位。
SL_DEV基址寄存器332包含對應(yīng)于系統(tǒng)內(nèi)存中受到SKINIT指令保護(hù)的區(qū)域的位置(例如SLB)的信息。在所示實(shí)施例中,被加載SL_DEV基址寄存器332的地址可對應(yīng)于在SL的執(zhí)行期間以及在啟動完整的DMA保護(hù)之前不會受到DMA存取的SLB的開始地址。該地址被稱為SL_DEV基址。MC控制邏輯333可使用該SL_DEV基址來決定一特定存取要求的目標(biāo)地址是否在該受保護(hù)的區(qū)域內(nèi)。軟件無法直接讀取SL_DEV基址寄存器332的內(nèi)容,MC控制邏輯333可響應(yīng)接收到一Hash_Start事務(wù)處理,而加載該SL_DEV基址寄存器332。請注意,在其它的實(shí)施例中,SL_DEV基址寄存器332可包含具有額外功能的其它位。因此,該MC控制邏輯可被設(shè)定成響應(yīng)接收到一Hash_Start事務(wù)處理,而將SL_DEV基址加載該SL_DEV基址寄存器,并觸發(fā)該“SL_DEV啟動”位。
在一實(shí)施例中,MC控制邏輯333可包含可使用只由SKINIT指令使用的一特殊協(xié)議(特有的控制、地址及/或命令)而提供將SL映像自SEM處理器300安全地轉(zhuǎn)移到SSP130的支持的邏輯(圖中未示出)。該協(xié)議包含明確的轉(zhuǎn)移開始(亦即Hash_Start)及轉(zhuǎn)移終止(亦即Hash_End)指示,用以規(guī)范一可變量目的數(shù)據(jù)轉(zhuǎn)移周期(亦即Hash_Data)(自無至64KB量的任何大小)。該協(xié)議不允許任何其它裝置或SKINIT指令以外的其它指令產(chǎn)生這些開始、終止及數(shù)據(jù)轉(zhuǎn)移指示。因此,可將MC控制邏輯333設(shè)定成將前文所述的每一事務(wù)處理繞送到SSP130。此外,可將MC控制邏輯333設(shè)定成自系統(tǒng)內(nèi)存讀取SL,并提供SL映像,以供在Hash_Data事務(wù)處理時(shí)的傳輸。
此外,MC控制邏輯333可在多個內(nèi)存控制器系統(tǒng)上提供SL_DEV支持??梢耘c轉(zhuǎn)移開始狀態(tài)指示的設(shè)定同時(shí)或在該設(shè)定之前,將SL_DEV_BASE地址分送到所有的內(nèi)存控制器,并在所有的內(nèi)存控制器上啟動該SL_DEV_BASE地址。
此外,在諸如計(jì)算機(jī)系統(tǒng)10等的多處理器系統(tǒng)中,當(dāng)SEM處理器300正在被用來作為一BSP時(shí),在將SL映像傳送到SSP130以供驗(yàn)證之前,SEM處理器300必須確保所有其它的處理器處于一APIC INIT狀態(tài)。例如,當(dāng)在一BSP上執(zhí)行時(shí),SEM驅(qū)動程序在呼叫SKINIT指令之前,可先將一APIC INIT IPI發(fā)出到所有的AP。然而,當(dāng)被用來作為一AP時(shí),SEM處理器300可提供其已進(jìn)入APIC INIT狀態(tài)的一指示。在一實(shí)施例中,一AP可響應(yīng)接收到該IPI而提供該指示。請注意,在其它的實(shí)施例中,可由SKINIT指令的微碼發(fā)出該APIC INIT IPI。
為了支持SEM模式中的APIC INIT功能,系統(tǒng)接口320包含被連接到Hash_Start狀態(tài)寄存器321的SI控制邏輯323。Hash_Start狀態(tài)寄存器321包含對應(yīng)于該計(jì)算機(jī)系統(tǒng)內(nèi)的其它處理器的起始狀態(tài)的位。在所示實(shí)施例中,一Hash_Start狀態(tài)寄存器321包含一狀態(tài)位及一看到位(seen bit)。該狀態(tài)位指示一Hash_Start事務(wù)處理是否成功。在一實(shí)施例中,該Hash_Start事務(wù)處理可使用該狀態(tài)位來決定所有其它的處理器是否已轉(zhuǎn)變到一APIC INIT狀態(tài)。在其它的實(shí)施例中,該Hash_Start事務(wù)處理可促使APIC INIT IPI被發(fā)出,因而使所有其它的處理器進(jìn)入APIC INIT狀態(tài)。該看到位可指示另一處理器是否發(fā)出了一Hash_Start事務(wù)處理。系統(tǒng)接口320可使用Hash_Start狀態(tài)寄存器321的內(nèi)容來決定Hash_Start事務(wù)處理是否成功,且是否要通知內(nèi)存控制器330傳送SL映像。請注意,在一實(shí)施例中,軟件可能無法直接讀取Hash_Start狀態(tài)寄存器321內(nèi)的位??蓪I控制邏輯323設(shè)定成根據(jù)是否從計(jì)算機(jī)系統(tǒng)10中所有其它的處理器接收到通知,而設(shè)定及清除這些位。請注意,在其它的實(shí)施例中,Hash_Start狀態(tài)寄存器321可包含具有額外功能的其它位。
如前文所述,當(dāng)被用來作為一AP時(shí),SEM處理器300可響應(yīng)接收到一啟動IPI,而在內(nèi)存中由該啟動IPI所提供的一位置上開始執(zhí)行。此外,如將在下文中參照圖4而更詳細(xì)說明的,也可將SI控制邏輯323設(shè)定成在該看到位被觸發(fā)時(shí)清除全局中斷標(biāo)識。在一實(shí)施例中,SL可發(fā)出該啟動IPI,但是在其它的實(shí)施例中,SK可發(fā)出該啟動IPI。
一般的x86架構(gòu)提供了EFLAGS寄存器,用以支持在非安全執(zhí)行模式中的系統(tǒng)操作控制。更具體而言,該EFLAGS寄存器的IF標(biāo)識可啟動及關(guān)閉處理器對諸如INTR等可屏蔽的硬件中斷要求的響應(yīng)。因此,在一非安全執(zhí)行模式期間,多個中斷來源可中斷處理器的執(zhí)行。然而,為了維持SEM之下的系統(tǒng)安全,必須以不可分割方式執(zhí)行與SK進(jìn)入及退出相關(guān)聯(lián)的系統(tǒng)工作環(huán)境切換指令序列,而且這種方式不只是針對正常的外部中斷(例如INTR接腳),而且也針對諸如INIT#、NMI、SMI以及調(diào)試端口中斷及調(diào)試陷阱等非屏蔽的中斷。因此,在所示實(shí)施例中,系統(tǒng)標(biāo)識邏輯350包含一全局中斷標(biāo)識(Global Interrupt Flag;簡稱GIF)、一SEM啟動標(biāo)識及一EFLAGS.IF標(biāo)識。在一實(shí)施例中,可將該GIF設(shè)定成當(dāng)SEM處理器300正在一安全執(zhí)行模式中操作時(shí),啟動及關(guān)閉所有的中斷及調(diào)試陷阱。該GIF可包含所有的中斷來源,而提供EFLAGS.IF功能的一超集。請注意,在一實(shí)施例中,該GIF是一內(nèi)部的處理器標(biāo)識,且軟件正常無法讀取該標(biāo)識。請注意,雖然將系統(tǒng)標(biāo)識邏輯350描述為包含該GIF、SEM啟動標(biāo)識及EFLAGS.IF標(biāo)識,但是也可考慮在特定的實(shí)施例中可在各獨(dú)立的邏輯單元中實(shí)施這些標(biāo)識。
在所示實(shí)施例中,中斷控制邏輯340可自SEM處理器300內(nèi)部及外部的許多來源接收多個中斷。中斷控制邏輯340可根據(jù)SEM啟動位的狀態(tài)而決定SEM處理器是否正在安全執(zhí)行模式中操作。此外,在一實(shí)施例中,可將中斷控制邏輯340設(shè)定成分別響應(yīng)兩個新指令STGI及CLGI的執(zhí)行,而設(shè)定及清除該GIF。(在該環(huán)境中,設(shè)定該GIF指觸發(fā)該GIF,而清除該GIF指停止觸發(fā)該GIF。)請注意,系統(tǒng)標(biāo)識邏輯可包含用來儲存GIF狀態(tài)的儲存單元。該儲存單元可以是諸如一寄存器或RAM儲存位置等任何類型的儲存單元。
在一實(shí)施例中,可將該STGI及CLGI指令優(yōu)先級化,且唯有SK及諸如SKINIT指令等其它的優(yōu)先級操作以及呼叫SK的其它操作可使用該STGI及CLGI指令。如果SEM并未被啟動,則在任何模式中嘗試執(zhí)行該STGI及CLGI指令時(shí),將造成一無效運(yùn)算碼錯誤(#UD)。當(dāng)SEM被啟動時(shí),在CPL>0下的TX模式中嘗試執(zhí)行該STGI及CLGI指令時(shí),將造成一般性保護(hù)錯誤(#GP),且在任何CPL下的正常模式中執(zhí)行時(shí),將造成一#UD異常中斷。請注意,在一實(shí)施例中,可將執(zhí)行邏輯310設(shè)定成產(chǎn)生前文所述的無效運(yùn)算碼錯誤及一般性保護(hù)錯誤(#GP)。
在一實(shí)施例中,為了保護(hù)系統(tǒng)工作環(huán)境切換指令序列,當(dāng)從正常模式進(jìn)入SK時(shí),可自動清除該GIF,且可將此時(shí)所觸發(fā)的任何中斷保留在待處理狀態(tài)。在完成該系統(tǒng)工作環(huán)境切換指令序列之后,SK可通過STGI指令而設(shè)定該GIF。此時(shí),可使用對同時(shí)中斷的正常優(yōu)先級規(guī)則來響應(yīng)任何待處理的中斷。請注意,在一實(shí)施例中,在進(jìn)入SK時(shí),也可自動清除EFLAGS.IF標(biāo)識,因而除了STGI之外,可能需要一STI來啟動裝置中斷。然而,可不理會且有效地舍棄任何待處理的調(diào)試陷阱。
在一實(shí)施例中,在準(zhǔn)備退出安全執(zhí)行模式時(shí),SK可先以CLGI指令清除GIF,然后執(zhí)行必要的系統(tǒng)工作環(huán)境切換??梢酝ㄟ^SMRET指令自動設(shè)定該GIF。
圖4是用來描述其中包含一可進(jìn)入安全執(zhí)行模式的處理器的一計(jì)算機(jī)系統(tǒng)的一實(shí)施例在一安全初始化期間的操作的一流程圖。請整體地參閱圖1至圖4,現(xiàn)在將說明一多處理器計(jì)算機(jī)系統(tǒng)的一安全初始化。在步驟400中開始,計(jì)算機(jī)系統(tǒng)10的SEM處理器100A及100B可在一非安全模式中操作。在步驟405中,SEM處理器100A的操作系統(tǒng)呼叫SEM驅(qū)動程序。在一實(shí)施例中,SEM驅(qū)動程序可在步驟410中進(jìn)行諸如分配內(nèi)存以供SL及SL使用等的各種系統(tǒng)準(zhǔn)備。在SK取得控制權(quán)之后,SEM驅(qū)動程序也可建立可允許恢復(fù)操作系統(tǒng)狀態(tài)的信息(例如各處理器控制寄存器的內(nèi)容),且可進(jìn)一步在步驟415中將可執(zhí)行的SL及SK映射文件加載到系統(tǒng)內(nèi)存110。SEM驅(qū)動程序可將內(nèi)存中用來加載SL的64KB范圍的基址儲存在EAX寄存器中。一旦完成了這些準(zhǔn)備之后,SEM驅(qū)動程序可在步驟420中呼叫SKINIT指令。
如前文所述,該安全指令可以是具有以不可分割方式執(zhí)行的多個微碼成分的一單一指令。在一實(shí)施例中,該SKINIT指令被優(yōu)先級化,且可在步驟425中在CPL0下由SEM處理器100A執(zhí)行該SKINIT指令。如果在一錯誤的模式中嘗試執(zhí)行SKINIT指令,則可在步驟430中由一般性保護(hù)錯誤來禁止SKINIT指令的執(zhí)行。
回到步驟425,如果SEM處理器100A是處于CPL0,則可在SEM未被啟動時(shí)在正常模式中執(zhí)行SKINIT指令。當(dāng)SEM被啟動時(shí),可在TX模式中(亦即由SK)執(zhí)行SKINIT指令。在啟動SEM之前,將主要在正常模式中使用SKINIT指令,但是也可根據(jù)需要而由SK將SKINIT指令用來重新將該系統(tǒng)初始化。在任一模式中的操作可以是相同的。
在步驟435中,該SKINIT指令的微碼可使任何已安裝的微碼修補(bǔ)程序被清除。請注意,直到此時(shí)且包括此時(shí),該SKINIT微碼都是不可修補(bǔ)的。因而可有效地使該SKINIT指令的其余部分也都是不可修補(bǔ)的。此外,以與一INIT#信號相同的方式將SEM處理器100A的狀態(tài)初始化,然后在步驟440中將SEM處理器100A置于32位平坦保護(hù)模式(且使分頁機(jī)制關(guān)閉),而不是使SEM處理器100A停留在真實(shí)模式中。例如,在一實(shí)施例中,控制寄存器CR0的PE位設(shè)定為1;CS及SS選擇符被分別設(shè)定為0008h及0010h,且將CS及SS基址、限制及屬性寄存器設(shè)定為與一系統(tǒng)管理呼叫(SMCALL)指令時(shí)相同的值。DS、ES、FS及GS保留為16位真實(shí)模式片段,且在使用這些寄存器之前,SL必須將具有適當(dāng)GDT數(shù)據(jù)項(xiàng)的保護(hù)模式選擇符重新加載這些寄存器。除了保持其值的EAX寄存器以及存有型號、系列及時(shí)程信息的EDX寄存器之外,清除這些一般性寄存器的內(nèi)容。如同x87以及SSE操作數(shù)及控制寄存器,高速緩存的內(nèi)容可保持不變。此外,大部分的模式專用寄存器(Model Specific Register;簡稱MSR)也保持其值,但例外者是可能為了SEM保護(hù)而不保持其值的那些MSR。在步驟445中,SKINIT微碼然后可讀取EAX寄存器的內(nèi)容,然后清除該EAX寄存器的位15:0,而形成SLB基址。
在數(shù)據(jù)轉(zhuǎn)移階段中,SKINIT微碼可執(zhí)行一Hash_Start、一Hash_Data及一Hash_End事務(wù)處理。在一實(shí)施例中,該Hash_Start事務(wù)處理可以是在SEM處理器100A與SSP130之間的所有插入鏈路及總線上傳送的一廣播事務(wù)處理,因而可在步驟450中在處理器總線105、系統(tǒng)總線125及外圍設(shè)備總線135上傳送該Hash_Start事務(wù)處理。內(nèi)存控制器101A及101B可接收其中包括SLB基址的該Hash_Start事務(wù)處理。在步驟455中,MC控制邏輯333可將該SLB基址加載到SL_DEV基址寄存器332,并觸發(fā)DEV控制寄存器331的SL_DEV啟動位。請注意,該系統(tǒng)中的每一內(nèi)存制器都可執(zhí)行該功能。通過觸發(fā)該SL_DEV啟動位,SLB現(xiàn)在不會被SEM處理器100A以外的任何其它裝置所存取。該機(jī)制也可使SLB不會受到通過圖形地址重新映射表(GraphicsAddress Remapping Table;簡稱GART)轉(zhuǎn)換后地址的存取,且該機(jī)制還可阻止裝置對外圍設(shè)備互連(PCI)配置空間的存取。
在圖2所示的多處理器環(huán)境中,在傳送SL映像之前,SEM處理器100A在步驟460中可等候來自SEM處理器100B的一響應(yīng),而決定該Hash_Start事務(wù)處理是否成功。被用來作為一AP時(shí),SEM處理器100B可以指示“APIC Init模式在作用中”或“APIC Init模式不在作用中”的一狀態(tài)位來響應(yīng)該Hash_Start事務(wù)處理。如果該Hash_Start成功了,則系統(tǒng)接口320的SI控制邏輯323可觸發(fā)Hash_Start狀態(tài)寄存器321的狀態(tài)位。SKINIT微碼可在步驟465中響應(yīng)該Hash_Start狀態(tài)位的觸發(fā),而使MC控制邏輯333從系統(tǒng)內(nèi)存110讀取SL映像,并在步驟470中將該SL映像傳輸?shù)絊SP130,作為供驗(yàn)證的一系列的Hash_Data事務(wù)處理。在一實(shí)施例中,SSP130可使用SL映像的長度字段來決定散列函數(shù)的精確長度。
一旦將Hash_Data事務(wù)處理及其對應(yīng)的數(shù)據(jù)傳送到SSP130之后,該微碼可執(zhí)行一Hash_End事務(wù)處理。在步驟475中,可以用在SEM處理器100A與SSP130之間的所有插入鏈路及總線上的一廣播事務(wù)處理的方式傳送該Hash_End事務(wù)處理。該Hash_End事務(wù)處理可通知SSP130完成該散列運(yùn)算,并驗(yàn)證該SL映射文件的數(shù)字簽章。在一實(shí)施例中,如果該SSP確認(rèn)該SL映射文件的數(shù)字簽章,則SSP130可轉(zhuǎn)變到一待命狀態(tài)。在該待命狀態(tài)中,SSP130可接受較大的SK的一后續(xù)散列值,以供驗(yàn)證。
在步驟480中,SKINIT微碼可清除SEM處理器100A的GIF,以便關(guān)閉其中包括NMI、SMI及INIT的所有中斷,因而確??梢杂貌豢煞指罘绞綀?zhí)行后續(xù)的程序代碼。當(dāng)SEM處理器100B被用來作為一AP時(shí),如果看到位被觸發(fā),SEM處理器100B在接收到一APIC啟動IPI時(shí)可清除GIF。
SKINIT微碼可將來自SL的無正負(fù)號的16位進(jìn)入點(diǎn)位移值加到SLB基址,而形成一SL進(jìn)入點(diǎn)。在步驟485中,SKINIT微碼可執(zhí)行一跳越到該SL進(jìn)入點(diǎn)地址,而完成執(zhí)行。SL執(zhí)行現(xiàn)在可從該SL進(jìn)入點(diǎn)開始。當(dāng)SL在BSP(例如SEM處理器100A)上開始執(zhí)行時(shí),各AP(例如SEM處理器100B)保持暫停在APIC INIT狀態(tài)。
如前文所述,SL可執(zhí)行各種功能,以便初始化并啟動一安全核心。在一實(shí)施例中,SL可在步驟490中產(chǎn)生SK的一散列值,并使該SK的散列值傳送到SSP130以供驗(yàn)證。如果SSP130先前處于待命狀態(tài),則SSP130可執(zhí)行對該SK的散列值的一驗(yàn)證。如果該SK的散列值被確認(rèn),則可將SSP130解除鎖定,以便在一可信賴的執(zhí)行環(huán)境中執(zhí)行與計(jì)算機(jī)系統(tǒng)10的操作相關(guān)聯(lián)的后續(xù)的密碼功能。然后在步驟495中,該SL程序代碼執(zhí)行跳越到安全核心。此時(shí),SK在步驟500中執(zhí)行任何剩余的工作,以便完成安全系統(tǒng)的初始化。
例如,在一實(shí)施例中,SK可在任何適當(dāng)?shù)臅r(shí)點(diǎn)發(fā)出這些AP的啟動IPI。在另一個實(shí)施例中,SL可發(fā)出這些AP的啟動IPI。這些AP響應(yīng)該啟動IPI,而在16位真實(shí)模式下在所指定的位置上開始執(zhí)行。在一實(shí)施例中,該AP啟動碼將每一AP上的各SEM機(jī)型專用寄存器中的起始值設(shè)定為(由SL或SK決定的)適當(dāng)?shù)闹?,并啟動SEM。在每一AP上,該AP程序代碼轉(zhuǎn)變進(jìn)出TX模式至少一次,因而設(shè)定GIF,并重新啟動中斷,且在將對處理器的控制權(quán)交回操作系統(tǒng)之前,先恢復(fù)SKINIT指令之前的系統(tǒng)工作環(huán)境(由在BSP上執(zhí)行的SL或SK所指示)。SL可將AP啟動碼包含在經(jīng)過散列運(yùn)算的SL映像中,并諸如在將該SL映像復(fù)制到所需的區(qū)域之前,先建立DEV保護(hù),而保證AP啟動程序序列的完整性。然而,該AP啟動碼并不需要執(zhí)行SKINIT指令。
請注意,在一實(shí)施例中,就SKINIT而言,由SSP130執(zhí)行的對SL映像的驗(yàn)證是一單向的事務(wù)處理。在傳輸該SL映像之后,且在跳到SL進(jìn)入點(diǎn)以便無條件地開始安全加載程序的執(zhí)行之前,該事務(wù)處理并不取決于來自SSP130的任何響應(yīng)。
考慮在其它的實(shí)施例中,SL可利用標(biāo)準(zhǔn)總線事務(wù)處理來建立與SSP130間的通訊,以便自SSP130接收對SL映像驗(yàn)證的一肯定的或否定的確認(rèn)消息。該通訊的細(xì)節(jié)可取決于實(shí)施方式。
回到步驟460,如果SEM處理器100B并不以“APIC Init模式在作用中”的消息作為響應(yīng),則SEM處理器100A可結(jié)束該Hash_Start,然后傳輸一Hash_End事務(wù)處理,因而略過了Hash_Data事務(wù)處理。在這種情形中,SSP130可斷定并未傳輸任何有效的SL映像,且可保持在待命狀態(tài),因而無法參與任何后續(xù)的SK驗(yàn)證。然后可參照前文中配合步驟475所述的方式繼續(xù)執(zhí)行操作。
請注意,在初始化序列期間,SL可異常中斷。在一實(shí)施例中,如果SL決定其無法正確地將一有效的SK初始化,則SL可將其正在異常中斷的消息通知SSP130??蓪L映像的長度字段設(shè)定為零,將進(jìn)入點(diǎn)改變到一異常中斷繼續(xù)點(diǎn),并執(zhí)行SKINIT指令,而在無須與SSP130建立一安全(例如加密的)通訊信道的情形下,可靠地執(zhí)行該異常中斷。
請注意,將某些要素描述為在硬件中實(shí)施,而將其它的要素描述為在軟件中實(shí)施,這些都只是為了要便于表達(dá)該系統(tǒng)及其各組件的操作特征。然而,應(yīng)該考慮到在各實(shí)施例中,可以軟件來實(shí)施前文所述的硬件組件的全部或部分,且可以硬件來實(shí)施前文所述的軟件組件的全部或部分。
又請注意,將各邏輯位描述為被觸發(fā)或被停止觸發(fā)。在本說明書的用法中,一被觸發(fā)的位是提供一肯定指示的一位,而一被停止觸發(fā)的位則提供了一否定的指示。因此,一特定實(shí)施例可在被觸發(fā)時(shí)使用一個一的邏輯值,而另一實(shí)施例可在被觸發(fā)時(shí)使用一個零的邏輯值。
雖然前文中已相當(dāng)詳細(xì)地說明了這些實(shí)施例,但是本領(lǐng)域技術(shù)人員在完全了解前文的揭示事項(xiàng)之后,將可易于作出許多變化及修改。將把最后的權(quán)利要求范圍解釋為包含所有此類的變化及修改。
工業(yè)應(yīng)用本發(fā)明主要應(yīng)用于采用可進(jìn)入安全執(zhí)行模式的處理器的計(jì)算機(jī)系統(tǒng)。
權(quán)利要求
1.一種將其中包含一可進(jìn)入安全執(zhí)行模式的處理器100A及一系統(tǒng)內(nèi)存110的一計(jì)算機(jī)系統(tǒng)10初始化的方法,該方法包含下列步驟將一安全操作系統(tǒng)程序代碼片段加載程序儲存在對應(yīng)于該系統(tǒng)內(nèi)存內(nèi)的一特定地址范圍的多個位置;以及執(zhí)行一安全初始化指令;其中執(zhí)行該安全初始化指令的該步驟包含使多個操作被執(zhí)行,而這些多個操作包含傳輸其中包含該特定地址范圍的一基址的一起始事務(wù)處理;自該系統(tǒng)內(nèi)存獲取該安全操作系統(tǒng)程序代碼片段加載程序;以及以多個數(shù)據(jù)事務(wù)處理的形式傳輸該安全操作系統(tǒng)程序代碼片段加載程序,以供驗(yàn)證。
2.根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包含下列步驟除了該可進(jìn)入安全執(zhí)行模式的處理器之外,禁止任何裝置存取該特定地址范圍。
3.根據(jù)權(quán)利要求1所述的方法,其中該安全初始化指令是其中包括多個以不可分割方式執(zhí)行的微碼成分的一單一指令,而當(dāng)執(zhí)行這些微碼成分時(shí)可使這些多個操作被執(zhí)行。
4.根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包含下列步驟獲取并傳輸一安全操作系統(tǒng)程序代碼片段,以供驗(yàn)證。
5.根據(jù)權(quán)利要求1所述的方法,其中這些多個操作進(jìn)一步包含關(guān)閉各中斷。
6.根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包含下列步驟使另一可進(jìn)入安全執(zhí)行模式的處理器110B轉(zhuǎn)變至一初始化狀態(tài)。
7.根據(jù)權(quán)利要求6所述的方法,進(jìn)一步包含下列步驟響應(yīng)該另一可進(jìn)入安全執(zhí)行模式的處理器并未轉(zhuǎn)變至該初始化狀態(tài)的決定,而禁止傳輸該安全操作系統(tǒng)程序代碼片段加載程序。
8.一種計(jì)算機(jī)系統(tǒng)10,包含一可進(jìn)入安全執(zhí)行模式的處理器100,該處理器100被設(shè)定成執(zhí)行一安全初始化指令;一內(nèi)存控制器(101),該內(nèi)存控制器(101)被設(shè)定成將一安全操作系統(tǒng)程序代碼片段加載程序儲存在對應(yīng)于一系統(tǒng)內(nèi)存110內(nèi)的一特定地址范圍的多個位置;傳輸裝置,用以響應(yīng)該安全初始化指令的執(zhí)行,而傳輸其中包含該特定地址范圍的一基址的一起始事務(wù)處理;以及獲取裝置,用以響應(yīng)該安全初始化指令的執(zhí)行,而從該系統(tǒng)內(nèi)存獲取該安全操作系統(tǒng)程序代碼片段加載程序,并以多個數(shù)據(jù)事務(wù)處理的形式傳輸該安全操作系統(tǒng)程序代碼片段加載程序,以供驗(yàn)證。
9.根據(jù)權(quán)利要求8所述的計(jì)算機(jī)系統(tǒng),進(jìn)一步包含用以除了該可進(jìn)入安全執(zhí)行模式的處理器之外禁止任何裝置存取該特定地址范圍的裝置。
10.根據(jù)權(quán)利要求8所述的計(jì)算機(jī)系統(tǒng),其中該安全初始化指令是其中包括多個以不可分割方式執(zhí)行的微碼成分的一單一指令。
全文摘要
一種將其中包含一可進(jìn)入安全執(zhí)行模式的處理器100的一計(jì)算機(jī)系統(tǒng)10初始化的方法,包含下列步驟將一安全操作系統(tǒng)程序代碼片段加載程序儲存在對應(yīng)于一系統(tǒng)內(nèi)存110內(nèi)的一特定地址范圍的多個位置。該方法還包含下列步驟執(zhí)行一安全初始化指令。執(zhí)行該安全初始化指令時(shí),可使其中包括傳輸其中包含該特定地址范圍的一基址的一起始事務(wù)處理的數(shù)個操作被執(zhí)行。此外,執(zhí)行該安全指令時(shí),也可使另一操作被執(zhí)行,該另一操作包括自該系統(tǒng)內(nèi)存取該安全操作系統(tǒng)程序代碼片段加載程序,并以多個數(shù)據(jù)事務(wù)處理的形式傳輸該安全操作系統(tǒng)程序代碼片段加載程序,以供驗(yàn)證。
文檔編號G06F12/14GK1647039SQ03808705
公開日2005年7月27日 申請日期2003年4月18日 優(yōu)先權(quán)日2002年4月18日
發(fā)明者K·J·麥格拉思, G·S·斯特龍金, D·S·克里斯蒂, W·A·休斯, D·E·古利克 申請人:先進(jìn)微裝置公司