sgx模拟执行,不需要sgx硬件---sgx executed in simulation,No need to support hardware for SGX

news/2025/2/28 20:22:10/文章来源:https://www.cnblogs.com/oldoldcoder/p/18510868

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,我明白你这会大海中捞针寻找方法的痛苦

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/823238.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法定制视频分析网关拍照检测工业园区/厂区/工厂智慧安监方案

一、方案背景 随着工业化进程的加速,特别是制造业、建筑业、化工等高风险行业,生产安全事故频发,对人们的生命安全和健康构成了严重威胁。为了有效预防和减少重大事故的发生,提高安全管理水平,智慧安监方案应运而生。 二、方案内容 智慧安监方案的核心在于利用物联网、大数…

IIC通信协议详解 PCF8591应用(Verilog实现)

详细介绍了IIC通信协议并给出如何使用PCF8591,用verilog实现.该文章结合PCF8591 8-bit AD/DA 模数/数模转换器来详细介绍IIC通信协议,尽量做到条理清晰,通俗易懂。该文图片均从PCF8591手册中截取,一定程度上引导读者学习阅读data sheet。 1. PCF8591引脚2. 功能介绍 2.1 地…

GaussDB 数据库实验环境搭建指导

@目录简介内容描述实验环境说明1 GaussDB数据库购买1.1 实验介绍1.1.1 关于本实验1.1.2 实验目的1.2 购买GaussDB数据库1.2.1 登录华为云1.2.2 购买华为云GaussDB数据库 简介 本指导书适用于在华为云部署购买GaussDB数据库,通过该指导书可以顺利完成GaussDB数据库在华为云的购…

Python 学习记录(3)

数据Pandas对数据帧各列的运算 import seaborn as sns import pandas as pd #从Seaborn 当中导入鸢尾花数据帧,并处理 iris_df=sns.load_dataset("iris") X_df=iris_df.copy() X_df.rename(columns={sepal_length:X1,sepal_width:X2},inplace=True) X_df_=X_df[[X1,…

Qt gridLayout布局占两格或两列在ui文件中实现

在Qt gridLayou布局里添加一个控件如何设置其占两格或多格如下图: 一 、如果是纯代码编写的界面 (大多是这个方式)在纯代码编写的界面应用中,可以使用函数QGridLayout::addWidget(QWidget *w, int row, int column, int rowSpan, int columnSpan, Qt::Alignment =…

GaussDB火焰图分析

问题描述 CPU利用率是衡量系统负载和健康度的重要指标之一,系统在运行过程中时常发生CPU利用率高的情况。在分析性能问题时,可通过火焰图查看CPU耗时,了解瓶颈在哪里。 问题现象 部分sql执行速度不符合预期。 告警慢sql告警。 cpu使用率高告警。 数据库整体运行慢。业务影响…

为什么MySQL单表不能超过2000万行? (1)

​ 最近看到一篇《我说MySQL每张表最好不要超过2000万数据,面试官让我回去等通知》的文章,非常有趣。 文中提到,他朋友在面试的过程中说,自己的工作就是把用户操作信息存到MySQL里,因为数据量超大(5000万条左右),需要每天定时生成3张表,然后将数据取模分别存到这三张表…

js逆向笔记

Cookie 和 Session: 服务器和客户端的交互仅限于请求/响应过程,结束之后便断开,在下一次请求时,服务器会认为新的客户端。 为了维护他们之间的链接,让服务器知道这是前一个用户发送的请求,必须在一个地方保存客户端的信息。 Cookie:通过在 客户端 记录的信息确定用户的身…

修改博客园主题

修改博客园主题 参考模板为:本博客皮肤 - 张贺贺呀 - 博客园 1.账号设置在账号设置中 1.选择博客皮肤为SimpleMemory,因为博客皮肤的修改是基于该皮肤 2.申请JS权限,一般申请后1-2h会通过 3.将参考模板中的代码分别粘贴到侧边栏、CSS等对应框中 2.个性化设置 完全照搬博主代…

【Java】若以框架(ruoyi-master)——10.BaseController源码了解

BaseController通用方法 Web层的通用数据。所有接口继承此方法。里面有一些各个接口会用到的通用方法。比如分页、返回消息、设置或获取一些登录信息,某些操作的时候,将日志写入或返回。方法归类 方法名称 说明请求参数预处理 initBinder() 将前台传递过来的日期格式的字符串…

GA/T1400视图库平台EasyCVR视频设备轨迹回放平台智慧园区视频监控方案

信息技术的持续进步和城市化进程的加快,使得作为城市发展关键组成部分的智慧园区对监控安全和智能管理的需求日益增长。GA/T1400视图库平台EasyCVR推出的智慧园区视频监控方案正是为了满足这一需求而设计的。该方案整合了高清视频监控、智能分析和远程管理等尖端技术,为智慧园…

百万商品查询,性能提升了10倍

前言 最近在我的知识星球中,有个小伙伴问了这样一个问题:百万商品分页查询接口,如何保证接口的性能? 这就需要对该分页查询接口做优化了。 这篇文章从9个方面跟大家一起聊聊分页查询接口优化的一些小技巧,希望对你会有所帮助。1 增加默认条件 对于分页查询接口,如果没有特…