Intel SGX学习笔记(1):虚拟机Ubuntu20.04配置Intel SGX环境

article/2025/9/21 20:50:29

写在前面

本教程仅仅适用虚拟机下的Ubuntu20.04配置Intel SGX环境,若是双系统下的Ubuntu系统,请看最后的参考连接。若是window10自带的ubuntu,也就是从微软商店下载的ubuntu系统,这个我到make preparation指令就开始疯狂报错:make:***,用chatGPT,回答是linux内核头未安装或者目录出现问题,但是最后换内核什么乱七八糟的十分麻烦,最后也是走进死胡同了,所以改在虚拟机下配置环境。

一、准备工作

1、下载VMware Workstation Pro虚拟机

2、下载Ubuntu20.04镜像文件,并配置好Ubuntu虚拟机

注意:
(1)虚拟机环境下配置和使用SGX,与windows开机进入的BIOS开启的SGX支持硬件服务无关,虚拟机使用SGX是通过模拟模式运行,所以你进入BIOS开启的SGX硬件支持与虚拟机运行无关的,不放心的话可以打开,每个电脑打开方式不一样,自行百度打开。
(2)第一步和第二步,自行参考CSDN博主的文章,进行傻瓜式安装,这里不再赘述,只提供相关下载链接

Ubuntu20.04镜像文件国内下载地址(下载速度很快):https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/20.04/
虚拟机配置Ubuntu20.04教程:https://zhuanlan.zhihu.com/p/569274366

二、Intel SGX环境配置(安装过程需要终端和文件夹两个界面搭配操作)

在这里插入图片描述

注意:安装顺序要严格按照下面的顺序安装,否则会出问题

安装顺序:Intel SGX Driver(驱动)——>Intel SDK——>Intel PSW

1、安装以后会用到的包(gcc和make)

(1)输入命令:sudo apt install gcc

回车运行,会提示你一个(Y or N)申请内存空间,就输入Y进行安装即可

(2)输入命令:sudo apt install make

回车运行,会提示你一个(Y or N)申请内存空间,就输入Y进行安装即可

注意:安装的时候出现的没有的包,就按着提示的命令进行Ctrl-C or V,进行安装即可,当时我出现过什么包缺失,你就输入这个命令:sudo apt-get update

2、安装Intel Driver(驱动)

(1)下载三个需要的bin文件(一般浏览器不支持bin文件下载,这里就进去看看就行了,我们用下面的终端命令wget命令进行下载)

进入网站:https://download.01.org/intel-sgx/sgx-linux/2.13/distro/ubuntu18.04-server/
在这里插入图片描述

(2)在终端用linux的wget指令进行下载依次输入:

wget https://download.01.org/intel-sgx/sgx-linux/2.13/distro/ubuntu18.04-server/sgx_linux_x64_driver_1.41.bin
wget https://download.01.org/intel-sgx/sgx-linux/2.13/distro/ubuntu18.04-server/sgx_linux_x64_driver_2.11.0_0373e2e.bin
wget https://download.01.org/intel-sgx/sgx-linux/2.13/distro/ubuntu18.04-server/sgx_linux_x64_sdk_2.13.100.4.bin

下载完毕后,在当前目录下会发现3个bin文件产生

在这里插入图片描述
或者通过终端输入:dir 指令也可以看见这三个文件
在这里插入图片描述
然后赋予 sgx_linux_x64_driver_2.11.0_0373e2e.bin 这个bin文件最高权限

终端输入:sudo chmod 777 sgx_linux_x64_driver_2.11.0_0373e2e.bin

运行文件:sudo ./sgx_linux_x64_driver_2.11.0_0373e2e.bin

等待安装————运行完毕————Intel SGX Driver 安装完毕

3、安装Intel SDK

(1)准备工作:安装编译Intel SDK和Intel PSW的包

终端输入(SDK):sudo apt-get install build-essential ocaml ocamlbuild automake autoconf libtool wget python libssl-dev git cmake perl

终端输入(PSW):sudo apt-get install libssl-dev libcurl4-openssl-dev protobuf-compiler libprotobuf-dev debhelper cmake reprepro unzip

