《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 業(yè)界動(dòng)態(tài) > 基于DSA算法的軟件注冊(cè)碼保護(hù)

基于DSA算法的軟件注冊(cè)碼保護(hù)

2009-08-13
作者:譚毓安,,盧 超,,崔志剛

??? 摘? 要: 提出一種利用DSA算法生成和驗(yàn)證軟件注冊(cè)碼的方法,。注冊(cè)碼的計(jì)算和驗(yàn)證分別使用秘密密鑰和公開密鑰,以保證注冊(cè)碼計(jì)算的秘密性,。
??? 關(guān)鍵詞: 注冊(cè)碼? 軟件保護(hù)? DSA數(shù)字簽名算法

?

??? 計(jì)算機(jī)軟件采用的加密方法可分為硬加密和軟加密,。硬加密主要有鑰匙盤、軟件狗,、CD指紋等,,其兼容性較差,、成本高,不能有效地利用Internet來發(fā)布和銷售軟件,。軟加密是通過軟件注冊(cè)碼的形式向用戶提供授權(quán),,不依賴于專門硬件,從而避免了硬加密方法的一些限制,。
??? 本文研究了一種通過公開密鑰數(shù)字簽名算法進(jìn)行軟件加密的方法,。該方法使用DSA(Digital Signature Algorithm)數(shù)字簽名算法對(duì)主機(jī)ID生成一個(gè)數(shù)字簽名作為軟件的注冊(cè)碼,軟件運(yùn)行時(shí)再對(duì)數(shù)字簽名進(jìn)行驗(yàn)證來判斷軟件的合法性,。只有開發(fā)商才能對(duì)主機(jī)ID進(jìn)行數(shù)字簽名,,此方法可有效地保護(hù)軟件版權(quán),而且不依賴于任何特殊的硬件設(shè)備,。
1? 利用注冊(cè)碼實(shí)現(xiàn)軟件加密
??? 在軟件運(yùn)行前,,對(duì)計(jì)算機(jī)硬件進(jìn)行檢測以獲得該計(jì)算機(jī)的標(biāo)識(shí)信息,即代表這個(gè)計(jì)算機(jī)的主機(jī)ID,。用戶通過Internet,、E-mail、電話等方式將主機(jī)ID提供給軟件開發(fā)商,,軟件開發(fā)商對(duì)用戶進(jìn)行驗(yàn)證后,,再根據(jù)主機(jī)ID計(jì)算出一個(gè)注冊(cè)碼。用戶輸入注冊(cè)碼后,,軟件中的程序就可以檢測計(jì)算機(jī)的主機(jī)ID和該序列號(hào)是否對(duì)應(yīng),。如果用戶將軟件安裝或拷貝到其他計(jì)算機(jī)上,由于主機(jī)ID不同,,程序就能判斷出該軟件屬于非法使用,。微軟最新發(fā)布的Windows XP和Office系列軟件即采用了這種軟加密方式。這種方式也被稱為許可證加密方式或序列號(hào)加密方式,。
1.1 注冊(cè)碼的計(jì)算和校驗(yàn)
??? 主機(jī)ID可以根據(jù)計(jì)算機(jī)的CPU序列號(hào),、網(wǎng)卡序列號(hào),、硬盤卷標(biāo),、BIOS的日期及版本等信息產(chǎn)生。用戶將主機(jī)ID提供給軟件開發(fā)商后,,得到一個(gè)二元組。該二元組就作為對(duì)該計(jì)算機(jī)的授權(quán),。
??? 二元組的計(jì)算在軟件開發(fā)商的計(jì)算機(jī)上完成,而該二元組的驗(yàn)證在用戶的計(jì)算機(jī)上完成,。計(jì)算模塊和校驗(yàn)?zāi)K分別用于產(chǎn)生和驗(yàn)證二元組。因此這兩個(gè)模塊之間必須共享一些信息。計(jì)算模塊是秘密的,,而校驗(yàn)?zāi)K(包括校驗(yàn)過程使用的算法及參數(shù))對(duì)破解者是沒有任何秘密可言的,。通過分析校驗(yàn)算法,可以獲得注冊(cè)碼的計(jì)算過程,,但不能允許從校驗(yàn)過程直接推導(dǎo)出計(jì)算過程的參數(shù),。一些使用注冊(cè)碼方式加密的軟件中,其校驗(yàn)?zāi)K暴露了太多的信息,,以至于破解者可以開發(fā)出注冊(cè)機(jī),,為任何主機(jī)ID生成注冊(cè)碼。
1.2 數(shù)字簽名在注冊(cè)碼加密的應(yīng)用
??? 軟件開發(fā)商選定一個(gè)加密算法和一個(gè)私鑰/公鑰對(duì)來實(shí)現(xiàn)注冊(cè)碼加密,。私鑰用來為ID產(chǎn)生數(shù)字簽名,,此簽名作為軟件的注冊(cè)碼。公鑰存在于軟件程序中,,校驗(yàn)?zāi)K得到計(jì)算機(jī)的ID后,,利用公鑰驗(yàn)證數(shù)字簽名(注冊(cè)碼)的正確性。
??? 使用基于公開密碼體制的數(shù)字簽名算法來計(jì)算和校驗(yàn)注冊(cè)碼,,在軟件程序中包含了公鑰和簽名的驗(yàn)證過程,,而注冊(cè)碼計(jì)算所需要的私鑰則是秘密的。破解者通過分析,、跟蹤等方法可以獲得注冊(cè)碼的校驗(yàn)過程和公鑰,,從而推導(dǎo)出注冊(cè)碼的計(jì)算方法,但他不能得到計(jì)算過程中所需要的私鑰,,因此不能計(jì)算出注冊(cè)碼,。當(dāng)密鑰的位數(shù)足夠長時(shí),使用暴力窮舉法或其他攻擊方法也不能在有效時(shí)間范圍內(nèi)根據(jù)已獲得的公鑰計(jì)算出私鑰,。
??? 如圖1所示,,注冊(cè)碼加密包括了密鑰生成、主機(jī)ID生成,、注冊(cè)碼計(jì)算,、注冊(cè)碼校驗(yàn)四個(gè)主要模塊。

