范 濤,毛繼曙,王國中
(1.上海大學 通信與信息工程學院,上海 200072;2.上海廣電電子科技有限公司,上海 200233)
責任編輯:許 盈
隨著網絡技術和數字多媒體技術的迅猛發展,數字視頻通信獲得了廣泛應用,人類正在步入一個全新的數字時代[1]。數字電視系統是指音頻、視頻和數據信號從信源編碼、調制到接收和處理均采用數字化技術的系統方案。按照功能其可分為頭端發送系統和終端接收系統兩大部分。其中頭端包括數字電視信源系統、信號處理系統和調制輸出系統;終端接收系統包括機頂盒、電視機或數字電視一體機等,其各模塊間的通信如圖1所示。
在數字電視的系統中,頭端編碼器占有絕對的核心地位,其成本與價值非常高昂,而且傾注了開發者大量的心血,然而一旦軟件被盜用,無論對于開發者還是編碼器的制造商都會造成非常嚴重的后果。為了保護產品制造商以及開發者的權益,設計較好的編碼器軟件加密系統方案有著至關重要的作用。
目前編碼器在授權時大部分采用傳統的序列號保護法,該方法成本較低,但安全性和可靠性也較低[2]。采用注冊碼驗證的軟件保護機制一般對不同用戶使用相同的注冊碼,極易造成注冊碼的非法擴散,任何拷貝到軟件的用戶都可以用該注冊碼進行軟件注冊,從而給開發商造成相當大的損失。針對上述的問題,本文設計的方案主要基于如下4點考慮:

1)遵循“一機一碼”的原則。軟件注冊碼是唯一的,即一個注冊碼只能在一臺機器上注冊使用軟件,不能復制使用。
2)每次運行軟件時,要對用戶身份進行驗證,只有合法用戶才能使用軟件。
3)防惡意攻擊,攻擊者不能掌握注冊碼規律,無法寫出注冊機。
4)方便使用,成本低,推廣加密系統的應用。
根據上述4點需求,本文提出了一種基于硬件信息的軟加密技術。以具有唯一性的多項硬件信息為加密依據,采用MD5算法對獲得的信息進行加密,充分考慮了編碼器“一機一碼”的需求,從而可以有效防止非法注冊。此外,系統合理地選擇了非對稱算法來防止非法注冊的生成,對編碼器軟件進行加密保護,有效維護開發者和制造商的權益。
軟件加密是解決非法復制的有效手段,根據加密原理和方式的不同,軟件加密技術可分為軟加密、硬加密和網絡加密3類。
軟加密是指不依賴于特別硬件,用純軟件方式來實現對軟件的加密保護,最大優勢在于極低的加密成本。目前主要有序列號法、時間限制、功能限制、警告(NAG)窗口、注冊文件法和加殼法等。
序列號保護法是軟加密的一種,是以復雜的數學算法為核心的軟件加密技術,也是應用最為廣泛的方法之一。為達到識別用戶身份的目的,用戶必須到軟件公司去注冊后才能繼續使用。序列號保護法加密比較簡單,不需要額外的成本,用戶購買也非常方便,網絡上80%的軟件都是按照這種方式進行保護的,微軟的操作系統也曾使用過這種方法。
硬加密是通過硬件和軟件結合的方式,將加密信息固化到某個硬件中作為軟件的附加設備來實現軟件加密的。加密后運行軟件時,需要訪問相應的硬件,這類加密方式主要依賴于硬件信息不易被更改和復制的特點。主要有光盤加密、加密狗、加密芯片和軟盤加密等。
網絡加密技術被譽為是最安全的加密方式,但缺點也很明顯。用戶必須一直在線,一旦網絡不穩定,被加密的軟件將無法使用。國外曾有一些游戲軟件使用過網絡加密方式,要求玩家必須在線,一旦網絡不穩定或是掉線,程序就會自動關閉,給用戶帶來了極大的不便。
在數字電視的系統中,為了保證音視頻的有效傳輸,需要高效的編碼算法。編碼器在系統中具有核心的地位,所以一旦被不法分子拷貝將會對設備制造商、運營商以及研發人員的權益造成極大的損失。不同于其他應用軟件,編碼器一般應用于廣播網且需快速注冊,所以傳統的加密方法并不能很好地達到系統的要求。針對“一機一碼”的需求,本文提出了一種基于硬件信息的軟加密技術,通過數字簽名,散列、密鑰交換等多個可靠的密碼學算法進行多重加密保護,保證了編碼器軟件的安全。
基于硬件信息的軟件加密方案,當用戶獲得軟件進行安裝時,首先通過機器碼獲取模塊從用戶的計算機上取得該機器的一些硬件信息(如硬盤序列號、網卡MAC地址、CPU ID等)。然后,對這些信息進行計算獲得序列號,從而達到軟件與硬件信息綁定。用戶需要把這一序列號用Internet、Email或郵寄等方法告知軟件發行商,軟件發行商利用注冊碼生成模塊(即注冊機)生成相應的注冊碼寄給用戶,用戶根據安裝提示輸入注冊碼進行軟件注冊。由于不同計算機的硬件信息不相同,即使用戶信息被盜用,驗證模塊可保證其他計算機不能成功注冊使用軟件,從而使軟件加密的可靠性和安全性大大提高,真正實現“一機一碼”的軟件注冊。系統流程圖如圖2所示。

