[摘要] 結合軟件加殼、脫殼技術,提出了一種基于橢圓曲線數字簽名算法的軟件保護方案,該方案利用加殼技術將密碼信息和驗證部分嵌入到軟件中,用戶輸入的密鑰經過驗證正確后才能安裝該軟件。
[關鍵詞] 數字簽名算法 加殼保護 橢圓曲線密碼體制
為了保護自己軟件的技術內核不被他人輕易盜用,軟件開發人員使用了各種保護技術來保障軟件版權不被侵犯。目前,軟件保護方案可以分成兩類:一類是依靠硬件加密的保護方案,另一類是軟加密方案。由于前者成本高,所以大部分價格相對較低的商業軟件和共享軟件采取軟加密方案。
軟加密方案常利用系統的一些特征碼來生成注冊碼,并以此來驗證用戶的合法性。為了克服在軟加密方案中,破解者用調試軟件跟蹤到比較和跳轉的位置,然后強行將跳轉地址改為程序繼續執行的地址,從而實施破解這些缺點,加殼軟件應運而生。
一、殼技術和相關原理
在一些計算機軟件里有一段專門負責保護軟件不被非法修改或反編譯的代碼被稱為“殼”。加殼就是把一段外殼程序附加到應用程序中,并把程序的執行入口指向外殼程序中。加殼后的文件執行時,外殼程序先于程序運行拿到控制權,首先執行;脫殼的基本思想是驗證密碼。
二、基于橢圓曲線數字簽名算法
橢圓曲線數字簽名算法(ECDSA)是利用了由美國NIST和NSA設計的一種安全Hash算法,并提出的一種新的數字簽名技術,其數學原理是基于橢圓曲線離散對數問題的難解性。
1.系統的建立和密鑰生成
(1)系統的建立:選取一個基域上選取橢圓曲線E及E上階為素數n的基點是橢圓曲線E的參數。則我們已經建立了橢圓曲線公鑰密碼系統,系統參數為。
(2)密鑰的生成:系統建成后,每個用戶各自產生自己的密鑰:①用戶A隨機選取一個整數d,其中;②然后計算:Q=dG,如果Q 是無窮遠點或G,則需重新選擇d;③將d、Q保存。
2.數字簽名的加密過程
假設B要把簽名信息m發送給A,則B首先將信息原文用哈希算法求得數字摘要e=h(m),然后進行如下操作:(1)用戶B找出A的公鑰Q,然后隨機選取一個整數k,其中,計算;(2)計算:;(3)計算:;(4)把生成的數字簽名(P,c)發送給A。
2.3數字簽名的解密過程
當A 收到B 發送來的數字簽名(P,c)后,用自己的私鑰d進行如下解密操作:
(1)A計算:,因為;(2)然后計算:;從而恢復出數字簽名信息e。
三、基于橢圓曲線的軟件加殼保護方案
在本方案中通過設計一個加“殼”程序,將用戶密碼信息和驗證模塊加入到應用軟件安裝程序中,在安裝文件執行時首先執行該用戶密碼信息和驗證模塊。
1.密碼的生成過程
生成過程如下:(1)在有限域Fq上的一條安全的橢圓曲線E選取一個基點;(2)隨機選取一個整數d,其中,計算Q=dG,如果Q是無窮遠點或G,則需重新選擇d,否則Q為公鑰,d為私鑰;(3)保存d和Q。
2.數字簽名的加密過程
在本方案中,密碼m為生成的固定比特長的隨機整數。將m用哈希算法求得數字摘要e,e=h(m),然后進行如下操作:(1)隨機選取一個整數k,其中,計算;(2)計算:;(3)計算:;(4)最后生成數字簽名信息為(P,c)。
3.數字簽名的驗證過程
(1)用戶計算:,因為;(2)然后計算:;從而恢復出數字簽名信息;(3)如果則接受簽名,否則拒絕簽名。
四、安全性分析
本方案是基于橢圓曲線數字簽名算法通過對軟件進行加殼保護的一種方法,其安全性建立在橢圓曲線密碼體制的安全性之上,比基于有限域上的離散對數問題的公鑰密碼體制更安全,即在有限域上,已知P、Q 在橢圓曲線E上的有理點,要尋找一個,使得Q=dP,這是很難解的。從上面算法可知,在解密過程中,要求出,必須知道,而要知道,必須知道dP,或者必須知道kQ,而知道G、Q、P,要求出用戶A的私鑰d或隨機整數k,這相當于求解橢圓曲線離散對數問題,就現有的計算技術和能力來說,如果橢圓曲線公鑰密碼系統中的橢圓曲線是隨機選取的,而且它的階包含有大素數因子,那么這是一個很難求解的問題。也就是必須求逆運算,這是一個很費時和復雜的過程。
五、結束語
正如柯克霍夫原則所說,密碼系統的安全性不應取決于不易改變的算法,而應只取決于可隨時改變的密鑰。在本方案中,密碼生成算法在計算上是安全的,這一點已經有理論證明并經受了實踐的檢驗,所以其安全性是滿足要求的。當然,該技術只是殼的一部分,還要和其他技術如:反跟蹤、反匯編相結合才能達到真正的保護軟件的目的。
參考文獻:
[1]Anon. Standards for Efficient Cryptography Group, SEC 1: Elliptic Curve Cryptography: Version 1.5[EB /OL]. http: / /www.secg. org/download / aid - 401 / sec1. pdf
[2]張林趙勇劉吉強韓臻:基于橢圓曲線數字簽名算法的序列號軟件保護方案[J].中國電子科學研究院學報:2006,1(1):54~57
[3]夏紹春易波劉威:軟件加殼與脫殼技術的實現[J].現代計算機:2004(183):78~81
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。