这篇文章为读者提供了英特尔SGX技术的概述。在第一部分中,我将探讨为支持SGX而在英特尔平台上增加的功能,重点是处理器和内存;然后,我解释Enclave的管理和生命周期;最后,我详细介绍了Enclave的两个特征:秘密和证书。

介绍

英特尔SGX是一项旨在满足可信计算需求的技术,其开发方式类似于ARM TrustZone,但这个是针对台式机和服务器平台。它允许用户域代码创建安全区的私有内存区域,这些区域与以相同或更高特权级别运行的其他进程隔离。Enclave中运行的代码与其他应用程序,操作系统,系统管理程序等有效隔离。

它于2015年与第六代Intel Core处理器一起推出,该处理器基于Skylake微体系结构。可以通过在设置了“ 结构化扩展功能叶”标志的情况下执行CPUID指令,并检查EBX寄存器的第二位是否已设置,来检查SGX支持。为了能够使用SGX,必须通过BIOS启用了SGX,并且实际上只有少数BIOS支持此技术,这是它没有被广泛使用的原因之一。

总览

英特尔SGX可以总结为以下几点:

·应用程序分为两部分:安全部分和非安全部分;

·应用程序启动安全区,该安全区放置在受保护的内存中;

·当一个安全区域函数被调用时,只有安全区域内的代码才能看到其数据,外部访问总是被拒绝;返回时,安全区数据将保留在受保护的内存中。

安全执行环境是宿主进程的一部分:

·该应用程序包含其自己的代码,数据和安全区域;

·Enclave也包含自己的代码和数据。

·SGX保护安全区代码和数据的机密性和完整性;

·Enclave进入点是在编译时预定义的;

·支持多线程(但实现起来并不容易);

·一个安全区可以访问其应用程序的内存,但不能反过来。

使用说明

英特尔SGX定义了18条新指令:13条由supervisor使用,5条由用户使用。所有这些指令均以微代码实现(以便可以修改其行为)。

请参阅下面的完整说明列表:

结构体

英特尔SGX还定义了13种新的数据结构:8种用于安全区管理,3种用于内存页管理,2种用于资源管理。请参阅下面的完整结构列表。

在以下各节中,我将详细介绍相关的指令和结构,然后对它们如何用于实现某些功能的高级解释。

内存

Enclave页面缓存(EPC)

安全区代码和数据放置在安全区页面缓存(EPC)的特殊存储区域中。使用新的专用芯片Memory Encryption Engine(MEE)对此存储区域进行加密,内存总线上的外部读取只能观察加密的数据,仅在物理处理器内核内部时才解密页面,密钥在引导时生成,并存储在CPU中。

扩展了传统的页面检查功能,以防止外部访问EPC页面。

Enclave页面缓存映射(EPCM)

区页面高速缓存地图(EPCM)结构被用于存储页面的状态,它位于受保护的内存中,其大小限制了EPC的大小(由BIOS设置,最大128MB),它包含每个页面的配置,权限和类型。

内存管理

结构体

页面信息(PAGEINFO)

该PAGEINFO结构被用作一个参数,以EPC管理指令引用的页面,它包含其线性和虚拟地址,以及指向SECINFO和SECS结构的指针。

安全信息(SECINFO)

该SECINFO结构用于存储页面的元数据:访问权限(读/写/执行)和类型(SECS,TCS,REG,或VA)。

分页加密元数据(PCMD)

该PCMD结构用于跟踪相关联的一个驱逐页面的元数据。它包含页面所属的安全区的标识,指向SECINFO结构的指针和MAC。

版本阵列(VA)

该VA结构是用来存放从EPC驱逐页的版本号。这是一种特殊的页面类型,包含512个8字节的插槽,用于存储版本号。

使用说明

EPA-此指令分配一个4KB的内存页面,其中将包含页面版本号数组(VA),以防止重放,每个元素的长度为64位。

EBLOCK-该指令阻止对准备移出的页面的所有访问,将来对该页面的所有访问都将导致页面错误(“页面被阻止”)。

