江志儉 張燕平
摘要 隨著信息技術(shù)的突飛猛進的發(fā)展和航空軟件交付的增多,開發(fā)者為了維護自身軟件的成果、技術(shù)、版權(quán)以及購買人的利益,必需對軟件進行加密保護。本文針對傳統(tǒng)基于序列號的軟加密存在的序列號固定、加密強度低、軟件供應(yīng)商不易控制的缺點,提出了根據(jù)隨機產(chǎn)生的序列號,設(shè)計非對稱的加密算法,動態(tài)生成對應(yīng)的注冊碼的方法,對交付的軟件實現(xiàn)加密注冊,實現(xiàn)一個終端,一個注冊碼,完成注冊碼驗證的終端才能運行應(yīng)用軟件。經(jīng)試驗驗證,基于該方法實現(xiàn)軟件加密,操作簡單,可靠性強,解密難度大,且不需要額外的成本,有效地防止軟件被復(fù)用或盜用。
【關(guān)鍵詞】注冊碼 軟件加密 加密算法WINDOWS CE
1 引言
隨著信息技術(shù)的突飛猛進發(fā)展,直升機航空電子系統(tǒng)的體系結(jié)構(gòu)的改變,軟件在直升機航空電子設(shè)備作用日趨明顯,推動著直升機航電技術(shù)的發(fā)展。為了保障交付的軟件產(chǎn)權(quán)和成果,和軟件購買人利益,使軟件不被隨意拷貝復(fù)用或盜用,軟件開發(fā)商采用某種加密方法對其軟件產(chǎn)品進行保護,就非常有必要。
目前對軟件保護方法就是對軟件加密,加密的方法可分為軟加密和硬加密兩種,主流的硬加密方法是提供外帶軟件狗加密保護,該方法需要外帶軟件狗,遺失或故障均導(dǎo)致軟件不可用。主流軟加密提供唯一的序列號,序列號公開,則軟件可隨意使用。
本文以軟件加密技術(shù)和算法為研究背景,對數(shù)據(jù)加密方案和算法做系統(tǒng),全面分析,并提出一種基于注冊碼方法加密技術(shù)實現(xiàn)對交付的應(yīng)用軟件進行加密,序列號為根據(jù)時間信息采用加密算法生成6位隨機數(shù)字,依據(jù)序列號,設(shè)計解密算法產(chǎn)生唯一的注冊號,只有提供該注冊號的設(shè)備可運行配置的應(yīng)用軟件。基于注冊碼的軟件加密技術(shù),成功應(yīng)用于WINCE嵌入式系統(tǒng)PDA設(shè)備交付的應(yīng)用軟件中。
2 加密方案
當(dāng)前,加密方案存在多種方式,主要可以歸類為兩種,一種為不依賴硬件的加密f軟加密)方案和依賴硬件(硬加密)的加密方案。
2.1 軟加密
軟加密是不需要輔助硬件,直接在軟件中設(shè)密碼,一般才用序列號或許可證文件的授權(quán)方式,通過特定的軟件算法,可以降低加密成本的加密方法,常見的軟加密位為序列號加密方法,密碼表加密方法。
序列號加密方案:為軟件供應(yīng)方提供購買者安裝該軟件使用的唯一正確的序列號,用戶只要輸入正確的序列號,就可以使用該軟件。該方案如果序列號被盜,該軟件可以隨意拷貝復(fù)用,且軟件能夠正常運行,加密強度低,不易于供應(yīng)商控制。
密碼表加密方案:為應(yīng)用程序運行時,提出問題,目前主流為提供特定長度數(shù)字的序列號,根據(jù)序列號,輸入對應(yīng)的密碼來解鎖相應(yīng)的應(yīng)用程序。只要密碼輸入正確,軟件才能正確運行。該使用者為合法用戶。該方案運行和使用簡單,得到廣泛的運用。每個設(shè)備在使用該應(yīng)用程序時,必須先輸入正確的注冊密碼,且每個設(shè)備注冊碼異同,易于供應(yīng)商控制和防止應(yīng)用軟件被盜用或復(fù)用。
2.2 硬加密
硬加密是將應(yīng)用程序的加密信息存儲到某個特定的硬件存儲區(qū)中或是硬件的電路中,然后座位軟件的附加設(shè)備一起提供給軟件購買人。在使用該軟件時,必須插入該附屬硬件,軟件方可正常運行。軟件運行時,檢測該硬件存儲區(qū)或電路中對應(yīng)的密鑰信息,如密鑰不存在,軟件運行異?;蜍浖承┕δ墚惓?。常見的硬加密有軟件狗,智能鎖。
軟件狗:軟件狗是目前主流的一種加密工具,它是插入計算機并行口上可插入USB口的軟硬件結(jié)合軟件加密設(shè)備。該設(shè)備具有幾十或幾百字節(jié)的非易失性存儲空間,供應(yīng)商可將密鑰信息存儲在該區(qū)域,用于讀寫密鑰信息。軟件狗加密用戶使用簡易。
智能卡:為了防止密鑰信息被取出或盜用,在軟件狗基礎(chǔ)上內(nèi)部增加一個單片機,軟件開發(fā)商將軟件部分程序或算法寫入卡中,使用戶與外接設(shè)備之間實現(xiàn)無縫鏈接.和加密硬件有效結(jié)合,保證軟件提供者利益。智能卡加密強度高,兼容性強,但成本高。
2.3 軟加密和硬加密比較
硬加密:優(yōu)點為加密強度高,加密性能好、加密方法靈活,缺點為無法方便用戶實現(xiàn)試用版本和按需購買,硬件作為附屬設(shè)備本身需要安裝和維護成本,且丟失,軟件不可正常使用,難以升級和管理。額外的硬件設(shè)備影響了客戶用戶體驗。
軟加密:優(yōu)點為不需要加密鎖硬件,也不需要安裝驅(qū)動和客戶端組件,實現(xiàn)軟件電子化發(fā)行。易于管理和維護,有助于提高授權(quán)效率和改善用戶體驗。降低購買者的管理成本。
3 加密算法
軟件加密的核心在于密鑰,密鑰生成核心在加密算法,常用的加密算法有置換加密、對稱加密算法和非對稱加密算法。目前主流為后兩種,對稱加密算法是采用相同的密鑰進行加密和解密,代表算法有DES算法,非對稱加密算法使用兩種不同的密鑰,公鑰和私鑰,其中公鑰公開,用于加密,私鑰由用戶保存,用于解密。該類算法代表有RSA算法。
3.1 對稱加密算法DES
DES算法為密碼體系的對稱密碼體制,又被稱為數(shù)據(jù)加密標準,是IBM公司由1972年研制的對稱加密算法,自推出以來,一直為國際上商用保密通訊和計算機通信最常用的加密算法。DES算法為對稱加密算法,加密密鑰和解密密鑰一致。明文按64位進行分組,密鑰長64位,密鑰事實為56位參與DES計算,分組后的明文組合56位密鑰按位替代后交換的方法形成密文組的加密方法。算法特點為分組比較短,密鑰太短、密碼生命周期短,運算速度較慢。
3.2 非對稱加密算法RSA
RSA公鑰加密算法是1977年由美國學(xué)者提出的公鑰密碼體制,其基礎(chǔ)為是數(shù)論中的歐拉定理,。公鑰加密體制的特點采用不同的加密密鑰和解密密鑰,通訊雙方不需要事先傳遞密鑰便可以建立通訊鏈接。保密性好,計算量大,不適合大量信息的加密。RSA是目前最有影響力和最常用的公鑰加密算法,它能夠抵抗到目前絕大多數(shù)密碼的攻擊,已被ISO推薦為數(shù)據(jù)加密標準。
4 注冊碼加密技術(shù)
本文采用的注冊碼加密技術(shù)是密碼表軟加密技術(shù)的改進。注冊碼為自動生成6位隨機數(shù)字,根據(jù)該6位數(shù)字,通過設(shè)計的非對稱加密算法產(chǎn)生唯一的注冊碼,用戶通過輸入正確的6位注冊碼,軟件方可正確使用,軟件驗證注冊碼合法性的過程,實際上就是驗證序列號和注冊碼的換算關(guān)系是否符合加密算法,由于該過程在手執(zhí)PDA終端是進行的,必須保證該過程關(guān)鍵性數(shù)據(jù)和加密算法的可靠性,不被輕易解密,注冊碼技術(shù)的關(guān)鍵在于加密算法的換算過程。算法公式可自行設(shè)計,本文的基于注冊碼的加密方法設(shè)計架構(gòu)圖如圖1,應(yīng)用軟件啟動流程圖如圖2。
4.1 注冊表創(chuàng)建
本文采用Embedded Visual C++開發(fā)工具,采用MFC的工程對話框、文本框、按鈕等控件,創(chuàng)建注冊表程序為:LPCTSTR keyName=L”MySofiware\\RegTest”;
IResult=RegCreateKeyEx(HKEY_CURRENT_USER,keyName,O,L””,O,O,NULL,&hOpenKey,&dwOpenStyle);
AS SERT (IResult==ERROR_SUCCESS);
創(chuàng)建注冊表的目的為在注冊表中存儲密鑰,創(chuàng)建注冊表的過程為先創(chuàng)建鍵名,在鍵值中存儲密鑰,應(yīng)用程序啟動時,取出該數(shù)據(jù)進行驗證或處理,滿足條件時運行應(yīng)用程序,否則終止運行,保護應(yīng)用程序的合法性。
注冊表常用的類為:RegCreateKeyEx:創(chuàng)建關(guān)鍵字,如果關(guān)鍵字己被創(chuàng)建,則執(zhí)行打開操作。
RegOpenKey: 用于打開某鍵值。RegSetValueEx:打開某鍵后,設(shè)定某鍵的值。
RegQueryValueEx:查詢一個存在的值,如果匹配,返回成功,否則失敗。
4.2 注冊碼寫入注冊表
解密成功,將特定密碼數(shù)據(jù)寫入到對應(yīng)注冊表中,將程序?qū)懭胱员淼暮诵拇a為:
LPCTSTR dwKeyName=L”密碼”;
IRe sult=RegS etValueEx(hOpenKey,dwKeyName,O,REG_SZ,(BYTE*)& dwKeyValue,sizeof(dwKeyValue》;ASSERT(lResult==ERRORSUCCESS);
固定密碼寫入注冊表之后,PDA設(shè)備加密的應(yīng)用程序啟動時,匹配特定的密碼,如正確,應(yīng)用程序正常運行,否則不可用。
4.3 設(shè)定序列號和注冊號
密鑰=F逆(序列號),將序列號加密生成密鑰,應(yīng)考慮F算法復(fù)雜度和可靠性的設(shè)計.使解密者不容易分析F逆而解密加密算法,設(shè)計為非對稱算法,采用一對用于加密的序列號和用于解密的注冊號,從序列號難以推算出注冊號,加密強度高,不易解密。
序列號:根據(jù)時間數(shù)據(jù),采用加密算法Serial Number= cal(T),生成6位數(shù)字序列號算法圖3。
注冊號:根據(jù)序列號,采用解密算法生成Registration code= caI(Serial Number),算法為圖4。
4.4 WinCE下Embedded Visual C++實現(xiàn)和驗證
本文采用基于嵌入式平臺WinCE操作系統(tǒng),以Embedded Visual C++為編譯開發(fā)工具,基于MFC框架實現(xiàn),輔助與對話框,按鈕,文本框?qū)崿F(xiàn),運行在PDA設(shè)備的界面如圖5。
基于注冊碼的加密技術(shù),成功運用于WINCE嵌入式平臺PDA設(shè)備的應(yīng)用軟件的加密,己完成兩型機外場驗證,并交付多套PDA設(shè)備,每臺PDA設(shè)備必須通過序列號,申請到注冊號,完成注冊,方可正常運行該應(yīng)用軟件,PDA設(shè)備維修返廠,再注冊使用。
5 結(jié)束語
對比傳統(tǒng)的軟加密序列號技術(shù),軟件供應(yīng)方提供該軟件使用的唯一正確的序列號,如果序列號被盜,該軟件可以隨意拷貝復(fù)用,加密強度低,本文基于注冊碼的加密技術(shù),注冊碼是依據(jù)給定的隨機的序列號,動態(tài)生成的,且不唯一,因此可靠性更強,解密難度更高,保證了應(yīng)用軟件使用的合法性,且易于供應(yīng)商控制。
基于注冊碼的軟件加密技術(shù),加密軟件本身啟動時無需注冊,設(shè)備第一次運行應(yīng)用程序時注冊一次,正確后寫入注冊表,啟動時再匹配固定的密碼,整個過程操作簡易,可靠性強,維護軟件提供人的成果,同時也是最經(jīng)濟可行的方案,容易實現(xiàn)。
基于注冊碼的加密技術(shù),成功運用于WINCE嵌入式平臺,其核心在于算法計算隨機序列號和由序列號生成注冊碼的過程,但過程和算法本身是跨平臺的、可移植的,是一種通用的、可行的軟件加密技術(shù),具有很強的工程實用價值。
參考文獻
[l]Douglas Boling,Microft Windows CE程序設(shè)計[M].北京大學(xué)出版社,1998.
[2]顧剛.加密與解密[M].北京:電子工業(yè)出版社,2003.
[3]李樹彬,一種實用軟件保護方案和實現(xiàn)[J].現(xiàn)代計算機,2007.
[4]侯愛民,利用加密狗實現(xiàn)軟件版權(quán)的保護[J].東莞理工學(xué)院學(xué)報,2005.
[5]徐海風(fēng),軟件加密方法及技術(shù)[J].山西冶金,2007 (01).