sgx初步學(xué)習(xí)

最近在接觸sgx應(yīng)用,這里也記錄學(xué)習(xí)過(guò)程中整理的一些內(nèi)容,也希望能和更多sgx相關(guān)的研究人員多多交流~

一 了解SGX

1.1 SGX定義

  • Intel 軟件防護(hù)擴(kuò)展SGX(Software Guard Extension)是一項(xiàng)針對(duì)臺(tái)式機(jī)和服務(wù)器平臺(tái)的旨在滿足可信計(jì)算需求的技術(shù)。Intel SGX是Intel架構(gòu)新的擴(kuò)展,在原有架構(gòu)上增加了一組新的指令集和內(nèi)存訪問(wèn)機(jī)制。
  • Intel在2015年從第6代Intel酷睿處理器平臺(tái)開(kāi)始引入了Intel軟件防護(hù)擴(kuò)展新指令集,使用特殊指令和軟件可將應(yīng)用程序代碼放入一個(gè)enclave中執(zhí)行。Enclave可以提供一個(gè)隔離的可信執(zhí)行環(huán)境,可以在BIOS、虛擬機(jī)監(jiān)控器、主操作系統(tǒng)和驅(qū)動(dòng)程序均被惡意代碼攻陷的情況下,仍對(duì)enclave內(nèi)的代碼和內(nèi)存數(shù)據(jù)提供保護(hù),防止惡意軟件影響enclave內(nèi)的代碼和數(shù)據(jù),從而保障用戶的關(guān)鍵代碼和數(shù)據(jù)的機(jī)密性和完整性。
  • 目的不是為了消除軟件漏洞,而是為重要的應(yīng)用程序提供安全的容器(enclave)。

1.2 基本原理

  • SGX應(yīng)用由兩部分組成:
    untrusted 不可信區(qū):代碼和數(shù)據(jù)運(yùn)行在普通非加密內(nèi)存區(qū)域,程序main入口必須在非可信區(qū)。
    trusted 可信區(qū):代碼和數(shù)據(jù)運(yùn)行在硬件加密內(nèi)存區(qū)域,此區(qū)域由CPU創(chuàng)建的且只有CPU有權(quán)限訪問(wèn)。


    原理圖
  • 當(dāng)一個(gè)安全區(qū)域函數(shù)被調(diào)用時(shí),只有安全區(qū)域內(nèi)的代碼才能看到其數(shù)據(jù),外部訪問(wèn)總是被拒絕;返回時(shí),安全區(qū)數(shù)據(jù)將保留在受保護(hù)的內(nèi)存中。

  • 非可信區(qū)只能通過(guò)ECALL函數(shù)調(diào)用可信區(qū)內(nèi)的函數(shù),可信區(qū)只能通過(guò)OCALL函數(shù)調(diào)用非可信區(qū)的函數(shù),ECALL函數(shù)和OCALL函數(shù)通過(guò)EDL文件聲明。

1.3 兩大機(jī)制

1.3.1 保護(hù)機(jī)制

針對(duì)enclave的保護(hù)機(jī)制主要包括兩個(gè)部分:一是enclave內(nèi)存訪問(wèn)語(yǔ)義的變化,二是應(yīng)用程序地址映射關(guān)系的保護(hù)。這兩項(xiàng)功能共同完成對(duì)enclave的機(jī)密性和完整性的保護(hù)。

1.3.2 認(rèn)證機(jī)制

SGX 提出了兩種類型的身份認(rèn)證方式:一種是平臺(tái)內(nèi)部 enclave 間的認(rèn)證,用來(lái)認(rèn)證進(jìn)行報(bào)告的 enclave 和自己是否運(yùn)行在同一個(gè)平臺(tái)上;另一種是平臺(tái)間的遠(yuǎn)程認(rèn)證,用于遠(yuǎn)程的認(rèn)證者認(rèn)證 enclave 的身份信息。

  • 本地證明:同一平臺(tái)的兩個(gè)Enclave之間的證明過(guò)程。
  • 遠(yuǎn)程證明:Enclave和不在平臺(tái)上的第三方之間的證明過(guò)程。

【SGX 入門(mén)教程-01】Intel? Software Guard Extensions Introductory Overview:https://www.bilibili.com/video/av37239146/

二 SGX開(kāi)發(fā)應(yīng)用

2.1 安裝

2.1.1 Window10安裝配置Intel SGX

