軟件加密中數(shù)字水印技術(shù)的應(yīng)用
為保護軟件開發(fā)者的利益,打擊盜版軟件,我們提出一種基于信息隱藏、非對稱加密體制、單向散列函數(shù)的軟件保護方法,這種結(jié)合防范明碼,加密、信息隱藏等技術(shù),與傳統(tǒng)的方法相比,該方法具有加密強度高、成本低、安全可靠等特點。
一、軟件加密算法的思路、流程
1、信息隱藏實現(xiàn)模型
圖像信息隱藏系統(tǒng)的模型如圖1所示。

2、軟件加密算法的設(shè)計原理_
機器指紋可以根據(jù)計算機的CPU序號、網(wǎng)卡的MAC地址等,可以唯一標志計算機身份的信息產(chǎn)生,其指紋與計算機是一一對應(yīng)的。用戶將機器指紋提供給開發(fā)商后,得到開發(fā)商提供的一個加密的BMP圖像,這個圖像中隱藏著重要的注冊信息,用戶按照提示把加密的BMP圖像放到指定的位置。重新運行軟件,軟件首先對圖片文件進行加密、數(shù)字簽名、圖像完整性等的檢驗,檢驗是否這張圖片是來自開發(fā)商、在傳輸?shù)倪^程中有沒有被第三方修改等,如果進行以上的檢測后發(fā)現(xiàn)異常,則立即中止程序的運行。如正確則解密BMP圖像,從中讀取隱藏在其中的注冊碼,與正確的相比較,如果正確,則運行;否則拒絕執(zhí)行。
3、軟件加密算法的流程設(shè)計
軟件開發(fā)商在收到用戶提供的機器指紋以后,對任何一張BMP文件加密、隱藏、數(shù)字簽名等一系列的操作(圖2)。

用戶在得到開發(fā)商提供的BMP圖像后,按照要求把其放人指定的位置,運行程序后,軟件內(nèi)部驗證模塊運行(圖3)。

二、軟件加密算法、數(shù)字水印加密算法實現(xiàn)
1、公鑰加密體制
RSA加密算法是公鑰加密體制中最負盛名的算法,該加密體質(zhì)既可用于加密,也可以用于數(shù)字簽名。另外,該加密算法思想簡單,易于理解,易于程序?qū)崿F(xiàn)。RSA加密算法經(jīng)過各界多年的深入分析,到目前仍然是安全的,且是最為廣泛采用的一種加密體制。其安全性是基于整數(shù)的因子分解困難性。它的私鑰參數(shù)d,公鑰參數(shù)e,滿足一定的條件,即ed =l modφn,其中n是兩個素數(shù)之積,φ是Euler函數(shù)?,F(xiàn)在其采用的模數(shù)n一般位數(shù)達上百比特,甚至上千比特。而明文和密文間就是0到(n-1)之間的數(shù)值。
RSA加密算法的明文和密文之間就是0到(n-1)之間的數(shù)值,顯然,RSA加密算法是屬于分組加密體制的。明文、密文分組分別用M,C表示,公鑰、私鑰參數(shù)分別用e,d表示,那么RSA加密算法可以簡單的敘述為:
加密:C=Memod n
解密:M=Cdmod n
其中n是兩個非常大的兩素數(shù)之積。要計算出大素數(shù)的積是十分容易的,但要分解兩個大素數(shù)之積卻是很困難的。
2、SHA加密算法
安全散列算法(SHA:Secure Hash Algorithm)是美國NIST和NSA共同設(shè)計的—個標準,用于作為數(shù)字簽名標準( DSS)的散列函數(shù),產(chǎn)生數(shù)據(jù)摘要。 SHA的要求是消息長度小于264比特,輸出的散列長度為160 Bit,分組長度是512 Bito在計算上保證不可能根據(jù)消息摘要取得原消息;不可能找兩個消息,產(chǎn)生相同的消息摘要。
3、注冊碼的唯一性
計算機指紋是每個計算機唯一的一個身份編號,軟件使用計算機指紋來識別是否是同一個計算機。不管系統(tǒng)如何變化,計算機指紋始終不會改變,即使某個計算機上的軟件被解密,但僅僅是這么一個計算機而已,不可能造成注冊碼的廣泛傳播。在這里,取CPU的ID作為計算機的指紋,每塊CPU在生產(chǎn)出來后,都有一個唯一的編號標志自己,且不會與其它CPU重復(fù)。
4、軟件加密算法的設(shè)計
明碼泄漏是因為局部變量通常都是存儲在堆棧中的,而軟件作者一般都使用局部變量存放臨時計算出來的注冊碼,以比較真假,使得它們的位置很接近?!靶蛄刑? F(用戶名)"算法計算出來的序列號是以明文形式在內(nèi)存中出現(xiàn)的,很容易在內(nèi)存中找到它,從而獲得注冊碼。稍不留意還會造成明碼泄漏。
為了避免程序中出現(xiàn)明碼,提出以下加密算法。
軟件注冊碼驗證模塊:
tmp1=SHA -1( USERNAME +ID)
tmp2=RSA_Encrypt( License Key)
if tmp1=tmp2,則注冊成功,否則失敗
軟件作者可用如下生成License Key:
tmp1=SHA -1(USERNAME +ID)
License Key=RSA_Decrypt( tmp1)
由于RSA加密算法加密一個信息msg,pri為私鑰,pub為公鑰:
Encrypt: ret_enc - msg^pri;
Decrypt: ret_dec=rec_enc^pub=msg;
USERNAME+ID經(jīng)過SHA -1哈希后,成為一個長為160 Bit的字符串,可以理解為上面的msg。然后使用RSA加密算法驗證。由于pub是公開的,可以驗證ret_enc是不是私鑰pri加密的,但卻很難生成ret enc。
5、信息隱藏
由于任何文本文件(TXT)都是由字符流構(gòu)成的,每個字符占用1個字節(jié),由一個ASCII CODE表示。每個字節(jié)都是由8個二進制位構(gòu)成的,如下所示。

注冊碼的第一位H用二進制表示為010010010:先用輸入的密碼和每一個注冊碼進行and操作,加強密碼的強度。
1)“Hi"——二進制位 01001000 ?01101001
注冊碼的每一位如H的二進制與輸入的密碼如1234進行and操作:o1oo1ooo and o0000001=00000000
2)部分BMP文件數(shù)據(jù)
![]()
將加密后的密文一次寫入BMP文件中。
從外觀上軟件加密后的文件和一般的BMP文件沒有任何區(qū)別,而且軟件加密前后位圖文件大小也不會發(fā)生變化。其次,由于冗余位的存在,在密碼學(xué)上往往采取加大冗余位的方式來提高軟件加密的可靠性,顯然這種擁有大量冗余碼的軟件加密方法還是頗為可靠的。最后,破譯者并不知曉軟件加密所采取的協(xié)議,而且待軟件加密的內(nèi)容都同加密密鑰經(jīng)過了異或運算,在沒有正確加密密碼的情況下也是很難破譯的。
小知識之?dāng)?shù)字水印技術(shù)
數(shù)字水?。―igital Watermarking)技術(shù)是將一些標識信息(即數(shù)字水印)直接嵌入數(shù)字載體(包括多媒體、文檔、軟件等)當(dāng)中,但不影響原載體的使用價值,也不容易被人的知覺系統(tǒng)(如視覺或聽覺系統(tǒng))覺察或注意到。通過這些隱藏在載體中的信息,可以達到確認內(nèi)容創(chuàng)建者、購買者、傳送隱秘信息或者判斷載體是否被篡改等目的。










