亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

預定函數的混淆執(zhí)行的制作方法

文檔序號:12289830閱讀:300來源:國知局
預定函數的混淆執(zhí)行的制作方法與工藝

本發(fā)明涉及一種預定函數的混淆執(zhí)行的方法和將處理器配置成以混淆的方式實現預定函數的方法,以及用于實現這樣的方法的裝置和計算機程序。



背景技術:

“白盒環(huán)境”是一種執(zhí)行環(huán)境,其中,人們可以執(zhí)行許多計算機代碼(或軟件)——其中,代碼實現函數F——且人們可以檢查和修改代碼(或假設知道正在被實現的底層算法),和/或在代碼的執(zhí)行過程中,人們可以檢查和修改正在使用的數據的值(即,正在使用的存儲器中的內容)、數據流和過程流(或代碼中指令的執(zhí)行的順序)。

已知使得能夠提供或生成(實現函數F的)代碼使得即使在白盒環(huán)境中執(zhí)行代碼、執(zhí)行代碼的人也不能確定到函數F的輸入和/或函數F的輸出和/或函數F使用的機密信息的值(或者使得在給定的時間段內的這樣的確定完全不切實際或不可行)的各種技術。

能夠提供一種用于提供或生成適于在白盒環(huán)境內部署或執(zhí)行的代碼的改進技術將是期望的。



技術實現要素:

根據本發(fā)明的第一方面,提供一種預定函數的混淆執(zhí)行的方法,其中,對于預定函數,存在一個或多個對應的第一函數使得,對于針對該函數的輸入集,可以通過以下步驟生成對應的輸出集:(a)將輸入集表示為對應的值集,其中,每個值都包括對應的多個輸入中的每一個輸入的至少一部分,(b)從該值集生成一個或多個結果的集合,其中,通過向值集中的一個或多個值的對應集合應用對應的第一函數來生成每個結果,以及(c)將每個輸出構成為結果中對應的一個的一部分或者為對應的多個結果中的每個結果的至少一部分的組合;其中,該方法包括:為該值集中的每一個值獲取所述值的一個或多個對應的變換版本,其中,所述值的每個變換版本都是向所述值應用與所述變換版本對應的相應的雙射的結果;以及生成與結果集對應的變換結果集,其中,每個變換結果對應于相應的結果且每個變換結果是通過向對應于第一函數的一個或多個值的該集合中的一個或多個值的變換版本應用相應的第二函數而生成的,所述第二函數對應于與相應結果對應的第一函數,其中,對于相應的第二函數,存在用于從所述變換結果獲取相應結果的對應雙射。

在一些實施例中,所述獲取包括:獲取值集;以及針對所獲取的值集中的每個值生成所述值的所述一個或多個對應變換版本,其中,所述值的所述一個或多個對應變換版本中的每一個是通過向所述值應用對應于所述變換版本的所述相應的雙射而生成的。獲取值集然后可以包括:獲取輸入集;以及從輸入集生成值集。

在一些實施例中,所述獲取包括在執(zhí)行所述獲取和所述生成的第一模塊處從第二模塊接收所述值集中的每個值的所述一個或多個變換版本。

在一些實施例中,該方法包括:通過向每個變換結果應用雙射而從變換結果集生成結果集,所述雙射對應于針對該變換結果的第二函數。該方法可以然后包括從結果集獲取輸出集。

在一些實施例中,該方法包括將變換結果集從執(zhí)行所述獲取和所述生成的第一模塊輸出至第二模塊。

在一些實施例中,對于值集中的每一個值,對應的多個輸入中的每一個輸入的至少一部分包括對應的多個輸入的每一個輸入的全部。

在一些實施例中,對于值集中的每一個值,對應的多個輸入中的每一個輸入的至少一部分包括對應的多個輸入中的每一個輸入的預定數目的位。預定數目可以為1。

在一些實施例中,預定函數對應于查找表,其將輸入集中的輸入映射至輸出集中的對應輸出。

根據本發(fā)明的第二方面,提供一種將處理器配置成以混淆的方式實現預定函數的方法,其中,對于預定函數,存在一個或多個對應的第一函數使得,對于針對該函數的輸入集,可以通過以下步驟生成對應的輸出集:(a)將輸入集表示為對應的值集,其中,每個值都包括對應的多個輸入中的每一個輸入的至少一部分,(b)從該值集生成一個或多個結果的集合,其中,通過向值集中的一個或多個值的對應集合應用對應的第一函數來生成每個結果,以及(c)將每個輸出構成為結果中對應的一個的一部分或者為對應的多個結果中的每個結果的至少一部分的組合;其中,該方法包括:針對每個第一函數:為針對第一函數的一個或多個值的對應集合中的每個值指定對應雙射;為第一函數指定雙射;以及基于指定的雙射,確定與第一函數對應的第二函數,其中,第二函數在應用于當在它們對應的雙射下變換時的針對第一函數的一個或多個值的相應集合中的一個或多個值時輸出在針對第一函數的雙射下的與第一函數對應的結果的變換版本;以及將處理器配置成使用所確定的區(qū)段(section)函數實現本發(fā)明的上面的第一方面的方法。

根據本發(fā)明的第三方面,提供了一種裝置,其被布置成實現上述方法中的任何一種。

根據本發(fā)明的第四方面,提供了一種計算機程序,其當由處理器執(zhí)行時引起處理器實現上述方法中的任何一種。該計算機程序可以被存儲在計算機可讀介質上。

附圖說明

現在將參照附圖僅通過示例的方式描述本發(fā)明的實施例,其中:

圖1示意性地示出了計算機系統(tǒng)的示例;

圖2示意性地示出了在當實現圖3的方法時的函數F的執(zhí)行中所涉及的函數或操作以及用于其的數據流;

圖3是示出用于函數F的執(zhí)行的方法的流程圖;

圖4示意性地示出了輸入集{x1,x2,...,xW}與值集{p1,...,pM}之間的示例關系;

圖5a-5c示意性地示出了當函數F是查找表時可以如何應用圖3的方法;

圖6示意性地示出了當使用圖3的方法實現示例函數時各子函數之間的關系;

圖7a和7b示意性地示出了當函數F是有限脈沖響應濾波器時可以如何應用圖3的方法;以及

圖8示意性地示出了根據本發(fā)明的實施例的用于以混淆的形式執(zhí)行(或實現)函數F的方法。

具體實施方式

在隨后的描述中和在附圖中,描述了本發(fā)明的某些實施例。然而,將認識到的是本發(fā)明不限于所描述的實施例,并且一些實施例可以不包括下面描述的特征中的所有。然而,將顯而易見的是在可以在本文中進行各種修改和變更而不脫離如在所附權利要求中闡述的本發(fā)明的更寬泛的精神和范圍。

1-系統(tǒng)概述

圖1示意性地示出計算機系統(tǒng)100的示例。系統(tǒng)100包括計算機102。計算機102包括:存儲介質104、存儲器106、處理器108、接口110、用戶輸出接口112、用戶輸入接口114和網絡接口116,其全部被通過一個或多個通信總線118鏈接在一起。

存儲介質104可以是任何形式的非易失性數據存儲設備,諸如硬盤驅動、磁盤、光盤、ROM等中的一個或多個。存儲介質104可存儲用于處理器108執(zhí)行以便使計算機102運行的操作系統(tǒng)。存儲介質104還可存儲一個或多個計算機程序(或軟件或指令或代碼)。

存儲器106可以是適合于存儲數據和/或計算機程序(或軟件或指令或代碼)的任何隨機存取存儲器(存儲單元或易失性存儲介質)。

處理器108可以是適合于執(zhí)行一個或多個計算機程序(諸如存儲在存儲介質104上和/或存儲器106中的那些)的任何數據處理單元,所述計算機程序中的某些可以是根據本發(fā)明的實施例的計算機程序或者在被處理器108執(zhí)行時引起處理器108實現根據本發(fā)明的實施例的方法并將系統(tǒng)100配置成是根據本發(fā)明的實施例的系統(tǒng)的計算機程序。處理器108可包括單個數據處理單元或者并行地或相互合作地操作的多個數據處理單元。處理器108在實現用于本發(fā)明的實施例的數據處理操作時可向和/或從存儲介質104和/或存儲器106存儲數據和/或讀取數據。

接口110可以是用于提供到在計算機102外部或可從其移除的設備122的接口的任何單元。設備122可以是數據存儲設備,例如光盤、磁盤、固態(tài)存儲設備等中的一個或多個。設備122可具有處理能力——例如,該設備可以是智能卡。接口110因此可根據其從處理器108接收到的一個或多個命令從設備122訪問數據或向設備122提供數據或者與設備122對接。

用戶輸入接口114被布置成從系統(tǒng)100的用戶或操作者接收輸入。用戶可通過被連接到用戶輸入接口114或與之通信的系統(tǒng)100的一個或多個輸入設備(諸如鼠標(或其它指針設備)126和/或鍵盤124)來提供此輸入。然而,將認識到的是用戶可通過一個或多個附加或替換輸入設備(諸如觸摸屏)向計算機102提供輸入。計算機102可將通過用戶輸入接口114從輸入設備接收到的輸入存儲在存儲器106中以用于處理器108隨后訪問和處理,或者可將其徑直傳遞至處理器108,使得處理器108可以相應地對用戶輸入進行響應。

用戶輸出接口112被布置成向系統(tǒng)100的用戶或操作者提供圖形/視覺和/或音頻輸出。同樣地,處理器108可被布置成命令用戶輸出接口112構成表示期望圖形輸出的圖像/視頻信號,并將此信號提供給被連接到用戶輸出接口112的系統(tǒng)100的監(jiān)視器(或屏幕或顯示單元)120。附加地或替換地,處理器108可被布置成命令用戶輸出接口112構成表示期望音頻輸出的音頻信號,并且將此信號提供給連接到用戶輸出接口112的系統(tǒng)100的一個或多個揚聲器121。

