【SGX系列教程】(一)Intel-SGX SDK在ubuntu22.04下安装全流程

news2024/12/25 12:16:15

文章目录

  • 一.概述
    • 1.1 SGX三大组件
    • 1.2 SGXDataCenterAttestationPrimitives
  • 二.安装流程
    • 2.1 检查服务器是否支持SGX
    • 2.2 sgx硬件/软件开启方法
    • 2.3 sgx dirver驱动安装;
      • 2.3.1 linux-sgx-driver驱动程序
      • 2.3.2 Intel SGX Support in the Linux Kernel(linux内核支持SGX)
      • 2.3.3 Platform Uses Legacy Launch
      • 2.3.4 Launch Control
      • 2.3.5 三种驱动安装方式(基本都支持第一种:linux内核支持,直接跳过驱动安装部分,可不用看了)
    • 2.4 sgx sdk安装
      • 2.4.1 准备阶段
      • 2.4.2 sdk安装
      • 2.4.3 测试sdk是否安装成功(注意模拟模式下不需要SGX PSW包)
    • 2.5 psw安装
      • 2.5.1 使用默认配置构建SGX PSW:
      • 2.5.2 在相应文件夹中使用make命令构建每个Architecture Enclave
      • 2.5.3 调用安装程序(执行sgx_linux_x64_psw_2.23.100.2.bin)
      • 2.5.4 命令行运行以下命令添加下载Intel sgx psw的下载路径(将以下库添加到源中):
      • 2.5.5 进入如下网址下载密钥intel-sgx-deb.key(获取 Debian 存储库公钥并将其添加到 apt 用于验证软件包的受信任密钥列表中):
      • 2.5.6 进入下载目录,通过如下命令添加进仓库:
      • 2.5.7 更新一下apt-get的列表:
      • 2.5.8 分别安装SGX PSW 提供的3个服务:
      • 2.5.9 demo测试psw是否安装成功
  • 三.启动或停止 aesmd 服务
  • 四.SampleCode分析
  • 参考文档

一.概述

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

1.1 SGX三大组件

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

  1. Intel® SGX Software Development Kit (SDK): 这个SDK帮助软件开发人员创建使用Intel SGX技术的应用程序。它提供了一组工具、库和文档,使开发人员能够在应用程序中利用SGX的安全功能,包括创建和管理SGX enclaves(安全容器)、进行加密操作和进行远程验证等。

  2. Intel® SGX Platform Software (PSW) for Linux* OS: 这个软件提供了在Linux操作系统上运行Intel SGX应用程序所需的软件模块。它包括驱动程序、库和运行时组件,为SGX应用程序提供了必要的运行环境和安全保护机制。PSW负责管理SGX enclaves的创建加载执行,并提供与硬件的接口交互,以实现SGX的安全功能

  3. Intel® SGX Data Center Attestation Primitives (DCAP) for Linux* OS: 这个软件提供了在数据中心环境中进行SGXIntel应用程序验证的软件模块。DCAP为应用程序提供了进行数据中心内的验证和信任建立所需的功能。它包括用于生成验证传输证明数据的API和工具,确保SGX enclaves的真实性和完整性,并帮助应用程序与远程系统进行安全交互。

  这些软件组件共同构成了Intel SGX技术的开发和运行环境。SDK提供了开发SGX应用程序所需的工具和资源,PSW为应用程序提供了在Linux操作系统上运行的基础设施,而DCAP为数据中心内的SGX应用程序提供了验证和信任建立的支持。这些组件协同工作,使开发人员能够利用Intel SGX的安全功能来保护和保障应用程序的安全性。

1.2 SGXDataCenterAttestationPrimitives

  SGXDataCenterAttestationPrimitives驱动程序专门针对支持Flexible Launch Control (FLC)和Intel AES New Instructions (AES-NI)的平台。FLC是一种安全特性,有助于保护SGX enclave启动过程的完整性,而AES-NI为加密操作提供了硬件加速
  该驱动程序为数据中心环境中的Intel SGX enclave提供了证明能力。它支持两种类型的证明:

  1. 基于椭圆曲线数字签名算法(ECDSA)的证明:ECDSA是一种广泛使用的公钥密码算法。它允许生成和验证数字签名,用于证明SGX enclave的真实性和完整性。

  2. 基于增强隐私识别(EPID)的证明:EPID是一种保护隐私的证明方案,允许远程方验证SGX enclave的完整性,同时不泄露被验证平台的身份。EPID-based的证明旨在提供强大的安全保证同时保持隐私。

  SGXDataCenterAttestationPrimitives项目提供了在Linux SGX软件栈中支持这些证明机制所需的组件和功能。它使在支持SGX的平台上运行的应用程序能够建立信任,并与远程系统或服务进行安全交互。

