專利名稱:基于安全芯片的軟件保護方法和系統的制作方法
技術領域:
本發明涉及信息安全和可信計算技術領域,具體地,本發明涉及一種可防止破解的軟件保護方法及相應的保護系統。
背景技術:
軟件保護技術一直是信息安全領域研究的一個熱點。在當今的網絡時代,軟件一旦以某種方式被破解或被非法拷貝就會給軟件的著作權人帶來巨大的損失。因此,已經開發出了各種保護方法,其中比較常見的軟件保護方法有以下幾種(1)在軟件安裝過程中輸入口令或密鑰的方法,其中,如果輸入的口令不正確,則終止安裝過程或只能使用有限的功能。但是,一旦口令被竊取或被擁有者公開,就可以任意安裝該軟件。
(2)綁定計算機的硬件(硬盤或網卡)或操作系統配置信息的方法,其存在的問題是,當硬件或操作系統發生改變時需要重新綁定軟件,并且通過更換硬件的方式即可更換軟件安裝的位置。
(3)通過硬件在線保護的方法,即通過檢測某個硬件開關(如USB卡等)是否在線來決定軟件能否運行。這種方法的問題是,硬件開關類型彼此不兼容,所以多個軟件需要多個硬件保護,造成使用不便而且容易仿制。該方法的另一個問題是軟件中包含的檢測硬件在線的代碼,可以通過反編譯的方法跳過,造成失效,如圖1所示。
(4)通過加密卡保護的方法,即軟件只有通過加密卡的解密才能執行。這種方法的問題是解密后的軟件完整地存放在內存中,破解者可以用拷貝內存的方法將軟件復制出去,從而破解軟件。
綜上所述,現有的方法都存在一些缺陷,尤其在面對反編譯和內存拷貝技術時,從理論上講,通過上述方法保護的軟件都是可以被破解的。
發明內容
鑒于上述的各種問題,完成了本發明。本發明的目的是提出了一種基于安全芯片的軟件保護技術,應用這種保護技術可以防止軟件被破解和非法使用,而且對反編譯和內存拷貝技術之類的破解技術也行之有效。
在本發明的一方面,提出了一種基于安全芯片的軟件保護方法,包括步驟從每個都包括多個單元的至少一個軟件中確定要保護的單元;將要保護的單元編譯成安全芯片能夠執行的目標文件;用與各個軟件相對應的對稱密鑰對目標文件進行加密,產生密文單元;針對目標文件建立調用安全芯片的函數,其中把密文單元作為函數的參數;用函數替換各個軟件中要保護的單元;以及將密文單元附在相應的軟件上。
根據本發明的一個實施例,該方法還包括步驟從認證機構獲得各個軟件的軟件使用方的數字證書;從數字證書中獲得公鑰;產生包含對稱密鑰、軟件序列號和版本號的使用許可證;用公鑰對各個使用許可證進行加密。
根據本發明的一個實施例,該方法進一步包括步驟通過函數調用來在安裝在主機上的安全芯片內執行與要保護的單元相對應的目標文件。
根據本發明的一個實施例,由主機的其它部分執行與各個軟件中除要保護的單元之外的其它單元相對應的目標文件。
根據本發明的一個實施例,在執行與要保護的單元相對應的目標文件之前,還包括步驟隨機產生與各個軟件相對應的RSA非對稱密鑰對并用非對稱密鑰對的公鑰向認證機構申請相應的數字證書;在獲得數字證書的情況下利用非對稱密鑰對的私鑰對各個軟件的加密的使用許可證進行解密,以得到各個軟件的軟件制造方的對稱密鑰;用對稱密鑰解密作為函數的參數的密文單元,以獲得目標文件;以及在安全芯片中執行目標文件,并將執行結果返回給主機。
根據本發明的一個實施例,要保護的單元包括功能單元和數據單元中的至少之一。
根據本發明的一個實施例,對稱密鑰是隨機產生的。
在本發明的另一方面,提出了一種基于安全芯片的軟件保護系統,包括確定部分,用于從每個都包括多個單元的至少一個軟件中確定要保護的單元;編譯部分,用于將要保護的單元編譯成安全芯片能夠執行的目標文件;加密引擎,用與各個軟件相對應的對稱密鑰對目標文件進行加密以產生密文單元,針對目標文件建立調用安全芯片的函數,其中把密文單元作為函數的參數,以及用函數替換軟件中要保護的單元,并將密文單元附在相應的軟件上。
根據本發明的一個實施例,該軟件保護系統還包括對稱密鑰產生部分,用于隨機產生與各個軟件相對應的對稱密鑰;非對稱加密引擎,用于從認證機構獲得各個軟件的軟件使用方的數字證書,以從數字證書中獲得公鑰,產生包含對稱密鑰、軟件序列號和版本號的各個軟件的使用許可證,以及用公鑰對各個軟件的使用許可證進行加密。
根據本發明的一個實施例,安全芯片包括密鑰產生部分,用于隨機產生與各個軟件相對應的RSA非對稱密鑰對并用非對稱密鑰對的公鑰向認證機構申請相應的數字證書;RSA算法引擎,用于在密鑰產生部分獲得數字證書的情況下利用非對稱密鑰對的私鑰對各個軟件的加密的使用許可證進行解密,以得到軟件制造方的對稱密鑰;對稱算法引擎,用于用對稱密鑰對通過函數調用而得到的密文單元進行解密,以得到目標文件;執行引擎,用于執行目標文件并將執行結果返回到主機。
根據本發明的一個實施例,安全芯片還包括存儲部分,用于存儲至少密文單元和目標文件。
根據本發明的一個實施例,由主機上除安全芯片之外的其它部分執行與各個軟件中除要保護的單元之外的其它單元相對應的目標文件。
根據本發明的一個實施例,要保護的單元包括功能單元和數據單元中的至少之一。
利用本發明的上述配置,可以徹底實現軟件和指定的目標主機間的綁定關系。因為安全芯片綁定在主機上,而密鑰又綁定在安全芯片上,所以即使將軟件非法拷貝到其它的主機上,也會由于沒有匹配的私鑰而導致加密的部分無法解密,即軟件無法執行。
此外,利用本發明的上述配置,可以防止通過反編譯的方法來破解。因為軟件的重要功能和數據都是經過加密的,并且解密私鑰的保存和使用是在安全芯片內部進行的,破解者無法得到,從而破解者無法通過反編譯得到軟件的全部功能。
此外,利用本發明的上述配置,可以防止通過拷貝內存的方法來破解。因為軟件的重要的功能和數據都在安全芯片內部執行,所以內存中沒有存儲完整的軟件并且破解者無法訪問安全芯片內部,所以破解者無法通過拷貝內存的方法得到軟件的全部功能。
此外,本發明可以使用一個安全芯片對多種軟件的保護。因為安全芯片可以有多對非對稱密鑰,所以每對非對稱密鑰都可以保護一個和多個軟件。
圖1示出了現有的通過反編譯來破解軟件的示意圖;圖2示出了用來說明根據本發明實施例的軟件保護系統的示意圖;圖3示出了根據本發明實施例的在軟件制造方使用的軟件加密裝置的框圖;圖4示出了在根據本發明實施例的在軟件使用方的主機上安裝的安全芯片的結構框圖;圖5是用來說明在軟件制造方對軟件進行加密的流程圖;圖6是用來說明在軟件使用方執行已加密的軟件的流程圖。
具體實施例方式
下面對照附圖詳細描述本發明的具體實施例,其中出于清楚說明的目的,省略了本領域的普通技術人員公知的內容的描述。
軟件加密方的構成圖2示出了用來說明根據本發明實施例的軟件保護系統的示意圖,其中示出了軟件制造方的軟件加密裝置的部分結構和軟件使用方的目標主機400的部分結構。此外,圖3示出了軟件制造方的軟件加密裝置100的結構框圖。
如圖3所示的軟件加密裝置100包括確定部分130、編譯部分140、對稱加密引擎150、對稱密鑰產生部分110和非對稱加密引擎120。
如圖2所示,軟件制造方通過下載或者其它方式從例如第三方認證機構的證書機構300得到軟件使用方的數字證書C,其中從數字證書C中可以獲得軟件使用方的公鑰pubAKey。
然后,確定部分130從存儲器(未示出)讀入包括功能單元FU1、FU2、FU3、FU4和數據單元DU1、DU2的要保護的原始軟件,并確定其中需要保護的功能單元FU2和FU3和需要保護的數據單元DU1和DU2。
編譯部分140將確定的功能單元FU2、FU3和數據單元DU1、DU2交叉編譯成軟件使用方主機上的安全芯片能夠執行的目標文件FU2*、FU3*、DU1*和DU2*。
對稱密鑰產生部分110例如使用3DES對稱算法之類的算法產生對稱密鑰SKey,并通過非對稱加密部分120將其傳送給對稱加密引擎150。然后對稱加密引擎150用該密鑰SKey對目標文件FU2*、FU3*、DU1*和DU2*進行加密,產生密文單元FU2**、FU3**、DU1**和DU2**。
此外,對稱加密引擎150建立調用軟件使用方主機上安全芯片的函數Transmit,把密文單元FU2**、FU3**、DU1**和DU2**作為函數Transmit的參數,然后替換原始軟件的FU2、FU3、DU1和DU2單元,如圖2所示。然后,將密文單元FU2**、FU3**、DU1**和DU2**附在原始軟件的后面,作為軟件的一部分。
在非對稱加密引擎120中,產生包含對稱密鑰SKey、軟件序列號和版本號的軟件使用許可證L,并利用使用方的公鑰pubAKey對軟件使用許可證L加密。
軟件使用方的構成
圖4示出了在根據本發明實施例的在軟件使用方的主機上安裝的安全芯片的結構框圖。下面結合圖4和圖2來描述如何在軟件執行方的主機上執行該保護的軟件。
如圖2和4所示,安全芯片200設置在軟件使用方的目標主機400上,并且包括密鑰產生部分210、執行引擎220、存儲部分230、接口部分240、RSA算法引擎250和對稱算法引擎260,等等。
安全芯片200內部的密鑰產生部分210隨機產生一RSA非對稱密鑰對AKey,然后通過接口部分240用非對稱密鑰對AKey的公鑰pubAKey向第三方認證機構申請數字證書。第三方認證機構產生pubAKey的數字證書C。
軟件制造方將加密的軟件分發給軟件使用方,軟件使用方在其主機上安裝軟件,并獲得加密的軟件使用許可證L。
然后,將加密的軟件使用許可證L傳送到安全芯片200內,并和非對稱密鑰對Akey的私鑰priAKey一起送入RSA算法引擎250進行解密,得到軟件制造方的對稱密鑰SKey。
如圖2所示,在軟件使用方的主機400上運行單元FU1和FU4。
當運行到受保護的單元時,通過函數調用(CALL Transmit),依次將密文單元FU2**、FU3**、DU1**和DU2**作為參數送入安全芯片200內,并存儲在存儲部分230中。
然后,將對稱密鑰SKey和密文單元FU2**、FU3**、DU1**和DU2**依次送入例如使用3DES算法的對稱算法引擎260,進行解密,得到可運行的目標文件FU2*、FU3*、DU1*和DU2*,并將目標文件FU2*、FU3*、DU1*和DU2*保存在安全芯片200的存儲部分230中。
接下來,執行引擎220依次從存儲部分230調入并執行目標文件FU2*、FU3*、DU1*和DU2*。在執行上述的目標文件FU2*、FU3*、DU1*和DU2*之后,執行引擎220通過接口部分240依次將執行結果返回到目標主機,由目標主機繼續執行軟件的其它部分。
軟件加密過程圖5示出了用來說明在軟件制造方對軟件進行加密的流程圖。
如圖5所示,在步驟S501,軟件制造方通過下載或者其它方式從例如第三方認證機構的證書機構300得到軟件使用方的數字證書C,并判斷下載是否成功。如果下載成功,在步驟S502從數字證書C中獲得軟件使用方的公鑰pubAKey。如果沒有成功下載數字證書C,則在步驟S510進行錯誤處理。
然后,在步驟S503,從存儲器(未示出)讀入包括功能單元FU1、FU2、FU3、FU4和數據單元DU1、DU2的要保護的原始軟件,并確定其中需要保護的功能單元FU2和FU3和需要保護的數據單元DU1和DU2。
接下來,在步驟S504將確定的功能單元FU2、FU3和數據單元DU1、DU2交叉編譯成軟件使用方主機上的安全芯片能夠執行的目標文件FU2*、FU3*、DU1*和DU2*。
在步驟S505,例如使用3DES對稱算法之類的算法產生對稱密鑰SKey,并用該對稱密鑰SKey對目標文件FU2*、FU3*、DU1*和DU2*進行加密,產生密文單元FU2**、FU3**、DU1**和DU2**。
然后,在步驟S506,判斷用對稱密鑰SKey加密得到密文單元FU2**、FU3**、DU1**和DU2**是否成功。如果沒有成功,流程轉入步驟S510,進行錯誤處理。
在加密成功的情況下,在步驟S507,建立調用軟件使用方主機上安全芯片的函數Transmit,把密文單元FU2**、FU3**、DU1**和DU2**作為函數Transmit的參數,然后替換原始軟件的FU2、FU3、DU1和DU2單元。然后,將密文單元FU2**、FU3**、DU1**和DU2**附在原始軟件的后面,作為軟件的一部分。
在步驟S508,產生包含對稱密鑰SKey、軟件序列號和版本號的軟件使用許可證L。然后,在步驟S509利用使用方的公鑰pubAKey對軟件使用許可證L加密,并判斷加密是否成功,如果不成功,則進行步驟S510,進行錯誤處理,如果成功,則結束對軟件進行加密的過程。
軟件執行過程圖6是用來說明在軟件使用方執行已加密的軟件的流程圖。
如圖6所示,在步驟S601,密鑰產生部分210隨機產生一RSA非對稱密鑰對AKey,然后在步驟S602通過接口部分240用非對稱密鑰AKey的公鑰pubAKey向第三方認證機構申請數字證書,并判斷申請是否成功。如果不成功,則在步驟S613轉入錯誤處理。如果第三方認證機構產生pubAKey的數字證書C并且軟件制造方將加密的軟件分發給軟件使用方,則在步驟S603在軟件使用方的主機上安裝軟件,并獲得加密的軟件使用許可證L。
在步驟S604,將加密的軟件使用許可證L傳送到安全芯片200內,并和非對稱密鑰對Akey的私鑰priAKey一起送入RSA算法引擎250進行解密,并判斷解密是否成功。如果解密成功,則在步驟S605得到軟件制造方的對稱密鑰SKey。
然后,如圖2和6所示,在步驟S606,在軟件使用方的主機400上運行單元FU1和FU4。
當運行到受保護的單元時,例如密文單元FU2**,在步驟S607通過函數調用(CALL Transmit),將密文單元FU2**作為參數送入安全芯片200內,并存儲在存儲部分230中。
然后,在步驟S608,將對稱密鑰SKey和密文單元FU2**送入例如使用3DES算法的對稱算法引擎260,進行解密,得到可運行的目標文件FU2*,并在步驟S609將目標文件FU2*保存在安全芯片200的存儲部分230中。
接下來,在步驟S610,執行引擎220依次從存儲部分230調入并執行目標文件FU2*。在執行上述的目標文件FU2*之后,在步驟S611執行引擎220通過接口部分240依次將執行結果返回到目標主機。
在步驟S612,如果下一單元仍舊是受保護的單元,例如FU3*,則流程轉到步驟S607,針對密文單元FU3*進行如上所述相同的處理。在上述的密文單元執行結束之后,將執行結果返回目標主機,由目標主機繼續執行軟件的其它部分。
以上雖然以單個軟件為例說明了本發明的實施例,但是,本發明同樣可以應用于多個軟件,例如軟件制造方可以產生多對對稱密鑰來分別對多個軟件進行上述的加密過程,以及在軟件使用方,可以在一個安全芯片上用多個非對稱密鑰實現對多個軟件的保護。
最后所應說明的是以上實施例僅用于說明而非限制本發明的技術方案,盡管參照上述實施例對本發明進行了詳細說明,本領域的普通技術人員應當理解依然可以對本發明進行修改或者等同替換,而不脫離本發明的精神和范圍的任何修改或局部替換,其均應涵蓋在本發明的權利要求范圍當中。
權利要求
1.一種基于安全芯片的軟件保護方法,包括步驟從每個都包括多個單元的至少一個軟件中確定要保護的單元;將所述要保護的單元編譯成所述安全芯片能夠執行的目標文件;用與各個軟件相對應的對稱密鑰對所述目標文件進行加密,產生密文單元;針對所述目標文件建立調用所述安全芯片的函數,其中把所述密文單元作為所述函數的參數;用所述函數替換各個軟件中所述要保護的單元;以及將所述密文單元附在相應的軟件上。
2.如權利要求1所述的軟件保護方法,還包括步驟從認證機構獲得各個軟件的軟件使用方的數字證書;從所述數字證書中獲得公鑰;產生包含所述對稱密鑰、軟件序列號和版本號的使用許可證;用所述公鑰對各個使用許可證進行加密。
3.如權利要求2所述的軟件保護方法,進一步包括步驟通過函數調用來在安裝在主機上的安全芯片內執行與所述要保護的單元相對應的目標文件。
4.如權利要求3所述軟件保護方法,其特征在于,由主機的其它部分執行與各個軟件中除所述要保護的單元之外的其它單元相對應的目標文件。
5.如權利要求3或4所述的軟件保護方法,其特征在于,在執行與所述要保護的單元相對應的目標文件之前,還包括步驟隨機產生與各個軟件相對應的RSA非對稱密鑰對并用非對稱密鑰對的公鑰向認證機構申請相應的數字證書;在獲得數字證書的情況下利用非對稱密鑰對的私鑰對各個軟件的加密的使用許可證進行解密,以得到各個軟件的軟件制造方的對稱密鑰;用所述對稱密鑰解密作為函數的參數的密文單元,以獲得所述目標文件;以及在所述安全芯片中執行所述目標文件,并將執行結果返回給主機。
6.如權利要求5所述的軟件保護方法,其特征在于,所述要保護的單元包括功能單元和數據單元中的至少之一。
7.如權利要求1所述的軟件保護方法,其特征在于,所述對稱密鑰是隨機產生的。
8.一種基于安全芯片的軟件保護系統,包括確定部分,用于從每個都包括多個單元的至少一個軟件中確定要保護的單元;編譯部分,用于將所述要保護的單元編譯成所述安全芯片能夠執行的目標文件;加密引擎,用與各個軟件相對應的對稱密鑰對所述目標文件進行加密以產生密文單元,針對所述目標文件建立調用所述安全芯片的函數,其中把所述密文單元作為所述函數的參數,以及用所述函數替換軟件中所述要保護的單元,并將所述密文單元附在相應的軟件上。
9.如權利要求8所述的軟件保護系統,還包括對稱密鑰產生部分,用于隨機產生所述與各個軟件相對應的對稱密鑰;非對稱加密引擎,用于從認證機構獲得各個軟件的軟件使用方的數字證書,以從所述數字證書中獲得公鑰,產生包含所述對稱密鑰、軟件序列號和版本號的各個軟件的使用許可證,以及用所述公鑰對各個軟件的使用許可證進行加密。
10.如權利要求9所述的軟件保護系統,其特征在于,所述安全芯片包括密鑰產生部分,用于隨機產生與所述各個軟件相對應的RSA非對稱密鑰對并用非對稱密鑰對的公鑰向認證機構申請相應的數字證書;RSA算法引擎,用于在密鑰產生部分獲得數字證書的情況下利用非對稱密鑰對的私鑰對各個軟件的加密的使用許可證進行解密,以得到軟件制造方的對稱密鑰;對稱算法引擎,用于用所述對稱密鑰對通過函數調用而得到的密文單元進行解密,以得到目標文件;執行引擎,用于執行所述目標文件并將執行結果返回到主機。
11.如權利要求10所述的軟件保護系統,其特征在于,所述安全芯片還包括存儲部分,用于存儲至少所述密文單元和目標文件。
12.如權利要求11所述的軟件保護系統,其特征在于,由主機上除安全芯片之外的其它部分執行與各個軟件中除所述要保護的單元之外的其它單元相對應的目標文件。
13.如權利要求11或12所述的軟件保護系統,其特征在于,所述要保護的單元包括功能單元和數據單元中的至少之一。
全文摘要
公開了一種基于安全芯片的軟件保護方法,包括步驟從每個都包括多個單元的至少一個軟件中確定要保護的單元;將所述要保護的單元編譯成所述安全芯片能夠執行的目標文件;用與各個軟件相對應的對稱密鑰對所述目標文件進行加密,產生密文單元;針對所述目標文件建立調用所述安全芯片的函數,其中把所述密文單元作為所述函數的參數;用所述函數替換各個軟件中所述要保護的單元;以及將所述密文單元附在相應的軟件上。應用本發明的上述配置,可以防止軟件被破解和非法使用,而且對反編譯和內存拷貝技術之類的破解技術也行之有效。
文檔編號G06F1/00GK1987882SQ200510134079
公開日2007年6月27日 申請日期2005年12月23日 優先權日2005年12月23日
發明者郭軼尊, 尹萍, 寧曉魁, 林洋 申請人:聯想(北京)有限公司