最后,網絡接口116提供用于使計算機102從一個或多個數據通信網絡下載數據和/或向其上傳數據的功能。

將認識到的是在圖1中示出并在上文描述的系統(tǒng)100的架構僅僅是示例性的,并且在本發(fā)明的實施例中可使用具有不同架構(例如具有比圖1中所示的更少的組件或者具有除圖1中所示之外的附加和/或替換組件)的其它計算機系統(tǒng)100。作為示例,計算機系統(tǒng)100可以包括以下各項中的一個或多個:個人計算機;服務器計算機;移動電話;平板電腦;膝上計算機;電視機;機頂盒;智能卡;游戲控制臺;其它移動設備或消費者電子設備等。

2-預定函數的實現和執(zhí)行

如下文將更加詳細描述的,本發(fā)明的實施例涉及預定函數F或與其相關。函數F可以是被布置成對一個或多個輸入進行操作(或處理)以生成對應輸出的任何函數(或運算或進程或映射或計算或算法)。稍后提供預定函數F的一些具體示例,但將認識到的是,本發(fā)明的實施例不限于下面討論的具體示例。

如下文將會更詳細地描述的,函數F是這樣的函數,即,可以針對其定義一個或多個對應函數(為便于參考,本文中稱之為“子函數”)F1,…,FN使得對于用于函數F的輸入集{x1,...,xW}可以通過以下步驟來生成根據函數F的對應于輸入集{x1,...,xW}的輸出集{y1,...,yV}:

(a)將該輸入集{x1,...,xW}表示為對應的值集{p1,...,pM},其中,每個值pj(j=1,...,M)都包括對應的多個輸入中的每個輸入的至少一部分;

(b)通過將每個子函數Fj(j=1,...,N)應用于值集{p1,...,pM}中的一個或多個值的對應集合以生成相應結果qj來從值集{p1,...,pM}生成一個或多個結果的集合{q1,...,qN};以及

(c)構成每個輸出yi作為所述結果中的對應的一個的一部分、或者作為對應的多個結果中的每個結果的至少一部分的組合。

因此,在下面的描述中,使用以下術語:

? xi:用于函數F的輸入,并且具體地,輸入集{x1,...,xW}中的第i個輸入。

? W:用于要根據本發(fā)明的實施例一起處理的函數F的輸入的個數,W是大于1的整數。

? yi:來自函數F的輸出,并且具體地,yi是來自函數F的對應于輸入集{x1,...,xW}的輸出集{y1,...,yV}中的第i個輸出。

? V:來自函數F的對應于用于函數F的輸入集{x1,...,xW}的輸出的個數,V是大于或者等于1的整數。

? pj:根據用于函數F的輸入集{x1,...,xW}所生成的值,并且具體地,pj是根據輸入集{x1,...,xW}所生成的值集{p1,...,pM}中的第j個值。

? M:根據用于函數F的輸入集{x1,...,xW}所生成的值的個數,M是大于1的整數。

? qj:從值集{p1,...,pM}中的一個或多個值通過對應的子函數Fj生成的結果,并且具體地,qj是結果集{q1,...,qN}中的第j個結果。

? N:從值集{p1,...,pM}生成的結果的個數,N是大于或者等于1的整數。

? Fj:用于生成第j個結果qj的子函數。雖然本文中使用術語“子函數”,但是將認識到的是,Fj其自身就是函數并且不一定是預定函數F的特定部分或子例程。

在一些實施例中,V=W,并且針對i=1,...W,yi=F(xi)。在其它實施例中,函數F被布置成一起處理多個輸入以構成單個輸出。作為一個示例,函數F可以具有三個輸入參數(或運算對象),使得y1=F(x1,x2,x3), y2=F(x4,x5,x6), y3=F(x7,x8,x9), ...,在該情況中,V=W/3;作為另一示例,函數F可以具有兩個輸入參數(或者運算對象),使得y1=F(x1,x2),y2=F(x2,x3),y3=F(x3,x4),...,在該情況中,V=W-1。將認識到的是,存在輸出yi和輸入xi之間的其它關系(以及因而的W和V之間的其它關系),并且本發(fā)明的實施例并不限于任何特定關系。

在一些實施例中,無論向函數F提供哪個/哪些輸入值xi,針對函數F執(zhí)行的操作/處理都相同。例如,在上面的示例性函數中,其中針對i=1,...W,yi=F(xi),可以基于與索引i無關的xi計算輸出yi——即,針對1≤i<k≤W,如果xi= xj,則yi=F(xi)=F(xj)=yj。同樣地,在上面的示例性函數中,其中y1=F(x1,x2), y2=F(x2,x3), y3=F(x3,x4), ...,可以基于與索引i無關的xi和xi+1計算輸出yi——即,針對1≤i<k<W,如果xi= xj且xi+1= xj+1,則yi=F(xi,xi+1)= F(xj,xj+1)=yj。但是,在其它實施例中,取決于向函數F提供哪個/哪些輸入值xi,對函數F執(zhí)行的操作/處理可以不同。這可以被視為對函數F執(zhí)行的操作/處理取決于索引i。例如,函數F可被定義為針對i=1,...W,yi=F(xi)=xi+i。同樣地,函數F可被定義為yi=F(xi, xi+1)=ixi-3i+(xi+1+i)/2。同樣地,函數F可被定義為yi=F(xi,xi+1)=Mixi+Mi+1xi+1,其中Mi和Mi+1是具有輸入向量xi和xi+1的乘法矩陣。當然,此類函數的其它示例是可能的。

如稍后將描述的,可以以上述方式實現所有計算機實現的函數F,使得本發(fā)明的實施例可應用于所有預定的計算機實現的函數F。

現在在下面參考圖2和3描述本發(fā)明的實施例。圖3是示出了用于執(zhí)行函數F的方法300的流程圖,并且圖2示意性地示出了在實現方法300時執(zhí)行函數F所涉及的函數或操作以及用于執(zhí)行函數F的數據流。

方法300在步驟302處開始,在其處,獲取輸入集{x1,x2,...,xW}??梢灾辽俨糠值赝ㄟ^接收用于輸入集{x1,x2,...,xW}的輸入中的一個或多個來獲取輸入集{x1,x2,...,xW}——例如,實現步驟302的第一模塊可以使從第二模塊提供給該第一模塊的用于輸入集{x1,x2,...,xW}的輸入xi中的一個或多個作為到第一模塊的輸入。附加地或替換地,可以至少部分地通過訪問或檢索用于輸入集{x1,x2,...,xW}的輸入中的一個或多個來獲取輸入集{x1,x2,...,xW}——例如,實現步驟302的模塊可以從存儲器(諸如存儲器106)訪問或讀取輸入xi中的一個或多個。因此,如本文中使用的術語“獲取”將被視為意為“接收”(或者以“被動”的方式“被提供”)或“訪問”(或者以更多的“主動”的方式“檢索”或者“讀取”)或者接收和訪問二者的組合。

對于輸入集{x1,x2,...,xW},W是大于1的整數——因此,獲取多個輸入x1,x2,...,xW。

可以單獨地獲取輸入x1,x2,...,xW中的一個或多個(例如,可以一次一個地獲取輸入x1,x2,...,xW,使得例如,針對i=1,...,W-1在輸入xi之后獲取輸入xi+1)。附加地或替換地,可以將輸入x1,x2,...,xW中的兩個或更多個作為一組一起獲?。ɡ纾梢岳缤ㄟ^訪問或讀取存儲所述多個輸入x1,x2,...,xW的存儲器塊而作為包括整個集合{x1,x2,...,xW}的單個數據量而獲取輸入x1,x2,...,xW)。將認識到的是,可以以其它方式/分組獲取輸入x1,x2,...,xW

每一個輸入x1,x2,...,xW都是適用于函數F的運算對象或參數的值(或量或數據元或運算對象)。例如,如果函數F是用于處理K位整數的,那么輸入x1,x2,...,xW中的每一個都是K位整數。

將一起處理輸入集{x1,x2,...,xW},使得可以獲?。ɑ蛘叽_定或者計算)對應的輸出集{y1,y2,...,yV},如根據下面的描述將變得顯而易見的。在這里,從輸入集{x1,x2,...,xW}生成的輸出的數目V是大于或者等于1的整數。在一些實施例中,V=W;在其它實施例中,V≠W。

如本文中所使用的,術語“集”意為以特定順序的元素的集合或組——例如,如果x1不同于x2,則集合{x1,x2,x3,x4,...,xW}不同于集合{x2,x1,x3,x4,...,xW}。因此,可以將(如本文中所使用的)集合視為元素的向量或序列或列表或矩陣,即,該集合的元素是以特定順序的(通過索引/下標表示該順序)。

接下來在步驟304處,從輸入集{x1,...,xW}生成值集{p1,...,pM}。在這里,M是大于1的整數,使得從輸入集{x1,...,xW}生成多個值p1,...,pM。

在步驟304處,根據{p1,...,pM}=D({x1,...,xW})生成值集{p1,...,pM},其中D是將W個輸入xi的集合映射到M個值的集合的可逆函數。本文中,函數D將被稱為“分布函數”。特別地,函數D是預定函數,其具有如下性質:每一個值pj(j=1,...,M)包括對應的多個輸入中的每個輸入的至少一部分。換言之,對于每一個值pj(j=1,...,M),存在mj個不同索引的對應集合(其中,對于1≤k≤mj,1≤αj,k≤W,并且其中,mj>1),使得pj包括中的每一個的至少一部分。因此,針對對應于(或者至少部分地定義了)分布函數D的函數Dj,。對于值pj(j=1,...,M),屬于mj個輸入的對應集合的第k個輸入(即,輸入)的至少一部分將被表示為部分Sj,k(1≤k≤mj)。下面更詳細地描述這點。

