看雪论坛
发新帖

[翻译]Intel软件开发指南翻译卷3第4部分-1

敲代码的猫 2017-7-3 08:40 2967

Intel® 64 and IA-32体系结构: 软件开发人员手册》卷3d: 系统编程指南,第4部分

:Intel 64ia-32架构软件开发人员手册包含9:

基本体系结构,订单编号253665;

指令集参考a-m,订单编号253666;

指令集引用n-u,订单编号253667;

指令集引用v-z,订单编号326018

指令集参考,订单编号334569;

系统编程指南,第1部分,订单编号253668;

系统编程指南,第2部分,订单编号253669;

系统编程指导,第3部分,订单编号326019;

系统编程指南,第4部分,订单编号332831

在评估您的设计需要时,请参考所有的9卷。

 

 

 

 

订单编号: 332831-060US

20169

 

英特尔技术的特性和优点取决于系统配置,可能需要启用硬件、软件或服务激活。 可以在intel.comOEM或零售商了解更多信息。

没有计算机系统是绝对安全的。所以对于丢失或被盗的数据或由此造成的损失,英特尔不承担任何责任。

您不能使用本文档来分析关于英特尔产品的任何侵权或其他法律问题。您同意授予英特尔对以后起草的任何专利权利的非排他性和免版税许可,其中包括本文所披露的主题。本文件不授予任何知识产权的许可(明示或默示,禁止反言或其他方式)。所描述的产品可能包含设计缺陷或错误,被称为勘误,这可能导致产品偏离已发布的规格。目前的特征勘误可根据要求提供。

本文档包含有关产品,服务或开发过程的信息。这里提供的所有信息均不会更改。请联系您的英特尔代表,获取最新的英特尔产品规格和路线图。

在此文件中有一个订单号的文件副本,或其他的Intel文献,可以通过调用1-800-548-4725或访问http://www.intel.com/design/literature.htm.来获得。英特尔、英特尔的标志、英特尔的Atom、英特尔的核心、英特尔的速度步、MMX、奔腾、VTuneXeon都是英特尔公司在美国或其他国家的商标。其他名称和品牌可能被认为是他人的财产。

 

 

版权归1997-2016,英特尔公司。所有权利保留。

 

 

 

37

英特尔软件防护扩展的简介

37.1概述

英特尔的软件防护扩展(IntelSGX)是一套用于英特尔架构处理器的内存访问的指令和机制。英特尔SGX可以包含两个指令扩展集合,称为SGX1SGX2,见表37-4SGX1扩展允许应用程序实例化一个受保护的容器,该容器被称为飞地。一个飞地是应用程序地址空间中的一个受保护区域(参见图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节)。

每个飞地都有一个SECSSECS包含有关硬件使用并且不能被软件直接访问的飞地的元数据。在SECS中包含一个字段,用于存储飞地构建测量值。这个字段,MRENCLAVE,由ECREATE指令初始化,并由每个EADDEEXTEND更新。它被EINIT锁定。

每个飞地都包含一个或多个TCS结构。TCS包含硬件用来保存和恢复在进入/退出这个飞地时的线程特定信息的元数据。有一个字段,FLAGS,可以被软件访问。这个字段只能通过调试飞地来访问。标记位DBGOPTIN允许单步进入与TCS关联的线程。(参见38.8.1的一节)

在执行ECREATE(见表37 - 1)时创建SECS。可以使用EADD指令或SGX2指令创建TCS(参见表37 - 2)

37.5 ENCLAVE PAGE CACHE

飞地页面缓存(EPC)是用于存储飞地页面的安全存储,当它们是执行飞地的一部分时。对于EPC页面,硬件执行额外的访问控制检查,以限制对页面的访问。在执行当前的页面访问检查和翻译之后,硬件会检查EPC页面是否可以访问当前正在执行的程序。通常,EPC页面只能由执行的地址的所有者或正在设置EPC页面的指令访问

EPC中的页面可以是有效的,也可以是无效的。EPC中的每一个有效页面都属于一个飞地实例。每个飞地实例都有一个EPC页面,它保存了它的SECS。每个EPC页面的安全元数据被保存在一个内部的微型体系结构结构中,称为飞地页面缓存映射(EPCM,见第37.5.1)

EPC由特权软件管理。Intel SGX提供了一组用于添加和删除EPC和来自EPC的内容的指令。EPC可以在引导时由BIOS配置。在EPC内存是系统DRAM的一部分的实现中,EPC的内容被加密引擎保护。

37.5.1 Enclave页面缓存映射(EPCM

EPCM是处理器用来跟踪EPC内容的安全结构。EPCMEPC中的每个页面保留一个条目。EPCM的格式是微架构的,因此是依赖于实现的。但是,EPCM包含以下架构信息:

EPC页面在有效性和可访问性方面的地位。

一个SECS标识符(见页面所属的飞地的38.19)

页面类型:常规的,SECS,TCSVA

允许飞地进入页面的线性地址。

指定的读//执行权限。

EPCM结构在地址转换流中使用,以加强EPC页面上的访问控制。

38 - 27描述了EPCM结构,并在小节中描述了概念访问控制流

38.5 EPCM条目由处理器管理,作为各种指令流的一部分。

37.6 ENCLAVE指令和INTEL®SGX

英特尔SGX提供的飞地指令由两个指令助记符:ENCLS(环0)和ENCLU(环3)组成)。每个叶子函数使用EAX来指定叶子函数索引,并且可能需要额外的隐式输入寄存器作为参数。ENCLSENCLU指令暗示使用EAXModR / M字节编码不与ENCLSENCLU一起使用。使用附加寄存器不使用ModR / M编码,并且隐含地由相应的叶函数索引暗示。

每个叶函数索引也与一个独特的、叶特有的助记符关联。英特尔SGX指令的长表达式采用ENCLx [LEAF_MNEMONIC]的形式,其中“x”“S”“U” 长形式的表达提供了给定“叶子助记符”的特权级别要求的明确关联。 为了简单起见,本文档中使用了唯一的“Leaf_Mnemonic”名称(省略了ENCLx以方便起见)。

41章描述了单个SGX叶函数的细节。表37 - 1提供了在第6Intel核心处理器中引入的Intel SGX的初始实现中可用指令的摘要。表37 - 1总结了英特尔公司未来英特尔处理器的改进。

37.7发现INTEL®SGX支持并启用附加说明

Intel SGX的支持,以及可获得的和启用的Intel SGX资源的查询CPUID指令。枚举接口包括以下内容:

处理器支持Intel SGXCPUID07HCPUIDEAX = 07HECX = 0H):EBX.SGX [bit 2]中的功能标志枚举。 如果CPUIDEAX = 07HECX = 0H):EBX.SGX = 1,则处理器支持Intel SGX,并需要BIOS通过IA32_FEATURE_CONTROL MSR启用。

如果CPUIDEAX = 07HECX = 0H):EBX.SGX = 1CPUID将通过可用和配置的英特尔新加坡资源的CPUIDEAX = 12H)的可用子树叶进行报告。

CPUID子选项(EAX = 12H)枚举的可用和配置的Intel SGX资源取决于BIOS配置的状态。

37.7.1 Intel® SGX Opt-In配置

在支持Intel SGX的处理器上,IA32_FEATURE_CONTROL提供SGX_ENABLE字段(bit18)。在系统软件可以配置和启用Intel SGX资源之前,BIOS需要将IA32_FEATURE_CONTROL.SGX_ENABLE = 1设置以系统软件的方式使用Intel SGX

设置SGX_ENABLE的语义遵循IA32_FEATURE_CONTROL.LOCKbit 0)的规则。软件是考虑到只有ia32特征控制的情况下,该公司才选择了Intel SGX当且仅当IA32_FEATURE_CONTROL.SGX_ENABLE IA32_FEATURE_CONTROL.LOCK设置为1的时候. IA32_FEATURE_CONTROL.SGX_ENABLE (bit 18)的设置不是由CPUID反映的。

37.7.2 Intel® SGX的枚举叶

如果CPUIDEAX = 07HECX = 0H):EBX.SGX = 1,则处理器还支持在Intel SGX资源和配置上查询具有EAX = 12HCPUID的能力。叶12H中可用的子叶节点数量取决于选择和系统软件配置。CPUID.12H返回的信息是线程特定的; 软件不应该假设,如果在一个硬件线程上支持Intel SGX指令,那么它们也可以在其他地方得到支持。

一个经过适当配置的处理器,可以用CPUID. EAX=12H来显示Intel SGX的功能。并且报告有效信息(非零内容)在三个或多个子叶节点中,参见表37-4

CPUID.(EAX=12HECX=0H)列举了Intel SGX的能力,包括飞地指令操作支持。

CPUIDEAX = 12HECX = 1H)列举了SEX结构中处理器状态配置和扩展配置的英特尔SGX能力(见表38-3)。

CPUIDEAX = 12HECX> 1)枚举了可用的EPC资源。

在支持英特尔SGX1SGX2的处理器上,CPUID leaf 12H subleft 2报告物理内存资源可用于Intel SGX。这些物理内存部分通常由BIOS作为处理器分配保留内存,并且可以在操作系统中作为EPC进行管理。

为了枚举EPC管理器可以使用多少个EPC部分,软件可以从2开始枚举CPUID leaf 12H,并解码子叶类型的编码(EAX 3:0中返回),直到子叶类型无效。CPUID12H的所有无效子叶返回EAX/EBX/ECX/EDX,为0




译注:文章为Intel软件开发指南系列,是在学习汇编的时候找到的译文,详情可见附件

本文由 敲代码的猫 翻译

上传的附件:
本主题帖已收到 0 次赞赏,累计¥0.00
最新回复 (3)
lgjlps 2017-8-24 11:19
2
螺纹控制结构(TCS,参见第38.8节)  这个应该是线程控制结构吧
lgjlps 2017-8-24 11:20
3
第42章描述了国际田联和英特尔与英特尔的64个档案的相互作用
这里也是错得!
lgjlps 2017-8-24 11:23
4
英特尔新加坡资源的CPUID(EAX  =  12H)
返回



©2000-2017 看雪学院 | Based on Xiuno BBS | 域名 加速乐 保护 | SSL证书 又拍云 提供 | 微信公众号:ikanxue
Time: 0.015, SQL: 10 / 京ICP备10040895号-17