CN114912138A - 使用硬件安全等级的安全计算的体系结构、系统及其方法 - Google Patents

使用硬件安全等级的安全计算的体系结构、系统及其方法 Download PDF

Info

Publication number
CN114912138A
CN114912138A CN202111625757.6A CN202111625757A CN114912138A CN 114912138 A CN114912138 A CN 114912138A CN 202111625757 A CN202111625757 A CN 202111625757A CN 114912138 A CN114912138 A CN 114912138A
Authority
CN
China
Prior art keywords
data
code
security
level
security level
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
CN202111625757.6A
Other languages
English (en)
Inventor
M·伦佩尔
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.)
M Lunpeier
Original Assignee
M Lunpeier
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 M Lunpeier filed Critical M Lunpeier
Publication of CN114912138A publication Critical patent/CN114912138A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • 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/1408Protection against unauthorised use of memory or access to memory by using cryptography
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • 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/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • G06F12/0835Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means for main memory peripheral accesses (e.g. I/O or DMA)
    • 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/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0877Cache access modes
    • G06F12/0882Page mode
    • 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/1433Protection 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 module or a part of a module
    • 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/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/145Protection 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 virtual, e.g. for virtual blocks or segments before a translation mechanism
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/30Authentication, i.e. establishing the identity or authorisation of security principals
    • G06F21/44Program or device authentication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/556Detecting local intrusion or implementing counter-measures involving covert channels, i.e. data leakage between processes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/04Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks
    • H04L63/0428Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks wherein the data content is protected, e.g. by encrypting or encapsulating the payload
    • H04L63/0435Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks wherein the data content is protected, e.g. by encrypting or encapsulating the payload wherein the sending and receiving network entities apply symmetric encryption, i.e. same key used for encryption and decryption
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/04Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks
    • H04L63/0428Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks wherein the data content is protected, e.g. by encrypting or encapsulating the payload
    • H04L63/0478Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks wherein the data content is protected, e.g. by encrypting or encapsulating the payload applying multiple layers of encryption, e.g. nested tunnels or encrypting the content with a first key and then with at least a second key
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/12Applying verification of the received information
    • H04L63/126Applying verification of the received information the source of the received data
    • 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
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2129Authenticate client device independently of the user

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • Storage Device Security (AREA)

Abstract

片上系统(SoC)设计为包括保护护城河(protective moat),从而允许SoC的外部接口充当安全执行者。防止将数据传送到不受信任的设备。数据可能只留给能够以其各自的安全等级保护该数据的友好设备。防止代码访问数据或跳转到代码无权处理或跳转到的地址。根据一个实施例,数据和代码都以相应的等级被加密存储,每个等级具有不同的加密密钥。n×n矩阵定义了安全等级可以混合的方式,特别是当使用两个不同的安全等级时。这提供了保护数据‑数据、代码‑代码和数据‑代码交互的方法。在配置、处理器上下文切换和安全通信期间,使用可信执行环境(TEE)。分级规则矩阵在TEE下是可编程的。

Description

