《Intel® 64 and IA-32体系结构: 软件开发人员手册》卷3d: 系统编程指南,第4部分
注:Intel 64和ia-32架构软件开发人员手册包含9卷:
基本体系结构,订单编号253665;
指令集参考a-m,订单编号253666;
指令集引用n-u,订单编号253667;
指令集引用v-z,订单编号326018;
指令集参考,订单编号334569;
系统编程指南,第1部分,订单编号253668;
系统编程指南,第2部分,订单编号253669;
系统编程指导,第3部分,订单编号326019;
系统编程指南,第4部分,订单编号332831。
在评估您的设计需要时,请参考所有的9卷。
订单编号: 332831-060US
2016年9月
英特尔技术的特性和优点取决于系统配置,可能需要启用硬件、软件或服务激活。 可以在intel.com或OEM或零售商了解更多信息。
没有计算机系统是绝对安全的。所以对于丢失或被盗的数据或由此造成的损失,英特尔不承担任何责任。
您不能使用本文档来分析关于英特尔产品的任何侵权或其他法律问题。您同意授予英特尔对以后起草的任何专利权利的非排他性和免版税许可,其中包括本文所披露的主题。本文件不授予任何知识产权的许可(明示或默示,禁止反言或其他方式)。所描述的产品可能包含设计缺陷或错误,被称为勘误,这可能导致产品偏离已发布的规格。目前的特征勘误可根据要求提供。
本文档包含有关产品,服务或开发过程的信息。这里提供的所有信息均不会更改。请联系您的英特尔代表,获取最新的英特尔产品规格和路线图。
在此文件中有一个订单号的文件副本,或其他的Intel文献,可以通过调用1-800-548-4725或访问http://www.intel.com/design/literature.htm.来获得。英特尔、英特尔的标志、英特尔的Atom、英特尔的核心、英特尔的速度步、MMX、奔腾、VTune和Xeon都是英特尔公司在美国或其他国家的商标。其他名称和品牌可能被认为是他人的财产。
版权归1997-2016,英特尔公司。所有权利保留。
37章
英特尔软件防护扩展的简介
37.1概述
英特尔的软件防护扩展(IntelSGX)是一套用于英特尔架构处理器的内存访问的指令和机制。英特尔SGX可以包含两个指令扩展集合,称为SGX1和SGX2,见表37-4。SGX1扩展允许应用程序实例化一个受保护的容器,该容器被称为飞地。一个飞地是应用程序地址空间中的一个受保护区域(参见图37-1),它提供了机密性和完整性,即使在有特权的恶意软件存在的情况下。从任何不属于这块飞地的软件上访问这块飞地的内存区域都是被禁止的。SGX2扩展允许额外的灵活性,在一个飞地上的飞地资源和线程执行的运行时进行管理。
第38章介绍了在英特尔SGX架构中交互的主要概念、对象和数据结构格式。第39章涵盖了从准备一个飞地、到将控制权转移到飞地,以及对飞地代码和系统软件的编程考虑,为飞地的执行提供支持。第40章描述了在执行包围代码时由事件引起的异步令牌退出(AEX)的行为。第41章介绍了在英特尔SGX提供的指导和相关叶功能的语法和操作细节。第42章描述了国际田联和英特尔与英特尔的64个档案的相互作用。第43章介绍了I英特尔SGX对应用程序调试、性能分析和性能监视的支持。
37.2飞地交互和保护
英特尔SGX允许将应用程序的受保护部分分配到明确的位置。在这块飞地建成之前,这块飞地的代码和数据可以免费进行检查和分析。受保护的部分被加载到测量其代码和数据的飞地。 一旦应用程序的保护部分的代码和数据被加载到一个飞地,它就会受到外部软件访问的保护。一块飞地可以向一个远程部分证明它的身份,并提供必要的构建块来保证密钥和凭证的安全供应。应用程序还可以请求一个特定于特定平台的密钥,它可以用来保护它想要存储在这块飞地之外的密钥和数据。
英特尔SGX为英特尔架构引入了两项重要功能。首先是飞地内存访问语义的变化。第二种是保护应用程序的地址映射。
37.3飞地生命周期
飞地内存管理分为两个部分:地址空间分配和内存承诺。地址空间分配是飞地可能使用的逻辑地址范围的规范。这个范围被称为ELRANGE。内存承诺是在分配的地址空间内分配实际内存资源(如页面)。这两阶段技术允许飞地控制内存使用,并在不占用内存资源的情况下进行动态调整,而不需要占用内存资源。承诺给这块飞地增加了物理页面。操作系统可以支持单独的分配和提交操作。
在飞地创建过程中,一个飞地的代码和数据是从一个清晰的文本源加载的,也就是来自非飞地的内存。
不受信任的应用程序代码开始使用一个初始化的飞地,通常是使用由Intel SGX提供的EENTER叶子函数,来将控制转移到驻留在受保护的飞地页面缓存(EPC)中的飞地代码。这个飞地代码通过EEXIT叶子函数返回给调用者。在这块飞地上,控制权由硬软件转移到这块飞地的软件中。这个飞地中的软件将堆栈指针切换到一个内部的位置。当从这块飞地返回时,软件交换堆栈指针然后执行EEXIT叶子函数。
在支持SGX2扩展的处理器上,一个飞地的编写者可以使用SGX2指令集将内存添加到一个飞地,在这个飞地构建并运行之后。这些指令允许向飞地添加额外的内存资源,以便在堆之类的区域中使用。此外,SGX2指令允许这块飞地向这块飞地添加新的线程。SGX2的特性为软件模型提供了额外的功能,而不改变Intel新架构的安全特性。
从飞地调用外部程序可以使用EEXIT叶函数来完成。软件将使用EEXIT和可信部分与不受信任部分之间的软件约定。
一个活跃的飞地消耗来自飞地页面缓存的资源(EPC,见第37.5节)。Intel SGX提供了一个EREMOVE指令,EPC管理器可以使用它来收回提交给一个飞地的EPC页面。当飞地被拆除时,EPC经理在每一个飞地上使用EREMOVE。在成功执行EREMOVE后,EPC页面可用于分配到另一个飞地。
37.4数据结构和飞地操作
有两个与数据运行有关的主要数据结构,SGX Enclave控制结构(SECS,见第38.7节)和
线程控制结构
(TCS,参见第38.8节)。
每个飞地都有一个SECS。SECS包含有关硬件使用并且不能被软件直接访问的飞地的元数据。在SECS中包含一个字段,用于存储飞地构建测量值。这个字段,MRENCLAVE,由ECREATE指令初始化,并由每个EADD和EEXTEND更新。它被EINIT锁定。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)