用于调用安全区域的面向对象的编组方案的制作方法

文档序号:11142236阅读:211来源:国知局
用于调用安全区域的面向对象的编组方案的制造方法与工艺

实施例涉及用于调用安全区域的面向对象的编组(Marshaling)。



背景技术:

安全区域(Secure Enclave,SE)的建立是一种用于向用于处理机密数据的应用提供安全且隔离的执行环境(区域)的技术。区域由于其隔离性不能独自是一个完整的应用,因为其不能直接访问任何系统应用编程接口(API)。相反,为了利用SE技术,典型地对应用进行分区,其中,机密数据处理逻辑托管在区域中,且非机密数据处理逻辑托管在所述区域外。

随着移动操作系统的出现,产生的问题是如何使得SE技术在受开发者欢迎的面向对象的编程(OOP)语言(例如,)中可访问。

附图说明

图1是根据本发明的实施例的用于访问安全数据的系统的框图。

图2是根据本发明的另一实施例的调用注释处理器的系统的框图。

图3是根据本发明的实施例的用于数据和接口编组的系统的框图。

图4是根据本发明的实施例的包括由单个应用托管的两个区域的系统的框图。

图5是根据本发明的实施例的包括可堆叠信道配置的系统的框图。

图6是根据本发明的多个实施例的一种用于对应用与区域之间的接口进行实例化的方法的流程图。

图7是根据本发明的另一实施例的系统的框图。

图8是根据本发明的另一实施例的系统的框图。

具体实施方式

提出了一种接口定义语言(IDL)来支持OOP语言(例如,)以及在对可以由非安全主机应用与其进行通信的一个或多个安全区域进行实例化时的其他OOP语言。IDL旨在最小化对软件供应商的现有代码的改变,并且旨在利用相对简单的实现方式(例如,逻辑直接且代码尺寸小)来具有低等待时间/高性能特性。另外的优点是IDL将允许生成粘合代码以便将安全类(例如,有待在区域中托管的类)整合到应用的其他部分以为了与非启用SE的平台兼容性。将安全类整合到应用的其他部分可使得软件供应商(SV)从为其用于不同平台的应用维持多个版本中解放出来。附加地,在一些实施例中,不存在用户可见的接口,并且因此用户代码可以有效地与基础编组/传输及其相关联的代码解耦。

根据本发明的实施例,可以静态地生成和调用编组代码。静态生成且调用的编组代码的优点可以包括:与其他编码技术相比,已减少的静态编组代码的等待时间;与在远程站点上对象的动态创建相比,已减少的被非法客户端攻击从而导致了远程站点上的非预期代码执行的机会;与其他编码方法相比,已减小的静态编组代码的尺寸;以及派生可被编组(“可编组的”)的远程接口的能力。本发明的实施例支持接口继承。

根对象和根接口的概念被引入到IDL中,所述IDL允许由主机应用(例如,客户端)来创建(例如,被动地)在例如存储器的专用部分中的区域(在此也称为“服务器”,例如,存储器的安全部分)。进一步地,“打包器(Wrapper)”类可由注释处理器(例如,所述注释处理器可以由编译器调用)自动生成以便对编组进行旁路,这可以允许启用SE的应用在非启用SE的硬件上运行而无需修改应用源代码。

在本发明的实施例中,区域被抽象为单个对象,例如,暴露相应接口(例如,根接口)的根对象。所述根对象用作所述区域的入口点。所述根对象连同所述根接口的代理/桥对可以由区域初始化代码例如在应用的运行时间自动创建。取决于配置,所述根接口可以直接传递给调用器而无需对代理-桥对进行实例化。打包器类可以对所述根对象进行实例化,所述根对象实现所述根接口以便使得SE应用能够访问不具有代理/桥对的非启用SE的硬件上的安全区域。

一旦对所述根对象进行实例化,就可通过例如将对象/接口作为根接口的任何方法的自变量进行传递、或者通过经由根接口的任何方法返回对象/接口来向/从所述区域传递更多的对象/接口。为了编组接口(例如,允许应用空间中的调用器与区域空间中的被调用器,或者反之亦然),编组代码将要例如由注释处理器在构建时间来创建。在实施例中,注释处理器可以是编译器插件模块。

例如,开发者可以指定使用源内注释来编组接口,所述源内注释可以由注释处理器来处理以便为带有注释的接口生成代理/桥类。代理是带有注释的接口的实现方式。每当调用方法时,所述代理可以封装传输参数。桥是所述代理的对应部分。所述桥用于解封从传输层接收到的参数,并且用于调用带有注释的接口的实现方式。

代理/桥对象的创建/破坏可以由传输层来管理。所述传输层可以被抽象为信道接口。所述传输层可以负责传递数据包、以及负责将代理与桥进行匹配。信道也是“可编组的”,例如,可透明地对信道的不同实现方式进行堆叠。堆叠信道对于区域间过程调用可能是有用的。