注意:上面两条命令任意位置运行都行,系统有默认的安装路径

(2)获取 linux-sgx 文件夹和 SGXDataCenterAttestationPrimitives 文件夹(从这里开始就要保证良好的网络速度,越快越好,否则容易git失败)

终端输入:git clone https://github.com/intel/linux-sgx.git

终端输入:https://github.com/intel/SGXDataCenterAttestationPrimitives/

下载完毕后当前目录下会有两个文件夹
在这里插入图片描述

(3)进入SGXDataCenterAttestationPrimitives 文件夹,把QuoteVerificationQuoteGeneration两个文件夹复制到linux文件夹下面的external里面

注意:
若是提示无权限,输入命令:chmod 777 文件夹名称 (赋予最高权限)
若是提示需要root用户权限,那就输入命令:su root 进入root用户进行操作
进入root用户密码失效问题,或者提示su认证失败问题:输入命令:sudo passwd root 进行重新设置密码

(4)进入linux-sgx文件夹下,进行preparation

终端输入:cd linux-sgx

终端输入:make preparation

**注意:这里十分关键,如果你进行到这步了,一定要慢慢来,这里由于网路原因会出现大量的网络中断和错误,所以尽量在网络环境特别好的情况下进行配置环境,比如:未注册,子模块未检测,路径不正确,拒绝连接等等等等等。这些错误都归结为网络问题!!!!!!在终端界面按 Ctrl-C 进行强制停止,再重新输入make preparation**指令,重新获取连接

如果这里成功过去了,那后面几乎没什么问题了,恭喜你!!!!!!!

(5)复制 as、ld、objdump三个文件到本地的bin文件夹内部

终端输入:cd linux-sgx
终端输入:cd external
终端输入:cd toolset
终端输入:cd ubuntu20.04
终端输入:dir
在这里插入图片描述
通过ubuntu的我的电脑视图也可以看到
在这里插入图片描述
开始复制文件

终端输入:sudo cp as /usr/local/bin
终端输入:sudo cp ld /usr/local/bin
终端输入:sudo cp objdump /usr/local/bin
复制完毕后输入终端输入:which as ld objdump ,若如图显示,则复制成功

在这里插入图片描述

(6)进行SDK包的编译

终端输入:cd 退回到主目录
终端输入:cd linux-sgx 进入linux-sgx文件夹
终端输入:make sdk 开始进行对SDK包的编译,前面的准备工作已经安装make指令包了,就是为了这里编译使用的

注意:这里也可能会出现很多问题,比如:#include<sgx_.h>头文件下面出现红色波浪号、make:***、makefile:**等等等等,那就说明你前面的make preparation出现错误,所以只能将linux-sgx的文件夹删除,从3、(3)开始,复制文件夹后在进行make preparation的操作,保证网络状态良好,这里出错就回退重新做,要有耐心

如果顺利进行编译,那就等着它自己运行,这里大约会运行个5分钟,运行完毕后在编译sdk_install_pkg

终端输入:make sdk_install_pkg

若上面 make sdk 没问题,这里应该不会出现问题,大约自动运行5分钟后完成SDK包的编译工作,在linux-sgx/linux/installer/bin的目录下会生成一个bin文件:sgx_linux_x64_sdk_2.19.100.3.bin
在这里插入图片描述

(7)进行SDK包的安装

安装build-essential python,此命令任意位置输入都行,默认安装在系统位置
终端输入:sudo apt-get install build-essential python
终端输入:cd linux
终端输入:cd installer
终端输入:cd bin
这样就到了刚才生成的bin文件的目录下,运行那个bin文件
终端输入:./sgx_linux_x64_sdk_2.19.100.3.bin

注意:
这里会询问是否安装在当前文件夹的时候,选择“no”,然后输入/opt/intel/, 即将SGX SDK安装在/opt/intel/文件夹下。
安装后会显示安装路径,记下来
在以后编译sgx程序的时候都要先运行这个指令source /opt/intel/sgxsdk/environment,就是要让开发环境生效,才能在Intel SGX的环境下进行运行