使用硬件安全等级的安全计算的体系结构、系统及其方法
相关申请的交叉引用
本申请要求于2020年12月28日提交的美国临时申请第63/131,077号的优先权,其内容通过引用并入本文。
技术领域
本公开涉及计算环境,并且更具体地涉及安全计算环境,其与外部系统交互,该外部系统与该安全计算环境通信连接。
背景技术
如今,保护系统中的数据和代码对于几乎任何规模的企业来说都是一项日益严峻的挑战。恶意攻击是常见的,由于旨在窃取数据的恶意软件和例如旨在破坏数据的勒索软件,导致系统损坏。随着时间的推移,已经开发出了各种解决方案,但实际上每天都可以清楚地看到,犯罪者会找到进入系统的漏洞,并造成重大损害需要支付大量赎金以释放捕获的数据,或者花费时间和资源从此类攻击后留下的损坏中恢复系统的情况并不少见。还经常看到数据泄露报告,导致数据泄露或以其他方式被称为被盗的实体的声誉受损。
有多种解决方案来处理破坏数据和代码的企图,最常见的一种是使用防火墙。防火墙试图阻止大多数已知攻击方式的访问,并且在某些情况下还能够检测此类尝试的常见模式。其他保护手段包括监控系统活动和寻找异常,无论是实时还是离线。但是,每个系统都有其漏洞,黑客非常乐意找到并利用它们。在大多数情况下,只有在进行检测后漏洞才会被关闭,并且在许多情况下至少发生了一些损坏之后。
保留在系统存储器中的敏感数据或代码是易受攻击的,因此现有技术解决方案试图在系统执行不同操作的同时持续保护该数据。虽然这些解决方案有其优点,但也有其弱点。最大的弱点在于其完全或部分基于软件,并且几乎所有攻击都攻击软件漏洞。当然,一旦安全被破坏,无论出于何种原因,损害都会发生。这可能是因为保护系统在进入时没有识别恶意渗透者,或者没有检测到攻击,因为执行的操作看起来是合法的。因此,提供一种为系统提供与渗透情况独立的安全级别的解决方案将是有利的。
对每条指令和事务强制实施零信任将更加有利。例如,Evan Gilman和Doug Barth在 Zero Trust Networks中描述了零信任。允许可信执行环境(TEE)的轻松定义和迁移,这是机密计算计划背后的目标,这将更为有利。
发明内容
本公开的若干示例实施例的概述如下。提供该概述是为了方便读者以提供对此类实施例的基本理解,并不完全限定本公开的范围。该概述不是所有预期实施例的广泛概述,并且既不旨在识别所有实施例的关键或关键要素,也不旨在描绘任何或所有方面的范围。其唯一目的是以简化形式呈现一个或多个实施例的一些概念,作为稍后呈现的更详细描述的前奏。为方便起见,本文可以使用术语“一些实施例”或“某些实施例”来指代本公开的单个实施例或多个实施例。
本文公开的某些实施例包括一种安全系统,其包括:多个第一存储器单元,适于包含多个第一安全等级,其中每个第一安全等级被分配给该安全系统中的多个数据部分的相应数据部分,多个数据部分包括第一数据部分、第二数据部分和第三数据部分;多个第二存储单元,适于包含多个第二安全等级,其中每个第二安全等级被分配给安全系统中的多个代码部分的相应代码部分,该多个代码部分包括第一部分代码、第二部分代码和第三部分代码;处理电路;以及存储器,该存储器包含指令,当由处理电路执行时,该指令将安全系统配置为:基于至少一个许可规则、以及分配给第一数据部分和第二数据部分的相应第一安全等级,确定第一数据部分和第二数据部分之间的第一交互是否被允许;当确定第一交互被允许时,基于分配给第一数据部分和第二数据部分的相应安全等级生成第一结果安全等级;当确定第一交互不被允许时,阻止第一交互;基于至少一个许可规则、和分配给第一数据部分和第二数据部分的各自的第一安全等级,确定是否允许第一数据部分和第二数据部分之间的第二交互,当确定第二交互被允许时,基于分配给第一代码部分和第二代码部分的各自的安全等级生成第二结果安全等级;当确定第二交互不被允许时,阻止第二交互;基于至少一个许可规则和分配给第一数据部分和第二数据部分的各自的第一安全等级,确定是否允许第一数据部分和第二数据部分之间的第三交互,当确定第三交互被允许时,基于分配给第三数据部分和第三代码部分的相应安全等级生成第三结果安全等级,当确定第三交互不被允许时,阻止第三交互。
本文公开的某些实施例还包括一种用于安全计算的系统,包括:处理元件,其被配置为处理矩阵,该矩阵定义由处理元件处理的数据的安全等级和代码之间的交互。
本文公开的某些实施例还包括一种用于安全计算的系统,该系统包括:被配置为处理矩阵的子系统,该矩阵定义由处理元件处理的数据的安全等级和代码之间的交互。
附图说明
通过结合附图进行的以下详细描述,前述和其他目的、特征和优点将变得明显并且更容易理解,其中:
图1是根据一个实施例的用于在对存储块进行写入时确定存储块的安全等级的系统的示意框图;
图2是系统和在其中移动的数据及其安全等级的示意框图;
图3是根据一个实施例计算安全上下文的流程图;
图4是根据一个实施例计算操作的安全等级的流程图;
图5A是根据一个实施例的具有第一配置的加速器的框图;
图5B是根据一个实施例的具有第二配置的加速器的框图;
图6是根据一个实施例的写入存储时加密安全等级的框图;
图7是根据一个实施例的从存储读取时加密安全等级的框图;
图8是根据一个实施例的包括在SoC逻辑周围提供安全护城河的接口的片上系统的框图;
图9是示出根据一个实施例从合格服务器接收安全令牌以证明其身份和安全能力的可信执行环境(TEE)的通信图;
图10是根据一个实施例实施的网络接口的流程;
图11是根据实施例的在其中包含封装的安全等级的数据包的格式;
图12是根据一个实施例的用于检测连接打开的传出数据包的修改网络接口框图;
图13是根据一个实施例的用于传入分组的修改的网络接口框图;
图14是根据一个实施例的对数据读取的代码-数据和代码-代码兼容性执行的检查的框图;
图15是根据一个实施例的其中在数据-数据或数据-代码不兼容的情况下结果无效的安全执行流程的示意图;
图16是根据一个实施例的通过入口功能汇集调用的框图;
图17是根据一个实施例的比较具有和不具有汇集的通信流的通信图,其中不具有汇集的情况是用户功能不能调用工作者功能,更具体地说是工作者功能中的地址;
图18是根据一个实施例的使用针对传感器数据和驱动元件命令的硬件识别的用于车辆的硬件保护的框图;
图19是根据一个实施例的当使用全局唯一标识符(GUID)时用于减少开销的框图;
图20是根据一个实施例的线程上下文的散列表;
图21是根据一个实施例的使用后进先出列表的线程上下文的数据结构;
图22是根据一个实施例的对应于上下文数组的空闲数组的图,该上下文数组列出了上下文数组中的空闲、未使用的结构;
图23是根据一个实施例的使用基于硬件的安全方法进行安全计算的系统的框图;
图24是根据一个实施例的通信图;和
图25是根据一个实施例的卸载到卸载引擎的框图。
具体实施方式
下面将结合附图对各种实施例进行详细描述,以便本领域普通技术人员能够容易地实现。实施例可以以各种形式实施,而不限于在此阐述的实施例。为清楚起见,省略了对公知部件的描述,并且相同的附图标记自始至终指代相同的元件。
重要的是要注意这里公开的实施例只是本文创新教导的许多有利用途的示例。总体上,在本申请的说明书中作出的说明不一定限制各个权利要求中的任何一个。此外,某些说明可能适用于某些发明特征,但不适用于其他特征。通常,除非另有说明,单数元素可能是复数,反之亦然,而不失一般性。此外,术语“等级”和“安全等级”可互换使用并具有相同的含义。
片上系统(SoC)设计为包括保护护城河(protective moat),从而允许SoC的外部接口充当安全执行者。防止将数据传送到不受信任的设备。数据可能只留给能够证明它们是“友好站点”(例如,它们属于同一组织)并被允许接收数据安全级别的设备。防止代码访问数据或防止代码跳转到该代码未被授权访问或跳转到的地址。根据一个实施例,数据和代码根据它们的安全等级被加密存储(例如,在非易失性存储器中),每个等级具有不同的加密密钥。n ×n矩阵定义了安全等级可以混合的方式,特别是当使用两个不同的安全等级时。这提供了保护数据-数据、代码-代码和数据-代码交互的方法。在配置、处理器上下文切换和安全通信期间,使用可信执行环境(TEE,trusted execution environment)。分级规则矩阵在TEE下是可编程的。其中,本文描述的架构在硬件上实现了安全增强型Linux(SELinux)、安全计算和零信任的目标。
因此,所公开的实施例为SoC提供了一种基于硬件的安全架构,其允许防止机密数据离开系统到达不友好的目的地,而不论何种攻击;以及防止数据损坏。此外,本文公开的架构还可以防止数种已知的攻击。所有这一切都将发生在同一个框架中。具体来说,SoC实现了各种组件以克服现有系统的漏洞。
首先,在一个实施例中,每个内存页,无论它是否包含数据或代码,都被映射到一个安全等级。
其次,在一个实施例中,应用关于不同安全等级之间允许的交互的一组规则来确定以下内容:i)哪些数据等级可以在操作中混合,以及确定产生的混合等级;ii)一个代码等级是否可以处理特定的数据类,以及产生的等级;以及,iii)一个代码等级是否可以调用一个特定的代码等级。
第三,在一个实施例中,基于交互规则执行以下操作:i)在处理数据时更新数据的安全等级;ii)阻止代码访问数据;并且,iii)防止代码执行跳转到内存中的某些其他地址。
第四,在一个实施例中,基于确定程序的控制流的计算,创建安全上下文,其中数据操作的安全等级至少是该安全上下文。
第五,在一个实施例中,SoC的外部接口充当安全执行者,其防止数据离开系统到不受信任的站点,防止SoC未被授权接收的数据进入该SoC,并进一步防止代码访问内存中的数据具有未经授权的、不兼容的安全等级的块。因此,这些接口充当硬件护城河,即围绕SoC 制定的边界屏障。
第六,在一个实施例中,仅允许数据离开系统到允许接收安全等级的友好设备。在一个实施例中,进一步实现了要求机器具有访问权限的附加层。这个附加层要求机器属于友好域,每台机器都拥有它们可以存储的代码和数据等级的权限,并排除不友好的机器(例如服务器) 从系统(例如SoC)访问或接收数据或代码。
第七,在一个实施例中,数据和代码在存储器中被加密,每个安全等级具有不同的密钥。因此,如果等级存储块映射损坏,则无法访问数据,并且即使可能,也会使损害系统完整性的难度大大增加。
第八,在一个实施例中,代码页的交互规则用于创建安全飞地(secureenclaves)。安全飞地只允许特定代码访问特定数据(从而防止数据损坏和秘密盗窃)。代码-代码交互的规则还可以防止面向返回编程(ROP),而代码-数据交互的规则至少可以防止某些类型的旁道攻击。
第九,根据一个实施例,动态参数跟踪每个流(线程)的安全上下文,即由确定动态程序的条件中的数据的安全等级确定的流中数据的“最小”安全等级流(跳转和条件跳转)。该参数在子例程调用和上下文切换时存储和恢复。由于它不能由软件(例如,操作系统)保存,处理单元保存它,以及寄存器中数据的安全等级、安全标志,如本文所讨论的,以及寄存器内容。将程序计数器添加到保存列表中,意味着返回参数不在堆栈中,因此堆栈溢出攻击因无效而变得毫无意义。
第十,在一个实施例中,TEE用于配置、上下文切换和安全通信。
第十一,在一个实施例中,每台机器都有一个它被授权的等级列表,即可以存储,从而使机器能够拒绝或不允许进入它没有被授权的等级。这可以防止蠕虫和恶意软件从一台机器跳转到另一台机器。
第十二,在一个实施例中,存储器控制器(MC)跟踪每个存储器页面的安全等级。MC负责对读取和写入执行访问规则。当页面被释放时,MC还负责粉碎页面内容。这可以通过向页面写入0来立即完成,或者在页面的下一个刷新周期期间完成。在等待下一个刷新周期时,所有读取和写入都在此期间被阻止。
第十三,在一个实施例中,在打包代码时,将每个代码和数据段的映射添加到一个等级中,以及等级之间的交互规则中。这些规则仅在程序的等级之间。
第十四,在一个实施例中,只有企业IT可以在不同程序的等级和组织的等级之间添加规则。第十五,当从供应商下载代码时,机器将元组tuple(供应商,供应商GUID)映射到内部GUID。因此,每台机器上下载的程序的GUID是不同的。
第十六,在一个实施例中,当从IT存储库下载代码时,机器保留代码和数据部分的GUID。如果IT GUID与从供应商站点下载的程序中的内部GUID发生冲突,计算机会更改内部GUID以消除冲突。
本领域的普通技术人员应该容易理解,遵循多种数据类型、多种代码类型、控制机器上的安全等级交互以及控制设备之间的数据流量允许改进存储并允许在新位置进行存储,这在现有的解决方案中不可用。特别地,根据所公开的实施例的保护基于内容类型而不是基于数据或代码位置。因此,任何内容(数据或代码)都可以存储在任何地方,因为其相应的保护 (安全等级)被附加到它上面,如本文更详细的解释。
根据本发明的一个方面,存在数据存储块和数据安全等级之间的映射。通过将内存块映射到块中数据的安全等级,可以保留数据的安全等级。也就是说,每个内存块都根据存储在块中的数据的安全等级进行映射。例如,但不作为限制,如果系统有两个安全等级,个人和企业,那么每个(数据)块都被映射为个人或企业;如果系统有四个安全等级(个人、数字权利管理(DRM)数据、商业分级和商业机密),则每个内存块都映射到这四个安全等级之一。在一个实施例中,个人安全等级可以本质上意味着“不保密,可以去任何地方”。因此,本领域的普通技术人员应当容易理解,根据该原理的存储器块的映射因此对于数据是什么(内容)、它属于什么虚拟机或它属于什么进程是不可知的。相反,在各种实施例中,该机制与所有其他映射使用正交并且基于内容本身的安全等级来执行。
在一个实施例中,存储块的大小是4千字节(KB)。就此而言,需要注意的是,4KB是双倍数据速率(DDR)存储器中常用的存储器页面大小。因此,已经确定,与至少一些其他内存块大小相比,4KB内存块大小提供了改进的性能。应该注意的是,各种公开的实施例是关于与4KB的存储器页相关联的安全等级来描述的,但是,不失一般性,可以根据至少一些使用在4KB和高速缓存线的大小之间的任何大小公开的实施例。
在各种实施方式中,可以将不止一个数据等级写入这种大小的存储块中。因此,有必要解决当归类为安全等级A的数据写入归类为安全等级B的块时会发生什么。根据各种公开的实施例,当安全等级i和安全等级j混合在给定的内存块中时,这由定义结果安全等级的 nxn矩阵处理。在一个实施例中,矩阵是对称的((i,j)=(j,i)),使得该表示可以是对角线上方或下方的元素。由于矩阵是稀疏的,根据这样的实施例,稀疏矩阵的任何有效表示都是进一步有用的。因此,本文的内存页是指分配了安全等级的最小内存大小。
分级规则矩阵通常由可信执行环境(TEE)编程。如这里进一步描述的,TEE直接从服务器接收矩阵值,即,不通过操作系统(OS)。在一个实施例中,默认分类是与安全等级的不兼容相关联的预定值。作为非限制性示例,默认等级是-1,这意味着安全等级之间不兼容。
在进一步的实施例中,当两个安全等级不兼容时,它们不能被写入同一个存储块中(或在同一个指令中使用)。任何此类尝试都会导致未写入数据和硬件异常。不兼容等级的非限制性示例是DRM数据(例如,受版权保护的视频)和商业数据。尝试在分级为另一种类型的内存块中写入一种类型的数据将导致硬件异常。应当注意,虽然通常条目(i,j)是i或j,但是根据至少一些实施例,这不是必需的。矩阵的所有者可以设置提供所公开实施例的必要灵活性和其他优点的任何值。
现在参考图1,其示出了根据实施例的用于在写入存储器块时确定存储器块的安全等级的系统100的示例示意框图。存储块的安全等级是数据的安全等级120和存储块的安全等级 (未示出)的函数,如存储在存储控制器安全等级高速缓存130中的存储控制器(和在缓存未命中的情况下,被提取到缓存中)。这两个等级作为数据-数据安全类别矩阵140的输入,矩阵的输出是写入数据后的存储块的安全等级。内存块的等级在缓存中更新。如果这些类不兼容,则不会将数据写入内存,不会更新等级并产生异常。在一个实施例中,安全等级矩阵 140可以是寄存器或存储器的集合。
在一个实施例中,为了加速等级检查过程,存储器块到安全等级的映射可以被缓存,例如由存储器控制器110缓存到存储器控制器安全等级缓存130中。凭借本地化原则,一旦一个内存块安全等级被缓存,接下来的读/写将来自相同或相邻的内存块,因此也将被预取并通常驻留在缓存中。如果映射是按页顺序完成的,那么假设一个缓存行的大小是64字节,等级需要32位,则一个缓存行保存16个连续4KB内存块的分级。缓存可以写回,因为丢失映射的唯一方法是擦除所有内存内容的内存故障,使映射变得不相关。存储器控制器110还负责对已经被释放并且可以被回收的存储器块进行粉碎,即重写机密内容。一旦内存块的内容被粉碎,其相应的安全等级就会被设置为非机密。在此过程中,硬件适于防止除粉碎过程之外的任何类型的对此类存储块的任何访问。
参考图2,其示出了根据实施例的系统和在其中移动的数据及其安全等级的示例框图 200。当从存储器读取数据时,存储器控制器250还处理该数据的安全等级。根据一个实施例,安全等级必须伴随数据到其目的地、缓存层次结构230或加速器240。数据从高速缓存230移动到CPU 210和寄存器文件220。它可以从寄存器文件220移动到CPU 210,返回高速缓存230,然后移动到存储器(未示出)或加速器240。在半导体芯片的一个实施例中,数据可以到达片上缓冲器(未示出)或SoC的寄存器(未示出)。数据可以从加速器240移回存储器、片上缓冲器或片上寄存器。存储器控制器安全等级高速缓存260可以如图1中针对存储器控制器安全等级高速缓存130所解释的那样起作用。
总线290由数据线和控制线组成。根据一个实施例,安全等级线被添加到总线的控制线。本领域的普通技术人员将容易地意识到,取决于总线句法和语义,对于总线290可以有不同的实现。例如,总线290可以指定开始地址和字数,或者开始和结束地址,或者只是每个字的地址。不管使用何种方案,写入总线的数据的安全等级被添加为发生在总线290上的事务的一部分,并且在一个实施例中,与其不可分离。根据一个实施例,涉及多个安全等级的事务被分成按等级的事务。根据一个实施例,总线290可以支持先占(preemption),以处理每个事务的安全等级的结果变化。如果总线290被实现为片上网络(NoC),则可以将安全等级连同地址和长度一起添加到分组句法中。
根据实施例,高速缓存230中的每个高速缓存线具有相关联的标签以指示其地址。该标签可以是控制元数据。安全等级是另一种类型的元数据,因此被添加到标签,如关于缓存230 所示。当数据经由总线290到达高速缓存230时,除了数据和地址之外,还读取并记录安全等级。随着数据在缓存层次结构中上下移动,安全等级也随之移动(地址也是如此)。从高速缓存230读取数据的任何侦听/一致性机制也必须读取安全等级。当缓存数据被写回时,数据、地址和安全等级被设置在总线290上。该地址可以是真正的内存地址、内存映射输入/输出(IO) 或片上缓冲区。
中央处理单元(CPU)210是流水线,其中每一级具有控制寄存器(未示出)和数据寄存器(未示出)。流水线的各个级可以分为取指令级、处理级和回写级。为简单起见,本文假定加载- 存储架构,即将数据缓存内容加载到寄存器中,指令从寄存器接收其操作数(常量、立即数等除外)。与处理阶段并行,使用本文更详细描述的数据-数据安全等级矩阵和代码-数据安全等级矩阵的新电路确定结果的安全等级。
对于加载指令,最终数据与其安全等级一起从高速缓存230中取出并且伴随安全等级移动到写回阶段。对于存储指令,从寄存器文件220的寄存器中读取数据,连同其安全等级,并与其安全等级一起存储在高速缓存230中,或在其去往其目的地的途中与安全等级一起放置在总线290上。对于数据操作,请考虑示例性和非限制性指令A=B op C,其中B和C是操作数,“op”是操作,A是结果。B和C以安全等级进入操作。A的等级,即结果,是根据数据-数据安全等级矩阵和代码-数据(稍后描述)安全矩阵确定的。如果B和C的等级不兼容,或者指令的安全等级与A和B的结果等级不兼容,则根据实施例,操作产生硬件异常。某些操作会产生常数值(例如,XOR(a,a)==0)。这些有时用于重置寄存器值的操作被识别并将结果的安全级别重置为非安全。
已经确定条件执行需要特别小心。在现有CPU中,算术运算设置算术标志的值。在执行条件语句期间检查算术标志。如果标志符合条件,则执行流程以一种方式运行。如果标志不符合条件,则执行流程以另一种方式运行。条件语句的安全问题是执行是数据值的结果,因此数据值可能来自执行流。
因此,除了算术标志之外,根据实施例,CPU 210设置算术安全等级,该算术安全等级是算术运算结果的安全等级。当程序流程到达条件分支语句时,算术安全等级、分支/跳转地址的安全等级和现有的流程安全等级决定了向前执行的流程安全等级。流程安全等级在程序执行过程中与每条指令的数据安全等级和代码安全等级进行核对。
图3示出了根据一个实施例的流安全等级的计算的示例流程图300。需要注意的是,如果跳转是无条件的,则仅使用跳转地址(如果是计算结果,即数据相关,而不是常量)来更新流安全等级。在一个实施例中,第一安全等级矩阵310可以是寄存器、寄存器集合(构成来自完整矩阵的最近使用的数据对的“高速缓存”)或其中包含部分或完整安全等级矩阵的存储器。在一个实施例中,跳转地址320的安全等级是寄存器。在一个实施例中,第二安全等级矩阵330可以是寄存器、寄存器的集合或其中包含安全等级矩阵的存储器。在一个实施例中,流安全等级可以从安全上下文寄存器340提供并且条件的算术安全等级也可以是寄存器。
根据一个实施例,每个程序以非分级等级中的安全上下文开始其执行。每个算术运算都会设置算术安全等级。只要设置了算术标志的值并且算术安全等级的范围与算术标志的范围相同(即,如果它们被重置,那么算术安全等级也将被重置),则设置算术安全等级的值。每当发生分支操作(跳转、条件跳转、调用子程序)时,安全上下文都会根据其当前值、算术安全等级和分支地址的安全等级进行更新,例如图3中的单独操作数指令。标签的安全等级实际上是常量,不影响流安全等级。可以跳转到计算地址。
现在参考图4,其描述了根据一个实施例的操作的安全等级的计算(的数据相关部分) 的示例流程图400。因此,操作的安全等级的计算被增强以除了操作数的安全等级之外还包括安全上下文。如图4所示,操作数1的安全等级(op1)410与操作数2的安全等级(op2)420 一起被输入到数据-数据安全等级矩阵430中。
安全等级矩阵430输出的结果等级与安全上下文440一起输入到数据-数据安全等级矩阵 450中。结果是混合数据的安全等级结果460。例如,如果op1安全等级是“1”并且op2安全等级是“2”,那么结果的组合等级将与安全矩阵进行协商,可能会发现是“3”,即指向的内容在相关的安全矩阵内,例如,数据-数据安全矩阵。如果安全上下文为“3”,则再次检查数据-数据矩阵以确定哪个安全等级的结果为输入“3”和“3”,它可能是“3”。因此,此示例操作的结果将为“3”。应当理解,值“1”、“2”和“3”是用于示例目的的任意值,并且在不脱离本发明的范围的情况下可以使用其他值。
应该注意的是,子例程是一个执行上下文。它可能有自己的条件语句,因此在子例程内,安全上下文可能会被提升。当从子例程返回时,最好返回到进行子例程调用时生效的安全等级。因此,CPU 210跟踪子例程调用的深度(增加调用深度,减少返回),并且对于每次调用,它保持调用时的安全上下文。在一个实施例中,嵌入式子例程调用的安全上下文绝不会低于调用它的子例程的安全上下文。之所以如此,是因为子例程调用的条件只能提升最低执行安全等级。子例程深度和安全等级是线程上下文的一部分,当线程上下文被切换时需要安全地存储,如本文进一步讨论的。
当如本文所述安全地存储安全上下文以及寄存器的安全等级和安全标志时,则当这些参数已安全地存储时,寄存器数据和程序计数器从堆栈中移除。结果,堆栈溢出攻击,即覆盖返回地址,变得没有实际意义。
在“if-then”语句的情况下,可能会出现两种可能的执行流程之一。第一个执行流程在满足条件时发生,即认为逻辑上为真,而第二个执行流程发生在条件不满足时,即认为逻辑上为假。条件分支提升安全上下文,直到程序或子例程结束。为了更好地限制条件的影响,对执行流程进行静态分析,以确定条件代码的边界。因此,当退出条件代码时,会切换回先前的安全上下文。通过这样做,限制或以其他方式消除了高于必要的数据等级。应该注意的是,附加指令用于保存和恢复安全上下文以及识别条件代码的结尾。在子例程的情况下,“返回”指令指示在子例程中设置的流安全等级范围的结束。
返回图2,当CPU 210将值写入寄存器(reg)文件220时,寄存器接收写入其中的数据的安全等级。当CPU 210从寄存器文件220读取数据时,它也读取数据的安全等级。安全等级被写入与数据的安全等级相关联的安全等级寄存器410和420。此外,当数据从高速缓存230 中逐出并写回存储器270时,它被放置在互连上,其安全等级在其去往存储器控制器的途中。
加速器240提供可以在CPU 210的控制下执行的特定处理加速。在此上下文中,加速器 240可以是接收数据和配置信息作为输入的硬件功能。在一个实施例中,加速器可以具有用于控制功能的CPU,但不进行任何数据处理,而是在加速器240上进行。也就是说,在一个实施例中,加速器是仅硬件块或具有固定、可认证固件的硬件块,一旦加载就不可变的并且主要用于控制任务。此类加速器的非限制性示例包括但不限于密码引擎、直接存储器访问控制器(DMAC)、JPEG加速器、MPEG加速器、网络接口等。
加速器240处理的结果是加速器240的输出。加速器240的配置参数用于确定加速器240 执行的实际处理。具体地,配置参数可以用于确定加速器240内的执行路径,并且还可以用于确定诸如滤波器系数的计算参数。
现在参考图5A和5B,其分别示出了根据各种公开实施例的分别具有第一配置和第二配置的加速器240的示例框图500A和500B。通过了解馈送到加速器240的配置参数、它们的安全等级和数据的安全等级(单独的数据条目或来自不同来源的多个条目),可以确定哪个输入影响哪个输出,因此确定了数据的安全等级输出,而不遵循加速器240内的数据。
当在配置寄存器510的控制下如图5A所示配置加速器时,输入配置寄存器510配置加速器,使得第一输入寄存器520向第一输出寄存器540和第二输出寄存器550提供数据。虽然图5A中出于示例目的示出了直接连接,但应当注意,间接连接可以等同地用于根据所公开的实施例、在输入寄存器和输出寄存器之间发生的数据处理。
类似地,第二输入寄存器530被配置为直接或间接地向第二输出寄存器550提供数据。假设第一输入寄存器520接收数据d11和安全等级s11,而第二输入寄存器接收输入数据d12 和安全等级s12,则确定各自的输出及其安全等级。仅从第一输入寄存器520接收数据的第一输出寄存器540输出结果o11,该结果继承与其输入相同的安全等级,即s11。第二输出寄存器550从两个源接收数据,第一输入寄存器520和第二寄存器530,因此得到的安全等级将受到s11和s12的安全等级的影响。
如图5A所示,第二输出寄存器550的输出o12具有基于s11和s12计算的安全等级,并且如本文关于安全等级矩阵的操作进一步解释的。图5B所示的情况通过配置寄存器510的不同编程而具有不同的加速器240配置。结果,第一输入寄存器520直接或间接地仅将其数据提供给第一输出寄存器540。类似地,第二输入寄存器530仅直接或间接地将其数据提供给第二输出寄存器550。因此,分别提供输出o21和o22的寄存器540和550的各自输出,每个都继承了它们各自输入寄存器520或530的安全等级s21和s22。对于一次处理一个等级的加速器,互连可以在输入处存储数据等级并将其应用于输出。反过来,这可以节省加速器中的逻辑,从而减少存储编码此类逻辑的指令所需的存储器数量。
应该注意的是,至少有第一模式和第二模式与流水线加速器一起工作,在一个实施例中,其可以是高度流水线化的加速器。第一个,上面提到的,配置加速器240,通过加速器240 推送数据,等待所有数据退出,然后才开始另一次迭代,在一个实施例中可以包括但不限于配置的改变、推送数据等。第二个是配置加速器240以通过加速器240推送数据,并且一旦所有数据离开了加速器240的流水线的第一级(未示出),就重新配置并开始推送新数据。
在第二模式中,可能有多种数据类型和配置,因此随着数据和配置通过加速器240不断前进,输出的安全等级可能在新配置和数据开始退出加速器240的时间点改变。为了在加速器240的流水线中适应多种配置,新输出的预先计算的安全等级必须与通过流水线的新数据的初始波一起流动。这也可以适应由不同长度的路径产生的不同输出。
需要注意的是,即使安全等级在流水线中流动,它也不会随数据流动,也不会在每个处理节点处被计算。相反,安全等级像控制数据一样从一个级移动到下一个级,直到它被使用。图5A和5B中示出的加速器是组合逻辑并且不包括诸如CPU之类的处理元件(控制除外)。因此,“子系统加速器”的情况被视为SoC,即CPU、互连、缓冲器、队列和所有其他元素的行为,如本文所述。本文进一步描述了用作卸载引擎的外部SoC,例如GPU、机器学习引擎和其他类似的计算引擎。
当数据从SoC的一个处理单元移动到SoC的另一个处理单元时,它可能会通过外部存储器移动,或者为了节省时间和功耗,它可以在片上移动。在一个实施例中,在片上移动数据包括在片上存储数据。当从一个单元到下一个单元的切换很快时,这在任一队列(未示出) 中完成,因为这样的队列可能很短。队列可以在不脱离本发明的范围的情况下实施,并在输入侧连接到生产者和/或在输出侧连接到消费者,或者在一侧连接到生产者/消费者,例如加速器或存储器,并且在另一侧连接至互连290。当切换较慢时,通常可以使用大缓冲区(未显示)在片上进一步移动数据。缓冲器通常在一侧连接到互连290,在另一侧连接到生产者/消费者,例如加速器或存储器。
对于队列,可以在数据在队列中移动时附加安全等级。缓冲器,通常比队列大得多的内存,可以划分成更小的单元,其中每个单元接收相同安全等级的数据,因此该单元需要一个通用的安全等级类型。在一个实施例中,硬件缓冲器控制被配置为识别单元何时被清空,即所有消费者都已读取数据,因此它可以粉碎内存,例如,将内容重置为0并进一步将安全等级重置为最小,例如,到0。
应该注意,缓存可以遵循这个规定。缓存被划分为更小的单元,例如缓存线和缓存路,由于每个缓存线来自同一个内存块,所以该线的所有字都具有相同的安全等级,因此添加安全等级作为缓存线元数据。缓存行仅在被覆盖或失效时才被清空,因此粉碎是自然发生的,不需要额外的过程。根据一个实施例,当其数据的源存储器页被粉粹时,提供使高速缓存行无效或将其粉粹的机制。
现在参考图6,图6示出了根据一个实施例的当写入存储时对安全等级进行加密的示例框图600,并且图7示出了根据一个实施例当从存储中读取时对安全等级进行解密的示例框图700。在一个实施例中,可能需要将数据存储在非易失性存储器中并使用存储控制器650 从中取出。存储控制器650从互连290接收数据并写入存储设备630。从存储设备630取出数据并在其去往期望目的地的途中将数据写入互连290。在第一种情况下,安全等级与数据一起到达互连290。为了保护存储设备630上的数据,该存储设备包括但不限于诸如磁盘、SSD或磁盘上的可移除存储设备,在将数据写入存储设备630之前使用加密引擎620对其进行加密。
每个安全等级都使用不同的密钥,该密钥至少有两个用途。第一个目的是深度防御,即如果一个密钥损坏,其他的仍然完好无损。第二个目的是防止攻击者更改内存块的级别映射。当攻击者希望从受保护设备窃取内容时,可能会尝试对安全级别映射进行攻击。目的是将所有安全级别更改为非保护级别。在这种情况下,使用本文的教导,当根据实施例从受保护设备读取数据时,它不会被解密,或者将用错误的密钥解密,因此攻击对于数据窃取变得毫无价值。应当注意,SoC内和SoC外的数据和/或代码的处理,后者称为存储,与其安全等级一致。
存储控制器650使用存储设备630的存储块以便将安全级别映射到存储块。当从存储设备630读取存储块时,该映射由存储控制器650读取并写入(安全的、被盗的)存储器以用于快速提取。在一个实施例中,在磁盘(例如,硬盘驱动器(HDD)或固态驱动器(SSD)) 上存在块到安全级别的映射,就像文件系统中存在块的链接一样。存储控制器650将映射读入它控制的缓存中,块670。每次将存储块写入设备时,都会使用具有新数据的等级和存储器块的等级的等级矩阵,更新高速缓存/存储器中的映射,如本文更详细地解释的。
需要注意的是,存储块有一个原子单位。那是能够读取或写入的最小单位大小。因此,只要内存块和存储块大小相同,就不需要等级矩阵。只有当存储块大于存储块,并且同一存储块可以写入多个存储块时,才需要根据本文描述的原理涉及安全矩阵的运算。或者,可以将存储块细分为一个内存块大小的子块,在这种情况下,每次将一个内存块写入存储时,相应的子块都会继承其安全级别。
在一个实施例中,不失一般性,假设接收分级的存储器(子)页大小(例如4KB或其一部分) 和接收分级的存储(子)块大小是相同的大小。写入存储的分级大小作为“存储块”,无论是块的真实大小还是与分级内存块大小相等的分数。例如根据操作系统(OS)的文件系统更新设备上的文件映射的间隔,以规则的间隔更新/复制映射到存储设备630。操作系统负责将文件映射到存储块。对于每个文件,操作系统都会按照正确的顺序保存组成文件的存储块的链表,这就是文件映射。当块被文件系统“释放”时,OS通知存储控制器650,从而可以将存储块重新分类为未分级。在一个实施例中,不需要粉碎数据,因为数据是加密的。在一些实施方式中,被释放块的数据可以被粉碎。
现在参考图7,其是根据实施例的当从存储器读取时加密安全等级的示例框图700。技术人员应当容易理解,图6和图7中描述的方案自然适合虚拟内存方案,因为将内存页面存储在二级存储中并从二级存储中获取页面保留了安全等级。此外,对于在存储器控制器250 的控制下可以将所获取的页面放置在存储器中的何处,也没有限制。
根据一个实施例,存在一个基本假设,即数据总是以存储块大小写入,因此当新数据写入存储块时,控制器改变该块的安全等级。如果在写入整个块之前由于某种原因停止写入,一些旧数据仍然存在于块中,用其密钥加密,并且新数据用其密钥加密。虽然旧的、安全的数据不会被正确解密,但它可以被运送到任何地方,也许可以用国家资源解密。如果我们在写入完整块后更新安全等级,也会发生同样的情况。这次攻击者将机密数据写入非机密块。当机密数据被加密时,该块可以被运送到任何地方。为了防止这种操作,存储控制器可以在开始写入之前缓冲一个块(或映射的子块)。只有当所有数据都被完全缓冲后,写入才开始。停止写入的唯一方法是停止电源。另一种可能是写入机密数据时写入前更新,写入非机密数据时写入后更新。就攻击的可行性而言,如果操作系统文件系统代码是唯一可以对存储控制器进行编程的代码,并且文件系统总是以存储块大小写入,则除了存储控制器块缓冲区之外,还有额外的防线。还需要注意的是,本文使用的术语“存储控制器”是指SoC对接存储设备的接口。在一个实施例中,“存储控制器”可以在设备上并且接口是PCIe、USB或类似接口。因此,实施例中的“存储控制器”是对接存储设备通信的SoC接口。
根据实施例,为每个安全等级设置的加密密钥可以在组织的所有设备上使用每个组织等级的相同密钥。在另一个实施例中,每个设备生成不同的密钥集。使用全局密钥确保可以将可移除的内存设备从一台机器传移交到另一台机器,并且新机器可以访问数据。它还确保如果设备密钥由于某种原因损坏,则可以恢复它们。在每台设备上使用不同密钥的优势意味着由一台机器写入在可移除设备上的文件不能被另一台机器读取,在一台机器上损坏的密钥不能在另一台机器上使用。恢复安全密钥将更加困难。但是,如果文件已备份,则可以将它们下载到设备,就像在任何磁盘损坏用例中一样。
根据一个实施例,TEE负责创建安全等级加密密钥并配置安全等级密钥映射。安全等级密钥表只能由TEE写入,只能由存储控制器读取。将安全等级映射到密钥的完整密钥表存储在存储器中并归属于TEE。表610在片上并存储当前活动的等级的密钥,即由该SoC使用的等级。根据一个实施例,这允许从存储中每等级20位的范围减少到片上的大约10-12位,因为并非所有安全等级都在任何时候同时使用。
在各种实施例中,设备内部数据的安全等级被跟踪以防止数据被恶意代码损坏,并且使得数据可以仅被传送到被批准的设备,而不被传送到未经批准的并且因此可能是恶意的设备。这可以通过根据各种公开的实施例采用多种技术来实现。每个设备都会收到一个身份,并为组织的身份系统所知。从某种意义上说,设备可能会被视为某种用户,使其具有唯一可识别性。
作为配置过程的一部分,每个设备,例如但不限于,从身份管理系统(未示出)接收加密令牌或身份系统提供的标识,其可使用组织的公钥进行验证。这允许:a)确保设备属于组织;b)指定设备可以保护的安全等级;并且,c)在设备上提供最新的TEE软件版本。应当指出,使用组织身份系统的原因是:a)能够使用扩展组织身份系统的跨组织联合系统; b)使服务器能够识别它所服务的设备,以启用对等数据连接并重用现有基础设施而不是推倒重来。
根据一个实施例,接口被用作执行器。也就是说,接口会阻止传出数据,直到TEE验证数据目的地的凭据。如果目的地未被批准,则数据不会离开系统。此外,接口接收传入数据的安全级别并将该级别传播到SoC。应该认识到,该系统包括SoC、外部DDR存储器、存储设备等。
现在参考图8,其示出了根据一个实施例的片上系统(SoC)800的示例框图,其包括提供围绕SoC逻辑810的安全护城河830的接口820A-D。在一个实施例中,接口处的执行器首先处理传入数据,因此这样的接口可以接收并安全地取出传入的安全等级。没有恶意软件可以影响此安全过程,因为作为SoC一部分的CPU尚未看到数据,并且数据不在可以访问的内存(例如DDR)中。接口820,例如但不限于,接口820A、820B、820C和820D,最先处理输入数据,最后处理输出数据。因此,接口820可以安全地将输出安全等级附加到输出数据。恶意软件可能试图通过在SoC逻辑810内活动来从SoC 800获取数据。然而,技术人员很容易理解,恶意软件不能影响接口820的动作。
图9是示出根据一个实施例的从合格服务器930接收安全令牌以证明其身份和安全能力的可信执行环境(TEE)920的示例通信图900。每个设备都有一个硬编码的身份,例如由组织、原始设备制造商(OEM)或芯片制造商烧录的全球唯一标识符(GUID)。GUID也可以由TEE 920生成并写入片上非易失性存储器,其只能由TEE 920访问。在一个实施例中,设备的初始密码由组织的人员提供。在设备上,TEE 920接收初始密码作为设备初始配置的一部分。TEE 920还接收组织的公钥和身份服务器930的互联网协议(IP)地址(或名称)。一旦配置了TEE 920,它就可以连接到组织网络并请求证明其身份和安全能力的令牌。
设备接口910应向TEE 920发送设备已连接到网络的信号。或者,TEE可以请求网络接口910尝试连接到感测到的网络。TEE 920应建立到组织的身份服务器930的安全连接,通常通过本领域已知的标准方式,并提供其凭证,即其GUID和密码。身份服务器930向设备提供证明其身份、软件版本和安全能力以及被认为必要的任何其他信息的令牌。令牌使用组织的私钥加密,并具有到期日期和时间。在一个实施例中,在结束会话之前,TEE 920与身份服务器930改变其密码。令牌可以在短时间内有效,这要求设备在需要向另一设备提供令牌时请求具有新到期时间的新令牌。这会降低令牌的重放能力。为了进一步降低重放能力,每一方都可以向另一方发送一个随机数(nonce)字,并且接收方必须向发送方提供一个包含该随机数(nonce)字的令牌。一般而言,可以根据所公开的实施例利用各种现有方法来减少安全令牌的重放。
使用令牌提供了如本文所述的几个优点。首先,为了向客户端传达服务器的安全能力。标准证书仅提供服务器与其声称的身份相符的保证,而公开的令牌还提供有关此类安全功能的信息。其次,向服务器保证客户端的身份和安全能力,因为现有解决方案不会向服务器识别客户端。第三,当连接到对等方时,任何一方都不能用组织的私钥对消息进行签名,因此每个设备都从身份服务器930请求短期令牌以提供给另一方。通常,令牌是相互证明的一种手段。包括允许设备接收的安全等级的任何其他方法也是可接受的。请注意,令牌还可以保存分配给设备的用户的身份。如果使用设备的用户不是分配给该设备的用户,则身份服务器 930可以根据策略拒绝提供数据,即使该设备被授权,并且该用户也被授权。在一个实施例中,毒丸消息(poison pill message)可以被发送到设备以破坏加密密钥,使得设备上的数据不能被打开。由于系统中的TEE控制所有加密和安全信息,因此它也应该被适配成接收毒丸消息。
现在参考图10,其示出了根据一个实施例实现的网络接口的示例流程1000。接口可以在建立连接时或在安全数据即将发送到另一端时请求另一端的凭据。已经确定,在建立连接时请求凭据的缺点是大多数时候不需要它(例如,通用浏览会话),因为跨接口的数据没有以任何方式分级。
因此,所公开的实施例包括用于在建立连接时请求凭证的技术,其提供至少两个优点。首先,当数据开始在设备之间移动时,它可以节省时间。第二,因为服务器TEE可能无法与客户端上的TEE通信,以便接收凭据和发送机密材料。考虑客户端打开与服务器的连接并请求分级文件。如果服务器还没有客户端凭据,则需要联系客户端TEE。但是客户端TEE的端口与OS套接字的端口不同,因此如果客户端位于NAT之后,则服务器TEE无法到达客户端TEE。因此,在一个实施例中,该协议要求当客户端打开与服务器的连接(例如, SYN请求)时,网络接口通知客户端TEE,并且客户端TEE应尝试打开与服务器TEE的连接。如果协议成功,即另一方将自己标识为组织设备,则将另一方添加到动态白名单(例如,参见图10、1050)中,该名单标识可以接收分级等级的目的地,并且是哪些等级。由于预先指定的端口专用于TEE到TEE通信,因此服务器的网络接口确定传入连接请求是到 TEE的。在客户端和服务器的情况下,客户端TEE和服务器TEE正在通信机密信息。在一个实施例中,去往该端口的数据包总是由接口路由到TEE而从不路由到OS。因此,设备间TEE协议如下(参见,例如,图12和24):
1.客户端的网络接口,例如接口910,识别发送到IP地址的SYN请求(或任何其他协议启动消息);
2.网络接口将信息传递给发送方TEE 920;
3.源TEE尝试打开到目的地机器的TEE端口的安全连接;
4.如果TEE端口未启用:
a.没有收到ACK;
b.目的地不按照协议工作(例如,不提供所需的令牌);
假定目的地对于机密数据是不可信的;
5.如果TEE端口处于启用状态(即机器支持该协议)并且建立了连接,则源TEE向目标TEE请求安全证明;
6.安全证明可以是来自组织服务器930的令牌或经数字签名的证书。如果证明是令牌,则数据可以双向移动。如果证明是证书,则无法上传机密数据。证书选项用于在供应商站点下载安全程序,本文将更详细描述。则该协议类似于TSL,但在TEE之间。
7.客户端TEE就签名协议和密钥以及数据加密和密钥(超出范围)发起协定。这有效地打开了客户端TEE和目标TEE之间的隧道。为了让接收方理解数据,数据必须经过接收方TEE。
8.双方的TEE将接口配置为根据另一台机器的IP地址和端口将所有预期的安全数据发送到相同的IP,并且发送到TEE端口。原始数据包被嵌入到新数据包中;
9.每一方还根据收到的能力令牌列出可以发送给另一方的安全级别。
返回图10,当输出分组1010到达接口时,如果数据未分等级1020,则将其发送到目的地1030。如果数据被分等级1020,则接口检查目的地是否被授权接收安全等级1040。如果该目标设备不被受信该等级,则丢弃该分组,并且(可以)向OS 1070发送错误消息。如果目标设备受信任,则接口会在发送到相同目标IP的新分组中封装、签名和加密分组,并会发送到目的地机器的TEE端口1060。默认情况下,不在表中的目的地不受信任何等级(非分级等级除外)。表中的目的地可能被允许接收某些等级但不允许其他等级。在接收端,接口识别出TEE端口,将分组转发给TEE。TEE移除加密、检查签名、移除封装并转发给操作系统。转发到TEE涉及触发TEE中断并将分组发送到专用的片上缓冲区(未示出),受数据安全等级保护,只有TEE可以处理,或写入外部存储器(未示出),只有TEE可以处理数据安全等级。
图11示出了根据一个实施例的在其中包含封装的安全等级1130的分组的示例性和非限制性格式1100。新有效载荷1120的前128位是封装分组中有效载荷的安全等级GUID1130。紧随其后的是封装的分组1140。原始数据包之后是安全等级1130的签名1150和封装的分组1140。然后加密完整的有效载荷1120。根据本文讨论的原理,新的有效载荷被签名和加密的事实确保在改变不可检测的情况下不能改变安全等级。与虚拟专用网络(VPN)一样,必须限制操作系统分组的分组大小,以便封装数据包不会超过最大分组大小。
现在参考图12,其示出了根据一个实施例的用于传出分组的示例修改网络接口框图 1200。应该注意的是,图10侧重于传出分组,而图12侧重于检测SYN分组和更新允许表。从存储器(未示出)读取分组1210并与其(硬件提供的)安全等级一起进入修改的网络接口1200。SYN检查1230确认该分组是否是SYN分组。如果是,则目的地IP被转发到TEE 1220 以验证目的地的可信度。TEE 1220执行与目的地的认证协议并将判决写入接口1200的目的地表1240中。检查未来分级的分组是否允许发送。如果它们被允许,则接口1200将它们封装在向目的地TEE发送的分组(1250)中。如果不被允许,则丢弃该分组。一旦被封装,该分组就被转发到“传统”接口1260用于发送。
图13示出了根据一个实施例的用于传入分组的示例性和非限制性修改网络接口框图 1300。因此,分组被修改的网络接口接收。首先检查TEE 1320的端口号。如果TEE是目的地,则该分组被写入存储器1350或具有TEE安全等级的片上缓冲器(未示出),并且为 TEE1310生成中断。如果该分组不是用于TEE,则向其添加1330非机密等级,并且该分组继续使用“传统”网络接口1340进行处理。对于用于TEE的分组,TEE打开1310封装,提取安全等级并将封装的分组和安全等级转发到“传统”网络接口1340。数据可经由专用连接或经由直接存储器存取(DMA)到达“传统”网络接口1340。有多种方法可以打开传入分组,第一种是使用SoC上的TEE打开所有分级的分组,即用于TEE端口的分组。第二种方法是使用加密引擎(见图10),允许接口打开分级的分组。如果GUID已知,则将该分组与相应的活动GUID一起写入内存。如果GUID未知,则将该分组转发到TEE。技术人员应当很容易理解,还有其他方式可以在SoC的TEE和接口之间划分工作,这些方式可以根据所公开的实施例加以利用。
在一个组织从虚拟机(VM)提供商租用虚拟机的示例实施方式中,租用的机器可以通过虚拟专用网络(VPN)连接到组织的机器。在租用的VM上,安全等级必须以某种方式映射到租用VM的组织(例如,通过GUID中的组织前缀),以便数据无法转发到不同组织的机器。在另一种情况下,打开与可能为多个组织服务的外部软件即服务(SaaS)机器的连接是常规机器到机器连接和虚拟机服务器(托管来自多个组织的机器)的组合。
在一个实施例中,对于云中的租赁机器和同时为多个组织提供服务的SaaS机器,这些机器能够:(1)识别产生该连接的组织;(2)区分来自不同组织的数据。为了识别组织的服务器,可以将组织的名称添加到通道建立协议中,并与身份和能力令牌一起发送。这允许SaaS 机器确定使用哪个公钥来打开令牌。安全矩阵阻止一个组织的数据和代码与另一个组织的数据和代码交互。对于SaaS和云服务,可以存在来自同一个IP(组织的公共IP)的多个连接。因此,该接口还检查FIN(关闭连接)握手或其他协议的任何其他类似指示。技术人员应当理解FIN可能表明发送方正在关闭连接,即它不会发送更多的分组。每个TEE都会对两个IP地址之间打开的连接数进行引用计数,当计数变为0时,TEE也会关闭它们的连接。为了不尝试打开与非安全服务器的连接,客户端TEE可以拥有常见非友好站点(例如,新闻站点、购物站点、社交网络)的IP地址列表。由于将不会建立TEE到TEE连接,因此它们不会被添加到受信目的地表1240并且不会接收任何安全数据。这确保不会在客户端 TEE和那些不受信任的站点之间建立TEE到TEE连接。
本文公开的关于数据保护的原理还可以进一步适用于代码的保护,因为根据本文讨论的公开的实施例,代码页也可以与相应的安全等级相关联。使用代码安全等级,可以防止未经授权的代码访问特权数据。此外,使用代码安全等级可以防止旁道攻击,即除非授权代码请求,否则不允许数据输入。实现这种安全性的第一种方法是在存储器控制器中,以防止未经授权的代码获取数据。第二种方法是在缓存层次结构(和/或CPU流水线、设计决策)中,它可以防止未经授权的代码访问由授权代码引入的数据。为了处理不同安全等级的代码和数据之间的交互,使用了代码-数据安全矩阵。代码-数据安全矩阵应具有指示不兼容、读授权、写授权和读/写授权的值。为了处理代码与不同安全等级的代码之间的交互,使用了代码-代码安全矩阵。代码-代码矩阵应具有指示不兼容、调用/跳转授权、读授权、写授权和读/写授权的值。
现在参考图14,其示出了根据一个实施例的针对代码-数据兼容性执行的检查的示例框图 1400。阻止数据从存储器1460进入SoC的关键是存储器控制器1430。这也符合本文讨论的将防御置于接口上的护城河方法。存储器控制器1430为每个存储器页存储等级并且是唯一可以读取等级的模块。因此,来自CPU 1410的每个数据/代码提取指令不仅将地址,而且还将请求数据/指令的等级转发给控制器。存储器控制器1430应具有代码-数据和代码-代码安全等级矩阵1450的副本,其映射哪个代码等级可以访问哪个数据等级以及哪个代码等级可以调用哪个代码等级。如果取码等级与取到的数据/代码等级不兼容,则不获取该数据/代码。
可以观察到以下情况:1.为了不增加延迟,可以在检查等级时获取数据,但只有在允许的情况下才将其发布到SoC。为此,如果页等级缓存1440中存在缓存未命中,则保留数据。 2.所公开的机制防止未经授权的代码通过推测执行机制请求特权数据,因为存储器控制器 1430不知道请求是真实的还是推测的。3.跳转到另一个地址是从不同位置读取指令的请求。如果调用/跳转指令的等级与跳转/调用目标的等级不兼容,将产生访问错误。这是可以做到的,因为矩阵提供了值并且不知道其行和列的语义,无论它们是数据还是代码。4.就像对读取请求进行兼容性检查一样,它们也在写入请求上进行。5.对于较小的矩阵,安全等级矩阵可以划分为三个矩阵:(a)数据-数据安全矩阵;(b)代码-数据安全矩阵;和。(c)代码-代码安全矩阵。每个矩阵输出数据结果的安全等级,或“-1”表示不兼容。
在一个实施例中,如果所请求的数据已经在缓存1420中,则相应的数据安全等级也是可用的。代码-代码安全矩阵被添加到缓存1450获取机制中,如果代码等级不兼容,缓存会产生访问错误。如果在流水线中检查代码-数据兼容性,则不需要添加代码-数据矩阵,这将参照图15进一步描述。在一个实施例中,不需要显示跳转访问违规,指令高速缓存具有代码- 代码安全矩阵检查跳转、函数调用、违规。进一步显示了执行阶段之前的线的状态。
根据实施例,指令和操作数已准备好,因此它们的安全等级也已准备好。由于指令和操作数已经被提取,指令和每个操作数的兼容性已经被验证并且产生的安全等级被附加到操作数。
可以从图15中所示的操作进一步理解该操作,图15示出了根据一个实施例的安全执行流程的示例性和非限制性图1500,其中在数据代码不兼容的情况下结果被无效。当指令逻辑 1550准备好结果时,针对由混合操作数产生的安全等级检查操作数安全等级,并且检查混合结果与指令的兼容性。如果在等级的任何级检查生成了不兼容,它就会流到最后一个结果(代码数据兼容性),在那里它被输出到指令逻辑(等级与“不兼容”的任何混合,导致“不兼容”)。在程序执行过程中,操作数可能具有相同的安全等级(例如处理文档时),而代码(例如处理程序)可能具有相同的安全等级。如果等级发生变化,例如,由于跳转到服务,这些等级会缓慢变化。因此,一种可能的优化是在等级流水线中缓存安全等级和矩阵结果。如果等级输入等于缓存的等级,缓存的结果就是结果,不需要使用可能离流水线更远的矩阵。由于流水线可能正在运行多个线程,因此在上下文切换时存储和恢复线程的等级缓存。在即时(JIT)编译器和自修改代码的特定情况下,代码矩阵的(i,i)元素被启用读/写。这允许代码读取更多代码。它还允许代码编写具有相同等级的代码。根据一个实施例,JIT代码或修改后的代码也可以具有不同的等级。
直接内存访问(DMA)控制器和其他加速器通常可以生成自己的内存事务;但是,它们由CPU编程。在此之前,加速器接收传入数据的数据等级。配置寄存器还应接收写入寄存器的指令的等级。每个加速器都可以将指令等级在不需要知道该指令等级的寄存器中删除,并为需要知道的寄存器保留该指令等级,例如地址寄存器。指令安全等级可用于仅允许某些代码使用加速器。当加速器请求内存读取时,它还应发送配置内存范围的指令的指令等级。
本领域的普通技术人员现在应该理解通过本文作出的公开而使新的应用成为可能。通过为文件系统、进程控制块、进程内存映射等OS数据提供一个(或多个)安全等级,可以防止非OS代码读取和更改数据内容。通过向OS代码添加安全等级,可以只允许特定的OS代码处理特定的OS数据。数据页与数据安全等级相关联。当CPU尝试执行具有不兼容数据安全等级的指令时,它会产生硬件异常。在一个实施例中,为了保护代码区域免受写入安全矩阵。代码页有它们的安全等级,其他等级不能写入这些页。内存页在写入第一个字时用等级标记,从那时起,该页受到相应的保护。为了允许第一次写入,操作系统必须使用特殊指令“释放”页面,正如本文进一步讨论的那样,粉碎分级数据已经需要。一个空闲的、未分配的内存页要么被归类为“非分级”,要么被赋予自己的等级。在这两种情况下,任何等级都可以写入空闲页面。如果整个页面不是由该代码编写的,则可能存在安全漏洞。如果该代码是从存储中读取的,则以块大小的增量读取,例如,多个内存页。即使最后一页有一些优化,内存块已经提前“释放”了,因此它没有分级内容。如果块没有被释放,则代码的等级将与内容的等级不兼容,因此不会根据所公开的实施例来写入。
面向返回编程(ROP)攻击是这样一种技术,其中未经授权执行任务的代码跳转到授权执行任务的代码部分。任务完成后,授权代码中的返回指令将控制权返回给未授权代码。通过小心地将此类跳转拼接在一起,未经授权的代码可能会造成伤害。
现在参考图16,其是根据一个实施例的通过入口函数汇集调用的示例性和非限制性框图 1600。需要说明的是,在一个实施例中,如果授权代码为OS代码,则不能阻止应用调用该 OS代码。这是因为这些应用程序可能需要调用系统调用、OS功能和OS服务。如图16所示,一种技术,其中来自应用程序1610的调用被汇集到必要的路径中,以防止调用者应用程序1610使用任何其他路径。这迫使调用者应用程序1610调用服务的合法入口点而不是服务内部的点。因此,创建了可由应用程序1610调用的入口功能1620。入口功能1620然后被授权调用相应的OS工作功能1630。入口功能1620被设置在相同的一个或多个存储器页面中,因此它们都附有允许由应用程序1610调用并且还可以调用OS工作者功能1630的安全等级。在一个实施例中,应用程序1610不能直接调用根据本文公开的原理由代码-代码安全矩阵强制执行的工作者功能1630。
图17示出了根据实施例的示例通信图1700A和1700B,其将具有汇集(1700B)和不具有汇集(1770A)的通信流进行比较,在具有汇集(1770A)的通信流中用户功能1710不能调用工作者功能1720,并且更具体地是工作者功能1720中的地址。而是,有必要将调用从用户功能 1710路由到入口功能1730以便访问工作者功能1720。
在一个实施例中,可以根据本文描述的原理使用安全飞地。安全飞地是保存只有它们可以访问的机密数据的功能,它们为特定应用程序或通用服务提供服务。使用代码-代码安全等级限制,防止未经授权调用安全飞地功能。通过入口函数的汇集,可以防止未经授权的功能跳转到飞地代码,而不是通过设计的入口点。在一个实施例中,使用代码-数据安全矩阵,只有飞地代码可以访问飞地数据。应当理解,将这种方案用于飞地的优点是此时存储器不受限制。内存中的任何位置都可以根据需要设置尽可能多的飞地,从而与飞地内存使用量有限的解决方案相比具有明显的优势,从而使内存使用更加高效和灵活。飞地代码可以是任意大小,同样地,飞地数据可以是任意大小。飞地代码和数据可以交换进出存储器(虚拟内存)。
在一个实施例中,为了防止在将存储器页面作为飞地数据写入时可能发生的硬件(HW) 异常,该异常可能在数据返回时引起,并且因为没有其他代码可以访问飞地数据,所以使用了去分级功能。每个返回数据的飞地都调用它只能调用的解密函数、返回数据和返回地址。去分级器的代码-数据安全矩阵接受飞地安全等级,并将其转换为预定的(在去分级定义时)安全等级、未分级的等级(将被转换为它被写入的页面的等级)或调用函数的流安全等级。后者相对于非分级的优势在于它根据调用附加了正确的安全等级,而在新(非分级)页面上编写非分级等级可能会出现问题。这需要硬件支持将安全上下文的调用转发到飞地/去分级器。
虚拟机(VM)提供没有共享代码或数据的执行环境分离。通过对代码和数据进行适当的分级,并相应地设置相应的代码矩阵,一台机器的代码不能调用另一台机器的代码,也不能读取另一台机器的数据。通过为每个VM使用多个等级,显着降低了对来自VM内的攻击的脆弱性。
现在参考图18,根据一个实施例,呈现了使用传感器数据和驱动元件命令的硬件识别的车辆硬件保护的示例框图1800。车辆从传感器,例如传感器S1 1820和S2 1830,接收数据,并向驱动元件(DE),如DE1 1840和DE2 1850,发送命令,例如制动、转向、加速。本领域普通技术人员应当理解,存在恶意数据替换传感器输入(例如,由传感器S1 1820或S2 1830提供的输入)并通过连接到CPU 1810的数据链路发送的风险。类似地,当控制命令被发送到驱动元件,例如DE1 1840或DE2 1850时,可以替换由CPU 1810发送的命令。根据本文公开的原理,系统1800具有传感器,例如传感器S1 1820和S2 1830,还配备有硬件标识(HW ID),其将数据识别为来自传感器。类似的方法可用于还提供了命令源的硬件ID 的控制命令。因此,传感器处理代码验证传感器数据具有正确的安全标签(使用本文更详细描述的代码-数据矩阵)并且命令生成器生成具有正确安全等级的命令包。传感器ID和命令 ID由硬件生成。
因此,除了其他关于蠕虫的优点之外,本文公开的内容还具有其他优点。蠕虫通过直接 连接(例如USB记忆棒或有线网络)或无线连接(例如
Figure RE-GDA0003549281230000221
)从一台机器移动到另一台 机器。这意味着蠕虫通过接口进入系统。如果接口检查安全等级,并且如果蠕虫没有授权等 级,就会被阻止,不允许进入。如果接口在网关上,控制对内部网络的访问,那么蠕虫将无 法进入网络。当然,每台机器也应该自我保护。另一个明显的优点是例如在操作技术(OT) 中使用所公开的发明。运营技术是指工业和基础设施计算,例如但不限于,控制工厂、航运 港口、发电厂、自来水公司、空中交通管制、铁路控制等中的机器人。任何进入工厂或关键 基础设施的恶意软件会造成巨大的经济损失,在某些情况下甚至会造成死亡。安全等级允许 通过不允许非安全的、未授权的代码和数据进入本地网络和单个机器来关闭工厂计算机基础 设施。这是通过只允许机器上的授权等级来完成的。恶意等级将需要向工厂提供代码和数据 供应商的证明,以及供应商的正确安全等级。为了实现这一点,有必要进一步渗透到供应商 的站点,并在那里提供所需的证明和等级。本领域的普通技术人员应当理解,存在证书加密 和数字签名“强”和“牢不可破”的潜在假设。
作为非限制性示例,从知名软件供应商下载程序,提供客户端验证使用例如软件供应商的公钥的签名的签名程序。如果下载的程序通过完整性检查,则可以假定它是正版的并且不含恶意软件。通常,提供的代码格式包括代码段和数据段。为了使用提议的保护方案来访问代码段和数据段,打包格式中缺少的是每个段的等级和安全矩阵。代码等级可以是非分级的,即可以被任何代码调用、跳转;不能调用受限代码;并且,只能处理非分级数据。可以指定代码等级,即限制哪些代码等级可以调用代码;使代码能够调用(某些)受限等级;并且,使代码能够处理(一些)受限数据。在一个实施例中,在入口/工人功能和安全飞地的情况下,存在哪些代码段可以读/写/调用哪些数据/代码段的映射(安全矩阵)。因此,对于代码打包格式,将可读的逻辑名称添加到每个代码/数据部分、每个代码/数据部分的安全等级和三个安全矩阵。
相应地,在一个实施例中,下载的内容首先通过TEE,以便TEE可以对放置内容的内存页面进行分级。因此,在这样的实施例中,必须保证下载的程序首先通过TEE。当客户端打开连接时,会通知TEE并尝试打开连接至目的地服务器中的TEE端口的连接。可以考虑两种情况。在第一种情况下,目的地是发布/销售/存储程序的公司的下载网页。在第二种情况下,目的地服务器是已批准应用程序的IT存储库。
根据各种公开实施例的平台将打开连接至发布者网站的TEE的连接。即,根据一个实施例,参与本文讨论的保护机制的每个设备使用TEE。从那里发送到TEE的内容是常规可下载的,可能以另一种格式封装,具有以下附加信息:1)每个代码段和每个数据段的安全等级;以及,2)代码-代码、代码-数据、数据-数据矩阵指示(对于程序的等级):a)一个代码等级是否可以调用另一个代码等级;b)一个代码等级是否可以处理一个数据等级,以及产生的数据等级;和,c)两个数据等级是否可以混合,如果是,结果的等级。在一个实施例中,等级是唯一的GUID,因此它们不与另一个程序的等级冲突。相同的(部分)GUID可用于所有下载,或者它们可以以其他方式生成(例如,由软件供应商)。根据一个实施例,接收(下载)TEE验证:1)代码可以访问非机密代码和数据或下载等级的代码和数据;2)下载的数据可以与非分级数据或下载等级的数据混合。即,在这样的实施例中,下载的程序不能声明对其不拥有的GUID的访问权。
根据各种实施例,接收TEE创建(源,GUID)到内部GUID的映射。这有三个目的。首先,将源附加到GUID,两个源不能具有相同的GUID(概率非常小但大于0)。其次,每台机器都不同地表示相同的代码和数据,因此不可能知道另一台机器上的相应等级或猜测机器上的等级。第三,源机器仍然可以在不发送完整包的情况下发送各种模块的更新。下载软件的格式定义了代码和数据的特定部分类型。本领域的普通技术人员将适当地理解,可以向格式添加额外的段类型(代码和/或数据),因为根据各种公开的实施例,具有不同等级的代码/数据不能在同一段中。TEE将等级和矩阵(约定规则)添加到其存储库中。当页面被写入存储器时,存储块被映射到相应的安全等级。当块被读取时,内存块被标记为各自的安全等级,并且TEE必须将安全等级及其规则添加到安全矩阵中。在一个实施例中,为了节省映射空间,TEE可以将128位的GUID映射到8/16/24位的数字。这实质上是机器中安全等级的“私有”唯一ID。
本文描述的下载过程包括对单个程序的代码和数据的保护。例如,组织可能希望只允许在机密文档上使用特定的PDF查看器程序。将软件下载到信息技术(IT)存储库后,组织中的其他节点可以访问存储库以下载IT批准的软件。因此,组织的IT可以为每个程序管理它可以处理哪些数据等级、可以调用哪些程序等级以及哪些程序等级可以调用它。使用应用程序和部分名称,IT可以向程序添加权限:它可以处理哪些数据等级;它可以调用哪些程序等级;以及,哪些程序等级可以调用它。TEE将逻辑名称转换为程序GUID。因此,IT不知道或分配GUID,它们由存储库服务器上的TEE生成。考虑IT引入新工具的场景。新工具带有不同于所有其他IT GUID的GUID。该工具由用户下载,并且用户机器上的TEE发现机器上的GUID和IT GUID存在冲突。在安装新工具之前,接收方TEE必须更改非IT GUID。因此,这可能包括:a)如果拥有GUID的程序、应用程序正在运行,则停止该程序;b)将映射 (发布者,GUID)->机器GUID更改为新的机器GUID;c)改变存储块从旧机器GUID 到新机器GUID的映射;d)安装新的IT工具。
在实施例中,企业数据的安全等级对所有机器都是通用的。GUID用于代码和应用程序/ 程序的私有数据。在一个实施例中,从存储库下载的程序,即用企业私钥签名的程序,可以声明对它们不拥有的等级的访问权限。一个问题可能涉及攻击者知道某些安全代码部分的 GUID、下载具有相同GUID的恶意软件并获得对安全代码的安全数据的访问权限的能力。然而,根据各种公开的实施例,这是不可能的,因为有几个预防措施:1)每台机器上的非IT GUID都不同,因此恶意软件需要知道特定机器上的GUID;2)GUID被发送到TEE,从那里只能由TEE或需要知道的硬件元素访问,这样它们就不会暴露给CPU上运行的软件;并且,3)只有从IT存储库下载的代码才能声明对其不拥有的等级的访问权,这意味着恶意软件需要渗透到IT存储库并知道IT GUID。
图19示出了根据一个实施例的用于在使用GUID 1910时减少开销的示例框图1900。下载的GUID 1910是128位。如上所述,接收机器可以将128位GUID映射到16-32位1920,以限制存储块映射到安全等级的开销。16位的ID可以代表64K个等级。12位的ID 可以代表4K个等级。在客户端机器上可能永远不会有超过4K个活动等级,即内存中程序的代码和数据等级(已完全换出主内存的程序不计算在内)。因此,为了限制跟踪等级所需的安全矩阵和控制线和寄存器的开销,当程序启动时,它的等级可以从“存储”映射1920映射到“活动”映射1930。根据一个实施例的程序等级开销减少流程为:
1.存储控制器应维护从存储等级到活动等级的映射副本。当它读取一个它没有映射的存储等级时,它应该将该存储等级发送到TEE。
2.TEE具有从GUID的能级到存储等级的映射以及属于同一程序的等级的关联。因此,TEE应为程序的所有存储等级发布活动等级,并将映射和所需的加密密钥发送到存储控制器。
3.一旦存储控制器有了新的映射,存储块应与活动等级一起写入内存,并且内存控制器应维护内存中等级的引用计数。
4.当引用计数达到“0”或从“0”递增时,内存控制器应通知TEE。因此,TEE应为每个活动等级维护二进制标志,指示它们的引用计数是“0”还是大于“0”。根据等级,TEE 应维个标志,其指示程序的引用计数是“0”还是大于“0”。
5.当程序的引用计数从0开始增加时,TEE将读取程序的安全矩阵并将它们添加到所有SoC位置的活动矩阵中。
6.位置(CPU缓存、CPU流水线、内存控制器等)应将新规则存储在其安全缓存或安全内存中。
7.当一个程序的所有等级的引用计数达到0时,TEE通知存储控制器删除它们的映射,这些等级可以被重用。
8.当程序的引用计数达到0时,TEE应从SoC中删除其安全矩阵规则。
9.如果新启动的程序没有足够的空闲活动等级,TEE将向OS发出中断,其含义是换出程序。
10.当操作系统根据其换出启发式换出程序时,它应确认TEE。
11.TEE应监视程序的引用计数,直到它可以回收程序的等级。TEE将继续请求换出,直到有足够的空闲活动等级用于新程序。然后它将新程序的映射发送到存储控制器。
本领域普通技术人员应当理解,进程可以创建其他进程,并且可以创建线程。创建线程和进程时,它们的初始安全上下文可能是创建它们的流的安全上下文。已经确定线程以及进程和子例程在创建或切换时面临(重新)创建其各自安全上下文的挑战。当它们被切换时,也可能需要重新创建安全寄存器等级、算术标志和安全上下文等级。线程创建通常由操作系统通过系统调用完成。在x86架构中,可以通过sysenter命令识别系统调用,或者在
Figure BDA0003438674570000251
中,通过调用中断80。在识别到系统调用后,CPU可以将流安全等级保存在特殊的寄存器中,只有CPU可以访问。另一种方法,通过特殊指令,专门针对线程的创建,详述如下。线程的切换由操作系统完成,只有操作系统知道正在恢复哪个线程。因此,HW面临的挑战是知道要恢复的线程上下文。因此,根据一个实施例,对于线程创建和上下文切换,OS调度程序应调用专用CPU指令,由CPU实现和拥有(不是外部供应商,例如OS供应商)并在 CPU拥有的安全飞地中运行。
线程的一个特例是中断。首次加载中断时,它以非机密安全等级开始,就像启动时的任何程序一样。如果该中断被中断,或出于任何原因被切换出,则根据所公开的实施例来处理它,就像切换出然后又返回的任何其他线程一样。
现在参考示例图20,其示出了根据实施例的线程上下文的散列表2000。CPU上下文(PC、寄存器及其安全等级、算术标志、安全上下文)由硬件管理。操作系统有专门的指令来创建、删除、保存和恢复上下文,以线程ID作为参数。
当创建线程时,例如线程1 2010,操作系统会发出带有线程ID的“创建线程”指令。CPU从散列表2000中取出上下文的结构,其中散列键是线程ID,例如,2010初始化为默认值,线程ID和安全上下文除外。为了切入或切出上下文,操作系统会发出相关指令,并以线程Id(例如线程1 2010)作为参数。CPU对ID进行散列运算以计算线程的数据结构地址并进行切入/切出。类似地,这也是为了删除上下文而执行的。操作系统用于上下文切换和调度的代码执行受代码安全等级保护的写入。
需要说明的是,在存储和恢复上下文时,可能还需要存储和恢复寄存器的安全等级。到目前为止,数据等级影响写入数据值的页面的等级。这不是存储/恢复的情况。安全等级必须与数据值一起读取和存储,然后写入数据恢复到的寄存器对应的安全等级字段。存储/恢复是 CPU可以读取和写入数据寄存器的安全等级字段的唯一实例。此功能由存储/恢复代码的安全等级启用和保护。存储/恢复代码的数据页有不受寄存器(由安全矩阵管理)影响的恒定安全等级。存储/恢复代码的安全等级应称为上下文等级。
在一个实施例中,为了防止攻击者伪装成上下文等级并改变数据寄存器和安全上下文的安全等级,上下文等级由CPU拥有,而不是由OS拥有,并且先于操作系统引导(作为硬件引导的一部分,如本文进一步讨论的那样)被加载(带有签名验证)。飞地代码的地址范围和上下文功能的入口点在寄存器中提供给操作系统,这些寄存器对上下文等级以外的所有等级都是只读的。上下文等级应具有固定的等级ID,不允许其他等级使用该ID。飞地数据页可以由飞地从操作系统请求,并基于虚拟内存启发式进行切入和切出。在一个实施例中,为了防止恶意软件切换切入页面,上下文等级只能读取具有上下文等级ID的页面。飞地数据页可以由飞地从操作系统请求,并基于虚拟内存启发式切入和切出。
图21是根据一个实施例的使用后进先出列表的线程上下文(调用堆栈)的示例数据结构 2100。对于线程,在换入和换出时定义了存储和恢复指令。相同的方法可用于在函数/子例程调用期间的存储/恢复功能。这样做将返回地址、寄存器数据和安全数据(寄存器安全等级、安全标志和安全上下文)移动到CPU拥有的安全飞地,并从用户堆栈中删除返回地址和寄存器数据。这是在调用子例程时存储/恢复安全上下文(图3中的340)所必需的。
通过包含程序计数器,可以防止因堆栈溢出(覆盖返回地址)而劫持控制流。通过写入寄存器数据和相应的安全等级,可以防止将所有寄存器的安全等级设置为寄存器的最大等级,如果按照现有技术的规定将它们全部写入常规内存页面,则可能会发生这种情况(即,用户堆栈)。在一个实施例中,存储和恢复上下文的方式是使用CPU上下文飞地。数据的内存页共享相同的上下文安全等级。只有具有上下文等级的代码才能使用上下文等级读取和写入内存。当上下文等级代码请求新的内存页面时,在第一次写入页面时接收上下文等级。当上下文等级页面被释放时,它被切碎并重新获得未分级的等级。这些线程仍然在散列表2000中,线程ID是键。采用后进先出(LIFO)命令,每个线程结构保存线程ID和指向第一个上下文 2110-1和最后一个上下文2110-n的指针,其中“n”是一个等于或大于“1”的整数。在一个实施例中,上下文是数组中的固定结构,因此指针是索引。
在一个实施例中,上下文数组具有“空闲”数组,该数组是上下文数组中空闲、未使用的结构的链表。这在根据一个实施例的空闲数组2200的示例性且非限制性的图22中示出,该自由数组2200对应于列出上下文阵列中的自由、未使用的结构的上下文数组(图22中未示出)。空闲列表也被排列为LIFO结构2220。插入的最后一个元素指向前一个元素(该元素指向前一个元素),一直到插入的第一个元素,它有NULL反向指针。在该示例中,列表2240的上下文9是最后输入的2230,2230指向列表2240的6,6指向LIFO 2220中的4,4 指向LIFO2220中的10,即第一个上下文2210。当上下文数组已满时,代码可以请求新的内存页。可以根据本领域已知的原理来处理函数不返回给调用者而是多个调用级别的情况。
现在参考图23,其示出了根据一个实施例的用于使用硬件安全分级进行安全计算的系统 2300的示例框图。该系统包括一个或多个处理元件(PE)2310,例如2310-1到2310-i,其中“i”是“1”或更大的整数。PE 2310可以是但不限于处理器、控制器、加速器、计算数据路径、组合逻辑、直接存储器访问(DMA)控制器,以及它们的任何组合。
至少一个PEs 2310根据本文描述的原理受到保护,即,利用安全矩阵来识别安全等级,并允许确定数据-数据、代码-代码或代码-数据交互,以及由本文公开的这种交互产生的安全结果的确定。系统2300还包括一个或多个存储控制器(SC)2320,例如2320-1到2320-j,其中‘j’是‘1’或更大的整数。SC 2320可以如本文所公开的那样操作,例如但不作为限制,以关于图6和7所描述的方式操作。
PEs 2310和SCs 2320通过互连2330通信连接,互连2330可以是总线,例如但不限于主机总线、系统总线、输入/输出总线、工业标准总线(ISA)和扩展ISA(EISA)、外围组件互连(PCI)、小型计算机系统接口(SCSI)、通用系统总线(USB)或局域网(LAN)、广域网(WAN)、虚拟专用网络(VPN)、存储区域网络(SAN)以及其他有线或无线总线,及其任何组合。根据情况可能需要,互连2330允许数据和代码在PE 2310之间、SC 2320之间以及PE 2310和SC2320之间流动。
在示例实施方式中,在不脱离本公开的范围的情况下,某些系统可以具有组合,其中多个PE 2310中的一个或多个PE(但不是全部)不通过硬件安全等级保护。同样地,在不脱离本发明的范围的情况下,某些系统可以具有组合,其中多个SC 2320中的一个或多个SC(但不是全部)不通过硬件安全等级保护。即,系统2300中的至少一个PE 2320和至少一个SC2320 将根据本文公开的原理使用硬件安全等级来保护。技术人员应当理解,在不脱离本公开的范围的情况下,系统2300还可以包括外部存储器,例如DDR。
因此,根据各种公开的实施例,存储器中的所有页面和存储器中的所有块都具有安全等级。在一个实施例中,安全等级的初始值被设置为非分级值,例如“0”。有三个矩阵定义了安全等级之间的交互:a)数据-数据;b)代码-数据;和,c)代码-代码。在一个实施例中,“-1”的值表示不兼容,没有交互;对于数据-数据,元素(x,y)表示混合等级“x”和类“y”时的结果等级;对于代码-数据,元素(x,y)表示code‘x’是否可以读/写数据‘y’,注意在一个实施例中读操作和写操作可能有单独的矩阵;对于代码-代码,元素(x,y)表示代码等级‘x’是否可以读/写/调用代码等级‘y’;最后但并非最不重要的一点是,不兼容性导致指令无法执行并产生硬件异常。操作结果的安全等级由操作数的安全等级、安全上下文和指令的安全等级决定。
此外,内存页面的等级由内存控制器管理。当从内存中读取数据/代码时:控制器接收读取数据的指令的地址和安全等级,由于内存控制器不区分内存页是包含代码还是数据,所有读取和写入的内容都可以参考作为数据;控制器验证读取指令的代码等级是否允许访问页面的数据等级;并且,控制器将数据及其安全等级设置在互连上。代码/数据写入内存时:控制器接收数据、其安全等级和写入数据指令的安全等级;控制器验证该指令是否允许写入页面的安全等级;并且,控制器根据其当前等级、写入数据的等级和安全矩阵,更新页面的安全等级。为了更快地处理读或写操作,映射可以由内存控制器缓存。
根据一个实施例,“粉碎页面”命令被添加到指令集架构(ISA)。它由操作系统在释放页面时发出并由内存控制器执行。该命令覆盖安全数据。来自页面的缓存条目应被粉碎或失效。在一个实施例中,当数据/代码在互连(例如互连2330)上移动时,它总是与其安全等级一起移动。安全等级扩展了缓存标签。安全等级随数据/代码在缓存层次结构中上下移动,进入 CPU,进入互连。任何从缓存读取数据的监听/一致性机制也必须读取安全等级。CPU寄存器文件中的每个数据寄存器都被扩展以保存存储在寄存器中的数据的安全等级。
根据一个实施例,每个执行都具有流安全等级。流安全等级以非分级等级或产生线程的流安全等级开头。当算术计算完成时,结果的安全等级被添加到算术标志中作为新的安全标志。每次有条件分支或跳转到计算地址时,流安全等级都会更新。更新基于当前流安全等级、算术安全标志和地址的安全等级。当跳转到子例程时,流安全等级由CPU安全地存储。它在返回时恢复。当一个线程/进程被切出时,它的流安全等级被安全地存储。当它被切入时,它被恢复。流安全等级跟踪片上缓冲区、内存和队列中的数据。缓冲区/内存可以划分为多个子部分,以允许存储来自不同等级的数据,例如,缓存行和方式。
在PE 2310为加速器的情况下,加速器输出的安全等级可以由输入的安全等级和配置决定,这些配置可以通过寄存器实现。如果加速器仅在当前数据完成处理后才接受新输入,则安全等级可以等待输出。如果在当前数据完成至少一层处理后加速器接受新数据,则输出等级必须与数据一起传输。如果加速器对内存进行读/写,加速器也会收到配置指令的等级,以便将等级提供给内存控制器。
根据一个实施例,所有存储块都被映射到安全等级。每个存储块都使用由其安全等级确定的密钥进行加密。等级键映射由TEE写入存储控制器。只有控制器可以读取映射。虽然所有企业设备上的等级密钥可以相同,但在一个实施例中,等级密钥在每个设备上是唯一的。当存储块被释放(例如,文件被删除)时,操作系统应指示存储控制器释放这些块。存储控制器应将等级设置为非安全。粉碎取决于实施方式。
在一个实施例中,存储中的等级在16-32位GUID的范围内。从存储中读取时,这些等级可能会转换为10/12/16位GUID,以减轻执行开销。如果存储控制器找不到用于读取的GUID的缩减GUID,它会将未映射的GUID发送到TEE。TEE为程序的所有GUID分配缩减的GUID,并将它们与加密密钥一起发送到存储控制器。如果程序没有足够的缩减 GUID,TEE会向操作系统发送GUID资源错误。收到GUID资源错误时,操作系统应将休眠程序存储在虚拟内存中,以释放它们缩减的GUID。完成后,它将释放它们的内存页。内存控制器应为每个缩减的GUID保留引用计数。当引用计数达到0时,它将缩减的GUID 发送到TEE。
此外,根据一个实施例,每个设备都具有企业身份。设备可以通过TEE请求证明其身份的企业令牌,即令牌可以指示该设备是企业的成员以及该设备的安全能力。当要执行设备间通信并且设备打开与另一设备的连接时,网络接口将打开的连接转发到TEE。TEE打开到同一个IP及其TEE端口的安全连接。如果连接被打开,两个TEE交换身份令牌以确定它们是朋友(同一企业的成员或联盟)还是敌人(没有令牌,没有证书)。因此,可以向提供令牌的朋友上传或从其下载分级或未分级的数据,可以向提供证书的朋友下载但不能上传安全数据;并且,只能向/从敌人上传/下载非机密数据。
根据连接状态(敌人、朋友、单向、安全能力),TEE根据可以发送到连接另一端的数据类型来配置网络接口。当安全分组被发送到敌人/单向时,它们会被接口阻止。当安全分组发送给朋友时,它们被转发到TEE,TEE将该分组封装在具有安全等级的安全分组(加密并签名)中,并将该分组转发到接收机器的TEE端口。当网络接口接收到TEE端口的分组时,它会将该分组转发到TEE。当TEE收到安全数据包时,它会打开封装并将原始分组(和安全等级)写入操作系统缓冲区。或者,TEE可以将数据和安全等级返回给接口,然后接口写入数据。
在又一实施例中,当CPU请求存储器提取时,硬件将指令的安全等级附加到地址。如果内存内容在缓存中,缓存验证代码等级是否有权处理地址的数据等级,或者跳转到地址指向的代码。如果内存内容不在缓存中,请求被转发到内存控制器,内存控制器运行相同的验证。如果指令不允许处理数据或跳转到代码,则会产生硬件异常。在写入内存之前,内存控制器会验证指令和数据是否与内存页面的安全等级兼容。根据一个实施例,汇集是一种可以使用的方法,由此代码只能从特定的代码等级(汇集)跳转。所有其他试图到达代码的代码都必须通过汇集,这保证了跳转到合法的入口点。
在一个实施例中,安全飞地是通过向代码提供唯一的安全等级来形成的。只有旨在调用飞地的代码才与该飞地的代码兼容。只有飞地代码可以读取和写入(即兼容)飞地数据。将数据返回给应用程序的安全飞地必须具有解密功能,以将数据的安全等级从飞地安全等级更改为输出等级。这是通过使用根据各种公开的实施例的代码-数据安全矩阵来完成的。
此外,可以下载应用程序、程序及其代码和数据的安全等级。这是通过将下载格式(例如,在Windows的情况下是PE格式)封装成一种格式来完成的,该格式为每个代码或数据部分分配一个唯一的GUID,并为等级之间的交互规则提供数据-数据、代码-数据和代码-代码矩阵。在一个实施例中,封装被发送到接收设备的TEE。从出版社下载的规则只能包括下载程序的等级和非机密等级。下载后,下载机器的TEE会为每个(供应商,GUID)元组生成到内部 GUID的映射。只有从企业IT存储库下载的程序才能包含跨程序交互规则。从IT存储库下载的程序已经包含带有内部GUID且不会更改的矩阵。如果任何IT GUID已在下载机器上使用(概率非常低),则下载机器应更改其分配的与从IT下载的GUID冲突的GUID。
在一个实施例中,ISA可以添加指令以创建/删除/切出/切入线程/进程。当切换线程/进程或跳转到子例程/函数时,CPU上下文飞地应安全地存储寄存器、寄存器的安全等级、算术安全标志、安全上下文和返回地址。当在线程/进程中切换,或从函数/子例程返回时,CPU 飞地将恢复寄存器、寄存器的安全等级、算术安全等级、安全上下文并跳转到返回地址。操作系统进程/线程调度程序和进程/线程创建者应是唯一允许调用上下文飞地的代码。CPU应在JSR和RET指令上调用飞地。飞地应为每个线程/进程维护单独的上下文堆栈/队列。
现在参考图24,其示出了根据本文描述的一个实施例操作的系统的示例通信图2400。通信涉及源接口2410、源TEE 2420、目的地接口2430、目的地TEE 2440和认证服务器2450。通信开始于从源接口2410发送到达源TEE 2420和目的接口2430的SYN请求。源TEE2420向目的地接口2430发送另一个SYN请求。SYN请求现在从目的接口2430 发送到目的TEE2440,然后SYN响应发送到源TEE 2420。源TEE 2420以认证请求响应目的地TEE 2440。目的地TEE 2440向认证服务器2450发送认证令牌请求,认证服务器2450 用发送到目的地TEE2440的认证令牌适当地响应。然后将认证令牌从目的地TEE 2440转发到源TEE 2430。此后,可以在源和目的地之间发送非机密数据和机密数据。即,来自源接口2410的非分级数据被引导到目的地接口2430。相比之下,分级数据被发送到源TEE 2420,然后在被发送到目的地TEE 2440之前被签名、加密和封装,然后将数据及其相关联的安全等级返回到目的地接口2430。
现在参考图25,其示出了根据一个实施例的卸载到卸载引擎2520的示例框图2500。卸载引擎2520可以是为主SoC 2510执行特定服务的SoC,这样的卸载引擎包括但不限于调制解调器、图形SoC、人工智能SoC等。在一个实施例中,这样的卸载引擎2520可以:a)仅与形成封闭生态系统并具有它们自己的存储器的主SoC 2510通信;b)与系统中的多个SoC通信;或者,c)通过网络与外部设备(例如调制解调器)通信。在一个实施例中,随着卸载引擎2520的扇入/退出增加(即,它与多个源和目的地通信),并且如果需要安全系统继续保护数据,卸载引擎2520也实现基础设施和此处公开的协议。即,主CPU SoC 2510不仅通过数据通信2540进行通信,而且还通过安全等级2530进行通信。需要网络SoC、调制解调器来实现与TEE、动态白名单表以及识别SYN和FIN消息的协议。
在一个实施例中,卸载引擎2520具有其自己的DDR存储器,一次与单个数据源通信(即,接收数据、处理数据、返回结果)不需要实施安全基础设施,作为数据源可以标记它发送的数据的等级,并在收到结果后重新应用它。在另一个实施例中,与多个数据源并发通信的卸载引擎2520,无论是在系统内(即,没有联网)还是通过网络与源和目的地通信,实现安全基础设施以便被认为是安全的。对于所有卸载引擎2520,假定所使用的软件在启动过程中被加载和验证,并且代码的存储器位置被写保护。这意味着在卸载引擎2520开启时没有代码的动态加载并且没有代码的改变。SW更新可能仍会发生,但需要重新启动卸载引擎2520以便使用更新的代码。如果卸载引擎位于SoC上,则它与片外卸载引擎的要求相同。
因此,所公开的实施例允许提高系统保护数据、由代码修改的数据和代码的能力,因为它们在系统内流动或在系统接口的入口和/或出口点被寻址。因此,本文提出的解决方案克服了将数据、由代码修改的数据或代码放置在特定位置以便在所需等级受到保护的需要。相反,通过提供跟踪其保护的内容并在具有不同安全等级或其预防的元素之间发生交互时更新的安全等级,提供了更有效和健壮的安全系统。
还应当理解,根据各种公开的实施例,所有代码和数据都被分配了相应的安全等级。安全等级之间的交互规则定义了允许的内容以及此等级交互的结果安全等级。因此,任何违反规则的行为都可以实时检测到,并且可以进一步识别违规代码。在各种实施例中,当机密数据被引导穿过受保护的接口时,如果目的地未被识别为朋友,则其被认为是敌人并且此类数据被接口阻止穿过其边界。在目的地被识别为朋友的情况下,安全等级伴随其各自数据或代码跨越接口。因此,接口,包括但不限于网络接口,保留跨越它们的数据或代码的安全等级。
因此,根据一个实施例,用于安全计算的系统包括:系统的互连;至少一个处理元件(PE),其通信地连接到互连,该处理元件适于处理矩阵,该矩阵定义由处理元件处理的数据和代码的安全等级之间的交互;以及,通信地连接到互连的存储控制器(SC),其适于至少基于与数据相关联的安全等级来处理关于读操作和写操作的数据。在一个实施例中,PE是以下之一:加速器、处理器、控制器、组合逻辑、数据路径和直接存储器存取(DMA)控制器。
在另一个实施例中,安全系统包括:多个第一存储单元,适于在其中包含安全等级,其中系统中的每个数据被分配有保持与其相关联的安全等级;多个第二存储单元,适于在其中包含安全等级,其中系统中的每个代码都被分配有与其保持相关联的安全等级;其中在系统中每个数据的第一数据和第二数据之间尝试交互时,检查第一数据和第二数据各自的安全等级是否允许交互,如果允许,则基于与第一数据和第二数据相关联的安全等级生成第一结果安全等级;其中在系统中每个数据的第一代码和第二代码之间尝试交互时,检查第一数据和第二数据各自的安全等级是否允许交互,如果允许,则基于与第一代码和第二代码相关联的安全等级生成第二结果安全等级;其中在第三代码,和每个代码的第三数据与系统中的每个数据之间尝试交互时,检查代码和数据各自的安全等级是否允许交互,如果允许,则基于与第三代码和第二数据相关联的安全等级生成第三结果安全等级;并且,其中在基于相应的安全等级确定不允许交互时,阻止尝试的交互。
在又一实施例中,存储器控制器适于与存储器页一起操作,每个存储器页与安全等级相关联。相应地,当读指令到达内存控制器时,内存控制器验证该指令的安全等级是否可以读取正在从内存中读取的数据或代码的安全等级。此外,如果指令的安全等级不允许读取数据或代码,则不读取数据/代码,并返回错误。此外,当从存储器中读取代码和/或数据时,它们会与其各自安全的等级被读取到互连上。此外,当代码或数据写入内存时,内存控制器会验证数据的安全等级是否可以与页面的安全等级合并,并确定结果等级。此外,当代码或数据被写入内存时,内存控制器验证尝试写入的代码的安全等级可以处理(即写入)页面的安全等级。此外,如果数据和页面的安全等级无法合并,则产生错误并且不写入数据。此外,如果尝试写入的指令的安全等级无法写入目标页面的安全等级的页面,则会产生错误并且不会写入数据。
根据一个实施例,当代码通过例如SoC的互连传输时,该代码与其对应的安全等级一起移动。根据另一个实施例,当数据通过例如SoC的互连传输时,该数据与其对应的安全等级一起移动。
在又一个实施例中,处理元件适于操作,使得当代码和/或数据到达缓冲器/高速缓存时,它们与它们各自的安全等级一起存储。因此,当处理元件从缓冲器/高速缓存读取指令时,该指令与其安全等级一起被读取。此外,当处理元素从缓存中读取数据时,该数据会与其安全等级一起读取。此外,在指令执行期间,处理元件验证操作数的数据安全等级可以合并在同一指令中以及结果等级中。此外,在指令执行期间,如果只有一个操作数,则处理元件验证指令的安全等级是否可以处理合并数据的结果安全等级或数据等级。此外,如果操作数的安全等级不能合并在同一条指令中,则会产生异常,并中止该指令。此外,如果指令的安全等级不允许处理数据或合并数据的安全等级,则会产生异常,并中止指令。此外,当指令的结果被写入寄存器时,它与其各自的安全等级被写入。此外,当指令的结果写入缓冲区/高速缓存时,它与其各自的安全等级被写入。此外,如果写入数据的安全等级不能与缓存线的安全等级合并,则产生异常,中止写入。此外,在处理元件发起的每次上下文更改或子例程跳转时,安全可信执行环境(TEE)将所有上下文寄存器及其安全等级存储在安全内存中。因此,当上下文重新加载或从子例程跳转返回时,TEE将重新加载上下文以及安全等级。
在又一实施例中,网络接口适于操作,使得当机器打开到另一目标机器的连接时,发起机器的网络接口向目标机器的网络接口请求相互证明。此后,当两台机器都满足另一台机器属于同一组织时,请求对数据和/或代码安全等级的证明请求来确定另一台机器被授权存储和 /或处理。因此,当发起机器试图向目标机器发送数据时,网络接口验证目标机器被授权处理 /存储数据的安全等级。如果目标机器被授权,则发送数据及其各自的安全等级;否则,网络接口会产生错误并阻止数据离开发起机器。此外,当发起机器试图从目标机器读取数据时,目标机器上的网络接口验证发起机器是否被授权接收数据的安全等级。如果获得授权,则发送数据及其各自的安全等级。否则,网络接口会产生错误并阻止数据离开到发起机器。此外,当代码和/或数据进入机器时,网络接口验证机器是否被授权接受代码和/或数据的安全等级。如果获得授权,则允许代码和/或数据进入机器。否则,网络接口会产生错误,并且代码和/ 或数据被阻止。在一个实施例中,网络接口的安全动作也可以转发到安全TEE。
在又一个实施例中,存储控制器适于操作,使得当代码和/或数据到达存储设备时,代码和/或数据与其各自的安全等级一起到达。此外,当代码和/或数据被写入存储设备的块时,用映射到正在写入的内容的安全等级的密钥对其进行加密,并且将内容的安全等级映射到该块。此外,当从存储设备的块读取代码和/或数据时,使用映射到存储块内容的安全等级的密钥对其进行解密。此外,当从存储设备读取数据和/或代码时,数据和/或代码伴随着其各自的安全等级。
在又一实施例中,当打包软件时,代码或数据的每一部分都与安全等级相关联。此外,当软件到达机器时,接收机器中的安全TEE打开包并将代码或数据的每个部分与附加到其上的相应安全等级相关联。
应当注意,包括方法或过程的各种公开的实施例可以通过处理电路和存储器来实现,该存储器包含在由处理电路执行时配置处理电路以执行该过程或方法的指令。同样,被配置为执行代码的硬件组件可以被实现为处理电路和包含包括代码的指令的存储器的组合。
本文公开的各种实施例可以实现为硬件、固件、软件或其任何组合。此外,该软件优选地被实现为有形地体现在程序存储单元或计算机可读介质上的应用程序,该程序存储单元或计算机可读介质由部件、或某些设备和/或设备的组合组成。应用程序可以上传到包括任何合适架构的机器并由其执行。优选地,机器在具有诸如一个或多个中央处理单元(“CPU”)、存储器和输入/输出接口的硬件的计算机平台上实施。计算机平台还可以包括操作系统和微指令代码。本文描述的各种过程和功能可以是微指令代码的一部分或应用程序的一部分,或者它们的任意组合,它们可以由CPU执行,无论这样的计算机或处理器是否被明确示出。此外,各种其他外围单元可以连接到计算机平台,例如附加数据存储单元和打印单元。此外,非暂时性计算机可读介质是除了暂时性传播信号之外的任何计算机可读介质。
本文中引用的所有示例和条件语言旨在用于教导目的,以帮助读者理解所公开实施例的原理和发明人为进一步推进本领域所贡献的概念,并且应被解释为不限于这些具体引用的示例和条件。此外,本文中叙述所公开实施例的原理、方面和实施例及其特定示例的所有陈述旨在涵盖其结构和功能等效物。此外,此类等效物旨在包括当前已知的等效物以及未来开发的等效物,即,无论结构如何,所开发的执行相同功能的任何元件。
应当理解,本文使用诸如“第一”、“第二”等名称的任何对元素的引用通常不限制这些元素的数量或顺序。相反,这些名称在本文中通常用作区分两个或更多个元素或元素的实例的便利方法。因此,对第一和第二元素的引用并不意味着在那里可以仅使用两个元素或者第一元素必须以某种方式在第二元素之前。此外,除非另有说明,否则一组元素包括一个或多个元素。
如本文所用,短语“至少一个”后跟项目列表意味着可以单独使用所列项目中的任何一个,或者可以使用所列项目中的两个或更多个的任何组合。例如,如果系统被描述为包括“A、 B和C中的至少一个”,则该系统可以包括A单独;B单独;C单独;2个A;2个B;2 个C;3个A;A和B组合;B和C组合;A和C组合;A、B、C组合;2个A和C组合; A、3个B和2个C组合;等等。