如圖2所示加密系統按照功能劃分模塊主要可以分為ID碼生成模塊、注冊碼生成模塊、注冊模塊和驗證模塊4個部分。基于硬件信息的軟件加密系統采用計算主機的多個硬件信息,如CPU序列號、MAC地址、主板序列號等作為注冊源,經過散列函數計算得到散列值進行簽名。軟件只有在注冊后才能使用,且獲取的硬件信息具有唯一性,經過單向函數加密可以保證用戶信息的保密性,同時方便軟件發行商使用注冊機產生唯一的注冊碼,實現“一機一碼”的注冊機制。使用非對稱密碼對注冊碼進行注冊,使攻擊者無法得到注冊碼,寫出注冊機程序,保證軟件的安全。
1)ID碼生成模塊
ID碼獲取模塊主要完成兩個功能:自動獲取計算機硬件信息,對硬件信息進行加密生成ID碼。
每臺計算機都有內存、硬盤、CPU、顯示器等配件,這些信息有很多都是相同的,不具唯一性,對軟件加密沒有意義。網卡MAC地址、CPU ID、硬盤的出廠序列號、顯卡型號以及BIOS序列號等信息,對于不同計算機是不相同的。可以選取這些信息并將它們組合起來,這樣信息相同的幾率就會很小,基本可以保證用戶身份的唯一性,從而有效地防止軟件的非法使用,保護軟件發行商的合法權益。
因此在選取硬件信息對軟件進行加密的過程中,可以選取計算機CPU ID、主板序列號、MAC地址等多個硬件信息,構成計算機特征值。由于這些信息本身就具有唯一性,通過多個硬件信息組合得到的計算機特征值可以說完全具備了唯一性的要求,滿足“一機一碼”條件。為避免攻擊者對其他計算機硬件信息的修改,需要將自動獲取的計算機硬件信息用特定加密算法進行加密,以保證用戶信息的安全,具有單向性的Hash函數是最合適的選擇。
Hash函數也稱為散列函數,是一種單向密碼體制,是一個從明文到密文的不可逆映射,只有加密過程,不能解密。同時,Hash函數可以將任意長度的輸入經過變換后得到固定長度的輸出。MD5算法就是Hash函數的一種,在這里選取MD5算法[4]對硬件信息進行加密,得到ID碼。
MD5算法可簡單描述為:將任意長度的字節串(即需要產生摘要的硬件信息)映射為一個128位的信息摘要,即使可看到源程序和加密算法描述,也無法將一個MD5的值反推導回原來的字符串。算法實現如圖3所示。

圖3 MD5算法流程圖
MD5算法是一種單向加密算法,數據只能加密,不能被解密,也就是說攻擊者不能由消息摘要推得用戶計算機信息,保證了用戶信息的安全。另外任意一段數據,經過加密后,其結果永遠是相同的;任意兩段數據加密之后的密文是不相同的,可以保證每個用戶信息經MD5算法加密后生成各不相同的ID碼。用戶需要將該模塊生成的ID碼發送給軟件發行商。
2)注冊碼生成模塊
軟件發行商提供唯一的軟件注冊碼給用戶進行安裝與注冊,安裝時注冊信息將寫入注冊表,用以驗證每次運行時的信息是否存在與正確,在使用注冊碼進行軟件授權機制中,注冊碼是整套軟件保護方案中最重要的部分。
注冊碼是根據用戶信息生成的,具有唯一性。軟件發行商在給用戶分發注冊碼時通過某種算法f將用戶信息換算成注冊碼(用SN表示),注冊碼生成過程可表示為

注冊碼生成過程與注冊碼合法性驗證環節有著密切的聯系,常見的軟件合法性驗證計算方式可表示為

軟件破解的難易程度與換算關系設計有直接關系,因為驗證過程是在用戶計算機上運行的,攻擊者可以使用工具軟件對其進行分析,可能造成合法注冊碼泄露,并在網上傳播,任何復制了這個軟件的人都可以使用這個注冊碼進行軟件認證,造成軟件盜版。破解者也可能會通過進一步分析換算方法g,寫出非法注冊機,這樣軟件就能被隨意復制并使用,并被非法的通過認證,同樣會造成軟件保護的失效,嚴重損害了軟件發行商的利益。針對這些情況,本文采用“一機一碼”制,即一臺計算機對應一個注冊碼,那么即使此注冊碼被破解,也不能在其他計算機上使用。另外,在合法性驗證環節采用注冊碼算法的逆算法,即

軟件合法性驗證過程是在用戶計算機上進行,容易被攻擊者破解,如果采用非對稱加密算法,那么就可以進一步限制盜版的可能。RSA算法[5]作為非對稱加密算法的一種,是第一個既能用于加密又能用于數字簽名的算法,加解密原理簡單,易于理解和操作,具有良好的安全性,目前已成為公鑰密碼的國際標準。在本系統中選用RSA算法進行加密生成軟件注冊碼。算法步驟如下:
步驟一,RSA加解密算法的初始化。
(1)隨意選擇兩個互異的大素數p和q,要求p不等于q;
(2)計算n=p×q,根據歐拉公式得φ(n)=(p -1)(q -1);
(3)選擇一個整數e,滿足e與φ(n)互素,且e小于φ(n);
(4)計算整數d,d=e-1mod(p-1)(q-1),且d〉;
(5)為安全起見將p和q的記錄銷毀,返回n,d。
步驟二,RSA加解密變換。
將明文劃分成塊,使得每個明文報文長度滿足m〈n,然后對每個數據塊m進行加密和解密變換。
(1)加密變換,對于待加密消息m,其對應的密文為c=E(m)=memod n;
(2)解密變換,m=D(c)=cdmod n。
注冊碼生成模塊是一個獨立于應用軟件的模塊,不隨應用軟件一起發布,軟件發行商獨立擁有,用于產生用戶注冊密碼。使用非對稱RSA算法對用戶ID碼進行加密獲得注冊碼,攻擊者即使得到了公鑰,也無法推算得到私鑰,不可能自行根據消息摘要計算得到注冊碼。保證了攻擊者不能寫出注冊機程序。
3)注冊模塊
注冊模塊的主要功能是用戶端在接收到軟件發行商發回的注冊碼后自動完成注冊并將其寫入注冊表,供以后每次運行軟件時驗證模塊使用。
4)驗證模塊
注冊碼驗證實際上就是驗證簽名的過程,判斷用戶是不是已注冊為合法用戶。驗證模塊主要完成在用戶每次運行軟件時,用軟件開發商提供的公鑰,也就是RSA算法的公鑰還原出計算機的ID碼,將還原得到的ID碼與原始用戶ID碼進行比較和簽名驗證,只有一致的情況下軟件才能正常運行,否則無法注冊。
本文加密系統設計主要采用了數據加密技術和注冊表操作技術,運用多重加密算法對用戶信息進行保護。用戶注冊軟件時,軟件自動采集計算機的硬件信息(如硬盤序列號、網卡MAC地址、CPU ID等)作為信息源,經過特定算法得到擾亂后的ID碼,發送給軟件發行商,軟件發行商利用RSA非對稱加密算法生成注冊碼對用戶授權,用戶利用注冊碼進行認證注冊。軟件安裝時將注冊信息寫入注冊表,用于以后使用軟件時檢查注冊表中的信息是否正確,若正確則編碼器正常編碼,否則編碼器對視頻進行不正常編碼,終端解碼得到的節目流將會非常不清晰,用戶不能得到正常信息,這將迫使用戶重新注冊編碼器軟件。
為了驗證有效性,將該加密系統的方案成功用于編碼器軟件進行測試。圖4是采用加密算法獲得的用戶計算機的ID碼,可以看出圖中的碼字為不規則的亂碼。圖5是采用非對稱RSA加密算法獲得的注冊碼,由此可知算法有效可行。

圖4 用戶計算機ID碼

圖5 用戶獲得注冊碼
通過測試分析,得出基于硬件信息的編碼器軟件加密方法具有以下優點:
1)與多數軟件注冊方式不同,本設計采用“一機一碼”注冊,保護了軟件發行商的合法權益;
2)直接選取計算機硬件信息作為注冊依據,不需要添加外置軟盤、硬盤等設備;
3)在沒有正確注冊的情況下,允許編碼器工作;
4)采用特別技術,攻擊者很難找到產生注冊碼的規律,不會出現非法注冊碼;
5)純軟件實現,可實現批量處理,方便使用,價格低。
本文采用基于具有唯一性的多項硬件信息,用數字簽名、散列、密鑰交換等多個可靠的密碼學算法,考慮了“一機一碼”防止非法注冊,合理選擇了非對稱算法來防止非法注冊碼的生成,對數字電視編碼器軟件進行加密保護。從測試結果可以看出,算法加密強度很高,破解強度也很高,很好地完成了編碼器軟件加密要求,可以較好地保護編碼器軟件發行商的合法權益。
[1]朱耀光.數字電視條件接收前端系統的研究與實現[D].武漢:武漢理工大學,2006.
[2]王晟宇.關于計算機軟件保護方法的探討[J].計算機安全,2008(10):82-85.
[3]江兵.一種軟件加密的方案與設計[J].信息技術,2010(12):185-190.
[4]張興紅,甄彤,包暉.基于DES和MD5算法的安全注冊系統[J].計算機與數字工程,2010,38(5):96-98.
[5]王印明,李陽.一種基于DES,RSA的隨機加密算法[J].計算機技術與發展,2012,22(4):235-237.