實(shí)驗(yàn)環(huán)境要求:BIOS中開(kāi)啟SGX配置,Intel高級(jí)菜單—>CPU配置軟件Guard擴(kuò)展指令集(SGX)選擇enable。(如果BIOS不支持SGX,可以通過(guò)SDK內(nèi)置的模擬器來(lái)運(yùn)行調(diào)試enclave程序,無(wú)需安裝Intel SGX平臺(tái)軟件PSW)

  1. Intel ME下載及安裝:https://downloadcenter.intel.com/download/28680/Intel-Management-Engine-Driver-for-Windows-7-
    E:\devsoft\sgx\ME_SW_1909.12.0.1237\Corp\ME_SW_MSI\SetupME.exe

  2. 安裝Visual Studio專業(yè)版 2017,這一步一定要在安裝SGX SDK之前。否則,你啟動(dòng)VS2017時(shí),無(wú)法看到SGX的插件。

  3. 安裝SGX SDK:https://registrationcenter.intel.com/en/products/postregistration/?sn=CCXS-ZSSJ7GG5&EmailID=908947250%40qq.com&Sequence=2444010&ret=n 下載PSW(平臺(tái)環(huán)境)和SDK(必須的),下載后的exe文件解壓后,有說(shuō)明文檔和安裝的exe。這里需要注冊(cè)Intel學(xué)生用戶。

image
  • 如果硬件不支持SGX,可以不用裝PSW,只安裝SDK可以使用模擬選項(xiàng)進(jìn)行編譯;如果支持SGX,就可以安裝PSW進(jìn)行真實(shí)enclave程序的運(yùn)行。
  • 先安裝SDK:SDK直接安裝就行,Intel(R)_SGX_Windows_SDK_2.5.101.3.exe。
  • 再安裝PSW:PSW有在線安裝和離線安裝兩種方式。常用離線安裝:https://blog.csdn.net/zhangyajunna/article/details/103762440
2.1.2 Ubuntu Intel SGX SDK環(huán)境搭建
  • 使用環(huán)境:操作系統(tǒng)Ubuntu 16.04 LTS
  • 硬件需求僅當(dāng)安裝sgx驅(qū)動(dòng)和PSW時(shí)需要,安裝sgx sdk并不需要硬件支持。
  • 硬件不支持的情況下,可以在模擬環(huán)境下編寫(xiě)測(cè)試SGX程序,其中makefile里SGX_MODE=SIM。
  • 參考:https://blog.csdn.net/u013433886/article/details/117715502
sudo apt-get update
sudo apt-get install libssl-dev libcurl4-openssl-dev libprotobuf-dev
sudo apt-get install build-essential python

# 下載Intel SGX驅(qū)動(dòng)并安裝
wget https://download.01.org/intel-sgx/sgx-linux/2.7.1/distro/ubuntu16.04-server/sgx_linux_x64_driver_2.6.0_4f5bb63.bin
chmod +x sgx_linux_x64_driver_2.6.0_4f5bb63.bin
sudo ./sgx_linux_x64_driver_2.6.0_4f5bb63.bin
sudo reboot

# 下載Intel SGX PSW并安裝
wget https://download.01.org/intel-sgx/sgx-linux/2.7.1/distro/ubuntu16.04-server/libsgx-enclave-common_2.7.101.3-xenial1_amd64.deb
sudo dpkg -i ./libsgx-enclave-common_2.7.101.3-xenial1_amd64.deb

# 下載并安裝Intel SGX SDK
wget https://download.01.org/intel-sgx/sgx-linux/2.7.1/distro/ubuntu16.04-server/sgx_linux_x64_sdk_2.7.101.3.bin
chmod +x ./sgx_linux_x64_sdk_2.7.101.3.bin
./sgx_linux_x64_sdk_2.7.101.3.bin
# 安裝過(guò)程中可以手動(dòng)輸入SDK要安裝到的目標(biāo)位置

# 添加環(huán)境變量,執(zhí)行上一步結(jié)束時(shí)輸出的命令
source /path/to/sgxsdk/environment


# 運(yùn)行一下實(shí)例程序
cd /path/to/sgxsdk/SampleCode/SampleEnclave

# 編輯一下Makefile
# Intel SGX SDK 的安裝位置
SGX_SDK ?= /home/luoyhang003/SGX/sgxsdk
# 運(yùn)行類型:HW 真實(shí)環(huán)境;SIM 模擬器環(huán)境
SGX_MODE ?= SIM
# 運(yùn)行架構(gòu):僅支持 64 位
SGX_ARCH ?= x64
# 是否為:Debug 調(diào)試模式
SGX_DEBUG ?= 1

# 編譯
sudo make
# 運(yùn)行
./app

注意:sgx的安裝可以不用安裝clsClient-1.45.449.12-1.x86_64.rpm,官網(wǎng)下載鏈接http://registrationcenter-download.intel.com/akdlm/irc_nas/11414/iclsClient-1.45.449.12-1.x86_64.rpm也失效了,很多博客上的教程仍然要求安裝clsClient,但實(shí)際安裝過(guò)程中已經(jīng)不需要了。

【SGX 入門(mén)教程-02】Detecting and Enabling Intel? SGX:https://www.bilibili.com/video/BV1jt411D79Q/?spm_id_from=333.788.recommend_more_video.-1

2.2 開(kāi)發(fā)

SGX應(yīng)用程序

【SGX 入門(mén)教程-03】Intel? SGX Application Design:https://www.bilibili.com/video/BV17t411D7xK/?spm_id_from=333.788.recommend_more_video.0

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容