Intel SGX开发者参考书(二)——构建一个SGX项目(一)
@Intel SGX 读书笔记…
构建一个Intel SGX项目
VS2017 Professional环境和VS2017 Add-in工具适配。所以我下载了VS2017 Professional版做实验。
创建一个Enclave
- 在VS2017菜单栏中选择文件——>新建——>项目
- 选择Visual C++ ——>Intel SGX Enclave Project,根据自己的需要修改名称、位置和解决方案名称。
- 点击OK。
- 点击Next跳转到Enclave设置页。
- 使用适当的配置设置Enclave
- Project Type:
Enclave —— 创建一个Enclave项目
Enclave library —— 给Enclave项目创建一个静态库 - Additional Libraries:
C++ 11 —— 给Enclave项目连接C++ 11
EDL File —— 在Enclave项目中创建一个EDL文件 - Signing Key:
输入一个现存的签名密钥到Enclave项目中。如果不输入签名密钥,Enclave则会随机产生一个密钥。 - Additional Configurations:
CVE-2020-0551 Load —— 加入CVE-2020-0551缓解负荷水平配置(什么玩意啊,希望早日得到大神指点)
CVE-2020-0551 Control Flow —— 加入CVE-2020-0551减缓控制流级配置
- Project Type:
使用VS Intel SGX插件
该VS插件是提供给Intel SGX开发者更方便有效地配置一个Enclave和输入一个Enclave到一个不可信的组件中。
Enclave Setting帮助保持Enclave的配置设置.Enclave配置文件时Enclave项目的一部分,它描述了Enclave元的信息.
打开包含Enclave的项目,点击右键,先择Intel SGX Configuration->Enclave Settings.
名称 | 描述 | 在Enclave配置文件中的Tag |
---|---|---|
Product ID | ISV分配项目ID | <ProdID> |
ISV SVN | ISV分配SVN | <ISVSVN> |
Thread Stack Size | 每个可信线程的堆栈大小(以字节为单位) | <StackMaxSize> |
Global Heap Size | Enclave的堆大小(以字节为单位) | <HeapMaxSize> |
Thread Number | 可信线程的数量 | <TCSNum> |
Thread Bound Policy | TCS管理策略 | <TCSPolicy> |
点击Advanced按钮可以修改高级特点,下图是Advanced Settings的窗口:
如果你想要Enclave不能在debug模式下运行,就确认Debug Selection选项。这个选项跟Enclave配置文件中的<DisableDebug>标签是相关的。在Debug模式下的Enclave内存区内的代码和数据是能够被调试器或其他Enclave的外部软件访问的。因此,Debug模式下的Enclave就没有非Debug模式下的Enclave相同的内存访问保护,只有在以Debug模式启动时才能调试Debug。如果这个选项被勾选,配置文件中就会设置该Enclave不能被调试。
你还可以设置Misc Select和Misc Mask的位值。这两个设置分别跟配置文件中的<MiscSelect>和<MiscMask>相关联。这俩推荐设置默认值哦。
如果你想要为Enclave使用Key Separation & Sharing(KSS),就要勾选Enable KSS选项,就是配置文件中<EnableKSS>选项。你可以在文本框中为ISV分配的Extended Product ID和ISV分配的Family ID设置值。注意:你需要在设置ISV分配的Extended Product ID和ISV分配的Family ID之前打开KSS。
Enclave首选的加载地址
你可以使用链接器选项选择/BASE和/FIXED去构建一个Enclave。/FIXED告诉uRTS和驱动只在Enclave首选的加载地址加载Enclave,可以使用/BASE选项指定该地址。
当你使用/BASE时,Enclave 的PE的OptionalHeader.ImageBase是用首选的加载地址设置的。当你指定了/FIXED,链接器不会为Enclave生成一个重定位节,且Enclave的PE的Header.Characteristics将有IMAGE_FILE_RELOCS_STRIPPED设置。另外,PE的OptionalHeader.DLLCharacteristic没有IMAGE_DLL_CHARACTERISTICS_SYNAMIC_BASE设置,以说明这个Enclave DLL不能在加载时重分配。(其实我不太懂这个/BASE和/FIXED,然后百度了一下,大概是在写命令行的时候指定的)
1.当你对Enclave签名时,如果sgx_sign.exe发现一个Enclave在PE的Header.Characteristics中有IMAGE_FILE_RELOCS_STRIPPED设置,它会执行以下操作。2.它将验证Enclave没有重定位节,并且IMAGE_DLL_CHARACTERISTIC_DYNAMIC_BASE在PE的OptionalHeader.DLLCharacteristics中没有设置。3.另外,sgx_sign.exe确保所选的BASE与Enclave大小自然对齐。如果以上三点中的任何一个要求没有满足,sgx_sign.exe会报错。加载器sgx_urts.dll只加载满足以上三个条件的Enclave。如果Enclave没有在首选的加载地址被加载,sgx_urts.dll同样会报错。
Enclave签名
Enclave Signing为发布模式执行"两步签名"。
对于Enclave启动控制,用于release mode的Enclave签名密钥必须以安全的方式存储,例如由HSM管理的平台。Enclave Signing提供了一个GUI帮助开发者执行“两步签名”。
步骤一:产生Enclave签名材料
打开包含Enclave的项目,点击右键,选择Intel SGX Configuration -> Enclave Signing。如下图。
输出的签名材料的默认名和地址是指定的。但是你可以改变名字和地址。点击Generate Signing按钮产生Enclave签名材料。
完成步骤一后,你需要用你自己的签名工具,该工具可以访问你的私有签名密钥对输出Enclave签名材料签名,然后将生成的签名文件带回步骤二。(默认情况下,对于release mode,在编译Enclave之后,会自动生成Enclave签名材料)
步骤二:
如果你产生了Enclave签名材料,也已经准备好了结果签名文件,你可以产生签名Enclave文件了.如下图,选中Step2-Generate Signed Enclave File:
签名材料和Enclave文件的默认地址是指定的,但是不要忘记确认一下哦.点击Public Key File旁边的Select按钮,指定相应的公钥.点击Signature File按钮旁边的Select按钮,指定结果签名文件.
指定所有正确的文件后,点击Generate Signed Enclave按钮,然后会在指定的Enclave文件同一目录下产生最后的签名Enclave文件.
输入Enclave
Import Enclave帮助选择Enclaves输入到一个不可信的组件中,以保证不可信的组件可以使用该Enclave.
Import Enclave提供一下的作用:
- 允许从同一个解决方案中中用Intel SGX Wizard创建的一个Enclave。
- 支持从第三方浏览/搜索EDL文件。
- 支持移除任何已经被挑选的Enclave。
- 对于添加到应用程序中的/从应用程序中删除的每个enclave,在不受信任的组件项目中添加/删除enclave的_u.h和_u.c文件。
- 为不可信的组件建立项目设置。
输入Enclaves:
打开包含Enclave项目和将输入Enclave的不可信应用程序。点击右键不可信的应用程序项目。选择Intel SGX Configuration->Import Enclave。如下图:
图中Include EDLs模块中包含该解决方案中所有的Enclave和外部输入的的任何一个Enclave。每个Enclave用一个EDL文件表示。EDL是一个最小的用作描述Enclave结构的IDL。选择Enclave输入到应用程序中。
如果想要输入不是解决方案中的一个Enclave,你可以点击Import EDL去挑选一个新的EDL文件。
你可以从EDL列表中勾选一个你想要输入的EDL文件。
如果所选的EDL文件需要其他的搜索路径给EDL文件,在Search Path Settings中指定搜索路径。
点击OK。然后两个文件会增加到不可信的应用程序项目中:sample_enclave_u.c和sample_enclave_u.h。它们包含用于调用enclave函数的不可信包装函数的声明和定义。另外,当项目重新构建后,不可信应用程序项目的属性就会被修改以重新创建文件。这个文件用户不要修改。为了取消这个行为,可以点Cancel。
想要移除一个已经输入的EDL文件,取消勾选,再点击OK即可 。
Enclave项目配置
Enclave Project Configuration帮助添加CVE-2020-0551 mitigation来激活配置到现存的可信项目中.
增加新的配置:
打开包含可新项目的解决方案。点击右键,选择Intel SGX Configuration->Enclave Project Configuration。如下图所示。
CVE-2020-0551对话框为用户提供了选择两个级别的CVE-2020-0551缓解配置的界面.
Enclave项目文件
Intel SGX Wizard是用来创建Enclave项目的。他创建的几个文件的文件名是来源于项目的名字。假设项目名字是sample_enclave,以下是Wizard会产生的文件列表。
源文件:
sample_enclave.cpp-主要的源文件,由用户的函数和变量组成。用户可以增加其他的源文件。
sample_enclave_t.c-可信的自动产生的包装函数。不要修改这个文件,因为每次构建都会重新创建他。
sample_enclave.edl-EDL文件。声明哪些函数由enclave导出(受信任)和导入(不受信任)。
头文件:
sample_enclave_t.h-为打包函数可信任的自动产生的头文件。同样不要修改这个文件,因为每次构建都会重新创建他。
资源文件:
sample_enclave.config.xml-指定Enclave配置。
sample_encalve.private.pem-用作给Enclave签名的RSA私钥。
注意:这个私钥一定要保管好!落入别人手中,人家就可以拿你这个私钥创建一个合法的Enclave了.你可以用sgx_sign在一个分开的环境中给enclave签名.
如有误,请指正!感激!
Intel SGX开发者参考书(二)——构建一个SGX项目(一)相关推荐
- 构建一个react项目_您想要了解更多有关React的内容吗? 让我们构建一个游戏,然后玩。...
构建一个react项目 by Samer Buna 通过Samer Buna 您想要了解更多有关React的内容吗? 让我们构建一个游戏,然后玩. (Do you want to learn more ...
- jenkins构建一个maven项目[五]
标签(linux): jenkins 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 构建一个maven项目,即为构建java项目.模拟实验之前先把实验代码推送到 ...
- 不借助idea开发工具构建一个Javaweb项目
不借助idea开发工具构建一个Javaweb项目 目录结构 webappsroot|----------WEB-INF|----------classes(存放字节码)|----------lib(存 ...
- 如何使用 IntelliJ IDEA(2020.2)构建一个JavaWeb项目
如何使用 IntelliJ IDEA(2020.2)构建一个JavaWeb项目 针对 IntelliJ IDEA 2020.2 这个新版本,不管是在创建项目上,还是在进行一些选项的配置上,与之前的版本 ...
- IDEA快速构建一个SpringBoot项目
IDEA快速构建一个SpringBoot项目 1.new一个Spring Initialiar 项目 2.设置项目名字等 3.选择依赖,随便选几个就行,后面再到POM加依赖就行 4.POM文件加依赖, ...
- Intel SGX开发者参考书(四)—— Enclave开发基础(一)
@Intel SGX 读书笔记- Enclave开发基础 本章节介绍以下Enclave开发工具: 编写Enclave函数 调用函数到Enclave内 调用函数到Enclave外 将Enclave与库连 ...
- Intel SGX开发者参考书(四)—— Enclave开发基础(三)
@Intel SGX 读书笔记- Enclave配置文件 Enclave配置文件是一个XML文件,包含用户定义的Enclave参数,此文件是Enclave项目的一部分.sgx_sign使用这个文件作为 ...
- 不借助vue-cli,自行构建一个vue项目
前言: 对于刚刚接触vue的同学来说,直接用官方的构建工具vue-cli来生成一个项目结构会存在一些疑惑,比如: .vue组件 为什么可以写成三段式(tempalte.script.style)? ...
- Intel SGX开发者参考书(五)—— Intel SGX SDK示例代码(一)
@Intel SGX 读书笔记- Intel SGX SDK示例代码 安装Intel SGX SDK后,你可以在[Intel SGX SDK Install Path]src下找到示例代码. 你可以在 ...
- 图解使用Ant构建一个Java项目
先下载ant,解压到一个目录:添加环境变量ant_home,把ant的bin目录添加到path环境变量: 完成之后检查一下,在命令行输入ant,出现找不到build.xml的提示:表示ant安装配置好 ...
最新文章
- 在虚拟机中快速安装 Ubuntu 18.04
- 初次使用cocoapods注意事项
- 安川机器人报错代码_今日 IPO|对标库卡机器人的先惠技术上市 近八成收入靠上汽...
- Redis 常用配置参数
- 运行python脚本时出现no module named cv2怎么解决
- Webpack 简介
- (转载)grep 行号正则匹配字符有颜色
- L1-8 估值一亿的AI核心代码 (20 分)
- L3-015 球队“食物链” (30 分)
- 2018年的安卓开发环境搭建
- Weblogic的下载、安装、使用
- cfiledialog对话框大小_CFileDialog类 通用对话框
- android timepicker分割线颜色,Android TimePicker 的使用
- 浙江众源自控系统有限公司亮相2022生物发酵展(济南)7月14日与您相约
- 用coding向你最爱的人说圣诞快乐
- android视频采集
- 2020年中高级Android面试秘籍(Android基础篇)
- 复合材料在计算机硬件中的应用,碳纤维复合材料在笔记本电脑后盖中的应用研究...
- 问,你的算法复习计划是什么?
- 数据库应用系统(二)需求分析