ETRACK-此指令从EPC 组织页面。该页面必须已经正确准备:必须被阻止并且TLB不能对其进行引用,在将其写入外部存储器之前,对页面进行加密,并生成版本号和元数据,并执行最终的MAC。

ELDB / ELDU-此指令将先前退出的页面(是否处于阻塞状态)加载到内存中。它检查元数据的MAC,版本号(来自相应的VA条目)以及页面加密的内容。如果验证成功,则将页面内容解密并放置在所选的EPC页面中,并删除相应的VA条目。

说明

EPC内存由BIOS定义并且大小受限制。SGX提供了一种从EPC中删除页面,将其放置在不受保护的内存中并在以后进行恢复的方法。由于EPC页面管理说明,页面保持了相同的安全性,该说明允许对页面进行加密并生成其他元数据。在从所有处理器逻辑核心中删除了引用该页面的所有缓存条目之前,无法删除该页面,内容以页面的粒度(4KB)导出或导入。

内存中的内容

SGXEnclave控制结构(SECS)

每个Enclave都与一个SECS结构相关联,该结构将包含其元数据(例如,其哈希和大小)。任何安全或非安全代码都无法访问它,只能由处理器本身访问,一旦实例化,它也是不可变的。

线程控制结构(TCS)

每个Enclave至少与一个TCS结构相关联,该结构指示进入Enclave的执行点。由于SGX支持多线程,因此安全区可以拥有与TCS一样多的活动线程,像SECS结构一样,它只能由处理器访问,并且也是不可变的。

保存区域(SSA)

每个TCS至少与一个SSA结构相关联,该结构用于在异常和中断处理期间保存处理器的状态,退出时写入,恢复时读取。

堆栈

每个Enclave都可以使用其栈空间和堆空间。该RBP和RSP寄存器保存进入和退出的时候,但他们的值不会改变,堆不是内部处理的,Enclave需要它们自己的分配器。

处理器 Enclave

措施

Enclave措施

每个Enclave均由其属性以及其页面的位置,内容和保护组成的哈希表示。具有相同散列的两个Enclave是相同的,此措施称为MRENCLAVE,用于检查Enclave的完整性。

签署者措施

每个Enclave也由其作者签名,MRSIGNER包含作者的公共密钥的哈希。MRENCLAVE和MRSIGNER是使用SHA-256哈希函数生成的。

结构体

EINIT结构(EINITTOKEN)

该EINITTOKEN结构用于由EINIT指令,以检查是否Enclave被允许执行,它包含安全区的属性,哈希和签名者身份。使用通过启动密钥执行的HMAC对其进行身份验证。

Enclave签名结构(SIGSTRUCT)

每个安全区都与一个SIGSTRUCT结构相关联,该结构由其作者签名,并包含安全区度量,签名者公钥,版本号(ISV,反映安全级别)和产品标识符(ISVPRODID,以区分来自同一作者的安全区) 。它可以确保Enclave未被修改,然后使用其他密钥重新签名。

使用说明

ECREATE-此指令实例化一个新的Enclave,定义其地址空间和信任根证书,这些信息存储在新分配的SECS中。

EADD-此指令允许向Enclave添加新页面,操作系统完全负责选择页面及其内容,EPCM的初始条目表示页面类型及其保护。

EEXTEND -此指令允许按256字节的块将页面内容添加到Enclave测量中,必须调用16次才能将整个页面添加到度量。

EINIT-此指令在初始化之前检查安全区域是否与其EINITTOKEN(相同的度量和属性)相对应,它还检查令牌是否已用启动密钥签名。

EREMOVE -此指令从Enclave上永久删除一页。

说明

1. 应用程序请求将其区域加载到内存中;

2. 所述ECREATE指令创建并填充SECS结构;

3. 每页都使用EADD指令加载到受保护的内存中;

4. 使用EEXTEND指令将每一页添加到Enclave的度量;

5. 在EINIT指令定型Enclave。

Enclave进入/退出

使用说明

EENTER-此指令将控制权从应用程序转移到安全区域内的预定位置。它检查TCS是否可用,并清除TLB条目,然后将处理器置于隔离模式,并保存RSP / RBP和XCR0寄存器。最后,它禁用了基于精确事件的采样(PEBS),以使Enclave执行看起来像一条很大的指令。