Claims (41)

1.一种用于安全计算的系统,包括:
处理元件,被配置为处理矩阵,所述矩阵定义由所述处理元件处理的数据和代码的安全等级之间的交互。
2.根据权利要求1所述的系统,还包括:通信地连接到所述处理元件的互连,其中所述互连上的数据附有所述数据各自的安全等级。
3.根据权利要求1所述的系统,还包括:通信地连接到所述处理元件的互连,其中所述互连上的代码附随有所述代码各自的安全等级。
4.根据权利要求1所述的系统,还包括:通信地连接到所述处理元件的内存控制器,其中所述内存控制器被配置为处理以下中的至少一个:基于与所述数据相关联的安全等级的关于读取操作和写入操作的数据,以及与所述代码相关联的安全等级。
5.根据权利要求1所述的系统,其中所述处理元件是以下任一者:加速器、处理器、控制器、组合逻辑、数据路径和直接存储器存取(DMA)控制器。
6.根据权利要求1所述的系统,其中安全等级之间的交互包括第一数据部分和第二数据部分之间的交互,所述第一数据部分和所述第二数据部分中的每一个均具有相应的安全等级。
7.根据权利要求1所述的系统,其中安全等级之间的交互包括第一代码部分和第二代码部分之间的交互,所述第一代码部分和所述第二代码部分中的每一个均具有相应的安全等级。
8.根据权利要求1所述的系统,其中安全等级之间的交互包括数据部分和代码部分之间的交互,所述数据部分和所述代码部分中的每一个均具有对应的安全等级。
9.根据权利要求1所述的系统,其中,所述处理元件还被配置为确定安全等级之间的不兼容性。
10.根据权利要求9所述的系统,其中,当确定安全等级之间不兼容时,所述处理元件还被适配成生成异常通知。
11.根据权利要求9所述的系统,其中,当确定安全等级之间不兼容时,所述处理元件还被适配成组织所述处理元件的动作。
12.根据权利要求4所述的系统,其中,所述内存控制器还被配置成在接收到写指令时确定是否进行写动作,所述写指令包括对应的安全等级和要写入内存页中的数据部分,所述数据部分和所述内存页中的每一个均具有相应的安全等级。
13.根据权利要求12所述的系统,其中,所述内存控制器还被配置为当确定要执行写动作时将所述数据部分和对应的安全等级写入所述内存页。
14.根据权利要求13所述的系统,其中,所述系统还被配置为当确定不执行写动作时生成异常通知。
15.根据权利要求13所述的系统,其中,所述系统还被配置为当确定不执行写动作时丢弃所述写指令。
16.根据权利要求1所述的系统,其中,所述系统是片上系统。
17.一种安全系统,包括:
多个第一存储单元,被适配成包含多个第一安全等级,其中每个第一安全等级被分配给所述安全系统中的多个数据部分的相应数据部分,所述多个数据部分包括第一数据部分、第二数据部分和第三数据部分;
多个第二存储单元,被适配成包含多个第二安全等级,其中每个第二安全等级被分配给所述安全系统中的多个代码部分的相应代码部分,所述多个代码部分包括第一代码部分、第二代码部分和第三代码部分;
处理电路;和
存储器,所述存储器包含指令,当所述指令由所述处理电路执行时,将所述安全系统配置为,
基于至少一个许可规则和分配给第一数据部分和第二数据部分的相应第一安全等级,确定是否允许第一数据部分和第二数据部分之间的第一交互;
当确定所述第一交互被允许时,基于分配给第一数据部分和第二数据部分的相应安全等级生成第一结果安全等级;
当确定所述第一交互不被允许时,阻止所述第一交互;
基于至少一个许可规则和分配给第一数据部分和第二数据部分的各自的第一安全等级,确定是否允许第一数据部分和第二数据部分之间的第二交互;
当确定所述第二交互被允许时,基于分配给第一代码部分和第二代码部分各自的安全等级生成第二结果安全等级;
当确定所述第二交互不被允许时,阻止所述第二交互;
基于至少一个许可规则和分配给第一数据部分和第二数据部分各自的第一安全等级,确定是否允许第一数据部分和第二数据部分之间的第三交互;
当确定所述第三交互被允许时,基于分配给第三数据部分和第三代码部分的相应安全等级生成第三结果安全等级;并
当确定所述第三交互不被允许时,阻止所述第三交互。
18.根据权利要求17所述的安全系统,其中在尝试交互时,每个被阻止的交互被实时阻止。
19.根据权利要求17所述的安全系统,还包括:接口,配置为检查系统接口边界处的尝试的交互。
20.根据权利要求19所述的安全系统,其中阻止在所述接口处的交互包括阻止通过所述接口访问通信地连接到所述接口的外部设备。
21.根据权利要求19所述的安全系统,其中所述接口还被配置为:当确定安全等级允许所述安全系统和外部设备之间的交互时,向通信地连接到所述接口的外部设备提供安全等级。
22.一种用于安全计算的系统,包括:
互连;
通信地连接到所述互连的处理元件;和
通信地连接到所述互连的内存控制器;其中,由所述内存控制器访问的内存页被映射到多个安全等级中的其中一个安全等级。
23.根据权利要求22所述的用于安全计算的系统,其中,所述内存页包含数据或代码中的至少一者。
24.根据权利要求22所述的用于安全计算的系统,其中,存在允许所述多个安全等级之间交互的规则集。
25.根据权利要求24所述的用于安全计算的系统,其中所述规则集被应用于确定以下中的至少一者:所述多个安全等级中的哪些数据等级能够在操作中混合;当所述多个安全等级中的第一等级与所述多个安全等级中的第二等级混合时,确定至少一个结果;确定多个安全等级中的第一等级是否能够处理与多个安全等级中的第二安全等级相关联的代码,以及确定多个安全等级中的第一安全等级是否能够调用多个安全等级中的第二安全等级。
26.根据权利要求22所述的用于安全计算的系统,其中由系统基于由所述处理元件执行的程序的控制流的确定,而创建安全上下文,并且其中数据操作的安全等级至少是所述安全上下文。
27.根据权利要求22所述的用于安全计算的系统,还包括:外部接口,其中所述外部接口被配置为,通过未经授权的安全等级和不兼容的安全等级中的任一者,执行以下至少一者:阻止数据从所述系统离开到至少与所述系统通信地连接的不可信站点,阻止未被所述系统授权接收的数据进入所述系统,阻止代码访问所述系统的内存块中的数据。
28.根据权利要求27所述的用于安全计算的系统,其中,所述外部接口还被配置为允许数据离开所述系统到另一系统,所述另一系统被配置为将所述数据与安全等级一起接收。
29.根据权利要求27所述的用于安全计算的系统,还被配置为在将数据或代码存储在通信地连接至外部接口的存储器中时,加密所述数据或所述代码中的任何一者。
30.根据权利要求24所述的用于安全计算的系统,其中用于代码页之间的交互规则被用于创建安全飞地。
31.根据权利要求30所述的用于安全计算的系统,其中所述安全飞地允许特定代码访问特定数据。
32.一种用于安全计算的系统,包括:
子系统,被配置为处理矩阵,所述矩阵定义数据和代码的安全等级之间的交互,所述数据和代码由处理元件处理。
33.根据权利要求32所述的用于安全计算的系统,其中所述子系统是:处理元件、内存控制器、存储控制器和接口。
34.根据权利要求33所述的用于安全计算的系统,其中所述接口是网络接口。
35.根据权利要求32所述的用于安全计算的系统,其中,所述子系统被配置为基于与所述数据相关联的安全等级来处理与读操作和写操作相关的数据。
36.根据权利要求32所述的用于安全计算的系统,其中,所述子系统被配置为处理与所述代码相关联的安全等级。
37.根据权利要求32所述的用于安全计算的系统,其中,所述子系统被配置为检查在所述子系统的接口边界处尝试的交互。
38.根据权利要求32所述的用于安全计算的系统,其中,所述子系统还被配置为确定安全等级之间的不兼容性。
39.根据权利要求32所述的用于安全计算的系统,其中,安全等级之间的交互包括第一数据部分和第二数据部分之间的交互,所述第一数据部分和所述第二数据部分中的每一个均具有相应的安全等级。
40.根据权利要求32所述的用于安全计算的系统,其中所述安全等级之间的交互包括第一代码部分和第二代码部分之间的交互,所述第一代码部分和所述第二代码部分中的每一个均具有对应的安全等级。
41.根据权利要求32所述的用于安全计算的系统,其中所述安全等级之间的交互包括数据部分和代码部分之间的交互,所述数据部分和所述代码部分中的每一个均具有对应的安全等级。
CN202111625757.6A 2020-12-28 2021-12-28 使用硬件安全等级的安全计算的体系结构、系统及其方法 Pending CN114912138A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US202063131077P 2020-12-28 2020-12-28
US63/131,077 2020-12-28

