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

相关文章

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

MyBatis ParameterHandler的具体使用

《MyBatisParameterHandler的具体使用》本文主要介绍了MyBatisParameterHandler的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、概述二、源码1 关键属性2.setParameters3.TypeHandler1.TypeHa