EEXIT-该指令将进程放回其原始模式,并清除位于安全区域内地址的TLB条目。控制权转移到位于应用程序内并在RBX寄存器中指定的地址,并且TCS结构被释放。安全区需要在退出前清除其寄存器,以防止数据泄漏。

说明

Enclave进入

1. EENTRY指令已执行;

2. 应用程序上下文已保存;

3. 处理器处于隔离模式。

Enclave出口

1. 执行EEXIT指令;

2. 处理器进入正常模式。

中断处理

使用说明

ERESUME-该指令从当前SSA恢复上下文并恢复执行。

说明

中断和异常导致异步安全区出口(AEX)。在异步退出指针(AEP)指向位于后异常已被处理,将恢复执行的应用程序中的处理程序中断服务程序(ISR)。通过执行ERESUME指令,处理程序可以决定是否继续执行安全区域的执行。

当AEX发生时,Enclave的上下文被保存在当前SSA和应用上下文被恢复,执行ERESUME指令时,将恢复Enclave上下文。该TCS包含一个计数器表示当前SSA,形成上下文的堆栈。

处理中断

1. 中断或异常到达处理器;

2. Enclave上下文已保存,应用程序上下文已还原;

3. 执行在操作系统的处理程序中继续;

4. 处理程序将(IRET)返回到AEP;

5. 如果AEP决定恢复Enclave执行,则执行ERESUME;

6. 恢复先前保存的安全区上下文;

7. 恢复在Enclave中停止的位置执行。

特征 Sealing

使用说明

EGETKEY-安全区使用此指令来访问平台提供的不同密钥,每个键可启用不同的操作(密封,证明)。

说明

实例化一个安全区时,其代码和数据将受到保护,以防止外部访问,但是当它停止时,所有数据都会丢失。密封是一种将数据安全地保存在安全区域外部(例如在硬盘驱动器上)的方法。Enclave必须使用EGETKEY指令检索其密封钥匙,它使用此密钥来加密并确保其数据完整性,Enclave作者选择使用的算法。

使用Enclave身份

可以使用Enclave标识进行密封。然后,密钥派生基于MRENCLAVE的值,两个不同的安全区具有不同的密钥,但是同一安全区还具有两个版本,这会阻止数据的本地迁移。

使用签名者身份

也可以使用签名者身份进行密封。密钥派生然后基于MRSIGNER的值,两个不同的安全区仍具有不同的密钥,但是一个安全区的两个版本共享相同的密钥,并且可以读取密封的数据。如果多个Enclave使用相同的密钥签名,则它们都可以读取彼此的数据。

安全版本号(SVN)

不应允许旧版本的Enclave读取由更高版本的Enclave密封的数据。为防止这种情况,请使用安全版本号(SVN),每次更新都会影响安全区的安全性,它是一个递增的计数器,密钥是使用SVN派生的,Enclave可以检索与当前或更旧的安全级别相对应的密钥,但不能更新。

Attestation

结构体

密钥请求(KEYREQUEST)

该KEYREQUEST结构被用作输入到EGETKEY指令,它允许选择要获取的密钥以及派生可能需要的其他参数。

报告目标信息(TARGETINFO)

该TARGETINFO结构被用作用于输入ereport的指令,它用于标识哪个区域(哈希和属性)将能够验证CPU生成的REPORT。

报告(REPORT)

REPORT结构是输出ereport的指令。它包含安全区的属性,度量,签名者身份以及一些要在源安全区和目标安全区之间共享的用户数据,处理器使用Report Key在此结构上执行MAC 。

使用说明

EREPORT-安全区使用此指令来生成REPORT结构,该结构包含有关它的多个信息,并使用目标安全区的Report Key进行身份验证。

说明

安全区代码和数据在初始化之前为纯文本格式。从技术上讲,可以对部分进行加密,但不能预安装解密密钥(否则它将不提供任何其他安全性),秘密必须来自外部,可能是密钥和敏感数据。该Enclave必须能够向第三方证明它可以被信任(未被篡改)并且可以在合法平台上执行。