二.安装流程

   尽管官方文档给了较为详细的安装教程,但是由于官方文档是英文的,并且有太多琐碎的细节,对于新手小白并不友好。因此将本人亲自安装使用的全流程进行总结,并将持续进行源码分析,与大家共享;下面将按照以下顺序详细介绍Intel SGX SDK的安装、测试、使用的全流程,助力每一个小白能够轻松上手Intel SGX的使用开发,本文以ubuntu22.04系统为例。

  1. 检查服务器是否支持SGX;
  2. sgx硬件/软件开启;
  3. sgx dirver驱动安装;
  4. sgx sdk安装;
  5. sgx psw安装;
  6. demo测试;
  7. Sample源码分析;

2.1 检查服务器是否支持SGX

   由于SGX的使用需要Intel CPU的硬件支持,因此在安装SDK和测试使用之前,需要先检测当前CPU是否支持SGX功能,若支持则需要先开启CPU的SGX。

方法1:使用cpuid命令查看是否支持SGX:

cpuid --one-cpu | grep -i sgx

在这里插入图片描述

  • 如果输出为空,则表示不支持,可以使用simulation mode,但该模式不能用于发布版环境。
  • 如果输出中包含SGX_LC: SGX launch config supported = true,则支持DCAP(数据中心标记基元,即远程认证服务)功能。FLC 即 Flexible Launch Control。
  • 上述输出中SGX1 supported = true表示SGX已经开启。

方法2:使用代码test-sgx.c测试是否支持SGX:

  • 下载源码:

git clone https://github.com/ethernity-cloud/mvp-pox-node.git

  • 进入目录:

cd mvp-pox-node

  • 执行程序:

./utils/linux/test-sgx

如果输出下面类似的结果表示已经开启成功:
在这里插入图片描述
如果sgx 1 supported不为1,至少MaxEnclaveSize_64是大于0的。

2.2 sgx硬件/软件开启方法

首先检查BIOS是以UEFI模式启动的,不能以legacy模式启动,因为:

  • 在 Legacy 模式下启动的系统无法执行软件启用,因为该过程取决于 EFI 变量。
  • 可以通过在 UEFI 模式下启动 Linux Live CD,然后执行软件启用来启用 Legacy 模式系统。 英特尔 SGX 启用发生在平台级别,而不是操作系统级别。
  • EFI 文件系统,如果您的 Linux 系统以 UEFI 模式启动,则默认情况下应安装该文件系统。

方法1:BIOS 启动SGX:

不同的BIOS操作不同,示例如下:

  • BIOS下enable SGX:【System Configuration】 → BIOS/Platform Configuration (RBSU) → System Options → Processor Options → Intel Software Guard Extensions (SGX)】→ 启动。
  • 如果在BIOS中没有设置SGX的地方,且芯片是支持SGX的,可以升级BIOS版本或者找服务器售后了解情况。

方法2:软启动 SGX:

   如果SGX在BIOS中提示“软件控制”,则可以使用下面的软起动方法启动SGX。具体说明可以参考:无法在 BIOS 或通过软件应用程序启用英特尔® Software Guard Extensions(英特尔® SGX)
   这里通过一段C程序软启动系统SGX,非常简单!

  • 软启动代码参考: https://github.com/intel/sgx-software-enable
    在这里插入图片描述
  • 直接gcc编译源文件后并执行即可:

gcc sgx_enable.c -o sgx_enable
./sgx_enable

  • 执行之后重启设备,即可启动!!!

2.3 sgx dirver驱动安装;

