sgx模擬執行,不需要sgx硬體---sgx executed in simulation,No need to support hardware for SGX

写不完作业还要玩發表於2024-10-28

sgx executed in simulation

使用專案:https://github.com/intel/linux-sgx.git

前言:目前國內和國外網際網路上關於使用模擬模式來完成sgx的部落格我是真的一點沒有找到,因此自己寫一份部落格來完成記錄

環境:

  1. Ubuntu22.04

  2. 不支援sgx,沒有硬體存在

  3. (mac也可以按照本教程來完成工作)

前置工作:

  1. 下載上面提到的專案

  2. (不需要driver驅動,在模擬環境下,不需要驅動!!!困擾了我很久)

下載專案:

git clone https://github.com/~/sgx/linux-sgx/linux-sgx.git && cd linux-sgx
# 我使用了2.14這個版本,防止專案太龐大,因為我只是想模擬一下
git tag
git check sgx_2.14 # 貌似是這個名字
git status #提示切換分支成功

下面我是使用docker來完成的這個工作,不想使用docker的也可以,看最後有提到,原理相同

# 首先修改 .dockerignore,當前路徑~/linux-sgx
# 首先預編譯一下sdk
make preparation

預編譯會下載其他的git專案,以及其他的內容,等待結束沒有報錯出現OK字樣

cd docker/build
# 進入docker目錄修改DockerFile以及.sh檔案
vim Dockerfile

1.修改Dockerfile

修改Dockerfile裡面的內容如下,首先我們需要明確,我們使用Docker執行的專案是SampleEnclave這個demo,在SIM模式下執行,因此只需要對於這模組進行修改

image-20241028155211277

我們需要改動的點是:

# 修改SGX_MODE模式是SIM
RUN SGX_DEBUG=0 SGX_MODE=SIM SGX_PRERELEASE=1 make

同時在上面ENV地方新增路徑依賴,保證能夠讓程式碼找到_sim.a 結尾的模擬庫,同時我刪除了其中切換USER的步驟,因為害怕路徑依賴失效

# 這部分內容我全部刪除了
RUN adduser -q --disabled-password --gecos "" --no-create-home sgxuser
USER sgxuser

2.修改build_and_run_sample.docker.sh

docker run --env http_proxy --env https_proxy --device=/dev/sgx_enclave -v aesmd-socket:/var/run/aesmd -it sgx_sample
# 修改為,去掉了--device=/dev/sgx_enclave
docker run --env http_proxy --env https_proxy -v aesmd-socket:/var/run/aesmd -it sgx_sample

3.修改compose(可能不需要,因為不需要編排,但是我還是修改了)

刪除掉下面的device,因為我們不支援sgx,所以沒有對應裝置

services:
aesm:
image: sgx_aesm
devices:
- /dev/sgx/enclave
- /dev/sgx/provision
volumes:
- aesmd-socket:/var/run/aesmd
stdin_open: true
tty: true
environment:
- http_proxy
- https_proxy

sample:
image: sgx_sample
depends_on:
- aesm
devices:
- /dev/sgx/enclave
volumes:
- aesmd-socket:/var/run/aesmd
stdin_open: true
tty: true
environment:
- http_proxy
- https_proxy

4.啟動docker

sudo ./build_and_run_sample_docker.sh 

會進行下面內容:

  1. 傳輸 ../..目錄的內容到docker daemon

  2. 然後在docker容器內進行編譯sdk

  3. 然後編譯psw(我們用不到)

  4. 之後就會在模擬模式下啟動內容

我的執行截圖如下:

~/sgx/linux-sgx/docker/build # sudo ./build_and_run_sample_docker.sh 
DEPRECATED: The legacy builder is deprecated and will be removed in a future release.
Install the buildx component to build images with BuildKit:
https://docs.docker.com/go/buildx/

