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