實施例涉及用于調(diào)用安全區(qū)域的面向?qū)ο蟮木幗M(Marshaling)。
背景技術(shù):
安全區(qū)域(Secure Enclave,SE)的建立是一種用于向用于處理機密數(shù)據(jù)的應用提供安全且隔離的執(zhí)行環(huán)境(區(qū)域)的技術(shù)。區(qū)域由于其隔離性不能獨自是一個完整的應用,因為其不能直接訪問任何系統(tǒng)應用編程接口(API)。相反,為了利用SE技術(shù),典型地對應用進行分區(qū),其中,機密數(shù)據(jù)處理邏輯托管在區(qū)域中,且非機密數(shù)據(jù)處理邏輯托管在所述區(qū)域外。
隨著移動操作系統(tǒng)的出現(xiàn),產(chǎn)生的問題是如何使得SE技術(shù)在受開發(fā)者歡迎的面向?qū)ο蟮木幊?OOP)語言(例如,)中可訪問。
附圖說明
圖1是根據(jù)本發(fā)明的實施例的用于訪問安全數(shù)據(jù)的系統(tǒng)的框圖。
圖2是根據(jù)本發(fā)明的另一實施例的調(diào)用注釋處理器的系統(tǒng)的框圖。
圖3是根據(jù)本發(fā)明的實施例的用于數(shù)據(jù)和接口編組的系統(tǒng)的框圖。
圖4是根據(jù)本發(fā)明的實施例的包括由單個應用托管的兩個區(qū)域的系統(tǒng)的框圖。
圖5是根據(jù)本發(fā)明的實施例的包括可堆疊信道配置的系統(tǒng)的框圖。
圖6是根據(jù)本發(fā)明的多個實施例的一種用于對應用與區(qū)域之間的接口進行實例化的方法的流程圖。
圖7是根據(jù)本發(fā)明的另一實施例的系統(tǒng)的框圖。
圖8是根據(jù)本發(fā)明的另一實施例的系統(tǒng)的框圖。
具體實施方式
提出了一種接口定義語言(IDL)來支持OOP語言(例如,)以及在對可以由非安全主機應用與其進行通信的一個或多個安全區(qū)域進行實例化時的其他OOP語言。IDL旨在最小化對軟件供應商的現(xiàn)有代碼的改變,并且旨在利用相對簡單的實現(xiàn)方式(例如,邏輯直接且代碼尺寸小)來具有低等待時間/高性能特性。另外的優(yōu)點是IDL將允許生成粘合代碼以便將安全類(例如,有待在區(qū)域中托管的類)整合到應用的其他部分以為了與非啟用SE的平臺兼容性。將安全類整合到應用的其他部分可使得軟件供應商(SV)從為其用于不同平臺的應用維持多個版本中解放出來。附加地,在一些實施例中,不存在用戶可見的接口,并且因此用戶代碼可以有效地與基礎(chǔ)編組/傳輸及其相關(guān)聯(lián)的代碼解耦。
根據(jù)本發(fā)明的實施例,可以靜態(tài)地生成和調(diào)用編組代碼。靜態(tài)生成且調(diào)用的編組代碼的優(yōu)點可以包括:與其他編碼技術(shù)相比,已減少的靜態(tài)編組代碼的等待時間;與在遠程站點上對象的動態(tài)創(chuàng)建相比,已減少的被非法客戶端攻擊從而導致了遠程站點上的非預期代碼執(zhí)行的機會;與其他編碼方法相比,已減小的靜態(tài)編組代碼的尺寸;以及派生可被編組(“可編組的”)的遠程接口的能力。本發(fā)明的實施例支持接口繼承。
根對象和根接口的概念被引入到IDL中,所述IDL允許由主機應用(例如,客戶端)來創(chuàng)建(例如,被動地)在例如存儲器的專用部分中的區(qū)域(在此也稱為“服務器”,例如,存儲器的安全部分)。進一步地,“打包器(Wrapper)”類可由注釋處理器(例如,所述注釋處理器可以由編譯器調(diào)用)自動生成以便對編組進行旁路,這可以允許啟用SE的應用在非啟用SE的硬件上運行而無需修改應用源代碼。
在本發(fā)明的實施例中,區(qū)域被抽象為單個對象,例如,暴露相應接口(例如,根接口)的根對象。所述根對象用作所述區(qū)域的入口點。所述根對象連同所述根接口的代理/橋?qū)梢杂蓞^(qū)域初始化代碼例如在應用的運行時間自動創(chuàng)建。取決于配置,所述根接口可以直接傳遞給調(diào)用器而無需對代理-橋?qū)M行實例化。打包器類可以對所述根對象進行實例化,所述根對象實現(xiàn)所述根接口以便使得SE應用能夠訪問不具有代理/橋?qū)Φ姆菃⒂肧E的硬件上的安全區(qū)域。
一旦對所述根對象進行實例化,就可通過例如將對象/接口作為根接口的任何方法的自變量進行傳遞、或者通過經(jīng)由根接口的任何方法返回對象/接口來向/從所述區(qū)域傳遞更多的對象/接口。為了編組接口(例如,允許應用空間中的調(diào)用器與區(qū)域空間中的被調(diào)用器,或者反之亦然),編組代碼將要例如由注釋處理器在構(gòu)建時間來創(chuàng)建。在實施例中,注釋處理器可以是編譯器插件模塊。
例如,開發(fā)者可以指定使用源內(nèi)注釋來編組接口,所述源內(nèi)注釋可以由注釋處理器來處理以便為帶有注釋的接口生成代理/橋類。代理是帶有注釋的接口的實現(xiàn)方式。每當調(diào)用方法時,所述代理可以封裝傳輸參數(shù)。橋是所述代理的對應部分。所述橋用于解封從傳輸層接收到的參數(shù),并且用于調(diào)用帶有注釋的接口的實現(xiàn)方式。
代理/橋?qū)ο蟮膭?chuàng)建/破壞可以由傳輸層來管理。所述傳輸層可以被抽象為信道接口。所述傳輸層可以負責傳遞數(shù)據(jù)包、以及負責將代理與橋進行匹配。信道也是“可編組的”,例如,可透明地對信道的不同實現(xiàn)方式進行堆疊。堆疊信道對于區(qū)域間過程調(diào)用可能是有用的。
在此使用的術(shù)語包括以下各項:
a.接口——包括虛擬方法但不包括數(shù)據(jù)成員的類。
b.代理——所生成的實現(xiàn)對應接口的類。所有方法都被實現(xiàn)為“編組代碼”,例如,用于將輸入?yún)?shù)封裝到數(shù)據(jù)包(所述數(shù)據(jù)包將要由橋來“解組”)中的代碼。如果方法具有返回值,代理實現(xiàn)方式在返回其調(diào)用器之前也“解組”所述返回值(所述返回值已經(jīng)由橋來進行編組)。
c.橋——代理的對應部分。所述橋解包輸入?yún)?shù)、調(diào)用接口實現(xiàn)方式、以及將返回值編組回至數(shù)據(jù)包。
d.根對象——當正在初始化區(qū)域時將要實例化的對象。所述根對象實現(xiàn)至少一個可編組接口(例如,根接口),也將由區(qū)域初始化代碼對代理和橋進行實例化和配對以用于所述至少一個可編組接口。
e.根類——根對象的數(shù)據(jù)類型。
f.根接口——由根類實現(xiàn)的可編組接口。其代理和橋由區(qū)域初始化代碼來實例化/配對。
g.信道——傳輸層抽象。信道是實現(xiàn)信道接口以便移動代理與橋之間的分組的類。信道接口自身也是可編組的,例如,可以通過另一個信道來創(chuàng)建信道的代理。換言之,信道是可堆疊的,這在區(qū)域間調(diào)用中可能是有用的。
圖1是根據(jù)本發(fā)明的實施例的用于訪問安全數(shù)據(jù)的系統(tǒng)的框圖。系統(tǒng)100包括經(jīng)由信道114/134耦合的應用110和區(qū)域130。在實施例中,應用110是不可信空間,且區(qū)域130是可信空間。
在實施例中,區(qū)域130被抽象為實現(xiàn)根接口(例如,通過上溯與所述根接口相關(guān)聯(lián)的代理118)的根對象136。應用110在利用由區(qū)域130暴露的任何能力之前用于對區(qū)域130進行實例化且用于創(chuàng)建針對根接口的代理118。在區(qū)域?qū)嵗^程中,根對象136及其橋140兩者均在區(qū)域130中被創(chuàng)建,從而使得應用110可通過根接口開始與區(qū)域130進行交互。
在操作中,應用110通過對區(qū)域創(chuàng)建器112的調(diào)用使得形成區(qū)域130。區(qū)域創(chuàng)建器112是對指令進行包封以便對區(qū)域130進行加載和初始化的自動生成的函數(shù)(例如,在應用110的構(gòu)建時間被創(chuàng)建)。區(qū)域創(chuàng)建器112返回代理118,這是根接口的一種實現(xiàn)方式。
為了允許將多個區(qū)域加載到同一應用中,每一個區(qū)域?qū)⒕哂形ㄒ坏拿Q。例如,開發(fā)者被準許通過字符串來命名區(qū)域,從所述字符串來為區(qū)域創(chuàng)建器112和區(qū)域圖像文件名生成名稱。在實施例中(例如,針對一些語言,諸如),不準許獨立的函數(shù),并且因此區(qū)域創(chuàng)建器112被生成為具有單個靜態(tài)函數(shù)的類。例如,假定區(qū)域命名為SomeEnclave,則區(qū)域創(chuàng)建器112可以是SomeEnclave_Creator.createEnclave()。在其他實施例中(例如,其他語言,諸如C++),獨立的函數(shù)是被準許的。
區(qū)域創(chuàng)建器112可加載并調(diào)用所述區(qū)域130的初始化代碼。例如,在使用的示例中,可以由類加載器將啟動類初始化為區(qū)域全局初始化的一部分。虛線122將區(qū)域創(chuàng)建器112連接至啟動類132。在使用C++的示例中,啟動類132包括靜態(tài)對象,所述靜態(tài)對象的構(gòu)造器作為初始化進程的一部分被調(diào)用。
當完成對所述區(qū)域130的初始化時,區(qū)域創(chuàng)建器112針對應用110初始化信道對象114。信道對象114用于通過例如在數(shù)據(jù)成員中存儲區(qū)域標識(EID)或其他區(qū)域句柄/標識符(例如,由不可信運行時間服務(uRTS)返回)來記住其綁定的是哪一個區(qū)域。
信道對象114可以在寄存器116中維持可由區(qū)域130引用的橋列表。例如,橋140可以由如在代理118中可見的對應標識符(例如,針對橋140,標識符可為1)來引用。標識符引用存儲在信道134的陣列138中的橋140的地址。(在實施例中,索引0(零)被保留為空引用(例如,在新創(chuàng)建的信道中),并且對應的寄存器條目為空)。
區(qū)域創(chuàng)建器112針對根接口創(chuàng)建所述代理118。所述代理118與在區(qū)域130中的橋140進行匹配。通過在區(qū)域側(cè)的橋140的創(chuàng)建對代理118的創(chuàng)建進行匹配。當完成在應用側(cè)(例如,應用110)的初始化時,代理118可以在被返回至調(diào)用器之前上溯至根接口。應用110然后可調(diào)用根接口的方法以便與區(qū)域130進行交互。
在區(qū)域側(cè)(例如,區(qū)域130),區(qū)域啟動類132是創(chuàng)建以下三個對象的自動生成的類:信道對象134、根對象136、以及橋140。
調(diào)用啟動類132的方式取決于可信運行時間服務(tRTS)的實現(xiàn)方式。為了允許自動生成的代碼創(chuàng)建根對象136的實例,根類可以具有默認構(gòu)造器。
類似于應用110中的信道對象114,區(qū)域130也維持橋陣列138,所述陣列被初始化為空。然后為根對象136創(chuàng)建橋140。橋140維持對基礎(chǔ)信道對象134的引用,所述基礎(chǔ)信道對象將用于在值被返回時編組接口。橋140在信道的橋陣列138中被引用。橋140(在陣列138中)的標識符成為例如在代理118中的由應用110假設的相同標識符。在圖1中所示的示例中,標識符1被指派給橋140,從而使得橋140被其對應代理118正確引用。
在安全區(qū)域(SE)不是由基礎(chǔ)硬件來支持的事件中,區(qū)域130可通過修改后的區(qū)域創(chuàng)建器嵌入到應用110中以便直接實例化根類。也就是說,根對象136被創(chuàng)建并上溯至根接口(而不是創(chuàng)建信道對象114和代理118),且然后被返回。這種修改后的區(qū)域創(chuàng)建器也可由以下所討論的注釋處理器自動生成。
典型的遠程過程調(diào)用(RPC)平臺包括用于限定接口的IDL語法、用于將接口定義編譯成語言特定的定義的IDL編譯器、以及編組代碼。典型地,實現(xiàn)接口的部件用于使用IDL編譯器的輸出將所述部件與所述接口結(jié)合在一起。
在本發(fā)明的實施例(例如,包括圖1的實施例)中,注釋集合可以用于在構(gòu)建時間例如直接在源文件中對遠程可訪問的接口進行標記,而不是在單獨的文件中對可以用于限定接口的新語法進行限定。然后,IDL編譯器可以實現(xiàn)為注釋處理器,每當所述編譯器遇到特定注釋時,所述注釋處理器可以通過編譯器(例如,編譯器)調(diào)用。
在某些面向?qū)ο蟮恼Z言(例如,)中,注釋處理器可以利用“鏡像”能力來分析類并生成適當?shù)木幗M代碼。實現(xiàn)遠程可訪問的接口的類不需要與編組代碼進行交互。
以下呈現(xiàn)了對用于確定給定類型的編組能力的方法的描述,隨后呈現(xiàn)對如何產(chǎn)生并組織編組代碼的描述、注釋列表及其目的。
針對本發(fā)明的實施例,用于確定編組能力的規(guī)則包括以下規(guī)則:
1.所有的原始數(shù)據(jù)類型(例如,整數(shù)、浮點等)是可編組的。
2.如果其所有部件都是可編組的,則復合數(shù)據(jù)類型(例如,陣列/結(jié)構(gòu))是可編組的。如果其返回類型及其所有參數(shù)類型都是可編組的,則方法/函數(shù)被視為可編組的。如果其所有方法都是可編組的,則接口是可編組的。
根據(jù)以下類型,編組代碼可由以上規(guī)則的應用遞歸地生成:
1.原始類型是固定大小的,并且因此編組原始類型可取決于實施例通過將其值存儲在的存儲器緩沖器、流等中來完成。
2.針對復合類型的編組代碼是包括每一個部件的編組操作的有序列表的函數(shù)。編組函數(shù)可在其編組的類型之后命名。當部件是復合類型時,那個部件的編組操作可調(diào)用部件類型的的編組函數(shù)。
3.方法/函數(shù)編組代碼可以是具有與正在被編組的方法/函數(shù)相同的簽名的編組函數(shù)。所述編組函數(shù)是針對其參數(shù)中的每一個參數(shù)的編組操作列表(隨后調(diào)用實數(shù)函數(shù))、以及針對返回類型的非編組操作。注意,類內(nèi)的實例方法還可被視為常規(guī)函數(shù),其中,第一參數(shù)是對另一個變量(例如,標記為“這個”的指針)的存儲器地址的引用。典型地,所述這個指針是接口指針。
4.接口可被編組為實現(xiàn)接口的代理類。
每一種代理類方法都可以是用于接口中的方法的編組代碼。代理類還包含在遠程側(cè)將代理與接口的實際實現(xiàn)方式結(jié)合在一起的標識符。
本發(fā)明的實施例支持接口和復合類型(諸如陣列和結(jié)構(gòu))。由于多態(tài)(例如,所得出的類實例可能被錯誤地編組為其超類),本發(fā)明的實施例可能總體上不支持類,并且在構(gòu)建時間不能進行錯誤校驗。
本發(fā)明的一些實施例可以應用到給定應用(例如,應用)的每一個接口和類從而判定給定接口/類是否可編組,并以這樣的方式生成編組代碼。
在一些實施例中,注釋用于觸發(fā)由開發(fā)者選擇的特定接口/類的處理。注釋可以包括以下各項(請注意,注釋的名稱僅為了演示的目的,并且注釋的實際名稱/簽名可能基本上與以下列出的那些名稱不同):
@Interface:此注釋用于將接口標記為可編組,并用于向注釋處理器指示應針對所述接口生成代理類。對所述接口的方法中的任何方法的調(diào)用將被編組且在遠程站點上被執(zhí)行。
@Structure(enforceFinalCheck=true/false):此注釋用于將類標記為可編組數(shù)據(jù)結(jié)構(gòu),并用于向注釋處理器指示應針對此類生成編組函數(shù)。對方法中的任何方法的調(diào)用不被編組,并且因此將被本地執(zhí)行。(由于在任何情況下,注釋進程為出現(xiàn)在方法的原型中的所有類生成編組代碼,因此此注釋不是必不可少的。)實際上,@Structure的使用可避免編組代碼的重復,并且可簡化注釋處理器。附加地,@Structure的使用可防止包含機密數(shù)據(jù)的類被錯誤地傳遞,因為在此情況下,任何可編組類由開發(fā)者清楚地進行標注。
為了避免由多態(tài)引起的錯誤和混淆,在實施例中,帶注釋的類可以被聲明為“最終”以便消除子類的任何可能性。每當非最終類由@Structure來標注時,另一實施例則可根據(jù)開發(fā)者的請求通過上報警告而非錯誤來放寬對最終性的聲稱。這種放寬可以由任選自變量enforceFinalCheck來指定,所述任選自變量可以默認正確、并且可以被開發(fā)者推翻。
@Out:此注釋適用于方法參數(shù)。帶有注釋的參數(shù)是由@Structure進行標注的類型,并且向注釋處理器指示:所述帶有注釋的參數(shù)可以由被調(diào)用器更新;且已更新的副本將被編組返回至調(diào)用器。
@RootClass(RootInterface=“InterfaceName”):此注釋指定了根類以及其實現(xiàn)的根接口。此注釋是為區(qū)域指定根類以及根接口的若干可能的方式之一,并且可以經(jīng)由注釋進行(或不進行)。例如,實施例可以選擇在鏈接器的命令行中指定根類以及根接口。
@SEClass(trusted=true/false):此注釋不是接口定義的部分。相反,其是用于促進錯誤校驗(例如,由諸如鏈接器的鏈接器)。在實施例中,用“trusted=true(可信=正確)”標記的類應當僅出現(xiàn)在區(qū)域中,而用“trusted=false(可信=錯誤)”標記的類不能出現(xiàn)在任何區(qū)域中。
圖2是根據(jù)本發(fā)明的另一實施例的調(diào)用注釋處理器的系統(tǒng)的框圖200。當帶有注釋的源代碼222被編譯以便產(chǎn)生對象代碼時,注釋處理器250(例如,在軟件中實現(xiàn))可以由編譯器邏輯210(在此也被稱為“編譯器”)來調(diào)用。所述帶有注釋的源代碼222可以包括帶有注釋的接口(例如,Somelnterface)。編譯器邏輯210可以在硬件、軟件、固件、或其組合中實現(xiàn)。
當編譯器210遇到注釋時(例如,任何注釋,諸如@Interface),編譯器210可以調(diào)用注釋處理器250。注釋處理器250可以確定帶有注釋的接口的編組能力,并且可以生成編組代碼。
在區(qū)域240中的類242(例如,表示待完成的任務)可以具有已實現(xiàn)的SomeInterface,并且希望將SomeInterface曝光在主機應用220下。因為SomeInterface的實現(xiàn)方式駐留在區(qū)域中,同時其客戶端駐留在(不可信的)應用220中,因此鏈接器(未示出)可以將代理類226放置在應用220中以便編組方法調(diào)用,并且還可以將橋類244放置在區(qū)域240中以便解組方法調(diào)用。
區(qū)域打包器類224是用于對編組/傳輸層進行旁路的一條粘合代碼,并被包括以為了與非啟用SE的平臺兼容。在一些實施例中,僅針對根類生成區(qū)域打包器類224。
代理(例如,代理類226)可以實現(xiàn)可編組接口,所述可編組接口允許調(diào)用器調(diào)用代理如同調(diào)用器正在直接調(diào)用與代理相關(guān)聯(lián)的對象。代理方法通過對應的橋(例如,Someinterface橋類244)編組參數(shù),并且然后采用信道來遠程調(diào)用方法,所述對應的橋由信道/橋ID對來標識,其中,信道是對信道對象的引用,并且橋ID特定于信道。
橋(例如,Someinterface橋類244)可以將每一個可編組接口橋接至實現(xiàn)所述接口的實際類和方法。每當通過信道編組新接口時,實例化與特定代理相對應的橋。所述橋可以具有用于已編組的接口中的每一種方法的橋方法。
除用于根接口的代理和橋之外,可以動態(tài)地創(chuàng)建或破壞代理和橋,所述代理和橋作為初始化系列的一部分被創(chuàng)建。典型地,每一個代理的生命周期可以由垃圾收集器來控制,并且當代理被破壞時,信道釋放對應的橋。
在實施例中,可以在橋上采用引用計數(shù)方案。也就是說,每當編組給定接口時,創(chuàng)建新的代理實例。然而,同一遠程對象的多個代理實例可以共享同一橋?qū)嵗?,對所述橋?qū)嵗M行引用計數(shù)、并且在所有代理實例被破壞后將受到破壞。
在另一實施例中,代理可由信道跟蹤并采用引用計數(shù)。在此實施例中,不管同一遠程對象被編組了多少次,都將返回同一代理實例。注意,在此實施例中,由信道對代理的引用是“弱”,或者將不對代理進行垃圾收集,例如,由信道對代理的引用將防止對代理進行垃圾收集。
由于代理類與橋類之間的一一對應,橋可以具有如何為每一個方法調(diào)用解組參數(shù)的現(xiàn)有知識。因此,代理僅需編組參數(shù)中的數(shù)據(jù)而無需編組其他信息(例如,參數(shù)類型信息)。僅編組參數(shù)中的數(shù)據(jù)可以導致低運行時間開銷。
代理和橋兩者均可以從用戶定義的接口定義和工具(例如,以上描述的注釋處理器你)中自動生成。所產(chǎn)生的代碼可以能夠編組接口和復雜對象兩者,并且用戶(例如,開發(fā)者)可避免手動寫入在代理和橋中提供的編組和非編組代碼。
此外,關(guān)于如何編組參數(shù),每一個接口的定義由用戶準許靈活性。例如,用戶可定義所述接口從而使得所述接口對編組不需要的對象成員進行旁路。
信道就可以被實現(xiàn)以用于調(diào)用遠程方法、管理橋?qū)ο蟆⒁约肮芾肀镜乜蛻舳伺c遠程服務之間的傳輸機制。應當注意的是,在一些實施例中,遠程服務不需要正在遠程進程中運行。相反,遠程服務可以是通過編程構(gòu)造(諸如區(qū)域)而隔離的本地實體。
可以針對每一個客戶端/服務器接口來實例化一對信道對象。雖然每一個客戶端/服務器綁定暗示了所述客戶端上的主代理(例如,針對根接口的代理)以及所述服務器(區(qū)域)中的主橋(例如,根對象的橋),但是可經(jīng)由將引用傳遞至客戶端與服務器之間的接口來創(chuàng)建其他代理/橋?qū)?。因此,接口可以在任何方向操作,例如客戶端到服務?例如,應用到區(qū)域)或服務器到客戶端(例如,區(qū)域到應用)。接口可以包括信道接口自身,因為信道接口到一個服務器可以被編組為到另一個服務器,從而創(chuàng)建了可堆疊的傳輸層。
信道類利用傳輸機制以便在客戶端與服務器之間進行通信,這暗示了每一種類型的信道的本地進程與遠程進程之間的信道接口的唯一實現(xiàn)方式。所述傳輸機制負責客戶端與服務器之間的通信,并且可以特定于平臺。在一個實施例中,傳輸層使用粘合代碼(例如,C/C++粘合代碼),所述粘合代碼采用共享存儲器以及通過例如本地接口(例如,接口)可訪問的直接調(diào)用機制。
在內(nèi)部,當本地橋利用信道注冊時,信道實現(xiàn)方式通過維持針對所述本地橋的引用以及針對每一個本地橋創(chuàng)建唯一標識符(ID)來保持對任何已編組的接口的跟蹤。這允許信道將由遠程側(cè)傳遞的本地橋標識轉(zhuǎn)化成本地側(cè)的相關(guān)聯(lián)的橋?qū)ο蠹捌湎嚓P(guān)聯(lián)的實物。
圖3是根據(jù)本發(fā)明的實施例的用于數(shù)據(jù)編組和/或接口編組的系統(tǒng)300的框圖。系統(tǒng)300包括應用310(例如,應用)以及區(qū)域340(例如,在中寫入的安全區(qū)域)以作為例如與應用代碼隔離的遠程進程。
系統(tǒng)300包括應用310(所述應用包括代理314)、信道318/342以及包括橋344的區(qū)域340。系統(tǒng)300可以準許信息以應用到區(qū)域的方向、且還可以區(qū)域到應用的相反方向流動。
Someclass方法312是嘗試經(jīng)由接口A 316訪問區(qū)域?qū)ο?46的調(diào)用器。代理314實例化(區(qū)域)橋2 326,并利用信道318(例如,信道318指派橋2 326的索引并將索引返回至代理314)注冊橋2 326。接口A 316具有將(不可信)對象320作為第一參數(shù)且將對象A 322作為第二參數(shù)的方法A1。對象A 322由@structure來標注。來自對象A 322的數(shù)據(jù)連同橋2 326的索引一起由代理314封裝到鄰接緩沖器中,例如,橋2 326是(不可信)對象320(例如,對象320經(jīng)由橋2 326可訪問)的橋,并且已封裝數(shù)據(jù)被移交給信道318,包括對互補橋344進行標識的索引(由代理314提供)。信道342接收所述封裝數(shù)據(jù),并使用所提供的索引來定位區(qū)域橋344。附加地,告知區(qū)域橋344方法A1正在被使用。區(qū)域橋344從所接收的封裝數(shù)據(jù)來創(chuàng)建對象A 350的副本。區(qū)域橋344調(diào)用區(qū)域?qū)ο?46的方法A1,并且方法A1作為參數(shù)在對象A 350的副本、作為另一個參數(shù)在代理352上操作。區(qū)域橋344通過向代理352的構(gòu)造器提供信道342以及與區(qū)域橋2 326相關(guān)聯(lián)的索引來創(chuàng)建(實例化)代理352。
代理314封裝兩條信息——第一條信息是對象A 322的內(nèi)容;以及第二條信息是區(qū)域橋2 326的標識符,例如,標識存儲在信道318內(nèi)的陣列中的區(qū)域橋2 326的地址。所述標識符可以使得能夠由區(qū)域?qū)ο?46在應用310中跟蹤數(shù)據(jù)處理的進度。
代理314實例化區(qū)域橋2 326,并利用信道318注冊區(qū)域橋2 326的地址。代理314可將區(qū)域橋2 326的標識符傳遞給區(qū)域橋344。因此,區(qū)域橋344接收存儲在對象A 322中的數(shù)據(jù)以及與區(qū)域橋2 326的地址相關(guān)聯(lián)的標識符。
區(qū)域?qū)ο?46實現(xiàn)調(diào)用器可調(diào)用以便由區(qū)域?qū)ο?46來監(jiān)測對象A的數(shù)據(jù)處理的接口A 316(例如,虛擬函數(shù)集合)。326的標識符與對信道342的引用一起用于實例化不可信的代理352。
區(qū)域?qū)ο?46可以通過調(diào)用代理352以及提供完成百分比(例如,從編組緩沖器(未示出))來向代理352上報有關(guān)處理的進度。代理352然后將發(fā)送兩條數(shù)據(jù),例如區(qū)域橋2 326的橋標識符以及編組緩沖器的內(nèi)容(例如,正在由區(qū)域?qū)ο?46執(zhí)行的處理的完成百分比)。區(qū)域橋2 326提取(解組)所述百分比、調(diào)用(不可信)對象320、以及提供已解組數(shù)據(jù)的內(nèi)容(例如,正在由區(qū)域?qū)ο?46執(zhí)行的處理的完成百分比)。
圖4是根據(jù)本發(fā)明的實施例的包括兩個區(qū)域的系統(tǒng)的框圖??梢越?jīng)由區(qū)域加載器加載區(qū)域430和450,所述區(qū)域加載器可以由例如響應于源代碼應用的源代碼中的一個或多個注釋的注釋處理器在構(gòu)建時間生成。應用410與兩個遠程進程進行通信。應用410具有到區(qū)域430和區(qū)域450的接口。針對區(qū)域430、450中的每一個區(qū)域,具有在應用中實例化的對應信道412、414以及在區(qū)域430、450中的每一個區(qū)域中實例化的對應信道432、452。區(qū)域430包括類對象434。存在代理416和橋436以便將接口代理至對象434。區(qū)域450包括類對象454。存在代理418和橋456以便將接口代理至對象454。一條代碼(“e調(diào)用器”)420可以通過對應代理(416、418)來進行調(diào)用以便作出對對象(434、452)中的任一者的調(diào)用。根據(jù)本發(fā)明的實施例,代理416與橋436和/或代理418與橋456可以由例如區(qū)域初始化代碼來創(chuàng)建,所述區(qū)域初始化代碼由編譯器通過使用由所述編譯器調(diào)用的注釋處理器來輸出。
圖5是根據(jù)本發(fā)明的實施例的包括可堆疊信道配置的系統(tǒng)的框圖。系統(tǒng)500包括應用510、第一區(qū)域530、以及第二區(qū)域560。所述系統(tǒng)以可堆疊信道為特征,所述系統(tǒng)涉及將一個信道編組在另一信道上,并且允許遠程實體通過兩個信道高效地進行調(diào)用以便達到另一個進程。通過使用e調(diào)用器548,區(qū)域530可通過堆疊的信道接口進行調(diào)用以便到達區(qū)域560中的對象。在一些實施例中,區(qū)域530、560中的一個或兩者均可以由在應用510的構(gòu)建時間生成的自動生成區(qū)域創(chuàng)建器來創(chuàng)建。
針對每一個區(qū)域,具有在應用510中以及在區(qū)域中實例化的對象信道。也就是說,信道512在區(qū)域530具有對應的信道544,并且信道516在區(qū)域560中具有對應的信道566。區(qū)域560包括對象562。
代理542在區(qū)域530中被實例化,并使用應用510與區(qū)域530之間的信道512/544來將數(shù)據(jù)編組到位于應用510中的橋514。
在區(qū)域530中創(chuàng)建代理546。通過代理546,可如下通過傳送至區(qū)域560且然后至對象562的信道516/566作出信道調(diào)用:位于區(qū)域530中的e調(diào)用器548發(fā)起對對象562的調(diào)用。所述調(diào)用通過信道對544/512進行至代理546、至代理542,通過信道對516/566進行至橋514,進行至區(qū)域560中的橋564,以及最終從橋564進行至對象562。
應當注意的是,由于信道接口512/544和516/566被堆疊,因此方法調(diào)用的參數(shù)在開始調(diào)用的進程的代理(例如,代理546)中被編組,并且然后在終止所述調(diào)用的橋(例如,橋564)中被解組。由于信道接口的堆疊,可能存在可以忽略不計的參數(shù)重編組開銷。
應當注意的是,在前述實施例中的任何實施例中呈現(xiàn)的技術(shù)可以用于將應用橋接至一個或多個其他應用,而不是將應用于區(qū)域進行橋接。
圖6是根據(jù)本發(fā)明的多個實施例的一種用于實例化應用與區(qū)域之間的接口的方法600的流程圖。在框602處,應用調(diào)用(自動生成的)區(qū)域創(chuàng)建器。在一些實施例中(例如,使用代碼),區(qū)域創(chuàng)建器可以例如在應用的構(gòu)建時間被生成為具有靜態(tài)函數(shù)的類。
繼續(xù)到框604,所述區(qū)域創(chuàng)建器加載并調(diào)用區(qū)域(例如,在應用中)的初始化代碼,所述區(qū)域初始化區(qū)域中的啟動類。前進到框606,由所述區(qū)域啟動類實例化區(qū)域信道對象。移到框608,所述區(qū)域啟動類創(chuàng)建根對象。進行到框610,所述區(qū)域啟動類創(chuàng)建被初始化為空的橋陣列。
繼續(xù)到框612,所述區(qū)域啟動類創(chuàng)建針對根對象的橋。利用區(qū)域信道注冊(例如,為根對象指派假定值,橋在區(qū)域信道陣列中被引用)橋,從而使得橋出現(xiàn)在信道的橋陣列中。前進到框614,所述區(qū)域創(chuàng)建器對應用的應用信道對象進行實例化。所述應用信道對象存儲區(qū)域標識。移到框616,所述應用信道對象維持被初始化為空的橋列表。進行到框618,所述區(qū)域創(chuàng)建器針對(單個)根接口創(chuàng)建應用中的代理。信道索引對用于在區(qū)域側(cè)中匹配接口。在實施例中,第一信道索引可以硬編碼成一個。繼續(xù)到框620,將代理上溯至根接口類型并返回至調(diào)用器。
各實施例可被結(jié)合在其他類型的系統(tǒng)中,包括諸如蜂窩電話的移動設備?,F(xiàn)在參考圖7,示出了根據(jù)本發(fā)明的另一實施例的系統(tǒng)的框圖。如圖7所示,系統(tǒng)700可以是移動設備并且可以包括各個部件。如圖7的高級視圖所示,可以是設備的中央處理單元的應用處理器710與各個部件(包括系統(tǒng)存儲器715)進行通信。在各實施例中,系統(tǒng)存儲器715可以包括程序和數(shù)據(jù)存儲部分兩者,并且可被映射以便提供安全存儲。根據(jù)本發(fā)明的實施例,“區(qū)域頁面緩存”(Enclave Page Cache,EPC)718是可以專用的(例如,通過使用密碼)存儲裝置715的專用部分,并且可以容納由例如應用待創(chuàng)建的一個或多個安全區(qū)域。在實施例中,可以在上電處且在一個或多個安全區(qū)域被創(chuàng)建之前配置EPC 718。
應用處理器710可以進一步耦合至輸入/輸出系統(tǒng)720,在各個實施例中,所述輸入/輸出系統(tǒng)可以包括顯示器以及一個或多個輸入設備(諸如觸摸鍵盤),所述觸摸鍵盤自身可在執(zhí)行時出現(xiàn)在顯示器上。系統(tǒng)700還可以包括集成傳感器中樞(ISH)760,所述集成傳感器中樞可以從一個或多個傳感器770接收數(shù)據(jù)。
根據(jù)本發(fā)明的實施例,應用處理器710可操作用于執(zhí)行應用以便實例化針對安全區(qū)域的根對象,所述應用可訪問所述安全區(qū)域。根據(jù)本發(fā)明的實施例,應用處理器710可操作用于創(chuàng)建編組代碼以便編組應用與區(qū)域之間的接口。根據(jù)本發(fā)明的實施例,可以靜態(tài)地生成并調(diào)用編組代碼。根據(jù)本發(fā)明的實施例,源內(nèi)注釋可以用于在應用的構(gòu)建時間限定遠程(例如,可編組的)接口。根據(jù)本發(fā)明的實施例,可以支持接口繼承。
在一些實施例中,根據(jù)本發(fā)明的實施例,例如為了在非啟用安全區(qū)域(SE)的硬件上運行啟用SE的應用而無需修改區(qū)域啟動源代碼,打包器類可由注釋處理器自動生成以便對編組進行旁路。根據(jù)本發(fā)明的實施例,可以支持可堆疊信道,包括將第二信道到第二區(qū)域編組在第一信道到第一區(qū)域上,從而允許遠程實體通過兩個信道高效地進行調(diào)用以便達到另一個進程。
應用處理器710還可以耦合至基帶處理器730,所述基帶處理器可以調(diào)節(jié)諸如語音的信號和數(shù)據(jù)通信用于輸出、并且調(diào)節(jié)呼入電話和其他信號。如所見的,基帶處理器730耦合至收發(fā)機740,所述收發(fā)機可以使能接收和傳輸能力兩者。進而,收發(fā)機740可以與天線750(例如,能夠經(jīng)由一個或多個通信協(xié)議(諸如經(jīng)由無線廣域網(wǎng)(例如,3G或4G網(wǎng)絡)和/或無線局域網(wǎng)(諸如藍牙TM或符合電氣與電子工程師協(xié)會802.11標準的所謂WI-FITM網(wǎng)絡)傳輸并發(fā)送語音和數(shù)據(jù)信號的任何類型的天線)進行通信。如所見的,系統(tǒng)700可以進一步包括具有可再充電電池的可再充電電源725以使得能夠在移動環(huán)境中操作。雖然在圖7的實施例中利用這一特定實現(xiàn)方式被示出,但本發(fā)明的范圍并不局限于此方面。
各實施例可以采用許多不同的系統(tǒng)類型來實現(xiàn)。現(xiàn)在參考圖8,示出了根據(jù)本發(fā)明的實施例的系統(tǒng)的框圖。如圖8所示,多處理器系統(tǒng)800是點對點互連系統(tǒng),且包括經(jīng)由點對點互連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),這些存儲器可以是本地附接至相應處理器的系統(tǒng)存儲器(例如,DRAM)的部分。存儲器832可以包括區(qū)域頁面緩存(EPC)833,并且存儲器834可以包括EPC 835。EPC 833和835是相應存儲器832、834的部分。EPC 833和835可以專用于(例如,經(jīng)由密碼技術(shù))存儲一個或多個安全區(qū)域??梢岳缤ㄟ^由相應處理器870、880運行的基本輸入輸出系統(tǒng)(BIOS)在上電處創(chuàng)建每一個EPC 833、835。根據(jù)本發(fā)明的實施例,可以由區(qū)域加載器響應于來自在處理器870或處理器880上運行的應用的請求來創(chuàng)建一個或多個安全區(qū)域。根據(jù)本發(fā)明的實施例,可以在對應的EPC中創(chuàng)建(多個)安全區(qū)域。根據(jù)本發(fā)明的實施例,每一個安全區(qū)域可以被抽象為在運行時間由應用的區(qū)域初始化代碼自動實例化的根對象。根據(jù)本發(fā)明的實施例,所述區(qū)域初始化代碼可以在所述應用的構(gòu)建時間生成。
第一處理器870和第二處理器880可以分別經(jīng)由P-P互連862和884耦合至芯片組890。如圖8所示,芯片組890包括P-P接口894和898。
此外,芯片組890包括經(jīng)由P-P互連839將芯片組890與高性能圖形引擎838耦合的接口892。進而,芯片組890可以經(jīng)由接口896耦合至第一總線816。如圖8所示,各個輸入/輸出(I/O)設備814可以與總線橋818一起耦合至第一總線816,所述總線橋?qū)⒌谝豢偩€816耦合至第二總線820。在一個實施例中,各種設備可以耦合至第二總線820,包括例如,鍵盤/鼠標822、通信設備826和數(shù)據(jù)存儲單元828(諸如磁盤驅(qū)動器或可以包括代碼830的其他大容量存儲設備)。進一步地,音頻輸入/輸出(I/O)824可以耦合至第二總線820。各實施例可被結(jié)合在其他類型的系統(tǒng)中,包括:諸如智能蜂窩電話的移動設備、平板計算機、上網(wǎng)本、超級本TM等等。
下面對其他實施例進行描述。
在一個實施例中,系統(tǒng)包括處理器,所述處理器用于在主機應用的運行時間在所述主機應用內(nèi)自動地執(zhí)行區(qū)域初始化代碼。所述區(qū)域初始化代碼包括用于創(chuàng)建與所述主機應用分離的安全區(qū)域的編組代碼,所述編組代碼在所述主機應用的構(gòu)建時間生成。所述系統(tǒng)還包括動態(tài)隨機存取存儲器(DRAM),所述動態(tài)隨機存取存儲器包括用于存儲所述安全區(qū)域的專用DRAM部分。
在一個示例中,所述區(qū)域初始化代碼限定了所述主機應用與所述安全區(qū)域之間的遠程接口。
在一個示例中,所述處理器用于經(jīng)由代理/橋?qū)砭幗M所述主機應用與所述安全區(qū)域之間的數(shù)據(jù)。
在一個示例中,所述處理器用于經(jīng)由所述區(qū)域初始化代碼的執(zhí)行來自動地對代理進行實例化。所述代理用于使得所述主機應用能夠與所述安全區(qū)域進行通信。
在一個示例中,所述代理可操作用于封裝一個或多個參數(shù)以便響應于所調(diào)用的方法來傳輸至所述安全區(qū)域。
在一個示例中,所述處理器進一步用于對橋進行實例化,所述橋可操作用于對在所述安全區(qū)域接收到的所述一個或多個參數(shù)進行解包封。
在一個示例中,所述處理器進一步用于將傳輸層抽象為第一信道接口。所述傳輸層可操作用于將所述代理與所述橋進行匹配。
在一個示例中,所述處理器用于:對所述主機應用與第二安全區(qū)域之間的第二信道接口進行實例化;并且用于對所述第一信道接口與所述第二信道接口進行堆疊以便使能所述安全區(qū)域與所述第二安全區(qū)域之間的區(qū)域間過程調(diào)用。
在一個示例中,所述區(qū)域初始化代碼的執(zhí)行對用作所述安全區(qū)域的入口點的根對象進行實例化。
在結(jié)合了以上示例中的任何一個示例的示例中,所述區(qū)域初始化代碼基于包括用于指示一個或多個可編組數(shù)據(jù)結(jié)構(gòu)的源內(nèi)注釋的源代碼。
在另一示例中,一種方法包括:由編譯器邏輯對源代碼進行編譯,所述源代碼包括用于在所述主機應用的構(gòu)建時間產(chǎn)生區(qū)域初始化代碼的一個或多個注釋。所述區(qū)域初始化代碼包括用于在所述主機應用的構(gòu)建時間創(chuàng)建與所述主機應用分離的安全區(qū)域的編組代碼。
在一個示例中,所述方法包括:當所述編譯器邏輯遇到注釋時,由所述編譯器邏輯調(diào)用注釋處理器以便確定與所述注釋相關(guān)聯(lián)的帶有注釋的接口的可編組性。
在一個示例中,所述方法包括:當所述注釋處理器確定所述帶有注釋的接口可編組時,由通過所述編譯器邏輯調(diào)用的所述注釋處理器生成所述編組代碼。
在一個示例中,在運行時間,所述編組代碼用于將代理類別放置在所述主機應用中以便對方法調(diào)用進行編組,并且所述編組代碼用于將橋類別放置在所述安全區(qū)域中以便對所述方法調(diào)用進行解組。
在一個示例中,裝置可以執(zhí)行以上所述方法中的任一種方法。
在一個示例中,至少一個機器可讀存儲介質(zhì)包括指令,所述指令響應于在計算設備上被執(zhí)行而使得所述計算設備執(zhí)行以上所述方法中的任一種方法。
一個示例包括用于執(zhí)行以上所述方法中的任一種方法的裝置。
在一個示例中,一種系統(tǒng)包括處理器,所述處理器用于經(jīng)由主機應用與第一安全區(qū)域之間的第一信道接口、并且隨后經(jīng)由所述主機應用與第二安全區(qū)域之間的第二信道接口來使能從所述第一安全區(qū)域到所述第二安全區(qū)域的根對象的調(diào)用。所述系統(tǒng)還包括用于存儲所述第一安全區(qū)域的動態(tài)隨機存取存儲器(DRAM)。
在一個示例中,所述處理器用于對與所述第一信道接口相對應的第一代理/橋?qū)σ约芭c所述第二信道接口相對應的第二代理/橋?qū)M行實例化。
在一個示例中,所述第一代理/橋?qū)εc所述第二代理/橋?qū)χ械拿恳粋€代理/橋?qū)υ谒鲋鳈C應用的運行時間被實例化。
在一個示例中,所述處理器用于經(jīng)由包括第一代理和第一橋的所述第一代理/橋?qū)幗M所述第一安全區(qū)域與所述主機應用之間的數(shù)據(jù)。所述主機進一步用于經(jīng)由包括第二代理和第二橋的所述第二代理/橋?qū)幗M所述主機應用與所述第二安全區(qū)域之間的所述數(shù)據(jù)。
在一個示例中,所述數(shù)據(jù)在所述第一代理中被編組且在所述第二橋中被解組而不解組所述第一橋中的所述數(shù)據(jù)。
在一個示例中,所述處理器進一步用于在所述主機應用的運行時間的過程中對所述第二安全區(qū)域的所述根對象進行實例化。
在另一示例中,至少一種計算機可讀存儲介質(zhì)具有存儲在其上的指令,所述指令用于使得系統(tǒng)對根對象進行實例化從而使得啟用安全區(qū)域(SE)的應用能夠通過區(qū)域創(chuàng)建器的執(zhí)行在非啟用SE的硬件上運行,所述區(qū)域創(chuàng)建器是響應于源代碼中的至少一個注釋而自動從對所述源代碼的編譯中生成的。所述根對象將要在所述SE使能應用的運行時間被實例化。
在一個示例中,使能所述啟用SE的應用在非啟用安全的硬件上的運行準許訪問所述安全區(qū)域而無需使用橋來編組與所述啟用SE的應用相關(guān)聯(lián)的參數(shù)。
在一個示例中,所述至少一種計算機可讀存儲介質(zhì)包括用于在對所述根對象進行實例化時將根接口返回至所述啟用SE的應用的調(diào)用器而無需對代理或?qū)嵗瘶蜻M行實例化的指令。
在一個示例中,所述至少一種計算機可讀存儲介質(zhì)包括用于執(zhí)行以下各項的指令:由編譯器在對象代碼的構(gòu)建時間過程中檢測正在由所述編譯器解釋的源代碼中的第一注釋;以及基于所述第一注釋在構(gòu)建時間調(diào)用注釋處理器以便生成編組代碼。
在另一示例中,至少一種計算機可讀存儲介質(zhì)具有存儲在其上的指令,所述指令用于使得系統(tǒng)執(zhí)行已經(jīng)從包括一個或多個注釋的源代碼在主機應用的構(gòu)建時間創(chuàng)建的區(qū)域初始化代碼。所述區(qū)域初始化代碼包括用于在所述主機應用的構(gòu)建時間創(chuàng)建與所述主機應用分離的安全區(qū)域的編組代碼。
在一個示例中,在運行時間,所述編組代碼用于將代理類別放置在所述主機應用中以便對方法調(diào)用進行編組,并且所述編組代碼用于將橋類別放置在所述安全區(qū)域中以便對所述方法調(diào)用進行解組。
各實施例可以用于多個不同類型的系統(tǒng)中。例如,在一個實施例中,通信設備可被安排成用于執(zhí)行在此描述的所述各種方法和技術(shù)。當然,本發(fā)明的范圍不限于通信設備,相反其他實施例可涉及用于處理指令的其他類型的裝置、或包括指令的一個或多個機器可讀介質(zhì),所述指令響應在計算設備上被執(zhí)行而使得所述設備執(zhí)行在此描述的方法和技術(shù)中的一項或多項。
實施例可以在代碼中實現(xiàn)并且可存儲在非瞬態(tài)存儲介質(zhì)上,所述非瞬態(tài)存儲介質(zhì)具有存儲在其上的指令,這些指令可用于對系統(tǒng)編程來執(zhí)行指令。存儲介質(zhì)可以包括但不局限于包括以下各項的任何類型的磁盤:軟盤、光盤、固態(tài)驅(qū)動器(SSD)、壓縮盤只讀存儲器(CD-ROM)、可復寫致密盤(CD-RW)、和磁光盤,諸如只讀存儲器(ROM)的半導體器件、諸如動態(tài)隨機存取存儲器(DRAM)和靜態(tài)隨機存取存儲器(SRAM)的隨機存取存儲器(RAM)、可擦可編程只讀存儲器(EPROM)、閃存、電可擦可編程只讀存儲器(EEPROM)、磁卡或光卡、或者適合于存儲電子指令的任何其他類型的介質(zhì)。
雖然已經(jīng)針對有限數(shù)量的實施例對本發(fā)明進行了描述,但本領(lǐng)域技術(shù)人員將理解到來自其中的許多修改和變體。旨在使得所附的權(quán)利要求書覆蓋落入本發(fā)明的真正精神和范圍的所有這樣的修改和變體。