CN114651244A - 机密计算机制 - Google Patents

机密计算机制 Download PDF

Info

Publication number
CN114651244A
CN114651244A CN202080077124.3A CN202080077124A CN114651244A CN 114651244 A CN114651244 A CN 114651244A CN 202080077124 A CN202080077124 A CN 202080077124A CN 114651244 A CN114651244 A CN 114651244A
Authority
CN
China
Prior art keywords
capability
memory
access
capabilities
address
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202080077124.3A
Other languages
English (en)
Inventor
D·T·奇斯纳尔
S·W·克勒布施
C·A·M·C·福奈特
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN114651244A publication Critical patent/CN114651244A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/109Address translation for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/1425Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/1425Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block
    • G06F12/1441Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block for a range
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1458Protection against unauthorised use of memory or access to memory by checking the subject access rights
    • G06F12/1466Key-lock mechanism
    • G06F12/1475Key-lock mechanism in a virtual system, e.g. with translation means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/35Indirect addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory management, e.g. access or allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45587Isolation or security of virtual machine instances
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1052Security improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/657Virtual address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages

Abstract

根据第一方面,执行逻辑被配置为执行线性能力转移操作,该线性能力转移操作将物理能力从第一软件模块的分区转移到第二软件模块的分区,而不将其保留在第一软件模块的分区中。根据备选或附加的第二方面,执行逻辑被配置为执行分片操作,由此物理能力被划分为至少两个实例,这些实例随后可以被组合。

Description

