RSA加密算法在共享軟件加密技術中的應用

隨著軟件行業(yè)經(jīng)營模式的轉變,在網(wǎng)絡上發(fā)布的共享軟件逐漸增多,軟件開發(fā)商為了保護自己的知識產(chǎn)權權益,需要對軟件產(chǎn)品進行加密處理,以防止未經(jīng)許可的隨意拷貝,這就形成了各種各樣的共享軟件加密技術。

一、共享軟件的定義

共享軟件一般是指那種在網(wǎng)絡上公開發(fā)布的,采用¨先試用,后購買”方式銷售的具有版權的軟件,此類軟件一般有兩個或兩個以上的版本,網(wǎng)絡上公開發(fā)布的是一個功能受限或者用戶數(shù)量受限制或使用時間、次數(shù)受限的共享版本,用戶只能試用軟件部分功能或者只能試用一定次數(shù)或一段時間,只有當用戶購買注冊之后才可以使用沒有限制的正式版本。

二、常用的共享軟件保護方法

共享軟件保護方式主要有兩大類,一類是依賴于特定硬件的硬加密保護技術,如加密狗、鑰匙盤等;另一類是不需要額外硬件的軟件加密保護技術,如密碼表、許可證加密法等,序列號法一般采用綁定計算機硬件的方式,但它綁定的是計算機本身如CPU、BIOS、硬盤、MAC等的硬件信息,沒有增加額外的硬件設備,因此將其歸結為“軟加密”技術。

1、硬加密技術

(1)加密卡狗加密法

加密狗加密法是插在計算機并口、串口等接口上的軟硬件結合的軟件加密產(chǎn)品。當被加密狗保護的軟件要運行時,軟件向插在計算機接口上的加密狗發(fā)出查詢命令,加密狗根據(jù)命令迅速計算查詢并給出響應,如果響應正確,則保證軟件繼續(xù)運行,否則,軟件將不能運行。目前,大型商業(yè)軟件一般都采用加密狗來保護,但共享軟件采用
此種方法的較少,因為該加密保護方法成本較高。

(2)鑰匙盤加密法

其原理是利用BIOS的INT 13中斷格式化軟盤成一些特殊的磁道,有的還在軟盤的這些特殊磁道上寫入一定信息,即在軟盤的特殊位置做標記,在軟件運行時需要讀取這些特殊標記,以檢驗軟件的合法性,因此使用軟件時必須將鑰匙盤插在軟驅(qū)中。這是最古老的加密方法,目前基本上不在采用了。

(3) CD-Key光盤保護技術

此加密技術的原理是被保護的軟件在啟動時判斷光驅(qū)中的光盤上是否存在某特定文件,如果存在則說明軟件是合法的,繼續(xù)運行,否則則認為是非法的,拒絕運行。但當軟件一旦運行后一般不再檢查加密光盤文件的存在與否。Windows操作系統(tǒng)下此加密方法的實現(xiàn)通常是:先用GetLogicaIDriveStrings()或GetLogicaIDrives()得到計算機的驅(qū)動器列表,然后再用GetDriveType()檢查每一個驅(qū)動器看是不是光驅(qū),若是光驅(qū)則用CreateFileA()或FindFirstFileA()等檢查特定的文件是否存在,并可能進一步檢查文件的屬性、大小、內(nèi)容等,這由加密者根據(jù)自己的需要設定。由于本加密技術需要制作加密光盤,這對一些規(guī)模小的軟件開發(fā)商來說具有一定的困難,因此這種加密技術目前在共享軟件上用的也較少。

2、軟加密技術

(1)序列號加密技術

目前大多數(shù)共享軟件采用這種加密方式。用戶一旦試用期滿仍想使用這個軟件,就必須到軟件公司進行交費注冊,軟件公司根據(jù)用戶提交的相關信息利用密碼加密算法生成一個序列號,這個序列號往往是根據(jù)用戶提交的姓名、計算機某一硬件如CPU、網(wǎng)卡、硬盤、顯卡等的序列號生成的,用戶將軟件公司給的序列號在軟件運行時輸入進去,軟件利用自己的算法程序驗證序列號是否正確,若正確說明你是合法用戶,就可以正常使用了。