在此使用的术语包括以下各项:

a.接口——包括虚拟方法但不包括数据成员的类。

b.代理——所生成的实现对应接口的类。所有方法都被实现为“编组代码”,例如,用于将输入参数封装到数据包(所述数据包将要由桥来“解组”)中的代码。如果方法具有返回值,代理实现方式在返回其调用器之前也“解组”所述返回值(所述返回值已经由桥来进行编组)。

c.桥——代理的对应部分。所述桥解包输入参数、调用接口实现方式、以及将返回值编组回至数据包。

d.根对象——当正在初始化区域时将要实例化的对象。所述根对象实现至少一个可编组接口(例如,根接口),也将由区域初始化代码对代理和桥进行实例化和配对以用于所述至少一个可编组接口。

e.根类——根对象的数据类型。

f.根接口——由根类实现的可编组接口。其代理和桥由区域初始化代码来实例化/配对。

g.信道——传输层抽象。信道是实现信道接口以便移动代理与桥之间的分组的类。信道接口自身也是可编组的,例如,可以通过另一个信道来创建信道的代理。换言之,信道是可堆叠的,这在区域间调用中可能是有用的。

图1是根据本发明的实施例的用于访问安全数据的系统的框图。系统100包括经由信道114/134耦合的应用110和区域130。在实施例中,应用110是不可信空间,且区域130是可信空间。

在实施例中,区域130被抽象为实现根接口(例如,通过上溯与所述根接口相关联的代理118)的根对象136。应用110在利用由区域130暴露的任何能力之前用于对区域130进行实例化且用于创建针对根接口的代理118。在区域实例化过程中,根对象136及其桥140两者均在区域130中被创建,从而使得应用110可通过根接口开始与区域130进行交互。

在操作中,应用110通过对区域创建器112的调用使得形成区域130。区域创建器112是对指令进行包封以便对区域130进行加载和初始化的自动生成的函数(例如,在应用110的构建时间被创建)。区域创建器112返回代理118,这是根接口的一种实现方式。

为了允许将多个区域加载到同一应用中,每一个区域将具有唯一的名称。例如,开发者被准许通过字符串来命名区域,从所述字符串来为区域创建器112和区域图像文件名生成名称。在实施例中(例如,针对一些语言,诸如),不准许独立的函数,并且因此区域创建器112被生成为具有单个静态函数的类。例如,假定区域命名为SomeEnclave,则区域创建器112可以是SomeEnclave_Creator.createEnclave()。在其他实施例中(例如,其他语言,诸如C++),独立的函数是被准许的。

区域创建器112可加载并调用所述区域130的初始化代码。例如,在使用的示例中,可以由类加载器将启动类初始化为区域全局初始化的一部分。虚线122将区域创建器112连接至启动类132。在使用C++的示例中,启动类132包括静态对象,所述静态对象的构造器作为初始化进程的一部分被调用。

当完成对所述区域130的初始化时,区域创建器112针对应用110初始化信道对象114。信道对象114用于通过例如在数据成员中存储区域标识(EID)或其他区域句柄/标识符(例如,由不可信运行时间服务(uRTS)返回)来记住其绑定的是哪一个区域。

信道对象114可以在寄存器116中维持可由区域130引用的桥列表。例如,桥140可以由如在代理118中可见的对应标识符(例如,针对桥140,标识符可为1)来引用。标识符引用存储在信道134的阵列138中的桥140的地址。(在实施例中,索引0(零)被保留为空引用(例如,在新创建的信道中),并且对应的寄存器条目为空)。

区域创建器112针对根接口创建所述代理118。所述代理118与在区域130中的桥140进行匹配。通过在区域侧的桥140的创建对代理118的创建进行匹配。当完成在应用侧(例如,应用110)的初始化时,代理118可以在被返回至调用器之前上溯至根接口。应用110然后可调用根接口的方法以便与区域130进行交互。

在区域侧(例如,区域130),区域启动类132是创建以下三个对象的自动生成的类:信道对象134、根对象136、以及桥140。

调用启动类132的方式取决于可信运行时间服务(tRTS)的实现方式。为了允许自动生成的代码创建根对象136的实例,根类可以具有默认构造器。

类似于应用110中的信道对象114,区域130也维持桥阵列138,所述阵列被初始化为空。然后为根对象136创建桥140。桥140维持对基础信道对象134的引用,所述基础信道对象将用于在值被返回时编组接口。桥140在信道的桥阵列138中被引用。桥140(在阵列138中)的标识符成为例如在代理118中的由应用110假设的相同标识符。在图1中所示的示例中,标识符1被指派给桥140,从而使得桥140被其对应代理118正确引用。

在安全区域(SE)不是由基础硬件来支持的事件中,区域130可通过修改后的区域创建器嵌入到应用110中以便直接实例化根类。也就是说,根对象136被创建并上溯至根接口(而不是创建信道对象114和代理118),且然后被返回。这种修改后的区域创建器也可由以下所讨论的注释处理器自动生成。