机密计算机制
背景技术
传统上,操作系统(OS)能够查看在操作系统上运行的所有应用的所有数据。这里的“查看”表示能够检查和修改应用可以从存储器的(多个)相同区域检查和修改所有相同应用数据。类似地,如果操作系统在管理程序(“hypervisor”)上运行,则管理程序可以查看操作系统和应用的所有数据。这表示分层信任系统,由此,应用信任操作系统,并且操作系统信任管理程序。
最近,引入了“指定位址空间”(“enclave”)的概念,由此应用可以在机密环境中运行,这使得操作系统或管理程序无法访问应用的数据。这消除了分层信任的想法:应用不需要信任操作系统,并且操作系统也不需要信任管理程序。作为示例应用,这将使数据中心的租户能够将其数据保密,不让数据中心的运营方知道。
对存储器的访问可能受到能力系统的限制。“能力”是领域术语,其指代不可伪造的数字机构令牌,例如,该令牌授予对指定存储器地址范围的访问。已知提供在硬件中实施的能力系统。这表示,尝试访问存储器中的某个目标地址的机器代码指令(诸如,加载或存储指令)将触发硬件检查以授予对目标地址的访问的对应能力。所讨论的软件必须拥有并且能够呈现该能力才能被授予访问。
一个示例是CHERI(能力硬件增强RISC指令)。这是通过“胖”指针系统以及对处理器的指令集架构的一些专用添加来实现的。例如,传统加载指令的源操作数通常会指定寄存器,该寄存器保存指向目标地址(在这种情况下为负载的源)的指针。在CHERI中,该指令还需要指定寄存器,该寄存器保存授予对目标地址的访问的能力,从而为指针增加了该能力。寄存器中的能力只能通过专门包括在根据CHERI架构的指令集中的专用机器代码指令来操纵。
能力在存储器中受到保护。硬件存储器能力系统以两种方式做到了这一点。第一种方法是通过限制能力可以存储在存储器中的位置。能力只能存储在特定区域中,并且这些区域中的所有内容都是能力或明确的无效能力值(通常为零)。例如,CAP计算机使用这种模型。第二种方法是使用某种形式的标记存储器,其中不可寻址位在有效能力被存储时被设置,并且在任何其他数据被存储到同一位置时被清除。CHERI(以及M-Machine和其他一些系统)使用这种模型。
在现有的CHERI系统中,能力在地址转换的虚拟地址侧授予对指定范围的虚拟地址的访问。正如本领域技术人员所熟悉的,现在几乎所有的通用计算机系统都使用虚拟存储器。即,该系统包括在虚拟地址空间与(多个)实际物理存储器设备的物理地址空间之间映射的页表(通常实际实现为树)。这样做的原因是从实际的底层物理存储器资源中抽象出由软件使用的地址空间。目标地址由软件在虚拟地址方面被指定,并且系统自动使用页表转换成对应的物理地址。通常,转换是由存储器管理单元(MMU)在硬件中自动完成的。页表可以由低级系统代码填充和管理,诸如管理程序或OS的内核。转换后备缓冲器(TLB)也可以用于高速缓存页表条目。在软件管理的TLB中,TLB由软件遍历页表(或等效的数据结构)来填充,而在硬件管理的TLB中,硬件检查页表以填充TLB。
CHERI能力还提供对没有地址转换的系统中的物理存储器的访问,但不用于提供地址转换的系统上的物理存储器。
发明内容
本公开涉及一种系统,该系统包括:包括一个或多个执行单元的执行逻辑、包括一个或多个存储器单元的存储器、以及用于查找存储器的物理地址空间与虚拟地址空间之间的映射的存储器访问逻辑。执行逻辑被布置为在物理地址空间的相应分区中各自运行多个软件模块,包括执行由软件模块中的当前执行软件模块执行的存储器访问操作。存储器访问操作将虚拟地址范围中的虚拟地址指定为存储器访问操作的目标。存储器访问逻辑被配置为执行以下操作:查找物理地址空间中映射到虚拟地址的物理地址,检查是否在当前执行软件模块有权访问的存储位置中找到授予对所述物理地址的访问的能力,并且如果在存储位置中找到能力,则授予对所述物理地址的访问用于执行存储器访问操作。
根据本文中公开的一个方面,执行逻辑还被配置为执行线性能力转移操作,线性能力转移操作将能力中的一个能力从所述软件模块中的第一软件模块的分区转移到软件模块中的第二软件模块的分区,而不将能力保留在第一软件模块的分区中。
根据本文中公开的第二方面,执行单元被配置为执行分片(“sharding”)操作,由此能力中的一个能力被划分为至少两个实例,并且执行单元还被配置为执行分片重新组合操作,由此实例被重新组合。
第一方面和第二方面可以一起或独立使用。
提供本发明内容是为了以简化形式介绍概念的选择,这些概念将在下面的详细描述中进一步描述。本发明内容并非旨在确定所要求保护的主题的关键特征或基本特征,也不旨在用于限制所要求保护的主题的范围。所要求保护的主题也不限于解决本文中提到的任何或所有缺点的实现。
附图说明
为了帮助理解本公开的实施例并且示出这些实施例如何实施,仅作为示例参考附图,在附图中:
图1是程序栈的示意图,
图1A是根据本文中公开的实施例的计算系统的示意性框图,
图2是虚拟地址与物理地址之间的存储器地址转换的示意图,
图2A是根据本文中公开的实施例的具有标签位的物理地址空间的示意性框图,
图3是根据本文中公开的实施例的能力寄存器集的示意性框图,
图4是根据本文中公开的实施例的指定位址空间或其他这样的存储器分区的示意性框图,
图5是根据本文中公开的实施例的指定位址空间执行程序的示意性框图,
图6是根据本文中公开的实施例的物理线性能力的示例的示意图,以及
图7是根据本文中公开的实施例的对存储器进行分区的方法的流程图。
具体实施方式
本公开涉及一种基于能力的硬件强制隔离系统。根据第一方面,它提供了在地址转换的物理侧的物理地址空间中而不是在地址转换的虚拟侧的虚拟地址空间上应用的能力系统。此外,所公开的系统提供了机制,由此能力可以以“线性”方式在软件模块之间传递,即,像接力棒一样从一个模块传递到另一模块,而不会被第一模块保留。由于这些能力既是物理的又是线性转移的,这些特征一起表示,低级系统软件块(诸如,管理程序或操作系统)可以将针对特定物理地址范围的能力传递给高级软件(诸如,应用),然后应用使对应地址范围中的任何数据对OS或管理程序保密。由于这些能力是在物理地址范围上实施的,因此即使是负责填充地址转换页表的低级系统代码也无法绕过它。
在没有能力的情况下,指定位址空间是经由反向查找来实现的。在地址转换之后,MMU查找谁拥有该页面。通常存在平面表,每个物理页面都有一个条目,它限定了页面的所有者。有时,这是经由硬件和软件的混合来完成的,其中硬件检查表明“该页面是秘密的”位,并且软件实施秘密页面由单个所有者拥有的这一不变性。备选地,有时它完全在软件中完成,其中有一小部分受信任的软件实施不变量。这给出了可以用纯线性能力表达的相同的东西:运行软件可以验证它是给定页面的唯一所有者并且它没有暴露于其他事物。与基于表的方法或基于访问控制的硬件方法相比,线性能力的优势是,查找仅以一种方式运行,并且从一个隔离区域到另一区域的委派不需要通过单个受信任实体。通过混合方法,它简化了软件层的验证。另一好处是,它可以很容易地实现由一方可写入并且由一个或多个其它方可读取的页面(例如,虚拟设备的环形缓冲器)。
根据第二方面,提供了一种可以拆分已知次数的分片能力系统。对能力进行分片的能力比严格的线性能力提供了更大的灵活性,但不允许能力不受控制地扩散。因为系统会跟踪当前分片的原始(独占)能力的比例,所以以后可以重构这些分片以恢复独占性。优选地,该能力也只允许被划分有限次数,使得物理存储器的给定区域可以仅在有限数目的应用或其他这样的软件模块之间共享。
分片可以有利地与线性能力的概念一起使用。例如,使用8位拆分字段,一个页面可以在多达256个实体(指定位址空间、隔离的VM等)之间共享,并且每个实体都可以廉价地检查拥有它的其他实体的最大数目。这使得实施保证变得容易,诸如在两个指定位址空间之间或在隔离的VM与指定位址空间之间共享页面,但对管理程序隐藏。使用基于表的方案执行该操作表示,每个表条目都需要能够标识可能有权访问该页面的所有主体,这将为您提供一个非常大的表(以及很大的查找成本)。使用能力执行该操作可以进行简单的前向检查。
所公开的机制使得构建隔离的虚拟机(VM)、硬件指定位址空间等成为可能。它可以用作独立的机制,或者它可以与现有的方案结合使用,诸如CHERI存储器能力模型(与CHERI组合,并且这样做将允许共享硬件实现的某些方面)。一方面提供涉及添加授予对物理存储器的访问的线性能力。另一备选或附加方面涉及物理能力的分片(有限的、记录的物理能力划分)。传统的CHERI能力使用虚拟地址,并且在存储器转换之前进行检查。物理能力在地址转换之后使用,并且可以限制系统软件。
在实施例中,与正常的CHERI能力一样,由能力授予的许可集可以使用小安全指令集来操纵。
与具有严格信任关系的现有系统不同,所公开的设计使得表达相互不信任成为可能。例如,两个VM可以共享其他VM(或管理程序)无法访问的存储器页面。这使得实现复杂的机密计算设计成为可能。
示例应用是基于云的机密计算,其目前是增长领域。客户能够运行复杂的工作负载并且强有力地保证管理程序或OS无法访问其数据是一个重要的差异化因素。
图1示出了根据当前公开的技术的一个示例应用的示例程序堆栈100。堆栈100包括多个程序102,至少包括操作系统(OS)102OS和在操作系统上运行的一个或多个应用102AP。可选地,在一些情况下,堆栈100还可以包括管理程序102HV,并且操作系统102OS可以被布置为在管理程序上运行。在这种情况下,操作系统102OS和(多个)应用102AP一起形成虚拟机(VM)103。管理程序(也称为虚拟机监视器(VMM))是用于运行虚拟机的低级软件。可以有一个或多个虚拟机103在管理程序102HV上运行,每个虚拟机103具有其自己的操作系统102OS。示例是多个不同租户的虚拟机103在同一数据中心或云计算主机服务上运行。
在实施例中,相同的机制还可以实现类似信任区的抽象,其中可以在安全与非安全世界中具有这些层中的一个或多个层,例如以允许OS运行使得管理程序不能强制放弃资源。
图2示出了可以用于促进对存储器的访问的存储器映射方案。存储器104包括跨一个或多个存储器设备的物理地址空间202,即,通过其寻址那些一个或多个存储器设备106中的物理存储器区域的实际硬件地址。所讨论的物理存储器空间202可以包括一个或多个易失性存储器设备(RAM)和/或一个或多个非易失性存储器设备(例如,HDD或SSD)的存储器空间。
存储器页表112将物理地址空间202的物理地址映射到虚拟地址空间204的对应虚拟地址上。注意,图2是示意性的。实际上,页表可以在物理存储器中实现。页表是用于系统软件与存储器管理单元(MMU)进行通信的协议。MMU在由系统软件管理的页表或执行可高速缓存地址转换的受信任的陷阱处理程序的帮助下执行查找。
当诸如应用102AP等程序102想要访问存储器,以诸如执行加载、存储或指令取指时,它将虚拟地址空间204中的地址指定为目标存储器地址,即,加载或取指的源、或者存储的目的地。然后通过基于页表112执行查找来将其自动转换为虚拟地址。查找通常由存储器管理单元(MMU)中的专用硬件电路系统自动执行。页表112中的条目由诸如管理程序102HV或操作系统102OS的内核等低级系统代码填充和管理。
在实施例中,查找是经由转换后备缓冲器(TLB)执行的,TLB是一种形式的高速缓存。只有当TLB未命中时,才直接查询页表或地址转换错误处理程序。无论哪种方式,地址转换都是通过由MMU提供的某种机制进行的,并且有某种策略控制地址转换,该转换由一层或多层特权软件(作为代码或数据)提供。
注意:在堆栈100中具有三层——管理程序102HV、操作系统102OS和应用层102AP——的场景中,在一些这样的实施例中,操作系统可以发布第二层虚拟地址中的目标地址,其被转换为第一层虚拟地址,有时也称为伪物理地址,并且管理程序102HV或MMU将其转换为(真实)物理地址。即,虚拟机103可能需要进行两次地址转换。在这种情况下,如果本文说应用指定虚拟地址等,这可以被认为是指应用经由操作系统替代地指定了第一层虚拟地址(伪物理地址)。物理地址是指实际物理地址空间202中的真实物理地址。
更一般地,本申请可以应用于任何程序栈,例如在仅涉及OS和(多个)应用但不涉及管理程序的场景中,或者可以应用于涉及更多层的场景中。
本公开涉及提供不同软件模块之间的隔离,使得一个软件模块不能访问另一软件模块的代码或数据。这对于隐私和数据安全很重要。例如,软件模块可以包括管理程序102HV、在管理程序上运行的操作系统102OS、和/或在操作系统上运行的一个或多个应用102AP。例如,可能希望创建指定位址空间,由此操作系统102OS和管理程序102HV不能查看某个应用102AP的数据,即使该应用正在操作系统上运行。或者,可能希望防止一方的应用102APi访问另一方的应用102APii的数据,而不信任OS或管理程序来防止这种情况。
在传统模型中,管理程序102HV分区出虚拟地址空间的区域以供操作系统使用,然后操作系统102OS从该存储器区域内分区出用于在该操作系统上运行的应用102AP中的每个应用的区域。这是作为动态分区的部分完成的(即,可以在程序运行时将存储器添加到任何更高层或从中删除)。操作系统102OS具有访问应用102AP在其分配给它们的所有存储器地址空间中的所有数据的能力,并且管理程序102HV具有访问它已经分配给操作系统102OS的所有地址空间中的所有数据的能力。管理程序102HV还可以限制操作系统102OS有权访问什么,并且操作系统102OS可以限制它的应用102AP有权访问什么。因此,在堆栈100的不同层之间必须存在分层信任系统:操作系统102OS必须信任管理程序102HV,并且应用102AP必须信任操作系统102OS。例如,管理程序102HV可能会被破解并且窥探操作系统102OS或应用102AP中的一个应用的数据,或者可能从一开始就是恶意的。
希望改变这种“嵌套”模型,由此堆栈100中的每个层级或层都可以访问分配给下一层的存储器地址空间,例如,使得操作系统102OS不必完全信任管理程序102HV,和/或指定位址空间的应用102AP不必完全信任操作系统102OS。因此不再需要更受信任的组件总是有权访问在其上运行的不太受信任的组件的存储器的这一概念,并且例如,即使管理程序102HV或操作系统102OS被破解,也可以保证应用102AP拥有的数据的机密性和完整性。在实施例中,为了可用性,而不是为了机密性或完整性,管理程序和OS仍然可以保留在TCB(受信任的计算库)中。在这种情况下,恶意管理程序仍然可以简单地选择永远不运行特定VM,并且VM无法阻止这种情况发生。但尽管如此,使用所公开的机制,保证管理程序不能检查或篡改由VM拥有的存储器。
管理程序102HV可能仍负责分区出用于操作系统102OS的存储器,并且操作系统可能仍负责分区出用于其应用102AP的存储器。然而,一旦分区完成,管理程序102HV不必然再访问它已经分配给操作系统102OS的存储器,和/或操作系统不必然再访问它已经分配给它的一个或多个应用102AP的存储器。并且存储器的新所有者可以轻松地验证它具有独占所有权。
本公开经由物理能力系统实现这一点,物理能力优选地也在硬件中实施。“能力”是软件模块访问为了特定存储器区域所需要的一种令牌。每个能力指定它授予对其的访问的相应地址范围。如果给定软件模块不拥有相关令牌,则不允许访问该存储器区域。这可以通过仅将令牌(即,“能力”)提供给在系统上运行的一个或多个(但不是全部)软件模块来实现隔离。
物理能力是在物理存储器地址而不是虚拟地址级别操作的能力。只有能够呈现相关令牌(即,能力)的软件模块才被允许访问对应物理存储器区域。硬件实施的能力是至少部分由处理器的专用硬件实施对能力的检查的能力。如果检查失败,则存储器访问失败,并且可能引发异常。
根据本文中公开的第一方面,提供了线性物理能力的机制。
线性能力是在软件模块之间传递的能力,如接力棒。即,一旦它从第一软件模块传递到第二软件模块,则第一模块就不会保留副本。例如,操作系统从一个能力开始,然后将能力传递给应用,现在应用拥有那个能力,但操作系统无法保留副本,因此操作系统放弃了访问对应存储器区域的权利。而对于非线性能力,操作系统可以选择传递该能力并且自己保留副本。
发明人没有意识到之前没有公开提供具有物理性质和线性性质两者的能力系统。
根据本文中公开的备选或附加的第二方面,提供了用于“分片”物理能力的机制
“分片”能力可以在软件的不同模块(例如,两个应用,或OS和应用两者)之间划分并且因此共享,但系统会跟踪已经制作了多少副本(“分片”)。因此,分片可以相互重新组装,以减少流通中的数目。在实施例中,能力也只能被划分到最大次数。对能力可以划分的次数的限制不是必需的。拆分计数使得一个分片的所有者能够标识其他分片所有者的最大数目。例如,指定位址空间可能希望验证OS可以访问共享区域,但管理程序不能。这对于有限的拆分计数是可能的,并且指定位址空间具有除了其中一个份额之外所有份额。如果有一个无限可划分的拆分计数,则两方情况将与多方情况相同(需要协议来确保协作组都共享加和为1的比例)。
发明人不知道它先前已经被公开以提供既是物理的又能够被分片的能力系统。
通过小而简单的硬件扩展集,本公开的系统因此能够提供严格的隔离和/或受控的分片,从而限制不同软件模块之间的通信边界。
物理分片线性能力及其与系统的交互(例如,MMU和中断机制)的组合实现了提供相互不信任的灵活方式。
图1A示出了用于实现本文中公开的实施例的示例计算机系统150。系统150包括执行逻辑104、存储器106、存储器访问逻辑108、页表112和可选的转换后备缓冲器114。根据本文中公开的实施例,系统150还可以包括能力寄存器集116。
执行逻辑104包括以硬件实现的一个或多个执行单元(即,核)。执行逻辑104也可以称为处理器或处理单元。例如,它可以采用CPU(中央处理单元)或专用处理器(例如,GPU(图形处理单元)、DSP(数字信号处理器)等)的形式。每个执行单元可以采用执行流水线的形式,包括多个流水线阶段,例如指令取指令阶段、解码阶段、执行阶段、算术逻辑单元(ALU)、浮点逻辑单元(FPU)、加载/存储单元(LSU)等。执行逻辑104被配置为,执行来自特定指令集的指令的实例,该特定指令集是由执行逻辑识别的机器代码类型的基本集。每条机器代码指令包括操作码定义、指令的类型、和用于取零或多个操作数的一个或多个操作数字段,具体取决于指令类型。
存储器106包括一个或多个物理存储器设备106。该/这些可以包括与执行逻辑104在同一管芯上的一个或多个存储器设备、同一IC封装中不同管芯上的一个或多个存储器设备、和/或执行逻辑104的管芯和IC封装外部的一个或多个单元。在设备外部的执行单元的情况下,MMU将用于DMA或者逻辑MMU将被实现为多个物理MMU,以控制来自不同设备的访问。一个或多个存储器设备可以包括一个或多个易失性存储器设备(例如,RAM)和/或一个或多个非易失性存储器设备(例如,ROM或可写入存储驱动器)。一个或多个存储器设备106可以采用任何合适的一个或多个存储介质;例如磁性存储介质,例如磁带或磁盘(例如,在硬盘驱动器HDD的情况下);电子存储介质,诸如EEPROM或闪存(例如,在固态驱动器SSD的情况下);均匀的光学介质,例如光盘或基于玻璃的存储器;等等。
存储器访问逻辑108示意性地表示功能块。在实践中,它可以至少部分在专用硬件中实现,例如在存储器管理单元(MMU)中。MMU通常会在与执行逻辑相同的管芯中实现。备选地或附加地,存储器访问逻辑可以至少部分在低级固件或被布置为在执行逻辑上运行的特权执行程序级软件中实现。它也可以在硬件、固件和/或执行程序级软件的任何组合中实现。
前面已经描述了页表112的功能。它可以在存储器106的区域中(例如,在存储器106的特殊执行程序或保留区域中)和/或在单独的专用存储器单元中实现。在实施例中,页表112还提供用于找到针对各种物理地址范围的对应能力的映射。注意,虽然作为本领域的惯例,页表可以称为页“表”,但如今它更经常以树的形式实现。在本上下文中的术语“表”并不旨在限制数据结构的形式,并且短语“页表”可以是指平面表、树、或用于在虚拟存储器地址与物理存储器地址之间进行匹配的任何其他合适的数据结构形式。页表可以完全是软件结构,它形成向MMU提供策略的固件或软件的实现细节。更一般地,页表112可以表示实施在软件中限定的存储器保护和转换策略并且可以可选地高速缓存这些转换的任何逻辑或数据结构。
执行逻辑104被配置为执行来自预定指令集的机器代码指令,该预定指令集限定了预定指令类型集,例如加法、乘法等。这些指令的某些类型是存储器访问指令,例如在RISC类型架构中加载和存储指令。其中这些中的任何一个的实例将针对相应的存储器访问指定至少一个目标地址,即,加载情况下的源地址或存储情况下的目的地地址。通常,该指令通过指示执行逻辑104的寄存器文件中的通用寄存器的指令的操作数来替代地指定目标地址,其中该寄存器继而保存指针(目标地址)。该目标地址或指针将是虚拟地址范围内的虚拟地址。其他类型的操作也将隐含地对存储器106中的目标地址进行操作,例如从当前程序计数器(PC)值中取指指令。PC将在虚拟地址空间中指定虚拟地址。或者,在CISC类型架构中,几乎任何操作都可能具有存储器地址操作数。
存储器访问逻辑108包括可以在硬件、固件或软件中实现的页表遍历器109。这被配置为,当执行逻辑104执行存储器访问指令时,自动将虚拟目标地址转换为存储器106中的物理地址。通过查找映射到页表112中的虚拟目标地址的物理地址来做到这一点。然后将对存储器106中的物理地址自动执行存储器访问。这同样用于一种或多种其他类型的存储器访问操作,例如指令取指。
转换后备缓冲器(TLB)是用于高速缓存页表查找的优化,以便平均加速地址转换过程。TLB 114可以以专用高速缓存单元的形式实现,例如关联高速缓存,它可以在MMU中实现或单独实现,但通常将在与MMU和执行逻辑104相同的管芯中实现。
根能力寄存器302是专用系统寄存器。系统寄存器(也称为“机器特定寄存器”或“硬件寄存器”)是不属于通用寄存器集的寄存器。根能力寄存器302只能由特殊的能力操纵指令集中的一个或多个指令使用,稍后将更详细地讨论。能力寄存器116可以在执行逻辑中实现,或者实现为实现存储器访问逻辑108的部分的MMU的部分,或者实现为单独的专用寄存器文件。出于实际目的,它们优选地在与执行逻辑和MMU相同的管芯上实现。
另外的能力寄存器302可以实现为通用能力寄存器,该寄存器将被明确地用作能力指令的操作数。例如,在具有完整CHERI实现的系统中,这些寄存器可能与为虚拟能力而公开的寄存器相同。
通用能力寄存器与CPU的(多个)流水线紧密耦合,并且因此必须实现为CPU的部分。系统寄存器通常具有直写行为,因此设置它会更新MMU中的对应状态。
图2A示出了(多个)物理存储器设备106的物理存储器空间202的示例实现。注意,图2A仅是示意性的并且不必然旨在暗示物理地址空间202由单个范围的连续地址组成。例如,它可以表示多于一个物理存储器设备的地址空间、和/或具有不可用区域的给定设备的破碎范围。
物理存储器106/202采用标记的存储器的形式。即,它包括用于存储数据(即,实际数据内容或有效载荷数据)的多个字,而且还包括与每个字级联的相应标签位。当相应的字是能力的部分时,标签位被断言(例如,设置为1),而当该字可用于其他数据(有效载荷)时,标签位被取消断言(例如,设置为0)。在这样的实施例中,由硬件强制机制检查能力隐含地包括检查标签位,其中每个能力仅在标签位被断言时才有效。在实施例中,标签位除了通过在执行程序模式下运行的执行程序代码之外是不可寻址的。此外,如果任何上述字从存储器中加载,则标签位与它一起传播。这样的特征有助于确保这些能力充当不可伪造的授权令牌,以授予对其相应指定存储器地址范围的访问。这创建了严格的出处链,并且使物理能力不可伪造。
标签将传播通过高速缓存层次结构并且传播到能力寄存器中。在完整CHERI系统中,所有存储器都必须保留标签,但在当前系统中,用于保留标签的存储器子集就足够了(尽管这限制了可以支持的隔离区域的数目)。此外,线性属性是通过保证从存储器到寄存器的加载清除标签位来实现的。硬件中执行该操作的最简单方法是要求原子交换操作以在寄存器与存储器之间移动线性能力,并且在执行正常加载/存储操作时不传播线性能力的标签。
然而,标记的存储器不是必需的。如背景部分所述,能力在存储器中受到保护,并且硬件存储器能力系统可以通过至少两种方法做到这一点。第一种方法是限制能力可以存储在存储器中的位置。能力只能存储在特定区域中,并且这些区域中的所有内容都是能力或明确的无效能力值(通常为零)。例如,CAP计算机使用这种模型。第二种方法是使用某种形式的标记的存储器,其中不可寻址位在存储有效能力时被设置,而在任何其他数据存储到同一位置时被清除。CHERI(以及M-Machine和其他一些系统)使用该模型。如果在地址空间执行程序内将特定区域标记为存储能力表,则本文中公开的系统可以支持前一种方法(尽管这将是一个稍弱的模型,因为进入能力将是可伪造的)。
图3示出了能力寄存器116。它们可以包括单个根能力寄存器302和另外的能力寄存器集304,在本文中也称为“通用”能力寄存器。注意,图3是示意图,并不排除合并寄存器文件的可能性(其中通用寄存器与能力寄存器之间存在重叠:例如,有32个GPR,其中的16个是64位,其中的16个是129位,低位可用于整数运算)。
能力是小型数据结构,它至少指定了它授予对其的访问的地址范围。它还可以包括其他参数,例如它授予的许可的一个或多个类型(例如,读取、写入和/或执行)。
图6示出了根据本文中公开的实施例的能力的数据结构600可以采取的示例形式。能力数据结构600包括指定地址范围的至少一对字段600。因为本文的能力是物理能力,所以它们指定物理地址空间202中的范围。在所示示例中,地址字段在地址范围的低地址和高地址方面指定范围。然而,例如,可以备选地在低地址和加法偏移、或高地址和减法偏移方面来指定范围。不管如何表示,这是物理地址空间202中相应能力授予对其的访问的相应地址范围。
在实施例中,能力数据结构600还可以包括一个或多个附加字段。例如,如果系统支持不同类型的能力,则在实施例中,能力数据结构600可以包括用于指定相应能力的能力类型的能力类型字段601。和/或,能力数据结构600可以包括许可字段406,许可字段406用于指定由相应能力授予的一个或多个类型的许可,例如,读取、写入或执行。
能力数据结构600还可以包括拆分计数字段606,拆分计数字段606用于记录相应能力已经被分片的次数。这将在后面更详细地讨论。
能力的作用类似于令牌或“不记名券(bearer bond)”,用于获取对的访问。只有拥有给定能力的软件模块才能访问由该能力指定的物理地址范围。对于给定软件模块,“具有”用于当前目的的能力表示该能力被保存在该软件模块可以访问的存储位置中。这个存储位置可以是寄存器,或是另一存储器区域,或是这两者。稍后将对此进行更详细的讨论。
利用线性能力,令牌或“券”移动,而不用复制操作。分片操作可以被认为是线性概念的扩展,允许取指部分能力。这类似于将能力按范围分片或分片成不同许可集。
根据本公开,物理存储器空间202被划分为多个单独的地址空间分区400。这种分区400的示例在图4中示出。
在实施例中,每个分区400可以包括物理地址空间202中的相应基本区域402和相应非执行程序区域404。注意,这些区域不必在物理地址空间202中彼此邻接,也不需要内部连续的。在实施例中,基本区域402可以是单个范围的连续地址,但这对于所有可能的实现来说不是必不可少的。非执行程序区域404可以包括单个范围的连续地址或彼此不连续的多个范围。相应的能力授予对每个范围的访问。
每个相应程序102的执行区域402包括相应的地址空间执行程序403,地址空间执行程序403是用于管理分区400的执行程序级代码的特殊部分。非执行区域404可以用于存储开发者希望的任何相应的非执行程序数据405和/或非执行程序代码102。
执行程序区域402在与其他一切隔离的存储器区域中实现,并且只能由在执行逻辑104的特殊执行程序模式下运行的执行程序级代码访问。为了创建执行程序,完整能力必须呈现到存储器区域(完整能力表示独占的能力,即,只存在一个实例并且它没有被分片,使得能力只有一个拥有者并且该拥有者对能力的地址范围具有独占访问)。这保证了系统的任何其他部分都无法访问该存储器。然后使用该能力并且创建(可复制的)进入能力。当执行程序被调取时,根能力寄存器将包括与原始线性能力具有相同许可的能力和表明它是执行程序的标志。在由该根能力标识的区域中运行的软件能够访问该区域中的存储器,而在其他地方(在能力表标识的扩展区域中)运行的软件则不能。这有效地为现有的用户空间/监督程序/管理程序特权级别添加了另一环。
执行程序模式可操作以在执行程序模式与非执行程序模式之间切换。在执行程序模式下运行的代码可以执行某些动作,诸如访问存储器的执行程序区域,而在任何其他特权级别下运行的代码都不能。该模式是执行单元的硬件设置。在启动时,执行逻辑在执行程序模式下由引导代码开始。引导代码然后移交给堆栈100中最低级别的分区400的执行程序级代码403,例如,在所示情况下为管理程序102HV。该执行程序级代码然后可以跳转到非执行程序代码102,并且在这样做时模式被切换到非执行程序模式。当程序102退出时,执行逻辑自动跳回到启动程序的执行程序代码,并且切换回执行程序模式。
很多现有架构具有特权模式,称为监督程序模式(或x86将其称为环0)。在实施例中,地址空间执行程序模式不同于诸如监督程序模式等现有特权级别,并且用于管理包含将使用特权级别中的一个或多个特权级别的软件的存储器区域的代码。例如,指定位址空间将仅使用用户模式,隔离的VM将仅使用用户和监督程序模式,并且在具有类似信任区的隔离机制的系统上运行的管理程序将使用管理程序、监督程序和用户模式。
注意,“非执行程序模式”仅是指除了执行程序模式之外的任何模式。在实施例中,它可以涵盖多个非执行程序特权级别,例如监督程序或内核模式和用户模式。所有现有的特权级别仍然存在。地址空间执行程序模式在很大程度上与其他特权级别正交。在地址空间执行程序模式下运行的代码量预计会非常少,并且只做管理程序或OS的一定比例(即,提供存储器隔离和共享,以及用于安全配置共享的接口集,非常少)。非执行程序102可以是指不以执行程序模式运行的任何非执行程序。这可以是应用102AP、操作系统102OS或管理程序102HV。
每个分区400的非执行程序数据405、非执行程序102和地址空间执行程序403一起形成软件401的分区的模块。模块401包括不同的程序102APi、102APii、102OS、102HV等。可以通过下面讨论的机制彼此保持安全。
在实施例中,分区400可以具有对相应非执行程序区域404内的至少一个安全区域的独占访问、以及对进程的其余存储器的共享访问。类似地,隔离的VM可以对自己的存储器具有独占访问,并且对其用于通信的部分具有共享访问。通常,系统支持具有存储器的单个实体,其中部分是完全私有的、与单个其他方共享、或与多个其他方共享但不与所有共享。包括至少一些独占存储器的分区可以称为“指定位址空间”,但注意,该术语在本领域中并不总是一致地使用。
在某些情况下,给定分区400可以被完全隔离,即,只有该分区401内的软件模块401可以访问该分区的物理地址范围,并且来自任何其他分区400的软件模块401都不能访问这些物理地址范围。换言之,分区400是物理存储器106/202的单独分区(非重叠地址范围)。然而,在实践中,系统可能混合了对环境完全私有的存储器和被共享的存储器。完全隔离可能不是很有用,因为与外部世界通信需要某种机制,并且通常至少涉及少量共享存储器。
给定范围的存储器可以在一个以上的软件模块401的受限子集之间共享,和/或不同模块401可以在同一存储器区域上享有不同级别的许可(例如,一个只能读取,而另一个只能写入或可以读取和写入等)。一般而言,本文中的术语分区可以用于指代物理存储器空间202的任何隔间或分配,并且其本身并不表示分区的整个存储器范围的完全隔离。
还注意,图4示出了可以是指定位址空间的分区400,但是它没有明确说明隔离的VM,因为它没有说明多个特权级别的概念。应当理解,在本文中公开的实施例中也可以采用多个特权级别。这种机制与CPU中现有的特权机制正交,因此将允许隔离区域仅具有用户空间、用户空间+监督程序、甚至用户空间+监督程序+管理程序特权级别。
图5示出了地址空间执行程序403的示例数据结构。这包括多个字段,至少包括存储器访问表508和可执行的执行程序代码510的部分。存储器访问表508中存储有相应分区400的非执行程序区域404的一个或多个能力。地址空间执行程序可以可选地包括一个或多个附加字段,诸如用于存储地址空间执行程序的版本号的版本字段502、和/或用于存储地址空间执行程序的程序状态的程序状态字段504、和/或用于存储在存储器被加密和/或完整性保护的情况下所需要的一个或多个密钥的密钥字段506。程序状态可以包括多个线程中的每个线程的个体线程状态。对于目前的目的,这并不必然表示线程的用户空间概念,并且可能更接近于虚拟CPU的VM抽象,隔离区域内的系统(例如,OS)在该VM抽象上实现线程。
地址空间执行程序代码510负责管理能力,包括在软件模块400之间转移能力。它还可以负责一个或多个附加功能,例如撤销策略,例如指定是否可以由管理程序102HV或操作系统102OS撤销能力。
在操作中,考虑代码的部分——非执行程序空间404中的程序102或执行程序区域402中的地址空间执行程序——请求访问虚拟地址空间204中的目标地址(或者直接,或以从第二层虚拟地址转换的第一层“伪物理”虚拟地址的形式)。例如,这可以包括:执行加载指令以将值从目标地址加载到寄存器中,或者将值从寄存器存储到目标地址。作为响应,存储器访问逻辑108通过参考页表112自动将目标虚拟地址转换为物理地址空间中的物理地址。然后存储器地址逻辑108自动检查是否准许访问物理存储器地址。如果是这样,则允许继续进行存储器访问操作(例如,加载或存储)。否则不继续进行存储器访问操作,并且在实施例中引发异常。
如果满足以下条件中的一个条件,则允许访问:i)在执行存储器访问操作的代码正在执行时在根能力寄存器302中找到覆盖物理地址的能力,或ii)在当前执行软件模块400的基本区域中找到覆盖物理地址的能力(其中覆盖给定物理地址的能力表示指定包括该地址的物理地址范围的能力)。这假定根能力与以地址空间执行程序特权运行的代码之间存在直接对应关系,但这不是必需的(它只是简化了实现的某些方面)。同样,线性能力永远不会离开分配给地址空间执行程序的存储器的要求是为了简化代码的验证并且防止能力被意外破坏,而不是成为模型的核心部分。
针对能力的检查由存储器访问逻辑108执行(并且检查的结果被实施)。检查可以例如由MMU中的专用硬件电路系统或由低级受信任的固件或执行程序软件或其组合来实现(例如,硬件可以设置有用于在引发中断时触发更多执行级软件或固件运行的机制)。在实施例中,所有这些都是响应于执行逻辑的指令集的单个机器代码指令而触发的,例如单个加载或单个存储指令。为了效率,在实施例中,检查的结果也将被高速缓存在硬件(例如,TLB 114)中,而不管它实际上是如何发生的。
根能力寄存器302中的根能力授予对包括地址空间执行程序403的基本地址区域402的访问。地址空间执行程序403中的存储器访问表508包括零个或多个另外的能力,该能力授予对构成相应非执行程序区域404的一个或多个另外的地址范围的访问(可能是隔离区域仅由在基本区域402中运行并且以地址空间执行程序特权运行的软件组成——不太可能是常见的,但它可能对有一些在这种模式下运行的轻量级可信代理很有用)。当软件401的一个模块的地址空间执行程序403调用软件401的另一模块时,执行域转变以从一个分区400转变到另一分区(例如,管理程序调用OS或OS调用应用)。在域转变时,根能力寄存器302中的根能力被替换为被调用软件模块401的地址空间执行程序403的根能力。调用跳转到被调用模块401的地址空间执行程序403的可执行代码510内的点(例如,预定点),使得新的地址空间执行程序开始运行。然后地址空间执行程序402可以基于在其相应的存储器访问表508中具有用于该区域的一个或多个对应能力而跳转到相应程序102中非执行程序区域404中的任何位置。地址空间执行程序403或非执行程序102还可以基于在相应存储器访问表508中具有用于该区域的一个或多个对应能力从非执行程序区域404中的任何地方访问数据405。
优选地,执行逻辑104的指令集包括一个或多个专用能力操纵指令,即,用于修改物理能力和/或在软件模块401之间转移能力的专用机器代码指令。在实施例中,这些指令中的一个、一些或全部指令可以被保留用于在执行程序模式下运行的执行程序级代码,因此在分区400内,它们只能由受信任的地址空间执行程序403使用,而非由非执行程序软件102使用。然而,情况不必然如此。备选地,一些或全部指令可能是非特权指令,但只能与有效能力一起使用,因此,如果软件堆栈保持线性能力仅被存储在由地址空间执行程序拥有的存储器中的不变性,则这些指令只能由执行程序隐式使用,而不是显式使用。
能力操纵指令可以包括以下任何一项、多项或全部项:用于创建分区的分区创建指令(例如,EnclaveCreate);用于调用另一分区中的地址空间执行程序403的分区调用指令(例如,EnclaveCall);用于将源能力分片为两个目的地能力的能力分片指令(例如,CShard);用于将源能力拆分成两个目的地能力并且在它们之间拆分源范围的范围拆分指令(例如,CSplitRange);用于将源能力拆分为两个目的地能力并且在同一范围内具有不同类型的许可的许可拆分能力(例如,CExtractPerms);和/或用于重新组合两个分片、范围拆分或许可拆分能力的一个或多个能力组合指令(例如,CCombine)(这可能是对于所有这些相同的指令类型,或者是对于不同类型的重新组合的不同类型)。备选地,一些架构,诸如那些希望避免微码的架构,上述任何操作(例如,EnclaveCall)都可以实现为多指令序列。
能力可以从一个软件模块401的存储器访问表508线性地转移到另一软件模块的存储器访问表508,从而修改这两者的分区400的大小。线性转移表示能力从一个软件模块401的分区400转移到第二软件模块401的分区400而不保留在第一软件模块的分区中。在所示实施例中,这表示将能力从第一软件模块401的基本区域402中的存储器访问表508转移到第二软件模块401的基本区域402中的存储器访问表508,而不保留在第一软件模块的存储器访问表中。
能力也可以被分片。线性是能力如何转移的属性(即,通过不允许的复制允许移动),分片是被移动事物的属性。分片限定了附加的拆分线性能力的方法。能力可以被拆分(分片)成两个部分(分片),然后可能进一步拆分成更小的分片。两个部分都是线性的:它们可以移动,而不是复制。如果能力被拆分成两部分,则后来接收这两个部分的另一方可以重新组装完整能力。分片的部分的线性属性向其保证没有其他实体保留能力的副本。在初始拆分与最终重新组合之间,可以执行任何数目的拆分和组合操作,但必须尊重所有这些操作的线性属性。
分片中的一个分片可以从第一分区400的存储器访问表508线性地转移到第二分区400的存储器访问表508。然后第一分区400和第二分区400两者(源和目的地)都具有分片中的一个分片。拥有覆盖相同地址范围的分片(将其置于其存储器访问表508中)的任何软件模块400将有权访问该物理地址范围,即,存储器范围将被共享但仅在具有能力分片中的一个能力分片的有限数目的模块401之间共享。
根据本文中公开的一个方面,分片操作还隐式地修改拆分计数值606以记录每个结果分片能力是原始未分片(即,独占)能力的比例、以及它是原始独占能力的比例。这种拆分计数使得分片能力可以在以后再次重新组装,从而可以恢复独占,并且存储器共享不必是无限期的或不受限制的。
例如,在一种可能的编码中,例如考虑8位拆分计数字段,这可以使用1偏置表示。即,所以可表示的值是1至256(具有能力的0比例没有意义,因为这没有意义),值256表示完全所有权(根本没有分片),值128表示拥有一半原始能力,以此类推,值1表示拥有原始能力的1/256。在这种编码中,重新组装只需要加法(拆分需要减法)。
可以允许对能力进行很多操作。线性是线性能力上允许的所有操作的属性:即,不复制并且任何操作的输出都会产生能力集,这些能力包括与输入所拥有的权限完全相同的权限。
拆分操作基于范围或许可来执行拆分以给出具有一个初始能力的权利的不相交子集的两个能力。分片提供了与原始具有相同权限但拆分比例较小的两个能力(拆分比例的总和与原始相同)。组合提供了单一能力,该能力具有双方所拥有的权利的总和。原子交换在寄存器与存储器位置之间移动一对能力(如果一个是空能力,则这相当于执行线性属性的加载或存储)。EnclaveCreate消耗完整能力(完整拆分比例,所有许可)并且提供进入能力,这然后允许系统使用根寄存器中设置的执行程序位来重构完整能力。执行程序位防止任何软件将该能力移出根能力寄存器,直到针对指定位址空间被破坏。指定位址空间破坏隐含地使指定位址空间的所有进入能力无效,并且将完整能力重构到存储器中。存在进入能力的撤销机制,稍后将更详细地讨论。
当重新组合分片或拆分能力时,重新组装的部分可以相等,但也可以重新组合两个不相等的部分。任何拆分操作(无论是经由分片、许可还是范围拆分)都可以反转,如果所有拆分操作都反转,则结果将是最终的能力。
作为优化,在实施例中,来自至少当前执行模块400的基本区域402中的存储器访问表基本区域508的能力的实例可以被保存在通用能力寄存器304中。(多个)根能力寄存器302用于基本查找。另外的(通用)能力寄存器304被用作针对执行程序代码操纵能力的地方以及当在域之间传递能力时存储能力的地方。来自基本区域的能力不会同时存储在这些寄存器和存储器中。相反,软件可以在基本区域(或者,如果软件策略允许,其他存储器)与这些寄存器之间移动能力。另外的能力寄存器304因此可以保持从存储器加载和存储到存储器的能力,以供执行逻辑104操纵。但是它们不与存储器同时保持副本,因为复制将违反线性属性。
在实施例中,通用能力寄存器304被用作能力操纵指令的操作数,其执行诸如从一个模块401到另一模块的转移、分片能力、在两个新能力之间拆分能力的地址范围和重新组合能力等操作。
在实施例中,EnclaveCall指令(或者,更确切地,在EnclaveCall期间将能力存储在寄存器304中)是用于在分区之间线性转移能力的机制,但是每个加载、存储、拆分或组合也是线性的。EnclaveCall交换根能力,并且为链接寄存器中的前一个提供进入能力。它不清除任何其他寄存器,因此一个模块401将能力从其存储器访问表508加载到能力寄存器中,然后执行EnclaveCall。如果希望在调用之前向指定位址空间或分区发送一个以上的不同的非连续的能力;则如果系统有足够的能力寄存器,这些能力都可以作为寄存器参数而被放置,然后执行EnclaveCall来调用目标。如果没有足够的寄存器,则可能需要多次调用才能传递所有能力。
作为使用EnclaveCall的备选或附加,其他实现可以提供用于执行能力的线性转移的其他机制,例如用于将线性能力从一个指定位址空间/分区转移到另一指定位址空间/分区的专用线性转移指令。在单个指令中执行该操作优选地是微编码的。接收方通常希望做某事(决定是否和/或如何接受该能力),因此实现这将优选地涉及函数调用等。这也可能是异步完成的(无需任何专用硬件支持),方法是为两个执行程序之间共享的缓冲器提供能力并且将其用作存储其他能力的环形缓冲器。
图7是一个流程图,它示出了启动系统100,然后对物理地址空间202进行分区,并且在不同分区400中运行的不同软件模块401之间分配对应能力的方法。这将根据如图1所示的场景来说明,其中操作系统102OS在管理程序102HV上运行并且一个或多个应用102AP在操作系统上运行。然而,应当理解,相同的原理可以应用于程序102的其他组合,例如,没有管理程序,其中操作系统102OS是堆栈100中的最低级程序102。
在步骤710处,该方法开始于在执行逻辑104上运行引导代码。引导代码是在执行程序空间中运行并且最初拥有覆盖整个物理地址空间202的一个或多个根原始能力的执行程序级代码(如果只有部分地址空间受能力机制保护,则至少是整个受保护的地址空间)。
在步骤720处,引导代码然后针对堆栈100中的最低级程序102(在这种情况下为管理程序102HV)创建分区400。这针对管理程序102HV创建基本区域402和地址空间执行程序403,并且分配覆盖基本区域402的对应能力。引导代码还可以向存储器访问表508分配一个或多个另外的能力,以覆盖用于运行管理程序的非执行程序代码102HV的一个或多个非执行程序区域。
在步骤725处,引导代码调用包括管理程序102HV的软件模块401。这包括将根能力寄存器302中的根能力切换到管理程序的基本区域402的根能力,并且通过跳转切换到管理程序102HV的地址空间执行程序403内的地址。管理程序的执行程序403然后可以跳转到其非执行程序代码102HV,和/或针对操作系统102OS创建和调用分区。
在步骤730处,管理程序的地址空间执行程序403针对操作系统102OS创建分区400。这针对操作系统102OS创建了基本区域402和地址空间执行程序403,并且分配了覆盖该新基本区域402的对应能力。管理程序的执行程序403还可以将一个或多个另外的能力分配给操作系统的执行程序403的存储器访问表508,从而添加用于运行操作系统的非执行程序代码102OS的一个或多个非执行程序区域。
在步骤735,管理程序102HV或其执行程序403调用包括操作系统102OS的软件模块401。这包括:将根能力寄存器302中的根能力切换到操作系统的基本区域402的根能力,并且跳转到操作系统102OS的地址空间执行程序403内的地址。OS的执行程序403然后可以跳转到其非执行程序代码102OS,和/或针对一个或多个应用102AP创建和调用分区。
在步骤740处,操作系统的地址空间执行程序403针对至少一个应用102AP创建分区400。这针对应用102AP创建了基本区域402和地址空间执行程序403,并且分配了覆盖该新基本区域402的对应能力。操作系统的执行程序403还可以将一个或多个另外的能力分配给操作系统的执行程序403的存储器访问表508,从而添加用于运行操作系统的非执行程序代码102OS的一个或多个非执行程序区域。
在步骤740处,操作系统102OS或其执行程序403调用包括应用102AP的软件模块401。这包括:将根能力寄存器302中的根能力切换到应用的基本区域402的根能力,并且通过跳转切换到应用102AP的地址空间执行程序403内的地址。然后应用的执行程序403可以跳转到其非执行程序代码102AP。
在步骤750处,应用102AP可以基于在其存储器访问表中具有针对该地址范围的对应能力(并且在实施例中为能力寄存器304),从其分配的非执行程序空间404内访问数据405。
注意,图7并不暗示所有这些步骤在所有可能的情况下都是必需的。仅当系统中的每个级别(管理程序、OS和应用)都需要隔离时才需要它们。例如,可以为OS启动执行程序并且运行与管理程序隔离的OS,但不强制应用与OS隔离。这可能是常见的用例(例如,云客户信任其部署的OS,但不信任云运营方提供的管理程序)。只有不希望依赖分级信任关系的组件才需要地址空间执行程序403,在这种关系中,它们的信任度严格低于向它们分配资源的组件。
下面更详细地描述可以对能力执行的操作的一些示例。应当理解,这些示例细节仅以我的说明方式给出并且不必然是限制性的。
如上所述,根能力用于当前地址空间执行程序。在域转变时,它在根能力寄存器302中被替换为目标执行程序的能力。域转变是两个隔离地址空间之间的调用。在实施例中,它是EnclaveCall指令的结果。注意,受信任的管理程序可以调用OS(并且OS可以调用受信任的管理程序),并且受信任的OS可以调用应用,反之亦然,无需通过执行程序。仅在相互不信任的各方(例如,管理程序和隔离的VM、OS和用户空间指定位址空间)之间需要跨域调用。
在实施例中,建立分区(例如,指定位址空间)400可以涉及指令序列。例如,用于引导的高级操作可以是:
i)将初始软件状态加载到物理存储器区域中,
ii)使用一系列能力拆分指令中的一个或多个能力拆分指令从根能力中取指该区域的物理能力,
iii)发出具有该能力的EnclaveCreate指令,以给予“进入能力”,然后
iv)发出EnclaveCall指令。
对于后续的隔离区域,可以执行类似的序列,但步骤ii)涉及直接使用保存在地址空间执行程序的存储器访问表508中的物理能力中的一个物理能力。EnclaveCreate对区域采用完全线性能力并且构造进入能力。在实施例中,它还产生初始证明,该证明可以用于验证执行程序的初始状态是否正在运行受信任的代码。
进入能力是来自现有能力系统的术语。它是授予调取(进入)特定代码的权利,但不能检查它的能力。进入能力实现域转变。一旦创建了用于隔离地址空间的执行程序,就需要某种机制来调用它。它需要能够授予调用执行程序的权利,而无需授予直接访问其任何信息的权利。这是进入能力。它可以用作EnclaveCall的操作数。硬件将检查它是否有效,如果有效,则构造指定位址空间能力(设置位以防止它从根能力寄存器中删除的线性能力,除非在执行程序拆卸(“teardown”)期间)。一旦存在进入能力,就需要某种机制来使它们无效(撤销),以便在执行程序被破坏时,可以重构初始线性存储器能力而不违反线性不变量。在实施例中,进入能力不是线性的,它们提供允许多个隔离单元都相互调取的机制。在备选实施例中,进入能力可以是线性的,但它们也可以具有不同的撤销机制。无论哪种方式,进入能力都有某种撤销机制。一种可能的撤销机制涉及在执行程序开始时具有额外的预指定位址空间标签位和撤销计数器。如果不允许非执行程序代码直接保持进入能力,则可以使用相同的线性机制,尽管这会使拆卸过程复杂化(要破坏孤立的区域,必须恢复它的所有进入能力)。
为了调用分区(例如,指定位址空间)400,EnclaveCall指令的作用类似于跳转和链接寄存器指令。调用方负责将任何参数(包括能力)放入寄存器中。被调用方执行程序通常会具有调度程序来检查调用方和一些等效的vtable索引,然后跳转到正确的位置。
为了将能力从一个分区(例如,指定位址空间)400线性转移到另一分区,这可以简单地通过在寄存器中具有线性能力的跨域调用(EnclaveCall指令)来实现。备选地,不排除在执行逻辑104的指令集中提供单独的指定位址空间传输指令的可能性。
EnclaveCall具有进入能力,并且:
i)检查进入能力是否有效。
ii)构造与进入能力相对应的执行程序能力并且将其安装在根寄存器中。
iii)获取根寄存器的旧值,并且,
a.如果是执行程序能力,则从中构造进入能力并且将其放入能力链接寄存器中,但是
b.如果不是执行程序能力,将其直接放入能力链接寄存器中。
然后在目标执行程序内部恢复执行。
为了对能力进行分片,能力分片指令例如可以采用以下形式:
CShard$cd、$cs、$rs
其中$cd是能力目的地寄存器,$cs是能力源寄存器并且$rs是整数源寄存器。这将从$cs中的拆分比例字段中扣除$rs中的值,并且在$cd中构造与$cs的原始值相同的能力,并且将拆分比例字段设置为$rs中的值。如果$rs大于$cs中的拆分份额,它将在$cs中给出空能力,在$cd中给出原始能力(或相反——两者对于模型都是等效的)。
类似地,这种形式的指令:
CSplitRange$cd、$cs、$rs
将$cs拆分为两个组件,根据偏移拆分为在$rs寄存器中提供的地址范围。
这种形式的另一指令:
CExtractPerms$cd、$cs、$rs
可以做同样的事情来将许可集从$cs取指到$cd中。
为了重新组合范围拆分或许可拆分能力,在实施例中,可以存在单一的CCombine指令,其形式为:
C组合$cd、$cs1、$cs2
这将检查$cs1和$cs2是否相邻并且具有相同的许可和拆分比例、相同的范围和许可但不同的拆分比例、或者相同的范围和拆分计数但不同的许可,然后$cs1和$cs2中的值将被替换为空并且组合的能力将放置在$cd中。
为了重新组装分片能力,这也可以使用单个CCombinine指令或使用用于组合许可、拆分计数和范围的单独指令来完成。
能力操纵操作是原子的。即,一个线程在切换到另一线程之前不能只对能力执行部分更新。即,移动或修改能力是不可划分的操作。例如,在能力操作的中间进行中断不应当允许观察到部分状态。优选地,这是在硬件中实施的。
还可以提供用于拆卸分区(例如,指定位址空间)400的机制。允许这样做的策略可以在地址空间执行程序403中指定。
根据以上讨论的各种可能性,因此提供了对提供类CHERI能力的架构的扩展集,该类能力将允许诸如类SGX指定位址空间的分区。SGX和CHERI都促进了划分,但威胁模型截然不同。SGX假定受信任的应用试图保护自己免受不受信任的OS和/或管理程序的影响。CHERI假定应用的相互不信任的组件试图相互保护,以在受信任的OS上运行。希望应用可以同时保护免于这两者。本公开提供了用于实现这一点的各种实施例。
一些另外的示例性实施细节现在下面阐述,再次仅作为说明。
概括地说,能力授予对地址范围的权利。在现有的CHERI工作中,它授予对虚拟存储器的范围的权利,因此可以在程序具有虚拟地址概念的地方使用(最常见的是作为指针的源语言概念的底层实现)。当能力授予对物理存储器的范围的访问时,它必须在软件具有物理地址概念的地方使用,例如在页表和类似结构中。
对物理存储器的线性能力是授予对物理存储器的范围的独占访问的令牌。负责限定虚拟到物理转换的系统代码(例如,操作系统内核)将限定引用该能力的页表条目。至少有两种可能的机制来实现这一点。
作为第一种可能性,能力由地址空间执行程序以结构化形式存储。OS更新传统页表以引用物理地址和页表遍历结束时的附加阶段,以检查该结构并且验证所表示的地址范围的能力是否由当前执行组件的地址空间执行程序保持。
作为第二种可能性,能力由地址空间执行程序存储在平面表中,并且叶页表条目包括该表的索引和该能力内的偏移。然后页表遍历器具有更简单的附加步骤来检查这是有效的能力以及页表中的偏移在指定的范围内。这种方法允许任意级别的委派(即,相当于嵌套虚拟化),其开销低于当前实现中的单个虚拟化级别。
第一种可能性更复杂,但不需要修改OS以了解该机制。第二种可能性确实需要修改OS以了解该机制,但优势是复杂性较低。
地址空间执行程序是针对其直接管理的代码的所有特权级别信任的代码。在执行程序中运行的恶意软件很多都不会违反由硬件实施的隔离保证。个体执行程序可以基于它们的证明报价(“quote”)决定是否信任其他执行程序。如果执行程序未能禁用中断,则它可能会失去自己的能力,但不能窃取其他人的能力。如果接收能力的执行程序没有执行正确的TLB失效,则发送区域可能(暂时)能够访问存储器,但同样,有缺陷的指定位址空间只能损害其自身的安全性。管理程序信任任何正在运行的指定位址空间以获取一些可用性保证(即,它们不会意外破坏能力,使系统在重新启动之前无法访问某些存储器)。
通过限制系统中的哪些实体可以创建新的执行程序来减轻这种风险,以便低级软件(例如,引导固件和管理程序)可以将允许执行程序集限制为实施特定策略的小集合。这是与证明机制一起完成的(见下文)。
地址空间执行程序还可以负责确保一些不变量,诸如对能力表的所有更新都被安全地执行(中断被禁用,因此寄存器中的能力不会被不知道如何保存它们的代码意外溢出,广播TLB无效,以确保在系统的其他部分中没有对拥有的能力集的过时引用)。
分片为此添加了受控的共享机制。页表遍历器在安装TLB条目时执行相同的能力检查,但现在两个地址空间执行程序可以传送这样一个事实,即,在它们之间,它们可以解释对页面的所有引用,因此由它们共享,但不被系统中的任何其他实体共享。例如,受防护的VM和用户空间指定位址空间可以共享管理程序无法查看的页面。
能力存储在存储器和能力寄存器中。它们都受到标签位的保护(标签位不可寻址。可以查询能力寄存器并且清除它,但不能设置(并且不能为线性能力清除)。线性保证是通过只允许用于在寄存器与存储器之间移动能力的原子交换操作来实施的。
硬件对所有种类的能力实施严格的起源树:能力不能从无到有,它们只能通过对现有能力的允许操作来构建。线性能力的操作集略有不同,因为所有操作都是破坏性的:它们可以拆分和组合,但这样做会破坏原始能力,同样它们可以在寄存器与存储器之间移动但不能复制。
转向图1所示的系统图的可能实现,页表112优选地存储在存储器中。原则上,它可以在硬件或寄存器文件中实现,但对于用例来说,它将是大型数据结构,并且在存储器中以外的实现可能不切实际。页表112的数据结构有多种不同的可能实现,例如平面表查找、树等。粗略地说,MMU使用了两种机制(在其中可以实现存储器访问逻辑108的至少部分)。
第一种机制使用软件管理的TLB 114。这些用于MIPS和早期的SPARC(较新的SPARC是混合的)。当CPU遇到TLB未命中时,它会传递异常,并且一些系统代码会安装新的TLB条目。使用软件TLB实现该想法会将异常传递到地址空间执行程序,该执行程序将发出TLB填充指令,以便以线性能力表示存储器中的(物理)地址。然后CPU将检查物理地址是否在执行程序内(通过检查地址空间执行程序能力寄存器中的边界),加载能力,然后安装TLB条目。
第二类MMU机制使用硬件管理的TLB 114。这限定了提供从虚拟地址空间到物理地址空间的部分映射的数据结构(通常是页表,尽管还有一些其他变型)。当CPU在TLB中遇到未命中时,专用的硬件状态机会遍历数据结构以找到要插入TLB的条目。如果硬件页表遍历器未能找到条目,则它会发出异常,这允许软件在页表中添加丢失的条目并且重新启动遍历。在支持虚拟化的系统中,通常有两个级别的页表。一个由访客OS管理,从虚拟地址转换为伪物理地址。第二个由管理程序管理,在伪物理地址与物理地址之间进行转换。在TLB未命中时,页表遍历器将遍历两者并且将它们组合起来以提供虚拟到物理映射。两个层都可能缺少条目,并且异常会传递给OS或管理程序,具体取决于哪个层缺少条目。这允许OS和管理程序独立执行交换。对于具有硬件管理TLB的系统,有三个选项。
在硬件管理的TLB的第一选项中,在隔离区域内运行的软件知道隔离机制。在这种情况下,地址空间执行程序管理物理能力的简单索引数据结构(例如,数组),并且区域内的软件维护页表集(或等效)。在传统的页表中,最后一跳提供了页面开始的物理地址和许可集。在这个模型中;然而,最后一步是对由转换管理的数据结构的索引。从安全模型的角度来看,页表是不可信的:只有最后一次检查(能力的检查,由执行程序拥有并且从该表中引用)是重要的。注意,该模型可能涉及用于页表本身的地址保护的附加机制,例如显式管理的TLB条目或寄存器,它为由当前页表使用的整个存储器范围提供能力,或者提供在页表遍历期间使用的由指定位址空间执行程序管理的更简单的表。
在硬件管理的TLB的第二选项中,在隔离区域内运行的软件不知道隔离机制(或者,至少,管理地址转换的部分不知道)。该代码管理一些不受信任的页表,与普通VM一样,这些页表从虚拟地址映射到伪物理地址。执行程序管理从伪物理到物理的映射。二级转换中的最后一项是存储器的能力,并且这在TLB填充时进行检查。
对于用户空间指定位址空间模型,第三选项是第二选项的轻微变化。这种变化具有由执行程序为指定位址空间管理的单级页表,并且为OS提供一些接口以用于添加不受信任的存储器的映射。从硬件的角度来看,这与第二选项相同,唯一的区别是,在指定位址空间执行程序中运行的软件具有一些接口以允许以独占方式委托某些页面、以及将某些页面委托为共享区域和外部API以允许OS更新共享区域的页表。
在实施例中,能力被保存在寄存器302、304中,但也是存储在存储器106中的执行程序403的部分。
寄存器是架构抽象,而TLB 114(大部分)是微架构实现细节。能力寄存器用于显式加载和存储能力。在该模型中,它们主要由在地址空间执行程序内部运行的软件使用,以操纵MMU将检查以确定条目是否有效的数据结构。TLB响应于显式失效(即,“删除该能力的地址转换”)。对于硬件管理的TLB,它由页表遍历器隐式填充(在软件管理的TLB中,它响应于中断而被显式地填充)。
原则上,该模型可以不利用TLB 114而被实现,但它会慢得多。与TLB的交互是优选实施例的设计的显著部分。
根能力寄存器302是系统寄存器。系统寄存器(也称为“机器特定寄存器”或“硬件寄存器”)是不属于通用寄存器集的寄存器。提供根能力系统寄存器302是因为除非针对该资源提供能力否则不能访问资源。因为能力既存储在存储器中又授予对存储器的访问,因此需要某种机制来引导访问。因此,实施例使用至少一个寄存器302来包含标识执行程序(并且授予对执行程序的访问)的能力,该执行程序包含由特定隔离区域可使用的其他能力。(一个寄存器就足够了,但对于某些实现,多于一个可能是方便的,例如以显式地分离执行程序的代码、数据和能力表)。在软件管理的TLB系统中,该能力标识在TLB未命中时将向其传递异常的区域。在硬件管理的TLB系统中,该能力标识页表遍历器在尝试执行TLB填充时可能检查的区域。
在系统启动时,在进入第一地址空间执行程序之前,禁用任何第二级转换并且简单地对照该能力来检查所有存储器访问。存在机制可以引导第一地址空间执行程序来管理这些能力。这包括:
i)将针对地址空间执行程序的代码和初始数据结构加载到地址空间的区域中,
ii)从初始能力中划分出该区域,以及
iii)启动地址空间执行程序并且为其提供对其余存储器的能力。
EnclaveCall指令将从调用方的根能力(在系统寄存器或通用能力寄存器中)向被调用方提供以下两种情况中的一个情况:
-如果根能力是地址空间执行程序能力,则被调用方将接收到该指定位址空间的进入能力。
-如果根能力是线性物理能力,则被调用方将接收该能力。
在具有类信任区抽象的系统中,这将由引导固件完成,该固件随后将针对管理程序和TEE创建地址空间执行程序。
MMU负责实施所有这些保证,尽管根能力存储在通常不被认为是MMU的部分的系统寄存器中。从逻辑上讲,它旨在由MMU读取。在物理上,它可以存储在MMU中,对该架构寄存器的写入是对MMU的隐式消息。
在操作中,如果能力在软件模块运行时在寄存器中或者在由软件模块可达的存储器中,则能力由软件模块401拥有。软件组件可达的存储器是从根能力寄存器可达的能力的传递闭包(“closure”)。
存在根能力以提供根访问。例如,在具有硬件管理的TLB的系统中,使用由地址空间执行程序管理的单级转换:
i)隔离软件读取虚拟地址X;
ii)TLB没有来自地址X的映射;
iii)页表遍历器检查根能力以发现指定位址空间执行程序的位置;
iv)页表遍历器沿着页表(通常是树)向下遍历,以检查每个条目是否在由根能力标识的区域内;
v)在叶节点处,页表遍历器中找到能力;
vi)页表遍历器从包含地址X的虚拟页面向由能力标识的物理页面插入TLB条目,并且具有在该能力中标识的许可;进而
vii)加载指令成功。
如果任何能力检查失败,则CPU将向地址空间执行程序传递异常,地址空间执行程序然后可以将其转发给另一执行程序。
这在指定位址空间中有页表的情况下稍微复杂一些。在这种情况下,每个页表访问都需要更复杂的能力检查。例如,在完全嵌套的分页方法中,页表中的每个条目都在伪物理地址空间中,并且需要运行这个操作序列来检查访问(这就是嵌套分页在当前CPU上的工作方式,使用在最后一层添加能力检查)。
根能力用于当前地址空间执行程序。在域转变时,它被替换为目标执行程序的能力。除非通过指定位址空间拆卸(见下文),否则无法将其取指。一旦创建了进入能力,拥有该能力副本的任何代码都可以调用指定位址空间。地址空间执行程序将明确地将其指定位址空间能力转换为正常的线性物理能力,并且在指定位址空间破坏期间将其传递给另一执行程序。
每个软件模块401运行其自己的分区(例如,指定位址空间)400,该分区是包括基本区域402和非执行程序区域404的存储器地址子空间。基本区域至少包括相应软件组件的执行程序。软件组件本身(例如,应用)存储在非执行程序区域404中。
首先,只有管理程序在运行并且拥有所有地址空间。为了允许另一隔离组件运行,管理程序在存储器中为它创建相应基本区域,并且用相应执行程序填充它。基本区域得到特殊保护而不被修改。这大致类似于当前CPU中的特权/非特权模式分离。由根能力标识的区域只能由在执行程序模式下运行的代码修改,该代码被包含在该区域内,并且只能通过显式入口点从非执行程序代码进入。
为了设置和运行分区(例如,指定位址空间),这涉及管理程序或OS执行EnclaveCreate指令。EnclaveCreate指令将线性物理能力转换为进入能力。这是破坏性操作,消耗线性能力(并且要求能力不分片——即它拥有存储器和所有许可的独占所有权)。最初,只有创建指定位址空间的实体将拥有进入能力的副本,因此只有该实体可以调用它。进入能力的副本可以被委托给其他地方。如果出现以下任一情况,则授予创建指定位址空间的许可:
根能力是线性物理能力,或
根能力是地址空间执行程序能力并且当前执行软件处于执行程序模式。
这对限制允许第一执行程序对所有后续执行程序实施策略。
稍后可以将另一非连续地址空间添加到指定位址空间/分区。为此,另一软件组件(管理程序或另一组件,例如OS或另一应用)为所讨论的分区/指定位址空间提供它的能力中的一个能力。这是简单的EnclaveCall,在通用能力寄存器中传递委托的能力。这涉及从拥有它们的指定位址空间执行程序加载它们的交换操作。如果调用方希望共享存储器,则调用方将在将其传递给另一指定位址空间之前对能力进行分片。
简单硬件机制与(可能的)复杂软件策略之间的明确分离是该设计的另一值得注意的部分。
目标的进入能力是EnclaveCall指令的操作数。这导致执行到目的地指定位址空间/分区的执行程序的预定地址的分支。在实施例中,它将总是跳转到执行程序中的特定固定地址。在一些其他实施例中,它可以采用整数操作数并且跳转到由该索引标识的入口点,作为性能优化。无论哪种方式,执行程序可能会决定在上面构建类似线程的抽象,或者只是获取互斥锁,或者无法获取互斥锁并且返回。
执行程序代码现在正在运行。然后它可以跳转到包括任何非连续空间的非执行程序区域,以运行相应的软件组件(例如,OS或应用)。在一些实现中,具有用于跳出执行程序的显式指令可能是有益的。
破坏指定位址空间被称为“拆卸”。指定位址空间拆卸依赖于指定位址空间执行程序中的受信任入口点。这只能由在指定位址空间创建期间提供的小进入能力集中的一个调取,通常只有管理程序。
如上所述,一旦存在进入能力,就需要某种机制来使它们无效(撤销),以便当执行程序被破坏时,可以在不违反线性不变量的情况下重构初始线性存储器能力。这可以建立在线性机制之上,因此进入能力是线性的和可分片的,但这并不必然是理想的,原因有两个。首先,因为它将可以调取执行程序的事物的数目限制为系统支持的分片数目。如果每个VM都希望能够调取管理程序,则每个VM都需要进入管理程序的能力。使用8位拆分计数,这会将您限制为256个VM。第二问题是,当执行程序被拆卸时,使线性能力失效的唯一方法就是去收集它们。这需要大量的通信来标识线性能力最终出现的所有地方并且交还它们。
因此,在优选设计中,撤销是通过存储在进入能力和存储器中的执行程序开始处的唯一编号来实现的。仅当该数字匹配时,进入能力才有效,因此可以通过改变该数字存储器来使所有进入能力无效(撤销)。还具有标签检查。如果没有标签检查,就有可能构建系统认为是执行程序的存储器区域并且重用现有的进入能力,在过程中构建重复的线性能力并且违反系统的不变量。指定位址空间的开始具有粗粒度的(例如,每页一个)标签,以表明它是执行程序的开始。
因此,可以通过增加计数器值来拆卸执行程序,这会使所有进入能力无效,强制在该执行程序中运行的所有其他内核终止,然后清除寄存器中的指定位址空间位和EnclaveCall(这将传递能力链接寄存器中的当前根能力作为正常的物理能力)。
为了在该设计中破坏指定位址空间,将清除标签位以使任何现有的进入能力被调取无效,同时确保恰好一个线程处于活动状态。这是通过调用指定位址空间中的拆卸入口点来排序的。这会调取指定位址空间执行程序代码,该代码将首先清除标记,以确保没有尚未运行指定位址空间代码的内核可以这样做。然后它将向运行指定位址空间代码的所有其他内核发送IPI,以要求它们调取管理程序。一旦所有其他正在运行的线程已经向拆卸线程通知它们已经退出,拆卸线程会将与指定位址空间关联的所有物理存储器归零,清除其基本物理能力中的指定位址空间位,最后调取管理程序。
实施例还可以采用证明机制。当管理程序用指定位址空间执行程序的代码填充执行程序区域402时,该代码被管理程序和指定位址空间两者信任。在指定位址空间创建之后,除本节中的代码外,任何代码都不能修改指定位址空间基本区域中的任何内容。管理程序的信任来自它提供该代码的事实。指定位址空间所有者信任该代码,因为它是证明报价的部分,并且因此可以被验证为商定的指定位址空间执行程序映像。该代码取代了SGX中大量未经验证的秘密微码。
系统可以将证明作为两阶段过程来执行。硬件(微码或小型协处理器)将为每个指定位址空间执行程序映像产生证明报价,以特别说明它已经在特定地址创建具有特定版本的指定位址空间,并且它正在运行具有特定哈希的执行程序。对于远程证明,这还将包括由指定位址空间执行程序生成的公钥的签名。这对于本地证明来说不是必需的,因为指定位址空间的基本地址及其版本嵌入在进入能力中。
因为在中断被禁用的情况下运行并且插入所有进入和退出事件,所以指定位址空间执行程序代码可以为在指定位址空间内运行的软件生成后续证明报价。
应当理解,以上实施例仅以示例的方式进行了描述。
更一般地,本公开涉及一种系统,该系统包括:包括一个或多个执行单元的执行逻辑;包括一个或多个存储器单元的存储器;以及用于查找存储器的物理地址空间与虚拟地址空间之间的映射的存储器访问逻辑。执行逻辑被布置为运行各自在物理地址空间的相应分区中的多个软件模块,包括执行由上述软件模块中的当前执行软件模块执行的存储器访问操作,存储器访问操作将虚拟地址范围中的虚拟地址指定为存储器访问操作的目标。存储器访问逻辑被配置为执行以下操作:查找物理地址空间中映射到虚拟地址的物理地址,检查授予对上述物理地址的访问的能力在当前执行的软件模块有权访问的存储位置中是否被找到,并且如果在存储位置中找到能力,则授予对上述物理地址的访问以用于执行上述存储器访问操作。
当前执行软件模块有权访问的存储位置可以是当前执行代码可以访问的能力寄存器,或者是当前执行模块的相应存储器分区中的区域。
每个能力指定该能力授予对其的访问的物理地址空间的相应区域。在实施例中,能力中的至少一个能力授予对其指定地址范围的独占访问。
存储器访问逻辑可以在专用硬件电路系统、固件、或在执行程序空间中运行的低级软件或其任何组合中实现。
在实施例中,如果访问未被授予,则执行逻辑可以触发异常。
存储器访问操作例如可以是用于从目标地址加载值的加载操作,或者是用于将值存储到目标地址的存储操作,或者是用于从目标地址取指要由执行逻辑执行的指令的指令取指操作。
根据本公开的第一方面,执行逻辑还被配置为,执行线性能力转移操作,线性能力转移操作将能力中的一个能力从上述软件模块中的第一软件模块的分区转移到上述软件模块中的第二软件模块的分区,而不将能力保留在第一软件模块的分区中。
根据本公开的备选或附加的第二方面,执行单元被配置为执行分片操作,由此能力中的一个能力被划分为至少两个实例,并且执行单元还被配置为执行分片重新组合操作,由此实例被重新组合。
为了实现这一点,在实施例中,能力中的至少一个能力可以包括相应拆分计数值;其中在分片操作中,划分被记录在每个实例的相应拆分计数值中;并且其中重新组合基于实例的相应拆分计数值,并且实例数目的减少被记录在重新组合能力的相应拆分计数值中。
在实施例中,执行逻辑被配置为不允许任何能力被划分超过最大预定次数。
在实施例中,上述软件模块中的源软件模块可以将分片实例中的一个从源软件模块的分区转移到上述软件模块中的目的地软件模块的分区。这种转移可以是线性的。另一实例可以保留在源模块的分区中,或者转移到另一软件模块的分区。这种转移也可以是线性的。为了能够重新组合,实例可以被全部转移回同一软件模块的分区。在实施例中,分片实例的所有转移可以是线性的。
在实施例中,由上述线性能力操作转移的能力可以是上述分片实例中的一个实例。
在实施例中,目的地模块可以检查拆分计数值以确定它是否具有对相应地址范围的独占访问,和/或确定相应能力有多少其他实例在循环中。
任何一个、多个或所有以下实施例可以应用于第一方面或第二方面。
在实施例中,软件模块中的至少一个软件模块可以包括在操作系统上运行的应用。在实施例中,软件模块中的至少一个模块可以包括在其上运行有一个或多个应用的操作系统,例如,上述软件模块中的一个或多个其他软件模块。在实施例中,软件模块中的至少一个可以包括在其上运行有至少一个操作系统的管理程序,例如,它也可以是上述软件模块中的一个模块。
注意,在应用、操作系统和管理程序(在OS上运行的(多个)应用和在管理程序上运行的OS)的三层堆栈的情况下,当当前执行软件模块是应用中的一个应用时,虚拟地址到物理地址的映射可以通过伪物理地址。换言之,当前执行应用指定虚拟地址,操作系统转换为伪物理地址,并且存储器访问逻辑通过从伪物理地址到(真实)物理地址的映射来执行映射的上述确定。
每个相应软件模块有权访问其相应分区的物理地址范围。由于这些能力既授予对存储器的访问又存储在存储器中,因此可以提供机制来引导访问。为此有很多可能的机制,这些机制可以单独使用或更优选地一起使用。
例如,在实施例中,分区中的每个分区可以包括相应基本区域,并且存储器访问逻辑被配置为至少通过以下方式执行上述检查:检查授予对上述物理地址的访问的能力在当前执行软件模块的基本区域中是否被找到。
在实施例中,每个软件模块的基本区域可以在上述存储器的受保护执行程序区域中实现,受保护执行程序区域仅由在执行逻辑的特权执行程序模式下运行的执行程序级代码可访问。
在实施例中,除了基本区域,分区中的每个分区除基本区域以外还可以包括物理地址空间的相应的另外的区域,其中相应基本区域中的能力授予对相应的另外的区域的访问。
在实施例中,软件模块中的每个软件模块可以包括相应地址空间执行程序,相应地址空间执行程序是用于管理相应分区的可执行的执行程序代码的部分,相应地址空间执行程序存储在相应软件模块的相应基本区域中、并且从相应基本区域中被取指。
在实施例中,软件模块中的每个软件模块还可以包括除地址空间执行程序以外的相应程序,该相应程序被存储在相应分区的相应的另外的区域中、并且从相应的另外的区域中被取指。
每个模块的程序可以例如是应用、操作系统或管理程序(或其部分)。
上述基本区域中的每个的能力可以例如以存储器访问表的形式存储。基本区域的上述检查可以包括检查当前执行软件模块的存储器访问表。
在实施例中,该系统可以包括用于存储当前执行软件组件的根能力的至少一个根能力寄存器。存储器访问逻辑可以被配置为至少通过检查授予对上述物理存储器地址的访问的能力在根能力寄存器中是否被找到来执行上述检查。
在实施例中,根能力可以授予对当前执行的软件模块的基本区域的访问。
在实施例中,存储器访问逻辑可以被配置为通过以下方式执行上述检查:检查授予对上述物理存储器地址的访问的能力在根能力寄存器或当前执行软件模块的基本区域中的任何一个中是否被找到,并且授予对物理存储器地址的访问的能力如果在根能力寄存器或者当前执行的软件模块的基本区域中的任何一项中找到,则授予访问。
在实施例中,上述软件模块中的调用软件模块可以被配置为:执行调用操作以调用上述软件模块中的另一被调用软件模块,并且在这样做时执行域转变,域转变将上述根能力寄存器中的根能力从调用软件模块的根能力切换到被调用软件模块的根能力。
由于所公开的能力系统,调用软件模块和被调用软件模块都不能访问对方的内部状态(即,对方的分区中的数据或代码)。
调用软件模块例如可以是上述第一软件模块并且被调用软件组件可以是上述第二软件模块。
在实施例中,上述调用可以由调用软件模块的地址空间执行程序来执行;和/或,上述调用可以包括跳转到被调用软件模块的地址空间执行程序。在一些这样的实施例中,上述跳转可以包括跳转到被调用模块的地址空间执行程序中的预定点,例如,跳转到基本区域中的预定指令地址。备选地,可以指定要跳转到的点。
一旦被调用,被调用模块的地址空间执行程序就可以随后跳转到分区的相应的另外的区域中的相应程序。
在实施例中,在上述调用之前,调用软件模块或上述软件组件中的另一软件组件可以被配置为初始通过设置被调用软件组件的基本区域来创建在其中运行被调用软件组件的上述分区中的一个分区(例如,指定位址空间)。该创建可以由上述调用或其他软件模块的地址空间执行程序来执行。
在实施例中,每个能力可以指定一个或多个类型的许可:读取、写入和/或执行。如果存储器访问操作是加载操作,则对物理地址的访问的授予进一步以正在读取的许可类型为条件。如果存储器访问操作是存储操作,则对物理地址的访问的授予还以的许可类型是写入为条件。如果存储器访问操作是指令取指或分支操作,则对物理地址的访问的授予还以许可类型执行为条件。
作为分片的备选或附加特征,在另外的实施例中,执行逻辑可以被配置为执行范围拆分操作,由此:一个软件模块(例如,上述第一模块或上述源模块)的分区中的父能力(其指定较大地址范围)划分为两个子能力,该子能力指定较小地址范围,该较小地址范围是较大地址范围的独占片段。子能力中的至少一个子能力可以转移到软件模块中的另一接收方软件模块(例如,上述第二模块或上述目的地模块)的分区。这种转移可以以线性或分片方式实现。在一些这样的实施例中,执行逻辑可以被配置为执行范围重新组合操作,由此子能力被重新组合成具有更大范围的重新组合能力。重新组合能力可以放置在初始软件模块、接收方或软件模块中的另外的软件模块的分区中。
执行逻辑可以被配置为执行机器代码指令,每个机器代码指令是在执行逻辑的指令集中限定的多个指令类型的实例,
在实施例中,指令集可以包括一个或多个存储器访问指令类型,并且上述存储器访问操作和存储器访问逻辑的上述操作可以由上述存储器访问指令中的单个存储器访问指令的单个实例调取。
备选地或附加地,指令集可以包括一个或多个能力操纵指令类型。
在一些这样的实施例中,上述线性能力转移操作可以至少部分由上述能力操纵指令类型中的一个或多个能力操纵指令类型的一个或多个实例调取。
例如,存储器访问指令可以是单个加载指令、单个存储指令或单个指令取指指令。
在另外的备选或附加实施例中,上述分片操作可以至少部分由上述能力操纵指令类型中的一个或多个能力操纵指令类型的一个或多个实例调取。
在实施例中,上述分片重新组合操作可以至少部分由上述能力操纵指令类型中的一个或多个能力操纵指令类型的一个或多个实例调取。
在实施例中,上述调用可以至少部分由上述能力操纵指令类型中的一个或多个能力操纵指令类型的一个或多个实例调取。
在实施例中,上述分割范围操作可以至少部分由上述能力操纵指令类型中的一个或多个能力操纵指令类型的一个或多个实例调取。
在实施例中,上述范围重新组合操作可以至少部分由上述能力操纵指令类型中的一个或多个能力操纵指令类型的一个或多个实例调取。
在实施例中,能力操纵指令中的一个或多个可以将上述能力寄存器中的一个或多个能力寄存器的指示作为操作数。
在另外的实施例中,该系统可以包括用于保存从至少当前执行软件模块的基本区域加载的能力的多个另外的能力寄存器。地址空间执行程序可以被布置为在域转变时使用另外的能力寄存器来存储能力,和/或使用另外的能力寄存器作为能力操纵指令类型中的一个或多个能力操纵指令类型的操作数。
在这样的实施例中,给定能力可以从基本区域加载到另外的能力寄存器中的一个寄存器,并且随后存储回基本区域,但是不会同时保持在能力寄存器和基本区域两者中。
在另外的实施例中,存储器被划分为用于存储数据的多个字,并且包括与每个字连接的相应标签位。标签位被布置为在相应字是能力的部分时被断言,而当该字可用于其他数据时被取消断言。在这样的实施例中,上述检查可以包括检查标签位,其中每个能力仅在标签位被断言时才有效;和/或,在实施例中,标签位除了通过在执行程序模式下运行的执行程序代码之外是不可寻址的;和/或,如果上述任何字是从存储器中加载的,则标签位随其传播。
根据本公开的另一方面,提供了一种操作根据上述任何陈述的系统的方法。
根据另一方面,提供了一种体现在一个或多个计算机可读介质上的软件,该软件用于在根据上述任何陈述的系统上执行,该软件包括上述软件模块中的一个或多个模块,一个或多个软件模块包括用于执行存储器访问操作的至少一个实例和线性能力转移操作的至少一个实例的指令。
一旦给出本文中的公开内容,所公开的技术的其他变型或用例对于本领域技术人员来说可能变得很清楚。本公开的范围不受所描述的实施例的限制,而仅受所附权利要求的限制。