存在两种类型的证明:

·本地证明:同一平台的两个Enclave之间的证明过程;

·远程证明:Enclave和不在平台上的第三方之间的证明过程。

本地证明

1. 在安全区A和安全区B之间必须已经建立了一个通道。安全区A使用该通道来检索B 的MRENCLAVE。

2. 安全区A 用B 的MRENCLAVE调用EREPORT为其生成签名的报告。

3. 区域B调用EGETKEY检索其报告密钥并验证EREPORT结构的MAC ,如果有效,则该Enclave应为预期的并在合法平台上运行。

远程认证

远程认证需要一个称为Quoteing Enclave(QE)的体系结构。此Enclave通过使用另一个特殊密钥Provisioning Key对其进行签名,来验证REPORT(可本地验证)并将其转换为QUOTE(可远程验证)。

1. 最初,安全区告知应用程序它需要位于平台外部的机密。该应用程序与服务器建立安全通信,服务器回应challenge,以证明Enclave的执行未被篡改,并且其执行的平台是合法的。

2. 该应用程序给出了“ Enclave”的身份以及对其Enclave的challenge;

3. 该安全区生成一个清单,其中包含质询答案和短暂的公共密钥,稍后将使用这些清单来保护服务器与安全区之间的通信。它生成清单的哈希,该清单包含在EREPORT指令的用户数据部分中。指令为Enclave生成一个REPORT,将清单与Enclave联系起来,Enclave将REPORT传递给应用程序。

4. 应用程序将报告传输到报价区域进行验证和签名。

5. 该QE检索其报告的主要使用EGETKEY指令并验证报告。它创建QUOTE结构并使用其Provisioning Key对其进行签名,然后再将其返回给应用程序。

6. 应用程序将QUOTE和关联的清单发送到服务器以进行验证。

7. 服务器使用英特尔提供的证明服务来验证QUOTE签名。然后,它使用QUOTE用户数据中的哈希检查清单完整性。最后,它确保清单包含对challenge的预期答案。

结论

这篇文章概述了SGX内部,我已经了解了如何管理内存,如何加载和调用安全区。

在下一篇博文中,我将介绍SGX外部组件(所有未嵌入CPU的组件),我将讨论SGXEnclave,SDK和PSW的开发过程。

参考及来源:https://blog.quarkslab.com/overview-of-intel-sgx-part-1-sgx-internals.html