典型的远程过程调用(RPC)平台包括用于限定接口的IDL语法、用于将接口定义编译成语言特定的定义的IDL编译器、以及编组代码。典型地,实现接口的部件用于使用IDL编译器的输出将所述部件与所述接口结合在一起。

在本发明的实施例(例如,包括图1的实施例)中,注释集合可以用于在构建时间例如直接在源文件中对远程可访问的接口进行标记,而不是在单独的文件中对可以用于限定接口的新语法进行限定。然后,IDL编译器可以实现为注释处理器,每当所述编译器遇到特定注释时,所述注释处理器可以通过编译器(例如,编译器)调用。

在某些面向对象的语言(例如,)中,注释处理器可以利用“镜像”能力来分析类并生成适当的编组代码。实现远程可访问的接口的类不需要与编组代码进行交互。

以下呈现了对用于确定给定类型的编组能力的方法的描述,随后呈现对如何产生并组织编组代码的描述、注释列表及其目的。

针对本发明的实施例,用于确定编组能力的规则包括以下规则:

1.所有的原始数据类型(例如,整数、浮点等)是可编组的。

2.如果其所有部件都是可编组的,则复合数据类型(例如,阵列/结构)是可编组的。如果其返回类型及其所有参数类型都是可编组的,则方法/函数被视为可编组的。如果其所有方法都是可编组的,则接口是可编组的。

根据以下类型,编组代码可由以上规则的应用递归地生成:

1.原始类型是固定大小的,并且因此编组原始类型可取决于实施例通过将其值存储在的存储器缓冲器、流等中来完成。

2.针对复合类型的编组代码是包括每一个部件的编组操作的有序列表的函数。编组函数可在其编组的类型之后命名。当部件是复合类型时,那个部件的编组操作可调用部件类型的的编组函数。

3.方法/函数编组代码可以是具有与正在被编组的方法/函数相同的签名的编组函数。所述编组函数是针对其参数中的每一个参数的编组操作列表(随后调用实数函数)、以及针对返回类型的非编组操作。注意,类内的实例方法还可被视为常规函数,其中,第一参数是对另一个变量(例如,标记为“这个”的指针)的存储器地址的引用。典型地,所述这个指针是接口指针。

4.接口可被编组为实现接口的代理类。

每一种代理类方法都可以是用于接口中的方法的编组代码。代理类还包含在远程侧将代理与接口的实际实现方式结合在一起的标识符。

本发明的实施例支持接口和复合类型(诸如阵列和结构)。由于多态(例如,所得出的类实例可能被错误地编组为其超类),本发明的实施例可能总体上不支持类,并且在构建时间不能进行错误校验。

本发明的一些实施例可以应用到给定应用(例如,应用)的每一个接口和类从而判定给定接口/类是否可编组,并以这样的方式生成编组代码。

在一些实施例中,注释用于触发由开发者选择的特定接口/类的处理。注释可以包括以下各项(请注意,注释的名称仅为了演示的目的,并且注释的实际名称/签名可能基本上与以下列出的那些名称不同):

@Interface:此注释用于将接口标记为可编组,并用于向注释处理器指示应针对所述接口生成代理类。对所述接口的方法中的任何方法的调用将被编组且在远程站点上被执行。

@Structure(enforceFinalCheck=true/false):此注释用于将类标记为可编组数据结构,并用于向注释处理器指示应针对此类生成编组函数。对方法中的任何方法的调用不被编组,并且因此将被本地执行。(由于在任何情况下,注释进程为出现在方法的原型中的所有类生成编组代码,因此此注释不是必不可少的。)实际上,@Structure的使用可避免编组代码的重复,并且可简化注释处理器。附加地,@Structure的使用可防止包含机密数据的类被错误地传递,因为在此情况下,任何可编组类由开发者清楚地进行标注。

为了避免由多态引起的错误和混淆,在实施例中,带注释的类可以被声明为“最终”以便消除子类的任何可能性。每当非最终类由@Structure来标注时,另一实施例则可根据开发者的请求通过上报警告而非错误来放宽对最终性的声称。这种放宽可以由任选自变量enforceFinalCheck来指定,所述任选自变量可以默认正确、并且可以被开发者推翻。

@Out:此注释适用于方法参数。带有注释的参数是由@Structure进行标注的类型,并且向注释处理器指示:所述带有注释的参数可以由被调用器更新;且已更新的副本将被编组返回至调用器。

@RootClass(RootInterface=“InterfaceName”):此注释指定了根类以及其实现的根接口。此注释是为区域指定根类以及根接口的若干可能的方式之一,并且可以经由注释进行(或不进行)。例如,实施例可以选择在链接器的命令行中指定根类以及根接口。