Claims (15)

1.一种系统,包括:
执行逻辑,包括一个或多个执行单元;
存储器,包括一个或多个存储器单元;以及
存储器访问逻辑,用于查找所述存储器的物理地址空间与虚拟地址空间之间的映射;
其中所述执行逻辑被布置为运行各自在所述物理地址空间的相应分区中的多个软件模块,包括执行由所述软件模块中的当前执行的软件模块执行的存储器访问操作,所述存储器访问操作将所述虚拟地址范围中的虚拟地址指定为所述存储器访问操作的目标;
所述存储器访问逻辑被配置为执行以下操作:查找所述物理地址空间中被映射到所述虚拟地址的物理地址,检查授予对所述物理地址的访问的能力在所述当前执行的软件模块有权访问的存储位置中是否被找到,并且如果所述能力在所述存储位置中被找到,则授予对所述物理地址的访问以用于执行所述存储器访问操作;以及
所述执行逻辑还被配置为执行线性能力转移操作,所述线性能力转移操作将所述能力中的一个能力从所述软件模块中的第一软件模块的所述分区转移到所述软件模块中的第二软件模块的所述分区,而不将所述能力保留在所述第一软件模块的所述分区中。
2.根据权利要求1所述的系统,其中所述分区中的每个分区包括相应基本区域,并且所述存储器访问逻辑被配置为至少通过以下方式来执行所述检查:检查授予对所述物理地址的访问的能力在所述当前执行的软件模块的所述基本区域中是否被找到。
3.根据权利要求2所述的系统,其中每个软件模块的所述基本区域被实现在所述存储器的受保护的执行程序区域中,所述受保护的执行程序区域仅由在所述执行逻辑的特权执行程序模式下运行的执行程序级代码可访问。
4.根据权利要求2或3所述的系统,其中所述分区中的每个分区除所述基本区域以外还包括所述物理地址空间的相应的另外的区域,其中所述相应基本区域中的所述能力授予对所述相应的另外的区域的访问。
5.根据权利要求2、3或4所述的系统,其中所述软件模块中的每个软件模块包括相应地址空间执行程序,所述相应地址空间执行程序是用于管理所述相应分区的可执行的执行程序代码的部分,所述相应地址空间执行程序被存储在所述相应软件模块的所述相应基本区域中、并且从所述相应基本区域被取指。
6.根据至少从属于权利要求4的权利要求5所述的系统,其中所述软件模块中的每个软件模块还包括除所述地址空间执行程序以外的相应程序,所述相应程序被存储在所述相应分区的所述相应的另外的区域中、并且从所述相应的另外的区域被取指。
7.根据任一前述权利要求所述的系统,包括:
至少一个根能力寄存器,用于存储所述当前执行的软件组件的根能力;以及
所述存储器访问逻辑被配置为至少通过检查授予对所述物理存储器地址的访问的能力在所述根能力寄存器中是否被找到来执行所述检查。
8.根据从属于权利要求2至6中任一项的权利要求7所述的系统,其中所述根能力授予对所述当前执行的软件模块的所述基本区域的访问。
9.根据从属于权利要求2至6中任一项的权利要求7或8所述的系统,其中所述存储器访问逻辑被配置为通过以下方式执行所述检查:检查授予对所述物理存储器地址的访问的所述能力是否在所述根能力寄存器或者所述当前执行的软件模块的所述基本区域中的任何一项中被找到,并且如果授予对所述物理存储器地址的访问的所述能力在所述根能力寄存器或者所述当前执行的软件模块的所述基本区域中的任何一项中被找到,则授予访问。
10.根据权利要求7至9中任一项所述的系统,其中所述软件模块中的调用软件模块被配置为:执行调用操作以调用所述软件模块中的另一被调用软件模块,并且在这样做时执行域转变,所述域转变将所述根能力寄存器中的所述根能力从所述调用软件模块的所述根能力切换到所述被调用软件模块的所述根能力。
11.根据任一前述权利要求所述的系统,其中每个能力指定一个或多个类型的许可:读取、写入和/或执行;
其中如果所述存储器访问操作是加载操作,则对所述物理地址的访问的所述授予还以所述许可类型是读取为条件,
如果所述存储器访问操作是存储操作,则对所述物理地址的访问的所述授予还以所述许可类型是写入为条件,和/或
如果所述存储器访问操作是指令取指或分支操作,则对所述物理地址的访问的所述授予还以所述许可类型是执行为条件。
12.根据任一前述权利要求所述的系统,其中:
所述能力中的至少一个能力包括相应拆分计数值;
所述执行单元被配置为执行分片操作,通过所述分片操作,能力被划分为至少两个实例,并且所述划分被记录在每个实例的相应拆分计数值中;以及
所述执行单元还被配置为执行分片重新组合操作,通过所述分片重新组合操作,所述实例基于所述相应拆分计数值被重新组合,并且所述实例数目的减少被记录在重新组合的所述能力的所述相应拆分计数值中。
13.根据任一前述权利要求所述的系统,其中所述执行逻辑被配置为执行机器代码指令,每个机器代码指令是在所述执行逻辑的指令集中定义的多个指令类型的实例,其中以下一项或两项:
-所述指令集包括一个或多个存储器访问指令类型,并且所述存储器访问操作和所述存储器访问逻辑的所述操作由所述存储器访问指令中的单个存储器访问指令的单个实例调取;
-所述指令集包括一个或多个能力操纵指令类型,并且所述线性能力转移操作至少部分由所述能力操纵指令类型中的一个或多个能力操纵指令类型的一个或多个实例调取。
14.根据至少从属于权利要求5的权利要求10或13所述的系统,包括多个另外的能力寄存器,所述多个另外的能力寄存器用于保存从至少所述当前执行的软件模块的所述基本区域所加载的能力;
其中所述地址空间执行程序能够在域转变时使用所述另外的能力寄存器来存储能力,和/或能够使用所述另外的能力寄存器作为所述能力操纵指令类型中的一个或多个能力操纵指令类型的操作数。
15.根据任一前述权利要求所述的系统,其中所述软件模块包括以下中任何一项、多项或全部:
一个或多个应用;
至少一个操作系统,一个或多个应用被布置为在所述至少一个操作系统上运行;和/或
管理程序,至少一个操作系统被布置为在所述管理程序上运行。
CN202080077124.3A 2019-11-06 2020-10-20 机密计算机制 Pending CN114651244A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP19207496.1 2019-11-06
EP19207496.1A EP3819775A1 (en) 2019-11-06 2019-11-06 Confidential computing mechanism
PCT/US2020/056399 WO2021091686A1 (en) 2019-11-06 2020-10-20 Confidential computing mechanism