Sending build context to Docker daemon 390.2MB
Step 1/29 : FROM ubuntu:18.04 as builder
---> f9a80a55f492
Step 2/29 : RUN apt-get update && apt-get install -y autoconf automake build-essential cmake curl debhelper git libcurl4-openssl-dev libprotobuf-dev libssl-dev libtool lsb-release ocaml ocamlbuild protobuf-compiler python wget
---> Using cache
---> f58d93be68c4
Step 3/29 : WORKDIR /linux-sgx
---> Using cache
---> 5da8c3a56b09
Step 4/29 : COPY . .
---> Using cache
---> 2726e0a0aac2
Step 5/29 : RUN make sdk_install_pkg_no_mitigation
---> Using cache
---> e660719d11b3
Step 6/29 : WORKDIR /opt/intel
---> Using cache
---> 6a432f3bc318
Step 7/29 : RUN sh -c 'echo yes | /linux-sgx/linux/installer/bin/sgx_linux_x64_sdk_*.bin'
---> Using cache
---> 6652fef818cf
Step 8/29 : WORKDIR /linux-sgx
---> Using cache
---> 32a650eed1ea
Step 9/29 : RUN make psw_install_pkg
---> Using cache
---> 8624ac81f5fd
Step 10/29 : FROM ubuntu:18.04 as aesm
---> f9a80a55f492
Step 11/29 : RUN apt-get update && apt-get install -y libcurl4 libprotobuf10 libssl1.1 make module-init-tools
---> Using cache
---> 219c9431e7bf
Step 12/29 : WORKDIR /installer
---> Using cache
---> 9b55037469e5
Step 13/29 : COPY --from=builder /linux-sgx/linux/installer/bin/*.bin ./
---> Using cache
---> 092ac12e9dcc
Step 14/29 : RUN ./sgx_linux_x64_psw*.bin --no-start-aesm
---> Using cache
---> 81448571338c
Step 15/29 : USER aesmd
---> Using cache
---> f7396ecac317
Step 16/29 : WORKDIR /opt/intel/sgxpsw/aesm/
---> Using cache
---> 8c7f6a7cacfa
Step 17/29 : ENV LD_LIBRARY_PATH=.
---> Using cache
---> 140e551470e5
Step 18/29 : CMD ./aesm_service --no-daemon
---> Using cache
---> f3093b1897a3
Step 19/29 : FROM ubuntu:18.04 as sample
---> f9a80a55f492
Step 20/29 : RUN apt-get update && apt-get install -y g++ libcurl4-openssl-dev libprotobuf-dev libssl-dev make module-init-tools
---> Using cache
---> 37bbee366b11
Step 21/29 : WORKDIR /opt/intel
---> Using cache
---> 4f750e55159b
Step 22/29 : COPY --from=builder /linux-sgx/linux/installer/bin/*.bin ./
---> Using cache
---> cddd91fbc2e9
Step 23/29 : RUN ./sgx_linux_x64_psw*.bin --no-start-aesm
---> Using cache
---> 432a393799f3
Step 24/29 : RUN sh -c 'echo yes | ./sgx_linux_x64_sdk_*.bin'
---> Using cache
---> 83132d57f2c8
Step 25/29 : COPY ./docker/build/SampleEnclave /opt/intel/sgxsdk/SampleCode/SampleEnclave
---> Using cache
---> e1248384e6e1
Step 26/29 : WORKDIR /opt/intel/sgxsdk/SampleCode/SampleEnclave
---> Using cache
---> aa84e8a74f5f
Step 27/29 : ENV LD_LIBRARY_PATH=/opt/intel/sgxsdk/lib64:$LD_LIBRARY_PATH
---> Using cache
---> 61eb09ad6fa8
Step 28/29 : RUN SGX_DEBUG=0 SGX_MODE=SIM SGX_PRERELEASE=1 make
---> Using cache
---> fefd0a4f9ae0
Step 29/29 : CMD ./app
---> Using cache
---> 2cf5a95e5a8a
Successfully built 2cf5a95e5a8a
Successfully tagged sgx_sample:latest
Checksum(0x0x7ffde2b86000, 100) = 0xfffd4143
Info: executing thread synchronization, please wait...
target is replaced!Info: SampleEnclave successfully returned.
Enter a character before exit ...

至此,sim執行sgx就可以了,不過是docker模式,下面提一下非docker使用sim

最後提示一下,如果想把檔案內容傳遞到docker地下,docker傳遞給docker daemon上下文環境是 /linux-sgx,這個底下有 .dockerignore,記得刪掉一些東西,排除一下

5.非docker使用sim執行sgx

同樣下載專案,按照這個流程來進行在本機下安裝sdk:https://flxdu.cn/Notes/2022/Intel-R-SGX%E7%8E%AF%E5%A2%83%E5%9C%A8Ubuntu-18-04%E7%9A%84%E5%AE%89%E8%A3%85.html

有任何其他問題,聯絡郵箱:2742598536@qq.com,我明白你這會大海中撈針尋找方法的痛苦

相關文章