@SEClass(trusted=true/false):此注释不是接口定义的部分。相反,其是用于促进错误校验(例如,由诸如链接器的链接器)。在实施例中,用“trusted=true(可信=正确)”标记的类应当仅出现在区域中,而用“trusted=false(可信=错误)”标记的类不能出现在任何区域中。

图2是根据本发明的另一实施例的调用注释处理器的系统的框图200。当带有注释的源代码222被编译以便产生对象代码时,注释处理器250(例如,在软件中实现)可以由编译器逻辑210(在此也被称为“编译器”)来调用。所述带有注释的源代码222可以包括带有注释的接口(例如,Somelnterface)。编译器逻辑210可以在硬件、软件、固件、或其组合中实现。

当编译器210遇到注释时(例如,任何注释,诸如@Interface),编译器210可以调用注释处理器250。注释处理器250可以确定带有注释的接口的编组能力,并且可以生成编组代码。

在区域240中的类242(例如,表示待完成的任务)可以具有已实现的SomeInterface,并且希望将SomeInterface曝光在主机应用220下。因为SomeInterface的实现方式驻留在区域中,同时其客户端驻留在(不可信的)应用220中,因此链接器(未示出)可以将代理类226放置在应用220中以便编组方法调用,并且还可以将桥类244放置在区域240中以便解组方法调用。

区域打包器类224是用于对编组/传输层进行旁路的一条粘合代码,并被包括以为了与非启用SE的平台兼容。在一些实施例中,仅针对根类生成区域打包器类224。

代理(例如,代理类226)可以实现可编组接口,所述可编组接口允许调用器调用代理如同调用器正在直接调用与代理相关联的对象。代理方法通过对应的桥(例如,Someinterface桥类244)编组参数,并且然后采用信道来远程调用方法,所述对应的桥由信道/桥ID对来标识,其中,信道是对信道对象的引用,并且桥ID特定于信道。

桥(例如,Someinterface桥类244)可以将每一个可编组接口桥接至实现所述接口的实际类和方法。每当通过信道编组新接口时,实例化与特定代理相对应的桥。所述桥可以具有用于已编组的接口中的每一种方法的桥方法。

除用于根接口的代理和桥之外,可以动态地创建或破坏代理和桥,所述代理和桥作为初始化系列的一部分被创建。典型地,每一个代理的生命周期可以由垃圾收集器来控制,并且当代理被破坏时,信道释放对应的桥。

在实施例中,可以在桥上采用引用计数方案。也就是说,每当编组给定接口时,创建新的代理实例。然而,同一远程对象的多个代理实例可以共享同一桥实例,对所述桥实例进行引用计数、并且在所有代理实例被破坏后将受到破坏。

在另一实施例中,代理可由信道跟踪并采用引用计数。在此实施例中,不管同一远程对象被编组了多少次,都将返回同一代理实例。注意,在此实施例中,由信道对代理的引用是“弱”,或者将不对代理进行垃圾收集,例如,由信道对代理的引用将防止对代理进行垃圾收集。

由于代理类与桥类之间的一一对应,桥可以具有如何为每一个方法调用解组参数的现有知识。因此,代理仅需编组参数中的数据而无需编组其他信息(例如,参数类型信息)。仅编组参数中的数据可以导致低运行时间开销。

代理和桥两者均可以从用户定义的接口定义和工具(例如,以上描述的注释处理器你)中自动生成。所产生的代码可以能够编组接口和复杂对象两者,并且用户(例如,开发者)可避免手动写入在代理和桥中提供的编组和非编组代码。

此外,关于如何编组参数,每一个接口的定义由用户准许灵活性。例如,用户可定义所述接口从而使得所述接口对编组不需要的对象成员进行旁路。

信道就可以被实现以用于调用远程方法、管理桥对象、以及管理本地客户端与远程服务之间的传输机制。应当注意的是,在一些实施例中,远程服务不需要正在远程进程中运行。相反,远程服务可以是通过编程构造(诸如区域)而隔离的本地实体。

可以针对每一个客户端/服务器接口来实例化一对信道对象。虽然每一个客户端/服务器绑定暗示了所述客户端上的主代理(例如,针对根接口的代理)以及所述服务器(区域)中的主桥(例如,根对象的桥),但是可经由将引用传递至客户端与服务器之间的接口来创建其他代理/桥对。因此,接口可以在任何方向操作,例如客户端到服务器(例如,应用到区域)或服务器到客户端(例如,区域到应用)。接口可以包括信道接口自身,因为信道接口到一个服务器可以被编组为到另一个服务器,从而创建了可堆叠的传输层。

信道类利用传输机制以便在客户端与服务器之间进行通信,这暗示了每一种类型的信道的本地进程与远程进程之间的信道接口的唯一实现方式。所述传输机制负责客户端与服务器之间的通信,并且可以特定于平台。在一个实施例中,传输层使用粘合代码(例如,C/C++粘合代码),所述粘合代码采用共享存储器以及通过例如本地接口(例如,接口)可访问的直接调用机制。

