Linux ubuntu20.04 安装使用 Intel sgx

2023-11-30 02:04

本文主要是介绍Linux ubuntu20.04 安装使用 Intel sgx,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、简介
  • 二、安装Intel SGX Software Stack
    • 2.1 安装Intel SGX driver
    • 2.2 Build the Intel SGX SDK and Inte SGX PSW Package
    • 2.3 Build the Intel SGX SDK and Intel SGX SDK Installer
    • 2.4 Install the Intel(R) SGX SDK
    • 2.5 Build the Intel SGX PSW and Intel SGX PSW Installer
    • 2.6 Install the Intel SGX PSW
  • 三、Test the Intel SGX SDK Package with the Code Samples
  • 参考资料

前言

开发平台:

# lscpu
Model name:                         Intel(R) Core(TM) i3-9100 CPU @ 3.60GHz

操作系统版本:

# cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.4 LTS (Focal Fossa)"
# uname -r
5.15.0-89-generic

我这台处理器默认没有打开Intel sgx硬件功能,因此需要在BIOS中启动Intel sgx硬件功能。
启动后输出如下:

# cpuid | grep -i sgxSGX: Software Guard Extensions supported = true......SGX1 supported                         = trueSGX2 supported                         = false

查看内核启动日志:

# dmesg | grep -i sgx
[    0.398363] sgx: EPC section 0x80200000-0x85f7ffff

或者使用github项目上查看是否支持SGX:https://github.com/ayeks/SGX-hardware/

输出如下:

root@qax-TianYi510S-07ICB:/home/qax/test/SGX-hardware# ./test-sgx
Start test-sgx
......
Supports SGX
SGX1 leaf instructions (SGX1): 1

参考文章:https://github.com/intel/linux-sgx

一、简介

Intel Software Guard Extensions (Intel SGX) 是一项由英特尔提供的技术,旨在保护应用程序开发人员选择的代码和数据免受泄露或修改。

Linux Intel SGX 软件栈由 IntelSGX 驱动程序、Intel SGX SDK 和 Intel SGX 平台软件 (PSW) 组成。

Intel SGX 驱动程序托管在 linux-sgx-driver 项目中。
Intel SGX SDK 和 Intel SGX PSW 托管在 linux-sgx 项目中。

自从 Linux 内核版本 5.11 发布以来,主线 Linux 内核已经内置了 Intel SGX 支持。内核内置的 Intel SGX 驱动程序需要平台支持并配置为灵活启动控制(flexible launch control - FLC)。尽可能使用带有 Intel SGX 支持的主线内核。

对于特殊用例,还有两个其他的内核空间选项可供选择:

(1)如果您的发行版内核版本早于 5.11 或不支持内核内置的 Intel SGX,您可以使用 Intel SGX DCAP 驱动程序作为临时解决方案,然后过渡到 5.11 或更高版本的内核。它提供了接近主线内核的接口,也需要平台支持并配置为 FLC。

(2)如果您需要在不支持 FLC 的平台上使用 Intel SGX,Intel SGX for Linux OS 驱动程序项目提供了一个非内核驱动程序(out-of-tree driver)。该驱动程序用于支持在仅支持传统启动控制的平台上运行 Intel SGX enclave。它也可以安装在配置了 FLC 的平台上,但这些平台只能加载符合传统启动控制策略的生产 enclave。

注意:尽管Intel SGX SDK和平台软件与所有这些驱动程序兼容,但传统的非FLC驱动程序和Intel SGX DCAP驱动程序仅针对关键的安全修复进行更新。由于 out-of-tree 实现的限制,主线内核中实现的新特性或功能无法移植到传统的非FLC驱动程序或Intel SGX DCAP驱动程序。

二、安装Intel SGX Software Stack

英特尔SGX SDK Linux操作系统软件堆栈由 the driver, the SDK, and the PW(platform software) 组成。

2.1 安装Intel SGX driver

Linux SGX driver为SGX环境运行必要驱动。

由于我这里的内核版本是5.15,已经Support for Intel SGX,所以不需要安装驱动。
如果内核版本低于5.11,请参考 the out-of-tree driver 进行驱动安装: linux-sgx-driver 。

2.2 Build the Intel SGX SDK and Inte SGX PSW Package

参考 linux-sgx

