@Intel SGX 读书笔记…

构建一个Intel SGX项目

VS2017 Professional环境和VS2017 Add-in工具适配。所以我下载了VS2017 Professional版做实验。

创建一个Enclave

  1. 在VS2017菜单栏中选择文件——>新建——>项目
  2. 选择Visual C++ ——>Intel SGX Enclave Project,根据自己的需要修改名称、位置和解决方案名称。
  3. 点击OK


  1. 点击Next跳转到Enclave设置页。
  2. 使用适当的配置设置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减缓控制流级配置

使用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 SelectMisc 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项目(一)相关推荐

  1. 构建一个react项目_您想要了解更多有关React的内容吗? 让我们构建一个游戏,然后玩。...

    构建一个react项目 by Samer Buna 通过Samer Buna 您想要了解更多有关React的内容吗? 让我们构建一个游戏,然后玩. (Do you want to learn more ...

  2. jenkins构建一个maven项目[五]

    标签(linux): jenkins 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 构建一个maven项目,即为构建java项目.模拟实验之前先把实验代码推送到 ...

  3. 不借助idea开发工具构建一个Javaweb项目

    不借助idea开发工具构建一个Javaweb项目 目录结构 webappsroot|----------WEB-INF|----------classes(存放字节码)|----------lib(存 ...

  4. 如何使用 IntelliJ IDEA(2020.2)构建一个JavaWeb项目

    如何使用 IntelliJ IDEA(2020.2)构建一个JavaWeb项目 针对 IntelliJ IDEA 2020.2 这个新版本,不管是在创建项目上,还是在进行一些选项的配置上,与之前的版本 ...

  5. IDEA快速构建一个SpringBoot项目

    IDEA快速构建一个SpringBoot项目 1.new一个Spring Initialiar 项目 2.设置项目名字等 3.选择依赖,随便选几个就行,后面再到POM加依赖就行 4.POM文件加依赖, ...

  6. Intel SGX开发者参考书(四)—— Enclave开发基础(一)

    @Intel SGX 读书笔记- Enclave开发基础 本章节介绍以下Enclave开发工具: 编写Enclave函数 调用函数到Enclave内 调用函数到Enclave外 将Enclave与库连 ...

  7. Intel SGX开发者参考书(四)—— Enclave开发基础(三)

    @Intel SGX 读书笔记- Enclave配置文件 Enclave配置文件是一个XML文件,包含用户定义的Enclave参数,此文件是Enclave项目的一部分.sgx_sign使用这个文件作为 ...

  8. 不借助vue-cli,自行构建一个vue项目

    前言: 对于刚刚接触vue的同学来说,直接用官方的构建工具vue-cli来生成一个项目结构会存在一些疑惑,比如:   .vue组件 为什么可以写成三段式(tempalte.script.style)? ...

  9. Intel SGX开发者参考书(五)—— Intel SGX SDK示例代码(一)

    @Intel SGX 读书笔记- Intel SGX SDK示例代码 安装Intel SGX SDK后,你可以在[Intel SGX SDK Install Path]src下找到示例代码. 你可以在 ...

  10. 图解使用Ant构建一个Java项目

    先下载ant,解压到一个目录:添加环境变量ant_home,把ant的bin目录添加到path环境变量: 完成之后检查一下,在命令行输入ant,出现找不到build.xml的提示:表示ant安装配置好 ...

最新文章

  1. 在虚拟机中快速安装 Ubuntu 18.04
  2. 初次使用cocoapods注意事项
  3. 安川机器人报错代码_今日 IPO|对标库卡机器人的先惠技术上市 近八成收入靠上汽...
  4. Redis 常用配置参数
  5. 运行python脚本时出现no module named cv2怎么解决
  6. Webpack 简介
  7. (转载)grep 行号正则匹配字符有颜色
  8. L1-8 估值一亿的AI核心代码 (20 分)
  9. L3-015 球队“食物链” (30 分)
  10. 2018年的安卓开发环境搭建
  11. Weblogic的下载、安装、使用
  12. cfiledialog对话框大小_CFileDialog类 通用对话框
  13. android timepicker分割线颜色,Android TimePicker 的使用
  14. 浙江众源自控系统有限公司亮相2022生物发酵展(济南)7月14日与您相约
  15. 用coding向你最爱的人说圣诞快乐
  16. android视频采集
  17. 2020年中高级Android面试秘籍(Android基础篇)
  18. 复合材料在计算机硬件中的应用,碳纤维复合材料在笔记本电脑后盖中的应用研究...
  19. 问,你的算法复习计划是什么?
  20. 数据库应用系统(二)需求分析

热门文章

  1. 使用Arduino+L298N控制光驱两项四线步进电机
  2. otg usb 定位_怎样打开安卓手机外接USB功能(即OTG功能)
  3. Testdisk 修复磁盘分区表丢失
  4. vim打开文件时显示行号
  5. 辽宁粮食产量438亿斤 农业供给侧结构性改革不断优化
  6. 计算机网络安全 的论文,计算机网络安全论文6000字
  7. GitHub的Fork 是什么意思
  8. 使用winfrom调用BarTender实现标签的打印
  9. 如何简单进行CAD图层绘图?
  10. Road_slam论文阅读及理解