本發明涉及用于保護軟件項目的方法、用于使用受保護的軟件項目實施數據處理的方法以及用于實施此類方法的裝置和計算機程序。
背景技術:
眾所周知的是,常常有針對軟件項目的攻擊被發起。攻擊者可能希望獲得包含在軟件項目內的秘密信息(比如加密密鑰),其目的是濫用該秘密信息(例如通過把加密密鑰分發給其他人/系統,從而使得這些人/系統可以按照未經授權的方式使用加密密鑰)。類似地,攻擊者可能希望修改軟件項目的執行流程。舉例來說,軟件項目可能具有檢查軟件項目的用戶是否具有特定許可或訪問權利的判定點——如果用戶具有這些許可或訪問權利,則軟件項目可以準許用戶訪問特定功能或數據,否則會拒絕此類訪問。攻擊者可能希望嘗試修改軟件項目在該判定點處的執行,從而使得即使用戶不具有許可或訪問權利,軟件項目仍然準許用戶訪問該特定功能或數據。
存在許多眾所周知的軟件保護技術,這些技術可以被應用于初始軟件項目以便生成受保護的軟件項目,其目的是使得攻擊者不可能成功進行其攻擊(或者至少足夠困難)。
技術實現要素:
確保可以按照安全并且可升級的方式以及按照可以容易并且高效地實施安全性審核的方式高效地應用軟件保護技術是一項困難的挑戰。本發明的實施例旨在解決這樣的問題。
根據本發明的第一方面,提供一種保護軟件項目的方法,所述軟件項目被布置成基于一個或多個數據項目實施數據處理,所述方法包括:對所述軟件項目應用一種或多種軟件保護技術以生成受保護的軟件項目,其中所述一種或多種軟件保護技術被布置成使得所述受保護的軟件項目把所述數據處理至少部分地實施成在有限環上的一項或多項線性代數運算。
在一些實施例中,所述一項或多項線性代數運算當中的每一項是在所述有限環上的針對向量空間的相應線性代數運算,并且其中所述一項或多項線性代數運算當中的每一項對被表示成所述向量空間的一個或多個元素的相應輸入數據進行運算以產生相應輸出數據。對于所述一項或多項線性代數運算當中的至少一項,所述相應輸入數據可以至少部分地基于所述一個或多個數據項目當中的至少一個。所述有限環可以是環,并且所述向量空間于是可以是向量空間,其中n是正整數。
在一些實施例中,所述數據處理包括在有限環上的算術運算,并且所述對所述軟件項目應用所述一種或多種軟件保護技術包括使用在所述有限環上的一項或多項線性代數運算在所述受保護的軟件項目中實施所述算術運算。
在一些實施例中,所述數據處理包括在有限環上的邏輯運算,并且所述對所述軟件項目應用所述一種或多種軟件保護技術包括使用在所述有限環上的一項或多項線性代數運算在所述受保護的軟件項目中實施所述邏輯運算。
在一些實施例中,所述數據處理包括以下各項當中的至少一項:(a)至少部分地基于所述一個或多個數據項目當中的至少一個的判定;(b)安全性相關功能;(c)訪問控制功能;(d)加密功能;以及(e)權利管理功能。
在一些實施例中,所述一種或多種軟件保護技術包括以下各項當中的一項或多項:(i)白盒保護技術;(ii)節點鎖定技術;(iii)數據流模糊;以及(iv)控制流模糊。
根據本發明的第二方面,提供一種對一個或多個數據項目實施數據處理的方法,其中所述數據處理包括以下各項當中的至少一項:(a)至少部分地基于所述一個或多個數據項目當中的至少一個的判定;(b)安全性相關功能;(c)訪問控制功能;(d)加密功能;以及(e)權利管理功能;其中所述方法包括:執行受保護的軟件項目,所述受保護的軟件項目把所述數據處理至少部分地實施成在有限環上的一項或多項線性代數運算。
在一些實施例中,所述一項或多項線性代數運算當中的每一項是在所述有限環上的針對向量空間的相應線性代數運算,并且所述一項或多項線性代數運算當中的每一項對被表示成所述向量空間的一個或多個元素的相應輸入數據進行運算以產生相應輸出數據。對于所述一項或多項線性代數運算當中的至少一項,所述相應輸入數據可以至少部分地基于所述一個或多個數據項目當中的至少一個。所述有限環可以是環,并且所述向量空間可以是向量空間,其中n是正整數。
在一些實施例中,所述數據處理包括在有限環上的算術運算,并且所述受保護的軟件項目使用在所述有限環上的一項或多項線性代數運算來實施所述算術運算。
在一些實施例中,所述數據處理包括在有限環上的邏輯運算,并且所述受保護的軟件項目使用在所述有限環上的一項或多項線性代數運算來實施所述邏輯運算。
根據本發明的第三方面,提供一種被布置成實施至少一種前面提到的方法的裝置。
根據本發明的第四方面,提供一種計算機程序,其在由處理器執行時使得處理器實施至少一種前面提到的方法。所述計算機程序可以被存儲在計算機可讀介質上。
附圖說明
現在將參照附圖僅通過舉例的方式來描述本發明的實施例,其中:
圖1示意性地圖示了計算機系統的一個示例;以及
圖2示意性地圖示了根據本發明的一個實施例的系統。
具體實施方式
在后面的描述中以及在附圖中描述了本發明的特定實施例。但是將認識到,本發明不限于所描述的實施例,并且一些實施例可以不包括后面所描述的所有特征。但是將顯而易見的是,在不背離所附權利要求書中所闡述的本發明的更寬泛的精神和范圍的情況下,可以在這里做出各種修改和改變。
1—系統總覽
圖1示意性地圖示了計算機系統100的一個示例。系統100包括計算機102。計算機102包括:存儲介質104,存儲器106,處理器108,接口110,用戶輸出接口112,用戶輸入接口114,以及網絡接口116,它們全部通過一條或多條通信總線118鏈接在一起。
存儲介質104可以是任何形式的非易失性數據存儲設備,比如硬盤驅動器、磁盤、光盤、ROM等等當中的一項或多項。存儲介質104可以存儲供處理器108執行的操作系統,以使得計算機102運轉。存儲介質104還可以存儲一個或多個計算機程序(或者軟件或指令或代碼)。
存儲器106可以是適合于存儲數據和/或計算機程序(或者軟件或指令或代碼)的任何隨機存取存儲器(存儲單元或易失性存儲介質)。
處理器108可以是適合于執行一個或多個計算機程序(比如存儲在存儲介質104上和/或存儲器106中的計算機程序)的任何數據處理單元,其中一些計算機程序可以是根據本發明的實施例的計算機程序,或者是在由處理器108執行時使得處理器108實施根據本發明的一個實施例的方法并且把系統100配置成根據本發明的一個實施例的系統的計算機程序。處理器108可以包括單個數據處理單元,或者并行地或彼此協作地操作的多個數據處理單元。處理器108在實施針對本發明的實施例的數據處理操作時可以向存儲介質104和/或存儲器106存儲數據和/或從其讀取數據。
接口110可以是用于提供去到處于計算機102外部或者可以從計算機102移除的設備122的接口的任何單元。設備122可以是數據存儲設備,例如光盤、磁盤、固態存儲設備等等當中的一項或多項。設備122可以具有處理能力——例如所述設備可以是智能卡。接口110因此可以根據其接收自處理器108的一條或多條命令從設備122訪問數據、或者向設備122提供數據或者與設備122接口。
用戶輸入接口114被布置成接收來自系統100的用戶或操作員的輸入。用戶可以通過連接到用戶輸入接口114或者與之通信的系統100的一個或多個輸入設備(比如鼠標(或其他指示設備)126和/或鍵盤124)來提供該輸入。但是將認識到,用戶可以通過一個或多個附加的或替換的輸入設備(比如觸摸屏)來向計算機102提供輸入。計算機102可以把通過用戶輸入接口114接收自輸入設備的輸入存儲在存儲器106中以供處理器108隨后訪問和處理,或者可以將其直接傳遞到處理器108,從而使得處理器108可以相應地對用戶輸入做出響應。
用戶輸出接口112被布置成向系統100的用戶或操作員提供圖形/視覺和/或音頻輸出。因此,處理器108可以被布置成指令用戶輸出接口112形成表示所期望的圖形輸出的圖像/視頻信號,并且將該信號提供到與用戶輸出接口112連接的系統100的監視器(或者屏幕或顯示單元)120。附加地或替換地,處理器108可以被布置成指令用戶輸出接口112形成表示所期望的音頻輸出的音頻信號,并且將該信號提供到與用戶輸出接口112連接的系統100的一個或多個揚聲器121。
最后,網絡接口116為計算機102提供從一個或多個數據通信網絡下載數據和/或上傳數據到一個或多個數據通信網絡的功能。
將認識到,在圖1中圖示并且在前面描述的系統100的架構僅僅是示例性的,并且在本發明的實施例中可以使用具有不同架構(例如具有少于圖1中所示出的組件或者具有圖1中所示出的之外的附加和/或替換組件)的其他計算機系統100。作為示例,計算機系統100可以包括以下各項當中的一項或多項:個人計算機;服務器計算機;移動電話;平板設備;膝上型計算機;電視機;機頂盒;游戲機;其他移動設備或消費電子設備;等等。
圖2示意性地圖示了根據本發明的一個實施例的系統200。系統200包括:軟件生成系統210;軟件保護系統250;用戶系統280;以及網絡290。
軟件生成系統210包括(或者執行或使用)生成初始軟件項目220的軟件生成工具212。軟件生成工具212例如可以是軟件生成系統210的處理器所執行的軟件應用。軟件生成系統210可以被布置成自主地生成初始軟件項目220;附加地或替換地,軟件生成系統210可以被布置成在一個或多個軟件開發人員的控制下生成初始軟件項目220,所述軟件開發人員至少部分地編寫形成初始軟件項目220的部分的軟件代碼。用于生成或開發軟件項目的工具是非常眾所周知的,因此這里將不更詳細地描述。
初始軟件項目220可以包括源代碼、對象代碼、可執行代碼和二進制代碼當中的一項或多項。初始軟件項目220可以用一種或多種編程語言來編程或編寫,所述編程語言可以包括編譯編程語言和/或解譯或腳本編程語言。初始軟件項目220可以包括一個或多個模塊或軟件組件或計算機程序,其可以被呈現或存儲在一個或多個文件內。實際上,初始軟件項目220可以是整個軟件應用、軟件庫、或者一個或多個軟件函數或過程的整體或一部分或者介于其間的任何情況(正如本領域技術人員將認識到的那樣)。
在由處理器執行時,初始軟件項目220被布置成基于一個或多個數據項目來實施(或者使得處理器實施)數據處理。每一個數據項目可以分別是任何類型的數據,比如音頻數據、視頻數據、多媒體數據、文本數據、財務數據、一個或多個加密密鑰、數字權利管理數據、條件訪問數據等等。所述數據處理可以包括以下各項當中的一項或多項:(a)至少部分地基于所述一個或多個數據項目當中的至少一個的判定;(b)安全性相關功能;(c)訪問控制功能;(d)加密功能;以及(e)權利管理功能。但是將認識到,數據處理可以包括一種或多種其他類型的功能或操作作為前面的示例的附加或替換。作為一個示例,數據處理可以涉及提供對于作為已加密內容接收和/或存儲的內容(比如音頻和/或視頻數據)的用戶訪問,其中只有在用戶具有適當的訪問許可/權利的情況下才為用戶提供對于內容的訪問。因此,所述一個或多個數據項目可以包括:已加密內容;關于用戶和/或用戶系統280的細節或用戶和/或用戶系統280的標識;規定一項或多項許可和/或權利的數據;以及一個或多個加密密鑰(其可以作為初始軟件項目220的部分而被存儲)。因此,希望保護初始軟件項目220,以使得攻擊者無法按照未經授權的方式使用初始軟件項目220,未經授權方式是指即使攻擊者未被授權訪問內容也能夠通過該方式獲得對于內容的訪問;也就是說防止攻擊者繞過由初始軟件項目220提供的條件訪問和/或數字權利管理功能(例如通過確定一個或多個解密密鑰,或者規避初始軟件項目220中的涉及是否應當為用戶提供對于內容的訪問的判定點或分支點)。將認識到,當然存在將希望為之提供針對攻擊者的保護(出于類似的或者可能的其他原因)的初始軟件項目220所能實施的其他功能和/或初始軟件項目220所使用的其他信息。因此,如圖2中所示,初始軟件項目220被提供(或者傳輸或傳送)到軟件保護系統250。
軟件保護系統250包括(或者執行或使用)軟件保護工具252。軟件保護工具252例如可以是軟件保護系統250的處理器所執行的軟件應用。軟件保護工具252被布置成接收初始軟件項目220作為輸入。軟件保護工具252基于所接收到的初始軟件項目220生成受保護的軟件項目260。軟件保護工具252生成受保護的軟件項目260的方法將在后面描述。
軟件保護系統250可以包括軟件數據庫254。軟件數據庫254包括可以由軟件保護工具252在生成受保護的軟件項目260時使用的軟件的一個或多個部分——后面將對此進行更加詳細的描述。
軟件生成系統210和軟件保護系統250可以由不同的實體運行或操作。因此,如圖2中所示,軟件保護系統250可以向軟件生成系統210輸出受保護的軟件項目260。在該模型的情況下,軟件保護系統250向軟件生成系統210提供保護服務。替換地,軟件生成系統210和軟件保護系統250可以由相同的實體運行或操作——實際上,軟件生成系統210和軟件保護系統250可以形成單個系統的部分(在圖2中通過虛線270圖示),該系統使用軟件生成工具212生成初始軟件項目220,并且使用軟件保護工具252通過生成受保護的軟件項目260來保護該初始軟件項目220。
因此,軟件生成系統210和/或軟件保護系統250可以通過網絡290向用戶系統280輸出(或者提供或傳送)受保護的軟件項目260。但是將認識到,可以由未在圖2中示出的不同實體來實施受保護的軟件項目260的分發。
還將認識到,在受保護的軟件項目260已經由軟件保護系統250生成之后并且在分發到用戶系統280之前,受保護的軟件項目260可以經歷各種附加的處理。因此將認識到,在后面的描述中,對受保護的軟件項目260的分發或使用的提及包括通過對受保護的軟件項目260應用附加的處理所得到的軟件片段的分發或使用。舉例來說,受保護的軟件項目260可能需要被編譯和/或與其他軟件項目鏈接(例如如果受保護的軟件項目260將要形成將被分發到用戶系統280的更大軟件應用的部分的話)。然而將認識到,可以不需要這樣的附加處理(例如如果受保護的軟件項目260是準備好分發的最終的JavaScript片段的話)。
網絡290可以是適合于向用戶系統280傳送或傳輸受保護的軟件項目260的任何種類的數據通信網絡。因此,網絡290可以包括以下各項當中的一項或多項:局域網,廣域網,城域網,因特網,無線通信網絡,有線或電纜通信網絡,衛星通信網絡,電話網絡等等。軟件生成系統210和/或軟件保護系統250可以被布置成通過網絡290經由任何適當的數據通信協議與用戶系統280進行通信。實際上,可以通過物理介質(比如存儲在一個或多個CD或DVD上)將受保護的軟件項目260提供到用戶系統280,因此網絡290于是可以包括用于通過物理方式把物理介質遞送到用戶系統280的遞送系統。
用戶系統280被布置成使用受保護的軟件項目260,例如通過在用戶系統280的一個或多個處理器上執行受保護的軟件項目280。
用戶系統280可以是適合于執行受保護的軟件項目280的任何系統。因此,用戶系統280可以是以下各項當中的一項或多項:個人計算機,膝上型計算機,筆記本計算機,平板計算機,移動電話,機頂盒,電視,服務器,游戲機等等。軟件保護系統250和軟件生成系統210例如可以包括一臺或多臺個人計算機和/或服務器計算機。因此,用戶系統280、軟件保護系統250和軟件生成系統210當中的每一個可以包括前面參照圖1描述的一個或多個相應的系統100。
將認識到,雖然圖2把系統200圖示成包括單個用戶設備280、單個軟件生成系統210和單個軟件保護系統250,但是系統200可以包括多個用戶設備280和/或多個軟件生成系統210和/或多個軟件保護系統250。
2—軟件保護技術
正如前面所提到的那樣,軟件保護工具252的目的是保護初始軟件項目220的功能或數據處理,和/或保護由初始軟件項目220使用或處理的數據。具體來說,受保護的軟件項目260將提供與初始軟件項目220相同的功能或數據處理——但是該功能或數據處理以一種方式被實施在受保護的軟件項目260中使得用戶系統280的操作員無法按照非預期的或者未經授權的方式從受保護的軟件項目260訪問或使用該功能或數據處理(然而,如果為用戶系統280提供了初始軟件項目220,則用戶系統280的操作員可能能夠按照非預期的或者未經授權的方式訪問或使用所述功能或數據處理)。類似地,受保護的軟件項目260可以按照受保護的或者模糊化的方式存儲秘密信息(比如加密密鑰),從而使得攻擊者更難(如果不是不可能的話)推斷出或訪問該秘密信息(然而,如果為用戶系統280提供了初始軟件項目220,則用戶系統280的操作員可能能夠從初始軟件項目220推斷出或訪問該秘密信息)。
例如:
-初始軟件項目220可以包括至少部分地基于將由初始軟件項目220處理的一個或多個數據項目當中的至少一個的判定(或者判定塊或分支點)。如果初始軟件項目220被提供到用戶系統280,則攻擊者可能能夠強制初始軟件項目220執行,從而使得在處理判定之后的執行路徑被遵循,即使該執行路徑原本不應當被遵循。舉例來說,所述判定可以包括測試程序變量B是真(TRUE)還是假(FALSE),并且初始軟件項目220可以被布置成使得如果判定識別出B為真,則執行路徑PT被遵循/執行,而如果判定識別出B為假,則執行路徑PF被遵循/執行。在這種情況下,攻擊者可以(例如通過使用調試器)在判定識別出B為真的情況下強制初始軟件項目220遵循路徑PF,和/或在判定識別出B為假的情況下強制初始軟件項目220遵循路徑PT。因此,在一些實施例中,軟件保護工具250旨在通過在生成受保護的軟件項目260時對初始軟件項目220內的判定應用一種或多種軟件保護技術來防止攻擊者這樣做(或者至少使其更加困難)。
-初始軟件項目220可以包括以下各項當中的一項或多項:安全性相關功能;訪問控制功能;加密功能;以及權利管理功能。這樣的功能常常涉及使用秘密數據,比如一個或多個加密密鑰。所述處理可以涉及使用一個或多個加密密鑰和/或對一個或多個加密密鑰進行操作或者利用其進行操作。如果攻擊者能夠識別或確定秘密數據,則會發生安全漏洞,并且對于受到秘密數據保護的數據(比如音頻和/或視頻內容)的控制或管理可能會被規避掉。因此,在一些實施例中,軟件保護工具250旨在通過在生成受保護的軟件項目260時對初始軟件項目220內的此類功能應用一種或多種軟件保護技術來防止攻擊者識別或確定一項或多項秘密數據(或者至少使其更加困難)。
“白盒(white-box)”環境是用于軟件項目的執行環境,其中假設軟件項目的攻擊者對于軟件項目的正被操作的數據(包括中間數值)、存儲器內容以及執行/過程流程具有完全的訪問權限和可見性。此外,在白盒環境中,假設攻擊者能夠例如通過使用調試器修改軟件項目的正被操作的數據、存儲器內容以及執行/過程流程——這樣,攻擊者可以對軟件項目的操作進行實驗并且嘗試操縱軟件項目的操作,其目的是規避初始意圖的功能和/或識別秘密信息和/或出于其他目的。實際上,人們甚至可以假設攻擊者知曉正由軟件項目實施的底層算法。但是軟件項目可能需要使用秘密信息(例如一個或多個加密密鑰),其中該信息需要對于攻擊者保持隱藏。類似地,將會希望防止攻擊者修改軟件項目的執行/控制流,例如防止攻擊者強制軟件項目在判定塊之后采取并非合法執行路徑的一條執行路徑。有許多技術(其在這里被稱作“白盒模糊技術”)用于把初始軟件項目220變換成受保護的軟件項目260,從而使得受保護的軟件項目260抵抗白盒攻擊,也就是說使得受保護的軟件項目260在白盒環境中執行時抵抗攻擊者的攻擊(比如前面所提到的攻擊)。這樣的白盒模糊技術的示例可以在如下文獻中找到:“White-Box Cryptography and an AES Implementation” S. Chow et al,Selected Areas in Cryptography,9th Annual International Workshop,SAC 2002,Lecture Notes in Computer Science 2595(2003),p250-270)以及“A White-box DES Implementation for DRM Applications”,S. Chow et al,Digital Rights Management,ACM CCS-9 Workshop,DRM 2002,Lecture Notes in Computer Science 2696(2003),p1-15,其全部公開內容通過引用被合并在此。附加的示例可以在US61/055,694和WO2009/140774中找到,這兩個文獻的全部公開內容通過引用被合并在此。一些白盒模糊技術實施數據流模糊——例如參見US7,350,085、US7,397,916、US6,594,761和US6,842,862,其全部公開內容通過引用被合并在此。一些白盒模糊技術實施控制流模糊——例如參見US6,779,114、US6,594,761和US6,842,862,其全部公開內容通過引用被合并在此。但是將認識到,存在其他白盒模糊技術,并且本發明的實施例可以使用任何白盒模糊技術。
作為另一個示例,有可能的情況是初始軟件項目220可能意圖被提供(或者分發)到特定用戶設備280(或者特定用戶設備280的集合)并且由其使用,并且因此希望把軟件項目220“鎖定”到(一個或多個)特定用戶設備280,也就是說防止軟件項目220在另一個用戶設備280上執行。因此,有許多技術(其在這里被稱作“節點鎖定”技術)用于把初始軟件項目220變換成受保護的軟件項目260,從而使得受保護的軟件項目260可以在一個或多個預定/特定用戶設備280上執行(或者由其執行)但是將不會在其他用戶設備上執行。這樣的節點鎖定技術的示例可以在WO2012/126077中找到,該文獻的全部公開內容通過引用被合并在此。但是將認識到,存在其他節點鎖定技術,并且本發明的實施例可以使用任何節點鎖定技術。
數字加水印是一種眾所周知的技術。具體來說,數字加水印涉及修改初始數字對象以產生加有水印的數字對象。做出修改以把特定數據(其被稱作有效載荷數據)嵌入或隱藏到初始數字對象中。所述有效載荷數據例如可以包括標識數字對象的所有權或其他權利信息的數據。有效載荷數據可以標識加有水印的數字對象的(預期)接收者,在這種情況下,有效載荷數據被稱作數字指紋——這樣的數字加水印可以被用來幫助追蹤數字對象的未經授權的拷貝的起源。數字加水印可以被應用于軟件項目。這樣的軟件加水印技術的示例可以在US7,395,433中找到,該文獻的全部公開內容通過引用被合并在此。但是將認識到,存在其他軟件加水印技術,并且本發明的實施例可以使用任何軟件加水印技術。
可能希望把受保護的軟件項目260的不同版本提供到不同的用戶系統280。受保護的軟件項目260的不同版本為不同的用戶系統280提供相同的功能——但是受保護的軟件項目260的不同版本被不同地編程或實施。這樣有助于限制攻擊者成功地攻擊受保護的軟件項目260的影響。具體來說,如果攻擊者成功地攻擊了他的受保護的軟件項目260的版本,則該攻擊(或者通過該攻擊發現或訪問的比如加密密鑰之類的數據)可能不適于供受保護的軟件項目260的不同版本使用。因此,有許多技術(其在這里被稱作“多樣性(diversity)”技術)用于把初始軟件項目220變換成受保護的軟件項目260,從而使得受保護的軟件項目260的不同版本被生成(也就是說從而引入“多樣性”)。這樣的多樣性技術的示例可以在WO2011/120123中找到,該文獻的全部公開內容通過引用被合并在此。但是將認識到,存在其他多樣性技術,并且本發明的實施例可以使用任何多樣性技術。
前面提到的白盒模糊技術、節點鎖定技術、軟件加水印技術和多樣性技術是軟件保護技術的示例。將認識到,存在對初始軟件項目220應用保護以生成受保護的軟件項目260的其他方法。因此,這里所使用的術語“軟件保護技術”應當被理解成表示對初始軟件項目220應用保護以生成受保護的軟件項目260的任何方法(目的是挫敗攻擊者的攻擊,或者至少使得攻擊者成功進行他的攻擊更加困難),比如任一種前面提到的白盒模糊技術和/或任一種前面提到的節點鎖定技術和/或任一種前面提到的軟件加水印技術和/或任一種前面提到的多樣性技術。
在本發明的實施例中,軟件保護工具252可以對初始軟件項目220應用一種或多種前面提到的軟件保護技術,以便生成受保護的軟件項目260。
存在許多方式可以用來在受保護的軟件項目260內實施前面提到的軟件保護,也就是說存在許多方式可以用來對初始軟件項目應用前面提到的軟件保護技術以獲得受保護的軟件項目260。具體來說,為了從初始軟件項目220生成受保護的軟件項目260,軟件保護工具252可以修改初始軟件項目220內的一個或多個代碼部分,和/或可以將一個或多個新的代碼部分添加或引入到初始軟件項目220中。用來做出這些修改的實際方式或者用來編寫新的代碼部分的實際方式當然可以有所不同——畢竟存在許多編寫軟件以實現相同功能的方式。但是已經創造性地認識到,實施軟件保護技術的當前方法存在以下問題:
(a)一些軟件保護技術(或者一些軟件保護技術的至少部分)的應用是手動過程。因此,所應用的軟件保護將特定于初始軟件項目220及其特性。這意味著保護的質量或強度將取決于正在手動實施或應用軟件保護的安全團隊的技術。于是這可能對軟件保護技術的應用的后續自動化步驟具有負面影響(例如在所得到的受保護的軟件項目260的代碼的效率和/或尺寸和/或安全性方面)。
(b)一些軟件保護技術(比如白盒模糊技術)的應用常常導致非常晦澀(obscure)的代碼。晦澀性并不一定意味著安全性,因為這使得安全性審核任務變得復雜,并且可能導致未被檢測到的弱點。將希望能夠消除這樣的未被檢測到的弱點(或者至少降低其可能性),并且使得安全性審核任務更加容易。此外,如果在后來檢測到弱點,則固有的晦澀性意味著使得提供軟件更新以修正所檢測到的弱點的能力更加困難、緩慢并且成本高昂。
(c)初始軟件項目220常常涉及使用混合的算術和邏輯數學(比如)。這總是會使得一些軟件保護技術對初始軟件項目220的應用更加困難,并且減少了針對使得一些軟件保護技術的應用自動化的選項。
(d)一些軟件保護技術適用于字注釋(word-wise)數據元素(例如其總是對被表示成32比特字的數據進行運算)。這代表著風險,因為這使得攻擊者更容易追蹤關鍵資產和/或檢測處理樣式。
如應當變得顯而易見的,本發明的實施例解決了這些問題當中的一個或多個個。
3—在有限環上使用向量空間
在本發明的實施例中,軟件保護工具252對初始軟件項目220應用一種或多種軟件保護技術,從而使得所得到的受保護的軟件項目260把數據處理(即如前面所描述的由初始軟件項目220提供的功能)至少部分地實施成在有限環上的一項或多項線性代數運算。
具體來說,受保護的軟件項目260把數據處理至少部分地實施成在有限環上的一項或多項線性代數運算,而不是僅僅使用在有限環上的算術運算或者在有限環上的邏輯運算來實施該數據處理。舉例來說,初始軟件項目220通常被編寫成使得程序變量和數據實際上是有限環的元素(或者被表示成其元素),也就是具有對正整數n按模計算的加法和乘法的n比特數的環。于是初始軟件項目220使用對作為該有限環的元素(或者被表示成該有限環的元素)的數據(或者參數或變量)進行運算的算術運算和邏輯運算來實施其功能。在這里,n常常是32或64(針對32比特或64比特字以及32比特或64比特處理器)。與此相對,在本發明的實施例中,所得到的受保護的軟件項目260將數據處理至少部分地實施成在有限環上的一項或多項線性代數運算。在這里“線性代數”運算是對向量空間的一個或多個元素的運算或函數。
如根據后面的內容將變得顯而易見的,有限環的元素可以被表示成在有限環上的向量空間的對應元素,并且反之亦然。在這里,向量空間是其元素為向量的向量空間,其中每一個向量的分量或元素是有限環的元素。類似地,有限環上的算術運算和該有限環上的邏輯運算可以被實施成針對向量空間的對應的相應線性代數運算,其中每一項線性代數運算對被表示成向量空間的一個或多個元素的相應輸入數據進行運算,以便產生對應的輸出數據。因此,在本發明的實施例中,軟件保護工具252至少部分地通過如下方式實施一種或多種軟件保護技術:將代碼添加到初始軟件項目220中和/或修改初始軟件項目220的現有代碼,從而使得所添加的代碼和/或經過修改的代碼包括(或者被實施成)針對向量空間的一項或多項線性代數運算(并且對向量空間的元素進行運算)。最終結果是初始軟件項目220仍然使相同的軟件保護技術對其應用——但是這些軟件保護技術按照與他們先前被應用于初始軟件項目220或者實施在初始軟件項目220內的方式不同的方式被應用于初始軟件項目220或者被實施在初始軟件項目220內(不同點在于所添加的代碼和/或對現有代碼做出的(一項或多項)修改包括對向量空間的元素進行運算的針對向量空間的一項或多項線性代數運算)。
在后面,有限環將是前面所討論的商環,并且向量空間將是向量空間(即向量空間的元素是具有本身是有限環的元素的n個元素/分量的向量)。但是將認識到,本發明的實施例同樣適用于不同的有限環和向量空間。
3.1—從到的映射
定義函數如下:
于是函數提供把向量空間的任何元素u映射到有限環的元素的一種方式。因此,關于向量空間的一個或多個元素定義的表達式(或者公式或運算)可以被映射到對有限環的一個或多個對應元素進行運算的對應表達式(或者公式或運算)。
函數具有以下屬性:。
將認識到,存在其他方式可以用來定義把向量空間的元素映射(或者關聯)到有限環的對應元素的函數,并且本發明的實施例不限于前面給出的示例性函數。
3.2—從到的映射
設函數是把有限環的元素映射(關聯)到向量空間的對應元素的函數。存在許多方式可以用來定義函數,并且將認識到,本發明的實施例不限于后面給出的示例。
函數的一個示例是如下定義的函數:
函數的另一個示例是如下定義的函數。如果并且的二進制表示是,則
注意。
3.3—的元素的歸一化形式
定義函數如下:
向量空間的元素可以被視為向量空間的元素u的“歸一化”形式。應當簡要描述函數的使用。
注意,對于環的任何元素p,如果,則。
3.4—邏輯乘法
定義函數如下:
其中,,,并且M(u)標示具有如下定義的元素mij的對角矩陣:對于i=0,…,n-1,mii=ui,并且對于i≠j,mij=0。
應當簡要描述函數的使用。
3.5—的元素的加法
注意,
因此,如果中的兩個元素p和q在中被表示成和,則中的p和q的和p+q等效于中的和u+v。這是因為通過映射把u+v從映射回到得到。
3.6—的元素的乘法
定義函數如下:
其中,,,并且。
注意,
因此,如果中的兩個元素p和q在中被表示成和,則中的p和q的乘積等效于中的乘積。這是因為通過映射把從映射回到得到。
3.7—的元素的多項式變換
考慮通過系數如下定義的二次變換T:
如果中的元素x在中被表示成,則我們需要確定中的哪一個元素u等效于中的經過變換的元素,也就是中的使得的元素u。
設。則
其中并且
其中,
因此,如果中的元素x在中被表示成,則中的經過變換的元素等效于中的元素。這是因為通過映射把u從映射回到得到。
我們還有:
將認識到,前述內容類似地適用于任意階的任何多項式變換。具體來說,考慮通過系數如下定義的一般多項式變換T:。于是如果中的元素x在中被表示成,則中的經過變換的元素等效于中的元素。這是因為通過映射把u從映射回到得到。
3.8—的元素的邏輯與(AND)
定義函數或算子如下:
其中,,并且。
于是。因此,如果中的兩個元素p和q在中被表示成和,則中的p和q的邏輯(逐比特)與等效于中的。這是因為通過映射把從映射回到得到。
3.9—的元素的邏輯異或(XOR)
定義函數或算子如下:
于是
。
因此,如果中的兩個元素p和q在中被表示成和,則中的p和q的邏輯(逐比特)異或等效于中的。這是因為通過映射把從映射回到得到:
3.10—的元素的其他邏輯算子
由于針對的元素的所有邏輯算子都可以按照針對的元素的邏輯(逐比特)與和異或算子來表達,并且由于針對的元素的邏輯(逐比特)與和異或算子在中具有對應的線性代數算子,因此針對的元素的所有其他邏輯算子都可以按照前面提到的線性代數算子和來表達。
3.11—的元素的移位運算
定義函數:如下:
其中,,并且其中是如下定義的矩陣:
假設中的元素x在中被表示成,并且假設x的二進制表示是,使得,于是中的向右移位k個位置得到中的元素,其二進制表示是。中的元素等效于中的元素。這是因為通過映射把從映射回到得到,由于,使得。因此,。
類似地,定義函數如下:
其中,,并且其中是如下定義的矩陣:
假設中的元素x在中被表示成,并且假設x的二進制表示是,使得,于是中的向左移位k個位置得到中的元素,其二進制表示是。中的元素等效于中的元素。這是因為通過映射把從映射回到得到,由于,使得。因此,。
3.12—的其他函數或算子
前面的示例性函數和算子表明,對于(a)對作為環的元素的一個或多個運算對象(或參數)進行運算以便(b)生成作為環的元素的一項或多項結果的函數F1,存在等效的函數或算子F2,其(a)根據與之間的映射對作為向量空間的元素并且對應于的一個或多個運算對象(或參數)進行運算并且(b)根據與之間的映射生成對應于的一項或多項結果。雖然在前面已經描述了中的多個示例性函數和算子及其在中的等效函數和算子,但是將認識到,基于這些示例可以定義和確定中的更多函數和算子及其在中的等效函數和算子。此外,按照類似于前面所討論的方式,技術人員將能夠針對中的任何函數或算子確定其在中的等效函數或算子。
因此將認識到,軟件保護工具252可以被布置成至少部分地通過如下方式實施一種或多種軟件保護技術:將代碼添加到初始軟件項目220中和/或修改初始軟件項目220的現有代碼從而使得所添加的代碼和/或經過修改的代碼包括(或者被實施成)針對向量空間的一項或多項線性代數運算(并且對向量空間的元素進行運算),這代替使用在有限環上的一項或多項算術和/或邏輯運算來添加代碼和/或修改代碼。舉例來說,使用前面的等效性,可以把實施一種或多種軟件保護技術(但是僅僅使用在環上的算術和/或邏輯運算這樣做)的現有技術轉換成按照功能上等效的方式實施所述一種或多種軟件保護技術(但是使用針對向量空間的線性代數運算這樣做)的技術。
在一些實施例中,軟件保護系統250包括數據庫254。數據庫254包括可以由軟件保護工具252在生成受保護的軟件項目260時使用的軟件或代碼的一個或多個部分。舉例來說,數據庫254可以包括用于實施如在前面的3.7節中闡述的向量空間中的多項式變換的代碼的一個或多個部分。通過這種方式,可以開發并且保持參考/模板代碼部分的集合,以供將來由軟件保護252和/或軟件保護252的操作員使用。如圖2中所示,數據庫254中的這些代碼部分當中的一個或多個可以利用軟件生成系統210來編寫或開發。
通過采用在有限域上使用線性代數運算而不是在有限域上使用算術和/或邏輯運算的方法來實施軟件保護技術,提供了許多優點和好處。舉例來說:
-使用精簡的數學運算集合(也就是有限域上的線性代數運算)實施軟件保護技術,從而建立有助于改進安全性審核的標準。具體來說,安全性審核的范圍可以被擴展到軟件保護技術的設計。工程團隊(其編寫初始軟件項目220和/或使用軟件保護工具252實施軟件保護技術)與安全性審核團隊之間的溝通和理解可以得到改進,這是因為基于該精簡的數學運算集合實現對于保護框架的更好的共識。
-通過把算術和邏輯運算表達成針對向量空間的線性代數運算,消除了前面提到的保護包括混合算術/邏輯數學的初始軟件項目220的困難。這于是使得軟件保護過程更自動化。
-對于弱點和安全漏洞的分析以及產生針對此類弱點和漏洞的解決方案得到了促進,這是因為軟件保護技術是使用精簡的數學運算集合來實施的。
4—示例
下面提供了前面所提到的技術的示例。但是將認識到,這僅僅是一個示例,并且本發明的實施例可以同樣被應用于其他軟件保護技術并且按照其他方式來應用。
假設初始軟件項目220被布置成生成控制字CW(即用于對已加密內容進行解密的加密密鑰)。因此,初始軟件項目220可以根據公式或函數來計算CW,其中M是“掩碼”,并且K是密鑰,具體來說M和K都是32比特無符號字。
環是,并且向量空間是。
M和K都是的元素,因此設和是它們在中的等效元素。
用于保護對一個或多個軟件變量進行運算的函數的一種眾所周知的技術涉及對這些變量應用相應的線性變換,并且隨后對這些經過變換的變量實施所述函數的經過變換的版本——例如參見如下文獻:“White-Box Cryptography and an AES Implementation”,S. Chow et al,Selected Areas in Cryptography,9th Annual International Workshop,SAC 2002,Lecture Notes in Computer Science 2595(2003),p250-270以及“A White-box DES Implementation for DRM Applications”,S. Chow et al,Digital Rights Management,ACM CCS-9 Workshop,DRM 2002,Lecture Notes in Computer Science 2696(2003),p1-15。對經過變換的變量實施函數的經過變換的版本的結果本身可以被變換,以便隨后從該函數獲得正確的結果。這產生了正確的結果,但是該處理將是對經過變換的變量實施的,而從未揭示這些變量的真實(未經變換的)數值,從而對攻擊者隱藏了這些數值。
將這個過程應用于本示例,然后對于,定義變換和如下:
和,其中如果,則。因此,是函數的逆。類似地,對于,定義變換和如下:
和,其中如果,則。因此,是函數的逆。隨后,可以獲得和的經過變換的版本如下:和。
正如前面所討論的那樣,如果中的兩個元素p和q在中被表示成和,則中的p和q的邏輯(逐比特)異或等效于中的。因此,中的M和K的邏輯(逐比特)異或等效于中的。
于是:
其中,。
因此人們可以把cw表達成cw=A+B+C,其中
因此,可以使用線性代數運算來計算向量A、B和C。內容提供者或條件訪問系統于是可以像前面那樣生成向量A、B和C,并且隨后將這些向量傳送到用戶系統280。在用戶系統280上執行的受保護的軟件項目260不是被布置成從內容提供者或條件訪問系統接收M和K并且如在初始軟件項目220中那樣計算,而是被布置成從內容提供者或條件訪問系統接收向量A、B和C并且計算。
因此,已經對初始軟件項目220應用了前面提到的軟件保護技術以生成受保護的軟件項目260,其中所述軟件保護技術是使用針對的線性代數運算來實施的。
在前面的示例中,關于把cw劃分成特定的向量A、B和C的選擇是有用的,這是因為:B更新用戶系統280上的掩碼M,C包含與內容有關的密鑰K,并且A隨后把B和C“粘合”在一起以使得用戶系統280能夠如前面所闡述的那樣獲得CW。用戶系統280不需要明確地對向量A、B和C進行“去變換(de-transform)”以便明確地計算掩碼M和密鑰K從而計算CW,因此觀察所述處理(例如在調試器中)的攻擊者無法確定掩碼M和密鑰K的數值,即使掩碼M和密鑰K正被使用。
但是將認識到,存在其他方式可以用來把cw劃分成兩個或更多個向量,并且本發明的實施例不限于把cw劃分成如前面所闡述的特定向量A、B和C。
5—修改
將認識到,所描述的方法被示出為按照特定順序實施的個體步驟。但是技術人員將認識到,這些步驟可以被組合或者按照不同的順序來實施,同時仍然實現所期望的結果。
將認識到,可以使用各種不同的信息處理系統來實施本發明的實施例。具體來說,雖然附圖及其討論提供了示例性的計算系統和方法,但是這些僅僅是為了在討論本發明的各個方面時提供有用的參考而被呈現的。本發明的實施例可以被實施在任何適當的數據處理設備上,數據處理設備比如是個人計算機、膝上型計算機、個人數字助理、移動電話、機頂盒、電視、服務器計算機等等。當然,對于所述系統和方法的描述出于討論的目的而被簡化,并且其僅僅是可以被用于本發明的實施例的許多不同類型的系統和方法的其中之一。將認識到,邏輯塊之間的邊界僅僅是說明性的,并且替換的實施例可以合并邏輯塊或元件,或者可以對各個邏輯塊或元件施加替換的功能分解。
將認識到,前面提到的功能可以被實施成作為硬件和/或軟件的一個或多個對應模塊。舉例來說,前面提到的功能可以被實施成一個或多個軟件組件以供系統的處理器執行。替換地,前面提到的功能可以被實施成硬件,比如在一個或多個現場可編程門陣列(FPGA)上,和/或一個或多個專用集成電路(ASIC),和/或一個或多個數字信號處理器(DSP),和/或其他硬件布置。前面所描述的方法步驟各自可以由對應的相應模塊實施;多個方法步驟可以一起由單個模塊實施。
將認識到,如果本發明的實施例是通過計算機程序實施的,則承載計算機程序的存儲介質和傳送介質形成本發明的方面。計算機程序可以具有一條或多條程序指令或程序代碼,其在由計算機執行時實施本發明的實施例。這里所使用的術語“程序”可以是被設計用于在計算機系統上執行的指令序列,并且可以包括子例程、函數、過程、模塊、對象方法、對象實施方式、可執行應用、小應用程序、小服務程序、源代碼、對象代碼、共享庫、動態鏈接庫和/或被設計用于在計算機系統上執行的其他指令序列。存儲介質可以是磁盤(比如硬盤驅動器或軟盤)、光盤(比如CD-ROM、DVD-ROM或BluRay盤)或者存儲器(比如ROM、RAM、EEPROM、EPROM、閃存或者便攜式/可移除存儲器設備)等等。傳送介質可以是通信信號、數據廣播、兩臺或更多臺計算機之間的通信鏈接等等。