[摘要] 介紹了RSA算法,并以實際開發的軟件為例介紹在VB中應用該算法實現注冊碼軟件加密保護的方法;實踐證明該方法可以有效地保護注冊碼軟件。
[關鍵詞] RSA算法 VB 注冊碼軟件 加密保護
一、引言
計算機軟件是一類特殊商品,極易復制和盜版,為了保護自己的利益,越來越多的軟件作者開始采用“一機一碼”的注冊機制,注冊流程是:軟件用戶通過匯款或銀行轉賬的方式付費后,將電腦的ID(惟一確定一臺電腦的硬件信息,一般是硬盤的物理序列號、主板序列號等)通過電子郵件發送給軟件作者,軟件作者通過一定的加密算法對用戶的電腦ID進行加密生成注冊碼,再通過電子郵件將注冊碼發送用戶進行注冊認證成為注冊版軟件。這種注冊機制綁定了注冊用戶的電腦硬件,可以有效地防止注冊碼在網絡上的非法傳播,它的關鍵是要采用高強度的加密算法,否則,很容易被解密者通過逆向分析寫出注冊機,導致軟件保護徹底失敗,嚴重地損害了開發商的利益。RSA是最流行的非對稱算法加密之一,它的突出特點是破解者即使分析出軟件中的注冊驗證算法,也很難推導出注冊機的算法,非常適合軟件注冊碼的加密算法。本文以筆者實際開發的共享軟件為例介紹該算法在軟件加密保護中的應用方法。
二、RSA算法
RSA是最流行的非對稱算法加密之一,是既能用于數據加密也能用于數字簽名的算法。它的特點是加密密鑰不同于解密密鑰,而且解密密鑰不能根據加密密鑰計算出來。該算法可分為三個過程:
(1)選取加密密鑰和解密密鑰
首先要選取兩個大素數:p和q,并計算其乘積n=pq,再隨機選取加密密鑰—正整數e,使得e和(p-1)(q-1)互素,然后用歐幾里得擴展算法計算解密密鑰d,以滿足
(1)
注意: d和n也互素,e和n是公開密鑰,d是私人密鑰,兩個素數p和q不再需要,它們應該被舍棄,但絕不可泄露。
(2)加密過程
加密過程也就是軟件注冊碼生成的過程。將計算機的ID作為明文信息m,用私人密鑰d對m加密,得到密文s
(2)
s就是與計算機ID相對應的注冊碼。
(3)解密過程
解密過程就是對注冊碼校驗的過程。用戶輸入注冊碼或從軟件從注冊文件中讀取注冊碼s,用公開密鑰e對s進行解密得到明文信息
(3)
比較m與m’,如果相等,則s是軟件作者給的合法注冊碼,軟件正常運行,否則軟件拒絕運行。
由(2)知,注冊碼的長度取決于n的長度,n的位數越多越安全,在注冊碼軟件加密保護的實際應用中,一般認為RSA算法的密鑰需要1024位以上是有安全保障的。
三、用VC編寫RSA動態鏈接庫
MIRACL庫是一個大數運算庫,它提供了大多數密碼體制所必需的大數運算,是實現密碼系統的一個基本工具。本文用VC調用MIRACL庫將RSA算法中的加密解、密函數封裝在RSADLL.DLL動態鏈接庫中[3],在VB中使用RSA算法的方法是通過調用動態鏈接庫中加密、解密函數實現注冊碼軟件的加密保護。
四、軟件加密保護的測試程序實例
為了更好地演示RSA的加密保護效果,本文編寫一個軟件注冊驗證的測試程序和一個注冊碼生成程序。下面測試程序RSA參數是采用RSATOOL工具生成的128位RAS算法的參數(十六進制),在實際應用中取1024位以上,其中模數是963 251DC5A9C90D9F203A03C363BA411,公鑰是10001,私鑰是56157D29A89D77BF 2F669A8F0B123CC9。用戶電腦ID取硬盤物理序列號,讀硬盤序列號的方法請參考文獻。
1.軟件注冊測試程序
程序運行時,顯示圖1界面,如果輸入正確注冊碼,單擊“注冊”后,提示注冊成功,否則提示注冊失敗。
圖1 注冊驗證演示程序
2.注冊機測試程序
程序運行時,顯示圖2界面,輸入軟件用戶的機器碼,單擊“生成注冊碼”即可生成與機器相對應的注冊碼。
圖2 注冊機演示程序
五、結束語
用RSA算法對VB注冊碼軟件進行加密保護,可以有效地防止破解者寫出非法注冊機。筆者已經成功地用于開發的《C/C++程序設計學習與實驗系統》共享軟件中,取得了很好的軟件加密保護效果。
參考文獻:
[1]段剛:加密與解密(第二版)[M].北京:電子工業出版社,2003
[2]王松:Visual C++6.0程序設計與開發指南[M].北京高等教育出版社,1999
[3]趙春生:淺談利用RSA算法防止非法注冊機的制作 http://www.vckbase.com
[4]陸麟:直接從RING3獲取硬盤序列號,http://lu0s1.3322.org