本篇文章給大家?guī)淼膬?nèi)容是關(guān)于英特爾sgx的基礎(chǔ)介紹,有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。
英特爾 SGX 基礎(chǔ)介紹
英特爾 SGX(Intel Software Guard Extension)是英特爾指令集架構(gòu)的一個(gè)擴(kuò)展。SGX 為您提供了圍圈(Enclave),即內(nèi)存中一個(gè)加密的可信執(zhí)行區(qū)域,由 CPU 保護(hù)您的數(shù)據(jù)和隱私不被惡意代碼竊取。
原理
SGX 利用新增的處理器指令,在內(nèi)存中分配一部分區(qū)域 EPC(Enclave Page Cache),通過 CPU 內(nèi)的加密引擎 MEE(Memory Encryption Engine)對(duì)其中的數(shù)據(jù)進(jìn)行加密。EPC 中加密的內(nèi)容只有進(jìn)入 CPU 后才會(huì)被解密成明文。因此,在 SGX 中,您可以不信任操作系統(tǒng)、VMM、甚至 BIOS,只需要信任 CPU 便能確保隱私數(shù)據(jù)不會(huì)泄漏。
應(yīng)用
實(shí)際應(yīng)用中,您可以把隱私數(shù)據(jù)加密后以密文形式傳遞至云上的圍圈中,并通過遠(yuǎn)程證明把對(duì)應(yīng)的秘鑰也傳入圍圈。然后在 CPU 的加密保護(hù)下利用數(shù)據(jù)進(jìn)行運(yùn)算,結(jié)果會(huì)以密文形式返回給您。這種模式下,您既可以利用云計(jì)算強(qiáng)大的計(jì)算力,又不用擔(dān)心數(shù)據(jù)泄漏。
EDL(Enclave Definition Language)
EDL 是 SGX 編程的核心,其中定義了所有圍圈里對(duì)外讀寫、處理數(shù)據(jù)的函數(shù)。在編譯階段,SDK 提供的 Edger8r 工具會(huì)根據(jù) EDL 中定義的函數(shù)生成圍圈和普通內(nèi)存的橋接函數(shù),并做相應(yīng)的安全檢測(cè)。
函數(shù)分為信任函數(shù)(ecall)和不可信函數(shù)(ocall):
ecall:定義在信任區(qū)域(trusted),在圍圈外被調(diào)用,并在圍圈內(nèi)執(zhí)行。
ocall:定義在不可信區(qū)域(untrusted),在圍圈內(nèi)被調(diào)用,并在圍圈外執(zhí)行。
//?demo.edl enclave?{ ????????//?Add?your?definition?of?"secret_t"?here ????????trusted?{ ?????????????????public?void?get_secret([out]?secret_t*?secret); ????????}; ????????untrusted?{ ????????//?This?OCALL?is?for?illustration?purposes?only. ????????//?It?should?not?be?used?in?a?real?enclave, ????????//?unless?it?is?during?the?development?phase ????????//?for?debugging?purposes. ????????void?dump_secret([in]?const?secret_t*?secret); ????????}; };
安裝 SGX
您可以通過安裝文件或者源代碼安裝 SGX,包括驅(qū)動(dòng)、PSW 和 SDK 等。兩種安裝方式都需要安裝對(duì)應(yīng) linux 內(nèi)核版本的頭文件。