本公開內(nèi)容涉及用于在代碼執(zhí)行期間保持數(shù)據(jù)和程序安全性的裝置和方法。
背景技術(shù):
在現(xiàn)代計算機程序中,無論是在標準桌面或者關(guān)鍵的實時嵌入式系統(tǒng)中,保護關(guān)鍵數(shù)據(jù)和技術(shù)在當今存在大量威脅的環(huán)境中是至關(guān)重要的。當潛在攻擊者具有大量預(yù)算、直接訪問目標系統(tǒng)和充足的時間時,這個任務(wù)變得越來越困難。
執(zhí)行關(guān)鍵功能(例如,核電廠、手術(shù)機器人、自主武器系統(tǒng)等的控制)的計算機程序通常通過與可能提取關(guān)鍵數(shù)據(jù)或損害其行為和性能的其他計算機和計算機程序相隔離來加以保護。實際上,計算機程序的“危險程度(criticality)”范圍廣泛,從危及可能導致用戶不便的情況,到危及可能導致關(guān)鍵基礎(chǔ)設(shè)施和服務(wù)的臨時損失的情況,到危及可能導致人類生命的損失的情況。因此,存在許多種情況,其中計算機系統(tǒng)的完全隔離是不合理的或不切實際的,但是仍然非常需要對程序和數(shù)據(jù)的附加保護。例如,用戶可能需要在常規(guī)的個人電腦上運行執(zhí)行關(guān)鍵功能(證明增加的安全和保護)的程序。
安全設(shè)計背后的目標是使獲得受保護信息的成本大于受保護信息的價值。具體問題是在代碼操作和數(shù)據(jù)正在使用時保護計算機代碼和數(shù)據(jù),所謂的“使用中的數(shù)據(jù)”。相關(guān)問題是在電源關(guān)閉時保護代碼和數(shù)據(jù),所謂的“靜止數(shù)據(jù)”、或者在傳輸時保護代碼和數(shù)據(jù),所謂的“動態(tài)數(shù)據(jù)”。
這些問題的常見的基于硬件的方法是基于某種形式的安全密碼處理器(securecryptoprocessor)。安全密碼處理器是嵌入在防篡改封裝中的專用處理器,用于執(zhí)行密碼操作。密碼處理器將僅在安全環(huán)境中輸出解密數(shù)據(jù)或程序指令。然而,安全密碼處理器通常用于保護相對少量的信息,并且通常在它們可以保護的信息的范圍上受到限制。將安全密碼處理器縮放到更大的應(yīng)用將是成本過高的,需要大量的專用資源。此外,安全密碼處理器被固定在硅中,從而呈現(xiàn)維護和更新挑戰(zhàn)。對系統(tǒng)的任何成功攻擊將需要重新開發(fā)和修改大量潛在的昂貴硬件。
存在對不顯著犧牲性能的更低的成本、可更新解決方案的需求。另外,這樣的解決方案應(yīng)當適用于常規(guī)計算系統(tǒng),而不需要昂貴和不切實際的定制硬件。
技術(shù)實現(xiàn)要素:
根據(jù)本教導的用于安全程序執(zhí)行的系統(tǒng)解決了上述技術(shù)問題。本文中所描述的增強型信息保障系統(tǒng)更改計算機的操作以包括不可另外用于計算機的處理器的安全機器語言指令。在一些實例中,這包括使用增強型安全中央處理單元(cpu)仿真器。本解決方案可以幾乎完全基于現(xiàn)有的現(xiàn)成處理器,這可以便于跟上當前技術(shù)。根據(jù)本公開內(nèi)容的方面的系統(tǒng)可以在隨機存取存儲器(ram)中為計算機程序和相關(guān)聯(lián)的數(shù)據(jù)提供保護。
在一些實施方式中,用于安全執(zhí)行軟件指令的計算機系統(tǒng)可包括:第一處理器,具有多個硬件寄存器;存儲器;以及仿真器程序,包括存儲在存儲器中的多個指令,可通過第一處理器執(zhí)行指令以:仿真第二處理器,仿真在第二處理器上執(zhí)行多個本機機器指令,本機機器指令對于第二處理器是本地的,并且仿真在第二處理器上執(zhí)行多個安全的機器指令,安全機器指令對于第二處理器是非本地的,并且包括被配置為確保與操作碼相關(guān)聯(lián)的操作數(shù)數(shù)據(jù)的未加密值僅存儲在第一處理器的硬件寄存器的一個或多個中的一個或多個操作碼。
在一些實施方式中,計算機系統(tǒng)中實現(xiàn)的方法可包括從存儲器中檢索加密機器指令;解密檢索的機器指令并將解密的指令存儲在第一處理器的第一硬件寄存器中;并且使用仿真的第二處理器仿真解密指令的執(zhí)行;其中,解密指令是多個安全指令中相對于仿真的第二處理器非本地的一個。
在一些實施方式中,用于安全執(zhí)行軟件指令的計算機系統(tǒng)可包括:第一處理器,具有多個硬件寄存器;存儲器;以及仿真器程序,包括存儲在存儲器中的多個指令,第一處理器可執(zhí)行指令以:從存儲器中檢索加密機器指令;解密檢索的機器指令并將解密的指令存儲在第一處理器的硬件寄存器的一個或多個中;并且使用仿真的第二處理器仿真解密指令的執(zhí)行;其中,解密指令是多個安全指令中相對于仿真的第二處理器非本地的一個。
在本公開內(nèi)容的各種實施方式中可以獨立實現(xiàn)各種特征、功能以及優(yōu)點或者可以結(jié)合一些其他實施方式實現(xiàn)各種特征、功能以及優(yōu)點,并且參考下列描述和附圖可以理解本公開內(nèi)容的進一步細節(jié)。
附圖說明
圖1是示出根據(jù)本公開內(nèi)容的方面的具有增強型信息保障系統(tǒng)的示例性計算機的元件的示意性框圖。
圖2是描繪根據(jù)本公開內(nèi)容的方面的用于在仿真處理器上執(zhí)行安全程序的示例性方法中的步驟的流程圖。
圖3是示例性數(shù)據(jù)處理系統(tǒng)的各個組件的示意圖。
圖4是示例性計算機網(wǎng)絡(luò)系統(tǒng)的示意性圖示。
具體實施方式
包含安全程序執(zhí)行的信息保障(ia)系統(tǒng)的各個方面和實例以及相關(guān)方法在下面加以描述并且在相關(guān)附圖中示出。除非另有規(guī)定,否則根據(jù)本公開內(nèi)容的方面的信息保障系統(tǒng)和/或其各種組件可包含但不要求包含本文中所描述的、示出的和/或包含的結(jié)構(gòu)、組件、功能和/或變形中的至少一種。此外,除非明確排除,否則結(jié)合本教導描述、示出和/或并入本文的處理步驟、結(jié)構(gòu)、組件、功能和/或變化可以包含在其他類似的設(shè)備和方法中,包含在所公開的實施方式之間可互換。各個實例的以下描述本質(zhì)上僅是示例性的并且決不旨在限制本公開內(nèi)容、其應(yīng)用或用途。此外,由如下所述的實例和實施方式提供的優(yōu)點實質(zhì)上為示例性并且并非所有的實例和實施方式皆提供相同的優(yōu)點或者相同程度的優(yōu)點。
根據(jù)本公開內(nèi)容的方面的信息保障系統(tǒng)(其在本文中可被稱為增強型ia系統(tǒng))為在常規(guī)物理計算機和操作系統(tǒng)上運行的計算機程序和數(shù)據(jù)提供附加保護,而不隔離計算機和計算機程序。
現(xiàn)代計算機處理器的機器指令和寄存器被配置為通過各種手段保護計算機程序和數(shù)據(jù),手段包括多級安全性、對尋址和訪問物理和分頁存儲器的限制、用于數(shù)據(jù)的加密和解密的特殊指令以及防止一個程序訪問或損害另一個程序的代碼和數(shù)據(jù)的其他特征。然而,這樣的特征不能防止訪問或修改隨機存取存儲器(ram)的內(nèi)容和寫入硬盤的ram頁面的內(nèi)容的復雜的電子方法。
已知的虛擬機(vm)產(chǎn)品采用現(xiàn)代計算機處理器的機器指令和寄存器來保護計算機程序和數(shù)據(jù)。當執(zhí)行(即仿真)那些指令時,這樣的vm產(chǎn)品可以調(diào)動特殊流程來實現(xiàn)與并發(fā)和多級虛擬機相關(guān)的其他保護。
然而,根據(jù)本教導的增強型ia系統(tǒng)提供了對于標準處理器或現(xiàn)有vm產(chǎn)品不可用的保護。一般而言,增強型ia系統(tǒng)通過擴展可用的機器語言指令集來包括被配置為提供安全性的附加指令來有效地更改計算機的操作。在一些實例中,這包括使用增強型安全中央處理單元(cpu)仿真器。增強型ia系統(tǒng)專門專注于保護在ram中或作為寫入硬盤的ram頁面存儲的計算機程序和數(shù)據(jù)。
保護程序數(shù)據(jù)
在一些實例中,增強型ia系統(tǒng)通過施加特定限制保護程序數(shù)據(jù)。具體地,存儲在ram中的所有數(shù)據(jù)被加密,所有未加密的數(shù)據(jù)僅存儲在物理寄存器中,并且保護所有關(guān)鍵計算免受處理器級中斷的影響,該處理器級中斷可以使得其他程序能夠檢查寄存器中的任何未加密數(shù)據(jù)。
通過增強型ia系統(tǒng)的兩個方面促進這種保護。首先,程序的源代碼可以被編譯或以其它方式更改以包括在現(xiàn)有計算機處理器或現(xiàn)有vm產(chǎn)品中未找到的特定機器指令。這些機器指令可經(jīng)配置以執(zhí)行各種任務(wù),例如:安全地創(chuàng)建和管理加密密鑰,在物理寄存器中未加密,并在ram中加密;用隨機位初始化專用ram;在安全計算開始時禁用中斷,以防止檢查存儲在物理處理器寄存器中的未加密數(shù)據(jù);在安全計算結(jié)束時啟用中斷;在將未加密的寄存器值存儲在ram中時加密數(shù)據(jù);當從ram檢索加密數(shù)據(jù)并將其存儲在寄存器中時解密數(shù)據(jù);等。
第二,所得到的二進制程序可以由被配置為執(zhí)行常規(guī)處理器的機器語言指令以及上述特定機器語言指令的ia虛擬機(例如,仿真器)執(zhí)行。當ia虛擬機遇到控制存儲器分配、虛擬存儲器分頁、上下文切換等的機器語言指令時,除了上述那些之外,還可以調(diào)用其它特殊流程。
保護程序代碼
然而,通過檢查和修改程序代碼的二進制表示,可能危及使用這些特殊指令的程序。為了提供額外的保護,程序代碼的二進制表示可以以加密形式傳輸和存儲,并且在執(zhí)行期間可以以加密形式保留在ram中。這與典型的實踐相反,其中計算機程序可以以加密形式加密和存儲,并且以加密形式加載到ram中,但是在執(zhí)行開始之前完全解密。
在一些實例中,程序代碼(即,機器語言)的二進制表示可以由安全的步驟序列保護。首先,在已知的安全、隔離的計算機上準備和編譯程序的源代碼。第二,以可以由ia虛擬機(例如,下面描述的增強型安全cpu仿真器)解密和執(zhí)行的形式對所產(chǎn)生的可執(zhí)行二進制進行加密。加密的可執(zhí)行二進制然后可以傳送并且存儲在常規(guī)的計算機上。在常規(guī)計算機上,ia虛擬機可以被配置為在ram中執(zhí)行程序代碼的加密二進制表示。例如,這可以通過從ram遞增地檢索加密的機器語言指令及其參數(shù),將機器語言指令及其參數(shù)解密到物理寄存器中,然后執(zhí)行仿真操作來實現(xiàn)。
計算機方法、系統(tǒng)及產(chǎn)品的示例性方面
增強型ia系統(tǒng)的方面可以體現(xiàn)為計算機方法、計算機系統(tǒng)或計算機程序產(chǎn)品。因此,增強型ia系統(tǒng)的方面可以采取完全硬件實施方式、完全軟件實施方式(包括固件、常駐軟件、微代碼等)、或結(jié)合軟件和硬件方面的實施方式的形式,所有的這些在本文中總體稱為“電路”、“模塊”、或“系統(tǒng)”。此外,增強型ia系統(tǒng)的方面可以采取體現(xiàn)在具有計算機可讀程序代碼/指令包含在其上的計算機可讀介質(zhì)(或媒介)里的計算機程序產(chǎn)品的形式。
可以利用計算機可讀介質(zhì)的任何組合。計算機可讀介質(zhì)可以是計算機可讀信號介質(zhì)和/或計算機可讀存儲介質(zhì)。計算機可讀存儲介質(zhì)可以包括電子、磁性、光學、電磁、紅外線和/或半導體系統(tǒng)、裝置或設(shè)備、或這些的任何合適的組合。計算機可讀存儲介質(zhì)的更具體的示例可以包括以下:具有一個或多個線的電連接、便攜式計算機磁盤、硬盤、隨機存取存儲器(ram)、只讀存儲器(rom)、可擦除編程只讀存儲器(eprom或閃存)、光纖、便攜式光盤只讀存儲器(cd-rom)、光存儲設(shè)備、磁存儲設(shè)備、和/或這些存儲設(shè)備的任何合適的組合和/或類似物。在本公開內(nèi)容的上下文中,計算機可讀存儲介質(zhì)可包括可含有或存儲由指令執(zhí)行系統(tǒng)、裝置或設(shè)備使用或與指令執(zhí)行系統(tǒng)、裝置或設(shè)備有關(guān)的程序的任何合適的有形介質(zhì)。
計算機可讀信號介質(zhì)可包括傳播的數(shù)據(jù)信號與嵌入其中的計算機可讀程序代碼,例如,在基帶中或作為載波的一部分。這種傳播信號可采取多種形式中的任何一種形式,包括但不限于電磁、光學和/或其任何合適的組合。計算機可讀信號介質(zhì)可包括非計算機可讀存儲介質(zhì)并且能夠通信、傳播或輸送由指令執(zhí)行系統(tǒng)、裝置或設(shè)備所使用或者與指令執(zhí)行系統(tǒng)、裝置、或設(shè)備有關(guān)的程序的任何計算機可讀介質(zhì)。
包含在計算機可讀介質(zhì)上的程序代碼可以使用任何合適的介質(zhì)傳輸,包括但不限于無線、有線、光纖電纜、rf和/或類似的東西、和/或這些的任何合適的組合。
用于執(zhí)行增強型ia系統(tǒng)的方面的操作的計算機程序代碼可以用一種程序語言或程序語言的任何組合寫成,包括對象定位程序語言,如java、smalltalk、c++和/或類似的東西,和常規(guī)的過程編程語言,如c??梢允褂萌魏魏线m的語言(包括先前提及的那些語言)以及objective-c、swift、c#、html5等來開發(fā)移動應(yīng)用。程序代碼可完全在用戶的計算機上、部分地在用戶的計算機上作為獨立軟件包、部分地在用戶的計算機上以及部分地在遠程計算機上或完全在遠程計算機或服務(wù)器上執(zhí)行。在后面一種情況下,遠程計算機可通過包括局域網(wǎng)(lan)或廣域網(wǎng)(wan)的任何類型的網(wǎng)絡(luò)與用戶的計算機連接,和/或可連接至外部計算機(例如,通過使用互聯(lián)網(wǎng)服務(wù)供應(yīng)商的互聯(lián)網(wǎng))。
參考方法、裝置、系統(tǒng)和/或計算機程序產(chǎn)品的流程示意圖和/或框圖在下文中描述增強型ia系統(tǒng)的方面??梢酝ㄟ^計算機程序指令實現(xiàn)流程圖和/或框圖中的每個框和/或框的組合??蓪⒂嬎銠C程序指令提供給通用計算機、專用計算機或其他可編程的數(shù)據(jù)處理裝置的處理器,以制造機器,從而這些指令通過計算機或其他可編程的數(shù)據(jù)處理設(shè)備的處理器執(zhí)行時,產(chǎn)生用于實現(xiàn)在流程圖和/或方框圖的一個或多個方框中規(guī)定的功能/行為的手段。
這些計算機程序指令還可儲存在計算機可讀介質(zhì)和/或其他設(shè)備內(nèi),該介質(zhì)和/或其他設(shè)備可引導計算機或其他可編程的數(shù)據(jù)處理裝置通過一種特定的方式運行,從而儲存在計算機可讀介質(zhì)內(nèi)的指令產(chǎn)生一種制品,該制品包括實現(xiàn)在流程圖和/或框圖的一個或多個框中規(guī)定的功能/行為的指令。
計算機程序指令也可加載至計算機、其他可編程數(shù)據(jù)處理裝置、和/或其他設(shè)備上,以使得在設(shè)備上執(zhí)行的一系列操作步驟產(chǎn)生計算機實現(xiàn)過程,使得在計算機或其他可編程裝置上執(zhí)行的指令提供用于實現(xiàn)流程圖和/或框圖的一個或多個框中規(guī)定的功能的處理。
附圖中的任何流程圖和/或框圖旨在示出根據(jù)本教導的方面的系統(tǒng)、方法以及計算機程序產(chǎn)品的可能的實現(xiàn)的架構(gòu)、功能和/或操作。鑒于此,每個框可表示代碼的模塊、區(qū)段或部分,其包括用于實現(xiàn)規(guī)定的邏輯功能的一個或多個可執(zhí)行的指令。在一些實現(xiàn)中,在框中標注的功能可以不按照附圖中所示的順序發(fā)生。例如,連續(xù)示出的兩個框?qū)嶋H上可大致同時執(zhí)行,或者根據(jù)所涉及的功能,有時可按照相反的順序執(zhí)行這些框。每個框和/或框的組合可以由執(zhí)行指定功能或動作的基于專用硬件的系統(tǒng)(或?qū)S糜布陀嬎銠C指令的組合)來實現(xiàn)。
示例性增強型ia系統(tǒng)的概述
在一些實例中,可以僅使用由標準主機處理器可執(zhí)行的cpu本地指令來生成根據(jù)本教導實現(xiàn)安全操作的目標代碼。在其他實例中,類似的功能可以由使用修改的處理器仿真器擴展可用指令集的增強型ia系統(tǒng)來實現(xiàn)。
通常,這樣的增強型ia系統(tǒng)10可包括在常規(guī)的主計算機(hostcomputer)(還稱作數(shù)字處理器和/或數(shù)據(jù)處理系統(tǒng))上運行的虛擬機。在下面對計算系統(tǒng)的進一步方面進行更詳細地描述。參考圖1,合適的計算機12的硬件可包括隨機存取存儲器(ram)14和與ram通信的物理中央處理單元(cpu)16。cpu16可包括具有多個寄存器18和處理器電路20的任何合適的處理單元或核心。例如,可以預(yù)留某些寄存器19用于存儲加密密鑰。計算機12可包括多個cpu和/或多核處理器,這里表示為第二cpu22。換言之,cpu22可表示第二處理單元或者處理核心。參見(下面的)標題為“示例性數(shù)據(jù)處理系統(tǒng)”的部分,用于討論可包含在計算機12中的附加硬件。
系統(tǒng)10可包括在計算機12上運行的管理程序(hypervisor)24,該管理程序被配置為管理一個或多個沙盒虛擬機(sandboxedvirtualmachine)。這些虛擬機可包括操作系統(tǒng)(os)26和增強型安全cpu仿真器28。在一些實例中,管理程序24可以是裸機(即,“本地”或者“i型”)管理程序。管理程序24可以與管理程序?qū)S胷am30通信,該管理程序?qū)S胷am是專門分配給管理程序24的ram14的一部分。類似地,管理程序?qū)S胷am30內(nèi)的仿真器專用ram32可以專門分配給仿真器28。在一些實例中,可以不存在管理程序24,在這種情況下,cpu仿真器28可以改為在例如安裝在計算機12上的本地操作系統(tǒng)(未示出)上運行。
仿真器28可包括被配置為仿真所選擇的cpu的執(zhí)行的任何合適的cpu仿真器。所選擇的cpu可以是與cpu16相同的或者不同的類型。仿真器28可用于運行敏感程序,諸如包括數(shù)據(jù)36和機器語言指令38的安全程序34。安全程序34可被加載到ram(例如,ram30)中。
仿真器可以使用多個仿真寄存器40和仿真處理器電路42來仿真所選擇的cpu并執(zhí)行機器語言指令38。機器語言指令38(也稱為機器指令和/或匯編語言指令)可包括指定要執(zhí)行的操作的操作碼。與這些操作碼相關(guān)聯(lián)的操作數(shù)指的是由指令處理的數(shù)據(jù)36。數(shù)據(jù)36可包括未加密的和加密的數(shù)據(jù)。操作碼可包括通常可由仿真cpu執(zhí)行的本機(例如,標準)操作碼,和/或安全操作碼。仿真器28可包括一組補充指令44,其在功能上配置仿真器28以處理這樣的安全操作碼。
根據(jù)本教導的安全操作碼被配置為在安全程序34的執(zhí)行期間保持數(shù)據(jù)36的加密。安全操作碼可以取自根據(jù)本公開內(nèi)容的方面的在系統(tǒng)下定義的一組安全計算指令。這些安全操作碼表示可用于計算機12的機器語言指令的擴展,因為它們不是cpu16(或者,就此而言,正被仿真的標準cpu)本地的指令集的一部分。
通過任何合適的方法使安全操作碼包含在仿真器程序中。在一些實例中,安全操作碼通過預(yù)編譯指令添加至程序。在一些實例中,通過修改本地編譯器來促進安全操作碼。在一些實例中,通過對目標代碼的后編譯修改來包括安全操作碼。在一些實例中,在執(zhí)行期間動態(tài)地包括安全操作碼,例如以補充和/或替換非安全的本機碼。
仿真器28被配置為根據(jù)仿真處理器的規(guī)范仿真對于仿真cpu是本地的機器語言指令。換言之,在不修改的情況下執(zhí)行本機操作碼。
然而,通過仿真器分別處理安全操作碼和安全數(shù)據(jù)。在一些實例中,分配給程序數(shù)據(jù)36的ram可以被混淆或部分混淆(例如,隨機化),以防止檢查和檢測數(shù)據(jù)中的模式。在一些實例中,敏感數(shù)據(jù)在存儲在ram中時始終加密。在一些實例中,仿真器28被配置為確保僅在硬件寄存器中發(fā)現(xiàn)未加密的數(shù)據(jù),并且僅在預(yù)留的硬件寄存器中發(fā)現(xiàn)加密密鑰。在一些實例中,當執(zhí)行安全操作碼(例如,在所謂的程序的“關(guān)鍵部分”內(nèi))時,仿真器使用cpu16的寄存器18而不是仿真寄存器40。當操作敏感數(shù)據(jù)時,也可能暫停硬件中斷。
使用本機操作碼的示例性方法
如上所述,軟件程序的代碼可以被充分修改(例如,通過編譯和/或預(yù)處理),仿真器(例如,仿真器28)可能是不必要的。換言之,代碼可以修改為可以僅利用主處理器識別的本機操作碼由主計算機安全地并且非虛擬地運行。該部分討論這種代碼修改的兩種補充方法。
第一種方法是使程序利用操縱數(shù)據(jù)的安全原語函數(shù)。第二種方法是使程序在功能級解密和加密,從而允許對數(shù)據(jù)在何處和何時加密的容易控制?;诎踩Z的方法可以提供更高的安全性,而基于解密/加密安全功能調(diào)用的方法可以提供更好的性能。這兩種方法是互補的,并且方法可以組合以用于附加的安全性。
基于安全原語操作的安全代碼的創(chuàng)建可以是兩種方法中更安全的,因為安全性可追溯到基本操作。基本操作的實例包括加法、減法、乘法、除法、比較、賦值和類型轉(zhuǎn)換。這些原語以匯編語言寫入(例如,使用aes-ni操作)以確保信息保持受保護。
處理安全原語的一般過程如下:(1)禁止中斷;(2)相關(guān)變量解密,結(jié)果存儲在處理器寄存器而不是存儲器中;這可包括檢查有效消息認證碼(mac);(3)執(zhí)行基礎(chǔ)的原語操作;(4)將原語操作的結(jié)果存儲在另一個處理器寄存器中;(5)步驟(2)中使用的寄存器被清除;(6)步驟(3)中發(fā)現(xiàn)并存儲在寄存器中的結(jié)果被加密并存儲在主存儲器中;(7)在步驟(6)中使用的處理器寄存器被清除;和(8)中斷被重新啟用。在該過程期間的任何時刻,任何解密的變量決不駐留在存儲器中。
例如考慮以下,其中,x、y及b是加密的變量:
b=x+y.
在這種情況下,如上所述,x、y及b的值被加密。在該實例中,通過將x和y解密到內(nèi)部處理器寄存器,添加兩個解密值,然后將結(jié)果存儲在b的加密版本中來完成加法。在外部,安全存儲器中的唯一變化將是存儲結(jié)果的加密變量b的更新。
轉(zhuǎn)向另一種方法,基于修改的函數(shù)調(diào)用創(chuàng)建安全代碼是上述方法的補充。安全函數(shù)調(diào)用的使用可包括函數(shù)的二進制代碼的修改,使得函數(shù):(1)禁止調(diào)用的搶占;(2)將函數(shù)和運行時數(shù)據(jù)解密為普通可執(zhí)行代碼和變量;(3)檢查內(nèi)置mac以驗證完整性;(4)執(zhí)行該函數(shù);(5)加密結(jié)果;和(6)在將所分配的存儲器,包括所使用的任何堆棧標記為空閑之前將其擦除(例如,通過用隨機數(shù)據(jù)重寫)。
該第二種方法對于許多函數(shù),特別是對于為成千上萬個循環(huán)迭代的函數(shù)可能更快。然而,基于安全函數(shù)調(diào)用的方法簡單地將更多的數(shù)據(jù)和代碼暴露在ram中。基于安全功能調(diào)用的方法保持相當大的安全性,因為至多只有與安全處理器核心一樣多的同時安全的進程運行。因此,即使物理地移除和檢查ram,由該快照暴露的可能信息的量也是有限的。最多,與該函數(shù)調(diào)用相關(guān)的數(shù)據(jù)是暴露的,而不需要任何周圍的上下文使其有意義。
作為整體深度防護策略的一部分,可以通過使用現(xiàn)有的軟件混淆方法來進一步增強該第二方法的安全性,該方法用于在未加密狀態(tài)下存在的簡短窗口期間保護安全函數(shù)。有規(guī)律的存儲分配,即使沒有加密,仍然由程序在內(nèi)部完成。存儲分配使用較大的存儲塊中的隨機位置,并且較大的存儲塊用隨機數(shù)填充。
為了將這種保護作為目標,入侵者必須在初始函數(shù)解密出現(xiàn)之后并且在新的加密和清除完成之前讀取存儲器。即使這將需要確定實際堆棧在何處,并且堆??梢苑胖迷诎踩鎯ζ髦械娜魏蔚胤健_@種方法具有允許實現(xiàn)者容易地選擇加密出現(xiàn)在何處以及因此何處的性能可能受影響的優(yōu)點。
函數(shù)的加密可以使用標準鏈接函數(shù),例如用于全盤加密。在一些實例中,在函數(shù)的開始處的字段包含隨機數(shù)和消息認證碼。一旦這些字段被加密,將保護整個函數(shù)免受代碼本式攻擊以及修改。當未主動被調(diào)用時,安全函數(shù)應(yīng)保持在加密狀態(tài)。
示例性增強型安全cpu仿真器
與以上概要的兩種方法相比,提供安全程序執(zhí)行的簡化方法包括使用經(jīng)修改以處理安全指令的增強型安全cpu仿真器。標準cpu仿真器的實例是在qemu.org可用的qemu,其是被配置為執(zhí)行硬件虛擬化的管理程序,通過動態(tài)二進制轉(zhuǎn)換仿真cpu。增強型安全cpu仿真器可基于與qemu類似的管理程序(等等)。
根據(jù)本教導的系統(tǒng)集中于保持與主存儲器的所有交互加密。假設(shè)要執(zhí)行的程序或操作系統(tǒng)已經(jīng)對進入和離開程序(或操作系統(tǒng))的數(shù)據(jù)具有足夠的控制。加密對存儲器的所有訪問的本方法可以用其它加密操作擴展,使得僅增強型安全cpu仿真器可以解密所討論的程序并將其加載到其加密的存儲器中。
為了保持與主存儲器的交互的加密,增強型安全cpu仿真器系統(tǒng)利用物理cpu的硬件寄存器來臨時存儲未加密的信息。因此,足夠數(shù)量的這種寄存器必須專用于此目的,并且不用于其它目的。例如,這可以通過仿真具有比物理上存在于計算機中的cpu更少的寄存器的cpu模型來實現(xiàn)。這將釋放仿真cpu中不存在的所有物理cpu寄存器,用于加密和解密操作。換句話說,如果主處理器具有比仿真處理器更多的寄存器,則簡化了仿真器的實現(xiàn)。如果針對多核芯片實現(xiàn),則仿真器可以將一組寄存器分配給正在執(zhí)行的程序,另一組機器寄存器專門用于增強型安全指令。
增強型安全cpu仿真器將向操作系統(tǒng)顯示連續(xù)存儲器的外觀。實際物理存儲器可能碎片化,但增強型安全cpu仿真器運行的底層操作系統(tǒng)應(yīng)該向仿真器提供連續(xù)存儲器的外觀。為了加密存儲器,必須建立映射。為了建立映射,首先必須確定使用的加密的基本形式。對于該實例,將假設(shè)128位作為加密塊大小,盡管它不需要局限于128位。較大的塊大小往往會以犧牲性能為代價來提高安全性。
一旦確定了用于加密的位數(shù),就必須確定用于實際數(shù)據(jù)的位數(shù),與用于添加的熵或任何可選的內(nèi)部校驗和的位相反。在該實例中,將假設(shè)64位,但是一般來說,該數(shù)量可以是直到實際加密塊大小的任何數(shù)量。根據(jù)需要,和校驗可以由加密散列替換。在這個實例中,當原始程序訪問0x100000時,由于消息擴展因子為2,增強型安全cpu仿真器將訪問0x200000處的塊。仿真器無縫地處理此轉(zhuǎn)換。
加密加載和存儲
作為可以由增強型安全cpu仿真器實現(xiàn)的安全指令的實例,現(xiàn)在將進一步詳細討論通用move操作碼。加載或存儲信息的通用處理器指令可以寫為:
move<目的地><源>
下面的討論將集中在源或目的地在主存儲器中,而不是兩者都在主存儲器中的情況。如果源和目的地是處理器寄存器,那么將出現(xiàn)正常未加密的操作。如果源和目的地均在主存儲器中,那么過程將包括直接復制或加密負載加上加密存儲的組合。注意,只有在復制了整個加密塊時才可以使用直接復制,并且沒有規(guī)定引入加密塊偏移作為加密過程的部分(例如,通過使其成為校驗和計算的部分)。這樣的規(guī)定可以用于防止一個加密塊到另一個的簡單拷貝工作。
如果源在主存儲器中并且目的地是處理器寄存器,則指令將調(diào)用子例程,該子例程將執(zhí)行對主存儲器中的源進行解密的本機指令序列,并將結(jié)果存儲在寄存器中。如果目的地在主存儲器中并且源是處理器寄存器,則指令將被將加密結(jié)果存儲在主存儲器中的一個或多個指令所替換。
加密存儲
在加密存儲器中存儲值并不像加密值并將結(jié)果放在存儲器中那么簡單。相反,一般過程可包括:(1)解密一個或兩個加密存儲器組塊,并將結(jié)果存儲在cpu寄存器中(如果數(shù)據(jù)未與加密塊對齊,則可能需要兩個組塊)。(2)可選地,驗證解密的存儲塊通過可能存在的任何內(nèi)部校驗和;例如,在所討論的實例中,64位用于數(shù)據(jù),64位用于隨機位和校驗和;這可以進一步劃分為32位的隨機數(shù)據(jù)和32位的校驗和;如果該校驗和失敗,則執(zhí)行預(yù)定動作;(3)此時,一個或兩個加密存儲器塊應(yīng)在cpu寄存器中解密;用將要存儲的值來更新由那些寄存器表示的未加密存儲器的部分;(4)可選地,用新的隨機位更新包含隨機位的任何區(qū)域;這是昂貴的操作,所以可能不是每次都做;(5)重新計算與這些塊相關(guān)聯(lián)的校驗和;和(6)加密所產(chǎn)生的塊并將它們存儲回原始位置。
加密加載
將存儲器的一部分解密到處理器寄存器可以如下進行:(1)解密一個或兩個加密存儲器組塊,并將結(jié)果存儲在cpu寄存器中(如果數(shù)據(jù)未與加密塊對齊,則可能需要兩個組塊)。(2)可選地,驗證解密的存儲塊通過可能存在的任何內(nèi)部校驗和;(3)在這一點上,一個或兩個加密存儲器塊應(yīng)當在cpu寄存器中被解密并且硬件cpu寄存器可以加載解密數(shù)據(jù)的相關(guān)部分。
加密實例
該實例將假設(shè)具有64位數(shù)據(jù)、32位校驗和和32位隨機數(shù)據(jù)的128位塊大小。例如,明文塊可以布置如下:[64位數(shù)據(jù)][32位隨機][32位校驗和]。這些選擇僅僅為了說明。可以在實際實現(xiàn)中選擇不同的值以實現(xiàn)不同的安全和性能目標。
1.發(fā)出存儲位置0x100中存儲32位的cpu指令。
2.增強型安全cpu仿真器使用的存儲器分為128位(即16字節(jié))組塊。每個組塊包含八個字節(jié)的實際數(shù)據(jù)。
3.因為我們存儲32位,所以我們知道涉及字節(jié)0x100、0x101、0x102、及0x103。這是程序看到的。
4.更具體地,我們知道由于消息擴展因子,涉及實際的存儲位置0x200、0x202、0x204、及0x206。
5.從128位加密,我們知道0x0-0xf是一個塊,并且0x10-0x1f是另一個塊。
6.如果我們將0x200、0x202、0x204、及0x206除以十六(即,塊大小),我們得到在交易中涉及的加密塊為第32塊(第一塊稱為0)。乘以32返回十六產(chǎn)生0x200用于加密存儲器的相關(guān)部分的位置。
7.這部分十六字節(jié)的存儲器加載到寄存器并解密。
8.程序存儲器中的0x100映射到實際存儲器中的0x200,這是使用上述考慮的128位塊的開始。這32位可以簡單地存儲在128位寄存器的32個最高有效位中。
9.可選地,該寄存器中的隨機位字段可以用新的隨機位來更新。
10.可選地,可以計算基于除了校驗和位之外的128位區(qū)域中的任何內(nèi)容的校驗和??蛇x地,該校驗和也可以基于塊號。在這種情況下,它將是32。這將使簡單地移動一塊存儲器不工作。
11.產(chǎn)生的128位寄存器現(xiàn)在被加密,并且結(jié)果存儲回在位置0x200。這意味著更新了0x200-0x20f。
在這個實例中,如果數(shù)據(jù)改為64位,則可以跳過初始解密,因為沒有原始數(shù)據(jù)被重用。
在一些情況下,如果不是用來自硬件隨機數(shù)生成器的新的位來連續(xù)替換隨機位,然后重新計算校驗和,則可能是有利的周期性的。這可能使逆向工程更困難。
雖然不是一個要求,通用程序設(shè)計應(yīng)該試圖保持變量與存儲器對齊,以避免不必要地將它們劃分在不同的加密塊中,因為這將導致每次訪問的加密操作的量翻倍。
設(shè)置密鑰
增強型安全cpu仿真器將使用硬件數(shù)生成器創(chuàng)建加密密鑰。該密鑰一旦存儲,就不應(yīng)該對增強型安全cpu仿真器運行的程序或操作系統(tǒng)可用。在現(xiàn)場系統(tǒng)的一般情況下,除了增強型安全cpu仿真器之外的任何東西都應(yīng)該被阻止訪問存儲密鑰相關(guān)信息的寄存器。
為了加密或解密,加密密鑰通常需要被擴展成一組子密鑰。這可以針對每個加密進行,或者可以預(yù)先計算該組密鑰。由于密鑰和子密鑰的敏感屬性,實際密鑰應(yīng)該保留在處理器寄存器中。優(yōu)選地,擴展的子密鑰也應(yīng)該保留在處理器寄存器或存儲器的一些其他安全部分中。然而,如果子密鑰的這種存儲裝置是不可能或不切實際的,則在每次操作之后應(yīng)該清除并重新創(chuàng)建子密鑰。此外,可取的是子密鑰圍繞存儲器移動以使得訪問困難。確切的實現(xiàn)將取決于目標硬件的細節(jié)。
微代碼更新可以用于專用cpu的內(nèi)部緩存ram的一部分以用于安全子密鑰存儲裝置的目的,優(yōu)選地能夠存儲對應(yīng)于多個實際加密密鑰的多組子密鑰。這種更新還應(yīng)當防止緩存區(qū)域被傳送到主存儲器。在一些實例中,存儲器的加密和解密可以僅在將數(shù)據(jù)加載到緩存時或當需要將數(shù)據(jù)從緩存刷新回到主存儲器時發(fā)生。
示例性仿真算法
本部分描述了用于使用增強型ia系統(tǒng)安全地執(zhí)行敏感軟件程序的示例性方法的步驟;參見圖2。系統(tǒng)10的方面可以用于下面描述的方法步驟中。在適當?shù)那闆r下,可以參考可以用于執(zhí)行每個步驟的先前描述的組件和系統(tǒng)。這些參考是用于說明,并且不旨在限制執(zhí)行該方法的任何特定步驟的可能方式。
圖2是示出了在示例性方法中執(zhí)行的操作的流程圖,并且可以不必陳述方法的全部處理或者所有步驟。圖2描述了總體上以100表示的方法的多個步驟,其可以結(jié)合根據(jù)本公開內(nèi)容的方面的增強型ia系統(tǒng)來執(zhí)行。盡管在下面以及圖2中描述了方法100的各個步驟,然而,沒必要執(zhí)行所有的步驟,并且在一些情況下,可以不同于所示順序的順序執(zhí)行各個步驟。
在步驟102,仿真器通過將安全程序的指令加載到ram中開始。例如,仿真器28可以將安全程序34加載到ram30中。指令在ram中時可以保持加密。
在步驟104,仿真器初始化仿真寄存器。例如,寄存器40可以歸零。
在步驟106,仿真器初始化當前指令地址以指向安全程序的開始。
在步驟108,仿真器檢查以查看仿真是否應(yīng)該停止,并且如果是這樣,則結(jié)束程序仿真。
在步驟110,如果仿真器沒有停止,則檢索當前指令指針處的下一個操作碼。如果整個程序是加密的并且安全的,或者如果當前指令指針在所謂的危急部分(criticalsection)內(nèi),則檢索的指令可以被解密成cpu的硬件寄存器。例如,當前指令可以被解密,并且所產(chǎn)生的解密指令可以被加載到cpu16的保留寄存器18之一中。
在步驟112,如果檢索到的操作碼是“停止(stop)”指令,則指示停止仿真器。
在步驟114,如果檢索的操作碼改為本機操作碼,即在仿真cpu的標準指令組內(nèi)的操作碼,則本機操作碼由仿真cpu仿真。
在步驟116,如果檢索到的操作碼不是“停止”指令或本機操作碼,則該指令是安全操作碼,并且仿真器將仿真安全操作碼,例如,仿佛它對于被仿真的cpu是本地的。以下部分描述了此仿真的幾個實例。通常,仿真器可包括在仿真來自于已知的一組安全操作碼的指令時要執(zhí)行的一組補充仿真指令,例如指令44。
在步驟118,當前指令地址增加,并且控制返回到步驟108。
示例性安全操作碼實施方式
該部分描述用于安全操作碼的仿真執(zhí)行的幾個示例性方法的步驟。返回參考方法100,以下方法是在步驟116中增強型安全cpu仿真器如何仿真安全操作碼的執(zhí)行的示例。
一般來說,該實例假設(shè)增強型安全cpu仿真器被配置成為加密密鑰保留一個硬件寄存器,為文件加密密鑰保留一個硬件寄存器,這兩個密鑰存儲在安全非易失性存儲器中并從安全非易失性存儲器獲取,以及用于加密/解密操作和/或正常算術(shù)操作的其它寄存器。另外,該實例使用正在執(zhí)行的程序的軟件代碼中的開始和結(jié)束臨界部分指令來實現(xiàn)一個或多個“臨界部分”的包圍。該實例示出將由實現(xiàn)增強型安全指令的cpu仿真器實現(xiàn)的邏輯。這些包括以下指令:用于獲得加密密鑰,用于初始化分配給數(shù)據(jù)的存儲器,用于讀取和寫入加密文件,用于從分配給加密數(shù)據(jù)的存儲器加載數(shù)據(jù)和將數(shù)據(jù)存儲到該存儲器,以及用于禁用中斷并且稍后啟用它們以使得可以安全地執(zhí)行加密和解密操作。從未加密的存儲器加載數(shù)據(jù)和將數(shù)據(jù)存儲到未加密的存儲器被包括作為增強型安全指令(與本機指令相反),使得它們將由硬件cpu寄存器中的仿真器與從加密存儲器加載的未加密數(shù)據(jù)一起執(zhí)行。
在到達下一個操作碼時,以下示例性的偽代碼“如果-那么”(if-then)語句可以由仿真器以任何順序執(zhí)行:
如果操作碼是<<從安全非易失性存儲器讀取加密密鑰>>,那么{執(zhí)行指令以從安全非易失性存儲器讀取該加密密鑰并保存在保留的加密密鑰寄存器中};
否則如果操作碼是<<從安全非易失性存儲器讀取文件加密密鑰>>,那么{執(zhí)行指令以從安全非易失性存儲器讀取該文件加密密鑰并保存在保留的文件加密密鑰寄存器中};
否則如果操作碼是<<開始關(guān)鍵部分指令>>,那么{執(zhí)行指令以暫停中斷,保存當前硬件寄存器(不包括保留的加密密鑰寄存器),并且使當前硬件寄存器(不包括保留的加密密鑰寄存器)的內(nèi)容歸零};
否則如果操作碼是<<結(jié)束關(guān)鍵部分指令>>,那么{執(zhí)行指令以歸零當前硬件寄存器(不包括保留的加密密鑰寄存器)的內(nèi)容,恢復當前硬件寄存器(不包括保留的加密密鑰寄存器)并且恢復中斷};
否則如果操作碼是<<初始化存儲器>>,那么{執(zhí)行指令以用隨機位初始化分配給仿真器程序數(shù)據(jù)的ram};
否則如果操作碼是<<從加密存儲器中加載寄存器>>,那么{從仿真機器語言ram檢索寄存器名稱和存儲器位置;執(zhí)行指令以從分配給仿真器程序數(shù)據(jù)的存儲器中的指定位置加載指定寄存器;并且使用在為加密密鑰保留的硬件寄存器中找到的加密密鑰來解密};
否則如果操作碼是<<保存寄存器至加密存儲器>>,那么{從仿真機器語言ram檢索寄存器名稱和存儲器位置;執(zhí)行指令以使用在為加密密鑰保留的硬件寄存器中找到的加密密鑰來加密指定的寄存器;并將該寄存器的內(nèi)容保存到分配給仿真器程序數(shù)據(jù)的存儲器中的指定位置};
否則如果操作碼是<<從未加密的存儲器中加載寄存器>>,那么{從仿真機器語言ram檢索寄存器名稱和存儲器位置;執(zhí)行指令以從分配給仿真器程序數(shù)據(jù)的存儲器中的指定位置加載指定寄存器};
否則如果操作碼是<<保存寄存器至未加密的存儲器>>,那么{從仿真機器語言ram檢索寄存器名稱和存儲器位置;執(zhí)行指令以將指定寄存器的內(nèi)容保存至分配給仿真器程序數(shù)據(jù)的存儲器中的指定位置};
否則如果操作碼是<<從加密文件讀取數(shù)據(jù)>>,那么{從仿真機器語言ram檢索文件名和存儲器位置;執(zhí)行指令以從安全非易失性存儲器讀取文件加密密鑰并保存在保留的文件加密密鑰寄存器中,然后從文件遞增地讀取數(shù)據(jù)到硬件寄存器中;使用在為文件加密密鑰保留的硬件寄存器中找到的文件加密密鑰來解密寄存器的內(nèi)容;使用在為加密密鑰保留的硬件寄存器中找到的加密密鑰來重新加密硬件寄存器的內(nèi)容,并將硬件寄存器的內(nèi)容保存到分配給仿真器程序數(shù)據(jù)的存儲器中的指定位置};
否則如果操作碼是<<保存數(shù)據(jù)至加密文件>>,那么{從仿真機器語言ram檢索文件名稱和存儲器位置;執(zhí)行指令以從安全非易失性存儲器讀取文件加密密鑰并保存在保留的文件加密密鑰寄存器中,然后從分配給仿真器程序數(shù)據(jù)的存儲器中的指定位置遞增地讀取數(shù)據(jù)到硬件寄存器中;使用在為加密密鑰保留的硬件寄存器中找到的加密密鑰來解密硬件寄存器的內(nèi)容;使用在為文件加密密鑰保留的硬件寄存器中找到的文件加密密鑰來重新加密硬件寄存器的內(nèi)容,并將硬件寄存器的內(nèi)容保存到指定文件};
否則如果操作碼不是增強型安全操作碼,則{停止仿真器,并顯示“無效操作碼”的錯誤消息}。
用于增強型ia系統(tǒng)的示例性優(yōu)勢和應(yīng)用
本部分概述了可以適于根據(jù)本公開內(nèi)容的方面并入或與增強型ia系統(tǒng)協(xié)同工作的各種示例性應(yīng)用和系統(tǒng)。
在第一實例中,增強型ia系統(tǒng)可以用于算法保護??紤]復雜算法確定用于更大的程序的一組坐標的情形。必須保護算法防止被攻擊者從程序二進制復制。算法本身以及相關(guān)聯(lián)的數(shù)據(jù)可以由根據(jù)本教導的增強型ia系統(tǒng)保護,而算法的結(jié)果可以例如發(fā)送到主機操作系統(tǒng)以在標準窗口中顯示。
在第二實例中,計算機程序可能是非常有價值的和/或包含必須被特別保護的關(guān)鍵技術(shù),例如在可能進行銷售之前。因此,需要創(chuàng)建在日常個人計算機上運行的真正安全的應(yīng)用。安全應(yīng)用可以使用標準的窗口安裝程序進行分發(fā)和安裝。程序的安全部分可以被復制到安全虛擬機上以供執(zhí)行。這樣保護了實際應(yīng)用代碼和應(yīng)用的安全部分使用的存儲器。
在第三實例中,根據(jù)本教導的增強型ia系統(tǒng)可用于防御惡意軟件,例如病毒和蠕蟲。安全虛擬機將僅運行信任和加密的代碼。因此,它提供了完全保護,防止病毒和蠕蟲攻擊代碼的安全部分。在常規(guī)os上運行的應(yīng)用的任何部分都將受到驗證標準操作系統(tǒng)中的密鑰文件的增強型ia系統(tǒng)的保護。安全應(yīng)用將驗證與其直接交互的庫,包括與應(yīng)用一起提供的庫未經(jīng)修改。即使主機os的組件受損,該保護也將工作。
在第四實例中,嵌入式系統(tǒng)可以包括根據(jù)本教導的增強型ia系統(tǒng)。雖然初始密鑰必須安全地傳送,但是例如在飛行計算機系統(tǒng)中的關(guān)鍵知識產(chǎn)權(quán)可以在程序執(zhí)行時在安全虛擬機中得到保護。正常程序可以在系統(tǒng)的不安全部分中執(zhí)行。在嵌入式系統(tǒng)中,安全地獲得初始密鑰可能更簡單,因為一些可能已經(jīng)具有靜止數(shù)據(jù)安全所需的硬件。例如,現(xiàn)代基于powerpc的設(shè)計具有集成的安全處理器。
在第五實例中,嵌入代碼可以被重新編譯以在桌面測試環(huán)境中運行,從而利用商用現(xiàn)貨(cots)計算機的功率和可用性,用于關(guān)鍵軟件代碼的開發(fā)和測試。這樣的開發(fā)和測試通常涉及對程序代碼的大量修改,以允許其編譯并在多個目標上運行。根據(jù)本教導的增強型ia系統(tǒng)呈現(xiàn)了一種與cots操作系統(tǒng)并排提供嵌入式操作系統(tǒng)的解決方案。這允許在基本上相同的工作水平下維持與嵌入式系統(tǒng)中相同的動態(tài)數(shù)據(jù)安全性要求。它還使得桌面環(huán)境更準確地表示真實系統(tǒng)。在一些實例中,可以允許用戶改變用戶界面的外觀和感覺,而不是內(nèi)部如何工作。在桌面和嵌入式環(huán)境之間移動可以通過在兩個系統(tǒng)上保持相同的目標處理器架構(gòu)來促進。
示例性數(shù)據(jù)處理系統(tǒng)
如圖3中所示,該實例描述了根據(jù)本公開內(nèi)容的方面的數(shù)據(jù)處理系統(tǒng)200(也稱為計算機)。在該實例中,數(shù)據(jù)處理系統(tǒng)200是適合于實現(xiàn)根據(jù)本教導的增強型ia系統(tǒng)的方面的示例性數(shù)據(jù)處理系統(tǒng)。更具體地,在一些實例中,作為數(shù)據(jù)處理系統(tǒng)(例如,智能電話、平板電腦、個人計算機)的實施方式的設(shè)備可以包括被配置為仿真安全操作碼的安全虛擬機,諸如上述系統(tǒng)。
在這個示例性實例中,數(shù)據(jù)處理系統(tǒng)200包括通信構(gòu)架202。通信構(gòu)架202在處理器單元204、存儲器206、永久性存儲裝置208、通信單元210、輸入/輸出(i/o)單元212以及顯示器214之間提供通信。存儲器206、永久性存儲裝置208、通信單元210、輸入/輸出(i/o)單元212、以及顯示器214是處理器單元204經(jīng)由通信構(gòu)架202訪問的資源的實例。
處理器單元204可用于運行可以加載到存儲器206中的指令。處理器單元204可以是多個處理器、多處理器核、或者某一其他類型的處理器,視具體實施方式而定。此外,可以利用其中主處理器與次處理器存在單一芯片上的多個不同種類的處理器系統(tǒng)來實現(xiàn)處理器單元204。如另一個示例性實例,處理器單元204可以是包含同樣類型的多個處理器的對稱多處理器系統(tǒng)。
存儲器206和永久性存儲裝置208是存儲設(shè)備216的實例。存儲設(shè)備是例如能夠存儲但不限于數(shù)據(jù)、函數(shù)形式的程序代碼的信息以及臨時性或者永久性的其他合適信息的任一件硬件。
在這些實例中,存儲設(shè)備216還可被稱為計算機可讀存儲設(shè)備。例如,在這些實例中,存儲器206可以是隨機存取存儲器或者任何其它合適的易失的或者非易失性存儲設(shè)備。永久性存儲裝置208可以為各種形式,視具體實施方式而定。
例如,永久存儲裝置208可以包含一個或多個組件或設(shè)備。例如,永久存儲裝置208可以是硬盤驅(qū)動器、閃存、可再寫光盤、可再寫磁帶或以上的一些組合。由永久存儲裝置208使用的介質(zhì)也可以是可移除的。例如,可移除硬盤驅(qū)動器可被用于永久存儲裝置208。
在這些實例中,通信單元210提供與其它數(shù)據(jù)處理系統(tǒng)或者設(shè)備的通信。在這些實例中,通信單元210是網(wǎng)絡(luò)接口卡。通信單元210可以通過使用物理和無線通信鏈路的任一或者全部來提供通信。
輸入/輸出(i/o)單元212允許利用可以連接至數(shù)據(jù)處理系統(tǒng)200的其他設(shè)備輸入和輸出數(shù)據(jù)。例如,輸入/輸出(i/o)單元212可提供連接以用于用戶通過鍵盤、鼠標、和/或某一其他合適的輸入設(shè)備進行輸入。此外,輸入/輸出(i/o)單元212可將輸出發(fā)送至打印機。顯示器214提供將信息顯示給用戶的機構(gòu)。
有關(guān)操作系統(tǒng)、應(yīng)用程序和/或程序的指令可位于存儲設(shè)備216中,該存儲設(shè)備通過通信構(gòu)架202與處理器單元204通信。在這些示例性實例中,指令為永久性存儲裝置208上的函數(shù)形式。這些指令可以被加載到存儲器206以通過處理器單元204執(zhí)行。不同實施方式的處理可以通過處理器單元204使用計算機實現(xiàn)指令來執(zhí)行,計算機實現(xiàn)指令可以位于存儲器(諸如存儲器206)中。
這些指令被稱為程序指令、程序代碼、計算機可用程序代碼、或者可由處理器單元204中的處理器讀取和執(zhí)行的計算機可讀程序代碼。在不同實施方式中的程序代碼可以在不同的物理或者計算機可讀存儲介質(zhì)(諸如存儲器206或者永久性存儲裝置208)上實現(xiàn)。
程序代碼218可以函數(shù)形式位于選擇性可移除的計算機可讀介質(zhì)220上,并且可被加載到或者傳送到數(shù)據(jù)處理系統(tǒng)200,以通過處理器單元204執(zhí)行。在這些實例中,程序代碼218和計算機可讀介質(zhì)220構(gòu)成計算機程序產(chǎn)品222。在一個實例中,計算機可讀介質(zhì)220可以是計算機可讀存儲介質(zhì)224或者計算機可讀信號介質(zhì)226。
例如,計算機可讀存儲介質(zhì)224可包括被插入到或者放置到驅(qū)動或者其他設(shè)備(即,永久性存儲裝置208的一部分)以用于傳送至諸如硬驅(qū)動的存儲設(shè)備(即,永久性存儲裝置208的一部分)的光盤或者磁盤。計算機可讀存儲介質(zhì)224還可為諸如硬驅(qū)動、拇指驅(qū)動、或者閃存的連接至數(shù)據(jù)處理系統(tǒng)200的永久性存儲裝置形式。在一些情況中,計算機可讀存儲介質(zhì)224不可從數(shù)據(jù)處理系統(tǒng)200中移除。
在這些實例中,計算機可讀存儲介質(zhì)224是用于存儲程序代碼218的物理或者有形存儲設(shè)備而非傳播或者傳輸程序代碼218的介質(zhì)。計算機可讀存儲介質(zhì)224還被稱為計算機可讀有形存儲設(shè)備或者計算機可讀物理存儲設(shè)備。換言之,計算機可讀存儲介質(zhì)224是人可以觸摸的介質(zhì)。
可替代地,可利用計算機可讀信號介質(zhì)226將程序代碼218傳送至數(shù)據(jù)處理系統(tǒng)200。例如,計算機可讀信號介質(zhì)226可以是包含程序代碼218的傳播數(shù)據(jù)信號。例如,計算機可讀信號介質(zhì)226可以是電磁信號、光學信號、和/或任何其他合適類型的信號。可以通過諸如無線通信鏈路、光纖電纜、同軸電纜、配線、和/或任何其他合適類型的通信鏈接的通信鏈路傳輸這些信號。換言之,在示例性實例中,通信鏈路和/或連接可以是物理或者無線的。
在一些示例性實施方式中,可通過數(shù)據(jù)處理系統(tǒng)200中使用的計算機可讀信號介質(zhì)226從另一設(shè)備或者數(shù)據(jù)處理系統(tǒng)經(jīng)由網(wǎng)絡(luò)將程序代碼218下載至永久性存儲裝置208。例如,可經(jīng)由網(wǎng)絡(luò)從服務(wù)器將存儲在服務(wù)器數(shù)據(jù)處理系統(tǒng)中的計算機可讀存儲介質(zhì)中的程序代碼下載至數(shù)據(jù)處理系統(tǒng)200。提供程序代碼218的數(shù)據(jù)處理系統(tǒng)可以是服務(wù)器計算機、客戶端計算機、或者能夠存儲和傳輸程序代碼218的某一其他設(shè)備。
為數(shù)據(jù)處理系統(tǒng)200示出的不同的組件不意味著對方式提供架構(gòu)限制,其中,可以實現(xiàn)不同的實施方式??梢栽诎ǔ境龅年P(guān)于數(shù)據(jù)處理系統(tǒng)200的和/或代替所示出的關(guān)于數(shù)據(jù)處理系統(tǒng)200的組件的數(shù)據(jù)處理系統(tǒng)中實施不同的示出性實施方式。在圖3中所示的其它組件可以與示出的示例性實例不同。可以使用能夠運行程序代碼的任何硬件設(shè)備或者系統(tǒng)實現(xiàn)不同的實施方式。作為一種實例,數(shù)據(jù)處理系統(tǒng)200可包括與無機組件集成的有機組件和/或可整體包括除人類之外的有機組件。例如,存儲設(shè)備可包括有機半導體。
在另一示例性實例中,處理器單元204可以為具有出于特殊用途而制造或者配置的電路的硬件單元形式。這種類型的硬件可執(zhí)行各種操作,而不需要從被配置為執(zhí)行操作的存儲設(shè)備將程序代碼加載到存儲器中。
例如,當處理器單元204為硬件單元形式時,處理器單元204可以是電路系統(tǒng)、專用集成電路(asic)、可編程邏輯設(shè)備、或者被配置為執(zhí)行多種操作的某一其他合適類型的硬件。該設(shè)備被配置為通過可編程邏輯設(shè)備執(zhí)行多種操作。該設(shè)備可在隨后時間內(nèi)被重新配置或者可永久性地被配置為執(zhí)行多種操作。例如,可編程邏輯設(shè)備的實例包括可編程邏輯陣列、場可編程邏輯陣列、場可編程門陣列、以及其他合適的硬件設(shè)備。在這種類型的實施方式中,因為在硬件單元中實現(xiàn)用于不同實施方式的處理,所以可以省去程序代碼218。
在又一示例性實例中,可以使用在計算機和硬件單元中發(fā)現(xiàn)的處理器的組合來實現(xiàn)處理器單元204。處理器單元204可具有被配置為運行程序代碼218的多個硬件單元和多個處理器。在此描述的實例中,可以在多個硬件單元中實現(xiàn)這些處理中的一些,而可以在多個處理器中實現(xiàn)其他處理。
在另一實例中,總線系統(tǒng)可以用于實施通信構(gòu)架202,并且可包括一個或者多個總線,諸如,系統(tǒng)總線和/或輸入/輸出總線。當然,可以使用提供被附接至總線系統(tǒng)的不同組件或者設(shè)備之間的數(shù)據(jù)傳輸?shù)娜魏魏线m類型的架構(gòu)來實現(xiàn)總線系統(tǒng)。
此外,通信單元210可包括發(fā)送數(shù)據(jù)、接收數(shù)據(jù)、或者發(fā)送和接收數(shù)據(jù)的多個設(shè)備。例如,通信單元210可以是調(diào)制器或者網(wǎng)絡(luò)適配器、兩個網(wǎng)絡(luò)適配器、或者其某種組合。此外,例如,存儲器可以是存儲器206、或者是諸如位于接口中和存在于通信構(gòu)架202中的存儲器控制器集線器中的緩存。
本文中所描述的流程圖和框圖示出了根據(jù)各種示例性實施方式的結(jié)構(gòu)、功能以及系統(tǒng)、方法和計算機程序產(chǎn)品的可能實現(xiàn)的操作。關(guān)于此,流程圖或者框圖中的每個框可代表包括用于實現(xiàn)具體的邏輯功能或者多個功能的一個或者多個可執(zhí)行指令的模塊、片段、或者代碼的一部分。還應(yīng)注意的是,在一些可替代的實現(xiàn)中,在框中標注的功能可不以附圖中所標注的順序發(fā)生。例如,順序示出兩個框的功能可以大致同時執(zhí)行,或者有時可以相反順序執(zhí)行各個框的功能,視所包括的功能而定。
示例性計算機網(wǎng)絡(luò)
如圖4中所示,該實例描述了可互換地稱為網(wǎng)絡(luò)、計算機網(wǎng)絡(luò)、網(wǎng)絡(luò)系統(tǒng)、分布式網(wǎng)絡(luò)等的一般網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)300,其中可以包括增強型ia系統(tǒng)和安全虛擬機的示例性實施方式。例如,增強型ia系統(tǒng)、相關(guān)程序指令、加密密鑰和/或虛擬機的各個方面可以在計算機網(wǎng)絡(luò)中實現(xiàn)或使用計算機網(wǎng)絡(luò)傳送。應(yīng)當理解,圖4是作為一個實現(xiàn)的說明而提供的,并且并不旨在暗示關(guān)于可以實現(xiàn)不同實施方式的環(huán)境的任何限制??梢詫λ枥L的環(huán)境進行許多修改。
網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)300是計算機網(wǎng)絡(luò),每個計算機網(wǎng)絡(luò)是數(shù)據(jù)處理系統(tǒng)200、及其他組件的實例。網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)300可包括網(wǎng)絡(luò)302,該網(wǎng)絡(luò)是被配置為在網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)300內(nèi)連接在一起的各種設(shè)備和計算機之間提供通信鏈路的介質(zhì)。網(wǎng)絡(luò)302可包括諸如有線或無線通信鏈路、纖維光纜和/或用于在網(wǎng)絡(luò)設(shè)備之間傳輸和/或傳送數(shù)據(jù)的任何其它合適的介質(zhì)或其任何組合的連接。
在所描述的實例中,第一網(wǎng)絡(luò)設(shè)備304和第二網(wǎng)絡(luò)設(shè)備306如電子存儲設(shè)備308那樣連接到網(wǎng)絡(luò)302。網(wǎng)絡(luò)設(shè)備304和306各自是上述數(shù)據(jù)處理系統(tǒng)200的實例。在描述的實例中,設(shè)備304和306示出為服務(wù)器計算機。然而,網(wǎng)絡(luò)設(shè)備可包括但不限于一個或多個個人計算機,諸如個人數(shù)字助理(pda)、平板電腦和智能電話的移動計算設(shè)備,手持游戲設(shè)備,可穿戴設(shè)備,平板計算機,路由器,交換機,語音門,服務(wù)器,電子存儲設(shè)備,成像設(shè)備和/或可以執(zhí)行機械或其他功能的其他聯(lián)網(wǎng)使能工具。這些網(wǎng)絡(luò)設(shè)備可以通過有線、無線、光學和其他適當?shù)耐ㄐ沛溌坊ミB。
此外,諸如客戶端計算機310、客戶端膝上型電腦或平板電腦312和/或客戶端智能設(shè)備314的客戶端電子設(shè)備可以連接到網(wǎng)絡(luò)302。這些設(shè)備中的每一個是上面關(guān)于圖3描述的數(shù)據(jù)處理系統(tǒng)200的實例。客戶端電子設(shè)備310、312和314可以包括例如一個或多個個人計算機、網(wǎng)絡(luò)計算機和/或移動計算設(shè)備,諸如個人數(shù)字助理(pda)、智能電話、手持游戲設(shè)備、可穿戴設(shè)備和/或平板計算機等。在所描繪的實例中,服務(wù)器304向客戶端電子設(shè)備310、312和314中的一個或多個提供諸如引導文件、操作系統(tǒng)圖像和應(yīng)用的信息。客戶端電子設(shè)備310、312和314可以相對于諸如服務(wù)器計算機304的服務(wù)器被稱為“客戶端”。網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)300可包括更多或更少的服務(wù)器和客戶端,或者沒有服務(wù)器或客戶端,以及未示出的其他設(shè)備。
客戶端智能設(shè)備314可包括能夠進行無線通信和執(zhí)行軟件(諸如智能電話或平板電腦)的任何合適的便攜式電子設(shè)備。一般來說,術(shù)語“智能電話”可以描述具有比典型移動電話更高級的計算能力和網(wǎng)絡(luò)連接性的任何合適的便攜式電子設(shè)備。除了進行電話呼叫(例如,通過蜂窩網(wǎng)絡(luò))之外,智能電話可以能夠發(fā)送和接收電子郵件、文本和多媒體消息,訪問互聯(lián)網(wǎng)和/或用作網(wǎng)絡(luò)瀏覽器。智能設(shè)備(例如,智能電話)還可以包括其他已知電子設(shè)備的特征,諸如媒體播放器、個人數(shù)字助理、數(shù)字相機、攝像機和/或全球定位系統(tǒng)。智能設(shè)備(例如,智能電話)可以能夠無線地(例如通過近場通信(nfc)、藍牙、wifi或移動寬帶網(wǎng)絡(luò))與其他智能設(shè)備、計算機或電子設(shè)備連接??梢栽谥悄茉O(shè)備、智能電話、計算機和其他設(shè)備之間建立無線連接,以形成可以交換信息的移動網(wǎng)絡(luò)。
位于系統(tǒng)300中的程序代碼可以存儲在計算機可記錄存儲介質(zhì)(諸如永久存儲裝置208)中或上,并且可以下載到數(shù)據(jù)處理系統(tǒng)或其他設(shè)備以供使用。例如,程序代碼可以存儲在服務(wù)器計算機304上的計算機可記錄存儲介質(zhì)上,并且可以通過客戶端310上使用的網(wǎng)絡(luò)302下載以供客戶端310使用。
網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)300可以實現(xiàn)為多個不同類型的網(wǎng)絡(luò)中的一個或多個。例如,系統(tǒng)300可包括內(nèi)聯(lián)網(wǎng)、局域網(wǎng)絡(luò)(lan)、廣域網(wǎng)絡(luò)(wan)、或者個人局域網(wǎng)(pan)。在一些實例中,網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)300包括互聯(lián)網(wǎng),其中網(wǎng)絡(luò)302表示使用傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議(tcp/ip)協(xié)議套件彼此通信的網(wǎng)絡(luò)和網(wǎng)關(guān)的世界范圍的集合。互聯(lián)網(wǎng)的核心是主要節(jié)點或主計算機之間的高速數(shù)據(jù)通信線路的骨干。數(shù)千個商業(yè)、政府、教育和其他計算機系統(tǒng)可以用于路由數(shù)據(jù)和消息。在一些實例中,網(wǎng)絡(luò)300可稱為“云”。在這些實例中,每個服務(wù)器304可以稱為云計算節(jié)點,并且客戶端電子設(shè)備可以稱為云消費者等。圖4意在作為示例而不是作為任何示例性實施方式的體系結(jié)構(gòu)限制。
此外,本公開內(nèi)容包括根據(jù)下列項的實施方式:
項1.一種用于安全執(zhí)行軟件指令的計算機系統(tǒng),該計算機系統(tǒng)包括:
第一處理器,具有多個硬件寄存器;
存儲器;以及
仿真器程序,包括存儲在存儲器中的多個指令,可通過第一處理器執(zhí)行指令以:
仿真第二處理器;
仿真在第二處理器上執(zhí)行多個本機機器指令,本機機器指令對于第二處理器是本地的;并且
仿真在第二處理器上執(zhí)行多個安全機器指令,安全機器指令對于第二處理器是非本地的,并且包括一個或多個操作碼,該操作碼被配置為確保與操作碼相關(guān)聯(lián)的操作數(shù)數(shù)據(jù)的未加密值僅存儲在第一處理器的硬件寄存器的一個或多個中的。
項2.根據(jù)項1所述的計算機系統(tǒng),其中,仿真的第二處理器與第一處理器是不同的類型。
項3.根據(jù)項2所述的計算機系統(tǒng),其中,仿真的第二處理器具有比第一處理器少的寄存器。
項4.根據(jù)項1所述的計算機系統(tǒng),還包括與第一處理器通信的隨機存取存儲器(ram)和存儲在ram中的軟件程序,軟件程序編譯為在仿真的第二處理器上運行并包含一個或多個安全機器指令。
項5.根據(jù)項4所述的計算機系統(tǒng),其中,所述軟件程序被加密。
項6.根據(jù)項1所述的計算機系統(tǒng),其中,仿真器程序的指令還可由第一處理器執(zhí)行以確保安全機器指令的操作碼的解密版本僅存儲在第一處理器的一個或多個硬件寄存器中。
項7.根據(jù)項6所述的計算機系統(tǒng),其中,仿真器程序的指令還可由第一處理器執(zhí)行以在將操作數(shù)數(shù)據(jù)存儲在ram中之前加密操作數(shù)數(shù)據(jù),并且在從ram檢索操作數(shù)數(shù)據(jù)之后解密該操作數(shù)數(shù)據(jù)。
項8.一種在計算機系統(tǒng)中實現(xiàn)的方法,所述方法包括:
從存儲器檢索加密機器指令;
解密檢索的機器指令并且將解密的指令存儲在第一處理器的第一硬件寄存器中;并且
使用仿真的第二處理器仿真所解密的指令的執(zhí)行;
其中,所解密的指令是多個安全指令中相對于仿真的第二處理器非本地的一個。
項9.根據(jù)項8所述的方法,其中,仿真所解密的指令的執(zhí)行包括改變與所解密的指令相關(guān)聯(lián)的操作數(shù)的值。
項10.根據(jù)項9所述的方法,其中,改變操作數(shù)的值包括解密操作數(shù)以產(chǎn)生解密值并將解密值存儲在第一處理器的第二硬件寄存器中。
項11.根據(jù)項10所述的方法,其中,存儲解密值包括存儲除了解密值以外的隨機信息。
項12.根據(jù)項10所述的方法,其中,改變操作數(shù)的值還包括確定并且加密新值以產(chǎn)生一個或多個加密的數(shù)據(jù)塊以及將一個或多個加密的數(shù)據(jù)塊存儲在存儲器中。
項13.根據(jù)項12所述的方法,其中,加密新值包括用新值加密所選數(shù)量的隨機數(shù)據(jù)。
項14.根據(jù)項8所述的方法,其中,解密檢索的機器指令包括使用存儲在第一處理器的第三硬件寄存器中的加密密鑰。
項15.一種用于安全執(zhí)行軟件指令的計算機系統(tǒng),該計算機系統(tǒng)包括:
第一處理器,具有多個硬件寄存器;
存儲器;以及
仿真器程序,包括存儲在存儲器中的多個指令,可通過第一處理器執(zhí)行指令以:
從存儲器檢索加密機器指令;
解密檢索的機器指令并將解密的指令存儲在第一處理器的硬件寄存器的一個或多個中;并且
使用仿真的第二處理器仿真所解密的指令的執(zhí)行;
其中,解密指令是多個安全指令中相對于仿真的第二處理器非本地的一個。
項16.根據(jù)項15所述的計算機系統(tǒng),其中,仿真所解密的指令的執(zhí)行包括改變與指令相關(guān)聯(lián)的操作數(shù)的值。
項17.根據(jù)項16所述的計算機系統(tǒng),其中,改變操作數(shù)的值包括解密操作數(shù)以產(chǎn)生解密值并將解密值存儲在第一處理器的硬件寄存器的一個或多個中。
項18.根據(jù)項17所述的計算機系統(tǒng),其中,存儲解密值包括存儲除了解密值以外的隨機信息。
項19.根據(jù)項17所述的計算機系統(tǒng),其中,改變操作數(shù)的值還包括確定并且加密新值以產(chǎn)生一個或多個加密的數(shù)據(jù)塊以及將一個或多個加密的數(shù)據(jù)塊存儲在存儲器中。
項20.根據(jù)項19所述的計算機系統(tǒng),其中,加密新值包括用新值加密所選擇的數(shù)量的隨機數(shù)據(jù)。