两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

通過等效數(shù)學(xué)表達式對計算機程序代碼加水印的制作方法

文檔序號:6553400閱讀:250來源:國知局
專利名稱:通過等效數(shù)學(xué)表達式對計算機程序代碼加水印的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及計算機程序代碼(例如源代碼或目標代碼)中的信息(尤其是數(shù)字水印)的嵌入與檢測。
背景技術(shù)
對于軟件的制造商和/或銷售商來說,通常希望控制對該軟件的銷售,特別是能夠保護軟件不被盜版、建立/證明軟件的所有權(quán)、驗證軟件和/或識別/跟蹤所銷售軟件的拷貝。因此,需要用于對計算機軟件(特別是源代碼或目標代碼)加水印的有效技術(shù)。這種加水印技術(shù)的目的是例如通過操縱/改變或添加程序代碼而在軟件中添加信息(水印或僅僅是標記)。該信息可用作用于識別目的的版權(quán)標記(copyright notice),以識別軟件的購買者,等等。通常希望的是,嵌入該信息,以使得該信息不能被購買者去除,但是可以利用與將標記加入到軟件中的處理有關(guān)的知識而從軟件中提取該信息。具體地說,如果不容易檢測到水印(例如,通過統(tǒng)計分析),則水印可以說是秘密的。如果水印能夠經(jīng)受得住諸如代碼迷亂(obfuscation)或代碼優(yōu)化的語義保持變換和/或能夠經(jīng)受得住沖突攻擊(collision attack),則水印可以說是有適應(yīng)力的(resilient)。
通常,水印可能受到不同的攻擊以使水印不可識別。各種攻擊的示例包括加性攻擊(additive attack)將新水印添加到代碼中,使得原始標記不再能夠被提取,或使得不可能確定哪一個是原始標記。
變形性攻擊(distortive attack)對代碼進行諸如代碼迷亂或代碼優(yōu)化的語義保持變換,希望水印將被變形并且不能被識別。
減性攻擊(subtractive attack)確定水印的位置,并從程序中裁減掉該標記。
因此,總的問題在于提供加水印技術(shù),這些加水印技術(shù)所產(chǎn)生的標記例如在軟件的購買者的這些攻擊下是魯棒的。
當可檢測到所嵌入的水印時,可以將其從程序中去除(裁減掉)或由等效表達式來替代,這很可能破壞原始標記。在現(xiàn)有的解決方案中,往往太容易識別嵌入部分,并因此可能被裁減掉。
迷亂是用于使代碼變復(fù)雜的技術(shù)。當對代碼進行反編譯時迷亂使得代碼更加難以理解,但是迷亂通常對代碼的功能沒有影響。通過使程序?qū)τ诜聪蚬こ處焷碚f更加困難,而可以使用迷亂程序來保護程序。US6668325公開了多個代碼迷亂技術(shù),這些技術(shù)可以在加水印的情況下使用。
然而,即使上述現(xiàn)有技術(shù)的方法提供了對計算機程序代碼的加水印,也仍然存在以下問題提供了導(dǎo)致在研究進行了標記的軟件時更加難以檢測的水印的加水印技術(shù)。
具體地說,通過程序代碼中的簡單的迷亂變化(例如,通過重命名變量、對指令重新排序、循環(huán)轉(zhuǎn)換等)而進行的水印嵌入涉及以下問題水印不具有充分的適應(yīng)力,因為迷亂技術(shù)通常完全改變了這些特性,從而使得水印容易受到迷亂攻擊。