终端输入:source /opt/intel/sgxsdk/environment

SGX SDK安装完毕

4、安装Intel PSW

终端输入:cd 回退到主目录
终端输入:echo ‘deb [arch=amd64] https://download.01.org/intel-sgx/sgx_repo/ubuntu bionic main’ | sudo tee /etc/apt/sources.list.d/intel-sgx.list
终端输入:wget -qO - https://download.01.org/intel-sgx/sgx_repo/ubuntu/intel-sgx-deb.key | sudo apt-key add -
出现 OK 则成功

注意:这里可能会出现一个错误 ”‘deb“........
解决方法:我的电脑视图进入到这里

在这里插入图片描述
打开这个文件夹,删除代码前面的单引号和双引号保存退出,若是碰到没有权限,则终端使用chmod 777 文件夹 修改权限
然后再运行此命令即可:echo ‘deb [arch=amd64] https://download.01.org/intel-sgx/sgx_repo/ubuntu bionic main’ | sudo tee /etc/apt/sources.list.d/intel-sgx.list

更新系统软件包目录

终端输入:sudo apt-get update

结束后进行SGX PSW 的四个服务的安装,分别是launch、EPID-based attestation、Algorithm agnostic attestation和我也不知道是干啥的

终端输入:sudo apt-get install libsgx-launch libsgx-urts
终端输入:sudo apt-get install libsgx-epid libsgx-urts
终端输入:sudo apt-get install libsgx-quote-ex libsgx-urts
终端输入:sudo apt-get install libsgx-dcap-ql

注意:这里可能会出现错误:…包,安装依赖于…包,但是这个…包不能安装,建议:…包
解决方法:3、下面的(1)终端输入(PSW):sudo apt-get install libssl-dev libcurl4-openssl-dev protobuf-compiler libprotobuf-dev debhelper cmake reprepro unzip 这里安装编译PSW包出现问题,重新输入命令安装,否则从最初配置好虚拟机开始

若上面的4个服务安装成功,可以在/opt/intel/目录下找到一个sgx-asem-services目录,里面就是刚才安装的PSW的服务。

三、Intel SGX开发环境配置检测

通过官方的检测文件,类似于其他语言的 Hello world

(1)进入安装目录/opt/intel/sgxsdk/SampleCode/SampleEnclave

终端输入:cd 回到主目录
终端输入:cd .. 回退到主目录上面的目录
终端输入:cd .. 再回退
终端输入:cd opt
终端输入:cd intel
终端输入:cd sgxsdk
终端输入:cd SampleCode
终端输入:cd SampleEnclave
若出现什么权限不够问题,就 chmod 777 文件夹 命令或者 su root 进入到root 用户下

(2)source一下开发环境

终端输入:source /opt/intel/sgxsdk/environment
终端输入:make SGX_MODE=SIM 这个编译方式是进入虚拟机的SGX模拟模式,默认是硬件模式SGX_MODE=HW,因为是在虚拟机里面运行SGX,所以要进入模拟模式。

在这里插入图片描述
如图所示就变成这样了,simulation mode(模拟模式)

终端输入:./app

在这里插入图片描述
如图显示(Hello world!!!是我自己后面加的):恭喜你,congratulation!!!!!!!!

写在最后

由于网络原因和软件安装包的问题导致配置过程问题重重,翻来覆去换Ubuntu系统版本,反反复复的输入相同的命令,不断请求git连接,不太清楚其他版本的Ubuntu系统能不能适配,出现许多错误我就重头开始,查到问题查到死胡同就换系统版本,git下来的官方linux-sgx文件夹里面的external/toolset目录下的系统文件夹是Ubuntu20.04,所以尽量是用20.04版本吧,要坚持配下去,肯定能配出来的。我连玩带卷,大概配了2周吧,比较慢,欢迎大家互相交流,哈哈哈哈哈哈哈哈哈!

参考连接

https://blog.csdn.net/weixin_40893822/article/details/114005699