在内部,当本地桥利用信道注册时,信道实现方式通过维持针对所述本地桥的引用以及针对每一个本地桥创建唯一标识符(ID)来保持对任何已编组的接口的跟踪。这允许信道将由远程侧传递的本地桥标识转化成本地侧的相关联的桥对象及其相关联的实物。

图3是根据本发明的实施例的用于数据编组和/或接口编组的系统300的框图。系统300包括应用310(例如,应用)以及区域340(例如,在中写入的安全区域)以作为例如与应用代码隔离的远程进程。

系统300包括应用310(所述应用包括代理314)、信道318/342以及包括桥344的区域340。系统300可以准许信息以应用到区域的方向、且还可以区域到应用的相反方向流动。

Someclass方法312是尝试经由接口A 316访问区域对象346的调用器。代理314实例化(区域)桥2 326,并利用信道318(例如,信道318指派桥2 326的索引并将索引返回至代理314)注册桥2 326。接口A 316具有将(不可信)对象320作为第一参数且将对象A 322作为第二参数的方法A1。对象A 322由@structure来标注。来自对象A 322的数据连同桥2 326的索引一起由代理314封装到邻接缓冲器中,例如,桥2 326是(不可信)对象320(例如,对象320经由桥2 326可访问)的桥,并且已封装数据被移交给信道318,包括对互补桥344进行标识的索引(由代理314提供)。信道342接收所述封装数据,并使用所提供的索引来定位区域桥344。附加地,告知区域桥344方法A1正在被使用。区域桥344从所接收的封装数据来创建对象A 350的副本。区域桥344调用区域对象346的方法A1,并且方法A1作为参数在对象A 350的副本、作为另一个参数在代理352上操作。区域桥344通过向代理352的构造器提供信道342以及与区域桥2 326相关联的索引来创建(实例化)代理352。

代理314封装两条信息——第一条信息是对象A 322的内容;以及第二条信息是区域桥2 326的标识符,例如,标识存储在信道318内的阵列中的区域桥2 326的地址。所述标识符可以使得能够由区域对象346在应用310中跟踪数据处理的进度。

代理314实例化区域桥2 326,并利用信道318注册区域桥2 326的地址。代理314可将区域桥2 326的标识符传递给区域桥344。因此,区域桥344接收存储在对象A 322中的数据以及与区域桥2 326的地址相关联的标识符。

区域对象346实现调用器可调用以便由区域对象346来监测对象A的数据处理的接口A 316(例如,虚拟函数集合)。326的标识符与对信道342的引用一起用于实例化不可信的代理352。

区域对象346可以通过调用代理352以及提供完成百分比(例如,从编组缓冲器(未示出))来向代理352上报有关处理的进度。代理352然后将发送两条数据,例如区域桥2 326的桥标识符以及编组缓冲器的内容(例如,正在由区域对象346执行的处理的完成百分比)。区域桥2 326提取(解组)所述百分比、调用(不可信)对象320、以及提供已解组数据的内容(例如,正在由区域对象346执行的处理的完成百分比)。

图4是根据本发明的实施例的包括两个区域的系统的框图。可以经由区域加载器加载区域430和450,所述区域加载器可以由例如响应于源代码应用的源代码中的一个或多个注释的注释处理器在构建时间生成。应用410与两个远程进程进行通信。应用410具有到区域430和区域450的接口。针对区域430、450中的每一个区域,具有在应用中实例化的对应信道412、414以及在区域430、450中的每一个区域中实例化的对应信道432、452。区域430包括类对象434。存在代理416和桥436以便将接口代理至对象434。区域450包括类对象454。存在代理418和桥456以便将接口代理至对象454。一条代码(“e调用器”)420可以通过对应代理(416、418)来进行调用以便作出对对象(434、452)中的任一者的调用。根据本发明的实施例,代理416与桥436和/或代理418与桥456可以由例如区域初始化代码来创建,所述区域初始化代码由编译器通过使用由所述编译器调用的注释处理器来输出。

图5是根据本发明的实施例的包括可堆叠信道配置的系统的框图。系统500包括应用510、第一区域530、以及第二区域560。所述系统以可堆叠信道为特征,所述系统涉及将一个信道编组在另一信道上,并且允许远程实体通过两个信道高效地进行调用以便达到另一个进程。通过使用e调用器548,区域530可通过堆叠的信道接口进行调用以便到达区域560中的对象。在一些实施例中,区域530、560中的一个或两者均可以由在应用510的构建时间生成的自动生成区域创建器来创建。

针对每一个区域,具有在应用510中以及在区域中实例化的对象信道。也就是说,信道512在区域530具有对应的信道544,并且信道516在区域560中具有对应的信道566。区域560包括对象562。

代理542在区域530中被实例化,并使用应用510与区域530之间的信道512/544来将数据编组到位于应用510中的桥514。