此方法的優(yōu)點就是方案實現(xiàn)簡單、方便,交易過程在Intemet上實現(xiàn)。缺點就是軟件的解密是在用戶計算機上完成的,一些黑客利用用戶信息與軟件序列號之間的驗證
漏洞找出用戶信息與軟件序列號之間的換算算法,編制出一種叫KeyMaker的破解程序,只要輸入所需的用戶信息,破解程序就能幫助你計算出序列號,你再用你的名字和這個序列號輸入進軟件中就變成正版軟件了。

(2)密碼表加密技術

其原理是在軟件啟動時要求用戶根據(jù)屏幕出現(xiàn)的提示問題輸入特定的答案,而這個答案一般是在用戶手冊上的防復印的密碼表中,只有用戶輸入正確答案后才能繼續(xù)運行。這種加密技術實現(xiàn)簡單,而且成本較低,但軟件破譯者往往把整個密碼表保存成一個計算機文件,同破解后的盜版軟件一同公布,因此目前國內(nèi)共享軟件使用此方法較少。

(3)Key File加密保護技術

這是一種利用注冊文件來保護共享軟件的加密方式。Key File通常是一個小文件,文件格式自由,可以是純文本文件,也可以是二進制文件,其內(nèi)容是一些加密過或未加密的數(shù)據(jù),一般有用戶名、注冊碼等信息。采用此種加密技術的共享軟件試用版一般沒有注冊文件,當用戶希望使用正式版時需要交費注冊,交費注冊后收到此共享軟件的注冊文件,用戶只需要將注冊文件存放到指定的目錄即可使試用版成為正式版。當共享軟件每次啟動時,從注冊文件中讀取數(shù)據(jù),然后利用加解密算法進行注冊文件驗證處理,如果正確則以注冊版模式運行。目前這種加密技術在共享軟件中應用也不多。

(4)許可證加密技術

從某種角度來說,許可證加密技術可以看作是序列號加密技術的一個變種。這種共享軟件不能直接使用,在安裝或運行時會對用戶的計算機進行系統(tǒng)檢測,并依據(jù)檢測結果生成一個用戶計算機的特定指紋數(shù)據(jù),它可以是一個純文本文件,也可以是一串十六進制數(shù),用戶把指紋數(shù)據(jù)通過Email、Internet等方式傳送給軟件開發(fā)商,開發(fā)商根據(jù)用戶指紋數(shù)據(jù)生成一個注冊碼或注冊文件并發(fā)送給用戶,用戶完成注冊后即可正常使用。

該加密技術的缺點是軟件的使用受限,通常只能用在注冊指紋數(shù)據(jù)的那臺計算機上,更換計算機或者用戶更換了某些硬件設備都可能造成注冊碼或者注冊文件失效,還
需要重新更新指紋數(shù)據(jù)從而獲取新的注冊碼或注冊文件,這對開發(fā)商來說無疑增大了服務與管理的工作量。

(5)數(shù)字簽名(Digital Signature)加密技術

數(shù)字簽名又名電子簽章、公鑰數(shù)字簽名,該技術是公開密鑰算法(即非對稱加密算法)的典型應用,是在數(shù)據(jù)單元上附加一些數(shù)據(jù),也可是對數(shù)據(jù)單元所作的密碼變換,類似于寫在書信上的親筆簽名,只不過是使用公鑰加密數(shù)字技術來實現(xiàn)鑒別數(shù)字信息真?zhèn)蔚姆椒ā?/p>

基于公鑰密碼體制的數(shù)字簽名技術目前主要分普通數(shù)字簽名、特殊數(shù)字簽名兩類。其中普通數(shù)字簽名加密技術采用的算法主要有RSA、Fiat-Shamir.EIGamal、Schnorr、
Guillou-Quisquarter、Ong-Schnorr-Shamir數(shù)字簽名算法、Des/DSA、橢圓曲線數(shù)字簽名算法和有限自動機數(shù)字簽名算法等;特殊數(shù)字簽名加密技術主要有盲簽名、公平盲簽名、代理簽名、群簽名、不可否認簽名、門限簽名、具有消息恢復功能的簽名等,具體采用哪種加密算法由具體應用環(huán)境來決定,但不管采用哪種數(shù)字簽名加密技術,通常都要定義兩種互補的算法,一種是用于簽名,另一種是用于驗證。

