当前位置: 首页 > news >正文

Windows10 下测试 Intel SGX 功能

文章目录

  • 参考文献
  • 系统要求
  • 一、安装Open Enclave SDK 环境
    • (一)什么是Open Enclave SDK
    • (二)启动SGX功能
      • 方法一: BIOS启动
      • 方法二:软件方式启动
    • (三)安装必要环境
      • (1)安装编译工具:Visual Studio Build 2019(x64)
      • (2)安装Git环境
      • (3)安装Clang环境
      • (4)安装OpenSSL
      • (5)安装ME
      • (6.1)自动安装Guard Extension SDK for windows(PSW)
      • (6.2)手动安装PSW(Intel Platform Software for Windows)
      • (7)安装openenclave SDK
      • (8)安装Intel SGX DCAP for Windows
  • 二、使用Open Enclave SDK
    • (一)Open Enclave SDK目录文件说明
    • (二)配置 Open Enclave SDK
    • (三)运行测试例子(helloworld)

参考文献

  • 哪些平台支持英特尔® Software Guard Extensions (英特尔® SGX) 数据中心标记基元 (DCAP
  • 官方文档一:Install the Open Enclave SDK NuGet Package
  • 官方文档二:Using the Open Enclave SDK on Windows
  • 官方文档三: Building and Running the Samples on Windows
  • Win10安装Intel SGX环境并执行一个基础demo
  • windows10下使用Intel SGX编程初体验

系统要求

  • x86-64。
  • Windows Server 2019 or Windows 10 (1709 or newer)。
  • 支持SGX1(+FLC),如果不支持FLC,则只能使用simulation mode。

一、安装Open Enclave SDK 环境

(一)什么是Open Enclave SDK

Open Enclave SDK提供了对Open Portable TEE OS(OP-TEE OS)的预览支持。OP-TEE是一个用于实现传统内核模式和用户模式执行环境的TEE的操作系统。它在支持ARM TrustZone的A-profile ARM系统上运行。因此,Open Enclave SDK 也可以被用来针对这些系统。

原文链接请参考Open Enclave SDK for OP-TEE OS。

(二)启动SGX功能

启动SGX功能的前提条件时:Windows® 10 is booted in Legacy or UEFI Mode。如果是Legacy mode,则需要修改为UEFI mode,并重装windows 10。

方法一: BIOS启动

  1. 查看是否支持SGX,可参考官方文档:在电脑设置中找到CPU类型,在Intel官网查询该型号是否支持SGX。
  1. 如果电脑支持SGX,则重启电脑进入【BIOS->Security】下启动SGX。如果BIOS无法设置,则不支持使用Intel SGX功能。

方法二:软件方式启动

在 Microsoft Store 中下载安装Intel(R) Software Guard Extensions Activation APP。并以 Admin 方式打开 Intel(R) Software Guard Extensions Activation APP,单击 【Activate】启动SGX。

(三)安装必要环境

安装Open Enclave SDK的环境要求如下:

  • Git v2.31.1
  • OpenSSL 1.1.1
  • Visual Studio Build Tools
  • Clang 10.0.0
  • ShellCheck v0.7.0
  • Nuget 3.4.3
  • Python 3
  • Python pip
  • Intel SGX PSW v2.13.100.2

下面根据自己电脑上缺失工具进行安装。

(1)安装编译工具:Visual Studio Build 2019(x64)

  1. Visual Studio Build 2019下载地址在这儿。
  2. 安装时选择【C++ build tools】,中文是【使用C++的桌面开发】进行安装;
  3. Visual Studio Build Tools 2019支持CMake 3.15版(构建Open Enclave SDK需要CMake 3.12版或以上)。

(2)安装Git环境

  1. 如果有git、git bash等环境,则跳过。
  2. 下载地址在这儿,按步骤安装即可。
  3. C:\Program Files\Git\binC:\Program Files\Git\mingw64\bin添加到 PATH

(3)安装Clang环境

  1. 下载地址在这儿
  2. 安装Clang 8.0.1并将LLVM文件夹添加到路径中.

(4)安装OpenSSL

  1. 安装Git之后,在Git Bash中可以使用openssl了。
  2. 记住,电脑中一定只能有一个openssl。不然ninja 编译的时候会出错,参考这儿

(5)安装ME

windows10的ME下载地址在这儿。下载后直接安装,安装文件为\ME_SW_2216.16.0.2805\ME_SW_DCH\SetupME.exe

(6.1)自动安装Guard Extension SDK for windows(PSW)

实验中这种方式总是提示版本不对,即使在 SGX 已经激活的状态下。

下载地址在这儿。下载后直接安装。

(6.2)手动安装PSW(Intel Platform Software for Windows)

官方文档说SGX1+FLC才安装PSW,但是所有支持SGX的都需要安装PSW。

  1. 查看windows版本。在cmdpowershell中输入:winver,查看版本。1709是指2017年9月第一版windows10。所以一般都是使用above版本安装。

  2. 解压Intel SGX PSW v2.13.100.2,下载地址在这儿。下载之后,解压。

  3. 进入\Intel SGX PSW for Windows v2.13.100.2\PSW_INF_RS3_and_above目录,command(Admin)下执行:

pnputil /add-driver sgx_psw.inf /install

注:官方文档使用devcon.exe update安装总是出错,使用pnputil没有问题。

  1. 检查PSW是否安装成功:检查C:\Windows\System32下是否有sgx_urts.dll,【右键->属性->详细信息】查看版本。

  2. 查看PSW是否启动。command(Admin)下执行sc query aesmservice,输出如下信息表示已经启动。启动命令Start-Service "AESMService",重启命令Restart-Service "AESMService"

SERVICE_NAME: aesmserviceTYPE               : 10  WIN32_OWN_PROCESSSTATE              : 4  RUNNING(STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)WIN32_EXIT_CODE    : 0  (0x0)SERVICE_EXIT_CODE  : 0  (0x0)CHECKPOINT         : 0x0WAIT_HINT          : 0x0

(7)安装openenclave SDK

  1. 下载 openenclave nupkg
    代码在这儿,下载最新版本。我下载的是v0.18.5。
  2. 安装nuget工具。
    1. 下载nuget工具,无需安装。下载地址在这儿。
    2. 下载之后将nuget存放地址加入到PATH
    3. 在Powershell(Admin)中测试nuget是否可用。

3.安装openenclave nupkg。打开Powershell(Admin),执行以下命令:

nuget.exe install open-enclave -Source D:\software\windows\SGX  -OutputDirectory C:\oe -ExcludeVersion -pre
  1. 安装完成后,Open Enclave SDK将被放置在C:\oe路径下。使用下面的命令来复制SDK到C:\openenclave
xcopy /E  C:\oe C:\openenclave\
  1. 查看当前SGX
// Powershell或者cmd下输入:
> oesgx.exe
CPU supports Software Guard Extensions:SGX1
MaxEnclaveSize_64: 2^(36)
CPU supports Key Sharing & Separation (KSS): false
EPC size on the platform: 98041856
oesgx outputSGX support level
CPU supports SGX_FLC:Flexible Launch Control CPU supports Software Guard Extensions:SGX1SGX1+FLC
CPU supports Software Guard Extensions:SGX1SGX1
CPU does not support SGXNone

所以本系统支持SGX1

(8)安装Intel SGX DCAP for Windows

  1. 安装WDK(Windows Driver Kit),获取devcon.exe等工具。

    1. 关闭visual studio。
    2. 安装Windows SDK,下载地址在这儿。下载之后安装,安装目录默认是C:\Program Files (x86)\Windows Kits\10\WindowsSDK,其他选项根据需要进行修改。(Windows SDK 貌似不支持家庭版,因为在安装WDK的时候总是提示Windows SDK未安装。
    3. Windows SDK安装完成之后,将C:\Program Files (x86)\Windows Kits\10添加到PATH
    4. 安装WDK,下载地址在这儿。默认安装路径,安装之后将C:\Program Files (x86)\Windows Kits\10\Tools\x64添加到PATH
  2. 安装Intel SGX DCAP for Windows。

    1. DCAP的下载地址在这儿。下载DCAP到存放路径。
    2. 运行Intel SGX DCAP for Windows v1.11.100.2.exe,解压到C:
    3. 允许SGX启动配置驱动程序运行: command(Admin)下执行:
    reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\sgx_lc_msr\Parameters /v "SGX_Launch_Config_Optin" /t REG_DWORD /d 1
    reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\sgx_lc_msr\Parameters /v "SGX_Launch_Config_Optin"
    
    1. 安装和升级驱动。进入C:\Intel SGX DCAP for Windows v1.11.100.2目录,在command(Admin)下执行如下安装命令:
    devcon.exe update dcap\WindowsServer2016\sgx_dcap_dev.inf "SWC\VEN_INT&DEV_0E0C_DCAP"
    devcon.exe update base\WindowsServer2019_Windows10\sgx_base.inf *INT0E0C// 或
    pnputil /add-driver base\WindowsServer2019_Windows10\sgx_base.inf /install
    pnputil /add-driver dcap\WindowsServer2016\sgx_dcap_dev.inf /install
    
    1. 安装DCAP_Components。command(Amind)执行如下命令。
    // 安装 DCAP_Components
    nuget.exe install DCAP_Components -Source "C:\Intel SGX DCAP for Windows v1.11.100.2\nuget\DCAP_Components" -OutputDirectory C:\oe_prereqs -ExcludeVersion// 安装 EnclaveCommonAPI
    > nuget.exe install EnclaveCommonAPI -Source "C:\Intel SGX DCAP for Windows v1.11.100.2\nuget\EnclaveCommonAPI" -OutputDirectory C:\oe_prereqs -ExcludeVersion
    

    如果安装EnclaveCommonAPI提示错误Unable to resolve dependency 'SgxHeaders'. Source(s) used: 'nuget.org'.或错误Unable to find package 'DCAP_Components'. Existing packages must be restored before performing an install or update.。则不指定源,使用所有源安装EnclaveCommonAPI

    nuget.exe install EnclaveCommonAPI -OutputDirectory C:\oe_prereqs -ExcludeVersion
    

二、使用Open Enclave SDK

注意:目前该SDK仅支持64bit的程序。

(一)Open Enclave SDK目录文件说明

Path说明
binDeveloper tools such as oedebugrt.dll for debugging and oesign for signing your enclaves.
include\openenclaveOpen Enclave runtime headers for use in your enclave (enclave.h) and its host (host.h).
include\openenclave\3rdpartyHeaders for libc, libcxx and mbedlts libraries for use inside the enclave. See the API Reference section for supported functions.
lib\openenclave\cmakeOpen Enclave SDK CMake Package for integration with your CMake projects. See README.md for more details.
lib\openenclave\enclaveLibraries for linking into the enclave, including the libc, libcxx and mbedtls libraries for Open Enclave.
lib\openenclave\hostLibrary for linking into the host process of the enclave.
lib\openenclave\debuggerLibraries used by the gdb plug-in for debugging enclaves.
share\openenclave\samplesSample code showing how to use the Open Enclave SDK.

(二)配置 Open Enclave SDK

在环境变量中增加CMAKE_PREFIX_PATH,值为C:\openenclave\lib\openenclave\cmake。或者:

set CMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%;C:\openenclave\lib\openenclave\cmake

(三)运行测试例子(helloworld)

Open Enclave SDK的测试例相关文档:

  • Open Enclave SDK Samples
  • Build and Sign an Enclave
  • Open Enclave Debugging
  1. 拷贝所有测试示例到本地地址
// 示例
xcopy /E C:\openenclave\share\openenclave\samples E:\codes\MPC\oe-tee
  1. 在菜单栏展开Visual Studio 2019,以 Admin 的方式打开x64 Native Tools Command Prompt for VS 2019编译(如果选择其他,则会提示find_package The following configuration files were considered but not accepted的错误)。进入到程序目录。

注:visual studio的各个shell工具说明在这儿。

  1. 编译helloworld测试代码
mkdir build
cd build
> cmake .. -G Ninja -DNUGET_PACKAGE_PATH=C:\oe_prereqs
// 等待无错误输出> ninja
[1/1] Generating enclave/enclave.signed
Created E:/codes/MPC/oe-samples/helloworld/build/enclave/enclave.signed> ninja run
[1/1] cmd.exe /C "cd /D E:\codes\MPC\oe-samples\helloworld...es/MPC/oe-samples/helloworld/build/enclave/enclave.signed"
Hello world from the enclave
Enclave called into host to print: Hello World!

相关文章:

Windows10 下测试 Intel SGX 功能

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

Tina_Linux_功耗管理_开发指南

Tina Linux 功耗管理开发指南 1 概述 1.1 编写目的 简要介绍tina 平台功耗管理机制,为关注功耗的开发者,维护者和测试者提供使用和配置参考。 1.2 适用范围 表1-1: 适用产品列表产品名称内核版本休眠类型参与功耗管理的协处理器R328Linux-4.9NormalS…...

golang编译dll失败问题解决

执行go build -buildmodec-shared -o exportgo.dll exportgo.go报类似如下错误/usr/lib/gcc/x86_64-pc-msys/9.1.0/../../../../x86_64-pc-msys/bin/ld: 找不到 -lmingwex/usr/lib/gcc/x86_64-pc-msys/9.1.0/../../../../x86_64-pc-msys/bin/ld: 找不到 -lmingw32安装tdm gcc m…...

Convolutional Neural Networks for Sentence Classification

摘要 We report on a series of experiments with convolutional neural networks (CNN) trained on top of pre-trained word vectors for sentence-level classification tasks. We show that a simple CNN with little hyperparameter tuning and static vectors achieves e…...

基于SpringBoot的共享汽车管理系统

文末获取源码 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏…...

TCP三次握手

参考:4.1 TCP 三次握手与四次挥手面试题 | 小林coding TCP 头格式 我们先来看看 TCP 头的格式,标注颜色的表示与本文关联比较大的字段,其他字段不做详细阐述。 序列号:在建立连接时由计算机生成的随机数作为其初始值&#xff0c…...

未来土地利用模拟FLUS模型

未来土地利用模拟(FutureLand-Use Simulation, FLUS)模型1 模型简介1.1 基于ANN 的适宜性概率计算1.2 基于自适应惯性机制的元胞自动机1.3 模拟精度评价参考流域 径流变化是 自然因素和 人为因素共同作用的结果,其中人为因素最为直接的方式就…...

压力传感器MPX5700D/MPX5700GP/MPX5700AP产品概述、特征

MPX5700系列压阻式换能器是最先进的单片硅压力传感器,可广泛用于各种应用,特别是采用A/D输入微控制器或微处理器的应用。这一获得专利的单元件传感器集合了高级微加工技术、薄膜金属化、双极工艺,能够提供精确的、与所施加压力成正比的高电平…...

taobao.trades.sold.query( 根据收件人信息查询交易单号 )

¥开放平台免费API必须用户授权聚石塔内调用 根据收件人信息查询交易单号。 公共参数 请求地址: HTTP地址 公共请求参数: 公共响应参数: 请求参数 请求示例 TaobaoClient client new DefaultTaobaoClient(url, appkey, secret); TradesSoldQueryRequest req new…...

【JavaWeb】JSON、AJAX(305-317)

305.JSON-什么是JSON JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。JSON 采用完全独立于语言的文本格式,而且很多语言都提供了对 json 的支持(包括 C, C, C#, Java, JavaScript, Perl,…...

AI入场,搜索这个“营销枢纽”有新故事吗?

哪里有内容,哪里就有搜索。 以前,互联网离我们生活很远,传统搜索与用户的距离分割,只有当用户想要了解什么,才会去使用。 如今,互联网与真实世界密不可分,加之新技术、新平台的不断涌现&#xf…...

字节在职5年,一个测试工程师的坎坷之路

几年前进入到IT行业,现在发现学习软件测试的人越来越多,今天我想根据自己的行业经验给大家提一些建议。 跟其他行业相比,做软件测试的岗位确实算是高薪职业,我们那个时候起步的工资并不高,而看现在很多毕业的学生薪资都…...

什么是web框架?

什么是web框架? 我们解释一个概念的时候,通常会用到其他更多的概念去解释它,如果听的人不理解解释它的概念,那么这个解释是失败的,因此首先要回答一下解释web框架中所用到的概念。 回答这个问题前,首先需…...

说一说关系数据库中的范式建模

面试中可能会被问到,来回顾总结一下,参考《数据库系统第五版》(王珊/萨师煊) 范式(normal form),我的理解是用来规范关系数据库中实体如何划分以及实体间如何建立联系来保持数据完整性的一种指导思想,目的就…...

Mysql是怎样运行的之Inno页介绍

一、InnoDB介绍 InnoDB是一个将表中的数据存储到磁盘上的存储引擎,所以即使关机后重启我们的数据还是存在的。而真正处理数据的过程是发生在内存中的,所以需要把磁盘中的数据加载到内存中,如果是处理写入或修改请求的话,还需要把内…...

【华为OD机试模拟题】用 C++ 实现 - 找字符(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 货币单位换算(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 选座位(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 停车场最大距离(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 重组字符串(2023.Q1) 【华为OD机试模…...

JAVA 8 新特性 Lamdba表达式

Java8 新特性: 1、Lamdba表达式 2、函数式接口 3、方法引用和构造引用 4、Stream API 5、接口中的默认方法和静态方法 6、新时间日期API 7、Optional 8、其他特性 Java8 优势:速度快、代码更少(增加了新的语法 Lambda 表达式)、强…...

使用antlr实现一个简单的表达式解析

背景 之前在做游戏的过程中,我们经常需要解析一些公式,比如(对方攻击值-对方防御值)*2这种表达式,我们习惯于用代码写死公式,但是这种方式不够灵活,我们想要的是一种灵活的解析方式, 只需要策划输入一个任…...

2月24日作业

题目:通过操作Cortex-A7核,串口输入相应的命令,控制LED灯进行工作--->上传CSDN 1.例如在串口输入led1on,开饭led1灯点亮 2.例如在串口输入led1off,开饭led1灯熄灭 3.例如在串口输入led2on,开饭led2灯点亮 4.例如在串口输入led2off,开饭led…...

SpringBoot可以同时处理多少请求?

本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star ⭐⭐⭐⭐⭐转载请注明出处:https://blog.csdn.net/weixin_43461520/article/details/129207427 前言 前两天面试的时候,面试官问我:一个i…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、👨‍🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨‍&#x1f…...