對于每個值pj(j=1,...,M),對應的多個輸入可以是輸入x1,...,xW中的任何兩個或多個,并且特別地,對應的多個輸入可以是整個輸入集{x1,...,xW}(使得mj=W)或者是輸入集{x1,...,xW}的真子集(使得mj<W)。對應的多個輸入中的輸入的數目mj可以在值pj之間不同。因此,在一些實施例中,對于所有1≤j1<j2≤M,;在其它實施例中,存在針對其的索引j1和j2。

對于每個值pj(j=1,...,M),屬于mj個輸入的對應集合的第k個輸入的(即,輸入的)部分Sj,k可以是該輸入的任何部分,并且特別地,可以是整個該輸入或者該輸入的一部分(例如,一位或者多個位,其可以在該輸入的位表示中是相鄰的或者不相鄰的)。附加地,分別屬于mj個輸入的對應集合的第k1個和第k2個輸入的(即,輸入和的)部分和部分可以被定義為其相應輸入的相同部分或者可以是其相應輸入的不同部分。

圖4示意性地示出了輸入集{x1,x2,...,xW}與值集{p1,...,pM}之間的示例關系。在該示例中,W=3(使得存在3個輸入xi),M=4(使得存在在步驟304處生成的4個值pj),并且每個輸入是8位數字。如可以看到:

? 輸入x1具有3個部分,S1,1、S2,3和S3,3,其分別促成值p1、p2和p3。因此,x1是不促成所有值pj的輸入的示例(因為x1不促成值p4)。

? 輸入x2具有4個部分,S2,1、S1,2、S4,2和S3,2,其分別促成值p2、p1、p4和p3。因此,x2是促成所有值pj的輸入的示例。在圖4中,部分S1,2被示出為由兩個區(qū)段S1,2a和S1,2b組成——簡要地描述針對這點的原因。

? 輸入x3具有4個部分,S2,2、S4,1、S3,1和S1,3,其分別促成值p2、p4、p3和p1。因此,x3是促成所有值pj的輸入的另一示例。注意,部分S3,1不是x3的連續(xù)部分——因此,在圖4中,部分S3,1被圖示出為由x3的兩個分離的區(qū)段(標為S3,1a和S3,1b)構成。將認識到的是,部分Sj,k可以由輸入xi的任何數目個分離的區(qū)段組成。

? 值p1由部分S1,1、S1,2和S1,3構成。在圖4中,部分S1,1、S1,2和S1,3不僅僅被連結以便構成值p1——例如,在構成值p1時,將部分S1,2拆分成(由于部分S1,3)與彼此分離的兩個區(qū)段S1,2a和S1,2b。將認識到的是,在構成值pj時,部分Sj,k可以被分離成任何數目的單獨區(qū)段。

? 值p2由部分S2,1、S2,2和S2,3構成。

? 值p3由部分S3,1、S3,2和S3,3構成(其中,部分S3,1由輸入x3的區(qū)段S3,1a和S3,1b組成)。

? 值p4由部分S4,1和S4,2構成。因此,值p4是并非從所有輸入xi接收貢獻的值pj的示例。

每個部分Sj,k是輸入xi中的一個的某些或者全部。如果部分Sj,k是輸入xi的全部,則Sj,k=xi。替換地,如果部分Sj,k僅為輸入xi的某些,則這意味著,給定輸入xi的表示(例如,二進制、十進制、十六進制等),則Sj,k包括在該表示中的符號中的一些(例如,表示的位中的一些,或者表示的十進制或十六進制的值/符號中的一些)。例如,參考圖4,輸入x1是假設值為37的八位值,并且因此具有(00100101)的二進制表示——那么,一個部分可以是這些特定位中的一個或多個(例如,取作為前四位的“0010”以構成部分S1,1,或者取作為后兩位的“01”以構成部分S2,3,或者甚至取作為第3、第6和第8位的“111”以構成不同部分等)。因此,輸入xi的部分Sj,k可以被視為包括該輸入xi的表示中的一個或多個分量或元素或區(qū)段或符號。

雖然圖4將輸入xi的部分圖示為彼此不重疊,但是將認識到的是,輸入xi的部分中的兩個或多個可以彼此重疊,即,用于構成值的輸入xi的部分可以與用于構成值的輸入xi的部分重疊(或者甚至相同)。

每個值pj(j=1,...,M)通過組合這些部分(例如,通過連結/合并/混合等)而由其相應部分Sj,k(k=1,...,mj)構成。如稍后將描述的(參考圖7a和7b中所示的示例),除了部分Sj,k(k=1,...,mj)之外,值pj還可以包括附加的分量/數據。例如,值pj可以包括部分Sj,k(k=1,...,mj)中的一個或多個(潛在地全部)的開頭中的一個或多個“間隔位”(其最初可以被設置為0)——此類間隔位由于固有地構造了用于進位的空間而使實現對值pj執(zhí)行計算(例如,如果要將兩個值和值加在一起的話)。

稍后將提供分布函數D(以及因而的函數Di)的一些具體示例,并且將認識到的是,本發(fā)明的實施例不限于下面討論的具體示例。但是,為了在該階段有助于理解,分布函數D的示例如下:

? 假設每個輸入xi(i=1,...,W)是M位的值,使得輸入xi的二進制表示是針對位bi,j的bi,1bi,2...bi,M

? 通過連結輸入xi(i=1,...,W)的第j位獲取值pj(j=1,...,M),使得例如,值pj的二進制表示為b1,jb2,j...bW,j(但是將認識到的是,其它排序是可能的,并且排序可以在值pj之間變化)。

? 因此,通過pj=D(x1,...,xW)=b1,jb2,j...bW,j來定義函數Dj

? 在這種情況下,針對j=1,...,M且k=1,...,W,mj=W且αj,k=k。

? 因此,在分布函數D的這個示例中,對于每個值pj(j=1,...,M),對應的多個輸入是整個輸入集x1,...,xW,并且取自對應的多個輸入中的第k個輸入的部分Sj,k是該輸入的第k位。

將認識到的是,在步驟304處,值集{p1,...,pM}是輸入集{x1,...,xW}的表示,該表示是根據分布函數D。值pj可以被生成為(例如,存儲器106中的)不同于輸入集{x1,...,xW}的一些數據(使得有別于輸入集{x1,...,xW}且在存儲器中的不同于輸入集{x1,...,xW}的地址處存儲值pj)。但是,將認識到的是,實現步驟304的模塊可以從已被存儲以表示輸入集{x1,...,xW}的現存的一些數據來確定(或生成)值pj,例如通過指定值pj由在特定存儲器地址處的一些數據組成,其中那些存儲器地址存儲相關輸入xi的相應部分(在這種情況下,這些特定存儲器地址隱含地定義或表示分布函數D)。因此,當隨后使用值pj時,利用值pj的模塊可以僅參考存儲相關輸入xi的相應部分的特定存儲器地址——在這種情況下,可以省略明確地生成值pj的步驟,因為該模塊借助于使用正確的存儲器地址而隱含地使用值pj。

因此,步驟304可以被視為將輸入集{x1,...,xW}(隱含或明確)表示為值集{p1,...,pM}的步驟。

接下來,在步驟306處,從值集{p1,...,pN}生成結果集{q1,...,qN}。在這里,N是大于或者等于1的整數。

特別地,對于j=1,...,N,存在nj個不同索引的對應集合(其中,對于1≤k≤nj且nj≥1,),使得根據預定函數Fj(即,)作為nj個值的集合的函數來計算qj。在這里,函數Fj對應于(或者至少部分地定義)函數F——因此,函數Fj可以被視為對應于函數F的子函數。

稍后將給出如何定義并使用函數F1,...,FN的示例。

接下來,在步驟308處,從結果集{q1,...,qN}生成對應于輸入集{x1,...,xW}的輸出集{y1,...,yV}。特別地,根據{y1,...,yV}=E({q1,...,qN})生成輸出集{y1,...,yV},其中,E是將N個結果qj的集合映射到V個輸出的集合的可逆函數。本文中,函數E將被稱為“分離函數”。特別地,函數E是預定函數,其具有以下性質:每個輸出yi或者是結果中對應的一個的一部分或者是對應的多個結果中的每個結果的至少一部分的組合。換言之,對于每個值yi(i=1,...,V),存在vi個不同索引的對應集合(其中,針對1≤k≤vi且vi≥1,1≤γi,k≤V),使得yi包括中的每個的至少一部分。因此,針對對應于(或至少部分地定義了)分離函數E的函數Ei,。通過(由其對應函數E1,...,EV定義的)分離函數E從結果集{q1,...,qN}的輸出集{y1,...,yV}的產生以與通過(由其對應函數D1,...,DM定義的)分布函數D從輸入集{x1,...,xW}的值集{P1,...,PM}的產生類似的方式進行操作,使得上文中對步驟304的描述同樣適用于步驟308。

在一些實施例中,當N=M且W=V時,分離函數E是分布函數D的逆函數。

那么,本質上,作為處理單個輸入以生成對應的輸出y的替代(其中,該處理獨立于其它輸入中的任何),通過以下步驟一起處理多個輸入x1,...,xW以生成對應的多個輸出y1,...,yV:(a)生成值p1,...,pM,其中,每個pi取決于輸入中的多個;(b)使用(基于函數F的)函數處理值p1,...,pM以生成結果q1,...,qN;以及(c)從生成的結果q1,...,qN中分離出輸出y1,...,yV。

