本發(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的元素,其中
動(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,使得
其中在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)作,其中變量集合v是v1和v2的并集,從而
變量集合v1和變量集合v2可以具有被所述兩個(gè)動(dòng)作影響的變量的交集v3,從而
其中hm是從w×σ到w的映射。
使用此特征,攻擊者難以發(fā)現(xiàn)是fm實(shí)際應(yīng)用到變量wm還是gm應(yīng)用到變量wm。
動(dòng)作表示構(gòu)件可以被配置成使用將關(guān)于條件的輸入和表達(dá)
在一個(gè)特定示例中,
其中
其中
當(dāng)計(jì)算表達(dá)
動(dòng)作表示構(gòu)件可以進(jìn)一步包括函數(shù)評(píng)估單元,其用于計(jì)算函數(shù)以基于表達(dá)
其中f是在w上定義的映射并且g是在w上定義的映射。
這樣,取決于之前執(zhí)行的交換運(yùn)算,函數(shù)f和g可以應(yīng)用到表達(dá)
在一個(gè)特定示例中,
在一個(gè)示例中,對(duì)于w和σ的所有值和
在一個(gè)示例中,在
其中在
其中對(duì)于
這是對(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的元素,其中
借助于在v'上的動(dòng)作和在v\v'上的動(dòng)作表示v的子集v'的值上的動(dòng)作,以獲得更新的表達(dá)
在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的元素,其中
導(dǎo)出單元,用于基于關(guān)于條件的輸入從表達(dá)r導(dǎo)出值
表示單元提供了表達(dá)r,其為值w的冗余表達(dá)。即,w的任何單個(gè)值具有許多不同的表達(dá)r,因?yàn)?i>r可以是
確定單元可以被配置成確定表達(dá)
導(dǎo)出單元可以被配置成使用將輸入和表達(dá)r的元組映射到對(duì)應(yīng)的表達(dá)
例如,
其中
其中
當(dāng)計(jì)算表達(dá)
導(dǎo)出單元可以進(jìn)一步包括函數(shù)評(píng)估單元,其用于計(jì)算基于表達(dá)
其中g是在w上定義的映射。
這樣,取決于之前執(zhí)行的交換運(yùn)算,函數(shù)f和g可以應(yīng)用到表達(dá)
例如,對(duì)于w和
確定單元可以被配置成確定表達(dá)
根據(jù)本發(fā)明的另一個(gè)方面,提供一種有條件地執(zhí)行運(yùn)算的方法。該方法包括以下步驟:
借助于表達(dá)r表示值w,其中w是集合w的元素,其中
基于關(guān)于條件的輸入從表達(dá)r導(dǎo)出值
根據(jù)本發(fā)明的另一個(gè)方面,提供一種用于創(chuàng)建有條件地執(zhí)行運(yùn)算的計(jì)算機(jī)代碼的系統(tǒng)。該系統(tǒng)包括:
識(shí)別單元,用于識(shí)別條件和條件運(yùn)算f,其將在變量w上執(zhí)行,從而在條件成立的情況下計(jì)算變量
第一生成單元,用于生成第一計(jì)算機(jī)代碼,其中第一計(jì)算機(jī)代碼被配置成在被執(zhí)行時(shí),借助于表達(dá)r表示變量w,其中w是集合w的元素,其中
第二生成單元,用于生成第二計(jì)算機(jī)代碼,其中第二計(jì)算機(jī)代碼被配置成在被執(zhí)行時(shí),基于關(guān)于條件的輸入確定值
這樣的系統(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ì)算變量
生成第一計(jì)算機(jī)代碼,其中第一計(jì)算機(jī)代碼被配置成在被執(zhí)行時(shí),借助于表達(dá)r表示變量w,其中w是集合w的元素,其中
生成第二計(jì)算機(jī)代碼,其中第二計(jì)算機(jī)代碼被配置成在被執(zhí)行時(shí),基于關(guān)于條件的輸入確定值
根據(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的
圖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)系可以被解釋如下。
令
考慮要被編碼(或隱藏)的函數(shù)
在此示例中,
如等式1中所定義的運(yùn)算
對(duì)于指令的描述,可以采用等式1的對(duì)稱一般化??紤]函數(shù)
在這樣的情況下,等式1中
為了掩蓋程序流,跳躍運(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ì)
?w的發(fā)展由對(duì)應(yīng)于條件的結(jié)果的分支確定,
?
例如,由圖1的變換單元101執(zhí)行的變換的程序表示可以如下:
ifbthen
在圖2所示的示例實(shí)施例中,導(dǎo)出單元103接收如上文所解釋的值w的加密表達(dá)r,以及關(guān)于條件b104的輸入信息。此輸入信息可以是布爾型的或者加密的布爾型變量??商鎿Q地,輸入信息可以包括可以通過例如變換單元101在定義條件的述語中組合的一個(gè)或多個(gè)變量。
圖1的上述條件程序可以通過使用如上所述的狀態(tài)變量引入冗余來重新編程,其中
ifb
then
else
運(yùn)算
如從上文可以看到,運(yùn)算f和g二者對(duì)表達(dá)
圖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)。
輸入:b和r,其中
行1:ifbthen
行2:
行3:ifbthen
輸出:
上述代碼片段中的行1解釋了交換運(yùn)算305的功能,其基于條件b(數(shù)字104)有條件地交換表達(dá)
注意到,取決于b,
行1和3各自表示交換函數(shù)。這樣的交換函數(shù)可以實(shí)現(xiàn)為查找表,其中基于b和表達(dá)r(或
參照?qǐng)D2,執(zhí)行對(duì)應(yīng)于該代碼片段的隱藏計(jì)算的導(dǎo)出單元103也可以被配置成確定輸出如下:
輸入:條件b和表達(dá)r,其中
ifb
then
else
這里,h為從
一種特殊情況是,在程序的非隱藏版本中不存在else分支,即考慮程序
ifbthen
在這種情況下,先前示例的函數(shù)
這本身沒有造成安全風(fēng)險(xiǎn),因?yàn)榭偸谴嬖谀撤N發(fā)展并且熵散布通過將函數(shù)f應(yīng)用到w或應(yīng)用到加密域的狀態(tài)
其中,例如
換言之,包括多個(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的元素,其中
在步驟402中,確定值
在一個(gè)特定示例中,上述方法將f應(yīng)用于加密表達(dá)
圖5圖示了一種用于創(chuàng)建有條件地執(zhí)行運(yùn)算的機(jī)器代碼的系統(tǒng)。該系統(tǒng)包括:識(shí)別單元501,用于識(shí)別條件和條件運(yùn)算f,該條件運(yùn)算將在變量w上執(zhí)行,使得在條件成立的情況下計(jì)算變量
識(shí)別單元501可以將關(guān)于識(shí)別的條件和條件運(yùn)算的信息提供給第一生成單元502,其生成機(jī)器代碼。生成的機(jī)器代碼在被執(zhí)行時(shí)借助于表達(dá)r表示變量w,其中w是集合w的元素,其中
該系統(tǒng)進(jìn)一步包括第二生成單元503。第二生成單元503生成用于基于表達(dá)r和關(guān)于條件的輸入確定值
圖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”。這樣的語句的條件分支f和g可以包括多個(gè)表達(dá)式,例如標(biāo)示為例如“f
將程序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á)
當(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ì)算變量
程序中跳躍的移除可以用來禁止分析控制流或涉及的值。計(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)的選擇的情況下,
圖9圖示了一種用于隱藏程序的變量集合
該系統(tǒng)可以進(jìn)一步包括動(dòng)作表示構(gòu)件903,其用于借助于在
而且,動(dòng)作表示構(gòu)件可以被配置成執(zhí)行
在
所述動(dòng)作可以包括if語句,其在條件成立的情況下定義變量集合
而且,動(dòng)作表示構(gòu)件903可以被配置成在條件不成立的情況下使用變量集合
變量中的一些可以通過條件代碼片段來改變,無論條件是否成立。在這樣的情況下,變量集合v1和變量集合v2可以具有交集v3,其中
動(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á)
動(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ò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圖示了一種隱藏程序的變量集合
應(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í)并不表示這些措施的組合不能用于獲益。