在区域530中创建代理546。通过代理546,可如下通过传送至区域560且然后至对象562的信道516/566作出信道调用:位于区域530中的e调用器548发起对对象562的调用。所述调用通过信道对544/512进行至代理546、至代理542,通过信道对516/566进行至桥514,进行至区域560中的桥564,以及最终从桥564进行至对象562。

应当注意的是,由于信道接口512/544和516/566被堆叠,因此方法调用的参数在开始调用的进程的代理(例如,代理546)中被编组,并且然后在终止所述调用的桥(例如,桥564)中被解组。由于信道接口的堆叠,可能存在可以忽略不计的参数重编组开销。

应当注意的是,在前述实施例中的任何实施例中呈现的技术可以用于将应用桥接至一个或多个其他应用,而不是将应用于区域进行桥接。

图6是根据本发明的多个实施例的一种用于实例化应用与区域之间的接口的方法600的流程图。在框602处,应用调用(自动生成的)区域创建器。在一些实施例中(例如,使用代码),区域创建器可以例如在应用的构建时间被生成为具有静态函数的类。

继续到框604,所述区域创建器加载并调用区域(例如,在应用中)的初始化代码,所述区域初始化区域中的启动类。前进到框606,由所述区域启动类实例化区域信道对象。移到框608,所述区域启动类创建根对象。进行到框610,所述区域启动类创建被初始化为空的桥阵列。

继续到框612,所述区域启动类创建针对根对象的桥。利用区域信道注册(例如,为根对象指派假定值,桥在区域信道阵列中被引用)桥,从而使得桥出现在信道的桥阵列中。前进到框614,所述区域创建器对应用的应用信道对象进行实例化。所述应用信道对象存储区域标识。移到框616,所述应用信道对象维持被初始化为空的桥列表。进行到框618,所述区域创建器针对(单个)根接口创建应用中的代理。信道索引对用于在区域侧中匹配接口。在实施例中,第一信道索引可以硬编码成一个。继续到框620,将代理上溯至根接口类型并返回至调用器。

各实施例可被结合在其他类型的系统中,包括诸如蜂窝电话的移动设备。现在参考图7,示出了根据本发明的另一实施例的系统的框图。如图7所示,系统700可以是移动设备并且可以包括各个部件。如图7的高级视图所示,可以是设备的中央处理单元的应用处理器710与各个部件(包括系统存储器715)进行通信。在各实施例中,系统存储器715可以包括程序和数据存储部分两者,并且可被映射以便提供安全存储。根据本发明的实施例,“区域页面缓存”(Enclave Page Cache,EPC)718是可以专用的(例如,通过使用密码)存储装置715的专用部分,并且可以容纳由例如应用待创建的一个或多个安全区域。在实施例中,可以在上电处且在一个或多个安全区域被创建之前配置EPC 718。

应用处理器710可以进一步耦合至输入/输出系统720,在各个实施例中,所述输入/输出系统可以包括显示器以及一个或多个输入设备(诸如触摸键盘),所述触摸键盘自身可在执行时出现在显示器上。系统700还可以包括集成传感器中枢(ISH)760,所述集成传感器中枢可以从一个或多个传感器770接收数据。

根据本发明的实施例,应用处理器710可操作用于执行应用以便实例化针对安全区域的根对象,所述应用可访问所述安全区域。根据本发明的实施例,应用处理器710可操作用于创建编组代码以便编组应用与区域之间的接口。根据本发明的实施例,可以静态地生成并调用编组代码。根据本发明的实施例,源内注释可以用于在应用的构建时间限定远程(例如,可编组的)接口。根据本发明的实施例,可以支持接口继承。

在一些实施例中,根据本发明的实施例,例如为了在非启用安全区域(SE)的硬件上运行启用SE的应用而无需修改区域启动源代码,打包器类可由注释处理器自动生成以便对编组进行旁路。根据本发明的实施例,可以支持可堆叠信道,包括将第二信道到第二区域编组在第一信道到第一区域上,从而允许远程实体通过两个信道高效地进行调用以便达到另一个进程。