示例1:通用查找表

初始示例將有助于理解如上所述的方法300??紤]通過函數F實現的預定查找表。下面參考圖5a-5c描述可以如何將方法300應用于這樣的函數F的示例。

假設到查找表F的輸入為輸入x,其為M位的值,其中,x的第k位是bk使得x的二進制表示為bMbM-1...b2b1(使得針對k=1,...,M,bk為0或1)。在下文描述的示例中,M=8,使得x的二進制表示為b8b7b6b5b4b3b2b1。還假設來自查找表F的輸出(即,響應于接收到輸入x而查找到的值)是輸出y,其為N位的值,其中,y的第k位為ck使得y的二進制表示為cNcN-1...c2c1(使得對于k=1,...,N,ck為0或1)。在下文描述的示例中,N=8,使得y的二進制表示為c8c7c6c5c4c3c2c1。圖5a中示意性地圖示出了這點。當然,將認識到的是,輸入x可以包括不同數目的位且輸出y可以包括不同數目的位(其可以不同于用于輸入x的位數),使得令x和y都為8位值僅是出于例證性目的。

將認識到的是,可以將輸出位ck中的每一個計算或表達為應用于輸入位bi的相應邏輯表達式Bk,即ck=Bk(b1,b2,...,bM)。在圖5b中關于輸出位c4示意性地圖示出這點。

