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启动
- 查看是否支持SGX,可参考官方文档:在电脑设置中找到CPU类型,在Intel官网查询该型号是否支持SGX。

- 如果电脑支持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)
- Visual Studio Build 2019下载地址在这儿。
- 安装时选择【C++ build tools】,中文是【使用C++的桌面开发】进行安装;
- Visual Studio Build Tools 2019支持CMake 3.15版(构建Open Enclave SDK需要CMake 3.12版或以上)。
(2)安装Git环境
- 如果有git、git bash等环境,则跳过。
- 下载地址在这儿,按步骤安装即可。
- 将
C:\Program Files\Git\bin
和C:\Program Files\Git\mingw64\bin
添加到PATH
。
(3)安装Clang环境
- 下载地址在这儿
- 安装Clang 8.0.1并将LLVM文件夹添加到路径中.
(4)安装OpenSSL
- 安装Git之后,在Git Bash中可以使用openssl了。
- 记住,电脑中一定只能有一个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。
-
查看windows版本。在
cmd
或powershell
中输入:winver
,查看版本。1709是指2017年9月第一版windows10。所以一般都是使用above版本安装。
-
解压
Intel SGX PSW v2.13.100.2
,下载地址在这儿。下载之后,解压。 -
进入
\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没有问题。
-
检查PSW是否安装成功:检查
C:\Windows\System32
下是否有sgx_urts.dll
,【右键->属性->详细信息】查看版本。 -
查看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
- 下载 openenclave nupkg
代码在这儿,下载最新版本。我下载的是v0.18.5。 - 安装
nuget
工具。- 下载nuget工具,无需安装。下载地址在这儿。
- 下载之后将nuget存放地址加入到
PATH
。 - 在Powershell(Admin)中测试nuget是否可用。
3.安装openenclave nupkg
。打开Powershell(Admin),执行以下命令:
nuget.exe install open-enclave -Source D:\software\windows\SGX -OutputDirectory C:\oe -ExcludeVersion -pre
- 安装完成后,Open Enclave SDK将被放置在
C:\oe
路径下。使用下面的命令来复制SDK到C:\openenclave
。
xcopy /E C:\oe C:\openenclave\
- 查看当前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 output | SGX support level |
---|---|
CPU supports SGX_FLC:Flexible Launch Control CPU supports Software Guard Extensions:SGX1 | SGX1+FLC |
CPU supports Software Guard Extensions:SGX1 | SGX1 |
CPU does not support SGX | None |
所以本系统支持SGX1
。
(8)安装Intel SGX DCAP for Windows
-
安装WDK(Windows Driver Kit),获取
devcon.exe
等工具。- 关闭visual studio。
- 安装Windows SDK,下载地址在这儿。下载之后安装,安装目录默认是
C:\Program Files (x86)\Windows Kits\10\WindowsSDK
,其他选项根据需要进行修改。(Windows SDK 貌似不支持家庭版,因为在安装WDK的时候总是提示Windows SDK未安装。) - Windows SDK安装完成之后,将
C:\Program Files (x86)\Windows Kits\10
添加到PATH
。 - 安装WDK,下载地址在这儿。默认安装路径,安装之后将
C:\Program Files (x86)\Windows Kits\10\Tools\x64
添加到PATH
。
-
安装Intel SGX DCAP for Windows。
- DCAP的下载地址在这儿。下载DCAP到存放路径。
- 运行
Intel SGX DCAP for Windows v1.11.100.2.exe
,解压到C:
。 - 允许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"
- 安装和升级驱动。进入
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
- 安装
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 | 说明 |
---|---|
bin | Developer tools such as oedebugrt.dll for debugging and oesign for signing your enclaves. |
include\openenclave | Open Enclave runtime headers for use in your enclave (enclave.h) and its host (host.h). |
include\openenclave\3rdparty | Headers for libc, libcxx and mbedlts libraries for use inside the enclave. See the API Reference section for supported functions. |
lib\openenclave\cmake | Open Enclave SDK CMake Package for integration with your CMake projects. See README.md for more details. |
lib\openenclave\enclave | Libraries for linking into the enclave, including the libc, libcxx and mbedtls libraries for Open Enclave. |
lib\openenclave\host | Library for linking into the host process of the enclave. |
lib\openenclave\debugger | Libraries used by the gdb plug-in for debugging enclaves. |
share\openenclave\samples | Sample 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
- 拷贝所有测试示例到本地地址
// 示例
xcopy /E C:\openenclave\share\openenclave\samples E:\codes\MPC\oe-tee
- 在菜单栏展开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工具说明在这儿。

- 编译
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࿰…...

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 头的格式,标注颜色的表示与本文关联比较大的字段,其他字段不做详细阐述。 序列号:在建立连接时由计算机生成的随机数作为其初始值,…...

未来土地利用模拟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入场,搜索这个“营销枢纽”有新故事吗?
哪里有内容,哪里就有搜索。 以前,互联网离我们生活很远,传统搜索与用户的距离分割,只有当用户想要了解什么,才会去使用。 如今,互联网与真实世界密不可分,加之新技术、新平台的不断涌现…...

字节在职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…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...

Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...