發(fā)明內(nèi)容
通過一種在計算機程序代碼中嵌入信息的方法來解決上述和其他問題,該計算機程序代碼包括多個程序語句,該方法包括-解析所述計算機程序代碼以識別包括第一數(shù)學(xué)表達式在內(nèi)的至少一個程序語句,所述程序語句適于使數(shù)據(jù)處理系統(tǒng)對數(shù)學(xué)表達式進行求值(evaluate)以產(chǎn)生結(jié)果;其中所述第一數(shù)學(xué)表達式至少包括適于產(chǎn)生至少一個數(shù)值結(jié)果的第一代數(shù)表達式;-通過對所述第一數(shù)學(xué)表達式執(zhí)行預(yù)定的轉(zhuǎn)換而生成經(jīng)修改的數(shù)學(xué)表達式,其中所述經(jīng)修改的數(shù)學(xué)表達式包括經(jīng)轉(zhuǎn)換的代數(shù)表達式,而不是所述第一代數(shù)表達式,以使得所述經(jīng)修改的數(shù)學(xué)表達式適于產(chǎn)生與所述第一數(shù)學(xué)表達式相同的結(jié)果,并且其中所述經(jīng)修改的數(shù)學(xué)表達式表示所述信息的至少一部分;-在所述經(jīng)識別的程序語句中由所述經(jīng)修改的數(shù)學(xué)表達式替換所述第一數(shù)學(xué)表達式。
通過識別程序代碼中的數(shù)學(xué)表達式并將它們替換為可以簡化為原始表達式的等效表達式,提供了更加難以檢測的水印。被包括到代碼中的等效表達式對待嵌入的信息(例如,水印)進行編碼。有利的是可以將這些數(shù)學(xué)表達式轉(zhuǎn)換為等效的、但明顯更復(fù)雜的表達式,從而使得難以發(fā)現(xiàn)和/或難以簡化這些表達式。
這里使用的術(shù)語“程序語句”旨在包括構(gòu)成編程語言的單位、特別是這種構(gòu)成的最小單位。各種語句的示例包括定義、聲明、賦值、條件語句、循環(huán)和函數(shù)/過程調(diào)用。
這里使用的編程語言中的術(shù)語“表達式”旨在包括值、變量和函數(shù)的組合,其中根據(jù)對于具體編程語言的具體優(yōu)先規(guī)則和關(guān)聯(lián)的規(guī)則來解釋該組合,其中組合適于產(chǎn)生和返回結(jié)果(即,值)。代數(shù)表達式產(chǎn)生數(shù)值結(jié)果,即,具有數(shù)值數(shù)據(jù)類型的結(jié)果,例如浮點數(shù)據(jù)類型或整數(shù)數(shù)據(jù)類型。
在一些實施例中,該方法包括通過將從第一代數(shù)表達式得到的代數(shù)表達式與輔助代數(shù)表達式進行組合來生成經(jīng)轉(zhuǎn)換的代數(shù)表達式,其中該輔助代數(shù)表達式是表示所述信息的至少一部分。結(jié)果,提供了嵌入信息的簡單機制,因為可以存儲不同輔助代數(shù)表達式的庫/表,其中各個表達式對相應(yīng)的信息進行編碼。
當該方法包括對所述第一代數(shù)表達式進行解析,以識別至少第一變量,以及由至少兩個變量的組合(例如,線性組合)來代替所述第一變量時,使得經(jīng)轉(zhuǎn)換的表達式的后續(xù)簡化變得更加困難,從而使得水印更具有適應(yīng)力。
在一些實施例中,所述第一代數(shù)表達式包括至少一個具有整數(shù)數(shù)據(jù)類型的變量;并且其中所述經(jīng)修改的數(shù)學(xué)表達式適于僅針對與所述整數(shù)數(shù)據(jù)類型一致的所述至少一個變量的值而產(chǎn)生與所述第一數(shù)學(xué)表達式相同的結(jié)果。具體地說,通過修改表達式的多個部分(例如,多項式的系數(shù)),使其僅針對數(shù)值的特定子集產(chǎn)生相同的結(jié)果,可以使得所得到的數(shù)學(xué)表達式更加難以簡化,從而提供更有適應(yīng)力的水印。當在程序執(zhí)行過程中已知該表達式僅針對值的該子集而被求值時,該修改不影響程序的執(zhí)行。
在另一實施例中,經(jīng)識別的程序語句適于將所述第一數(shù)學(xué)表達式求值為整數(shù)數(shù)據(jù)類型;并且其中所述經(jīng)修改的數(shù)學(xué)表達式適于產(chǎn)生浮點結(jié)果,只有在被轉(zhuǎn)換為整數(shù)數(shù)據(jù)類型時該浮點結(jié)果才導(dǎo)致與第一數(shù)學(xué)結(jié)果的求值相同的數(shù)值結(jié)果。
當該方法還包括將待嵌入的信息編碼為一個或更多個碼字,并且各碼字與數(shù)學(xué)表達式的一個或更多個相應(yīng)的預(yù)定轉(zhuǎn)換相對應(yīng)時,提供了用于嵌入多種附加信息的有效編碼方案。
當對信息的編碼包括使用糾錯碼對信息進行編碼時,進一步提高了嵌入信息的適應(yīng)力。
在一個實施例中,所述第一數(shù)學(xué)表達式包括第一和第二代數(shù)表達式的比較,該比較適于使數(shù)據(jù)處理系統(tǒng)對所述第一和第二代數(shù)表達式的結(jié)果進行比較;并且生成經(jīng)修改的數(shù)學(xué)表達式的步驟包括由相應(yīng)的第一和第二經(jīng)轉(zhuǎn)換的代數(shù)表達式來替代所述第一和第二代數(shù)表達式中的至少一個。
在另一實施例中,所述第一數(shù)學(xué)表達式包括和第一多項式與零的比較等效的第一條件;并且其中生成經(jīng)修改的數(shù)學(xué)表達式的步驟包括由經(jīng)轉(zhuǎn)換的多項式與零的比較來替代所述第一條件,其中經(jīng)轉(zhuǎn)換的多項式可化簡為至少所述第一多項式與第二多項式的乘積。
如果一多項式在相同域上可以因式分解為非平凡的多個多項式,則可以說該多項式是可化簡的。例如,在有理多項式的域中(即,具有有理系數(shù)的多項式f(x)),如果對于x,存在具有有理系數(shù)的兩個非常數(shù)多項式g(x)和h(x)使得f(x)=g(x)h(x),則可以說f(x)是可化簡的。
在一個實施例中,所述第一數(shù)學(xué)表達式包括和第一多項式與零的比較等效的第一條件;并且其中生成經(jīng)修改的數(shù)學(xué)表達式的步驟包括由經(jīng)轉(zhuǎn)換的多項式與零的比較來替代所述第一條件,其中經(jīng)轉(zhuǎn)換的多項式包括具有由預(yù)定的隱性謂詞(opaque predicate)確定的對應(yīng)的隱性值的輔助變量,并且其中僅當該輔助變量由其隱性值置換時,經(jīng)轉(zhuǎn)換的多項式可化簡為至少所述第一多項式與第二多項式的乘積。結(jié)果,進一步降低了替換攻擊的風險。例如,隱性謂詞可以是從隱性謂詞的集合中選擇的,該隱性謂詞的集合是預(yù)先構(gòu)建和存儲的,以使得該集合的隱性謂詞的值在加水印時是已知的。
這里使用的術(shù)語“在加水印時”旨在表示嵌入系統(tǒng)嵌入水印時。因此,當將一特性描述為在加水印時為已知、可使用或可控制時,所述特性對于嵌入水印的水印嵌入處理是已知/可使用的,或是可由嵌入水印的水印嵌入處理進行控制。
這里,術(shù)語隱性謂詞指的是其結(jié)果在加水印時是已知的、但對于對手難以分解的謂詞,即,布爾表達式(其求值為與“1”或“0”相對應(yīng)的TRUE或FALSE)。因此,術(shù)語隱性值是指隱性謂詞的真值。
具體地說,當所述第二多項式?jīng)]有實根時,經(jīng)轉(zhuǎn)換的多項式與零的比較保證始終產(chǎn)生與第一條件相同的結(jié)果。因此,程序流沒有被水印的引入而改變。
本發(fā)明涉及包括了上述方法和下面的對應(yīng)裝置和計算機程序的不同方面,這些方面分別產(chǎn)生了結(jié)合上述方法描述的一個或更多個益處和優(yōu)點,這些方面分別具有與結(jié)合上述方法描述的實施例相對應(yīng)的一個或更多個實施例。
具體地說,一種對嵌入在計算機程序代碼(該計算機程序代碼包括多個程序語句)中的信息進行檢測的方法,該方法包括以下步驟-解析計算機程序代碼,以識別包括第一數(shù)學(xué)表達式在內(nèi)的至少一個程序語句,該程序語句適于使數(shù)據(jù)處理系統(tǒng)對數(shù)學(xué)表達式進行求值以產(chǎn)生結(jié)果;其中所述第一數(shù)學(xué)表達式至少包括適于產(chǎn)生至少一個數(shù)值結(jié)果的第一代數(shù)表達式;-至少執(zhí)行所述第一數(shù)學(xué)表達式的預(yù)定的轉(zhuǎn)換集合中的第一轉(zhuǎn)換,其中該轉(zhuǎn)換包括使用與所述第一代數(shù)表達式不同的經(jīng)轉(zhuǎn)換的代數(shù)表達式來替代所述第一代數(shù)表達式;
-確定所述第一轉(zhuǎn)換是否導(dǎo)致了產(chǎn)生與所述第一數(shù)學(xué)表達式相同的結(jié)果的經(jīng)轉(zhuǎn)換的數(shù)學(xué)表達式;以及-根據(jù)所述確定從所述第一轉(zhuǎn)換提取所述嵌入信息的至少一部分。
在一些實施例中,所述第一數(shù)學(xué)表達式是程序語句的至少一部分,當在數(shù)據(jù)處理系統(tǒng)上執(zhí)行時,該程序語句使數(shù)據(jù)處理系統(tǒng)生成至少一個具有數(shù)值數(shù)據(jù)類型或布爾數(shù)據(jù)類型的結(jié)果。在一個實施例中,該數(shù)值數(shù)據(jù)類型可以是浮點數(shù)據(jù)類型或整數(shù)類型。
在一些實施例中,所述第一代數(shù)表達式包括多項式。
應(yīng)該注意,上述和下文中的方法的特征可以以軟件實現(xiàn),并在數(shù)據(jù)處理裝置上執(zhí)行或在由諸如計算機可執(zhí)行指令的程序代碼手段(means)的執(zhí)行所產(chǎn)生的其他處理裝置上執(zhí)行。在這里和在下文中,術(shù)語處理裝置包括適于執(zhí)行上述功能的任何電路和/或裝置。具體來說,上述術(shù)語包括通用或?qū)S玫目删幊涛⑻幚砥?、?shù)字信號處理器(DSP)、專用集成電路(ASIC)、可編程邏輯陣列(PLA)、現(xiàn)場可編程門陣列(FPGA)、專用電子電路等,或它們的組合。具體地說,在一些實施例中,待嵌入信息的計算機程序代碼或待檢測嵌入信息的計算機程序代碼被載入到計算機的存儲器中,嵌入或檢測此處描述的信息的方法的步驟由所述計算機自動地執(zhí)行。
例如,程序代碼手段可從存儲介質(zhì)或經(jīng)由計算機網(wǎng)絡(luò)從另一計算機載入到諸如RAM(隨機存取存儲器)的存儲器中。作為另一種選擇,所描述的特征可以由硬連線電路而不是軟件來實現(xiàn),或者由硬連線電路與軟件的組合來實現(xiàn)。
根據(jù)一個方面,一種數(shù)據(jù)處理系統(tǒng)被適當?shù)貥?gòu)造為執(zhí)行上述和下文中的方法的步驟。
根據(jù)另一方面,一種計算機程序產(chǎn)品包括計算機可執(zhí)行指令,當在數(shù)據(jù)處理系統(tǒng)上執(zhí)行時,該計算機可執(zhí)行指令適于使數(shù)據(jù)處理系統(tǒng)執(zhí)行上述和下文中的方法。
在一些實施例中,所述計算機程序產(chǎn)品是作為計算機可讀介質(zhì)而嵌入的,該計算機可讀介質(zhì)上存儲有計算機可執(zhí)行指令。例如,該計算機可讀介質(zhì)可以是其上存儲有計算機可執(zhí)行指令的只讀光盤(CD)、光盤、磁盤、磁存儲介質(zhì)、存儲棒等。例如,該計算機可讀介質(zhì)上可以存儲用于嵌入水印的軟件應(yīng)用程序和用于檢測程序代碼中的水印的軟件應(yīng)用程序。這些軟件應(yīng)用程序可以實現(xiàn)為獨立的應(yīng)用程序,組合在單個應(yīng)用程序中。在其他實施例中,該計算機程序產(chǎn)品是作為數(shù)據(jù)信號(例如,適當調(diào)制的載波信號)而實現(xiàn)的。例如,可以提供計算機可執(zhí)行指令,以經(jīng)由計算機網(wǎng)絡(luò)從服務(wù)器計算機進行下載。
在一些實施例中,該計算機程序產(chǎn)品包括軟件編譯器,該軟件編譯器包括適于使數(shù)據(jù)處理系統(tǒng)執(zhí)行上述和下文中的方法,作為由該編譯器執(zhí)行的許多編譯途徑之一的功能。因此,提供了用于編譯和水印嵌入的集成軟件工具。此外,由于這里描述的水印嵌入涉及作為常規(guī)編譯器應(yīng)用的用于分析源代碼的一些相同的代碼分析技術(shù),因此可以重新使用相應(yīng)的軟件功能,從而提供有效的軟件實現(xiàn)。
在又一方面中,計算機程序包括通過此處描述的方法嵌入其中的嵌入信息。在一些實施例中,計算機程序被實現(xiàn)為其上存儲有計算機程序的計算機可讀介質(zhì)。在其他實施例中,計算機程序被實現(xiàn)為數(shù)據(jù)信號(例如,經(jīng)適當調(diào)制的載波信號)。
為了進行描述,術(shù)語存儲裝置和計算機可讀介質(zhì)旨在包括任何適當?shù)拇鎯橘|(zhì)、裝置或電路,例如只讀存儲器(ROM)、隨機存取存儲器(RAM)、閃存、可擦可編程只讀存儲器(EPROM)、易失性或非易失性存儲器、光存儲裝置、磁存儲裝置、磁盤、光盤、硬盤等。


