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

程序執(zhí)行的隱藏的制作方法

文檔序號(hào):11455392閱讀:323來源:國(guó)知局
程序執(zhí)行的隱藏的制造方法與工藝

本發(fā)明涉及隱藏程序執(zhí)行的細(xì)節(jié)。更特別地,本發(fā)明涉及隱藏條件運(yùn)算。更特別地,本發(fā)明涉及在包含條件計(jì)算的程序中隱藏程序流和數(shù)據(jù)流。



背景技術(shù):

可以利用表驅(qū)動(dòng)方法實(shí)現(xiàn)加密值的計(jì)算,不使用暴露它們的功能的運(yùn)算符。程序代碼、即其運(yùn)算可以通過使用查找表來隱藏。將這些表應(yīng)用于加密數(shù)據(jù)給出了加密結(jié)果、隱藏的運(yùn)算的結(jié)果。然而,辨識(shí)像比較(<,=,...)那樣的運(yùn)算符是相當(dāng)容易的,因?yàn)槟切┲噶畋幌抻跀?shù)字,典型地導(dǎo)致控制流的改變,并且它們的結(jié)果是加密的布爾類型的。如果此加密的布爾型保衛(wèi)條件運(yùn)算,例如在if-then或if-then-else構(gòu)造的情況下,攻擊者可以從控制流辨識(shí)運(yùn)算的各方面。進(jìn)一步地,攻擊者可以創(chuàng)建對(duì)被比較的加密值的排序。最后,這可以導(dǎo)致破解加密。

在軟件程序中,執(zhí)行比較通常是必要的。例如,為了檢查是否已經(jīng)被達(dá)到某閾值或者是否某輸入等于預(yù)定值。在混淆程序中,這樣的比較可以幫助攻擊者破解編碼。

us7,809,135b2公開了與增加具有密碼功能的軟件所使用的密鑰的密碼安全性有關(guān)的方法和系統(tǒng)。這是通過增加軟件的數(shù)學(xué)復(fù)雜度來進(jìn)行的。首先確定軟件所使用的組件和函數(shù),并且使用這些組件、函數(shù)和它們之間交換的數(shù)據(jù),使得軟件對(duì)分析的抵抗性更強(qiáng)。在增加分析抵抗力中使用的方法被分組為3種一般類型:調(diào)節(jié)組件之間交換的信息,將某些組件用不同但相關(guān)的組件代替,以及調(diào)節(jié)組件之間的數(shù)據(jù)流。



技術(shù)實(shí)現(xiàn)要素:

將會(huì)有利的是,在程序的執(zhí)行期間,具有改進(jìn)的方法和系統(tǒng)以防止信息從程序中泄漏。

為了解決這個(gè)問題,在第一方面,提供一種用于隱藏程序的變量集合v={v1,v2,...,vn}的變化的系統(tǒng)。該系統(tǒng)包括:

值表示構(gòu)件,用于借助于表達(dá)ri表示變量v1,v2,...,vn中的變量vi的值wi,其中wi是集合w的元素,其中并且ri是表達(dá)的集合的元素,其中σi是狀態(tài)變量,該狀態(tài)變量為集合σ的元素并且向wi的表達(dá)ri提供冗余,并且是從w×σ到預(yù)定集合的一一密碼映射;以及

動(dòng)作表示構(gòu)件,用于通過在v'上的動(dòng)作和在v\v'上的動(dòng)作表示v的子集v'的值上的動(dòng)作,其中

v'上的動(dòng)作根據(jù)變量vj的變化值w'j改變變量集合v'中的每一個(gè)變量vj的表達(dá)rj,使得,其中是從w×σ到預(yù)定集合的一一密碼映射,并且

其中在v\v'上的動(dòng)作根據(jù)σk的變化值σ'k改變v\v'中每一個(gè)變量vk的表達(dá)rk,使得。

使用此系統(tǒng),對(duì)攻擊者而言,難以發(fā)現(xiàn)程序中哪一個(gè)變量實(shí)際變化,因?yàn)橥ㄟ^改變狀態(tài)變量σ,未改變的變量的表達(dá)也被變更。

例如,所述動(dòng)作包括if語句,其定義了在條件成立的情況下在變量集合v1上的動(dòng)作,以及在條件不成立的情況下在變量集合v2上的動(dòng)作,其中變量集合vv1v2的并集,從而,并且動(dòng)作表示構(gòu)件被配置成根據(jù)條件是否成立使用變量集合v1或變量集合v2作為變量集合v'。這有助于避免泄漏關(guān)于條件代碼段或條件代碼段的哪一個(gè)分支被選擇的信息。如上所述,當(dāng)表示通過在v'上的動(dòng)作和在v\v'上的動(dòng)作表示在子集v'上的動(dòng)作時(shí),動(dòng)作表示構(gòu)件可以使用所選集合v'。

變量集合v1和變量集合v2可以具有被所述兩個(gè)動(dòng)作影響的變量的交集v3,從而,其中該動(dòng)作在條件成立的情況下根據(jù)函數(shù)f并且在條件不成立的情況下根據(jù)函數(shù)g改變集合v3的每一個(gè)變量vm,其中動(dòng)作表示構(gòu)件被配置成確定集合v3的每一個(gè)變量vm的表達(dá),使得基于根據(jù)輸入所述條件是否成立,而有:

,或

,

其中hm是從w×σ到w的映射。

使用此特征,攻擊者難以發(fā)現(xiàn)是fm實(shí)際應(yīng)用到變量wm還是gm應(yīng)用到變量wm。

動(dòng)作表示構(gòu)件可以被配置成使用將關(guān)于條件的輸入和表達(dá)的元組映射到對(duì)應(yīng)的表達(dá)的至少一個(gè)查找表促成與關(guān)于條件的輸入和表達(dá)對(duì)應(yīng)的表達(dá)的查找。該輸入可以例如包括(可選地加密的)布爾變量。可替換地,該輸入可以包括定義條件的述語中出現(xiàn)的變量。此述語和實(shí)際動(dòng)作可以隱藏在所述至少一個(gè)查找表中。

在一個(gè)特定示例中,,并且動(dòng)作表示構(gòu)件(103)被配置成識(shí)別確定條件b的一個(gè)或多個(gè)輸入變量,并且其中動(dòng)作表示構(gòu)件(103)包括:交換單元(305),用于基于集合v中的變量vi的至少一個(gè)表達(dá)r(其中r=ri)和所述一個(gè)或多個(gè)輸入變量執(zhí)行隱藏的交換運(yùn)算,使得對(duì)于和q,

其中是從w×σ到預(yù)定集合的一一密碼映射,其中不同于,其中是一個(gè)表達(dá);和/或交換單元(306),用于基于表達(dá)和所述一個(gè)或多個(gè)變量執(zhí)行隱藏的交換運(yùn)算,使得對(duì)于和q,

其中是從w×σ到預(yù)定集合的一一密碼映射,其中不同于,并且是更新的表達(dá)。

當(dāng)計(jì)算表達(dá)時(shí),這些交換運(yùn)算可以被分別用作預(yù)處理和/或后處理步驟,使得實(shí)際函數(shù)f和/或g的隱藏實(shí)現(xiàn)方式可以被簡(jiǎn)化。如果只有一個(gè)交換單元被使用,則在動(dòng)作之前和之后wσ的作用可以互換。這可以通過在系統(tǒng)的剩余物中考慮這一點(diǎn)來處理,例如通過假設(shè)編碼已經(jīng)變化的合適程序代碼來處理。

動(dòng)作表示構(gòu)件可以進(jìn)一步包括函數(shù)評(píng)估單元,其用于計(jì)算函數(shù)以基于表達(dá)獲得表達(dá),使得對(duì)于和q,

其中f是在w上定義的映射并且g是在w上定義的映射。

這樣,取決于之前執(zhí)行的交換運(yùn)算,函數(shù)fg可以應(yīng)用到表達(dá)wσ方位(aspect),使得fg的隱藏實(shí)現(xiàn)方式可以相同,不管條件是否成立。可以在其后執(zhí)行的交換運(yùn)算取決于條件而將wσ方位交換回來,以便撤銷第一次交換運(yùn)算所執(zhí)行的交換運(yùn)算。

在一個(gè)特定示例中,。這意味著,這兩個(gè)交換運(yùn)算使用相同的密碼編碼。因而,對(duì)于兩個(gè)交換運(yùn)算,相同的代碼和/或表可以重用。

在一個(gè)示例中,對(duì)于wσ的所有值和中的至少一個(gè)m,。這可以提供簡(jiǎn)化的且/或更對(duì)稱的實(shí)現(xiàn)方式。

在一個(gè)示例中,在上的動(dòng)作被配置成改變變量集合中的每一個(gè)變量vj的表達(dá)rj,使得,并且

其中在上的動(dòng)作被配置成改變中每一個(gè)變量vk的表達(dá)rk,使得;

其中對(duì)于,fi是在w上定義的函數(shù),并且對(duì)于中的每一個(gè)變量vkhk是將w×σ的元素映射到w的函數(shù)。

這是對(duì)表達(dá)做出了什么改變的示例。

權(quán)利要求2或3的系統(tǒng)進(jìn)一步包括嵌套條件表示構(gòu)件,用于將涉及第一多個(gè)嵌套條件的嵌套條件運(yùn)算表示成涉及第二多個(gè)條件的非嵌套條件運(yùn)算的功能等價(jià)序列。

該系統(tǒng)可以進(jìn)一步包括用于將涉及第一多個(gè)嵌套條件的嵌套條件運(yùn)算轉(zhuǎn)換成涉及第二多個(gè)條件的非嵌套條件運(yùn)算的功能等價(jià)序列的轉(zhuǎn)換單元。這有助于改進(jìn)信息泄漏的防止,因?yàn)槊恳粋€(gè)非嵌套條件運(yùn)算例如借助于第一和第二生成單元生成的代碼被評(píng)估,使得條件運(yùn)算中出現(xiàn)的所有表達(dá)式被評(píng)估并且可以影響表達(dá)。較少的分支被跳過。

例如,轉(zhuǎn)換單元可以被配置成:將嵌套條件運(yùn)算的相應(yīng)條件分支的相應(yīng)表達(dá)式組合成輔助表達(dá)式的措辭,其中相應(yīng)表達(dá)式與要被分配給特定變量的可替換的值相關(guān)聯(lián);重復(fù)將相應(yīng)條件分支的相應(yīng)表達(dá)式組合成輔助表達(dá)式的措辭的步驟,使得多個(gè)輔助表達(dá)式被生成,其中所述措辭以不同方式組合;生成評(píng)估輔助表達(dá)式的代碼并存儲(chǔ)它們的結(jié)果;并且取決于組合的條件生成組合輔助表達(dá)式的結(jié)果的代碼,其中組合的條件是多個(gè)條件的組合,使得與關(guān)于該條件無關(guān)的分支對(duì)應(yīng)的措辭取消。這樣的系統(tǒng)可以用來通過將嵌套的if語句扁平化成未被嵌套的if語句的序列來隱藏嵌套的if語句。通過將不同條件分支中出現(xiàn)的表達(dá)式組合成輔助表達(dá)式并且隨后以這樣的方式組合輔助表達(dá)式以使得關(guān)于條件不相關(guān)的表達(dá)式取消,許多所述表達(dá)式在程序中被評(píng)估并且可以影響加密結(jié)果,從而使得難以分析哪些表達(dá)式實(shí)際影響對(duì)應(yīng)于加密結(jié)果的解密值。

動(dòng)作表示構(gòu)件可以被配置成識(shí)別非嵌套條件運(yùn)算的序列的至少一個(gè)條件運(yùn)算和第二多個(gè)條件中的對(duì)應(yīng)條件,并且其中動(dòng)作表示構(gòu)件被配置成使用所識(shí)別的條件運(yùn)算作為所述動(dòng)作并且使用所識(shí)別的對(duì)應(yīng)條件作為if語句的條件。這樣的組合提供了對(duì)在條件代碼塊中發(fā)生的情況的特別好的隱藏。進(jìn)一步地,識(shí)別單元可以被配置成識(shí)別非嵌套條件運(yùn)算的序列的每一個(gè)條件運(yùn)算以及第二多個(gè)條件中的每一個(gè)對(duì)應(yīng)條件,其中第一生成單元和第二生成單元被配置成處理每一個(gè)所識(shí)別的條件運(yùn)算和對(duì)應(yīng)條件。

在另一個(gè)方面,提供一種用于隱藏程序的變量集合的變化的方法,該方法包括:

借助于表達(dá)ri表示變量v1,v2,...,vn中的變量vi的值wi,其中w是集合w的元素,其中并且ri是表達(dá)的集合的元素,其中σi是狀態(tài)變量,該狀態(tài)變量為集合σ的元素并且向wi的表達(dá)ri提供冗余,并且是從w×σ到預(yù)定集合的一一密碼映射;以及

借助于在v'上的動(dòng)作和在v\v'上的動(dòng)作表示v的子集v'的值上的動(dòng)作,以獲得更新的表達(dá),對(duì)于,其中是從w×σ到預(yù)定集合的一一密碼映射,并且其中

v'上的動(dòng)作被配置成根據(jù)變量vj的變化值w'j改變變量的集合v'中的每一個(gè)變量vj的表達(dá)rj,并且

v\v'上的動(dòng)作被配置成根據(jù)σk的變化值σ'k改變v\v'中每一個(gè)變量vk的表達(dá)rk。

根據(jù)另一個(gè)方面,提供一種用于隱藏條件運(yùn)算的系統(tǒng),該系統(tǒng)包括:

表示單元,用于借助于表達(dá)r表示值w,其中w是集合w的元素,其中,并且r是表達(dá)的集合的元素,其中σ是狀態(tài)變量,該狀態(tài)變量為集合σ的元素并且向w的表達(dá)r提供冗余,并且是從w×σ到預(yù)定集合的一一密碼映射;以及

導(dǎo)出單元,用于基于關(guān)于條件的輸入從表達(dá)r導(dǎo)出值的表達(dá),其中是集合w的元素,其中是表達(dá)的集合的元素,其中,其中是狀態(tài)變量,該狀態(tài)變量為集合σ的元素并且向的表達(dá)提供冗余,并且是從w×σ到預(yù)定集合的一一密碼映射,其中基于根據(jù)輸入所述條件是否成立,f(w)相關(guān)聯(lián)或者相關(guān)聯(lián),其中是在w上定義的非平凡映射,并且h是從w×σ到w的映射。

表示單元提供了表達(dá)r,其為值w的冗余表達(dá)。即,w的任何單個(gè)值具有許多不同的表達(dá)r,因?yàn)?i>r可以是的任何元素。這意味著,r的變化不一定意味著w的變化,因?yàn)閷?duì)于w的相同值,r可以恰好被改變?yōu)?imgfile="351436dest_path_image053.gif"wi="36"he="18"img-content="drawing"img-format="gif"orientation="portrait"inline="no"/>的不同元素。這樣的表達(dá)允許條件運(yùn)算被隱藏,例如如果條件b成立,將w更新為。即,如果條件確實(shí)成立,表達(dá)r被更新以變成表達(dá),其為f(w)的表達(dá),即集合的成員。另一方面,如果條件不成立,表達(dá)r仍被更新,但被更新為相同值w的不同表達(dá),即集合的(不同)成員。由于在后一種情況下,函數(shù)f用來選擇集合的特定成員,所以基于f的相同函數(shù)影響被執(zhí)行和應(yīng)用到表達(dá)r的運(yùn)算,不管條件是否成立。由函數(shù)f提供的任何熵效應(yīng)因此以表達(dá)傳播,不管條件是否成立。即,即使當(dāng)攻擊者將改變值r和條件b并看到其對(duì)結(jié)果的任何影響時(shí),仍然難以提取關(guān)于程序及其變量的信息。進(jìn)一步地,對(duì)惡意觀察者而言,也難以發(fā)現(xiàn)函數(shù)f是否已被應(yīng)用到值w

確定單元可以被配置成確定表達(dá),使得基于根據(jù)輸入所述條件是否成立,f(w)相關(guān)聯(lián)且相關(guān)聯(lián),或者g(w)相關(guān)聯(lián)且相關(guān)聯(lián),其中g是在w上定義的(非平凡)映射。這是特別有用的,以創(chuàng)建例如具有else部分的if語句:ifbthenw=f(w)elsew=g(w)的隱藏實(shí)現(xiàn)方式。兩個(gè)函數(shù)fg影響最終結(jié)果,盡管這些函數(shù)中只有一個(gè)影響w部分,或者從中選擇表達(dá)的集合。另一個(gè)函數(shù)僅僅影響的哪一個(gè)元素被選擇。因此函數(shù)fg中(如通過條件確定的)只有一個(gè)確定表達(dá)的底層解密值。

導(dǎo)出單元可以被配置成使用將輸入和表達(dá)r的元組映射到對(duì)應(yīng)的表達(dá)的至少一個(gè)查找表來查找與關(guān)于條件的輸入和表達(dá)r對(duì)應(yīng)的表達(dá)。借助于查找表的實(shí)現(xiàn)方式允許防止泄漏在從輸入變量和函數(shù)f計(jì)算條件中涉及的任何信息。而且,取決于條件的任何if語句或跳躍指令可以被避免。

例如,。導(dǎo)出單元可以被配置成識(shí)別確定條件b的一個(gè)或多個(gè)變量,并且導(dǎo)出單元可以包括:交換單元,其用于基于表達(dá)r和所述一個(gè)或多個(gè)變量執(zhí)行隱藏的交換運(yùn)算的,使得對(duì)于和q,

其中是從w×σ到預(yù)定集合的一一密碼映射,其中不同于,其中是一個(gè)表達(dá);和/或基于表達(dá)和所述一個(gè)或多個(gè)變量執(zhí)行隱藏的交換運(yùn)算,使得對(duì)于和q,

其中是從w×σ到預(yù)定集合的一一密碼映射,其中不同于。

當(dāng)計(jì)算表達(dá)時(shí),這些交換運(yùn)算可以被分別用作預(yù)處理和/或后處理步驟,使得實(shí)際函數(shù)f和/或g的隱藏實(shí)現(xiàn)方式可以被簡(jiǎn)化。

導(dǎo)出單元可以進(jìn)一步包括函數(shù)評(píng)估單元,其用于計(jì)算基于表達(dá)獲得表達(dá)的函數(shù),使得對(duì)于和q,

其中g是在w上定義的映射。

這樣,取決于之前執(zhí)行的交換運(yùn)算,函數(shù)fg可以應(yīng)用到表達(dá)wσ方位,使得fg的隱藏實(shí)現(xiàn)方式可以相同,不管條件是否成立。

例如,對(duì)于w的所有值,。在此示例中,當(dāng)條件不真時(shí),所述表達(dá)的方位不受所述表達(dá)的w方位的影響。這改進(jìn)了方案的對(duì)稱性。

確定單元可以被配置成確定表達(dá),使得基于所述條件:,或。這可以用來創(chuàng)建例如if語句的隱藏實(shí)現(xiàn)方式,該if語句不具有else部分:ifbthenw=f(w)。

根據(jù)本發(fā)明的另一個(gè)方面,提供一種有條件地執(zhí)行運(yùn)算的方法。該方法包括以下步驟:

借助于表達(dá)r表示值w,其中w是集合w的元素,其中,并且r是表達(dá)的集合的元素,其中σ是狀態(tài)變量,該狀態(tài)變量為集合σ的元素并且向w的表達(dá)r提供冗余,并且是從w×σ到預(yù)定集合的一一密碼映射;以及

基于關(guān)于條件的輸入從表達(dá)r導(dǎo)出值的表達(dá),其中是集合w的元素,其中是表達(dá)的集合的元素,其中,其中是狀態(tài)變量,該狀態(tài)變量為集合σ的元素并且向的表達(dá)提供冗余,并且是從w×σ到預(yù)定集合的一一密碼映射,其中基于根據(jù)輸入所述條件是否成立,f(w)相關(guān)聯(lián)或者相關(guān)聯(lián),其中是在w上定義的非平凡映射,并且h是從w×σ到w的映射。

根據(jù)本發(fā)明的另一個(gè)方面,提供一種用于創(chuàng)建有條件地執(zhí)行運(yùn)算的計(jì)算機(jī)代碼的系統(tǒng)。該系統(tǒng)包括:

識(shí)別單元,用于識(shí)別條件和條件運(yùn)算f,其將在變量w上執(zhí)行,從而在條件成立的情況下計(jì)算變量,使得,其中是集合w的元素并且其中f是在w上定義的映射;

第一生成單元,用于生成第一計(jì)算機(jī)代碼,其中第一計(jì)算機(jī)代碼被配置成在被執(zhí)行時(shí),借助于表達(dá)r表示變量w,其中w是集合w的元素,其中,并且r是表達(dá)的集合的元素,其中σ是狀態(tài)變量,該狀態(tài)變量為集合σ的元素并且向w的表達(dá)r提供冗余,并且是從w×σ到預(yù)定集合的一一密碼映射;以及

第二生成單元,用于生成第二計(jì)算機(jī)代碼,其中第二計(jì)算機(jī)代碼被配置成在被執(zhí)行時(shí),基于關(guān)于條件的輸入確定值的表達(dá),其中是表達(dá)的集合的元素,其中,其中是狀態(tài)變量,該狀態(tài)變量為集合σ的元素并且向的表達(dá)提供冗余,其中是從w×σ到預(yù)定集合的一一密碼映射;并且其中在根據(jù)輸入所述條件成立的情況下,,并且在根據(jù)輸入所述條件不成立的情況下,=,其中h是從w×σ到w的映射。

這樣的系統(tǒng)可以用于將明文(非隱藏)運(yùn)算轉(zhuǎn)換成隱藏的代碼。例如,該系統(tǒng)可以實(shí)現(xiàn)為生成隱藏代碼的編譯器的部分。例如,生成的計(jì)算機(jī)代碼可以包括機(jī)器代碼、偽代碼或虛擬機(jī)代碼。

根據(jù)另一個(gè)方面,提供一種創(chuàng)建有條件地執(zhí)行運(yùn)算的機(jī)器代碼的方法,該方法包括:

識(shí)別條件和條件運(yùn)算f,其將在變量w上執(zhí)行,從而在條件成立的情況下計(jì)算變量,使得,其中是集合w的元素并且其中f是在w上定義的映射;

生成第一計(jì)算機(jī)代碼,其中第一計(jì)算機(jī)代碼被配置成在被執(zhí)行時(shí),借助于表達(dá)r表示變量w,其中w是集合w的元素,其中,并且r是表達(dá)的集合的元素,其中σ是狀態(tài)變量,該狀態(tài)變量為集合σ的元素并且向w的表達(dá)r提供冗余,并且是從w×σ到預(yù)定集合的一一密碼映射;以及

生成第二計(jì)算機(jī)代碼,其中第二計(jì)算機(jī)代碼被配置成在被執(zhí)行時(shí),基于關(guān)于條件的輸入確定值的表達(dá),其中是表達(dá)的集合的元素,其中,其中是狀態(tài)變量,該狀態(tài)變量為集合σ的元素并且向的表達(dá)提供冗余,其中是從w×σ到預(yù)定集合的一一密碼映射;并且其中在根據(jù)輸入所述條件成立的情況下,,并且在根據(jù)輸入所述條件不成立的情況下,=,其中h是從w×σ到w的映射。

根據(jù)另一個(gè)方面,提供一種包括用于促使處理器執(zhí)行上文闡述的方法中的一個(gè)或多個(gè)的指令的計(jì)算機(jī)程序產(chǎn)品。

本領(lǐng)域技術(shù)人員將會(huì)領(lǐng)會(huì),本發(fā)明的上述實(shí)施例、實(shí)現(xiàn)方式和/或方面中的兩個(gè)或更多個(gè)可以以任何被認(rèn)為有用的方式組合。

本領(lǐng)域技術(shù)人員在本說明書的基礎(chǔ)上可以實(shí)施對(duì)應(yīng)于所述系統(tǒng)的所描述的修改和變形的方法和計(jì)算機(jī)程序產(chǎn)品的修改和變形。

附圖說明

本發(fā)明的這些和其他方面根據(jù)下文描述的實(shí)施例而是清楚明白的并且將參照這些實(shí)施例進(jìn)行闡述。

圖1是用于取決于條件執(zhí)行變換的系統(tǒng)的框圖。

圖2是用于隱藏條件運(yùn)算的系統(tǒng)的框圖。

圖3是用于隱藏條件運(yùn)算的導(dǎo)出單元的框圖。

圖4是隱藏條件運(yùn)算的方法的流程圖。

圖5是用于創(chuàng)建有條件地執(zhí)行運(yùn)算的機(jī)器代碼的系統(tǒng)的框圖。

圖6是用于創(chuàng)建有條件地執(zhí)行運(yùn)算的機(jī)器代碼的另一個(gè)系統(tǒng)的框圖。

圖7是轉(zhuǎn)換嵌套條件運(yùn)算的方法流程圖。

圖8是創(chuàng)建有條件地執(zhí)行隱藏運(yùn)算的機(jī)器代碼的方法的流程圖。

圖9是用于隱藏變量集合的變化的系統(tǒng)的框圖。

圖10是隱藏變量集合的變化的方法的流程圖。

具體實(shí)施方式

在下文中,給出關(guān)于如何改進(jìn)數(shù)據(jù)值的加密以及隱藏程序的內(nèi)部工作的描述。例如,這樣的技術(shù)可以被應(yīng)用以創(chuàng)建安全虛擬機(jī)。使用本文公開的技術(shù)也可以保護(hù)其他種類的系統(tǒng)抵御信息泄漏。貫穿本文檔,詞語隱藏被用來指示程序的功能難以例如通過逆向工程被發(fā)現(xiàn)?;煜怯糜谥甘倦y以發(fā)現(xiàn)在程序代碼中執(zhí)行什么功能操作的另一術(shù)語。

圖1圖示了一種包括被配置成執(zhí)行條件運(yùn)算的變換單元101的系統(tǒng)。即,變換單元101接收值w和條件b,并且輸出取決于b。在條件b為真的情況下,變換單元輸出。在條件b為假的情況下,變換單元101輸出。本文中fg是不同的函數(shù)。在可替換布置中,變換單元101被配置成接收一些變量(未示出)而不是條件自身,并且變換單元101首先評(píng)估表達(dá)式以基于這些變量確定條件b是否為真。在此之后,變換單元101輸出(如果條件為真)或者(如果條件為假)。在下文中,將公開其中w的值以及可能地b被加密的實(shí)施例。

圖2圖示了用于以隱藏方式執(zhí)行條件變換的系統(tǒng)。該系統(tǒng)包括用于識(shí)別值w的密碼表達(dá)的表示單元102。例如,w的值在表示單元102的輸入105處被提供,并且表示單元102被配置成加密w的值以生成w的加密表達(dá)r??商鎿Q地,表示單元102可以被配置成接收表達(dá)r作為輸入值101,并且將表達(dá)r轉(zhuǎn)發(fā)至導(dǎo)出單元103。在任一情況下,值w與其密碼表達(dá)r之間的示例關(guān)系可以被解釋如下。

標(biāo)示應(yīng)當(dāng)被編碼的運(yùn)算數(shù)(運(yùn)算的輸入值)的集合。定義狀態(tài)的有限集和具有等于的基數(shù)的乘積的基數(shù)的有限集v。的元素通過秘密編碼函數(shù)以一對(duì)一的方式被映射到v。元素的編碼代表是集合的成員。每個(gè)元素的代表的數(shù)量因而等于的基數(shù)。作為結(jié)果,攜帶來自v的符號(hào)的數(shù)據(jù)路徑等于(的基數(shù)=1)或?qū)捰冢?imgfile="122392dest_path_image072.gif"wi="9"he="13"img-content="drawing"img-format="gif"orientation="portrait"inline="no"/>的基數(shù)>1)用于攜帶來自w的符號(hào)的數(shù)據(jù)路徑。換言之,當(dāng)的基數(shù)大于1時(shí),存在可以表示w的任何特定值的更多值,因?yàn)楸磉_(dá)不僅取決于w,而且取決于狀態(tài)變量,其不一定具有任何意義,但可以被隨機(jī)選擇。此狀態(tài)變量僅僅被引入以加密w的值并且隱藏w上執(zhí)行的任何運(yùn)算。優(yōu)選地,,或者至少w的基數(shù)等于的基數(shù)。然而,這不是限制。

考慮要被編碼(或隱藏)的函數(shù)。構(gòu)造函數(shù),使得,我們有。因此w的代表映射到的代表。一般定義可以是:

.(等式1)

在此示例中,的代表部分地由函數(shù)確定。即,使用關(guān)系,與的代表相關(guān)聯(lián)的狀態(tài)值可以取決于值w和與的代表相關(guān)聯(lián)的狀態(tài)二者。在一個(gè)特定示例中,g僅取決于,使得。然而,下文不限于此特定示例。

如等式1中所定義的運(yùn)算的編碼和值表達(dá)因而進(jìn)一步使用某種映射g來隱藏。該映射g對(duì)發(fā)生在程序中的每個(gè)和每一個(gè)運(yùn)算而言可能是不同的。相應(yīng)地,具有相應(yīng)運(yùn)算的多個(gè)指令引入了分別具有關(guān)系的對(duì)應(yīng)的多個(gè)指令。具有運(yùn)算的指令的執(zhí)行順序可以誘導(dǎo)具有關(guān)系的指令的執(zhí)行順序。實(shí)際上,除了由運(yùn)算構(gòu)成的計(jì)算之外,新的計(jì)算開始存在以計(jì)算。該后者的計(jì)算在下文中被稱為計(jì)算或軌跡。類似地,對(duì)于程序中通過引入相應(yīng)的加密函數(shù)的序列的每個(gè)和每一個(gè)運(yùn)算而言,加密函數(shù)可能是不同的,使得在每個(gè)運(yùn)算之后,任何值w的表達(dá)可能是不同的。在這樣的情況下,等式1推廣為等式1a:

.(等式1a)

對(duì)于指令的描述,可以采用等式1的對(duì)稱一般化??紤]函數(shù),關(guān)系。等式1可以被推廣為:

(等式2)

在這樣的情況下,等式1中的也許部分信息可能作為的部分而被傳遞??梢孕纬蓛煞N觀察結(jié)果。第一種觀察結(jié)果是,在一個(gè)特定示例中,以及可以是加密術(shù),并且“僅僅”組合這些值。第二種觀察結(jié)果是,作為值以及作為狀態(tài)的作用被視為衰減。能夠確定或者、或者就足夠了。

為了掩蓋程序流,跳躍運(yùn)算可以被消除并且用上述表達(dá)上的可替換的運(yùn)算代替。然而,與現(xiàn)代處理器架構(gòu)的if轉(zhuǎn)換特征的情況不同的是,此if轉(zhuǎn)換未被進(jìn)行以防止昂貴的管道破壞,而是移除控制流中任何可觀察到的變化。這樣,控制流的分析并不暴露在程序中進(jìn)行的任何選擇。進(jìn)一步地,當(dāng)對(duì)諸如“如果布爾型b為真,則進(jìn)行運(yùn)算f,不然進(jìn)行運(yùn)算g”之類的條件程序進(jìn)行編碼時(shí),可以借助于本文公開的技術(shù)確保兩個(gè)分支(“運(yùn)算f”和“運(yùn)算g”)都對(duì)產(chǎn)生貢獻(xiàn),不管條件(“如果布爾型b為真”)的結(jié)果如何。通過這樣做,可以實(shí)現(xiàn)條件在整個(gè)程序上的統(tǒng)計(jì)散布。例如,

?w的發(fā)展由對(duì)應(yīng)于條件的結(jié)果的分支確定,

?的發(fā)展由不對(duì)應(yīng)于條件的結(jié)果的分支確定。

二者可以同時(shí)計(jì)算,并且/或者可以借助于而不可分離地連接到彼此。通過分析所得的數(shù)據(jù),所采取的分支和條件的值都不能確定??梢韵跅l件的結(jié)果在現(xiàn)有技術(shù)中實(shí)現(xiàn)的跳躍運(yùn)算,從而使得難以從程序的控制流提取信息。可以使值取決于if-then-if構(gòu)造的兩個(gè)分支。就信息論而言,的熵散布非常好。

例如,由圖1的變換單元101執(zhí)行的變換的程序表示可以如下:

ifbthen:=f(w)else:=g(w)。

在圖2所示的示例實(shí)施例中,導(dǎo)出單元103接收如上文所解釋的值w的加密表達(dá)r,以及關(guān)于條件b104的輸入信息。此輸入信息可以是布爾型的或者加密的布爾型變量??商鎿Q地,輸入信息可以包括可以通過例如變換單元101在定義條件的述語中組合的一個(gè)或多個(gè)變量。

圖1的上述條件程序可以通過使用如上所述的狀態(tài)變量引入冗余來重新編程,其中是運(yùn)算數(shù)w的表達(dá),并且是結(jié)果的表達(dá),使得對(duì)于一些值,。導(dǎo)出單元103的輸出可以概括如下:

ifb

then:=;

else:=

運(yùn)算各自可以以查找表的形式實(shí)現(xiàn)。然而,為了避免if語句和對(duì)應(yīng)的條件跳躍運(yùn)算在導(dǎo)出單元103內(nèi)的執(zhí)行,有可能的是借助于查找表來實(shí)現(xiàn)導(dǎo)出單元103,該查找表將b和表達(dá)r的組合直接映射到的對(duì)應(yīng)值。這里,b可以是加密的布爾型變量。而且,b可以用一個(gè)或多個(gè)輸入變量代替,其中條件b是那些變量的函數(shù)。在這樣的情況下,這些變量和表達(dá)r的組合可以通過查找表而映射到的對(duì)應(yīng)值。在這樣的情況下,定義條件b的函數(shù)可以與查找表中的fg一起編碼。取代查找表的是,可以使用查找表的網(wǎng)絡(luò)。在本領(lǐng)域中將函數(shù)實(shí)現(xiàn)為查找表的網(wǎng)絡(luò)的方式本身是已知的。

如從上文可以看到,運(yùn)算fg二者對(duì)表達(dá)具有影響,不管條件(“ifb”)的結(jié)果如何。因此運(yùn)算fg二者對(duì)的“熵”產(chǎn)生貢獻(xiàn),使得難以從這些條件運(yùn)算提取信息。

圖3圖示了導(dǎo)出單元103的示例實(shí)現(xiàn)方式。在這個(gè)特定實(shí)現(xiàn)方式中,if語句(或條件跳躍運(yùn)算)被兩個(gè)交換運(yùn)算305和306取代。這樣的交換運(yùn)算可以例如以查找表的形式實(shí)現(xiàn)。下面三行中每一個(gè)相應(yīng)行中描述的運(yùn)算可以例如通過相應(yīng)的查找表實(shí)現(xiàn)。

輸入:br,其中。

行1:ifbthen:=else:=fi

行2::=.

行3:ifbthen:=else:=fi

輸出:,其中。

上述代碼片段中的行1解釋了交換運(yùn)算305的功能,其基于條件b(數(shù)字104)有條件地交換表達(dá)的值(w)和狀態(tài)()部分。上述代碼片段的行2解釋在塊307中函數(shù)fg如何應(yīng)用表達(dá)。行3解釋交換運(yùn)算306的功能,其再次基于條件b(數(shù)字104)有條件地交換表達(dá)的值(w)和狀態(tài)()部分。

注意到,取決于b,可以是。在行2中,符號(hào)p和q被定義成使得。在行2中,在b為真的情況下,函數(shù)f被有效地應(yīng)用到w。然而,如果b不為真,則函數(shù)g被有效應(yīng)用到w,但是由于行1的前述交換運(yùn)算的緣故,w已經(jīng)變?yōu)楸磉_(dá)的“狀態(tài)”或“”部分的一部分。因此,附加的交換運(yùn)算在行3中被提供,以交換的“w”和“”部分。在行3中,符號(hào)u和v被定義成使得。即,。在行3中,在b不為真的情況下,在表達(dá)的“狀態(tài)”或“”部分中捕獲的期望值被移到表達(dá)的“w”部分。

行1和3各自表示交換函數(shù)。這樣的交換函數(shù)可以實(shí)現(xiàn)為查找表,其中基于b和表達(dá)r(或,分別地)的值查找正確值。有可能的是,通過選擇,,使得,針對(duì)行1和3二者使用相同的查找表。也可能的是,在直接將rb的值映射到的對(duì)應(yīng)值的單個(gè)查找表中對(duì)行1至3的結(jié)果進(jìn)行編碼。

參照?qǐng)D2,執(zhí)行對(duì)應(yīng)于該代碼片段的隱藏計(jì)算的導(dǎo)出單元103也可以被配置成確定輸出如下:

輸入:條件b和表達(dá)r,其中。

ifb

then:=;

else:=

這里,h為從的映射。在此案例中沒有使用交換運(yùn)算。再者,該實(shí)現(xiàn)方式適合于其中的情況,或者當(dāng)w的基數(shù)不同于的基數(shù)時(shí)的情況??赡艿氖牵圆檎冶淼男问綄?shí)現(xiàn)if子句的兩個(gè)分支,并且取決于條件b應(yīng)用查找表中的一個(gè)。函數(shù)fg將影響結(jié)果,不管條件b如何??商鎿Q地,可以實(shí)現(xiàn)將b(或確定b的變量)和r的元組映射到對(duì)應(yīng)的表達(dá)中的一個(gè)查找表。

一種特殊情況是,在程序的非隱藏版本中不存在else分支,即考慮程序

ifbthen:=f(w)end。

在這種情況下,先前示例的函數(shù)等同于同一性。即,確定單元103被配置成確定表達(dá),使得基于所述條件,有:

(當(dāng)條件為真時(shí)),或者

(當(dāng)條件為假時(shí))。

這本身沒有造成安全風(fēng)險(xiǎn),因?yàn)榭偸谴嬖谀撤N發(fā)展并且熵散布通過將函數(shù)f應(yīng)用到w或應(yīng)用到加密域的狀態(tài)來維持。然而,這種情形可以進(jìn)一步通過經(jīng)由插入針對(duì)不受影響的變量的虛擬運(yùn)算平衡兩個(gè)分支來改進(jìn)。考慮運(yùn)算“平衡(blance)”,其目的是進(jìn)一步通過平衡任何if語句隱藏程序,其中不同的變量可以取決于條件而被影響。

其中,例如意指。在這里,可以表示變量上的任何運(yùn)算,其不改變?cè)撟兞俊@?i>dummy(y)可以意指下述中任何一個(gè):,,。鑒于本公開,其他虛擬運(yùn)算對(duì)本領(lǐng)域技術(shù)人員而言將是顯而易見的。

換言之,包括多個(gè)分支(其中每一個(gè)分支取決于條件而被有條件地執(zhí)行)的條件代碼片段可以通過下述進(jìn)行平衡:

?確定在條件分支的至少一個(gè)分支中變化但在條件分支的至少一個(gè)其他分支中不變的變量;

?創(chuàng)建針對(duì)確定的變量的虛擬運(yùn)算;

?將該虛擬運(yùn)算包括在條件分支的所述至少一個(gè)其他分支中。

上面的三個(gè)步驟可以針對(duì)條件分支中涉及的每一個(gè)變量進(jìn)行重復(fù)。

圖4圖示了一種有條件地執(zhí)行運(yùn)算的方法。在步驟401中,借助于表達(dá)r表示值w,其中w是集合w的元素,其中,并且r是表達(dá)的集合的元素,其中σ是狀態(tài)變量,該狀態(tài)變量為集合σ的元素并且向w的表達(dá)r提供冗余,并且是從w×σ到預(yù)定集合的密碼映射。例如,此表達(dá)r可以被接收??商鎿Q地,該表達(dá)可以通過確定狀態(tài)變量σ為隨機(jī)數(shù)并計(jì)算或查找而從輸入值w生成。

在步驟402中,確定值的表達(dá),其中是集合w的元素,其中是表達(dá)的集合的元素,其中,其中是狀態(tài)變量,該狀態(tài)變量為集合σ的元素并且向的表達(dá)提供冗余,其中是從w×σ到預(yù)定集合的一一密碼映射。例如,基于確定條件b和表達(dá)r的一個(gè)或多個(gè)輸入變量在查找表中查找的值??蛇x地,如上文所描述,執(zhí)行表查找的序列,涉及交換運(yùn)算、函數(shù)運(yùn)算以及另一交換運(yùn)算。所述表被以這樣的方式設(shè)計(jì):使得取決于條件b,f(w)相關(guān)聯(lián)或者相關(guān)聯(lián)。這里,是在w上定義的映射,并且h是從w×σ到w的映射。

在一個(gè)特定示例中,上述方法將f應(yīng)用于加密表達(dá)的“w”部分,使得基于該條件,例如如果該條件為真,。否則,f被應(yīng)用到的“”部分,使得例如如果條件為假,。該方法的另外變形可以被提供,如上文參照?qǐng)D1至3所解釋。例如,可以形成具有“else”分支的變形,使得基于該條件,

圖5圖示了一種用于創(chuàng)建有條件地執(zhí)行運(yùn)算的機(jī)器代碼的系統(tǒng)。該系統(tǒng)包括:識(shí)別單元501,用于識(shí)別條件和條件運(yùn)算f,該條件運(yùn)算將在變量w上執(zhí)行,使得在條件成立的情況下計(jì)算變量,使得,其中是集合w的元素并且其中f是在w上定義的映射。例如,識(shí)別單元501可以連接到編譯器(未示出)的解析器模塊,其提取計(jì)算機(jī)程序的表達(dá)式,以便識(shí)別條件和條件運(yùn)算。

識(shí)別單元501可以將關(guān)于識(shí)別的條件和條件運(yùn)算的信息提供給第一生成單元502,其生成機(jī)器代碼。生成的機(jī)器代碼在被執(zhí)行時(shí)借助于表達(dá)r表示變量w,其中w是集合w的元素,其中并且r是表達(dá)的集合的元素,其中σ是狀態(tài)變量,該狀態(tài)變量為集合σ的元素并且向w的表達(dá)r提供冗余,并且是從w×σ到預(yù)定集合的一一密碼映射。例如,機(jī)器代碼可以從實(shí)際輸入值w和隨機(jī)數(shù)σ生成表達(dá)r??商鎿Q地,由第一生成單元502生成的機(jī)器代碼在被執(zhí)行時(shí)可以引用所述表達(dá)被存儲(chǔ)于其中的存儲(chǔ)器位置或者從另一個(gè)軟件組件或輸入設(shè)備接收表達(dá)r。

該系統(tǒng)進(jìn)一步包括第二生成單元503。第二生成單元503生成用于基于表達(dá)r和關(guān)于條件的輸入確定值的表達(dá)的機(jī)器代碼,其中是表達(dá)的集合的元素,其中,其中是狀態(tài)變量,該狀態(tài)變量為集合σ的元素并且向的表達(dá)提供冗余,其中是從w×σ到預(yù)定集合的一一密碼映射。如果所述條件成立,,并且如果所述條件不成立,=,其中h是從w×σ到w的映射。生成單元503可以包括表生成器(未示出),其生成如上所述可以用于實(shí)現(xiàn)所述功能的查找表中的一個(gè)或多個(gè)。該系統(tǒng)可以被擴(kuò)展以生成執(zhí)行如上所述的計(jì)算或表查找所必需的機(jī)器代碼。

圖6圖示了用于生成有條件地執(zhí)行運(yùn)算的機(jī)器代碼的系統(tǒng)的另一個(gè)實(shí)施例。與圖5類似的項(xiàng)目已被給出相同的附圖標(biāo)記,并且不需要再次詳細(xì)討論。該系統(tǒng)包括將涉及多個(gè)條件的嵌套條件運(yùn)算轉(zhuǎn)換成非嵌套條件運(yùn)算的序列的轉(zhuǎn)換單元601。特別地,在輸出值相同的意義上,具有對(duì)應(yīng)的條件的非嵌套條件運(yùn)算的序列等價(jià)于嵌套條件運(yùn)算。而且,具有對(duì)應(yīng)的條件的非嵌套條件運(yùn)算可以通過識(shí)別單元501以及代碼生成單元502和503來處理。

圖7圖示了一種將涉及多個(gè)條件的嵌套條件運(yùn)算轉(zhuǎn)換成非嵌套條件運(yùn)算的序列的示例方法。圖6的轉(zhuǎn)換單元601可以被配置成執(zhí)行圖7中圖示的方法。

在步驟701中,嵌套條件運(yùn)算的相應(yīng)條件分支的相應(yīng)表達(dá)式被轉(zhuǎn)換成輔助表達(dá)式的措辭。取決于條件,這些相應(yīng)表述與要被分配給特定變量的可替換值相關(guān)聯(lián)。即,所述表達(dá)式被指定為分配給生成的代碼的相同變量,但是所述條件確定哪個(gè)表達(dá)式將最終被分配給該變量。在步驟702中,如果確定了步驟701應(yīng)當(dāng)被重復(fù),則流程返回到步驟701,使得多個(gè)輔助表達(dá)式被生成,其中措辭以不同方式組合。如果在步驟702中,確定了已經(jīng)生成了足夠的輔助表達(dá)式,使得每一個(gè)條件運(yùn)算等價(jià)于輔助措辭的特定組合,則該方法從步驟703繼續(xù)進(jìn)行。在步驟703中,代碼被生成以評(píng)估輔助表達(dá)式并存儲(chǔ)它們的結(jié)果。該步驟可以涉及生成用于評(píng)估多個(gè)條件中至少一個(gè)的組合的代碼。接下來,在步驟704中,代碼被生成以取決于組合的條件將輔助表達(dá)式的結(jié)果組合,其中組合的條件是多個(gè)條件的組合,使得與關(guān)于條件不相關(guān)的分支對(duì)應(yīng)的措辭取消。

再次考慮條件代碼片段“ifbthenfelsegfi”。這樣的語句的條件分支fg可以包括多個(gè)表達(dá)式,例如標(biāo)示為例如“f;f”的運(yùn)算的序列,包含循環(huán)、遞歸或附加的條件代碼片段,比如附加if語句。后者的情形呈現(xiàn)嵌套布爾型受保衛(wèi)的選擇。

將程序p定義為:

現(xiàn)在,存在四個(gè)可替換方案(f,g,h,和j),其中只有一個(gè)將被執(zhí)行。當(dāng)上述技術(shù)應(yīng)用到p1和p2時(shí),取決于b1的主分支仍然不一定被所述隱藏技術(shù)完全覆蓋。

一種解決這個(gè)問題的方式是用非嵌套if語句的序列取代嵌套的if語句,并且通過這樣的方式做這件事:使得每一個(gè)分支(f,g,h,j)的表達(dá)式都在執(zhí)行該非嵌套if語句序列的過程中被評(píng)估。

為了以此方式轉(zhuǎn)變程序,首先可以通過插入虛擬運(yùn)算來平衡表達(dá)式。

一種系統(tǒng)化方法可以被應(yīng)用以使程序扁平化,使得它不再包含嵌套的if子句。

如我們之前看到的,如果程序關(guān)于熵完全平衡、特別是if子句的分支對(duì)完全平衡,則我們的方法關(guān)于密碼工作得最好。在分支包含兩個(gè)(無條件)分配以及一個(gè)或多個(gè)嵌套if子句的情況下,我們可以通過在if子句的每一個(gè)分支中如下分布這樣的分配的副本來使那些程序“扁平化(flatten)”:

考慮下面的優(yōu)選地關(guān)于變量x被平衡的嵌套if子句:

這里,exp0,exp1,exp2和exp3是取決于x的表達(dá)式。

引入p:=expi+expi+1和q:=expi?expi+1作為輔助變量,這個(gè)程序可以被變換成:

由于在兩個(gè)第二層級(jí)的if子句之后的延續(xù)部分現(xiàn)在變得相同,因此,該程序可以被“扁平化”成:

程序1:

或者,使用乘法變體:

所得的兩個(gè)if語句可以使用上文關(guān)于加密表達(dá)的技術(shù)來實(shí)現(xiàn)。例如,對(duì)于上述程序1的第一個(gè)if語句,表達(dá)r可以用來表示輸入變量x,并且表達(dá)r1和r2可以用來表示p和q。另外的表達(dá)可以用來表示程序1的第二個(gè)if語句的輸出x。

當(dāng)if語句被嵌套到較深層級(jí)時(shí),那么類似技術(shù)可以被應(yīng)用來將它們轉(zhuǎn)換成一系列順序的if語句。例如,考慮下面的其中if語句被雙嵌套的示例程序:

這個(gè)示例程序可以被轉(zhuǎn)換成一系列非嵌套if語句。為做到這一點(diǎn),可以采用兩步驟方法。首先,類似于單個(gè)嵌套if語句的情況,來自第三層級(jí)if子句的延續(xù)部分可以通過引入如下輔助變量p和q來統(tǒng)一:p:=expi+expi+1,且q:=expi-expi+1。這在下面的代碼中更詳細(xì)地被說明:

這個(gè)程序可以被扁平化以獲得沒有任何嵌套if子句的下述代碼:

對(duì)于任何表達(dá)式exp0至exp7,上面的將具有雙重嵌套if子句的程序轉(zhuǎn)換成具有順序的非嵌套if子句的程序的轉(zhuǎn)換過程可以應(yīng)用到具有上述格式的任何程序。

圖8圖示了一種創(chuàng)建有條件地執(zhí)行運(yùn)算的計(jì)算機(jī)代碼的方法。步驟801涉及識(shí)別條件和條件運(yùn)算f,該條件運(yùn)算將在變量w上執(zhí)行,使得在條件成立的情況下計(jì)算變量,使得,其中是集合w的元素并且其中f是在w上定義的映射。步驟802涉及生成第一計(jì)算機(jī)代碼,其中第一計(jì)算機(jī)代碼被配置成在被執(zhí)行時(shí),借助于表達(dá)r表示變量w,其中w是集合w的元素,其中并且r是表達(dá)的集合的元素,其中σ是狀態(tài)變量,該狀態(tài)變量為集合σ的元素并且向w的表達(dá)r提供冗余,并且是從w×σ到預(yù)定集合的一一密碼映射。步驟803涉及生成第二計(jì)算機(jī)代碼,其中第二計(jì)算機(jī)代碼被配置成在被執(zhí)行時(shí),基于關(guān)于條件的輸入確定值的表達(dá),其中是表達(dá)的集合的元素,其中,其中是狀態(tài)變量,該狀態(tài)變量為集合σ的元素并且向的表達(dá)提供冗余,其中是從w×σ到預(yù)定集合的一一密碼映射;并且其中在根據(jù)輸入所述條件成立的情況下,,并且在根據(jù)輸入所述條件不成立的情況下,=,其中且h是從w×σ到w的映射。

程序中跳躍的移除可以用來禁止分析控制流或涉及的值。計(jì)算在if語句的所有分支、甚至關(guān)于條件不相關(guān)的分支中進(jìn)行的計(jì)算以及將那些計(jì)算的結(jié)果組合在一個(gè)數(shù)據(jù)元件中可以幫助達(dá)到此目標(biāo)。

其中跳躍被抑制的表驅(qū)動(dòng)機(jī)器的系統(tǒng)可以被創(chuàng)建以移除程序的控制流中的變化,其中在布爾型受保衛(wèi)的選擇的情況下,形式的編碼沿著通過至多未采取的分支以及沿著通過至少w采取的分支發(fā)展。

圖9圖示了一種用于隱藏程序的變量集合的變化的系統(tǒng)。該系統(tǒng)包括值表示構(gòu)件902,用于借助于表達(dá)ri表示變量v1,v2,...,vn中的變量vi的值wi,其中w是集合w的元素,其中并且ri是表達(dá)的集合的元素,其中σi是狀態(tài)變量,該狀態(tài)變量為集合σ的元素并且向wi的表達(dá)ri提供冗余,并且是從w×σ到預(yù)定集合的一一密碼映射。此值表示構(gòu)件902可以使用上文公開的技術(shù)實(shí)現(xiàn)。值表示構(gòu)件902可以被配置成以指定方式由相應(yīng)的表達(dá)表示所有變量。例如,的值可以隨機(jī)選擇。值表示構(gòu)件902可以被配置成基于底層值wi計(jì)算表達(dá)ri。值表示構(gòu)件902還可以被配置成從另一個(gè)設(shè)備或從系統(tǒng)的另一個(gè)組件接收表達(dá)ri。n是正整數(shù)。即,一般地,變量集合v包含至少一個(gè)變量。

該系統(tǒng)可以進(jìn)一步包括動(dòng)作表示構(gòu)件903,其用于借助于在上的動(dòng)作和在v\上的動(dòng)作表示v的子集中的變量的值上的動(dòng)作,以獲得更新的表達(dá),其中,其中是從w×σ到預(yù)定集合的一一密碼映射。可以與相等??商鎿Q地,可以是不同于的密碼映射。因而,有可能的是,當(dāng)改變表達(dá)時(shí)改變密碼映射。

而且,動(dòng)作表示構(gòu)件可以被配置成執(zhí)行上的動(dòng)作和v\上的動(dòng)作??商鎿Q地,動(dòng)作表示構(gòu)件可以被配置成僅通過生成在被執(zhí)行時(shí)執(zhí)行所述動(dòng)作的程序代碼來表示這些動(dòng)作。在后者情況下,動(dòng)作表示構(gòu)件903可以被配置成識(shí)別(例如借助于解析器)定義子集中的變量的值上的動(dòng)作的程序代碼,并且將該程序代碼變換成定義上的動(dòng)作和v\上的動(dòng)作的程序代碼。

上的動(dòng)作被配置成根據(jù)變量vj的變化值w’j改變變量的集合v'中的每一個(gè)變量vj的表達(dá)rj,并且v\v'上的動(dòng)作被配置成根據(jù)狀態(tài)變量σk的變化值改變v\v'中每一個(gè)變量vk的表達(dá)rk。特別地,v\v'中每一個(gè)變量vk的表達(dá)rk被改變成表示的相同值的表達(dá)。變量集合v'中的每一個(gè)變量vj的表達(dá)rj可以根據(jù)變量的變化值而改變,保持的相同值(或可選地的不同值)。

所述動(dòng)作可以包括if語句,其在條件成立的情況下定義變量集合上的動(dòng)作,并且在條件不成立的情況下定義變量集合上的動(dòng)作,其中二者是v的子集。換言之,變量集合v包括的并集,從而。動(dòng)作表示構(gòu)件903可以被配置成在條件成立的情況下使用變量集合作為變量集合。這意味著動(dòng)作表示構(gòu)件903通過根據(jù)變量的變化值改變變量集合中的每一個(gè)變量vj的表達(dá)rj來執(zhí)行v1上的動(dòng)作,并且通過根據(jù)狀態(tài)變量σk的變化值改變v\v1中每一個(gè)變量vk的表達(dá)rk來執(zhí)行v\上的動(dòng)作。

而且,動(dòng)作表示構(gòu)件903可以被配置成在條件不成立的情況下使用變量集合作為變量集合。這意味著動(dòng)作表示構(gòu)件903通過根據(jù)變量的變化值改變變量集合中的每一個(gè)變量vj的表達(dá)rj來執(zhí)行v2上的動(dòng)作,并且通過根據(jù)狀態(tài)變量σk的變化值改變v\v2中每一個(gè)變量vk的表達(dá)rk來執(zhí)行v\上的動(dòng)作。

變量中的一些可以通過條件代碼片段來改變,無論條件是否成立。在這樣的情況下,變量集合v1和變量集合v2可以具有交集v3,其中。該動(dòng)作在條件成立的情況下根據(jù)函數(shù)fm并且在條件不成立的情況下根據(jù)函數(shù)gm改變集合v3的每一個(gè)變量vm的值。該動(dòng)作表示構(gòu)件被配置成通過確定集合v3的每一個(gè)變化的變量vm的表達(dá)的動(dòng)作表示這些動(dòng)作,使得在所述條件成立的情況下,,但在所述條件不成立的情況下,。這里,hm是從w×σ到w的映射。

動(dòng)作表示構(gòu)件903可以借助于查找運(yùn)算來實(shí)現(xiàn)。為此目的,一個(gè)或多個(gè)查找表可以被準(zhǔn)備并存儲(chǔ)在系統(tǒng)的存儲(chǔ)器中。條件是否成立不需要由系統(tǒng)明確確定。相反,可以接收確定條件的值的輸入。所述一個(gè)或多個(gè)查找表可以將這些輸入值連同所述表達(dá)一起映射到對(duì)應(yīng)的改變的表達(dá)。動(dòng)作表示構(gòu)件903因而可以被配置成使用至少一個(gè)查找表促成與關(guān)于條件的輸入和表達(dá)對(duì)應(yīng)的表達(dá)的查找,所述至少一個(gè)查找表將關(guān)于條件的輸入和表達(dá)的元組映射到對(duì)應(yīng)的表達(dá)。

動(dòng)作表示構(gòu)件903還可以借助于上文參照?qǐng)D3描述的一個(gè)或多個(gè)交換運(yùn)算來實(shí)現(xiàn)。動(dòng)作表示構(gòu)件903可以被配置成識(shí)別確定條件b的一個(gè)或多個(gè)輸入變量,并且如上所述,可以包含用于變量集合中的每一個(gè)變量的第一交換單元305、函數(shù)評(píng)估單元307和/或第二交換單元306。

上面描述的值表示構(gòu)件902和動(dòng)作表示構(gòu)件903可以操作地耦合到上面描述的轉(zhuǎn)換單元601。轉(zhuǎn)換單元601通過涉及第二多個(gè)條件的非嵌套條件運(yùn)算的功能等價(jià)序列表示涉及第一多個(gè)嵌套條件的嵌套條件運(yùn)算。例如,非嵌套條件運(yùn)算的序列可以由轉(zhuǎn)換單元601通過處理嵌套條件運(yùn)算生成。每一個(gè)所得的非嵌套條件運(yùn)算可以以所闡述的方式單獨(dú)地通過動(dòng)作表示構(gòu)件903表示。

圖10圖示了一種隱藏程序的變量集合的變化的方法。在步驟1001中,由表達(dá)ri表示變量v1,v2,...,vn中的變量vi的值wi,其中w是集合w的元素,其中,并且ri是表達(dá)的集合的元素,其中σi是狀態(tài)變量,該狀態(tài)變量為集合σ的元素并且向wi的表達(dá)ri提供冗余,并且是從w×σ到預(yù)定集合的一一密碼映射。在步驟1002中,由在v'上的動(dòng)作和在v\v'上的動(dòng)作表示v的子集v'的值上的動(dòng)作,以獲得更新的表達(dá),其中,其中是從w×σ到預(yù)定集合的一一密碼映射,并且其中在v'上的動(dòng)作被配置成根據(jù)變量vj的變化值w'j改變變量的集合v'中的每一個(gè)變量vj的表達(dá)rj,并且在v\v'上的動(dòng)作被配置成根據(jù)σk的變化值σ'k改變v\v'中每一個(gè)變量vk的表達(dá)rk。

應(yīng)當(dāng)領(lǐng)會(huì),本發(fā)明還適用于適于將本發(fā)明付諸實(shí)踐的計(jì)算機(jī)程序,特別是載體上或載體中的計(jì)算機(jī)程序。涉及計(jì)算機(jī)程序產(chǎn)品的實(shí)施例包括與本文闡述的至少一個(gè)方法的每一個(gè)處理步驟對(duì)應(yīng)的計(jì)算機(jī)可執(zhí)行指令。這些指令可以被細(xì)分成子例程和/或存儲(chǔ)在可以靜態(tài)或動(dòng)態(tài)鏈接的一個(gè)或多個(gè)文件中。涉及計(jì)算機(jī)程序產(chǎn)品的另一個(gè)實(shí)施例包括對(duì)于本文闡述的系統(tǒng)和/或產(chǎn)品中至少一個(gè)的每一個(gè)單元對(duì)應(yīng)的計(jì)算機(jī)可執(zhí)行指令。這些指令可以被細(xì)分成子例程和/或存儲(chǔ)在可以靜態(tài)或動(dòng)態(tài)鏈接的一個(gè)或多個(gè)文件中。

計(jì)算機(jī)程序的載體可以是能夠承載程序的任何實(shí)體或設(shè)備。例如,載體可以包括存儲(chǔ)介質(zhì),比如rom,例如cdrom或半導(dǎo)體rom、或磁記錄介質(zhì)。而且,載體可以是可傳輸載體,比如電信號(hào)或光信號(hào),其可以經(jīng)由電氣或光學(xué)線纜或通過無線電或其他手段被傳達(dá)。當(dāng)程序體現(xiàn)在這樣的信號(hào)中時(shí),載體可以由這樣的線纜或其他設(shè)備或構(gòu)件構(gòu)成??商鎿Q地,載體可以是程序體現(xiàn)在其中的集成電路,該集成電路適于執(zhí)行相關(guān)方法或用在相關(guān)方法的執(zhí)行中。

應(yīng)當(dāng)注意,上述實(shí)施例說明而非限制本發(fā)明,并且本領(lǐng)域技術(shù)人員將能夠在不脫離隨附權(quán)利要求的范圍的情況下設(shè)計(jì)出許多可替換實(shí)施例。在權(quán)利要求中,置于括號(hào)之間的任何附圖標(biāo)記不應(yīng)當(dāng)被解釋為限制權(quán)利要求。動(dòng)詞“包括”及其詞形變化的使用不排除權(quán)利要求中敘述的那些之外的元件或步驟的存在。元件之前的冠詞“一”不排除多個(gè)這樣的元件的存在。本發(fā)明可以借助于包括若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)實(shí)現(xiàn)。在列舉若干構(gòu)件的設(shè)備權(quán)利要求中,這些構(gòu)件中的若干個(gè)可以由同一項(xiàng)硬件體現(xiàn)。在相互不同的從屬權(quán)利要求中敘述某些措施的純粹事實(shí)并不表示這些措施的組合不能用于獲益。

當(dāng)前第1頁(yè)1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1