sgx芯片服务器,英特尔SGX概述:SGX内部实现分析研究(part1)相关推荐

  1. q85 芯片服务器,英特尔产品路线图曝光:将发布多款新品

    访问:Page 1 Intel Launch Update (ILU) Full Package – January 2013 网页快照 这个路线图包括下个季度推出的处理器型号数量和详细的推出日期 以 ...

  2. 人人都在加注芯片,英特尔却一头扎向医疗

    2021-04-26 10:43 导语:从技术合作到资本加持,芯片大佬为啥如此看重医疗? 你有没有发现,生态已经成为一个言无不及的概念?得益于互联网大厂的加持,从BAT到TMD,生态的概念为这些公司和 ...

  3. 芯片巨头英特尔放弃竞争迷你计算机市场

    英特尔曾希望通过Galileo与基于ARM架构的树莓派进行正面竞争,而Edison则是一套完整的开发者套件,并且体积非常小巧,只有SD卡大小. 腾讯数码讯(Bear)快跟英特尔的Edison.Joul ...

  4. 苹果A10芯片挑战英特尔?有点早但是值得关注

    汽车厂商开始研发自动驾驶技术,手机厂商开始研发芯片,传统的品牌企业和供应商之间的关系正在悄然变化.英特尔已经很长一段时间没有遇到这样的威胁,但是现在这种威胁可能将永远存在.事实上,苹果最新推出的A10 ...

  5. 英特尔RealSense激光雷达摄像头L515拆解分析

    摘自:https://www.toutiao.com/i6874405744960078339/?tt_from=weixin&utm_campaign=client_share&wx ...

  6. 在日常使用中关于英特尔睿频加速的优劣分析(附带关闭睿频加速的两种方法)

    在日常使用中关于英特尔睿频加速的优劣分析 事情背景 事情起因 过程分析测试 日常使用分析 结论 开关睿频加速(寻找解决方法的朋友可以直接跳到这里来) 方法1:在电源管理操控是否开启睿频加速(推荐) 解 ...

  7. E5芯片用于什么服务器,英特尔新芯:至强E5不得不说的秘密

    1全新编号认识至强E5 2012年对于英特尔来说,至强E5当然是英特尔向服务器市场提供的最好的芯片.从入门级高端CPU产品更新到双路.四路市场新品至强E5即将发布,英特尔似乎以更加强劲的形象登台,正如 ...

  8. 服务器芯片工艺,英特尔10nm工艺Ice Lake-SP服务器芯片最高达38核

    2019-10-31 14:31 [天极网DIY硬件频道]根据英特尔的说法,2020年将首次在一年内推出两代服务器处理器,升级换代的间隔缩短到4-5个月.2020年首先是采用14nm工艺的Cooper ...

  9. CES 2019开胃菜竟然是芯片,英特尔 英伟达 高通 华为 AMD已经开打!

    来源:网易智能 1月8日消息,一年一度的CES即将在美国拉斯维加斯开幕,开幕前夕,各家厂商纷纷推出新品,其中最突出的,便是几家半导体厂商推出的最新款芯片,让CES 2019一开始就变得纷繁热闹.下面, ...

  10. 微软将自研芯片,英特尔一夜蒸发850亿,芯片巨头走下神坛?

    本文来源作者 杨剑勇 今年,英特尔极其尴尬的年份,尽管作为一家年营收超700亿美元的芯片巨无霸,对全球科技发展有着举足轻重的地位,但芯片制造工艺.资本市场的表现难掩失落.尤其7nm芯片受阻,导致在资本 ...

最新文章

  1. 亚马逊ses如何发qq_使用Amazon SES发送电子邮件
  2. 企业该如何实现数字化转型?
  3. java兰顿蚂蚁解题思路_程序员面试金典 - 面试题 16.22. 兰顿蚂蚁(deque模拟)
  4. 汤家凤高等数学基础手写笔记-曲线与曲面积分
  5. vue.js插件使用(01) vue-resource
  6. 博客园贵团队可以给个解释么?
  7. KVM 虚拟机在物理主机之间迁移的实现 -- 静态迁移/动态迁移/存储迁移
  8. java 混淆 js_Vue javascript和css混淆
  9. 苹果新的编程语言 Swift 语言进阶(七)--枚举、结构、类
  10. mysql之前缀索引
  11. dll 源码_软件源代码调试,你用过什么方法?看我介绍上位机源码调试
  12. C# TeeChart使用心得,干货
  13. 联想服务器TS540装系统蓝屏,联想装win7蓝屏0x000000a5超详细图文解决方案
  14. unity2018关联不到vs_vs2015与unity2018兼容性问题
  15. 大学毕业半年后的若干感想
  16. 计算机专业教材顺序,自考计算机及应用看书顺序
  17. leetcode 741. 摘樱桃
  18. gazebo创建机器人模型01
  19. 亮点前瞻 | 首届 ServerlesssDays · China 大会议程发布
  20. ae缺少效果opticalflares_Optical Flares 镜头光晕AE插件

热门文章

  1. 视频码率、分辨率、帧率的关系
  2. 计算机音乐数字乐谱青芒,弱水三千(戏腔付)
  3. python的集成开发环境idle是有什么编写而成_Python 的集成开发环境IDLE是由( )编写而成。...
  4. xgene:之ROC曲线、ctDNA、small-RNA seq、甲基化seq、单细胞DNA, mRNA
  5. 清明html模板,HTML5清明节柳叶飘动特效
  6. 您的Mac已成功加入Wi-Di网络,但是无法访问互联网问题及解决方案
  7. 几点减几点怎么列算式_时间加减法怎么算
  8. ab 与 abs 测试详解
  9. 电脑出现问题。你的PIN不可用,请单击以重置——解决方案总结
  10. CSDN2018博客之星评选结果预测第二弹