2.3.1 linux-sgx-driver驱动程序

  linux-sgx-driver项目是Linux Intel SGX软件栈的另一个外部驱动程序,用于支持没有Flexible Launch Control (FLC)的平台上的增强隐私识别(EPID)基于证明,直到驱动程序上游过程完成为止。
  这个驱动程序可以用于支持早期的 SGX-capable 的CPU,这些CPU没有Flexible Launch Control (FLC)功能。然而,请注意该驱动程序的ABI与上游的SGX内核补丁不同。因此,将使用该驱动程序的软件迁移到未来支持SGX的内核可能需要额外的工作量。
  对于那些不支持FLC的平台,linux-sgx-driver项目提供了所需的驱动程序功能,以支持EPID基于证明的功能。EPID是一种隐私保护的证明方案,允许远程方验证SGX enclave的完整性,同时不泄露被验证平台的身份。
  这个驱动程序允许在不支持FLC的平台上进行SGX enclave的EPID证明。它提供了必要的组件和功能,使这些平台上的应用程序能够与远程系统或服务建立安全信任,并进行受保护的通信。
  与SGXDataCenterAttestationPrimitives项目类似,linux-sgx-driver项目也是一个临时解决方案,直到驱动程序被合并到官方Linux内核中。这些驱动程序为使用Intel SGX技术的应用程序提供了在非FLC平台上进行EPID证明的能力。

2.3.2 Intel SGX Support in the Linux Kernel(linux内核支持SGX)

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

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

  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驱动程序。

2.3.3 Platform Uses Legacy Launch

  传统启动(Legacy Launch)是指在平台配置中,需要由Intel签名的启动信封提供一个启动令牌。平台(可以是虚拟机或裸机平台)是否需要传统启动取决于两个因素

  • 平台硬件和配置:所有配置了Intel® SGX支持的平台都有能力支持传统启动;然而,只有支持Intel® SGX启动配置 – Launch Configuration(在CPUID[7].ECX[SGX_LC]中详细说明,其中SGX_LC位为第30位)并配置了Intel® SGX启动控制(在IA32_FEATURE_CONTROL MSR中的第17位指定,由BIOS配置)的平台才能在不使用传统启动的情况下运行。详细信息请参阅Intel®软件开发手册。

  • Linux内核中的Intel® SGX支持:可以通过对内核打补丁或安装驱动程序来在Linux内核中支持Intel® SGX。此外,目前有两个支持的Intel® SGX驱动程序。因此,有三种选项来配置Intel® SGX启动平台:

  1. 内核驱动程序:内核已经打了补丁以支持Intel® SGX。这只能在能够支持Intel® SGX启动配置并启用了该功能的平台上运行。

  2. DCAP驱动程序:DCAP驱动程序是Linux内核模式驱动程序,模拟了内核驱动程序的解决方案。与内核驱动程序类似,DCAP驱动程序只能在能够支持Intel® SGX启动配置并启用了该功能的平台上运行。

  3. Out-of-Tree驱动程序:Out-of-Tree驱动程序的命名有些不准确,因为DCAP驱动程序也是提供的Out-of-Tree驱动程序;然而,该驱动程序可以在所有平台上运行,无论是否支持或启用了Intel® SGX启动配置。因此,它支持传统启动。它有一个接口,在初始化一个信封时需要提供一个启动令牌。有关Intel® SGX启动令牌的更多信息,请参阅Intel®软件开发手册。

2.3.4 Launch Control

  为了配置运行Intel SGX Enclaves的平台,了解Launch Control是非常重要的,它是控制和限制Intel SGX enclaves启动的方法。Launch Control为应用程序提供令牌,允许它们启动enclaves。Launch Control有两种特征配置方式:

  1. Flexible Launch Control:支持Intel SGX Launch Control的平台,包括虚拟机,可以通过内核模式驱动程序配置为特定的enclave签名者。在许多情况下,驱动程序会为每个加载的enclave动态重新配置launch control,使enclave无需有效的Launch Token即可运行(有关Launch Token的更多信息,请参阅Intel® 64和IA-32 Architectures Software Developer Manuals)。

  2. Legacy Launch Control:不支持Intel SGX Launch Control或未通过BIOS配置为Flexible Launch Control的平台仍然可以使用传统(Legacy) Launch Control加载enclave。在这种模式下,需要使用Intel签名的Launch Enclave为驱动程序提供Launch Token以加载enclave。此外,必须将enclave所有者的MRSIGNER(所有者公共签名密钥的哈希值)添加到Intel的Launch Policy List中,以在release模式下运行enclave(有关Legacy Launch Control和添加MRSIGNER到Launch Policy List的更多详细信息,请参阅Intel® SGX Request License页面)。

  需要注意的是,Legacy Launch Control限制了哪些enclave可以在release模式下运行,但是它允许enclave在SGX debug模式下运行,而不管enclave所有者的MRSIGNER是否已添加到Launch Policy中。SGX debug模式允许开发和调试测试签名的debug enclaves。有关SGX debug模式enclave的更多信息,请参阅Intel® 64和IA-32 Architectures Software Developer Manuals。

