摘要:本文首先對共享軟件的常用加密方法做了簡單比較,接著重點闡述了RSA算法的原理及在序列號加密技術(shù)、在線注冊加密技術(shù)、激活碼加密技術(shù)方面的應(yīng)用機(jī)制。
關(guān)鍵詞:共享軟件;加密技術(shù);RSA算法
中圖分類號:TP309.7 文獻(xiàn)標(biāo)識碼:A 文章編號:1007-9599 (2012) 24-0170-02
隨著軟件行業(yè)經(jīng)營模式的轉(zhuǎn)變,在網(wǎng)絡(luò)上發(fā)布的共享軟件逐漸增多,軟件開發(fā)商為了保護(hù)自己的知識產(chǎn)權(quán)權(quán)益,需要對軟件產(chǎn)品進(jìn)行加密處理,以防止未經(jīng)許可的隨意拷貝,這就形成了各種各樣的共享軟件加密技術(shù)。
1 共享軟件的界定
共享軟件一般是指那種在網(wǎng)絡(luò)上公開發(fā)布的,采用“先試用,后購買”方式銷售的具有版權(quán)的軟件,此類軟件一般有兩個或兩個以上的版本,網(wǎng)絡(luò)上公開發(fā)布的是一個功能受限或者用戶數(shù)量受限制或使用時間、次數(shù)受限的共享版本,用戶只能試用軟件部分功能或者只能試用一定次數(shù)或一段時間,只有當(dāng)用戶購買注冊之后才可以使用沒有限制的正式版本。
2 常用的共享軟件保護(hù)方法對比綜述
共享軟件保護(hù)方式主要有兩大類,一類是依賴于特定硬件的硬加密保護(hù)技術(shù),如加密卡(狗)、鑰匙盤等;另一類是不需要額外硬件的軟件加密保護(hù)技術(shù),如密碼表、許可證加密法等,序列號法一般采用綁定計算機(jī)硬件的方式,但它綁定的是計算機(jī)本身如CPU、BIOS、硬盤、MAC等的硬件信息,沒有增加額外的硬件設(shè)備,因此將其歸結(jié)為“軟加密”技術(shù)。
2.1 硬加密技術(shù)
(1)鑰匙盤加密法的原理是利用BIOS的INT 13中斷格式化軟盤成一些特殊的磁道,有的還在軟盤的這些特殊磁道上寫入一定信息,即在軟盤的特殊位置做標(biāo)記,在軟件運行時需要讀取這些特殊標(biāo)記,以檢驗軟件的合法性,因此使用軟件時必須將鑰匙盤插在軟驅(qū)中。這是最古老的加密方法,目前基本上不在采用了。
(2)加密卡(狗)加密法。加密卡(狗)加密法是插在計算機(jī)并口、串口等接口上的軟硬件結(jié)合的軟件加密產(chǎn)品。當(dāng)被加密卡(狗)保護(hù)的軟件要運行時,軟件向插在計算機(jī)接口上的加密卡(狗)發(fā)出查詢命令,加密卡(狗)根據(jù)命令迅速計算查詢并給出響應(yīng),如果響應(yīng)正確,則保證軟件繼續(xù)運行,否則,軟件將不能運行。目前,大型商業(yè)軟件一般都采用加密卡(狗)來保護(hù),但共享軟件采用此種方法的較少,因為該加密保護(hù)方法成本較高。
(3)CD-Key光盤保護(hù)技術(shù)。此加密技術(shù)的原理是被保護(hù)的軟件在啟動時判斷光驅(qū)中的光盤上是否存在某特定文件,如果存在則說明軟件是合法的,繼續(xù)運行,否則則認(rèn)為是非法的,拒絕運行。但當(dāng)軟件一旦運行后一般不再檢查加密光盤文件的存在與否。Windows操作系統(tǒng)下此加密方法的實現(xiàn)通常是:先用GetLogicalDriveStrings()或GetLogicalDrives()得到計算機(jī)的驅(qū)動器列表,然后再用GetDriveType()檢查每一個驅(qū)動器看是不是光驅(qū),若是光驅(qū)則用CreateFileA()或FindFirstFileA()等檢查特定的文件是否存在,并可能進(jìn)一步檢查文件的屬性、大小、內(nèi)容等,這由加密者根據(jù)自己的需要設(shè)定。由于本加密技術(shù)需要制作加密光盤,這對一些規(guī)模小的軟件開發(fā)商來說具有一定的困難,因此這種加密技術(shù)目前在共享軟件上用的也較少。
2.2 軟加密技術(shù)
(1)密碼表加密技術(shù)。其原理是在軟件啟動時要求用戶根據(jù)屏幕出現(xiàn)的提示問題輸入特定的答案,而這個答案一般是在用戶手冊上的防復(fù)印的密碼表中,只有用戶輸入正確答案后才能繼續(xù)運行。這種加密技術(shù)實現(xiàn)簡單,而且成本較低,但軟件破譯者往往把整個密碼表保存成一個計算機(jī)文件,同破解后的盜版軟件一同公布,因此目前國內(nèi)共享軟件使用此方法較少。
(2)Key File加密保護(hù)技術(shù)。這是一種利用注冊文件來保護(hù)共享軟件的加密方式。Key File通常是一個小文件,文件格式自由,可以是純文本文件,也可以是二進(jìn)制文件,其內(nèi)容是一些加密過或未加密的數(shù)據(jù),一般有用戶名、注冊碼等信息。采用此種加密技術(shù)的共享軟件試用版一般沒有注冊文件,當(dāng)用戶希望使用正式版時需要交費注冊,交費注冊后收到此共享軟件的注冊文件,用戶只需要將注冊文件存放到指定的目錄即可使試用版成為正式版。當(dāng)共享軟件每次啟動時,從注冊文件中讀取數(shù)據(jù),然后利用加解密算法進(jìn)行注冊文件驗證處理,如果正確則以注冊版模式運行。目前這種加密技術(shù)在共享軟件中應(yīng)用也不多。
(3)序列號加密技術(shù)。目前大多數(shù)共享軟件采用這種加密方式。用戶一旦試用期滿仍想使用這個軟件,就必須到軟件公司進(jìn)行交費注冊,軟件公司根據(jù)用戶提交的相關(guān)信息利用密碼加密算法生成一個序列號,這個序列號往往是根據(jù)用戶提交的姓名、計算機(jī)某一硬件如CPU、網(wǎng)卡、硬盤、顯卡等的序列號生成的,用戶將軟件公司給的序列號在軟件運行時輸入進(jìn)去,軟件利用自己的算法程序驗證序列號是否正確,若正確說明你是合法用戶,就可以正常使用了。
此方法的優(yōu)點就是方案實現(xiàn)簡單、方便,交易過程在Internet上實現(xiàn)。缺點就是軟件的解密是在用戶計算機(jī)上完成的,一些黑客利用用戶信息與軟件序列號之間的驗證漏洞找出用戶信息與軟件序列號之間的換算算法,編制出一種叫KeyMaker的破解程序,只要輸入所需的用戶信息,破解程序就能幫助你計算出序列號,你再用你的名字和這個序列號輸入進(jìn)軟件中就變成正版軟件了。
(4)許可證加密技術(shù)。從某種角度來說,許可證加密技術(shù)可以看作是序列號加密技術(shù)的一個變種。這種共享軟件不能直接使用,在安裝或運行時會對用戶的計算機(jī)進(jìn)行系統(tǒng)檢測,并依據(jù)檢測結(jié)果生成一個用戶計算機(jī)的特定指紋數(shù)據(jù),它可以是一個純文本文件,也可以是一串十六進(jìn)制數(shù),用戶把指紋數(shù)據(jù)通過Email、Internet等方式傳送給軟件開發(fā)商,開發(fā)商根據(jù)用戶指紋數(shù)據(jù)生成一個注冊碼或注冊文件并發(fā)送給用戶,用戶完成注冊后即可正常使用。
該加密技術(shù)的缺點是軟件的使用受限,通常只能用在注冊指紋數(shù)據(jù)的那臺計算機(jī)上,更換計算機(jī)或者用戶更換了某些硬件設(shè)備都可能造成注冊碼或者注冊文件失效,還需要重新更新指紋數(shù)據(jù)從而獲取新的注冊碼或注冊文件,這對開發(fā)商來說無疑增大了服務(wù)與管理的工作量。
(5)數(shù)字簽名(Digital Signature)加密技術(shù)。數(shù)字簽名又名電子簽章、公鑰數(shù)字簽名,該技術(shù)是公開密鑰算法(即非對稱加密算法)的典型應(yīng)用,是在數(shù)據(jù)單元上附加一些數(shù)據(jù),也可是對數(shù)據(jù)單元所作的密碼變換,類似于寫在書信上的親筆簽名,只不過是使用公鑰加密數(shù)字技術(shù)來實現(xiàn)鑒別數(shù)字信息真?zhèn)蔚姆椒ā?/p>
基于公鑰密碼體制的數(shù)字簽名技術(shù)目前主要分普通數(shù)字簽名、特殊數(shù)字簽名兩類。其中普通數(shù)字簽名加密技術(shù)采用的算法主要有RSA、Fiat-Shamir、ElGamal、Schnorr、Guillou-Quisquarter、Ong-Schnorr-Shamir數(shù)字簽名算法、Des/DSA、橢圓曲線數(shù)字簽名算法和有限自動機(jī)數(shù)字簽名算法等;特殊數(shù)字簽名加密技術(shù)主要有盲簽名、公平盲簽名、代理簽名、群簽名、不可否認(rèn)簽名、門限簽名、具有消息恢復(fù)功能的簽名等,具體采用哪種加密算法由具體應(yīng)用環(huán)境來決定,但不管采用哪種數(shù)字簽名加密技術(shù),通常都要定義兩種互補(bǔ)的算法,一種是用于簽名,另一種是用于驗證。
數(shù)字簽名加密技術(shù)是目前共享軟件加密應(yīng)用較多的一種,也是目前的一個研究熱門課題。
3 RSA算法的原理與具體應(yīng)用機(jī)制
3.1 RSA算法基本原理
RSA是第一個比較完善的、既可用于數(shù)據(jù)加密又可用于數(shù)字簽名的算法,目前已被ISO、ITU等一些國際標(biāo)準(zhǔn)化組織做為標(biāo)準(zhǔn)采用。
RSA加密體制用戶i的公開加密算法Ei和保密的解密算法Di是這樣產(chǎn)生的:
(1)隨機(jī)選取兩個不同的大素數(shù)pi和qi,將這兩個數(shù)保密;
(2)計算求出兩個素數(shù)的乘積ni=piqi,然后計算出ni的歐拉數(shù)Ф(ni)=(pi-1)(qi-1);
(3)用戶從(1,Ф(ni))中隨機(jī)選取一個與Ф(ni)互質(zhì)的整數(shù)ei,作為公開的加密指數(shù);
(4)利用歐幾里得算法計算di,滿足eidi≡1 MOD Ф(ni);
(5)(ni,ei)和(ni,di)分別稱為“公開密鑰”和“秘密密鑰”。
由上述原理可知,RSA加密算法是基于模冪的可逆運算,但這種可逆是由特定的數(shù)值對(即公鑰和私鑰)決定的。
3.2 RSA算法在共享軟件加密技術(shù)方面的應(yīng)用機(jī)制
(1)RSA算法在序列號加密技術(shù)方面的應(yīng)用機(jī)制。
1)生成一對私鑰D和公鑰E,以供注冊機(jī)、軟件注冊模板使用;
2)共享軟件開發(fā)商編寫一個注冊機(jī),并通過注冊機(jī)將用戶名、私鑰D等信息生成密碼C——注冊碼,然后將用戶名和注冊碼提供給客戶;
3)客戶啟動軟件時,輸入開發(fā)商提供的用戶名與注冊碼,軟件注冊模板程序采用公鑰E對注冊碼解碼后生成F——用戶名;
4)軟件注冊模板對比輸入的用戶名和解碼后的用戶名F,若一致則用戶合法,否則授權(quán)失敗。
(2)RSA算法在在線注冊加密技術(shù)方面的應(yīng)用機(jī)制。
1)生成一對私鑰D和公鑰E,以供注冊系統(tǒng)、軟件注冊模板使用;
2)軟件開發(fā)商通過私鑰D將用戶的憑證信息加密生成F,通常存儲在注冊數(shù)據(jù)庫中;
3)客戶啟動軟件時,輸入客戶特征信息后,軟件注冊模板程序?qū)τ脩籼卣餍畔⒗霉€E加密,形成注冊憑證C并發(fā)送到開發(fā)商的注冊系統(tǒng)中;
4)注冊系統(tǒng)對用戶注冊憑證C采用私鑰D加密生成F,并通過F驗證客戶身份的有效性;
5)注冊系統(tǒng)通過私鑰D對注冊驗證結(jié)果進(jìn)行加密后再發(fā)送回軟件系統(tǒng);
6)軟件注冊模板程序?qū)︱炞C結(jié)果利用公鑰E解密,根據(jù)對比結(jié)果來決定是否是有效授權(quán)。
(3)RSA算法在激活碼加密技術(shù)方面的應(yīng)用機(jī)制。
1)生成一對私鑰D和公鑰E,以供注冊機(jī)、軟件注冊模板使用;
2)用戶啟動軟件時,軟件注冊模板檢測客戶機(jī)的特定硬件信息,如硬盤序列號、MAC地址、CPU序列號等,并通過有關(guān)編碼算法生成一個申請碼C;
3)客戶將申請碼C發(fā)給軟件開發(fā)商,開發(fā)商通過注冊機(jī)對申請碼C利用私鑰D加密生成激活碼F并發(fā)送給客戶;
4)客戶輸入激活碼F后,軟件注冊模板程序?qū)せ畲aF利用公鑰E解碼后生成G——客戶機(jī)特征信息,然后將G與軟件注冊模板提取客戶機(jī)的特定信息后的編碼進(jìn)行對比,若相等則客戶合法,否則授權(quán)失敗。