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