本發(fā)明公開(kāi)了一種基于動(dòng)態(tài)圖編碼的軟件水印編碼方法,屬于軟件水印的技術(shù)領(lǐng)域。
背景技術(shù):
人們可以通過(guò)互聯(lián)網(wǎng)方便快捷地獲得越來(lái)越多的數(shù)字產(chǎn)品,但是由于法律的不完善以及監(jiān)管不到位,非法獲得、使用、復(fù)制等違法行為嚴(yán)重侵害了軟件版權(quán)所有者的權(quán)益。軟件水印技術(shù)是數(shù)字水印的一個(gè)分支,用于解決軟件產(chǎn)品版權(quán)保護(hù)等問(wèn)題。與現(xiàn)存軟件版權(quán)保護(hù)技術(shù)相比,它不單純地以提高數(shù)據(jù)嵌入率為目的,而是在保證數(shù)據(jù)嵌入率較高的前提下提高水印的隱蔽性以及抗擊刪減、增添攻擊的能力。在對(duì)軟件版權(quán)發(fā)生質(zhì)疑時(shí),可以提取出已嵌入軟件中的水印信息來(lái)鑒別軟件真?zhèn)危瑫r(shí)可以打擊惡意復(fù)制、傳播軟件產(chǎn)品等不法行為。軟件水印可以是軟件作者、發(fā)行商、所有者、軟件有效期等相關(guān)信息。
目前動(dòng)態(tài)圖編碼實(shí)現(xiàn)水印都是在collberg和thomborson提出的經(jīng)典動(dòng)態(tài)水印算法—ct算法的基礎(chǔ)上加以完善的,ct算法的關(guān)鍵思想是在程序運(yùn)行時(shí)動(dòng)態(tài)建立的拓?fù)鋱D結(jié)構(gòu)中嵌入水印信息。在ct算法的基礎(chǔ)上,有包括以下三種動(dòng)態(tài)圖編碼實(shí)現(xiàn)軟件水印的多種改進(jìn)方法:①虞濤等人提出了基于排列圖和平面環(huán)路樹(shù)的改進(jìn)編碼方案;②王慧嬌等人提出了在平面環(huán)路樹(shù)編碼結(jié)構(gòu)的基礎(chǔ)上,給每一個(gè)葉子節(jié)點(diǎn)另增加一個(gè)虛指針來(lái)進(jìn)行水印值的系數(shù)編碼;③張海超提出了對(duì)平面環(huán)路樹(shù)的全部節(jié)點(diǎn)進(jìn)行k-基數(shù)編碼從而實(shí)現(xiàn)水印編碼方案。以上編碼方案?jìng)?cè)重實(shí)現(xiàn)數(shù)據(jù)嵌入率而忽視了水印的編碼效率、魯棒性、隱蔽性及受到攻擊時(shí)的自我檢錯(cuò)與修復(fù)能力。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的發(fā)明目的是針對(duì)上述背景技術(shù)的不足,提供了一種基于動(dòng)態(tài)圖編碼的軟件水印編碼方法,通過(guò)ppct(plantedplanecubictree,平面環(huán)路樹(shù))編碼和排序圖編碼的混合編碼方式實(shí)現(xiàn)了水印片段的成對(duì)表達(dá),解決了現(xiàn)有軟件水印編碼技術(shù)側(cè)重實(shí)現(xiàn)數(shù)據(jù)嵌入率而忽視了水印編碼效率、魯棒性、隱蔽性及受攻擊時(shí)自我檢錯(cuò)與修復(fù)能力的技術(shù)問(wèn)題。
本發(fā)明為實(shí)現(xiàn)上述發(fā)明目的采用如下技術(shù)方案:
一種基于動(dòng)態(tài)圖編碼的軟件水印編碼方法,包括如下步驟:
a、利用中國(guó)剩余定理將待嵌入水印分解為由余數(shù)和素?cái)?shù)乘積表示的水印片段;
b、采用結(jié)合了ppct編碼和排序圖編碼的混合編碼方式表達(dá)水印片段。
作為基于動(dòng)態(tài)圖編碼的軟件水印編碼方法的進(jìn)一步優(yōu)化方案,步驟a的具體方法為:選取大整數(shù)w和數(shù)值均小于大整數(shù)的m個(gè)素?cái)?shù)p1,p2,...,pm,從m個(gè)素?cái)?shù)中任意選取素?cái)?shù)i、素?cái)?shù)j,根據(jù)所選素?cái)?shù)分解大整數(shù)以構(gòu)造同余方程組:
作為基于動(dòng)態(tài)圖編碼的軟件水印編碼方法的更進(jìn)一步優(yōu)化方案,步驟b的具體方法為:
對(duì)每一個(gè)同余方程的余數(shù)進(jìn)行ppct編碼,對(duì)每一個(gè)同余方程的模數(shù)進(jìn)行排序圖編碼,選擇對(duì)余數(shù)進(jìn)行ppct編碼所需最少葉子節(jié)點(diǎn)數(shù)以及對(duì)模數(shù)進(jìn)行排序圖編碼所需最少葉子節(jié)點(diǎn)數(shù)中的最大值來(lái)確定混合編碼所需葉子節(jié)點(diǎn)數(shù),ppct編碼表示余數(shù)所需的最少葉子節(jié)點(diǎn)數(shù)大于排序編碼表示模數(shù)所需的最少葉子葉子節(jié)點(diǎn)數(shù)時(shí),若選取ppct編碼表示余數(shù)所需最少葉子節(jié)點(diǎn)數(shù)作為混合編碼所需葉子節(jié)點(diǎn)數(shù),這會(huì)導(dǎo)致在對(duì)葉子節(jié)點(diǎn)進(jìn)行排序編碼時(shí)有多余的葉子節(jié)點(diǎn)不會(huì)被使用,因此,規(guī)定排序編碼時(shí)不被使用的葉子節(jié)點(diǎn)右指針為空;
初始化ppct拓?fù)鋱D中各節(jié)點(diǎn)的指針:
初始化非葉子節(jié)點(diǎn)的各指針:left指針和right指針?lè)謩e指向該非葉子節(jié)點(diǎn)的左、右孩子節(jié)點(diǎn),next指針指向null,
初始化葉子節(jié)點(diǎn)的各指針:left指針指向左邊最靠近該葉子節(jié)點(diǎn)的葉子節(jié)點(diǎn),right指針用于排序圖編碼,next指針指向該葉子節(jié)點(diǎn)本身,
初始化生成節(jié)點(diǎn)的各指針:left指針指向該生成節(jié)點(diǎn)右起的第一個(gè)葉子節(jié)點(diǎn),right指針指向根節(jié)點(diǎn),next指針指向null。
一種基于動(dòng)態(tài)圖編碼的軟件水印嵌入方法,將上述編碼方法獲取的水印片段編碼轉(zhuǎn)換為宿主能夠識(shí)別的水印片段代碼,在嵌入代碼的特定輸入序列到來(lái)時(shí)將水印片段代碼隨機(jī)地嵌入宿主。
一種基于動(dòng)態(tài)圖編碼的軟件水印提取方法,在執(zhí)行代碼的特定輸入序列到來(lái)時(shí),動(dòng)態(tài)執(zhí)行上述水印嵌入方法獲取的水印片段代碼,對(duì)呈現(xiàn)在堆中的ppct拓?fù)鋱D進(jìn)行解碼獲取水印信息。
本發(fā)明采用上述技術(shù)方案,具有以下有益效果:
(1)本發(fā)明提供了一種基于動(dòng)態(tài)圖編碼的軟件水印技術(shù),該方案利用中國(guó)剩余定理將水印分解為若干片段并加入了冗余片段,在原ppct的基礎(chǔ)上對(duì)葉子節(jié)點(diǎn)進(jìn)行排序圖編碼,實(shí)現(xiàn)了水印片段的成對(duì)表達(dá),當(dāng)攻擊者對(duì)某個(gè)水印片段對(duì)應(yīng)的拓?fù)渥訄D中某一節(jié)點(diǎn)進(jìn)行攻擊時(shí),可以借助ppct的穩(wěn)定性及生成節(jié)點(diǎn)和葉子節(jié)點(diǎn)構(gòu)成的循環(huán)鏈表的檢錯(cuò)和糾錯(cuò)能力實(shí)現(xiàn)自我修復(fù),當(dāng)攻擊者對(duì)部分水印片段進(jìn)行整體添加、刪除等攻擊時(shí),仍可以由水印分解算法的冗余性及糾錯(cuò)能力進(jìn)行修正,從而恢復(fù)正確的水??;
(2)將成對(duì)表達(dá)的水印片段添加到程序中,拓?fù)湫瘦^高且隱蔽性、抗攻擊性較強(qiáng),能夠形成具有自我檢錯(cuò)能力的軟件水?。?/p>
(3)本發(fā)明所涉及到的編碼方式不僅可以應(yīng)用于軟件水印領(lǐng)域,對(duì)于需要加密存儲(chǔ)的數(shù)據(jù)(如:科研保密數(shù)據(jù))都可以使用,采用本申請(qǐng)公開(kāi)的編碼技術(shù)進(jìn)行存儲(chǔ)的數(shù)據(jù)即使被圖謀不軌者竊取或篡改,使用者依然有機(jī)會(huì)獲得正確的原數(shù)據(jù)。
附圖說(shuō)明
圖1為本發(fā)明涉及的軟件水印實(shí)現(xiàn)方法的流程圖。
圖2為對(duì)4mod(2×3)進(jìn)行混合編碼得到的ppct拓?fù)鋱D。
具體實(shí)施方式
下面結(jié)合附圖對(duì)發(fā)明的技術(shù)方案進(jìn)行詳細(xì)說(shuō)明。為了現(xiàn)有軟件水印編碼技術(shù)側(cè)重實(shí)現(xiàn)數(shù)據(jù)嵌入率而忽視了水印編碼效率、魯棒性、隱蔽性及受攻擊時(shí)自我檢錯(cuò)與修復(fù)能力的缺陷,本申請(qǐng)?zhí)岢鲆环N基于動(dòng)態(tài)圖編碼的軟件水印編碼方法,通過(guò)ppct(plantedplanecubictree,平面環(huán)路樹(shù))編碼和排序圖編碼的混合編碼方式實(shí)現(xiàn)了水印片段的成對(duì)表達(dá)。并在編碼方法的基礎(chǔ)上進(jìn)一步延伸得到與之相適應(yīng)的水印嵌入方法和水印提取方法。
基于動(dòng)態(tài)圖編碼的軟件水印技術(shù),如圖1所示,步驟如下:
a、水印分解階段:選取大整數(shù)w,同時(shí)選擇m個(gè)素?cái)?shù)p1,p2...pm,其中,p1,p2...pm均小于w。
b、利用中國(guó)剩余定理,將大整數(shù)w分解成
c、編碼階段:
分別計(jì)算兩種編碼方式所需最小節(jié)點(diǎn)數(shù),取二者最大值作為混合編碼所需葉子節(jié)點(diǎn)數(shù),xk用ppct編碼實(shí)現(xiàn),pi×pj用排序圖編碼實(shí)現(xiàn),
對(duì)于非葉子節(jié)點(diǎn):left指針和right指針?lè)謩e指向該非葉子節(jié)點(diǎn)的左、右孩子節(jié)點(diǎn),next指針指向null,
對(duì)于葉子節(jié)點(diǎn):left指針指向左邊最靠近該葉子節(jié)點(diǎn)的葉子節(jié)點(diǎn),right指針用于排序圖編碼,next指針指向該葉子節(jié)點(diǎn)本身,
對(duì)于生成節(jié)點(diǎn):left指針指向該生成節(jié)點(diǎn)右起的第一個(gè)葉子節(jié)點(diǎn),right指針指向根節(jié)點(diǎn),next指針指向null;
以4238≡4mod2×3為例,由ppct枚舉表示整數(shù)的范圍可知ppct編碼所需葉子節(jié)點(diǎn)數(shù)a的取值范圍是a≥4,取a=4,由排序圖表示整數(shù)范圍可知b!-1≥6,解得排序圖編碼所需葉子節(jié)點(diǎn)數(shù)b的取值范圍是b≥4,取b=4。因此,max=4,即混合編碼所需葉子節(jié)點(diǎn)數(shù)為4。根據(jù)以上編碼規(guī)則,4mod(2×3)的混合編碼如圖2所示,由于非葉子節(jié)點(diǎn)next指針均為null,故本圖省略非葉子節(jié)點(diǎn)的next指針。
d、水印嵌入階段:完成水印片段的編碼后,將水印片段轉(zhuǎn)換為宿主能夠識(shí)別的水印片段代碼,并在嵌入代碼的特定輸入序列到來(lái)時(shí)將水印片段代碼隨機(jī)地嵌入宿主。
e、水印提取階段:在執(zhí)行代碼的特定輸入序列到來(lái)時(shí),動(dòng)態(tài)執(zhí)行水印片段代碼,對(duì)呈現(xiàn)在堆中的ppct拓?fù)鋱D進(jìn)行解碼獲取水印信息。
本發(fā)明采用中國(guó)剩余定理將水印信息分解問(wèn)余數(shù)和素?cái)?shù)乘積表示的若干水印片段,再通過(guò)在ppct葉子節(jié)點(diǎn)進(jìn)行排序圖編碼的方式對(duì)若干水印片段進(jìn)行編碼,將原本一次只能對(duì)一個(gè)整數(shù)進(jìn)行編碼的編碼方案改進(jìn)為一次對(duì)一對(duì)整數(shù)進(jìn)行編碼的編碼方案,在兼顧數(shù)據(jù)嵌入率的同時(shí),提高了編碼效率,增強(qiáng)了隱蔽性、抗攻擊性及自我糾錯(cuò)能力。