?


??? 密鑰生成模塊和注冊(cè)碼計(jì)算模塊由軟件開發(fā)商掌握,,主機(jī)ID生成模塊和注冊(cè)碼校驗(yàn)?zāi)K在軟件中運(yùn)行,。
??? (1)密鑰生成模塊計(jì)算出具有一定長度的<公鑰,私鑰>對(duì),。公鑰由注冊(cè)碼校驗(yàn)?zāi)K使用,,而私鑰由注冊(cè)碼計(jì)算模塊使用。(2)主機(jī)ID生成模塊按照主機(jī)的硬件信息計(jì)算出一個(gè)固定長度的ID,。軟件用戶將主機(jī)ID交給軟件開發(fā)商,。(3)注冊(cè)碼計(jì)算模塊根據(jù)主機(jī)ID計(jì)算出對(duì)應(yīng)的注冊(cè)碼,,注冊(cè)碼就是主機(jī)ID的數(shù)字簽名,使用密鑰生成模塊提供的私鑰進(jìn)行簽名,。軟件開發(fā)將二元組交給用戶。(4)在運(yùn)行軟件程序時(shí),,注冊(cè)碼校驗(yàn)?zāi)K首先確認(rèn)ID的合法性,。如果本機(jī)的ID與二元組中的ID不一致,說明該授權(quán)不是對(duì)這臺(tái)計(jì)算機(jī)的,,程序終止,。ID正確時(shí),再檢驗(yàn)二元組是否匹配,,即注冊(cè)碼是否正確。如果不匹配,,說明注冊(cè)碼是偽造的,,程序終止。
2? 基于DSA算法的軟件加密
??? 數(shù)字簽名算法包括兩大類:基于公開密鑰的數(shù)字簽名和基于共享密鑰的數(shù)字簽名,。前者包括ElGamal,、DSA(Digital Signature Algorithm)、RSA(Rivest Shamir Adleman algorithm)等,,后者包括HMAC(Keyed-Hashing for Message Authentication),、Asmuth-Bloom等。在軟件加密中不能使用共享密鑰簽名方案,,因?yàn)樾r?yàn)?zāi)K中包括的共享密鑰會(huì)完全被暴露給破解者,。
??? 計(jì)算機(jī)的ID作為簽名算法的輸入(即消息)得到的簽名作為注冊(cè)碼。算法的公鑰存在于校驗(yàn)?zāi)K中,,而私鑰則必須秘密保存,,由計(jì)算模塊使用。注冊(cè)碼的計(jì)算和校驗(yàn)方法不需要保密,。
2.1 DSA算法
??? DSA是Schnorr和ElGamal簽名算法的變種,,被美國NIST稱為DSS(Digital Signature Standard)[4]。DSA是基于整數(shù)有限域離散對(duì)數(shù)難題的,,其安全性與RSA類似,。DSA的一個(gè)重要特點(diǎn)是兩個(gè)素?cái)?shù)公開,,這樣,,當(dāng)使用p和q時(shí),即使不知道私鑰,,也能確認(rèn)它們的安全性,。而RSA算法卻沒有這個(gè)特點(diǎn),。DSA算法由于其計(jì)算量大,其所用時(shí)間是RSA簽名的10~40倍,。在軟件加密中,,簽名的計(jì)算和校驗(yàn)并不頻繁,因此DSA算法的速度并不會(huì)帶來明顯的影響,。
??? DSA算法既可用于數(shù)據(jù)的加密解密,,也可用于數(shù)字簽名。DSA算法產(chǎn)生的數(shù)字簽名由于其長度固定,,適合作為軟件的注冊(cè)碼,。也可以采用ElGamal、RSA等其他公開密鑰數(shù)字簽名算法,。
??? 算法中應(yīng)用了下述參數(shù):
??? p:L bits長的素?cái)?shù)(L是64的倍數(shù),,取為1024);
??? q:p-1的160位的素因子,;
??? g:g=h((p-1)/q) mod p,,h滿足h((p-1)/q) mod p>1,;
??? x:x??? y:y=gx mod p,;
??? H(x):單向Hash函數(shù),。這里選用安全哈希算法SHA-1(Secure Hash Algorithm)。SHA也被稱為安全哈希標(biāo)準(zhǔn)(SHS,,Secure Hash Standard),,是由美國政府提出的,它能為任意長度的字符串生成160位的哈希值,。
2.2 注冊(cè)碼的計(jì)算
??? 計(jì)算注冊(cè)碼的過程實(shí)際上就是產(chǎn)生數(shù)字簽名的過程,。
??? x為秘密密鑰,y為公開密鑰,,p,、q、g可由一組用戶共享,。但在實(shí)際應(yīng)用中,,和RSA算法一樣,使用公共模數(shù)可能會(huì)帶來一定的威脅,。對(duì)消息m的簽名協(xié)議如下:
??? (1)將用戶的主機(jī)ID作為消息m,,使用SHA算法生成ID的報(bào)文摘要g=SHA(m)。g的長度為160位,。(2)產(chǎn)生隨機(jī)數(shù)k,,kk mod p)mod q。(4)計(jì)算k-1 mod q,。(5)計(jì)算s=(k-1(H(m)+xr))mod q,。(6)簽名結(jié)果(m,r,,s)中的(r,,s)作為主機(jī)ID對(duì)應(yīng)的注冊(cè)碼。
2.3 注冊(cè)碼的校驗(yàn)
??? 將m和(r,,s)作為提供給用戶。驗(yàn)證注冊(cè)碼的過程就是對(duì)數(shù)字簽名進(jìn)行校驗(yàn)的過程,。
??? (1)獲得主機(jī)ID,,計(jì)算g=SHA(m)。(2)與中的ID相比較,,不匹配時(shí)驗(yàn)證失敗。(3)驗(yàn)證0-1 mod q,。(5)計(jì)算uv=wg mod q,v=rw mod q,。(6)計(jì)算v=((gu×yv)mod p) mod q,。(7)若v=r,則認(rèn)為簽名有效,,證實(shí)(r,,s)是m的正確數(shù)字簽名,即可確認(rèn)用戶輸入的注冊(cè)碼是由軟件開發(fā)商簽發(fā)的,。
2.4 私鑰/公鑰對(duì)的生成
??? 注冊(cè)碼的計(jì)算和校驗(yàn)分別使用一個(gè)DSA密鑰對(duì)中的私鑰和公鑰,。采用Java加密擴(kuò)展庫JCE的KeyPairGenerator即可生成512位的DSA密鑰對(duì)[5]。其主要代碼為:
??? KeyPairGenerator kpg=KeyPairGenerator.getInstance(″DSA″),;
??? SecureRandom secrand=new SecureRandom( ),;//初始化隨機(jī)產(chǎn)生器
??? keygen.initialize(512,secrand),;//初始化密鑰生成器
??? KeyPair kp=kpg.generateKeyPair( ),;//生成密鑰對(duì)
??? PublicKey pubk=kp.getPublic( );//得到密鑰對(duì)中的公鑰
??? PrivateKey prvk=kp.getPrivate( ),;//得到密鑰對(duì)中的私鑰
2.5 模乘運(yùn)算
??? 在DSA簽名算法中,,需要計(jì)算xc(mod n),其中指數(shù)c很大,如果直接進(jìn)行c-1次乘法,,計(jì)算量太大。這里采用“平方-和-乘法”方法,,將計(jì)算r=xc(mod n)的模乘法的數(shù)目縮小到2t次或更少,,這里的t是指數(shù)c的二進(jìn)制位數(shù)(指數(shù)c以二進(jìn)制形式表示為ct-1……c2 c1 c0)。
???
??? r的初值為1,。執(zhí)行一個(gè)循環(huán)i從0到t-1,,每次計(jì)算出否則r不變。
3? 主機(jī)ID的匹配
??? 在理想狀態(tài)下,,主機(jī)ID對(duì)每一個(gè)計(jì)算機(jī)應(yīng)是惟一的,。當(dāng)計(jì)算機(jī)的某些部件被更換或升級(jí)時(shí),主機(jī)ID可能會(huì)改變,。如果任何一個(gè)小的硬件變動(dòng)都要求用戶重新申請(qǐng)注冊(cè)碼,,無疑會(huì)加重用戶和軟件開發(fā)商雙方的負(fù)擔(dān)。因此,,主機(jī)ID的選取應(yīng)該能容忍主機(jī)上的部分硬件變化,。
??? 如表1所示,主機(jī)ID共128位,,包括了9種信息,,如CPU、硬盤序列號(hào),、網(wǎng)卡MAC地址,、BIOS出廠時(shí)間等。硬件部件的信息作為SHA-1或MD5等哈希算法的輸入,,取計(jì)算結(jié)果的最低若干位存放在主機(jī)ID中,,例如硬盤型號(hào)的哈希值在識(shí)別碼中占20位。