http://chatgpt.dhexx.cn/article/2KI89u73.shtml

相关文章

Windows10下使用Intel SGX功能(四):SGX技术分析

参考文献 Overview of Intel SGX - Part 1, SGX InternalsDeveloper Guide: Intel Software Guard Extensions (Intel SGX)&#xff08;最新版&#xff09;Overview of Intel SGX - Part 2, SGX Externals SGX 介绍 SGX 发展情况 SGX技术目前已经发展到SGX2。比如安全证明功…

可信启动、安全启动:SGX、TrustZone、SecureEnclave

最近在公众号上看到了一篇文章&#xff0c;算是又丰富了自己的安全方面的眼界。 最近看公众号取代了小视频、知乎这些东西。以前是真的不喜欢碎片化的东西&#xff0c;看什么学什么总是要找到书籍。但是这样的做法太过的极端&#xff0c;因为有时候有些事是两面性的。比如像安全…

Intel SGX 技术初探

最近公司需要开发一款使用intel 的移动终端&#xff0c;需要用到SGX技术&#xff0c;特此将调研和整理的相关资料放置于下&#xff0c;欢迎交流。 一、SGX技术背景 1.1 SGX技术定义 SGX全称Intel Software Guard Extensions&#xff0c;顾名思义&#xff0c;其是对因特尔体系…

Intel SGX入门(二)——SGX应用篇

大概了解SGX以后&#xff0c;SGX应用有哪些&#xff1f; 第一种&#xff0c;SGX应用于服务器端&#xff0c;云端 这一类个人觉得很需要结合代码、它们所描述的行业需求和以前的行业产品去考虑问题&#xff0c;毕竟是应用&#xff0c;不然可能体会不到精髓。 我对SGX应用的理解…

Intel SGX Explained

文章目录 SGX新增Abstract第一章 概括1.1 SGX简介1.2 大纲和问题发现 第二章 Intel体系架构背景知识2.1 Overview2.2 计算模型2.3 软件权限级别2.4 地址空间2.5 地址转换2.5.1 地址转换概念2.5.2 地址转换和虚拟化2.5.3 页表属性 2.6 执行上下文2.7 段寄存器2.8 特权级别转换2.…

sgx使用记录(Windows开发环境搭建以及sgx的简单介绍)1

sgx使用记录 相关代码仓库 ##sgx-sdk https://github.com/apache/incubator-teaclave-sgx-sdk.git##Teaclave&#xff1a;通用安全计算平台 https://github.com/apache/incubator-teaclave检测sgx运行环境是否支持 ##或使用cpuid命令 cpuid |grep -i sgx##或使用脚本测试 下…

Windows10下使用Intel SGX功能(一):环境搭建

文章目录 参考文献系统要求一、安装Open Enclave SDK 环境&#xff08;一&#xff09;什么是Open Enclave SDK&#xff08;二&#xff09;启动SGX功能方法一&#xff1a; BIOS启动方法二&#xff1a;软件方式启动 &#xff08;三&#xff09;安装必要环境&#xff08;1&#xf…

Intel SGX 功能如何开启

Intel SGX 功能如何开启 我本身是 Windows10 系统&#xff0c; BIOS 是 ASUS 的&#xff0c;在想装 Ubuntu 双系统的时候&#xff0c;在启动 Ubuntu 安装 ISO 的时候提示说电脑的 SGX 没有开启&#xff0c;安装失败&#xff0c;安装界面都没有进去。 之后搜了下如何开启 SGX&a…

SGX的内部组件概述

导语&#xff1a;SGX是Intel开发的新的处理器技术&#xff0c;可以在计算平台上提供一个可信的空间&#xff0c;保障用户关键代码和数据的机密性和完整性。SGX全称Intel Software Guard Extensions&#xff0c;顾名思义&#xff0c;其是对因特尔体系&#xff08;IA&#xff09;…

SGX入门

如何设计SGX程序&#xff1a; SGX分为可信部分和不可信部分&#xff0c;可信部分由enclave组成&#xff08;一个应用程序可以拥有一个或多个enclave)&#xff0c;enclave存储在加密的内存中&#xff0c;受SGX保护&#xff0c;enclave一旦被建立就不能更改&#xff0c;所以通常…

