本發(fā)明涉及一種采用混合加密算法實現的對軟件發(fā)放控制的安全證書模塊,對軟件發(fā)放的時效,功能點進行控制,適用于商用付費軟件的控制和公司科研技術的保密。
背景技術:
目前,pc上的軟件架構主要有b/s(browserserver),c/s(clientserver)和不需要服務機的本地軟件。
商用的bs架構軟件一般是部署在客戶的服務器上實現網頁訪問的大型數據系統(tǒng),這個系統(tǒng)可以運行在局域網內或者公網環(huán)境中,熟悉行業(yè)的人很容易拿到服務器web服務器中的部署包進行部署和使用。
商用的cs架構軟件和本地軟件一般是以安裝包的方式給客戶,通過安裝包進行自動安裝和使用
對于公司的商用軟件或者含有自主研發(fā)技術的軟件為了保證對外能回收利潤或者不被肆意的盜用和模仿技術,因此,十分有必要采用安全證書模塊對軟件的發(fā)放進行控制。
目前,市場上大部分的商用軟件都是采用注冊碼驗證的機制,很容易出現多機使用一個注冊碼,或者更改時間就能繼續(xù)使用這些問題。
技術實現要素:
本發(fā)明所要解決的問題是提供一種采用混合加密算法實現的對軟件發(fā)放控制的安全證書模塊,對bs、cs、本地軟件進行統(tǒng)一的管理,同時具有硬件加密和軟加密的功能,能兼容大部分開發(fā)語言,并且能夠跨pc平臺。基于這些特質,采用c++作為開發(fā)語言,并且生成注冊系統(tǒng)和軟件分別使用的安全模塊。
本發(fā)明的技術方案是:
一種采用混合加密算法實現對軟件發(fā)放控制的方法,它采用硬件狗和后臺控制器,該方法包括以下步驟:
s1、后臺控制器建立數據庫,記錄用戶信息,購買信息以及證書文件生成記錄,用戶信息包括計算機唯一識別信息(包括:mac地址、硬盤物理序列號和cpuid中的一個或者多個的組合)和為其分配的硬件狗,購買信息包括軟件功能模塊和有效期,證書文件生成記錄包括用戶信息和購買信息;
s2、用戶啟動軟件,獲取計算機的唯一識別信息,將此信息保存于證書文件中,并且發(fā)送證書文件給后臺控制器(用戶與后臺控制器進行通信,傳輸證書文件,或者打印證書文件,通過郵件或者傳真的方式發(fā)送給后臺控制器);
s3、后臺控制器為該用戶分配硬件狗,提取所購軟件功能模塊的解碼信息,將用戶購買的軟件功能模塊的解碼信息、有效期以及硬件狗信息加載在證書文件中,回傳至軟件所安裝的計算機;(用戶也可以預先購買軟件,選擇需要的功能模塊以及有效期,存儲在數據庫中,在用戶啟用軟件時,由后臺控制器調取對應的購買信息,進行配置);后臺控制器將此次證書文件生成記錄進行存儲;
s4、用戶收取證書文件和硬件狗,將硬件狗插入計算機,導入證書文件;將證書中的硬件狗信息與插入的硬件狗進行匹配,如果匹配失敗,終止運行,如果匹配成功,則獲取所購軟件功能模塊的解碼信息,與軟件中對應的功能模塊進行匹配,運行所購軟件功能模塊,根據有效期,對所購軟件功能模塊的運行時長進行控制。
進一步地,步驟s2中,對計算機的唯一識別信息進行加密后保存于證書文件中,對應的,后臺控制器解密證書文件中的唯一識別信息;所述的加密方法為md5加密方法。
進一步地,步驟s3中,硬件狗中配置有時鐘模塊,相應的步驟s4中,根據軟件使用有效期,對硬件狗中的時鐘模塊進行相應配置,用戶運行所購軟件的功能模塊,根據硬件狗中的時鐘判斷使用時間是否到期。
進一步地,當用戶需要更換電腦運行軟件時,后臺控制器根據重新獲取的該電腦的唯一識別信息,調取生成記錄中對應的軟件功能模塊信息以及剩余使用時間,對更換計算機后的軟件以及硬件狗進行重新生成證書和記錄。
進一步地,步驟s2中,軟件啟動,生成rsa2048密鑰對a,包括公鑰pka和私鑰ska,將公鑰pka和計算機的唯一識別信息保存于證書文件中,并且發(fā)送證書文件給后臺控制器;
步驟s3中,后臺控制器產生rsa2048秘鑰對b,包括公鑰pkb和私鑰skb,并隨機產生aes密鑰key,將aes密鑰key依次使用私鑰skb、公鑰pka進行加密,使用加密后的key對該步驟生成的包含軟件功能模塊解碼信息、有效期以及硬件狗信息的證書文件進行加密,將加密后的證書文件以及公鑰pkb發(fā)送給用戶;
步驟s4中,軟件獲取證書文件后,依次使用私鑰ska和公鑰pkb解密驗證,獲得aes密鑰key,使用key進行證書文件解密,得到證書的信息。
本發(fā)明的有益效果:
本發(fā)明的混合加密算法實現對于后臺控制器即注冊系統(tǒng)和外發(fā)軟件進行證書控制的安全證書模塊,具有硬件加密和軟加密雙重保護,安全性高,本發(fā)明可以用于所有需要進行軟件使用控制的場合。
本發(fā)明中,通過在硬件狗中設置時鐘模塊,使得軟件的使用周期依靠發(fā)放的硬件狗來實現,有效防止用戶電腦時鐘不準確或者篡改時鐘的問題。
具體實施方式
下面結合實施例對本發(fā)明作進一步的說明,雖然優(yōu)選了實施方式,然而應該理解,可以以各種形式實現本發(fā)明而不應被這里闡述的實施方式所限制。
一種采用混合加密算法實現對軟件發(fā)放控制的方法,它采用硬件狗和后臺控制器,該方法包括以下步驟:
s1、后臺控制器建立數據庫,記錄用戶信息,購買信息以及證書文件生成記錄,用戶信息包括計算機唯一識別信息(包括:mac地址、硬盤物理序列號和cpuid中的一個或者多個的組合)和為其分配的硬件狗,購買信息包括軟件功能模塊和有效期,證書文件生成記錄包括用戶信息和購買信息;
s2、用戶啟動軟件,獲取計算機的唯一識別信息,將此信息md5加密后保存于證書文件中,并且發(fā)送證書文件給后臺控制器(用戶與后臺控制器進行通信,傳輸證書文件,或者打印證書文件,通過郵件或者傳真的方式發(fā)送給后臺控制器);
s3、后臺控制器為該用戶分配硬件狗,提取所購軟件功能模塊的解碼信息,將用戶購買的軟件功能模塊的解碼信息、有效期以及硬件狗信息加載在證書文件中,回傳至軟件所安裝的計算機;(用戶也可以預先購買軟件,選擇需要的功能模塊以及有效期,存儲在數據庫中,在用戶啟用軟件時,由后臺控制器調取對應的購買信息,進行配置);后臺控制器將此次證書文件生成記錄進行存儲;
s4、用戶收取證書文件和硬件狗,將硬件狗插入計算機,導入證書文件;將證書中的硬件狗信息與插入的硬件狗進行匹配,如果匹配失敗,終止運行,如果匹配成功,則獲取所購軟件功能模塊的解碼信息,與軟件中對應的功能模塊進行匹配,運行所購軟件功能模塊,根據有效期,對所購軟件功能模塊的運行時長進行控制。
進一步地,步驟s3中,硬件狗中配置有時鐘模塊,相應的步驟s4中,根據軟件使用有效期,對硬件狗中的時鐘模塊進行相應配置,用戶運行所購軟件的功能模塊,根據硬件狗中的時鐘判斷使用時間是否到期。
進一步地,當用戶需要更換電腦運行軟件時,后臺控制器根據重新獲取的該電腦的唯一識別信息,調取生成記錄中對應的軟件功能模塊信息以及剩余使用時間,對更換計算機后的軟件以及硬件狗進行重新生成證書和記錄。
進一步地,步驟s2中,軟件啟動,生成rsa2048密鑰對a,包括公鑰pka和私鑰ska,將公鑰pka和計算機的唯一識別信息保存于證書文件中,并且發(fā)送證書文件給后臺控制器;
步驟s3中,后臺控制器產生rsa2048秘鑰對b,包括公鑰pkb和私鑰skb,并隨機產生aes密鑰key,將aes密鑰key依次使用私鑰skb、公鑰pka進行加密,使用加密后的key對該步驟生成的包含軟件功能模塊解碼信息、有效期以及硬件狗信息的證書文件進行加密,將加密后的證書文件以及公鑰pkb發(fā)送給用戶;
步驟s4中,軟件獲取證書文件后,依次使用私鑰ska和公鑰pkb解密驗證,獲得aes密鑰key,使用key進行證書文件解密,得到證書的信息。
具體實施時:
實施整套方案需要后臺控制系統(tǒng)和硬件狗的配合。
加密方面使用了開源的cryptopp的第三方加密庫;
硬件狗方面使用了safenet系列的加密狗,內置一個虛擬時鐘,部分實現代碼如下:
獲取計算機的唯一信息,mac地址,硬盤物理序列號,cpuid。
windows使用wmi服務進行獲取,linux系統(tǒng)使用匯編指令獲取,部分實現代碼如下:
接口:
1.獲取注冊碼-------------------注冊系統(tǒng)使用
export_apiint__stdcallstdcall_get_licensekey
(char*license_key,----返回的license結果
constchar*license_id,----系統(tǒng)碼
constchar*active_date,----到期日yyyy-mm-dd
constchar*active_quantity,----用戶數量
constchar*software_feature----軟件標識
constchar*function_point,----功能點
constchar*is_usedog));----硬件狗信息
2.獲取硬件狗狀態(tài)---------------------通用接口
export_apiint__stdcallstdcall_get_dogstatus(
char*dog_status);----返回的硬件狗狀態(tài)
3.獲取唯一標識---------------------非注冊系統(tǒng)使用
export_apiint__stdcallstdcall_get_license_id(
char*license_id,-----返回的系統(tǒng)碼
);
4.獲取驗證結果-----------------------------非注冊系統(tǒng)使用
export_apiint__stdcallstdcall_validate(
char*expire,----返回的到期日
char*function,----返回的功能點
char*capacity,----返回的容量
constchar*license_key,---注冊碼
constchar*software_feature);----軟件標識
以上已經描述了本發(fā)明的各實施例,上述說明是示例性的,并非窮盡性的,并且也不限于所披露的各實施例。在不偏離所說明的各實施例的范圍和精神的情況下,對于本技術領域的普通技術人員來說許多修改和變更都是顯而易見的。