2.3.5 三种驱动安装方式(基本都支持第一种:linux内核支持,直接跳过驱动安装部分,可不用看了)

  当使用Intel® SGX时,有三种不同的驱动程序可供选择:

  1. 内核驱动程序(/dev/{sgx_enclave, sgx_provision}):主线内核版本5.11或更高版本包括SGX内核驱动程序。内核驱动程序要求平台支持并配置为Flexible Launch Control

key tips:

  • 此驱动程序包含在主线内核版本5.11或更高版本中。
  • 它要求平台支持并配置为Flexible Launch Control
  • 内核驱动程序是推荐的选择(本机安装的是ubuntu22.04,linux内核是6.5.0-14-generic,亲测好用!)。
  • 它与内核进行本地集成,并利用后续内核版本支持的新功能,如EDMM(Enclave Dynamic Memory Management)、SGX KVM、SGX cgroups和NUMA感知的EPC(Enclave Page Cache)分配。
  1. DCAP驱动程序(/dev/{sgx_enclave, sgx_provision}):DCAP驱动程序的目标是提供接口接近于内核驱动程序,以便为没有将Intel SGX驱动程序集成到内核中的Linux操作系统提供Intel SGX支持。该驱动程序也需要平台支持并配置为 Flexible Launch Control 。由于该驱动程序支持的是一个外部实现,它不包括后续内核版本支持的新功能,如EDMM、SGX KVM、SGX cgroups和NUMA感知EPC分配。该驱动程序仅针对必要的安全修复进行更新。在可能的情况下,应使用内核驱动程序。

key tips:

  • DCAP(Data Center Attestation Primitives)驱动程序的目标是为没有在内核中集成Intel® SGX驱动程序的Linux操作系统提供类似的接口。
  • 类似于内核驱动程序,它要求平台支持并配置为Flexible Launch Control
  • 然而,DCAP驱动程序是一个外部实现,可能不包含较新内核版本支持的最新功能。它主要用于必要的安全修复。
  • 如果可用,建议使用内核驱动程序而不是DCAP驱动程序。

  DCAP驱动是推荐在Linux内核版本4.15到5.6之间(包括这两个版本)以及支持并配置了Flexible Launch Control的平台上使用的驱动程序。在使用SGX In-Kernel驱动程序的5.11或更高版本内核上安装DCAP驱动程序时,会出现构建错误消息:“无法安装带有内核内SGX支持的DCAP SGX驱动程序”。这个错误消息表示在启用了SGX In-Kernel驱动程序的情况下,无法安装DCAP驱动程序。因此,在使用5.11或更高版本的内核时,您应该选择使用SGX In-Kernel驱动程序而不是DCAP驱动程序。
  如果您的内核版本是5.11或更高版本,并且已启用了SGX In-Kernel驱动程序,那么您不需要安装DCAP驱动程序。您可以继续使用内核自带的SGX支持。请注意,在使用SGX In-Kernel驱动程序的情况下,建议使用的内核版本是5.11或更高版本,并且在支持Flexible Launch Control的平台上进行配置。如果您的平台不支持Flexible Launch Control或未进行配置,则可能无法正常使用SGX功能。

  1. 非内核驱动程序(/dev/isgx)(Out-of-Tree驱动):该驱动程序用于支持在仅支持Legacy Launch Control的平台上运行Intel® SGX enclaves。它也可以安装在配置为 Flexible Launch Control的平台上,但是这些平台只能加载符合Legacy Launch Control策略的enclave。