Publications (1)

Publication Number Publication Date
CN114912138A true CN114912138A (zh) 2022-08-16

Family

ID=82117114

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111625757.6A Pending CN114912138A (zh) 2020-12-28 2021-12-28 使用硬件安全等级的安全计算的体系结构、系统及其方法

Country Status (2)

Country Link
US (1) US20220206961A1 (zh)
CN (1) CN114912138A (zh)

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6125447A (en) * 1997-12-11 2000-09-26 Sun Microsystems, Inc. Protection domains to provide security in a computer system
US20060236408A1 (en) * 2005-04-14 2006-10-19 International Business Machines Corporation Method and apparatus for device dependent access control for device independent web content
US8811497B2 (en) * 2009-06-24 2014-08-19 Vixs Systems, Inc Processing system with register arbitration and methods for use therewith
US8832465B2 (en) * 2012-09-25 2014-09-09 Apple Inc. Security enclave processor for a system on a chip
DE102012218363A1 (de) * 2012-10-09 2014-04-10 Continental Automotive Gmbh Verfahren zur Steuerung eines getrennten Ablaufs von verknüpften Programmblöcken und Steuergerät
JP6580138B2 (ja) * 2014-12-15 2019-09-25 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation セキュア・オブジェクトをサポートするプロセッサ、方法およびコンピュータ・プログラム
US10708236B2 (en) * 2015-10-26 2020-07-07 Secturion Systems, Inc. Multi-independent level secure (MILS) storage encryption
US9800607B2 (en) * 2015-12-21 2017-10-24 Bank Of America Corporation System for determining effectiveness and allocation of information security technologies
US11500431B2 (en) * 2020-03-23 2022-11-15 Ppip, Llc Secure local application communication bridge