Publications (1)

Publication Number Publication Date
CN114651244A true CN114651244A (zh) 2022-06-21

Family

ID=68470416

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202080077124.3A Pending CN114651244A (zh) 2019-11-06 2020-10-20 机密计算机制

Country Status (4)

Country Link
US (1) US20220374349A1 (zh)
EP (2) EP3819775A1 (zh)
CN (1) CN114651244A (zh)
WO (1) WO2021091686A1 (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2592069B (en) * 2020-02-17 2022-04-27 Advanced Risc Mach Ltd Address calculating instruction
WO2023044715A1 (zh) * 2021-09-24 2023-03-30 华为技术有限公司 电子装置和安全访问软件的方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7917710B2 (en) * 2006-06-05 2011-03-29 Oracle America, Inc. Memory protection in a computer system employing memory virtualization
US10007546B2 (en) * 2015-01-19 2018-06-26 Vmware, Inc. Operating-system exchanges using memory-pointer transfers
GB2572151B (en) * 2018-03-19 2020-07-08 Advanced Risc Mach Ltd An apparatus and method for storing bounded pointers
US10691813B2 (en) * 2018-03-30 2020-06-23 Intel Corporation Techniques for enclave confidentiality management

Also Published As

Publication number Publication date
WO2021091686A1 (en) 2021-05-14
EP3819775A1 (en) 2021-05-12
EP4055488A1 (en) 2022-09-14
US20220374349A1 (en) 2022-11-24

Similar Documents

Publication Publication Date Title
Champagne et al. Scalable architectural support for trusted software
US8364910B2 (en) Hard object: hardware protection for software objects
Chen et al. Overshadow: a virtualization-based approach to retrofitting protection in commodity operating systems
US7272832B2 (en) Method of protecting user process data in a secure platform inaccessible to the operating system and other tasks on top of the secure platform
US9628279B2 (en) Protecting application secrets from operating system attacks
US9658878B2 (en) Transparent memory-mapped emulation of I/O calls
Zeldovich et al. Hardware Enforcement of Application Security Policies Using Tagged Memory.
US10459850B2 (en) System and method for virtualized process isolation including preventing a kernel from accessing user address space
US20120151184A1 (en) Hard object: constraining control flow and providing lightweight kernel crossings
EP3867763B1 (en) Trusted intermediary realm
US20220374349A1 (en) Confidential computing mechanism
Esswood CheriOS: designing an untrusted single-address-space capability operating system utilising capability hardware and a minimal hypervisor
US20220391326A1 (en) Confidential computing mechanism
US20220197993A1 (en) Compartment isolation for load store forwarding
US20240086579A1 (en) Key capability storage
Tarkhani et al. Enabling Lightweight Privilege Separation in Applications with MicroGuards
Zeng et al. Refinement-based Modeling and Formal Verification for Multiple Secure Partitions of TrustZone.
He et al. TZ-SSAP: Security-Sensitive Application Protection on Hardware-Assisted Isolated Environment
Lee Scalable architectural support for trusted software
Christopher et al. Overshadow: A Virtualization-Based Approach to Retrofitting Protection in Commodity Operating Systems
Singh Fundamental of Windows
Unalmis Analysis of Intel IA-64 processor support for secure systems

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination