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…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