數(shù)字簽名加密技術是目前共享軟件加密應用較多的一種,也是目前的一個研究熱門課題。

三、RSA加密算法在共享軟件加密技術中的應用

1、RSA加密算法基本原理

RSA是第一個比較完善的、既可用于數(shù)據(jù)加密又可’用于數(shù)字簽名的算法,目前已被ISO、ITU等一些國際標準化組織做為標準采用。

RSA加密體制用戶i的公開加密算法Ei和保密的解密算法Di是這樣產(chǎn)生的:

(1)隨機選取兩個不同的大素數(shù)Pi和qi,將這兩個數(shù)保密:

(2)計算求出兩個素數(shù)的乘積ni=piqi,然后計算出ni的歐拉數(shù)φ(ni)=(Pi-1)(qi-1);

(3)用戶從(1,φ(ni))中隨機選取一個與φ(ni)互質(zhì)的整數(shù)ei,作為公開的加密指數(shù);

(4)利用歐幾里得算法計算di,滿足eidi=1 MODφ(ni);

(5)(ni,ei)和(ni,di)分別稱為¨公開密鑰”和“秘密密鑰”。

由上述原理可知,RSA加密算法是基于模冪的可逆運算,但這種可逆是由特定的數(shù)值對(即公鑰和私鑰)決定的。

2、RSA加密算法在共享軟件加密技術方面的應用機制

(1)RSA加密算法在序列號加密技術方面的應用機制

1)生成一對私鑰D和公鑰E,以供注冊機、軟件注冊模板使用;

2)共享軟件開發(fā)商編寫一個注冊機,并通過注冊機將用戶名、私鑰D等信息生成密碼C——注冊碼,然后將用戶名和注冊碼提供給客戶;

3)客戶啟動軟件時,輸入開發(fā)商提供的用戶名與注冊碼,軟件注冊模板程序采用公鑰E對注冊碼解碼后生成F——用戶名;

4)軟件注冊模板對比輸入的用戶名和解碼后的用戶名F,若一致則用戶合法,否則授權失敗。

(2)RSA加密算法在在線注冊加密技術方面的應用機制

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對注冊驗證結果進行加密后再發(fā)送回軟件系統(tǒng);

6)軟件注冊模板程序?qū)︱炞C結果利用公鑰E解密,根據(jù)對比結果來決定是否是有效授權。

(3)RSA加密算法在激活碼加密技術方面的應用機制

1)生成一對私鑰D和公鑰E,以供注冊機、軟件注冊模板使用;

2)用戶啟動軟件時,軟件注冊模板檢測客戶機的特定硬件信息,如硬盤序列號、MAC地址、CPU序列號等,并通過有關編碼算法生成一個申請碼C;

3)客戶將申請碼C發(fā)給軟件開發(fā)商,開發(fā)商通過注冊機對申請碼C利用私鑰D加密生成激活碼F并發(fā)送給客戶;

4)客戶輸入激活碼F后,軟件注冊模板程序?qū)せ畲aF利用公鑰E解碼后生成——客戶機特征信息,然后將G與軟件注冊模板提取客戶機的特定信息后的編碼進行對比,若相等則客戶合法,否則授權失敗。

根據(jù)上述機制,利用C++/JAVA語言均可實現(xiàn)。

小知識之BIOS

BIOS是英文"Basic Input Output System"的縮略語,直譯過來后中文名稱就是"基本輸入輸出系統(tǒng)"。其實,它是一組固化到計算機內(nèi)主板上一個ROM芯片上的程序,它保存著計算機最重要的基本輸入輸出的程序、系統(tǒng)設置信息、開機后自檢程序和系統(tǒng)自啟動程序。其主要功能是為計算機提供最底層的、最直接的硬件設置和控制。