应用处理器710还可以耦合至基带处理器730,所述基带处理器可以调节诸如语音的信号和数据通信用于输出、并且调节呼入电话和其他信号。如所见的,基带处理器730耦合至收发机740,所述收发机可以使能接收和传输能力两者。进而,收发机740可以与天线750(例如,能够经由一个或多个通信协议(诸如经由无线广域网(例如,3G或4G网络)和/或无线局域网(诸如蓝牙TM或符合电气与电子工程师协会802.11标准的所谓WI-FITM网络)传输并发送语音和数据信号的任何类型的天线)进行通信。如所见的,系统700可以进一步包括具有可再充电电池的可再充电电源725以使得能够在移动环境中操作。虽然在图7的实施例中利用这一特定实现方式被示出,但本发明的范围并不局限于此方面。

各实施例可以采用许多不同的系统类型来实现。现在参考图8,示出了根据本发明的实施例的系统的框图。如图8所示,多处理器系统800是点对点互连系统,且包括经由点对点互连850耦合的第一处理器870和第二处理器880。如图8所示,处理器870和880中的每一个处理器可以是包括第一和第二处理器核(即,处理器核874a和874b以及处理器核884a和884b)的多核处理器,尽管这些处理器中可能潜在地存在更多的核。

仍参考图8,第一处理器870进一步包括存储器控制器中枢(MCH)872和点对点(P-P)接口876和878。类似地,第二处理器880包括MCH 882和P-P接口886和888。如图8所示,MCH 872和882将处理器耦合至相应的存储器(即存储器832和存储器834),这些存储器可以是本地附接至相应处理器的系统存储器(例如,DRAM)的部分。存储器832可以包括区域页面缓存(EPC)833,并且存储器834可以包括EPC 835。EPC 833和835是相应存储器832、834的部分。EPC 833和835可以专用于(例如,经由密码技术)存储一个或多个安全区域。可以例如通过由相应处理器870、880运行的基本输入输出系统(BIOS)在上电处创建每一个EPC 833、835。根据本发明的实施例,可以由区域加载器响应于来自在处理器870或处理器880上运行的应用的请求来创建一个或多个安全区域。根据本发明的实施例,可以在对应的EPC中创建(多个)安全区域。根据本发明的实施例,每一个安全区域可以被抽象为在运行时间由应用的区域初始化代码自动实例化的根对象。根据本发明的实施例,所述区域初始化代码可以在所述应用的构建时间生成。

第一处理器870和第二处理器880可以分别经由P-P互连862和884耦合至芯片组890。如图8所示,芯片组890包括P-P接口894和898。

此外,芯片组890包括经由P-P互连839将芯片组890与高性能图形引擎838耦合的接口892。进而,芯片组890可以经由接口896耦合至第一总线816。如图8所示,各个输入/输出(I/O)设备814可以与总线桥818一起耦合至第一总线816,所述总线桥将第一总线816耦合至第二总线820。在一个实施例中,各种设备可以耦合至第二总线820,包括例如,键盘/鼠标822、通信设备826和数据存储单元828(诸如磁盘驱动器或可以包括代码830的其他大容量存储设备)。进一步地,音频输入/输出(I/O)824可以耦合至第二总线820。各实施例可被结合在其他类型的系统中,包括:诸如智能蜂窝电话的移动设备、平板计算机、上网本、超级本TM等等。

下面对其他实施例进行描述。

在一个实施例中,系统包括处理器,所述处理器用于在主机应用的运行时间在所述主机应用内自动地执行区域初始化代码。所述区域初始化代码包括用于创建与所述主机应用分离的安全区域的编组代码,所述编组代码在所述主机应用的构建时间生成。所述系统还包括动态随机存取存储器(DRAM),所述动态随机存取存储器包括用于存储所述安全区域的专用DRAM部分。

在一个示例中,所述区域初始化代码限定了所述主机应用与所述安全区域之间的远程接口。

在一个示例中,所述处理器用于经由代理/桥对来编组所述主机应用与所述安全区域之间的数据。

在一个示例中,所述处理器用于经由所述区域初始化代码的执行来自动地对代理进行实例化。所述代理用于使得所述主机应用能够与所述安全区域进行通信。

在一个示例中,所述代理可操作用于封装一个或多个参数以便响应于所调用的方法来传输至所述安全区域。

在一个示例中,所述处理器进一步用于对桥进行实例化,所述桥可操作用于对在所述安全区域接收到的所述一个或多个参数进行解包封。

在一个示例中,所述处理器进一步用于将传输层抽象为第一信道接口。所述传输层可操作用于将所述代理与所述桥进行匹配。

在一个示例中,所述处理器用于:对所述主机应用与第二安全区域之间的第二信道接口进行实例化;并且用于对所述第一信道接口与所述第二信道接口进行堆叠以便使能所述安全区域与所述第二安全区域之间的区域间过程调用。

在一个示例中,所述区域初始化代码的执行对用作所述安全区域的入口点的根对象进行实例化。

在结合了以上示例中的任何一个示例的示例中,所述区域初始化代码基于包括用于指示一个或多个可编组数据结构的源内注释的源代码。

在另一示例中,一种方法包括:由编译器逻辑对源代码进行编译,所述源代码包括用于在所述主机应用的构建时间产生区域初始化代码的一个或多个注释。所述区域初始化代码包括用于在所述主机应用的构建时间创建与所述主机应用分离的安全区域的编组代码。

在一个示例中,所述方法包括:当所述编译器逻辑遇到注释时,由所述编译器逻辑调用注释处理器以便确定与所述注释相关联的带有注释的接口的可编组性。

在一个示例中,所述方法包括:当所述注释处理器确定所述带有注释的接口可编组时,由通过所述编译器逻辑调用的所述注释处理器生成所述编组代码。

在一个示例中,在运行时间,所述编组代码用于将代理类别放置在所述主机应用中以便对方法调用进行编组,并且所述编组代码用于将桥类别放置在所述安全区域中以便对所述方法调用进行解组。

在一个示例中,装置可以执行以上所述方法中的任一种方法。

在一个示例中,至少一个机器可读存储介质包括指令,所述指令响应于在计算设备上被执行而使得所述计算设备执行以上所述方法中的任一种方法。

一个示例包括用于执行以上所述方法中的任一种方法的装置。

在一个示例中,一种系统包括处理器,所述处理器用于经由主机应用与第一安全区域之间的第一信道接口、并且随后经由所述主机应用与第二安全区域之间的第二信道接口来使能从所述第一安全区域到所述第二安全区域的根对象的调用。所述系统还包括用于存储所述第一安全区域的动态随机存取存储器(DRAM)。

在一个示例中,所述处理器用于对与所述第一信道接口相对应的第一代理/桥对以及与所述第二信道接口相对应的第二代理/桥对进行实例化。

在一个示例中,所述第一代理/桥对与所述第二代理/桥对中的每一个代理/桥对在所述主机应用的运行时间被实例化。

在一个示例中,所述处理器用于经由包括第一代理和第一桥的所述第一代理/桥对编组所述第一安全区域与所述主机应用之间的数据。所述主机进一步用于经由包括第二代理和第二桥的所述第二代理/桥对编组所述主机应用与所述第二安全区域之间的所述数据。

在一个示例中,所述数据在所述第一代理中被编组且在所述第二桥中被解组而不解组所述第一桥中的所述数据。

在一个示例中,所述处理器进一步用于在所述主机应用的运行时间的过程中对所述第二安全区域的所述根对象进行实例化。

在另一示例中,至少一种计算机可读存储介质具有存储在其上的指令,所述指令用于使得系统对根对象进行实例化从而使得启用安全区域(SE)的应用能够通过区域创建器的执行在非启用SE的硬件上运行,所述区域创建器是响应于源代码中的至少一个注释而自动从对所述源代码的编译中生成的。所述根对象将要在所述SE使能应用的运行时间被实例化。

在一个示例中,使能所述启用SE的应用在非启用安全的硬件上的运行准许访问所述安全区域而无需使用桥来编组与所述启用SE的应用相关联的参数。

在一个示例中,所述至少一种计算机可读存储介质包括用于在对所述根对象进行实例化时将根接口返回至所述启用SE的应用的调用器而无需对代理或实例化桥进行实例化的指令。

在一个示例中,所述至少一种计算机可读存储介质包括用于执行以下各项的指令:由编译器在对象代码的构建时间过程中检测正在由所述编译器解释的源代码中的第一注释;以及基于所述第一注释在构建时间调用注释处理器以便生成编组代码。

在另一示例中,至少一种计算机可读存储介质具有存储在其上的指令,所述指令用于使得系统执行已经从包括一个或多个注释的源代码在主机应用的构建时间创建的区域初始化代码。所述区域初始化代码包括用于在所述主机应用的构建时间创建与所述主机应用分离的安全区域的编组代码。

在一个示例中,在运行时间,所述编组代码用于将代理类别放置在所述主机应用中以便对方法调用进行编组,并且所述编组代码用于将桥类别放置在所述安全区域中以便对所述方法调用进行解组。

各实施例可以用于多个不同类型的系统中。例如,在一个实施例中,通信设备可被安排成用于执行在此描述的所述各种方法和技术。当然,本发明的范围不限于通信设备,相反其他实施例可涉及用于处理指令的其他类型的装置、或包括指令的一个或多个机器可读介质,所述指令响应在计算设备上被执行而使得所述设备执行在此描述的方法和技术中的一项或多项。

实施例可以在代码中实现并且可存储在非瞬态存储介质上,所述非瞬态存储介质具有存储在其上的指令,这些指令可用于对系统编程来执行指令。存储介质可以包括但不局限于包括以下各项的任何类型的磁盘:软盘、光盘、固态驱动器(SSD)、压缩盘只读存储器(CD-ROM)、可复写致密盘(CD-RW)、和磁光盘,诸如只读存储器(ROM)的半导体器件、诸如动态随机存取存储器(DRAM)和静态随机存取存储器(SRAM)的随机存取存储器(RAM)、可擦可编程只读存储器(EPROM)、闪存、电可擦可编程只读存储器(EEPROM)、磁卡或光卡、或者适合于存储电子指令的任何其他类型的介质。

虽然已经针对有限数量的实施例对本发明进行了描述,但本领域技术人员将理解到来自其中的许多修改和变体。旨在使得所附的权利要求书覆盖落入本发明的真正精神和范围的所有这样的修改和变体。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1