可以使用一個或多個邏輯AND(與)(本文中用∧表示AND)、零個或多個邏輯OR(或)(本文中用∨表示OR)以及零個或多個邏輯NOT(非)(本文中用┐表示NOT)來表達函數Bk。特別地,假定查找表導致輸出位ck針對n個輸入值X1,...,XN(即,當x取X1,...,Xn中的任一個的值時)取值1并且針對用于輸入x的所有其它可能值ck取值0。對于每個i=1,...,n,令Ri為由(即,對于j=1,...,M,表達式b'j的AND)定義的對應邏輯表達式,其中,對于j=1,...,M,如果輸入值Xi的第j位bj為1則b'j=bj,且如果輸入值Xi的第j位bj為0則。例如,對于十進制為53或者二進制為(00110101)的8位輸入值Xi,那么。因此,Ri(b1,b2,...,bM)針對53的輸入值僅計值為值1。然后,Bk可以被定義為,即,通過將表達式Ri(i=1,...,n)OR到一起(如果n=1,則不需要OR)。然后,對于取X1,X2,...,Xn中的一個的值的輸入,Bk僅計值為值1。例如,假定n=3且如果輸入x取值31(二進制為(00011111))、53(二進制為(00110101))或149(二進制為(10010101))則c4僅取1的值。那么:

使得B4可以被表達為:

。

當然,存在表達Bk的更有效或優(yōu)化、即采用更少的邏輯運算的方式。例如,可以如下表達上文中的B4

并且進一步更優(yōu)化的表達式是可能的。實際上一般而言,期望的是優(yōu)化的表達式可以包含10%到20%之間的通過將子表達式Ri簡單地OR到一起而生成的上面的“樸素的(naive)”邏輯表達式。

因此,查找表F可以被視為通過函數B1,...,BN實現,使得在給定輸入x=bMbM-1...b2b1的情況下,針對k=1,...,N,由ck=Bk(b1,b2,...,bM)定義對應的輸出y=cNcN-1...c2c1

雖然通過使用N個分離的布爾表達式B1,...,BN來實現查找表F可能引入性能損失,但是通過執(zhí)行數據級并行計算可以大幅減輕這點。特別地,給定輸入集{x1,x2,...,xW}的情況下,可以獲取或生成M個值的集合{p1,...,pM},其中每個值pk是W位的值,其中值pk的第w位是輸入xw的第k位(針對w=1,...,W且k=1,...,M)。換言之,輸入集{x1,x2,...,xW}可以被表達或表示為M個值的集合{p1,...,pM}。這在圖5c中示意性地圖示出,其中輸入值x1,...,xW被示出為圖5c左側上的矩陣的行,并且值p1,...,pM被示出為圖5c左側上的矩陣的列。圖5c類似地示出了輸出集{y1,y2,...,yV}(其對應于輸入集{x1,x2,...,xW})可以如何被表示或表達為N個結果的集合{q1,...,qN}——在這里,在給定F的種類為查找表的情況下,V=W。特別地,每個中間結果qk是V位的值,其中,中間結果qk的第v位是輸出yv的第k位(對于v=1,...,V且k=1,...,N)。

因此,在該示例中,在圖3的步驟304處使用的分布函數D是通過將每個值pk設置為W位的值而將輸入集{x1,x2,...,xW}映射到值集{p1,...,pM}的函數,其中值pk的第w位是輸入xw的第k位(對于w=1,...,W且k=1,...,M)。注意,采用分布函數D,每個值pj包括對應的多個輸入(在該示例中,所述對應的多個輸入是整個輸入集{x1,x2,...,xW})中的每個輸入的至少一部分(即,單個位)。同樣地,在該示例中,在圖3的步驟308處使用的分離函數E是通過將每個輸出yv設置為N位的值而將結果集{q1,q2,...,qN}映射到輸出集{y1,...,yV}的函數,其中輸出yv的第k位是結果qk的第v位(對于v=1,...,V且k=1,...,N)。注意,采用分離函數E,每個輸出yi包括對應的多個結果(在該示例中,所述對應的多個結果是整個結果集{q1,q2,...,qN})中的每個結果的至少一部分(即,單個位)。

在圖5b中,函數Bk將單個輸入xi的位(b1,...,bM)映射到了對應輸出yi的第k位(ck)。在圖5c中,在存在多個輸入(x1,...,xW)的情況下,用函數Fk替代函數Bk,函數Fk將值p1,...,pM映射到中間結果qk。函數Fk與函數Bk為相同的邏輯表達式,除此之外,在函數Bk中用于邏輯運算的運算對象(b1,...,bM)是單個位,而在函數Fk中,用于邏輯運算的運算對象(p1,...,pM)是多位值。對于上面給出的示例,其中,

對應的函數F4可以被表達為

(其中,F4中的、和是對多位運算對象的逐位的AND、OR和NOT運算)。例如,中間值q4的第k位是將函數B4應用于第k個輸入xk的位的結果,并且(第k位位置中的)該結果是通過將函數F4應用于值p1,...,pM。

由于處理器經常被布置成取決于處理器的字長(例如,通過具有32位或64位AND、OR和NOT運算符)來對多位運算對象執(zhí)行邏輯運算,因此可以同時從輸入集{x1,x2,...,xW}獲取整個輸出集{y1,y2,...,yW}。這有助于減輕由于使用布爾表達式實現查找表而引發(fā)的性能損失。

示例2:特定查找表

下面提供上文章節(jié)2.1中闡述的“通用查找表”概念的特定示例以用于具體示例查找表。(為了便于解釋)該具體查找表相當小,但是如上面章節(jié)2.1中所述,將認識到的是,“通用查找表”概念可以應用于其它潛在地更大的查找表。

考慮定義函數F的以下查找表:

在此處,到函數F的輸入是3位數字且輸出是4位數字。因此,M=3且N=4。上表如下定義函數B1,...,B4

使得通過以下來定義函數F1,...,F4(即用于函數F的子函數)

考慮5個輸入的集合{x1,x2,x3,x4,x5},其中,x5=5=(101),x4=7=(111),x3=2=(010),x2=0=(000)且x1=4=(100)——即W=5。那么,如上面討論的那樣,由三個輸入的集合{x1,x2,x3}構成值集{p1,p2,p3},其中每個值pi都是W位的值。因此,p3=(11001),p2=(01100)且p1=(11000)。

然后,我們注意到,根據以下由值集{p1,p2,p3}構成結果集{q1,q2,q3,q4}:

。

如上所討論的,由四個結果的集合{q1,q2,q3,q4}構成五個輸出的集合{y1,y2,y3,y4,y5},其得出y5=(1011),y4=(0010),y3=(0000),y2=(0000)且y1=(0101)。

示例3:實現示例2的查找表的不同方式

上文章節(jié)2.2中定義的查找表不需要使用上文章節(jié)2.1中闡述的“通用查找表”概念來實現。存在其中可以將圖3的方法300應用于該查找表(并且甚至應用于一般性查找表)的許多方式。下面闡述一個另外的示例方式,但是將認識到的是,其它方式也是可能的。再次考慮定義函數F的查找表:

。

給定五個輸入的集合{x1,x2,x3,x4,x5},其中每個輸入xi是3位的值,通過以下來定義分布函數D:

p1=(x1的位3)(x1的位2)(x2的位3)(x2的位2)

p2=(x1的位1)(x2的位1)x3x4x5。

因此,給定取值x5=5=(101),x4=7=(111),x3=2=(010),x2=0=(000)且x1=4=(100)的五個輸入的集合{x1,x2,x3,x4,x5},如上面討論的那樣,根據分布函數D由三個輸入的集合{x1,x2,x3}構成值集{p1,p2},使得p1=(1000)且p2=(00010111101)。

如下定義函數F1A、F1B、F1C、F2A、F2B、F3A、F3B、F3C、F3D和F3E

然后通過以下定義子函數F1、F2和F3

F1(p1,p2)=F1A(p1,p2)F1B(p1,p2)F1C(p2),即,F1A(p1,p2)與F1B(p1,p2)與F1C(p2)的輸出的連結;

F2(p2)=F2A(p2)F2B(p2),即,F2A(p2)與F2B(p2)的輸出的連結;以及

F3(p1,p2)=F3A(p1,p2)F3B(p1,p2)F3C(p2)F3D(p2)F3E(p2),即,F3A(p1,p2)與F3B(p1,p2)與F3C(p2)與F3D(p2)與F3E(p2)的輸出的連結。

然后,如果q1=F1(p1,p2)且q2=F2(p2)且q3=F3(p1,p2),則對于如上導出的p1=(1000)、p2=(00010111101),q1=(010000),q2=(0010),q3=(0100001011)。圖6中示意性地圖示出函數F1A、F1B、F1C、F2A、F2B、F3A、F3B、F3C、F3D和F3E相對于結果q1、q2和q3的作用。

如下定義分離函數E:

y1=(q1的位6)(q1的位5)(q3的位10)(q3的位9)

y2=(q1的位4)(q1的位3)(q3的位8)(q3的位7)

y3=(q1的位2)(q1的位1)(q3的位6)(q3的位5)

y4=(q2的位4)(q2的位3)(q3的位4)(q3的位3)

y5=(q2的位2)(q2的位1)(q3的位2)(q3的位1)。

那么,基于如上面導出的q1=(010000)、q2=(0010)、q3=(0100001011),y1=(0101),y2=(0000),y3=(0000),y4=(0010)且y5=(1011)。

示例4:任何確定性函數

任何計算機實現的函數都可以被實現為查找表(即使是潛在地大的查找表)。即使函數的輸出取決于時間,那么時間值也可以被視為是到查找表的輸入。因此,使用上面章節(jié)2.1的原理,可以使用圖3的方法300來實現任何計算機實現的函數F。

示例5:有限脈沖響應濾波器

下文將描述方法300的另外的示例,其中,該示例不依賴于上面的章節(jié)2.1中描述的“查找表原理”。因此,該示例用于示出,雖然任何計算機實現的函數都可以被實現為查找表使得可以使用上面章節(jié)2.1中描述的“查找表原理”來創(chuàng)建以方法300的形式的對應實現,但是可以通過其它途徑來實現以方法300的形式的函數F的其它(潛在地更高效的)實現。

考慮通過函數F實現的有限脈沖響應(FIR)濾波器。特別地,給定輸入的序列(或集合)x1,x2,...,FIR濾波器根據(其中,L為濾波器的長度且為濾波器權系數/抽頭)生成對應的輸出序列(或集合)yL,yL+1,...。下面使用具體示例,其中,L=3且,使得,但是將認識到的是,可以類似地實現其它示例FIR濾波器。

給定輸入集{x1,x2,x3,x4,x5}(因此W=5),構成值集{p1,p2,p3}(因此,M=3)。特別地,通過連結以下來構成值pj:(a)一個或多個第一間隔0位;(b)輸入xj;(c)一個或多個第二間隔0位;(d)輸入xj+1;(e)一個或多個第三間隔0位;以及(f)輸入xj+2。這在圖7a中示意性地圖示出。如圖可見,值pj中的每一個包括來自輸入集{x1,x2,x3,x4,x5}的對應的多個輸入中的每一個的至少一部分——特別地,對于值pj,來自輸入集的對應的多個輸入為輸入xj、xj+1、xj+2,并且促成值pj的這些輸入中的每一個的部分為整個該輸入。間隔0位用于使實現在執(zhí)行針對下面闡述的計算的值p1、p2和p3的加法時包括進位。

從值集{p1,p2,p3}構成結果集{q1}(因此,N=1)。特別地,。

從結果集{q1}構成輸出集{y3,y4,y5}(因此,V=3)。特別地,結果q1包括輸出y3、y4、y5,其中,y3占據q1中對應于p1中由x1占據的空間/部分的空間/部分,y4占據q1中對應于p1中由x2占據的空間/部分的空間/部分,且y5占據q1中對應于p1中由x3占據的空間/部分的空間/部分。這在圖7a中示意性地圖示出。

作為該示例的輕微修改,給定輸入集{x1,x2,...,x8}(因此,W=8),構成值集{p1,p2,p3,p4}(因此M=4)。特別地,通過連結以下來構成值pj:(a)一個或多個第一間隔0位;(b)輸入xj;(c)一個或多個第二間隔0位;(d)輸入xj+2;(e)一個或多個第三間隔0位;以及(f)輸入xj+4。這在圖7b中示意性地圖示出。如圖可見,值pj中的每一個包括來自輸入集{x1,x2,...,x8}的對應的多個輸入中的每一個的至少一部分——特別地,對于值pj,來自輸入集的對應的多個輸入為輸入xj、xj+2、xj+4,并且促成值pj的這些輸入中的每一個的部分為整個該輸入。間隔0位用于使實現在執(zhí)行針對下面闡述的計算的值p1、p2、p3和p4的加法時包括進位。

從值集{p1,p2,p3,p4}構成結果集{q1,q2}(因此,N=2)。特別地,且。

從結果集{q1,q2}構成輸出集{y3,y4,...,y8}(因此,V=6)。特別地,結果q1包括輸出y3、y5、y7,其中,y3占據q1中對應于p1中由x1占據的空間/部分的空間/部分,y5占據q1中對應于p1中由x3占據的空間/部分的空間/部分,且y7占據q1中對應于p1中由x5占據的空間/部分的空間/部分;結果q2包括輸出y4、y6、y8,其中,y4占據q2中對應于p1中由x1占據的空間/部分的空間/部分,y6占據q2中對應于p1中由x3占據的空間/部分的空間/部分,且y8占據q2中對應于p1中由x5占據的空間/部分的空間/部分。這在圖7b中示意性地圖示出。

示例6:查找表集

如上文章節(jié)2.1中所述,示例1例證了實現單個查找表的函數F。換言之,對于每個輸入xi(i=1,...,W),通過在查找表中將yi設置成查找xi的結果來生成輸出yi。在示例1中,無論索引i為何值都使用相同的查找表。假定,替代地,對于每個輸入xi(i=1,...,W),通過在對應的查找表LTi中將yi設置為查找xi的結果來生成輸出yi,其中查找表LTi可以基于索引i而變化,即,可以存在索引i和j,對于其LTi≠LTj。因此,。

再次地,可以假設到查找表LTi的輸入是輸入xi,輸入xi為M位的值,其中,xi的第k位為bi,k,使得xi的二進制表示為bi,Mbi,M-1…bi,2bi,1(使得對于k=1,...,M,bi,k為0或1)。在下面描述的示例中,M=8,使得xi的二進制表示為。還假設,來自查找表LTi的輸出(即,響應于接收到輸入xi而查找到的值)為輸出yi,輸出yi為N位的值,其中,yi的第k位為ci,k,使得yi的二進制表示為(使得對于k=1,...,N,ci,k是0或1)。在下面描述的示例中,N=8,使得yi的二進制表示為。正如示例1一樣,在圖5a中示意性地圖示出這點(除了在圖5a中沒有示出下標i之外)。當然,將認識到的是,輸入xi可以包括不同數目的位,并且輸出yi可以包括不同數目的位(其可以不同于針對輸入xi的位數),使得令xi和yi都為8位值僅是出于例證性目的。

將認識到的是,輸出位ci,k中的每一個可以被計算或表達為被應用于輸入xi的位的相應的邏輯表達式Bi,k,即,。再次地,正如示例1一樣,在圖5b中示意性地圖示出這點(除了在圖5b中沒有示出下標i之外)??梢耘c在針對示例1用于確定函數Bk的描述中闡述的相同的方式參考查找表LTi確定邏輯表達式Bi,k。

因此,查找表LTi可以被視為由函數Bi,1,...,Bi,N來實現,使得對于k=1,...,N且i=1,...,W,給定輸入xi=bi,Mbi,M-1…bi,2bi,1,由ci,k=Bi,k(bi,1,bi,2,...,bi,M)定義對應輸出。

正如示例1一樣,給定輸入集{x1,x2,...,xW},可以獲取或生成M個值的集合{p1,...,pM},其中每個值pk都為W位的值,其中,值pk的第w位是輸入xw的第k位(對于w=1,…,W且k=1,…,M)。換言之,輸入集{x1,x2,...,xW}可以被表達或表示為M個值的集合{p1,...,pM}。這在圖5c中示意性地圖示出,其中輸入值x1,...,xW被示出為圖5c左側上的矩陣的行,并且值p1,...,pM被示出為圖5c左側上的矩陣的列。圖5c類似地示出了輸出集{y1,y2,...,yV}(其對應于輸入集{x1,x2,...,xW})可以如何被表示或表達為N個結果的集合{q1,...,qN}——在這里,在給定F的種類的情況下,V=W。特別地,每個中間結果qk是V位的值,其中,中間結果qk的第v位是輸出yv的第k位(對于v=1,...,V且k=1,...,N)。

因此,在該示例中,在圖3的步驟304處使用的分布函數D是通過將每個值pk設置為W位的值而將輸入集{x1,x2,...,xW}映射到值集{p1,...,pM}的函數,其中值pk的第w位是輸入xw的第k位(對于w=1,...,W且k=1,...,M)。注意,采用分布函數D,每個值pj包括對應的多個輸入(在該示例中,所述對應的多個輸入是整個輸入集{x1,x2,...,xW})中的每個輸入的至少一部分(即,單個位)。同樣地,在該示例中,在圖3的步驟308處使用的分離函數E是通過將每個輸出yv設置為N位的值而將結果集{q1,q2,...,qN}映射到輸出集{y1,...,yV}的函數,其中輸出yv的第k位是結果qk的第v位(對于v=1,...,V且k=1,...,N)。注意,采用分離函數E,每個輸出yi包括對應的多個結果(在該示例中,所述對應的多個結果是整個結果集{q1,q2,...,qN})中的每個結果的至少一部分(即,單個位)。

可以如下定義分別地計算結果qk(k=1,...,N)的函數Fk(k=1,...,N)。對于k=1,...,N且對于v=1,...,V,結果qk=Fk(p1,...,pM)的第v位被定義為,其中,對于i=1,...,M且j=1,...,W,pi,j是值pi的第j位。

示例7:具體示例

考慮其中W=4,M=2且如下定義函數F的情況:。那么,函數F可以被視為實現4個查找表LTi(i=1,...,4),即:

,使得LT1被定義為表格

,使得LT2被定義為表格

,使得LT3被定義為表格

,使得LT4被定義為表格

。

然后可以使用示例6中闡述的過程來定義值{p1,p2}和將確定結果{q1,q2}的函數F1和F2

示例8:另一具體示例

考慮其中W=V=2,M=N=3且函數F根據仿射變換來對輸入x1和x2(其二進制表示分別為(x1,3x1,2x1,1)和(x2,3x2,2x2,1))進行運算以獲得輸出y1和y2(其二進制表示分別為(y1,3y1,2y1,1)和(y2,3y2,2y2,1))的情況,其中,,,M是6×6的二進制矩陣,且B是6×1的二進制矩陣,其中,加法以2為模數。作為一個示例,令且,使得

。

這是其中預定函數F應用與其應用以從輸入(在這里是x1和x2)中的一個或多個獲取y2不同的處理以從那些輸入獲取y1的另一示例。

將值p1、p2和p3定義為其二進制表示為:,,的值。這定義了分布函數D。

將結果q1,...,q6定義為q1=y1,1,q2=y1,2,q3=y1,3,q4=y2,1,q5=y2,2,q6=y2,3。這定義了分離函數E。

那么,可以如下定義函數F1,...,F6

。

3-通過雙射函數的混淆

本發(fā)明的實施例的目的在于能夠在所謂的白盒環(huán)境中安全地執(zhí)行實現函數F的代碼。“白盒環(huán)境”是一種執(zhí)行環(huán)境,其中人們可以執(zhí)行大量的計算機代碼(或軟件)——其中,代碼實現函數F——并且人們可以檢查和修改代碼(或假設知道正在被實現的底層算法),和/或在執(zhí)行代碼期間,人們可以檢查和修改正被使用的數據的值(即,正被使用的存儲器的內容)、數據流和過程流程(或代碼中的指令的執(zhí)行順序)。因此,本發(fā)明的實施例的目的在于能夠提供或生成(實現函數F的)代碼使得,即使在白盒環(huán)境中執(zhí)行代碼,執(zhí)行代碼的人也不能確定到函數F的輸入和/或函數F的輸出和/或函數F所使用的機密信息的值。

下面,將使用一個或多個雙射函數(或變換或轉換)。雙射函數是單射(即,為一對一映射)且滿射(即,映射到整個特定值范圍上)的函數。如果用于函數T的可能的輸入的值域為域Dom,并且如果函數T為單射函數(使得當且僅當a=b時,T(a)=T(b)),則T是從Dom到范圍T(Dom)={T(a):a∈Dom}上的雙射函數。

初始的簡單示例將有助于理解使用雙射函數T可以如何幫助實現上述目的。在該示例中,雙射函數T是對于一些質數ψ和正整數n的Galois域GF(ψn)中的線性變換,即,T:GF(ψn)→GF(ψn)。例如,如果執(zhí)行代碼的處理器使用Z位寄存器用于其數據(例如,Z=32),那么Z位數字可以被視為Galois域GF(2Z)的元,使得ψ=2且n=Z。

考慮根據r=G(s1,s2)=s1+s2對Galois域GF(ψn)中的元s1和s2進行運算的預定函數G,其中,+為Galois域GF(ψn)中的加法。在該Galois域GF(ψn)中,加法s1+s2與XOR(異或)運算相同,使得r=G(s1,s2)=s1s2。令s1*、s2*和r*為根據Galois域GF(ψn)中的分別的線性變換T1、T2和T3的s1、s2和r的變換版本,使得對于Galois域GF(ψn)中的任意非零常數a、c和e以及Galois域GF(ψn)中的任意常數b、d和f(使得可以從GF(ψn)/{0}中隨機選擇常數a、c和e,并且可以從GF(ψn)中隨機選擇常數b、d和f),s1*=T1(s1)=a·s1+b,s2*=T2(s2)=c·s2+d且r*=T3(r)=e·r+f。那么,r*=e·(s1+s2)+f=e·(a-1(s1*+b)+c-1(s2*+d))+f=g·s1*+h·s2*+i,其中,g=e·a-1,h=e·c-1且i=e·(a-1b+c-1d)+f。

因此,給定輸入s1和s2的變換版本s1*=T1(s1)和s2*=T2(s2),計算結果r的變換版本r*=T3(r)而不必去除變換中的任何是可能的(即,不必從版本s1*和s2*導出s1和/或s2)。特別地,在通過變換T1、T2和T3的各自的參數(對于T1是a和b、對于T2是c和d以及對于T3是e和f)定義了變換T1、T2和T3的情況下,可以根據G*(s1*,s2*)=g·s1*+h·s2*+i來實現函數G的變換版本G*,其中,g=e·a-1,h=e·c-1且i=e(a-1b+c-1d)+f,使得可以計算r*=G*(s1*,s2*)而不用確定/揭露s1或s2作為處理中的中間步驟。然后可以從結果r的變換版本r*=G*(s1*,s2*)獲取結果r,因為r=e-1(r*+f)——因此可以使用線性變換T4(其為T3的逆)來從變換版本r*獲取結果r,其中,r=T4(r*)=e-1r*+e-1f。替換地,結果r的變換版本r*可以是到隨后函數的輸入。換言之,給定對輸入s1和s2進行運算以產生結果r的函數G,如果(例如,通過隨機地選擇針對變換的參數而隨機地,或者基于某些其它參數/數據)指定了變換T1、T2和T3,那么可以生成/實現函數G的變換版本G*,其中,函數G*對變換輸入s1*=T1(s1)和s2*=T2(s2)進行運算以根據r*=g·s1*+h·s2*+i產生變換結果r*=T3(r)。如果人們在白盒環(huán)境中實現函數G*,那么該人不能識別底層函數G正執(zhí)行什么運算,他也不能確定實際結果r,還有輸入s1和s2(因為在執(zhí)行函數G *時從不揭露這些值)。

注意,T1和T2中的一個或二者為恒等變換是可能的(即,如果對于s1的所有值T1(s1)=s1,那么T1是恒等變換,使得在上面的示例中a=1且b=0,并且如果T2(s2)=s2,那么T2是恒等變換,使得在上面的示例中c=1且d=0)。如果是這種情況,那么實現函數G*的人可以識別輸入s1所取的值(如果T1是恒等變換的話)和/或輸入s2所取的值(如果T2是恒等變換的話)。然而,只要T3不是恒等變換,那么該人就不能識別底層函數G正在執(zhí)行什么運算,該人也不能確定實際結果r。

同樣地,T3是恒等變換是可能的(即,如果對于r的所有值T3(r)=r,那么T3是恒等變換,使得在上面的示例中e=1且f=0)。如果是這種情況,那么實現函數G*的人可以識別輸出r所取的值。然而,只要T1和T2中的一個或二者不為恒等變換,那么該人就不能識別底層函數G正在執(zhí)行什么運算,該人也不能確定初始輸入s1和s2中的一個或二者。

將認識到的是,其它函數G可以被實現為對應的“變換版本”G*,其中,到函數G*的(一個或多個)輸入是到函數G的(一個或多個)輸入根據相應的單射(一對一)變換的變換版本,并且函數G*的(一個或多個)輸出是函數G的(一個或多個)輸出根據相應的單射變換的變換版本。變換不需要必然地是如上所述的線性變換,而是可以是任何其它種類的單射變換。因此,給定具有u個輸入s1,...,su和v個輸出r1,...,rv的函數G,可以實現函數G的變換版本G*,其中,G*具有輸入s1,...,su的變換版本s1*,...,s*u作為其輸入,并輸出r1,...,rv的變換版本r1*,...,rv*,其中,針對單射函數T1,...,Tu+v,si*=Ti(si)且ri*=Ti+u(ri)。函數Ti中的兩個或多個可以彼此相同是可能的。下面討論針對任何函數G可以完成這點的事實。

如下所述,XOR運算與關于常數的有條件分支一起構成圖靈完整的系統(tǒng)。這意味著可以僅使用(a)零個或多個XOR運算和(b)零個或多個關于常數的有條件分支來實現任何數學功能。

圖靈機是根據規(guī)則表操縱磁帶上的符號的概念設備。盡管簡單,但是圖靈機可以被適配成仿真任何計算機算法的邏輯。圖靈機在數學上建模在磁帶上機械地操作的機器。在該磁帶上是機器可以一次一個地使用磁帶頭讀取并寫入的符號。操作完全由有限的基本命令集來確定,諸如“在狀態(tài)42中,如果所見符號為0,則寫入1;如果所見符號為1,則變?yōu)闋顟B(tài)17;在狀態(tài)17中,如果所見符號為0,則寫入1并變?yōu)闋顟B(tài)6”等等。更確切地說,圖靈機包括:

1. 磁帶,其被劃分成一個接一個的格。每個格包含來自某有限字母表的符號。該字母表包含特殊空符號(此處寫為“B”)和一個或多個其它符號。假設磁帶向左側和向右側可任意延伸,即,圖靈機總是被提供有多達其計算所需的磁帶。假設之前未被寫入到的格被填充空符號。

2. 磁頭,其可以在磁帶上讀取并寫入符號并每次一個(且僅一個)格地左右移動磁帶。

3. 狀態(tài)寄存器,其存儲圖靈機的當前狀態(tài),該當前狀態(tài)是有限多的狀態(tài)之一。存在一個特殊的開始狀態(tài),以其初始化狀態(tài)寄存器。

4. 一個或多個指令(其每一個通常被表達為相應的五元組siaj→si1aj1dk)的有限表(有時被稱為動作表或變換函數),其指定:如果圖靈機當前處于狀態(tài)si且當前從磁帶讀取了符號aj(即,當前在磁頭下的符號為aj),那么圖靈機應實現以下操作序列:

? 在當前符號aj的位置中寫入aj1(符號aj1可以是空符號)。

? 如dk描述的那樣控制磁頭的位置,dk可以具有值:“L”指示將磁頭左移一格,“R”指示將磁頭右移一格;或者“N”指示不移動磁頭,即,停留在相同位置中。

? 將當前狀態(tài)設置為由si1指定的狀態(tài)(其可以與si相同或與其不同)。

圖靈機是非常眾所周知的并且因此本文中將不會更詳細地描述。

如果可以證明可以使用XOR運算和關于常數的有條件分支來實現動作表中的任何可能的五元組,則我們知道基于XOR運算和關于常數的有條件分支的處理系統(tǒng)是圖靈完整的(因為任何函數或計算機程序可以被實現或建模為圖靈機,并且可以使用XOR運算和關于常數的有條件分支來實現該圖靈機的動作表中的所有五元組)。

考慮圖靈機中的元與僅使用XOR和關于常數的有條件分支的系統(tǒng)中的元之間的以下映射:

(a) 圖靈機的字母表大小被設置成字母表GF(ψn)的大小ψn。

(b) 每個狀態(tài)被實現為具有(用于跳轉到的)識別符的代碼塊。因此,可以通過GO TO語句來實現圖靈機中的下一狀態(tài),條件是當前狀態(tài)和存儲器內容(即,基于常數的有條件分支)。

(c) 磁帶可以被實現為保持字母表中的元的二進制表示的存儲器。因此,可以通過改變指向存儲器的地址來實現磁帶中的移動。

(d) 使用被稱為“地址”的全局變量來指向等價于位于磁頭下方的磁帶區(qū)段的存儲器位置。

(e) 通過使用其地址來讀取存儲器內容。為了寫入到存儲器中,采用獲得期望結果的常數對存儲器內容進行XOR。

以下偽代碼示出了典型的狀態(tài)實現(針對具有識別符“i”的狀態(tài)),其中,值X1,X2,...,Xq為常數并且“Addr”為到存儲器位置的指針。下面示出的示例例證了增量、減量和不改變地址“Addr”變量的三個可能性。

因此,可以使用XOR運算和有條件分支來實現動作表中的任何可能的五元組。因此,基于XOR運算和有條件分支的系統(tǒng)是圖靈完整的,即,任何圖靈機可以使用僅XOR(針對上文的點(e))和有條件跳躍(針對上文的點(b))來實現。

如上面所示,(通過函數G*)在變換域中執(zhí)行等價于r=s1s2的運算而從不去除對r*、s1*或s2*的變換是可能的。使用編程語言的能力來實現有條件跳躍。這意味著在變換域中實現任何數學運算而從不去除對所處理的數據元的變換是可能的。換言之,給定具有u個輸入s1,...,su(u≥1)和v個輸出r1,...,rv(v≥1)的任何函數G,可以實現函數G的變換版本G*,其中,G*是具有輸入s1,...,su的變換版本s1*,...,s*u作為其(一個或多個)輸入并輸出(一個或多個)輸出r1,...,rv的變換版本r1*,...,rv*的函數,其中,針對單射函數T1,...,Tu+v,si*=Ti(si)且ri*=Ti+u(ri)。函數Ti中的兩個或多個可以彼此相同是可能的。如上所述,可以定義單射函數T1,...,Tu+v(例如,隨機生成的單射函數),并且給定所定義的特定單射函數T1,...,Tu+v,得出(或定義/獲取/實現)函數G的特定變換版本G*。

使用雙射函數T來混淆預定函數的實現以及此類使用的各種方法在本技術領域中是公知的——參見例如:“White-Box Cryptography and an AES Implementation(白盒密碼術和AES實現)”(由Stanley Chow、Philip Eisen、Harold Johnson和Paul C.Van Oorschot,在Selected Areas in Cryptography中:第九次年度國際研討會,SAC 2002,加拿大紐芬蘭圣約翰,2002年8月15-16日);“A White-Box DES Implementation for DRM Applications(用于DRM應用的白盒DES實現)”(由Stanley Chow、Phil Eisen、Harold Johnson和Paul C. van Oorschot,在數字產權管理中:ACM CCS-9研討會,DRM 2002,美國華盛頓特區(qū),2002年11月18日);US61/055,694;WO2009/140774;US6779114;US7350085;US7397916;US6594761;以及US6842862,通過引用將其整個公開內容并入本文。

4-預定函數的混淆執(zhí)行和實現

如下文將更詳細地描述的,本發(fā)明的實施例涉及預定函數F。一些實施例涉及函數F的混淆執(zhí)行(或實行或運行)。例如,可以由系統(tǒng)100(例如,由執(zhí)行除其它之外實現函數F的計算機程序的處理器108)執(zhí)行函數F。其它實施例涉及將處理器配置成以混淆方式實現函數F(諸如將處理器108布置成執(zhí)行適當的計算機程序)。本發(fā)明的實施例的目的在于能夠在白盒環(huán)境中安全地執(zhí)行實現函數F的代碼。

函數F是如上文章節(jié)2中描述的函數,即,可以針對其定義一個或多個對應函數(本文中稱為“子函數”)F1,...,FN使得對于用于函數F的輸入集{x1,...,xW}可以通過以下步驟來生成來自函數F的對應于輸入集{x1,...,xW}的輸出集{y1,...,yV}的函數:

(a)將輸入集{x1,...,xW}表示為對應的值集{p1,...,pM},其中,每個值pj(j=1,...,M)都包括對應的多個輸入中的每個輸入的至少一部分;

(b)通過將每個子函數Fj(j=1,...,N)應用于值集{p1,...,pM}中的一個或多個值的對應集合以生成相應結果qj來從值集{p1,...,pM}生成一個或多個結果的集合{q1,...,qN};以及

(c)構成每個輸出yi為所述結果中的對應的一個的一部分、或者為對應的多個結果中的每個結果的至少一部分的組合。

因此,函數F是可以根據圖3中的方法300實現的函數。如上文所討論的,所有計算機實現的函數F可以以上文闡述的方式實現或表達,使得本發(fā)明的實施例可應用于所有預定的計算機實現的函數F。

圖8示意性地圖示出根據本發(fā)明的實施例的用于以混淆形式執(zhí)行(或實現)函數F的方法800,即,用于以適用于白盒環(huán)境的安全的方式來執(zhí)行(或實現)函數F的方法800。除了方法300的步驟306被方法800中的步驟802、804和806替換之外,方法800與方法300相同。由于方法800中的步驟302、304和308與它們在方法300中相同,因此本文中將不會再次描述它們。

簡要重述,在方法300的步驟306處,使用子函數F1,...,FN處理值集{p1,...,pM},以生成結果集{q1,...,qN}。在本發(fā)明的實施例中,作為函數F1,...,FN的替代使用函數F1,...,FN的變換版本。

特別地,如上文所討論的,對于每個j=1,...,N,存在nj個不同索引的對應集合(其中,對于1≤k≤nj且nj≥1,1≤βj,k≤M),使得根據預定函數Fj(即,)作為nj個值的集合的函數來計算qj。因此,在步驟802處,對于每個j=1,...,N,使用相應的單射變換來獲取nj個值的變換版本,即,對于j=1,…,M且k=1,…,nj,。

將認識到的是,對于j=1,...,M且k=1,...,nj,所有變換Tj,k可以不同于彼此。但是,將認識到的是,對于j=1,...,M且k=1,...,nj,變換Tj,k中的某些或所有可以與彼此相同。例如,可以存在單個變換T,使得對于j=1,...,M且k=1,...,nj,Tj,k=T。同樣地,可以存在M個不同的變換T'1,...,T'M,使得如果βj,k=i則Tj,k=T'i,即,每個值pi僅通過一個變換T'i變換。在一些實施例中,值pi中的至少一個被兩個或多個不同的變換所變換以獲取值pi的兩個或多個對應的不同變換版本。其它實施例可以利用變換的不同混合/組合。

如上文章節(jié)3中所討論的,變換Tj,k(j=1,...,M且k=1,...,nj)可以是任何單射函數(使得Tj,k是在pj可以取的可能值域上的一對一函數)。在一些實施例中,變換Tj,k(j=1,...,M且k=1,...,nj)中的某些或所有是線性變換(諸如在上面章節(jié)3中闡述的那些),但是將認識到的是,情況不必須是這樣。每個變換Tj,k(j=1,...,M且k=1,...,nj)是預定的,并且可以例如通過隨機選擇定義該變換的一個或多個參數或者基于其它數據/參數來定義——例如,如果變換Tj,k是線性變換使得對于非零常數aj,k和常數bj,k,,那么可以(在執(zhí)行方法800之前)隨機選擇aj,k和bj,k。

在步驟804處,使用子函數F1,...,FN的變換版本F1*,...,FN*來生成變換結果集{q1*,...,qN*}。特別地,對于j=1,...,N,。

在步驟806處,從變換結果集{q1*,...,qN*}獲取結果集{q1,...,qN}。特別地,對于j=1,...,N,通過將變換應用于變換結果qj*而計算結果qj,使得。將認識到的是,對于j=1,...,N,所有變換可以不同于彼此。然而,將認識到的是,對于j=1,...,N,變換中的一些或所有可以與彼此相同。

如上文章節(jié)3中所討論的,變換可以是任何單射函數(使得變換是在qj*可以取的可能值域上的一對一函數)。在一些實施例中,變換中的一個或多個是線性變換(諸如在上面章節(jié)3中闡述的那些),但是將認識到的是,情況不必須是這樣。每個變換是預定的,并且可以例如通過隨機選擇定義該變換的一個或多個參數或者基于其它數據/參數來定義——例如,如果變換是線性變換使得對于非零常數aj和常數bj,,那么可以(在執(zhí)行方法800之前)隨機選擇aj和bj。

初始子函數Fj(j=1,...,N)具有nj個輸入和輸出qj。因此,給定相關聯(lián)的變換和,可以(如上面章節(jié)3中闡述的那樣)定義函數Fj的變換版本Fj*,其中,函數Fj*有nj個輸入和輸出qj*,其中對于j=1,...,M且k=1,...,nj且,。

因此,對于j=1,...,N,將結果qj有效地計算為:

在確定/設置變換和時,可以確定函數Fj的變換版本Fj*,使得當實現方法800時,變換版本Fj*于是準備好用于隨后使用。

注意,在本發(fā)明的一些實施例中,在方法800中步驟302是可選的。特別地,當實體或模塊執(zhí)行或實現函數F時,該實體或模塊可以在步驟302處接收或獲取值集{p1,...,pM},而非接收或獲取輸入集{x1,...,xW}。例如,第一實體或模塊可以如上文中所述以混淆方式執(zhí)行或實現函數F,并且第二實體或模塊可以被布置成根據輸入集{x1,...,xW}確定值集{p1,...,pM}并且然后將值集{p1,...,pM}提供給第一實體或模塊。在此類情況中,第一實體或模塊在沒有可選步驟302的情況下執(zhí)行方法800。

附加地,在方法800中步驟304是可選的。特別地,當實體或模塊執(zhí)行或實現函數F時,該實體或模塊可以在步驟304處接收或獲取變換值集{:j=1,…,M且k=1,...,nj},而不是接收或獲取值集{p1,...,pM}。例如,第一實體或模塊可以如上文中所述以混淆方式執(zhí)行或實現函數F,并且第二實體或模塊可以被布置成確定變換值集{:j=1,…,M且k=1,...,nj}并將該集合提供給第一實體或模塊。在此類情況中,第一實體或模塊在沒有可選步驟302和304的情況下執(zhí)行方法800。

這可以以多種方式產生。例如,第二實體或模塊可以獲取輸入集{x1,...,xW},并且導出值集{p1,...,pM}(或者可以僅獲取值集{p1,...,pM})并且可以然后確定變換值集{:j=1,…,M且k=1,...,nj},并將該變換值集提供給第一實體或模塊。替換地,可以從未獲取過原始值集{p1,...,pM}其自身。例如,假定意圖為執(zhí)行函數,使得H(x)=F(G(x))。然后,使用本發(fā)明的實施例可以實現函數G和函數F二者。當實現函數G時,(在用于函數G的步驟804處)將產生變換結果集。然后這些變換結果中的一個或多個可以用在用于函數F的變換值集中——因此,用于函數G的步驟804可以構成用于函數F的步驟802的部分(而不需要執(zhí)行用于函數F的步驟302和304)。

在本發(fā)明的一些實施例中同樣,在方法800中步驟308是可選的。特別地,當實體或模塊執(zhí)行或者實現函數F時,該實體或模塊可以在步驟308處僅輸出結果集{q1,...,qN}而不輸出輸出集{y1,...,yW}。例如,第一實體或模塊可以如上文中所述以混淆方式執(zhí)行或實現函數F,并且第二實體或模塊可以被布置成根據由第一實體或模塊提供的結果集{q1,...,qN}來確定輸出集{y1,...,yW}。在此類情況中,第一實體或模塊在沒有可選步驟308的情況下執(zhí)行方法800。

附加地,在方法800中步驟806是可選的。特別地,當實體或模塊執(zhí)行或者實現函數F時,該實體或模塊可以輸出變換結果集{q1*,...,qN*}。例如,第一實體或模塊可以如上文中所述以混淆方式執(zhí)行或實現函數F并將變換結果集{q1*,...,qN*}提供給第二實體或模塊,所述第二實體或模塊可以被布置成根據變換結果集{q1*,...,qN*}其本身確定輸出集{y1,...,yW}。在此類情況中,第一實體或模塊在沒有可選步驟806和308的情況下執(zhí)行方法800。

事實上,輸出集{y1,...,yN}和甚至結果集{q1,...,qN}不需要必然地被導出或獲取。例如,假定意圖為執(zhí)行函數,使得H(x)=F(G(x))。然后,使用本發(fā)明的實施例可以實現函數G和函數F二者。當實現函數F時,(在用于函數F的步驟804處)將產生變換結果集。然后這些變換結果中的一個或多個可以用在用于函數G的變換值集中。因此,可以將當實現函數F時生成的變換結果集直接用作到函數G的輸入,而不導出用于函數F的對應的結果集和/或輸出集——即,用于函數F的步驟804可以構成用于函數G的步驟802的部分(而不需要執(zhí)行用于函數F的步驟806和308)。

如從上文可見,本發(fā)明的實施例利用(a)使值pj(j=1,...,M)取決于多個輸入xi和(b)使用子函數Fj(j=1,...,N)的變換版本Fj*之間的協(xié)同作用。特別地,假定函數F是基于輸入xi生成輸出yi的函數,使得yi=F(xi)。如上所述地將函數F實現為變換函數F*將會是可能的。然而,在這么做時,輸入集{x1,...,xW}中的每個輸入xi將會被分離地處理(例如,變換輸出yi*將會被生成為yi*=F*(Xi*),即,作為變換輸入xi*的函數,對于i=1,...,W)。這樣的分離處理使得攻擊者的任務更容易,其中,攻擊者希望確定由函數F使用的輸入xi和/或輸出yi和/或一個或多個機密值(例如,密碼密鑰)。例如,可以通過循環(huán)實現如上文所述的值xi*的計算,諸如:

此類循環(huán)的存在是攻擊者可檢測且可利用的。與之相反,由于本發(fā)明的實施例是基于對值pj(其本質上每一個都取決于多個輸入xi)的運算,使得攻擊者的任務更難了。例如,可以避免或最小化(如上文說述的)循環(huán)處理,使得對于攻擊者來說在他們的攻擊中成功更難了。

此外,由于同時有效確定多個輸出,因此可以實現效率增益。特別地,使值pj(j=1,...,M)取決于多個輸入xi,可以利用處理系統(tǒng)的完全位寬。例如,如果輸入xi是8位的值且處理器是32位處理器,那么每個值pj可以(例如)由4個不同輸入組成,從而更好地利用處理器的能力。這有助于減輕在使用如上面章節(jié)3中所述的變換來執(zhí)行混淆時有時經歷的性能損失。

5-修改

將認識到的是所述的方法已被示為按照特定順序實現的單獨步驟。然而,技術人員將認識到這些步驟可被組合或者按照不同的順序實現,同時仍達到期望的結果。

將認識到的是可使用各種不同的信息處理系統(tǒng)來實現本發(fā)明的實施例。特別地,雖然附圖及其討論提供了示例性計算系統(tǒng)和方法,但是這些僅僅是為了在討論本發(fā)明的各種方面時提供有用參考而提出的??稍谌魏芜m當的數據處理設備上實現本發(fā)明的實施例,所述數據處理設備諸如個人計算機、膝上型計算機、個人數字助理、移動電話、機頂盒、智能卡、電視、服務器計算機等。當然,已出于討論的目的簡化了系統(tǒng)和方法的描述,并且其僅僅是可被用于本發(fā)明的實施例的許多不同類型的系統(tǒng)和方法中的一個。將認識到的是邏輯塊之間的邊界僅僅是說明性的,并且替換實施例可將邏輯塊或元素合并,或者可對各種邏輯塊或元素施加功能的替換分解。

將認識到的是可將上述功能實現為作為硬件和/或軟件的一個或多個對應模塊。例如,可將上述功能實現為一個或多個軟件組件以便由系統(tǒng)的處理器執(zhí)行。替換地,可將上述功能實現為硬件,諸如在一個或多個現場可編程門陣列(FPGA)和/或一個或多個專用集成電路(ASIC)和/或一個或多個數字信號處理器(DSP)和/或其它硬件布置上。在本文中包含的流程圖中或者如上所述地實現的方法步驟每個可由對應的相應模塊實現;在本文中包含的流程圖中或者如上所述地實現的多個方法步驟可一起由單個模塊實現。

將認識到的是只要由計算機程序實現本發(fā)明的實施例的范圍,則承載計算機程序的存儲介質和傳輸介質構成本發(fā)明的方面。計算機程序可具有一個或多個程序指令或程序代碼,其在被計算機執(zhí)行時實現本發(fā)明的實施例。如本文所使用的術語“程序”可以是針對在計算機系統(tǒng)上執(zhí)行而設計的指令序列,并且可包括子例程、函數、程序、模塊、對象方法、對象實現、可執(zhí)行應用程序、小應用程序、小服務程序、源代碼、目標代碼、共享庫、動態(tài)鏈接庫和/或針對在計算機系統(tǒng)上執(zhí)行而設計的其它指令序列。存儲介質可以是磁盤(諸如硬驅或軟盤)、光盤(諸如CD-ROM、DVD-ROM或BluRay盤)或存儲器(諸如ROM、RAM、EEPROM、EPROM、閃存或便攜式/可移除存儲器設備)等。傳輸介質可以是通信信號、數據廣播、兩個或更多計算機之間的通信鏈路等。

當前第1頁1 2 3 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1