?


??? 軟件運(yùn)行時(shí),,在取得主機(jī)ID后,,與中的ID相比較,。如果二者之間只有3項(xiàng)(或更少)有變化,,則認(rèn)為是正常的硬件升級(jí)或維修,匹配成功,。
4? 結(jié)? 論
??? 本文介紹了一種使用DSA簽名算法來計(jì)算和校驗(yàn)軟件注冊(cè)碼的方法,。利用DSA密鑰對(duì)中的公鑰,注冊(cè)碼可以被有效地檢驗(yàn),,而用戶和破解者從軟件程序中不能獲得計(jì)算注冊(cè)碼所需的私鑰,。在驗(yàn)證主機(jī)ID時(shí),采用了多項(xiàng)硬件部件的組合,,既使用戶更換少部分硬件仍能保證其注冊(cè)碼的使用,。另外,,還可以采取其他方法保護(hù)校驗(yàn)?zāi)K,防止其被篡改或繞過,。
參考文獻(xiàn)
1?? Cronin G.A Taxonomy of Methods for Software Piracy Prevention.http://www.croninsolutions.com/writing/piracytaxonomy.pdf,,2002,6
2?? Microsoft Corporation. Windows XP Product Activation.http://www.microsoft.com/windowsxp/pro/evaluation/overviews/activation.asp,,2002,,8
3?? Nichol A.Windows Product Activation(WPA) on Windows XP.http://aumha.org/win5/a/wpa.php,2005,,3
4?? 吳世忠,,祝世雄,張文政.應(yīng)用密碼學(xué):協(xié)議,、算法與C源程序.北京:機(jī)械工業(yè)出版社,,2000

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn),。轉(zhuǎn)載的所有的文章、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容,、版權(quán)和其它問題,,請(qǐng)及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失,。聯(lián)系電話:010-82306118;郵箱:[email protected],。