摘要:在全面分析軟件標(biāo)志和軟件安全技術(shù)理論的基礎(chǔ)上,創(chuàng)造性地提出新的軟件指紋技術(shù)及基本實現(xiàn)方案,并對基于代碼的靜態(tài)軟件指紋技術(shù)的嵌入、檢測、攻擊以及安全性等方面進(jìn)行了深入探討,從而形成了系統(tǒng)的軟件安全保護(hù)應(yīng)用模式。
關(guān)鍵詞:軟件指紋; 軟件標(biāo)志; 基于代碼的軟件指紋
中圖分類號:TP311
文獻(xiàn)標(biāo)志碼:A
文章編號:1001-3695(2007)09-0124-03
隨著計算機(jī)網(wǎng)絡(luò)和軟件業(yè)的飛速發(fā)展,基于Web模式的軟件架構(gòu)已經(jīng)成為未來軟件的發(fā)展趨勢,但是隨之出現(xiàn)的軟件安全保護(hù)問題也日顯突出。早期,軟件開發(fā)商通過軟件源代碼混淆(obfuscation)技術(shù)來防止惡意用戶對軟件的攻擊;隨后出現(xiàn)了各種防竄改(tamperproof)技術(shù)和軟件完整性驗證(integrityverification)的技術(shù),包括對靜態(tài)代碼以及動態(tài)運行過程的安全保護(hù);軟件水印是近幾年發(fā)展起來的新型軟件安全保護(hù)技術(shù),它通過對軟件進(jìn)行靜態(tài)或動態(tài)的版權(quán)標(biāo)志來實現(xiàn)對軟件生產(chǎn)廠商的合法版權(quán)進(jìn)行保護(hù)。本文在軟件水印基本理論和技術(shù)的基礎(chǔ)上,創(chuàng)造性地提出了全新的軟件指紋技術(shù)及基本實現(xiàn)方案。從根本上說,軟件指紋技術(shù)是軟件水印理論的擴(kuò)充和完善,傳統(tǒng)水印嵌入和提取算法同樣適用于軟件指紋,但是,結(jié)合未來群體軟件特征和Web模式的軟件架構(gòu),軟件指紋技術(shù)具有更加具體和實際的應(yīng)用模式,從而開辟了軟件版權(quán)保護(hù)的新階段[1]。
軟件指紋技術(shù)是傳統(tǒng)數(shù)字指紋在軟件版權(quán)保護(hù)中新的應(yīng)用,是將用戶以及某次交易過程的信息通過信號處理方法以不可感知的形式嵌入到軟件。一旦發(fā)現(xiàn)有被非法分發(fā)的軟件拷貝,就可以根據(jù)提取的指紋信息找到非法分發(fā)該軟件的用戶。與傳統(tǒng)軟件水印技術(shù)類似,軟件指紋可以分為基于代碼的靜態(tài)指紋和動態(tài)軟件行為指紋。靜態(tài)代碼指紋通過向軟件源代碼或者編譯代碼中嵌入指紋信息來實現(xiàn)對軟件的標(biāo)志,其安全性取決于具體的嵌入算法和編碼方案;軟件行為指紋通過對軟件的運行狀態(tài)和過程進(jìn)行動態(tài)標(biāo)志來實現(xiàn)對軟件行為的指紋嵌入,它具有更高的安全性,給惡意用戶的攻擊增加更大的難度[2]。
1軟件標(biāo)志
軟件版權(quán)保護(hù)需要通過隱秘地嵌入版權(quán)信息到軟件之中來建立對軟件這一特殊數(shù)字內(nèi)容的標(biāo)志。對軟件的標(biāo)志可以通過以下途徑實現(xiàn)[3]:
a)代碼變量
軟件的產(chǎn)生是一個編制源代碼的過程,源代碼經(jīng)過調(diào)試通過,運行之后形成軟件形態(tài)。同一種功能的軟件其源代碼可能是不同的,因而軟件代碼可以看成是一種變量,它是軟件靜態(tài)標(biāo)志的載體。
b)軟件行為
軟件行為是指軟件運行表現(xiàn)形態(tài)和狀態(tài)演變的過程。通過對軟件行為的建模可以建立軟件運行過程中的動態(tài)標(biāo)志。目前,對軟件行為的建模方法包括Petri網(wǎng)、有限自動機(jī)FSA和狀態(tài)圖等。
c)防竄改模塊
防竄改模塊是為了防止非授權(quán)用戶對軟件實行非法修改而嵌入在軟件中的一段代碼,它的執(zhí)行可以實現(xiàn)對整個軟件的完整性驗證,并影響軟件的運行狀態(tài)和結(jié)果。軟件防竄改模塊代碼也是實現(xiàn)對軟件進(jìn)行標(biāo)志的有效途徑。
d)遠(yuǎn)程模塊
在基于Web模式的軟件架構(gòu)中,只有軟件框架和一部分組件駐留在用戶本機(jī)上,大部分功能是通過遠(yuǎn)程調(diào)用方式實現(xiàn)的。遠(yuǎn)程模塊由版權(quán)所有者控制,可形成對軟件的特殊標(biāo)志。
通過以上途徑,可以實現(xiàn)對同一軟件的不同拷貝形成獨立并且惟一的軟件標(biāo)志,并且聯(lián)合使用這些方法可以達(dá)到對軟件實體的復(fù)合標(biāo)志。通過軟件標(biāo)志,用戶獲得獨立并且惟一標(biāo)志信息的軟件拷貝,提取標(biāo)志信息并進(jìn)行適當(dāng)編碼和其他處理,形成軟件應(yīng)用模式中惟一的指紋,從而實現(xiàn)用戶對合法軟件拷貝的持有提供依據(jù),對非法分發(fā)軟件拷貝的用戶建立叛逆者追蹤體制。
1.1群體軟件標(biāo)志
假定一個軟件包中包含若干程序,對各個程序段進(jìn)行獨立的標(biāo)志是可行的,但是這種方法的效率比較低,原因是每次對獨立程序段進(jìn)行標(biāo)志時需要對整個軟件進(jìn)行完整性驗證。一個有效的解決方法是秘密共享(secret sharing),假定一個軟件包包含n個程序段,版權(quán)所有者希望對整個軟件嵌入足夠的t位標(biāo)志。為了實現(xiàn)這種群體軟件標(biāo)志,采用一個(t,n)門限方案設(shè)計對整個軟件的n位標(biāo)志,這樣對整個軟件的完整性驗證變成對所有n個程序段的任意一個隨機(jī)子集的檢驗,對整個效率有了極大的提升。
1.2抗局部損壞軟件標(biāo)志
如果軟件中的一小段代碼被惡意修改,應(yīng)用秘密共享機(jī)制可以使得原來的標(biāo)志得到恢復(fù)。如果整個軟件被分成n個程序段,利用(t,n)門限方案可以實現(xiàn)對每一個程序段一個獨立的標(biāo)志。如果對其中的一些代碼段進(jìn)行了非法竄改,但是只要任何t位標(biāo)志就可以對整個軟件建立標(biāo)志,從而對整個軟件的標(biāo)志可以通過若干未受干擾的標(biāo)志進(jìn)行恢復(fù)(只要還存在足夠未受干擾的程序段)。
2基于代碼的軟件指紋技術(shù)
傳統(tǒng)的軟件水印是把程序的版權(quán)信息和用戶身份信息等同地嵌入到所有軟件拷貝中,因此所有用戶獲得的軟件都是嵌入相同水印的同一拷貝。軟件水印經(jīng)過幾年的發(fā)展,已經(jīng)形成了一些典型的水印算法和解決方案,根據(jù)水印被加載的時刻可分為靜態(tài)水印和動態(tài)水印。靜態(tài)水印存儲在可執(zhí)行程序代碼中,比較典型的是將水印信息放在安裝模塊部分,或者是指令代碼中,或者是調(diào)試信息的符號部分;區(qū)別于靜態(tài)水印,動態(tài)水印則保存在程序的執(zhí)行狀態(tài)中,而不是程序源代碼本身。這種水印可用于證明程序是否經(jīng)過了迷亂變換處理。
軟件指紋承襲軟件水印的基本算法和分類原則,在此基礎(chǔ)上提出適用于Web模式的軟件版權(quán)保護(hù)的應(yīng)用方案。基于軟件代碼的指紋是一種靜態(tài)嵌入的指紋分類,通過軟件代碼指紋方案形成對軟件不同拷貝的惟一標(biāo)志。軟件代碼指紋是基于公共密鑰設(shè)施(PKI)和數(shù)字簽名機(jī)制,從而保證了合法用戶和軟件版權(quán)持有者證實該軟件拷貝的標(biāo)志。
3實現(xiàn)方案
假定軟件生產(chǎn)商持有自己惟一的私鑰kp,可信認(rèn)證機(jī)構(gòu)TA持有與之相匹配的公鑰Kp,并且封裝在公開發(fā)布的許可證中。給定一個公開描述的強(qiáng)加密沖突允許哈希函數(shù)H:∑*→∑m,給定函數(shù)任意長度的輸入M∈∑*,產(chǎn)生一個m bit的摘要d=H(M)∈∑m。生產(chǎn)商持有加密的簽名SGp:∑*→∑r。其中:SGp(M)=Dkp(H(M))∈∑r。
將軟件S=(ε1,…,εn)分為兩部分,即軟件體S′b=(ε1,…,εn)和軟件尾St=(εr+1,…,εn)。
定義6給定軟件S=(Sb,St)∈CS,制造商擁有一對密鑰組(Kp,kp),則S的指紋為FPS=(idSb,idSt)。
其中:idSb=Dkp(H(SM,idSt,idP,idV,date));idSt是隨機(jī)抽取,并且對于給定的軟件拷貝是惟一的;SM是用來產(chǎn)生所有指紋的初始拷貝;idP為制造商的標(biāo)志;idV為購買用戶的標(biāo)志;date為交易日期。
初始拷貝SM是該軟件的一個代碼變量,只含有原始代碼,沒有嵌入任何指紋信息。以上定義的軟件指紋類似數(shù)字簽名機(jī)制。
指紋的檢測是在檢測簽名階段之后,假定所有可變代碼的集合是公開的并以一個表v的形式給出。為了檢測軟件S的原拷貝,檢測器從該拷貝以及公開的表v中獲取idSt,并且計算(SM,idSt,idP,idV,date);然后在已知制造商的公鑰情況下,檢測器從拷貝中驗證簽名idSb=Dkp(H(SM,idSt,idP,idV,date));從而獲取簽名的哈希值H(SM,idSt,idP,idV,date);最后,如果=H,則該拷貝被認(rèn)為是原始拷貝。
基本的軟件代碼指紋方案包括三個主要階段:
a)指紋嵌入
由以上假定的公開密鑰設(shè)施PKI、可信認(rèn)證機(jī)構(gòu)TA、一個強(qiáng)加密的安全哈希函數(shù)H;并假設(shè)一個強(qiáng)加密的偽隨機(jī)序列發(fā)生器PBG,其作用是產(chǎn)生為用戶和攻擊者可見的內(nèi)部指紋。指紋的嵌入是軟件制造商通過下列步驟實現(xiàn):
(a)準(zhǔn)備階段。給定軟件S∈CS,其初始拷貝為SM,并定義一個安全參數(shù)來提供分割S的塊的大小。軟件S被分割為2un+1塊,S=(S1,…,S2un+1),參數(shù)u是依據(jù)軟件的長度和安全要求來選取的。
(b)產(chǎn)生簽名。計算h=H(SM,idP,idV,date),同時產(chǎn)生簽名SGp=Dkp(h)。
(c)構(gòu)造秘密共享。構(gòu)造u對(t,n)門限方案(u的大小是由安全要求決定)。每對中第一個秘密共享是h,第二個是數(shù)字簽名SGp,最終結(jié)果有2un個共享(塊)。令所有共享組成的序列為α=(α1,…,α2un)。
(d)屏蔽共享。版權(quán)持有者選取一個秘密β,使用偽隨機(jī)序列發(fā)生器產(chǎn)生一個足夠長的位串,表示為γ=(γ1,…,γ2un)=αPBG(β)。
(e)嵌入內(nèi)部指紋。對每一個軟件分塊Si:i=1,…,2un,其變量S*i的標(biāo)志記為idS*i=γi。
(f)嵌入外部指紋。h*=H(S*1,…,S*2un,idp,idV,date)最后一個塊被選取為標(biāo)志,idS*2un+1=SGp(h*)。注意軟件的每一個分塊Si必須足夠長,以符合嵌入量的要求。
b)用戶檢測標(biāo)志
任何用戶可以通過檢查最后一個塊是否與簽名SGp(h*)相匹配來檢測指紋。例如,檢查從最開始的2un個塊中獲取的哈希值是否與從嵌入S*2un+1中簽名中提取的哈希值一致。
c)版權(quán)持有者檢測標(biāo)志
版權(quán)持有者首先通過計算PBG(β),去掉屏蔽并提取2n個共享α=γPBG(β),并從每一個2n塊中檢測簽名。只要在每n個塊中存在t個未受干擾的塊就足夠通過檢測。
其安全性顯然與數(shù)字簽名方案、哈希函數(shù)以及PBG相關(guān)。軟件代碼指紋提供一個外部公開可見的指紋,而內(nèi)部指紋是屏蔽的。事實上,串γ是從一個真的隨機(jī)強(qiáng)加密PBG中產(chǎn)生的,是多項式和不可辨別的,一個攻擊者甚至無法意識到內(nèi)部指紋的存在。并且,版權(quán)持有者無法通過其私有秘密β來獲得一個期望的α,即版權(quán)持有者不可能獲取其他軟件版權(quán)的相關(guān)信息,原因是在α=γPBG(β)=γ′PBG(β′)中由α和γ′來獲得β′幾乎是不可能實現(xiàn)的。
大部分計算機(jī)軟件是通過目標(biāo)代碼銷售和分發(fā)的,指紋可以在源代碼編譯器中被嵌入,但是往往有些編譯器會作代碼優(yōu)化來刪除代碼冗余。而軟件代碼指紋卻向程序代碼中添加了冗余代碼,因此軟件代碼指紋很可能被某些編譯器移除。在這種情況下,提供軟件版權(quán)依據(jù)的可以是嵌入了代碼指紋的軟件源代碼。目標(biāo)代碼則無法提供合適的版權(quán)依據(jù)。
4結(jié)束語
本文提出的基于代碼的軟件指紋技術(shù)理論和實現(xiàn)方案是應(yīng)對計算機(jī)網(wǎng)絡(luò)環(huán)境和軟件不斷發(fā)展的服務(wù)模式而提出的,對軟件的合法版權(quán)提出了新的保護(hù)手段。隨著信息隱藏技術(shù)的發(fā)展, 使得軟件版權(quán)信息從簡單的靜態(tài)隱藏向動態(tài)技術(shù)發(fā)展,類似于傳統(tǒng)軟件水印技術(shù),軟件指紋從最初的靜態(tài)代碼指紋發(fā)展到針對軟件行為而設(shè)計的動態(tài)指紋。軟件代碼指紋針對軟件源代碼或者目標(biāo)代碼嵌入指紋信息實現(xiàn)不同軟件拷貝的靜態(tài)標(biāo)志,其實現(xiàn)比較簡單,但安全性相對較低;軟件行為指紋是對軟件運行過程和狀態(tài)演變的動態(tài)標(biāo)志,其理論和實現(xiàn)比較復(fù)雜,但是可以達(dá)到較高的安全性,這方面將會是今后課題研究的重點。
參考文獻(xiàn):
[1]AUCSMITH D. Tamper resistant software:an implementation[C]//ANDERSON R. Proc of the 1st International Workshop on Information Hinding. Berlin:SpringerVerlag,1996:317-334.
[2]BONEH D,SHAW J. Collusionsecure fingerprinting for digital data [C]//COPPERSMITH D. Proc of the Advances in Cryptology. Berlin:SpringerVerlag, 2000:452-465.
[3]PIEPRZYK J. Fingerprints for copyright software protection [C]//Proc of the 2nd International Workshop on Information Security. London:SpringerVerlag, 2000:178-190.
[4]張立和,楊義先,鈕心忻,等. 軟件水印綜述 [J].軟件學(xué)報,2003,14(2):268-277.
注:“本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文”