key tips:

  • 此驱动程序用于支持在仅支持Legacy Launch Control的平台上运行Intel® SGX enclaves。
  • 它也可以安装在配置为Flexible Launch Control的平台上,但在这种情况下,这些平台只能加载符合Legacy Launch Control策略的enclave。
  • 非内核驱动程序用于平台不具备原生Flexible Launch Control支持的情况。

  对于不支持或未配置Flexible Launch Control的平台,建议使用Out-of-Tree驱动程序。不建议在启用了FLC的平台上安装传统的Out-of-Tree驱动程序。如果在运行Kernel 5.11或更高版本的FLC平台上安装传统的Out-of-Tree驱动程序,安装会成功,但是Intel SGX PSW仅使用内核内驱动程序。
  此处可以下载别人已经已经编译好的驱动程序,具体流程如下:

  • step1: 从该地址下载驱动文件,可以使用wget命令下载,并且根据自己的linux版本找到对应的文件下载,这里是ubuntu22.04版本。

wget https://download.01.org/intel-sgx/latest/linux-latest/distro/ubuntu22.04-server/sgx_linux_x64_driver_2.11.54c9c4c.bin

  • step2: 到下载文件夹下输入下面命令,以赋予.bin文件的执行权限。

chmod 777 sgx_linux_x64_driver_2.11.54c9c4c.bin

  • step3: 运行该bin文件,完成驱动安装.

sudo ./sgx_linux_x64_driver_2.11.54c9c4c.bin

总结:需要根据平台的能力和配置选择适合的驱动程序。内核驱动程序是推荐且功能最丰富的选项,DCAP驱动程序可用于没有在内核中集成Intel® SGX驱动程序的系统。非内核驱动程序适用于仅支持Legacy Launch Control的平台。

2.4 sgx sdk安装

2.4.1 准备阶段

  • step1: 使用以下命令安装构建英特尔® SGX SDK 所需的工具:

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

   注意:要构建 Intel® SGX SDK,gcc 版本需要为 7.3 或更高版本,glibc 版本需要为 2.27 或更高版本。

  • step2: 安装编译SGX 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

  • step3: 从仓库获取源码,到下载文件夹下,输入:

git clone https://github.com/intel/linux-sgx.git 或 git clone https://gitee.com/mirrors/linux-sgx.git(国内镜像)
cd linux-sgx && make preparation

   上面的代码make preparation将触发脚本download_prebuilt.sh下载预构建的二进制文件。您可能需要为wget脚本使用的工具设置 https 代理(如export https_proxy=http://test-proxy:test-port) 此处可能会因为网络原因执行失败,多次尝试make preparation后一般会成功。

  • step4: 把准备好的工具列表添加到全局变量中,方便之后编译工作的展开。到linux-sgx文件夹下,输入以下命令:

sudo cp external/toolset/{current_distr}/* /usr/local/bin

   注意:即使您之前将之前的操作工具复制到/usr/local/bin,上述操作也是必须的。它确保在以后的构建中使用更新的操作工具。将{current_distr}替换为当前的操作系统(如: ubuntu22.04)。再用下面这个语句检查是不是添加成功:

which ar as ld objcopy objdump ranlib

  • step5: 编译SGX SDK和SGX SDK安装工具(installer),进入linux-sgx文件夹,输入以下命令:

sudo make sdk

   运行完成后,再输入以下命令(安装工具):

sudo make sdk_install_pkg

   成功运行的话,在linux-sgx/linux/installer/bin文件夹下会有一个sgx_linux_x64_sdk_${version}.bin文件生成。

在这里插入图片描述

2.4.2 sdk安装

  • step1: 安装好需要用到的工具,输入以下命令:

sudo apt-get install build-essential python

  • step2: 安装sdk,进入linux-sgx文件夹,输入以下两条命令:

cd linux/installer/bin
sudo ./sgx_linux_x64_sdk_${version}.bin
注意:运行第二条命令时,它询问是否安装在当前文件夹的时候,最好选择“no”,然后输入/opt/intel/, 即将SGX SDK安装在/opt/intel/文件夹下。

  • step3: 安装完成后,根据提示输入source命令(根据提示输入source命令):

source ${sgx-sdk-install-path}/environment
本机: source /opt/intel/sgxsdk/environment

2.4.3 测试sdk是否安装成功(注意模拟模式下不需要SGX PSW包)

   在安装Intel SGX PSW包之前,我们先用模拟模式测试SGX SDK包是否安装正常。在模拟模式下编译并运行每个代码示例,以确保SGX SDK包运行良好:

$ cd ${sgx-sdk-install-path}/SampleCode/LocalAttestation
$ make SGX_MODE=SIM
The project has been built in simulation debug mode.

$ cd bin
$ ./app

但是,在执行make SGX_MODE=SIM编译过程中,报如下错误:
在这里插入图片描述
可以看出是SDK依赖库没有找到,但是sdk程序已经按照了,发现该库安装后在/opt/intel/sgxsdk/lib64/libsgx_uae_service_sim.so路径下,只是系统并不知道该库路径,因此将该库路径添加到系统配置中,也就是添加到/etc/ld.so.conf配置文件中(可以通过include的方式添加到其他一类文件中)。
在这里插入图片描述
添加完成后更新一下库链接:

ldconfig

再次编译(make SGX_MODE=SIM)、执行(./app)就没错误了,执行结果如下:

在这里插入图片描述

2.5 psw安装

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

2.5.1 使用默认配置构建SGX PSW:

make psw
make psw_install_pkg

执行之后会在/home/hututu/intel-sgx/linux-sgx/linux/installer/bin路径下生成sgx_linux_x64_psw_2.23.100.2.bin文件,如下图:
在这里插入图片描述

2.5.2 在相应文件夹中使用make命令构建每个Architecture Enclave

cd psw/ae/le
make

2.5.3 调用安装程序(执行sgx_linux_x64_psw_2.23.100.2.bin)

cd linux/installer/bin
./sgx_linux_x64_psw_2.23.100.2.bin

注意:需要执行该sgx_linux_x64_psw_2.23.100.2.bin文件之后,才会安装aesmd 服务:

在这里插入图片描述

2.5.4 命令行运行以下命令添加下载Intel sgx psw的下载路径(将以下库添加到源中):

echo ‘deb [arch=amd64] https://download.01.org/intel-sgx/sgx_repo/ubuntu jammy main’ | sudo tee /etc/apt/sources.list.d/intel-sgx.list

注意,ubuntu18中是bionic,20是focal,22是jammy,可以对应修改。

2.5.5 进入如下网址下载密钥intel-sgx-deb.key(获取 Debian 存储库公钥并将其添加到 apt 用于验证软件包的受信任密钥列表中):

https://download.01.org/intel-sgx/sgx_repo/ubuntu/

2.5.6 进入下载目录,通过如下命令添加进仓库:

sudo apt-key add intel-sgx-deb.key

运行后等一会儿看到【ok】就是运行成功。
在这里插入图片描述

2.5.7 更新一下apt-get的列表:

sudo apt-get update

如果系统报错deb无法识别,进入/etc/apt/sources.list.d目录,修改intel-sgx.list文件,去掉deb [arch=amd64] https://download.01.org/intel-sgx/sgx_repo/ubuntu focal main两侧的引号。

2.5.8 分别安装SGX PSW 提供的3个服务:

分别是launchEPID-based attestationAlgorithm agnostic attestation,输入以下命令:

启动服务:sudo apt-get install libsgx-launch libsgx-urts -y
基于EPID的认证服务:sudo apt-get install libsgx-epid libsgx-urts -y
与算法无关的证明服务:sudo apt-get install libsgx-quote-ex libsgx-urts -y
基于 DCAP ECDSA 的服务:sudo apt-get install libsgx-dcap-ql -y

2.5.9 demo测试psw是否安装成功

在硬件模式下编译并运行代码示例:

  • 首先准备一下编译环境,输入如下命令

source /opt/intel/sgxsdk/environment

  • 编译、执行:

cd ${sgx-sdk-install-path}/SampleCode/LocalAttestation
make
cd bin
./app

执行结果:
在这里插入图片描述

三.启动或停止 aesmd 服务

   英特尔® SGX PSW 安装程序会在您的计算机中安装 aesmd 服务,该服务在特殊的 Linux 帐户中运行aesmd。

停止服务:$ sudo service aesmd stop
启动服务:$ sudo service aesmd start
重新启动服务:$ sudo service aesmd restart
查看状态:$ sudo service aesmd status

在这里插入图片描述
在这里插入图片描述

四.SampleCode分析

参考文档

  • intel-sgx官方源码地址:https://github.com/intel/linux-sgx

  • linux-sgx-driver官方源码地址:https://github.com/intel/linux-sgx-driver

  • https://blog.csdn.net/weixin_45030965/article/details/134686162

  • https://blog.csdn.net/cacique111/article/details/133246169

  • https://zhuanlan.zhihu.com/p/560110720

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【开源】基于JAVA的图书管理系统

目录 一、 系统介绍二、 功能模块2.1 登录注册模块2.1 图书馆模块2.2 图书类型模块2.3 图书模块2.4 图书借阅模块2.5 公告模块 三、 源码解析3.1 图书馆模块设计3.2 图书类型模块设计3.3 图书模块设计3.4 图书借阅模块设计3.5 公告模块设计 四、 免责说明 一、 系统介绍 图书管…

AnimatedDrawings:让绘图动起来

老样子,先上图片和官网。这个项目是让绘制的动画图片动起来,还能绑定人体的运动进行行为定制。 快速开始 1. 下载代码并进入文件夹,启动一键安装 git clone https://github.com/facebookresearch/AnimatedDrawings.gitcd AnimatedDrawingspip…

4小时精通MyBatisPlus框架

目录 1.介绍 2.快速入门 2.1.环境准备 2.2.快速开始 2.2.1引入依赖 2.2.2.定义Mapper ​编辑 2.2.3.测试 2.3.常见注解 ​编辑 2.3.1.TableName 2.3.2.TableId 2.3.3.TableField 2.4.常见配置 3.核心功能 3.1.条件构造器 3.1.1.QueryWrapper 3.1.2.UpdateWra…

SpringBoot3集成Zookeeper

标签:Zookeeper3.8 ,Curator5.5; 一、简介 ZooKeeper是一个集中的服务,用于维护配置信息、命名、提供分布式同步、提供组服务。分布式应用程序以某种形式使用所有这些类型的服务。 二、环境搭建 1、修改配置文件 # 1、拷贝一份…

不合格机器人工程讲师再读《悉达多》-2024-

一次又一次失败的经历,让我对经典书籍的认同感越来越多,越来越觉得原来的自己是多么多么的无知和愚昧。 ----zhangrelay 唯物也好,唯心也罢,我们都要先热爱这个世界,然后才能在其中找到自己所热爱的事业。 ----zh…

用Netty手写Http/Https服务器

Netty是一个以事件驱动的异步通信网络框架&#xff0c;可以帮助我们实现多种协议的客户端和服务端通信&#xff0c;话不多说&#xff0c;上代码&#xff0c;需要引入下方依赖 <dependency><groupId>io.netty</groupId><artifactId>netty-all</artif…

C++虚函数表的简单理解

背景 C的三大特性&#xff1a;封装&#xff0c;继承&#xff0c;多态。其中基于多态特性的虚函数表概念是C开发者面试的长考题。今天梳理一下虚函数表的基本概念。 概念理解 为了实现 C 的多态&#xff0c;C 使用了一种动态绑定的技术。这个技术的核心是虚函数表。 虚表就是为…

小程序直播项目搭建

项目功能&#xff1a; 登录实时聊天点赞功能刷礼物取消关注用户卡片直播带货优惠券直播功能 项目启动&#xff1a; 1 小程序项目创建与配置&#xff1a; 第一步 需要登录小程序公众平台的设置页面进行配置&#xff1a; 首先需要是企业注册的才可以个人不能开通直播功能。服务类…

科技发展趋势,墨水屏电子桌牌将发挥更重要作用

随着科技的不断发展&#xff0c;电子桌牌作为信息展示和宣传的新型设备&#xff0c;逐渐在各个行业得到广泛应用。在国企单位、政府部门、大企业、外企等&#xff0c;墨水屏电子桌牌作为一种新型的数字化展示工具&#xff0c;也已经得到了越来越多的应用。下面&#xff0c;中科…

Spring Boot 初始(快速搭建 Spring Boot 应用环境)

提示&#xff1a; ① 通过下面的简介可以快速的搭建一个可以运行的 Spring Boot 应用&#xff08;估计也就2分钟吧&#xff09;&#xff0c;可以简单的了解运行的过程。 ② 建议还是有一点 spring 和 springMVC的基础&#xff08;其实搭建一个 Spring Boot 环境不需要也没有关系…

微信小程序(十一)表单组件(进阶)

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a;&#xff08;涉及内容较多&#xff0c;建议细看源码&#xff09; 1.radio-group的使用与数据处理 2.checkbox-group的使用与数据处理 3.picker的使用与数据同步处理(此处示范了地域与日期) 源码&#xff1a; form…

数据结构与算法——队列原理及C语言底层实现

数据结构与算法——队列原理及C语言底层实现 队列概念顺序队列1. 顺序队列原理2. 队列的创建3. 入队与出队4. 判断满队与空队5. 清空队列与释放空间6. 主流程测试 链式队列1. 链式队列的创建2. 链式队列入队3. 链式队列出队4. 判断是否为空队5. 清空队列与释放空间6. 主流程测试…

后端开发_单元测试

后端开发_单元测试 1. 简介2. JUnit 4使用方法2.1 jar包引入2.2 测试用例1. 简介 2. JUnit 4使用方法 2.1 jar包引入 1. 本地依赖引入方式 Junit4.jar包 2. maven方式引入jar <dep

基于SSM的影视创作论坛(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的影视创作论坛&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring Spri…

Sentinel 新版本发布,提升配置灵活性以及可观测配套

作者&#xff1a;屿山 基本介绍 Sentinel 是阿里巴巴集团开源的&#xff0c;面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;承接了阿里巴巴近 15 年的双十一大促流量的核心场景&#xff0c;例如秒杀、冷启动、消息削峰填谷、集群流量控制、实时熔断下游不可用服…

docker安装Rabbitmq教程(详细图文)

目录 1.下载Rabbitmq的镜像 2.创建并运行rabbitmq容器 3.启动web客户端 4.访问rabbitmq的微博客户端 5.遇到的问题 问题描述&#xff1a;在rabbitmq的web客户端发现界面会弹出如下提示框Stats in management UI are disabled on this node 解决方法 &#xff08;1&#…

线程的同步和互斥学习笔记

目录 互斥锁的概念和使用 线程通信-互斥 互斥锁的创建和销毁 申请锁-pthread_mutex_lock 释放锁-pthread_mutex_unlock 读写锁的概念和使用 死锁的避免 互斥锁的概念和使用 线程通信-互斥 临界资源 一次只允许一个任务&#xff08;进程、线程&#xff09;访问的共享资…

Kubeadm安装单master多node节点K8S集群

kubeadm安装k8s1.25版本集群步骤 环境说明实验环境规划集群搭建规划 初始化安装k8s集群的实验环境安装虚拟机更新yum源和操作系统配置机器主机名配置主机hosts文件&#xff0c;相互之间通过主机名互相访问配置主机之间无密码登录关闭交换分区swap&#xff0c;提升性能修改机器内…

漏洞补丁修复之openssl版本从1.1.1q升级到1.1.1t以及python版本默认2.7.5升级到2.7.18新版本和Nginx版本升级到1.24.0

​ 一、Openssl升级 1、查看Openssl安装的版本 openssl version 2、查看Openssl路径 which openssl 3、上传openssl安装包到服务器:openssl-1.1.1t.tar.gz,并且解压,安装: mv /usr/local/openssl /usr/local/backup_openssl_1.1.1q_20240120 mkdir /usr/local/openssl tar…

LeetCode.2765. 最长交替子数组

题目 2765. 最长交替子数组 分析 为了得到数组 nums 中的最长交替子数组的长度&#xff0c;需要分别计算以每个下标结尾的最长交替子数组的长度。为了方便处理&#xff0c;计算过程中需要考虑长度等于 1 的最长交替子数组&#xff0c;再返回结果时判断最长交替子数组的长度…