SGX Enable

根据INTEl的官方建议&#xff0c; 目前的电脑主板在BIOS设置上只保留了Disabled和Software Controlled来开启和关闭SGX扩展 使用Software Controlled开关的原因官方文档有阐述&#xff0c;如下&#xff1a; 开启SGX扩展&#xff0c;首先需要满足以下要求&#xff1a; CPU具有…

Intel SGX技术详细解释(非常棒)

http://www.jos.org.cn/html/2018/9/5594.htm#b18 随着信息技术的迅速发展与广泛应用, 人类社会已经进入了一个崭新的互联网时代.一方面, 人们享受着互联网科技带来的便利; 另一方面, 由网络和信息系统构成的网络空间也面临着日益严峻的安全问题.信任是网络空间中安全交互的基…

SGX问答

0 前言 有些问题比较常见&#xff0c;在这里直接将问答内容贴出来&#xff0c;方便大家搜索。有空再重新组织文字。 &#xff08;我会避免泄露私人信息&#xff09; 1 内存地址翻译全部交给os&#xff0c;那中间经过cache也是全部交给os是嘛&#xff1f;这个cache这部分&…

小谈Intel SGX

目录 Intel SGX简介 背景 为什么要Intel SGX&#xff1f; Intel SGX尚处于学术讨论 Intel SGX和可信启动什么关系&#xff1f; 开发者眼中SGX长什么样子&#xff1f; SGX访问控制是什么&#xff1f; MEE与SGX EPC内存加密 CPU里面SGX长什么样子&#xff1f; 有Enclav…

SGX技术与SGX攻击

2013年, Intel推出SGX(software guard extensions)指令集扩展, 旨在以硬件安全为强制性保障, 不依赖于固件和软件的安全状态, 提供用户空间的可信执行环境, 通过一组新的指令集扩展与访问控制机制, 实现不同程序间的隔离运行, 保障用户关键代码和数据的机密性与完整性不受恶意软…

Intel SGX初步学习理解笔记(持续更新)

一些概念 SGX&#xff08;Software Guard eXtensions&#xff09;软件保护扩展&#xff1a;是一组CPU指令扩展&#xff0c;能够创造出一个可信执行环境来保护代码和数据&#xff0c;即使使用root 权限也无法访问。通过这个硬件设施&#xff0c;应用程序可以隔离代码和数据来达…

Intel 的 SGX 技术小知识

1.SGX 概述 Intel SGX (Software Guard Extensions) 是一种针对特定应用程序的安全增强技术。它允许应用程序在处理机上创建受保护的执行环境&#xff0c;这个执行环境被称为“enclave”。这个 enclave 是一个被硬件隔离的内存区域&#xff0c;只有在安全条件下才可以访问。这…

新手学编程必会的100个代码

前言 我记得刚开始接触编程的时候&#xff0c;觉得太难了。 也很好奇&#xff0c;写代码的那些人也太厉害了吧&#xff1f;全是英文的&#xff0c;他们的英文水平一定很好吧&#xff1f; 他们是怎么记住这么多代码格式的&#xff1f;而且错了一个标点符号&#xff0c;整个程…

适用于编程开发自学的学习网站

今天为大家分享几个编程开发自学的学习网站 1.C语言网 该网站有很多C语言相关的教程、资源、博客和练手习题&#xff0c;同时也有很多题库和比赛&#xff0c;比较实用。 网址&#xff1a;https://www.dotcpp.com/ 2.cppreference cppreference是一个免费网站&#xff0c;上面…

初学者必会的100个编程代码

这是本文的目录 前言1、for循环中的else条件2、数字求和3、随机数生成4、将列表中的所有元素作为参数传递给函数5、获取列表的所有中间元素6、使用一行代码赋值多个变量7、Python清空列表8、通过Enum枚举同一标签或一系列常量的集合9、重复字符串10、计算每个月天数11、输出指定…