Also Published As

Publication number Publication date
US20220206961A1 (en) 2022-06-30

Similar Documents

Publication Publication Date Title
US9989043B2 (en) System and method for processor-based security
JP6370747B2 (ja) バーチャルマシーンモニタベースのアンチマルウェアセキュリティのためのシステム及び方法
US9530001B2 (en) System and method for below-operating system trapping and securing loading of code into memory
Checkoway et al. Iago attacks: Why the system call API is a bad untrusted RPC interface
Jacob et al. How to break secure boot on fpga socs through malicious hardware
US20120255003A1 (en) System and method for securing access to the objects of an operating system
US11074323B2 (en) Method and system for persisting files
Suciu et al. Horizontal privilege escalation in trusted applications
AU2020287873B2 (en) Systems and methods for processor virtualization
US10885193B2 (en) Method and system for persisting untrusted files
Wen et al. Multi-processor architectural support for protecting virtual machine privacy in untrusted cloud environment
US20100088770A1 (en) Device and method for disjointed computing
Pott et al. Firmware Security Module: A Framework for Trusted Computing in Automotive Multiprocessors
US20230168911A1 (en) Customized initialization code delivery over network for zero-trust virtual machine
US20220206961A1 (en) Architecture, system and methods thereof for secure computing using hardware security classifications
Liu et al. TZEAMM: An Efficient and Secure Active Measurement Method Based on TrustZone
Cheruvu et al. Base Platform Security Hardware Building Blocks
MacLennan Path-Safe: Enabling Dynamic Mandatory Access Controls Using Security Tokens
Ren et al. An Enclave-based TEE for SE-in-SoC in RISC-V Industry
Gartaganis Comparative analysis of the Windows security XP, Vista, 7, 8 and 10
Gazidedja HW-SW architectures for security and data protection at the edge
CN113742789A (zh) 数据处理方法及数据处理装置
Xie et al. TransPro: Mandatory Sensitive Information Protection Based on Virtualization and Encryption
Ruan et al. The Engine: Safeguarding Itself before Safeguarding Others
Malipatlolla Sustainable Trusted Computing: A Novel Approach for a Flexible and Secure Update of Cryptographic Engines on a Trusted Platform Module

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