參照附圖根據(jù)下面描述的實施例,上述和其它方面將變得明了并得到說明,在附圖中圖1示出了水印嵌入處理的示意性框圖。
圖2示出了水印提取處理的示意性框圖。
圖3例示了將用于對水印進行編碼的碼字與相應(yīng)的數(shù)學(xué)轉(zhuǎn)換相關(guān)聯(lián)的表。
圖4例示了在與幾何表示相關(guān)的表達式中嵌入水印的示例。
具體實施例方式
圖1示出了水印嵌入處理的示意性框圖。該處理接收源代碼101和要嵌入在源代碼中的數(shù)字水印102。
源代碼101通常是由程序員已編寫的計算機程序的形式,通常是用正式的編程語言(例如C、C++、Java等)來編寫。可以通過編譯器自動地將源代碼編譯為目標代碼或機器代碼,或者由解釋程序來執(zhí)行源代碼。
源代碼101可以表示為一個或更多個文本文件或任意其他適當?shù)臄?shù)字表示。作為另一種選擇,加水印處理可接收不同類型的輸入代碼(例如目標代碼),在該輸入代碼中可以識別數(shù)學(xué)表達式。
數(shù)字水印102可以是待嵌入的水印信息的任意適當?shù)臄?shù)字表示,該水印信息例如為識別源代碼的接收者的信息、源代碼的作者、識別源代碼的標識符、數(shù)字證書、偽隨機數(shù)、密鑰和/或任意其他適當?shù)男畔?。例如,水印可以表示為位序列?br> 將源代碼輸入到解析器模塊103。該解析器模塊解析源代碼并識別適當?shù)臄?shù)學(xué)表達式。解析器模塊可以使用現(xiàn)有技術(shù)中已知的用于解析源代碼的任意適當?shù)募夹g(shù),例如當解析源代碼以識別對應(yīng)編程語言的構(gòu)成部分(例如變量定義、常量定義、函數(shù)、程序語句、條件、循環(huán)、賦值、表達式等)時,由常規(guī)編譯器使用的技術(shù)的子集。根據(jù)在源代碼中識別的所有數(shù)學(xué)表達式,解析器還可以選擇表達式的預(yù)定子集作為適當?shù)谋磉_式。哪些表達式合適取決于此處描述的加水印方案的具體實現(xiàn)。例如,在一個實施例中,解析器模塊可識別包括多項式在內(nèi)的所有數(shù)學(xué)表達式,或者可以重新表達以包括多項式的所有數(shù)學(xué)表達式。在一個實施例中,解析器可以識別其中相互比較兩個代數(shù)表達式的所有比較。在另一實施例中,解析器模塊可識別表示特定類型的幾何問題的所有表達式。下面將更詳細地描述適當數(shù)學(xué)表達式的一些具體示例。還應(yīng)該理解,在一些實施例中,解析器可識別一種以上類型的數(shù)學(xué)表達式。解析器模塊將所識別的表達式104或至少針對它們在源代碼中的相應(yīng)位置的指針轉(zhuǎn)發(fā)給代碼轉(zhuǎn)換模塊105。
將數(shù)字水印102輸入到編碼器模塊106中。該編碼器模塊根據(jù)預(yù)定代碼對數(shù)字水印進行編碼。例如,代碼107可包括一組碼字,各個碼字都由特定的數(shù)學(xué)轉(zhuǎn)換、由特定的數(shù)學(xué)表達式等來表示。例如,在一個實施例中,各個碼字都與不可化簡的多項式或多項式的預(yù)定組合相對應(yīng)。當代碼107是糾錯碼、具有特定冗余度的代碼等時,隨后的嵌入水印的檢測變得更可靠??蛇x的是,該編碼器模塊還從解析器模塊103接收信息110(例如,與檢測到的適當表達式的數(shù)量相關(guān)的信息)。在一些實施例中,該信息使得編碼器能夠?qū)λR別的表達式、所識別的表達式的數(shù)量等調(diào)整編碼。例如,可以基于所找到的適當表達式的數(shù)量來控制在編碼中使用的冗余級別。識別到的適當表達式越多,可以包括在經(jīng)編碼的水印中的冗余度越高。
在一些實施例中,各個碼字與分別表示對應(yīng)碼字的多個另選的轉(zhuǎn)換相關(guān)聯(lián),并且編碼器可以根據(jù)所識別的數(shù)學(xué)表達式的類型來選擇另選的轉(zhuǎn)換中的一個。例如,如果所識別的表達式涉及多項式與零的比較,則編碼器可以選擇該多項式與沒有實根的多項式的乘法。在其他類型的表達式中,該轉(zhuǎn)換可涉及與一個或更多個具有其他特性的多項式的乘法和/或除法,如下面將更詳細描述的。
圖3例示了將用于對水印進行編碼的碼字與相應(yīng)的數(shù)學(xué)轉(zhuǎn)換相關(guān)聯(lián)的表。在圖3的示例中,碼字與數(shù)學(xué)轉(zhuǎn)換之間的關(guān)系由總體上被指定為300的表或二維陣列來表示。表中的每一行對應(yīng)于碼字中的一個,將這些碼字指定為用于對水印進行編碼的代碼的CW1、CW2、...、CWN。表中的每一列對應(yīng)于被指定為E1、E2、...、EK的表達式類型。表300中的各個單元表示被指定為TF11、TF12、TF13、...、TFNK的特定轉(zhuǎn)換,這些轉(zhuǎn)換用于特定的碼字和特定類型的表達式。例如,各個單元可包括指向?qū)崿F(xiàn)對應(yīng)轉(zhuǎn)換的特定函數(shù)的指針、一個或更多個多項式的系數(shù)等。
例如,一種類型的表達式可以是多項式與零的比較,另一類型可以是利用多項式對變量進行賦值等等。此外,對于各種類型的表達式,可以存在一個或更多個的子類型,例如一個變量中的多項式、兩個變量中的多項式、包含等式的條件、包含不等式的條件等。另選的或另外的是,表達式的類型還可以根據(jù)解析器可以在程序代碼中檢測到的任何附加信息而進行細分,這些附加信息例如為表達式中所涉及的對一個或更多個變量的限制,例如這些變量只可以取正值等。下面將描述這種附加信息的示例。
要理解的是,表達式的上述子類型和/或附加信息可以另選地實現(xiàn)為針對實現(xiàn)這些轉(zhuǎn)換的相應(yīng)函數(shù)的附加輸入?yún)?shù)。在另一實施例中,表300可以表示為更高維度的陣列,例如具有由碼字、表達式類型和通過附加信息確定的指數(shù)的三維陣列。
再參照圖1,將編碼器模塊106生成的經(jīng)編碼的水印108(例如,數(shù)學(xué)轉(zhuǎn)換的序列、多項式的序列等)輸入到轉(zhuǎn)換模塊105中。
轉(zhuǎn)換模塊105從解析器模塊103接收所識別的數(shù)學(xué)表達式104并從編碼器模塊106接收經(jīng)編碼的水印108。接著,該轉(zhuǎn)換模塊根據(jù)所接收的經(jīng)編碼的水印對所識別的數(shù)學(xué)表達式進行轉(zhuǎn)換。下面更詳細地描述由該轉(zhuǎn)換模塊執(zhí)行的轉(zhuǎn)換的示例。這些轉(zhuǎn)換產(chǎn)生了插入到源代碼中的加了水印的數(shù)學(xué)表達式,而不是原始識別的表達式,由此產(chǎn)生加了水印的源代碼109。隨后可以對該加了水印的源代碼進行進一步的處理,例如編譯、壓縮、編碼等等。
圖2示出水印檢測/提取處理的示意性框圖。水印提取處理接收加了水印的源代碼209或如上所述的另一類型的加了水印的輸入代碼。將加了水印的源代碼209輸入到解析器模塊203中,解析器模塊203與上述水印嵌入處理的解析器模塊103相似。解析器模塊203識別所有可能的候選數(shù)學(xué)表達式,例如包括多項式的所有表達式。如上所述,該解析器模塊檢測哪些類型的表達式取決于加水印處理的具體實現(xiàn)。作為另一種選擇,解析器模塊203還可以接收原始的(即,未標記的)程序代碼,并識別與該未標記的代碼不同的所有表達式。作為另一示例,解析器模塊203還接收程序代碼中的已執(zhí)行表示水印信息的轉(zhuǎn)換的位置的列表。這種列表例如可以在嵌入處理過程中被存儲,并存儲在水印庫中。將所識別的候選表達式204輸入到逆轉(zhuǎn)換模塊205中。該逆轉(zhuǎn)換模塊試圖執(zhí)行多個預(yù)定的候選數(shù)學(xué)轉(zhuǎn)換,例如通過試圖進行將所識別的各個多項式除以在水印的編碼中使用的代碼的各個多項式的多項式除法,來對多項式進行化簡。如果逆轉(zhuǎn)換模塊不能執(zhí)行任何預(yù)定的候選轉(zhuǎn)換的集合,則所識別的候選表達式被忽略為沒有加水印。如果這些候選轉(zhuǎn)換中的一個成功,則將對應(yīng)的轉(zhuǎn)換添加到所識別的轉(zhuǎn)換的列表中。因此,在處理了所有候選表達式之后,逆轉(zhuǎn)換模塊生成了被輸入到解碼器模塊206中的所識別的轉(zhuǎn)換208的序列。
解碼器模塊206接收所識別的轉(zhuǎn)換208的序列,并根據(jù)在嵌入處理中使用的已知代碼207對該序列進行解碼。當該解碼還包括檢錯或者甚至糾錯時,提高了檢測可靠性。因此,該解碼器生成經(jīng)解碼的水印202。在一些實施例中,隨后將經(jīng)解碼的水印與基準水印或基準水印的列表進行比較,以識別嵌入的信息。
下面,更詳細地描述用于嵌入水印的適當數(shù)學(xué)表達式的不同示例以及對應(yīng)轉(zhuǎn)換的示例。
多項式作為第一示例,考慮多項式。
在水印嵌入處理中,在源代碼中識別包含多項式的多個指令。適當表達式的示例包括簡單語句,例如“ifx=2”、“while(x>2)”,等等。其他示例可包括更復(fù)雜的表達式,例如“y=x3+4x2+3x+2”。然后,由用于對一些水印信息進行編碼的等效的擴展表達式來代替所識別的多項式。
例如,可以如下執(zhí)行上述示例語句的轉(zhuǎn)換if(x=2) <->if(x-2=0) <->if((x-2)(x2+x+4)=0) <->if(x3-x2+2x-8=0)因此,在該示例中,表達式“if(x=2)”首先被轉(zhuǎn)換為規(guī)范形式,即,使該等式成為具有多項式f(x)的形式f(x)=0。隨后,將多項式f(x)與多項式g(x)相乘,其中g(shù)(x)與如上所述的對水印進行編碼的一組碼字中的一個相對應(yīng)。在該示例中,代碼可由分別與對應(yīng)的多項式相對應(yīng)的多個碼字組成,以使得所有的碼字多項式是沒有實根的不可化簡的多項式。在上述示例中,假設(shè)碼字多項式是(x2+x+4)。最后,這些多項式彼此相乘,得到加了水印的表達式“if x3-x2+2x-8=0”。
在所識別的指令“while(x>2)”的示例中,例如可以根據(jù)以下的處理來執(zhí)行基于碼字多項式(例如(x2+x+4))的類似轉(zhuǎn)換處理while(x>2)<->while(x-2>0)<->while((x-2)(x2+x+4)>0) <->
while(x3-x2+2x-8>0)。
因此,在上述兩個示例中,在展開時使用的表達式(即(x2+x+4))對水印信息(的一部分)進行編碼。
如果所識別的表達式與變量賦值(其中使用多項式(例如“y=x-2”)對變量進行賦值)相對應(yīng),該轉(zhuǎn)換可包括例如根據(jù)以下的處理與一個或更多個對應(yīng)的碼字多項式的乘法或除法,以使得所賦的值不變y=x-2<->y=(x-2)(x+1)/(x+1)<->y=(x2-x-2)/(x+1)因此,在該示例中,該碼字多項式為x+1。
在更復(fù)雜的示例中,該轉(zhuǎn)換可包括以下處理y=x-2=(x-2)(x+1)(x+2)(x+3)/[(x+1)(x+2)(x+3)]=(x-2)(x+1)(x+2)(x+2)/[(x+1)(x+2)(x+3)]+(x-2)(x+1)(x+2)/[(x+1)(x+2)(x+3)]=(x-2)(x+2)(x+2)/(x+2)(x+3)+(x-2)(x+1)/(x+1)(x+3)=(x3+2x2-4x-8)/(x2+5x+6)+(x2-x-2)/(x2+4x+3)因此,在該示例中,表達式“y=x-2”由加了水印的表達式“y=(x3+2x2-4x-8)/(x2+5x+6)+(x2-x-2)/(x2+4x+3)”替代,并且對水印信息(的一部分)進行編碼的碼字多項式為(x+1)(x+2)(x+3)。
作為另一示例,我們考慮程序代碼段while(X<10){X++;}該段包括兩個表達式,這兩個表達式包括、或至少可表示為多項式,即,X<10和X++,X++表示賦值X=X+1。根據(jù)以下處理例如使用碼字X2+X+2對第一表達式加水印X<10<->X-10<0<->(X-10)(X2+X+2)<0<->(X3-9X2-8X-20)<0根據(jù)以下處理例如使用碼字X2+X+2、X+1、X+2對第二表達式加水印X=X+1<->X=(X4+2X3+2X2+2X+1)/(X3+2X2+3X+2)+(X3+4X2+5X+2)/(X3+3X2+4X+4)因此,具有通過多項式(X2+X+2)、X+1、X+2進行了編碼的嵌入水印的上述程序代碼段為while(X3-9X2-8X-20<0){X=(X4+2X3+2X2+2X+1)/(X3+2X2+3X+2)+(X3+4X2+5X+2)/(X3+3X2+4X+4);}在后續(xù)的水印提取過程中,該提取處理可執(zhí)行以下步驟-識別在上述示例中可能其中已嵌入了信息的表達式,例如(X4+2X3+2X2+2X+1)/(X3+2X2+3X+2)+(X3+4X2+5X+2)/(X3+3X2+4X+4);-簡化該表達式,并識別用于展開該表達式的因數(shù),例如上述示例中的(X2+X+2)、(X+1)、(X+2)。例如,可以通過將該代碼與原始的未標記代碼進行比較來識別該展開式。
-根據(jù)所識別的多項式對信息進行解碼。
下面,描述多種方法,通過這些方法,還可以保護所嵌入的水印不受攻擊。
數(shù)據(jù)迷亂攻擊者可能進行數(shù)據(jù)迷亂攻擊,在數(shù)據(jù)迷亂攻擊中,變量x被置換為例如x-a或a·x,即,通過執(zhí)行變量平移和/或縮放。這種置換將影響多項式。因此,希望使多項式中的信息對于變量的平移或縮放具有適應(yīng)力。
考慮了該方面的編碼方法的實施例基于在展開時使用的多項式的根。如果在復(fù)平面中繪出這些根,則如果該變量被縮放和/或平移,得到的圖將是縮放的和/或平移的。因此,在一個實施例中,根據(jù)一組預(yù)定的規(guī)則在與經(jīng)平移和縮放的根的圖相對應(yīng)的多項式中對信息進行編碼。這些規(guī)則的示例包括預(yù)定的縮放(例如,使得兩個根之間的最大距離為1)和預(yù)定的平移(例如,使得最左邊的根位于實數(shù)軸上)。但是,應(yīng)該理解,可以使用其他適當?shù)目s放、平移等等。該方法還提供了通過利用不同的多項式集合(例如具有經(jīng)縮放和/或平移的變量的多項式)對數(shù)據(jù)進行展開而對同一數(shù)據(jù)進行編碼的可能性。
加性攻擊另一種可能的攻擊是例如通過使用相同的方法來插入另一水印而進一步展開多項式(所謂的加性攻擊)。但是,這種攻擊將不改變以下事實存在原始多項式,并且在水印提取過程中將檢測原始多項式。通過只允許多項式的特定組合或通過引入其他糾錯機制,在這種攻擊中仍可以識別水印。例如,在水印的編碼中的各個碼字可以與多項式的預(yù)定組合相關(guān)。
簡化和置換使用適于簡化數(shù)學(xué)表達式并將數(shù)學(xué)表達式置換為等效的更簡單的表達式的符號工具箱的攻擊可能是成功的,即,可能能夠去除水印。在下面,將描述使攻擊者難以對表達式進行因式分解以分析因式并將該表達式置換為較簡單的表達式的多種方法,從而降低了這種攻擊成功的風險。
1)引入多個變量多項式的簡化需要進行因式分解,例如多項式f(x)因式分解為兩個或更多個多項式的乘積。通過在包含多個變量的表達式中引入一個以上的變量可以使得更加難以進行因式分解。這可以通過識別數(shù)學(xué)表達式中的變量并將所識別的變量置換為兩個(或更多個)變量來實現(xiàn)。例如,在表達式z=2中,變量z可以根據(jù)代換z=x+y而替換為兩個輔助變量的和,從而獲得表達式x+y-2=0。此外,該置換包括修改所有語句,在該語句中,對z進行更新以相應(yīng)地更新x或y(或二者)。最后,使用包含多個變量的多項式來展開表達式,例如,如下面的示例所例示的z=2<->x+y-2=0<->(x+y-2)((x-y)2+1)=0
<->x3+2x2y+...-2=0還通過下面的示例來例示該方法考慮代碼段while(z<n){z++;}通過對表達式z<n加水印來標記上述代碼。具體地說,在該示例中,通過將表達式z<n轉(zhuǎn)換為x+y-n<0并通過對水印(的一部分)進行編碼的x和y的多項式來展開多項式x+y-n,可以將變量z置換為x+y。同時,導(dǎo)致更新(在該情況下為遞增)z的值的語句z++由這樣的語句替代,在該語句中相應(yīng)地更新變量x和y中的一個。例如,語句z++可被轉(zhuǎn)換為if(任意條件)x++;elsey++;因此,無論測試什么條件,變量x和y中的一個且僅有一個遞增。
總之,可以通過將上述示例代碼段置換為下式而對上述示例代碼段加水印while((x3+4y3-n3+5*x2y+x2n+8xy2-xn2-3yn2+2xyn)<0){if((x2+y2)>n)x++;elsey++;}這里x2+y2>0作為偽條件而被引入,因為該條件評價為TRUE或FALSE都沒有關(guān)系。
2)使用隱藏信息在一些情況下,在加水印時可以知道特定的變量僅可具有特定的值(例如僅正值、僅整數(shù)值、僅數(shù)值的特定有限集合,等等)。在這種情況下,可以展開表達式,以使得新表達式與只針對該變量的這些值的原始表達式相對應(yīng)。
例如如果已知z是整數(shù),則z=2等效于(z-2)(2z-1)=0<->2z2-5z+2=0。
如果已知z是有理數(shù),則z=2<->(z-2)(z2-2)=0<->z3-2z2-2z+4=0。
如果已知z>0。則z=2<->(z-2)(z+1)=0<->z2-z-2=0。
使用僅取特定值的變量的一種方式是執(zhí)行條件語句內(nèi)的展開,該條件語句保證變量只取所關(guān)注的值,例如在“if z>0”塊內(nèi),已知變量z只取正值。
示例在以下代碼段中while((x+y)>0){if(x+y==1){...
}}通過對表達式x+y==1進行轉(zhuǎn)換以使得轉(zhuǎn)換后的表達式只針對x+y>0等效于x+y==1,來對表達式x+y==1加水印。
這種轉(zhuǎn)換的示例為if(x+y==1)<->if((x+y-1)(x2+y2-2xy+x+1)==0)<->if((x3+y+3xy-x2y-y2-xy2+y3-1)==0)即使攻擊工具對表達式(x3+y+3xy-x2y-y2-xy2+y3-1)進行因式分解以獲得(x+y-1)(x2+y2-2xy+x+1),該工具仍然必須知道右括號大于0,因為x+y>0。
3)引入隱性變量通過添加由隱性謂詞所確定的變量,可以使得展開的表達式不可化簡。在水印提取處理中置換針對隱性值的變量,這使得可以對表達式進行因式分解。
示例(x2-y)是不可化簡的,但如果將y置換為1,則(x2-1)=(x-1)(x+1)。結(jié)果,提供了隱性謂詞y=1,則可如下轉(zhuǎn)換語句“if(x=1)”if(x=1)<->if(x3-x2y+xy2-y3=0)類似地,假設(shè)隱性謂詞z=0,則可如下轉(zhuǎn)換語句“if(x=1)”if(x=1)<->if(-1+x-x2+x3+x*z-x2*z-z=0)。
4)引入噪聲通過將噪聲添加到多項式中的系數(shù)上,即,通過稍微改變一個或更多個系數(shù),可以使展開的多元多項式不可化簡。該方法改變原始表達式,因此嵌入處理需要確保程序行為不改變。但是,該方法在許多情況下都有用,例如,在已知變量只取整數(shù)值并且程序語句包括其中檢查不等式的條件語句的情況下,例如,如下面示例所例示的while(x-2>0)<->while(x3-x2+2x-8>0)<->while(x3-x2+2x-9>0)(如果x是整數(shù))上述方法依賴于以下條件待加水印的代碼包括多個多項式。下面將描述根據(jù)上述方案如何對其他指令進行轉(zhuǎn)換,以包括多項式,并且由此用于加水印的目的。下面給出了可以使用多項式來實現(xiàn)的指令的多個示例簡單比較if(x=2)<->if(x-2=0)if(x>2)<->if(x-2>0)邏輯表達式在下面的表達式中,“|”表示邏輯OR算子,而“&”為邏輯AND算子。
if(x=2|x=4) <-> if((x-2)(x-4)=0)<-> if(x2-6x+8=0)if(x=2&y=4)<->if((x-2)2+(y-4)2=0)<-> if(x2+y2-8y-2x+20=0)if((x<2)&(x<4)) <->if x2-6x+8<0此外,通過使用多項式的級數(shù)展開,可以將初等函數(shù)近似為任意的精度,例如,sin(x)=x-x3/6+x5/120+...。
在一些實施例中,加水印處理插入了對水印進行編碼的新的偽指令,例如,條件(x2+y2-2xy+2x-2y+2)>0將始終取值為真,因此可插入在代碼中的任何地方。
在上文中,描述了加水印方法,在該方法中,通過由包括展開的多項式(即,可以進行因式分解以使得因式之一為原始多項式的多項式)的等效表達式來替代包括多項式的數(shù)學(xué)表達式(或者可被轉(zhuǎn)換為包括多項式的數(shù)學(xué)表達式),來將信息嵌入到程序代碼中。
下面,將描述不依賴多項式的更通用的方法。根據(jù)該通用化的方法,可以將數(shù)學(xué)表達式置換為多項式以外的等效表達式。
創(chuàng)建等效代數(shù)表達式下面是可轉(zhuǎn)換為等效表達式的表達式的示例,該等效表達式中嵌入有水印信息(下文中,“|..|”表示絕對值)if(x=2)<-> if(|x-1|-|x-3|=0)if(x=2|x=4) <-> if(|x-3|-1=0)if(x=2&y=4)<-> if(|x-2|+|y-4|=0)if(2<x&x<4) <-> if(|x-3|-1<0)<-> if(|x-2|+|x-4|-2=0)if(x為偶數(shù))<-> if(sin(pi*x/2=0)<-> if(sin(pi*x/2)-sin(pi*x)/2=0)if(x>=0|y>=0) <-> if(xy+|x|y+x|y|+|xy|=0)if(x>=0&y>=0) <-> if(|x|+|y|-x-y=0)<-> if x2+y2-x|x|-y|y|=0if(2<x<4&1<y<3)<->if(x2-6x+8<0&y2-4y+3<0)<->參見上述示例這里要注意的是(x<0|y<0)<->!(x>=0&y>=0),以及if(x<0|y<0)<->if(x2+y2-x|x|-y|y|=0)如結(jié)合多項式所描述的,如果在加水印時可以獲得與變量x的可能值有關(guān)的附加信息,則加水印處理可創(chuàng)建只對x的這些值有效的等效表達式。
例如,如果在加水印時,已知x>0,則可以進行下面的轉(zhuǎn)換if(x=3) <-> if(|x-1|-2=0)。
作為另一示例,如果在加水印時,已知x是整數(shù),則可以進行下面的轉(zhuǎn)換if(x=3) <-> if|4x-7|-5=0。
此外,諸如“if(x=2)”的表達式可以置換為包括例如指數(shù)、對數(shù)和/或三角函數(shù)的復(fù)雜表達式。例如if(x=2) <-> if(ln(x+2)/ln(2)-2x+2=0),(假設(shè)x>0)if(x=0|x=1) <-> if(2x-sqrt(x)-1=0)if(x=-1|x=1) <-> if(sin(pi*x)/log(x2)!=0,(假設(shè)x是整數(shù))if(0<x<1)<-> if(2x-sqrt(x)-1<0)if-1<x<1)<-> if(sin(pi*x)/x-x2/4<0)。
圖4例示了在與幾何表示相關(guān)的表達式中嵌入水印的示例。
在一些實施例中,加水印處理可利用描述幾何問題的表達式;例如,三維空間中的線與(非平行)平面的交點的解(即,空間中的點)。在圖4a中例示了該情況,圖4a示出了線401在同一點405處與不同平面402、403和404相交。
在計算機程序代碼中,(n維)空間中的交點通常由描述了不同幾何對象的一組表達式來確定。但是,同一交點可能由相交問題的不同公式產(chǎn)生。例如,圖4b例示了分別基于導(dǎo)致了同一交點的線406、平面407和曲面408的三個不同的公式。
此外,在高維度空間中可以嵌入給定的相交問題,這使得難以確定該問題的原始公式。另外,例如有限域的空間中的點可以嵌入在仿射空間或偶對空間中。所有這些后面的方法在邏輯上與展開多項式的方法類似。
在上述示例中,可以通過相交問題的選擇/公式對水印進行編碼。
總之,此處的公開是在計算機程序代碼中嵌入信息的一種方法,該計算機程序代碼包括多個程序語句,各個語句適于使數(shù)據(jù)處理系統(tǒng)產(chǎn)生預(yù)定的結(jié)果,所述方法包括
-解析計算機程序代碼,以識別包括第一數(shù)學(xué)表達式的至少一個程序語句;其中所述第一數(shù)學(xué)表達式至少包括第一代數(shù)表達式,當在數(shù)據(jù)處理系統(tǒng)上執(zhí)行時,所述第一代數(shù)表達式適于使該數(shù)據(jù)處理系統(tǒng)產(chǎn)生至少一個數(shù)值結(jié)果;-由經(jīng)轉(zhuǎn)換的數(shù)學(xué)表達式來替代所識別的程序語句中的所述第一數(shù)學(xué)表達式,以獲得加了水印的程序語句,其中所述經(jīng)轉(zhuǎn)換的數(shù)學(xué)表達式包括經(jīng)轉(zhuǎn)換的代數(shù)表達式,而不是所述第一代數(shù)表達式,以使得當在數(shù)據(jù)處理系統(tǒng)上執(zhí)行時,加了水印的程序語句適于使該數(shù)據(jù)處理系統(tǒng)產(chǎn)生與所識別的程序語句相同的結(jié)果,并且其中所述經(jīng)轉(zhuǎn)換的數(shù)學(xué)表達式包括所述信息的至少一部分。
此處描述的方法提供了加水印處理,該加水印處理生成難以通過自動工具(例如迷亂和代碼優(yōu)化)去除的水印。此外,這將要求禁止人工分析代碼和置換回原始表達式的努力。
盡管詳細地描述和示出了一些實施例,但本發(fā)明不限于這些實施例,而是可以在下面的權(quán)利要求中限定的主題的范圍內(nèi)以其他方式來實施。
具體地說,主要結(jié)合數(shù)字水印的嵌入描述了這些實施例。但是,可以理解,此處描述的這些方法同樣可應(yīng)用于任何其他類型的信息的嵌入。
通過包括多種不同元件的硬件并通過適當編程的微處理器來實現(xiàn)此處描述的方法、產(chǎn)品和裝置。在列舉了多種裝置的裝置權(quán)利要求中,可以通過一個相同的硬件來實施這些裝置中的多個裝置,該硬件例如為適當編程的微處理器、一個或更多個數(shù)字信號處理器等等。在相互不同的從屬權(quán)利要求中描述了特定措施或在不同實施例中描述了特定措施的僅有事實并不表示這些措施的組合不能用于產(chǎn)生良好的效果。
應(yīng)該強調(diào)的是,當在本說明書中使用時采用術(shù)語“包括(comprises)/包括(comprising)”是為了指明所述特征、整體、步驟或組成部分的存在,并不排除一個或更多個其他特征、整體、步驟、組成部分或它們的組的存在或添加。
權(quán)利要求
1.一種在計算機程序代碼中嵌入信息的方法,該計算機程序代碼包括多個程序語句,所述方法包括以下步驟-解析所述計算機程序代碼,以識別包括第一數(shù)學(xué)表達式的至少一個程序語句,所述程序語句適于使數(shù)據(jù)處理系統(tǒng)對所述數(shù)學(xué)表達式進行求值以產(chǎn)生結(jié)果;其中所述第一數(shù)學(xué)表達式至少包括適于產(chǎn)生至少一個數(shù)值結(jié)果的第一代數(shù)表達式;-通過對所述第一數(shù)學(xué)表達式執(zhí)行預(yù)定的轉(zhuǎn)換來生成經(jīng)修改的數(shù)學(xué)表達式,其中所述經(jīng)修改的數(shù)學(xué)表達式包括經(jīng)轉(zhuǎn)換的代數(shù)表達式,而不是所述第一代數(shù)表達式,以使得所述經(jīng)修改的數(shù)學(xué)表達式適于產(chǎn)生與所述第一數(shù)學(xué)表達式相同的結(jié)果,并且其中所述經(jīng)修改的數(shù)學(xué)表達式表示所述信息的至少一部分;-由所述經(jīng)修改的數(shù)學(xué)表達式替換所識別的程序語句中的所述第一數(shù)學(xué)表達式。
2.根據(jù)權(quán)利要求1所述的方法,該方法還包括以下步驟通過將從所述第一代數(shù)表達式得到的代數(shù)表達式與輔助代數(shù)表達式進行組合來生成所述經(jīng)轉(zhuǎn)換的代數(shù)表達式,其中所述輔助代數(shù)表達式表示所述信息的至少一部分。
3.根據(jù)權(quán)利要求1或2所述的方法,該方法還包括以下步驟解析所述第一代數(shù)表達式,以識別至少第一變量;以及由至少兩個變量的組合來替代所述第一變量。
4.根據(jù)權(quán)利要求3所述的方法,其中,至少兩個變量的所述組合是所述至少兩個變量的線性組合。
5.根據(jù)權(quán)利要求1至4中的任意一項所述的方法,其中,所述第一代數(shù)表達式包括至少一個具有整數(shù)數(shù)據(jù)類型的變量;并且其中所述經(jīng)修改的數(shù)學(xué)表達式適于只針對與所述整數(shù)類型一致的所述至少一個變量的值產(chǎn)生與所述第一數(shù)學(xué)表達式相同的結(jié)果。
6.根據(jù)權(quán)利要求1至5中的任意一項所述的方法,其中所識別的程序語句適于將所述第一數(shù)學(xué)表達式求值為整數(shù)數(shù)據(jù)類型;并且其中所述經(jīng)修改的數(shù)學(xué)表達式適于產(chǎn)生浮點結(jié)果,該浮點結(jié)果僅在轉(zhuǎn)換為整數(shù)數(shù)據(jù)類型時導(dǎo)致與對所述第一數(shù)學(xué)結(jié)果的求值相同的數(shù)值結(jié)果。
7.根據(jù)權(quán)利要求1至6中的任意一項所述的方法,該方法還包括以下步驟將待嵌入的信息編碼為一個或更多個碼字,各個碼字都與數(shù)學(xué)表達式的一個或更多個相應(yīng)的預(yù)定轉(zhuǎn)換相對應(yīng)。
8.根據(jù)權(quán)利要求7所述的方法,其中,對所述信息進行編碼的步驟包括利用糾錯碼對所述信息進行編碼。
9.根據(jù)權(quán)利要求1至8中的任意一項所述的方法,其中,所述第一數(shù)學(xué)表達式包括第一代數(shù)表達式與第二代數(shù)表達式的比較,該比較適于使數(shù)據(jù)處理系統(tǒng)對所述第一和第二代數(shù)表達式的結(jié)果進行比較;并且其中,生成所述經(jīng)修改的數(shù)學(xué)表達式的步驟包括由相應(yīng)的第一和第二經(jīng)轉(zhuǎn)換的代數(shù)表達式來替代所述第一和第二代數(shù)表達式中的至少一個。
10.根據(jù)權(quán)利要求9所述的方法,其中,所述第一數(shù)學(xué)表達式包括等效于第一多項式與零的比較的第一條件;并且其中,生成所述經(jīng)修改的數(shù)學(xué)表達式的步驟包括由經(jīng)轉(zhuǎn)換的多項式與零的比較來替代所述第一條件,其中所述經(jīng)轉(zhuǎn)換的多項式可化簡為至少所述第一多項式與第二多項式的乘積。
11.根據(jù)權(quán)利要求9所述的方法,其中,所述第一數(shù)學(xué)表達式包括等效于第一多項式與零的比較的第一條件;并且其中,生成所述經(jīng)修改的數(shù)學(xué)表達式的步驟包括由經(jīng)轉(zhuǎn)換的多項式與零的比較來替代所述第一條件,其中所述經(jīng)轉(zhuǎn)換的多項式包括具有由預(yù)定的隱性謂詞確定的對應(yīng)隱性值的輔助變量,并且其中僅當所述輔助變量是由其隱性值置換時,所述經(jīng)轉(zhuǎn)換的多項式可化簡為至少所述第一多項式與第二多項式的乘積。
12.根據(jù)權(quán)利要求10或11所述的方法,其中,所述第二多項式?jīng)]有實根。
13.一種檢測嵌入在計算機程序代碼中的信息的方法,該計算機程序代碼包括多個程序語句,所述方法包括以下步驟-解析所述計算機程序代碼,以識別包括第一數(shù)學(xué)表達式的至少一個程序語句,該程序語句適于使數(shù)據(jù)處理系統(tǒng)對數(shù)學(xué)表達式進行求值以產(chǎn)生結(jié)果;其中所述第一數(shù)學(xué)表達式至少包括適于產(chǎn)生至少一個數(shù)值結(jié)果的第一代數(shù)表達式;-至少執(zhí)行所述第一數(shù)學(xué)表達式的預(yù)定的轉(zhuǎn)換集合中的第一轉(zhuǎn)換,其中該轉(zhuǎn)換包括由與所述第一代數(shù)表達式不同的經(jīng)轉(zhuǎn)換的代數(shù)表達式來替代所述第一代數(shù)表達式;-確定所述第一轉(zhuǎn)換是否導(dǎo)致了產(chǎn)生與所述第一數(shù)學(xué)表達式相同的結(jié)果的經(jīng)轉(zhuǎn)換的數(shù)學(xué)表達式;以及-根據(jù)所述確定從所述第一轉(zhuǎn)換提取所述嵌入信息的至少一部分。
14.根據(jù)權(quán)利要求1至13中的任意一項所述的方法,其中,所述信息包括數(shù)字水印。
15.根據(jù)權(quán)利要求1至14中的任意一項所述的方法,其中,所述計算機程序代碼包括源代碼和目標代碼中的至少一個。
16.根據(jù)權(quán)利要求1至15中的任意一項所述的方法,其中,所述第一數(shù)學(xué)表達式是程序語句的至少一部分,當在數(shù)據(jù)處理系統(tǒng)上執(zhí)行時,該程序語句使所述數(shù)據(jù)處理系統(tǒng)生成具有數(shù)值數(shù)據(jù)類型或布爾數(shù)據(jù)類型的至少一個結(jié)果。
17.根據(jù)權(quán)利要求16所述的方法,其中,所述數(shù)值數(shù)據(jù)類型是浮點數(shù)據(jù)類型或整數(shù)類型。
18.根據(jù)權(quán)利要求1至17中的任意一項所述的方法,其中,所述第一代數(shù)表達式包括多項式。
19.根據(jù)權(quán)利要求18所述的方法,其中,所述多項式在復(fù)平面中具有一個或更多個根,并且其中根據(jù)這些根在復(fù)平面中的位置而以多項式對信息進行編碼。
20.根據(jù)權(quán)利要求1至17中的任意一項所述的方法,其中,所述第一代數(shù)表達式表示幾何相交問題。
21.根據(jù)權(quán)利要求1至20中的任意一項所述的方法,該方法還包括將所述計算機程序代碼加載到計算機的存儲器中。
22.一種數(shù)據(jù)處理系統(tǒng),該數(shù)據(jù)處理系統(tǒng)被適當?shù)貥?gòu)成為執(zhí)行根據(jù)權(quán)利要求1至21中的任意一項所述方法的步驟。
23.一種包括計算機可執(zhí)行指令的計算機程序產(chǎn)品,當在數(shù)據(jù)處理系統(tǒng)上執(zhí)行所述計算機可執(zhí)行指令時,所述計算機可執(zhí)行指令適于使所述數(shù)據(jù)處理系統(tǒng)執(zhí)行根據(jù)權(quán)利要求1至21中的任意一項所述的方法。
24.根據(jù)權(quán)利要求23所述的計算機程序產(chǎn)品,該計算機程序產(chǎn)品包括其上存儲有所述計算機可執(zhí)行指令的計算機可讀介質(zhì)。
25.根據(jù)權(quán)利要求23或24所述的計算機程序產(chǎn)品,其中,所述計算機程序產(chǎn)品包括軟件編譯器,該軟件編譯器包括適于使所述數(shù)據(jù)處理系統(tǒng)執(zhí)行根據(jù)權(quán)利要求1至12中的任意一項所述的方法的功能,作為由所述編譯器執(zhí)行的多種編譯途徑中的一種。
26.一種計算機程序,該計算機程序包括通過根據(jù)權(quán)利要求1至1 2中的任意一項所述的方法而嵌入其中的嵌入信息。
27.根據(jù)權(quán)利要求26所述的計算機程序,該計算機程序被實現(xiàn)為其上存儲有所述計算機程序的計算機可讀介質(zhì)。
全文摘要
本發(fā)明提供了通過等效數(shù)學(xué)表達式對計算機程序代碼加水印的方法。一種在包括多個程序語句的計算機程序代碼中嵌入信息的方法,該方法包括解析所述計算機程序代碼以識別包括第一數(shù)學(xué)表達式的至少一個程序語句,其中所述第一數(shù)學(xué)表達式至少包括適于產(chǎn)生至少一個數(shù)值結(jié)果的第一代數(shù)表達式;通過對所述第一數(shù)學(xué)表達式執(zhí)行預(yù)定的轉(zhuǎn)換來生成經(jīng)修改的數(shù)學(xué)表達式,其中所述經(jīng)修改的數(shù)學(xué)表達式包括經(jīng)轉(zhuǎn)換的代數(shù)表達式,而不是所述第一代數(shù)表達式,以使得所述經(jīng)修改的數(shù)學(xué)表達式適于產(chǎn)生與所述第一數(shù)學(xué)表達式相同的結(jié)果,并且其中所述經(jīng)修改的數(shù)學(xué)表達式表示所述信息的至少一部分;由所述經(jīng)修改的數(shù)學(xué)表達式來替換所識別的程序語句中的所述第一數(shù)學(xué)表達式。
文檔編號G06F21/00GK101088095SQ200580044424
公開日2007年12月12日 申請日期2005年11月24日 優(yōu)先權(quán)日2004年12月22日
發(fā)明者貝納德·斯梅茨, 比約恩·約翰松 申請人:Lm愛立信電話有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
利川市| 开封市| 藁城市| 邢台市| 重庆市| 台州市| 新余市| 贺州市| 应用必备| 沧州市| 古浪县| 平阴县| 哈巴河县| 邯郸市| 新宾| 平谷区| 扶风县| 五原县| 朔州市| 雅安市| 连城县| 抚远县| 潜山县| 威信县| 寻乌县| 乐清市| 林西县| 伊宁市| 澄迈县| 康定县| 津南区| 合肥市| 鲁甸县| 崇礼县| 富川| 平定县| 建德市| 丰都县| 浠水县| 东明县| 河北区|