(1)使用以下命令安装构建 Intel SGX SDK 所需的工具:

$ sudo apt-get install build-essential ocaml ocamlbuild automake autoconf libtool wget python-is-python3 libssl-dev git cmake perl

(2)使用以下命令安装所需的其他工具和最新的Intel SGX SDK安装程序,以构建IntelSGX PSW:

$ sudo apt-get install libssl-dev libcurl4-openssl-dev protobuf-compiler libprotobuf-dev debhelper cmake reprepro unzip pkgconf libboost-dev libboost-system-dev libboost-thread-dev lsb-release libsystemd0

(3)下载源代码并准备子模块和预构建的二进制文件:

git clone https://github.com/intel/linux-sgx.git
cd linux-sgx && make preparation

上面的make准备将触发脚本download_prebuild.sh来下载预构建的二进制文件。

将与当前操作系统分发对应的 the mitigation tools 从external/toolset/{current_distr}复制到/usr/local/bin,并确保它们具有执行权限:

sudo cp external/toolset/{current_distr}/* /usr/local/bin
# ls external/toolset/
anolis8.6  centos8  centos8.3  debian10  rhel8.4  rhel8.6  sles15.4  ubuntu18.04  ubuntu20.04

对于我的系统即:

linux-sgx# sudo cp external/toolset/ubuntu20.04/* /usr/local/bin
linux-sgx# which ar as ld objcopy objdump ranlib
/usr/local/bin/ar
/usr/local/bin/as
/usr/local/bin/ld
/usr/local/bin/objcopy
/usr/local/bin/objdump
/usr/local/bin/ranlib

注意:即使您之前将以前的 mitigation tools 复制到/usr/local/bin,也必须执行上述操作。它确保在以后的构建中使用更新的 mitigation tools 。

2.3 Build the Intel SGX SDK and Intel SGX SDK Installer

要使用默认配置构建 Intel® SGX SDK ,请输入以下命令:

make sdk
or
make sdk DEBUG=1  //(with debug information)

要构建 Intel® SGX SDK安装程序,请输入以下命令:

make sdk_install_pkg
or
make sdk_install_pkg DEBUG=1  //(with debug information kept in the tools and libraries)

可以在linux/installer/bin/下找到生成的 Intel SGX SDK 安装程序sgx_linux_x64_sdk_${version}.bin,其中${version}表示版本号。

2.4 Install the Intel® SGX SDK

这步要先做,不让在构建Intel SGX PSW时会报错。
请参看:https://github.com/intel/linux-sgx/issues/466

Generated sdk installer: ./linux/installer/bin/sgx_linux_x64_sdk_2.22.100.3.bin
/linux-sgx/linux/installer/bin# ./sgx_linux_x64_sdk_2.22.100.3.binDo you want to install in current directory? [yes/no] : noPlease input the directory which you want to install in : /opt/intel/......Installation is successful! The SDK package can be found in /opt/intel/sgxsdkPlease set the environment variables with below command:source /opt/intel/sgxsdk/environment

注意:在编译代码之前,需要设置所需的环境变量。要执行此操作,请运行:

source /opt/intel/sgxsdk/environment

步骤总结:

make sdk
make sdk_install_pkg
/sgx_linux_x64_sdk_2.22.100.3.bin //(选择安装在/opt/intel/目录下)
source /opt/intel/sgxsdk/environment

2.5 Build the Intel SGX PSW and Intel SGX PSW Installer

要使用默认配置构建Intel SGX PSW,请输入以下命令:

linux-sgx# make psw
or
make psw DEBUG=1 (with debug information)

可以在build/linux目录中找到生成的工具和库。注意:也可以转到psw文件夹,并使用make命令仅构建IntelSGX psw组件。

要自行构建这些飞地(无需签名),首先需要从Intel(R)SGX SDK安装最新的 Intel SGX SDK ,然后使用默认配置构建PSW。之后,您可以使用相应文件夹中的make命令来构建每个Architecture Enclave:

 $ cd psw/ae/le$ make

要构建 Intel SGX PSW 安装程序,请输入以下命令:

make deb_psw_pkg

可以在下面找到生成的相应 Intel SGX PSW 安装程序:

linux/installer/deb/libsgx-urts, linux/installer/deb/libsgx-enclave-common, linux/installer/deb/libsgx-uae-service, linux/installer/deb/libsgx-epid, linux/installer/deb/libsgx-launch, linux/installer/deb/libsgx-quote-ex and linux/installer/deb/sgx-aesm-service

2.6 Install the Intel SGX PSW

SGX PSW提供3项服务:启动、基于EPID的认证和算法无关认证。从2.8版本开始,SGX PSW被拆分为更小的软件包,用户可以选择安装哪些功能和服务。有两种方法可以安装所需的软件包:使用单个软件包或使用构建系统生成的本地repo。建议使用本地repo,因为系统将自动解决依赖关系。目前,我们支持基于.deb和.rpm的repos。

/linux-sgx# apt-get install libsgx-launch libsgx-urts
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package libsgx-launch
E: Unable to locate package libsgx-urts

出现以上问题。

在安装前,首先执行以下三条命令:

# 将以下库添加到源中
echo 'deb [arch=amd64] https://download.01.org/intel-sgx/sgx_repo/ubuntu focal main' | sudo tee /etc/apt/sources.list.d/intel-sgx.list
# 获取 Debian 存储库公钥并将其添加到 apt 用于验证软件包的受信任密钥列表中
wget -qO - https://download.01.org/intel-sgx/sgx_repo/ubuntu/intel-sgx-deb.key | sudo apt-key add
# 更新apt
sudo apt-get update

Using the local repo(recommended):
(1)launch service

apt-get install libsgx-launch libsgx-urts

(2)EPID-based attestation service

apt-get install libsgx-epid libsgx-urts

(3)algorithm agnostic attestation service

apt-get install libsgx-quote-ex libsgx-urts

(4)DCAP ECDSA-based service

apt-get install libsgx-dcap-ql

三、Test the Intel SGX SDK Package with the Code Samples

在模拟模式下编译并运行每个代码示例,以确保包运行良好:

$ cd ${sgx-sdk-install-path}/SampleCode/LocalAttestation
$ make SGX_MODE=SIM
The project has been built in simulation debug mode.$ cd bin
$ ./app
/linux-sgx/SampleCode/LocalAttestation/bin# ./app
succeed to load enclaves.
succeed to establish secure channel.
Succeed to exchange secure message...
Succeed to close Session...

参考资料

https://blog.csdn.net/cacique111/article/details/133246169
https://blog.csdn.net/shuizhongmose/article/details/131290471
https://blog.csdn.net/weixin_43292691/article/details/119917066
https://blog.csdn.net/qq_42557044/article/details/127259835
https://blog.csdn.net/hhh078/article/details/132273182

这篇关于Linux ubuntu20.04 安装使用 Intel sgx的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/435175

相关文章

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u

linux解压缩 xxx.jar文件进行内部操作过程

《linux解压缩xxx.jar文件进行内部操作过程》:本文主要介绍linux解压缩xxx.jar文件进行内部操作,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、解压文件二、压缩文件总结一、解压文件1、把 xxx.jar 文件放在服务器上,并进入当前目录#

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

SpringBoot线程池配置使用示例详解

《SpringBoot线程池配置使用示例详解》SpringBoot集成@Async注解,支持线程池参数配置(核心数、队列容量、拒绝策略等)及生命周期管理,结合监控与任务装饰器,提升异步处理效率与系统... 目录一、核心特性二、添加依赖三、参数详解四、配置线程池五、应用实践代码说明拒绝策略(Rejected

C++ Log4cpp跨平台日志库的使用小结

《C++Log4cpp跨平台日志库的使用小结》Log4cpp是c++类库,本文详细介绍了C++日志库log4cpp的使用方法,及设置日志输出格式和优先级,具有一定的参考价值,感兴趣的可以了解一下... 目录一、介绍1. log4cpp的日志方式2.设置日志输出的格式3. 设置日志的输出优先级二、Window

Ubuntu如何分配​​未使用的空间

《Ubuntu如何分配​​未使用的空间》Ubuntu磁盘空间不足,实际未分配空间8.2G因LVM卷组名称格式差异(双破折号误写)导致无法扩展,确认正确卷组名后,使用lvextend和resize2fs... 目录1:原因2:操作3:报错5:解决问题:确认卷组名称​6:再次操作7:验证扩展是否成功8:问题已解