本發(fā)明涉及電子設(shè)備、生成電子設(shè)備的方法以及用于實(shí)施此類方法的裝置和計(jì)算機(jī)程序。
背景技術(shù):
:“印刷電子”技術(shù)是被用來通過印刷過程或印刷技術(shù)在各種基板上產(chǎn)生或制造完整的電氣設(shè)備或電路的眾所周知的方法和過程。所述印刷可以使用許多傳統(tǒng)的印刷技術(shù),比如絲網(wǎng)印刷、苯胺印刷術(shù)(flexography)、凹版印刷、平版印刷(offsetlithography)、噴墨以及3D打印技術(shù)。具體來說,電氣功能電子或光學(xué)墨水可以被沉積在基板上,從而形成有源和/或無源電子組件。這些組件例如可以包括二極管、晶體管、電線、接觸件和電阻器,以及開關(guān)、傳感器(比如光傳感器)、輸出設(shè)備、輸入設(shè)備、致動(dòng)器、電池、LED等等。從印刷電子過程得到的設(shè)備被稱作“印刷電子設(shè)備”或“印刷電子電路”。因此,印刷電子設(shè)備的應(yīng)用和可能性的范圍十分廣闊。很自然的是,術(shù)語“印刷電子設(shè)備”和“印刷電子電路”不應(yīng)當(dāng)與術(shù)語“印刷電路板”混淆,后者是支持電氣組件(其實(shí)際提供功能)的板,并且使用板上的導(dǎo)電軌跡連接這些組件。使用印刷電子制造技術(shù)有若干好處。一項(xiàng)好處是產(chǎn)生完整的終端用戶電路的能力。這樣就消除了許多子組件制造步驟,從而以相當(dāng)大的差額降低了成本,對于具有相對較少的晶體管(或其他有源組件)的相當(dāng)簡單電子電路來說尤其是如此。類似地,傳統(tǒng)的電子制造技術(shù)需要昂貴并且復(fù)雜的無塵室生產(chǎn)/制作設(shè)施。此外,用于印刷電子設(shè)備的基板常??梢允侨嵝缘模瑢τ趥鹘y(tǒng)的電子制造通常則不是這種情況。此外,印刷電子技術(shù)通常被認(rèn)為與傳統(tǒng)電子制造過程相比更加環(huán)境友好。關(guān)于印刷電子技術(shù)和印刷電子設(shè)備的更多細(xì)節(jié)例如可以在http://en.wikipedia.org/wiki/Printed_electronics處找到(其全部公開內(nèi)容通過引用被合并在此)。還可以使用電子束光刻(或e-beam光刻)來產(chǎn)生電氣設(shè)備或電路。電子束光刻涉及掃描聚焦電子束,以便在覆蓋有被稱作抗蝕劑的電子敏感膜的表面上繪制出定制形狀(這一過程被稱作“曝光”)。電子束改變抗蝕劑的可溶性,從而實(shí)現(xiàn)通過把抗蝕劑浸漬在溶劑中選擇性地移除抗蝕劑的被曝光或未曝光區(qū)段(這一過程被稱作“顯影”)。這實(shí)現(xiàn)在抗蝕劑中產(chǎn)生非常小的結(jié)構(gòu),該小結(jié)構(gòu)隨后可以常常通過蝕刻被轉(zhuǎn)移到基板材料。由于電子束光刻是眾所周知的,因此這里將不提供進(jìn)一步的細(xì)節(jié)。但是關(guān)于電子束光刻的更多信息例如可以在http://en.wikipedia.org/wiki/Electron-beam_lighography處找到,其全部內(nèi)容通過引用被合并在此。使用電子束光刻產(chǎn)生芯片的一個(gè)示例由MapperLithography(參見http://www.mapperlithography.com/)進(jìn)行。這樣的制作技術(shù)實(shí)現(xiàn)高效地產(chǎn)生分別與其他設(shè)備不同地配置的一系列設(shè)備。技術(shù)實(shí)現(xiàn)要素:當(dāng)前的印刷電子制造技術(shù)不適合于安全性應(yīng)用,這是因?yàn)樗玫降挠∷㈦娮釉O(shè)備對于硬件攻擊(其也被稱作“電路攻擊”或“實(shí)現(xiàn)方式攻擊”或“逆向工程攻擊”)是脆弱的。此類攻擊的示例包括簡單功率分析、差分功率分析、高階差分功率分析、旁道攻擊、從設(shè)備泄漏的電磁輻射的分析、定時(shí)攻擊等等(例如參見http://en.wikipedia.org/wiki/Side-channel_attack,其全部內(nèi)容通過引用被合并在此)。這樣的傳統(tǒng)硬件攻擊涉及由攻擊者使用探頭、電磁輻射、化學(xué)反應(yīng)等等來嘗試確定硬件設(shè)備的內(nèi)部工作方式或秘密信息。這例如不同于軟件攻擊,在軟件攻擊中攻擊者可以使用調(diào)試器來監(jiān)測和修改存儲(chǔ)器內(nèi)容、執(zhí)行流程等等,這在攻擊硬件設(shè)備時(shí)通常是不可能的。用以保護(hù)電子電路免于此類硬件攻擊的傳統(tǒng)技術(shù)不能很好地適合于保護(hù)印刷電子設(shè)備,這是因?yàn)檫@些硅硬件保護(hù)技術(shù)涉及比如添加金屬絲網(wǎng)(使用多層金屬互連)或者施加難以移除的環(huán)氧樹脂層之類的技術(shù),目的是使得攻擊者更加難以使用探頭、電磁輻射、化學(xué)反應(yīng)等等。同樣的問題也適用于使用電子束光刻產(chǎn)生的當(dāng)前電子設(shè)備。因此,將希望能夠按照更加安全的方式利用印刷電子設(shè)備或者通過電子束光刻產(chǎn)生的電子設(shè)備實(shí)施基于安全性的功能,從而使得即使攻擊者能夠在電子設(shè)備上發(fā)動(dòng)硬件攻擊,攻擊者成功進(jìn)行其攻擊的可能性也會(huì)降低(例如防止攻擊者訪問秘密/敏感信息和/或防止攻擊者使得設(shè)備按照未經(jīng)授權(quán)的方式操作)。根據(jù)本發(fā)明的第一方面,提供一種包括一個(gè)或多個(gè)模塊的電子設(shè)備,所述模塊按照模糊化方式實(shí)施安全性相關(guān)操作,從而為安全性相關(guān)操作提供針對硬件攻擊的抵抗性,其中所述電子設(shè)備是(a)印刷電子設(shè)備或者(b)使用電子束光刻產(chǎn)生的設(shè)備。在一些實(shí)施例中,安全性相關(guān)操作使用秘密數(shù)據(jù),并且其中通過一個(gè)或多個(gè)模塊實(shí)施安全性相關(guān)操作保護(hù)秘密數(shù)據(jù)免于硬件攻擊。在一些實(shí)施例中,安全性相關(guān)操作包括以下各項(xiàng)當(dāng)中的一項(xiàng)或多項(xiàng):(i)密碼操作;(ii)條件訪問操作;(iii)數(shù)字權(quán)利管理操作;(iv)密鑰管理操作。密碼操作可以包括以下各項(xiàng)當(dāng)中的一項(xiàng)或多項(xiàng):加密操作;解密操作;數(shù)字簽名生成操作;數(shù)字簽名驗(yàn)證操作;散列生成操作;散列驗(yàn)證操作。在一些實(shí)施例中,安全性相關(guān)操作處理輸入數(shù)據(jù)以便生成輸出數(shù)據(jù),并且所述一個(gè)或多個(gè)模塊按照模糊化方式至少部分地通過被布置成接收輸入數(shù)據(jù)的經(jīng)過變換的版本以及通過被布置成處理輸入數(shù)據(jù)的經(jīng)過變換的版本以生成輸出數(shù)據(jù)的經(jīng)過變換的版本實(shí)施安全性相關(guān)操作。在一些實(shí)施例中,所述電子設(shè)備包括用于接收輸入數(shù)據(jù)的一個(gè)或多個(gè)輸入端,并且通過一個(gè)或多個(gè)模塊對安全性相關(guān)操作的實(shí)施被布置成使用由所述一個(gè)或多個(gè)輸入端提供的數(shù)據(jù)。在這樣的實(shí)施例中,所述一個(gè)或多個(gè)輸入端當(dāng)中的至少一個(gè)可以被布置成形成所述一個(gè)或多個(gè)輸入端當(dāng)中的至少一個(gè)所接收到的輸入數(shù)據(jù)的經(jīng)過變換的版本,并且把所述輸入數(shù)據(jù)的經(jīng)過變換的版本提供到所述一個(gè)或多個(gè)模塊。在一些實(shí)施例中,所述電子設(shè)備包括用于輸出數(shù)據(jù)的一個(gè)或多個(gè)輸出端,并且通過一個(gè)或多個(gè)模塊對安全性相關(guān)操作的實(shí)施被布置成生成經(jīng)過處理的數(shù)據(jù),并且把經(jīng)過處理的數(shù)據(jù)輸出提供到所述一個(gè)或多個(gè)輸出端當(dāng)中的至少一個(gè)。在這樣的實(shí)施例中,所述經(jīng)過處理的數(shù)據(jù)可以包括輸出數(shù)據(jù)的經(jīng)過變換的版本,并且所述一個(gè)或多個(gè)輸出端當(dāng)中的至少一個(gè)可以被布置成從所述輸出數(shù)據(jù)的經(jīng)過變換的版本獲得輸出數(shù)據(jù)。在一些實(shí)施例中,所述電子設(shè)備包括一個(gè)或多個(gè)傳感器,并且通過一個(gè)或多個(gè)模塊對安全性相關(guān)操作的實(shí)施被布置成使用由所述一個(gè)或多個(gè)傳感器生成的數(shù)據(jù)。在這樣的實(shí)施例中,所述一個(gè)或多個(gè)傳感器當(dāng)中的至少一個(gè)可以被布置成形成所述一個(gè)或多個(gè)傳感器當(dāng)中的至少一個(gè)所生成的輸入數(shù)據(jù)的經(jīng)過變換的版本,并且把所述輸入數(shù)據(jù)的經(jīng)過變換的版本提供到所述一個(gè)或多個(gè)模塊。在一些實(shí)施例中,所述電子設(shè)備包括一個(gè)或多個(gè)模塊,所述一個(gè)或多個(gè)模塊實(shí)施以下各項(xiàng)當(dāng)中的至少一項(xiàng):(i)完整性驗(yàn)證操作;(ii)篡改檢測操作;(iii)對正在針對電子設(shè)備實(shí)施的攻擊的檢測;(iv)用以驗(yàn)證電子設(shè)備所連接到的物體的一項(xiàng)或多項(xiàng)預(yù)定屬性的操作;(v)用以驗(yàn)證電子設(shè)備連接到物體的操作。根據(jù)本發(fā)明的第二方面,提供一種包括前面提到的電子設(shè)備當(dāng)中的任一項(xiàng)的裝置。所述裝置可以是用于附著到物品的標(biāo)識標(biāo)簽,其中:所述安全性相關(guān)操作包括:存儲(chǔ)用于標(biāo)識物品的標(biāo)識代碼;以及響應(yīng)于接收到請求,生成包括標(biāo)識代碼的消息;并且所述裝置包括被布置成實(shí)施以下操作的接口:向電子設(shè)備提供請求;從電子設(shè)備接收消息;以及輸出消息。在這樣的實(shí)施例中,所述請求可以包括隨機(jī)數(shù)(nonce);并且所述安全性相關(guān)操作于是可以包括至少部分地基于所述隨機(jī)數(shù)和秘密密鑰實(shí)施密碼操作,其中通過一個(gè)或多個(gè)模塊對安全性相關(guān)操作的實(shí)施保護(hù)秘密密鑰免于硬件攻擊,并且其中所述消息至少部分地基于所述密碼操作的結(jié)果。在這樣的實(shí)施例中,所述電子設(shè)備可以包括被布置成生成數(shù)據(jù)的傳感器;并且所述秘密密鑰可以至少部分地基于由傳感器生成的數(shù)據(jù)。所述傳感器可以被布置成基于物品的一項(xiàng)或多項(xiàng)預(yù)定屬性生成數(shù)據(jù)。在一些實(shí)施例中,所述裝置是智能卡。根據(jù)本發(fā)明的第三方面,提供一種生成電子設(shè)備的方法,所述電子設(shè)備是(a)印刷電子設(shè)備或者(b)使用電子束光刻產(chǎn)生的設(shè)備,所述方法包括:作為電子設(shè)備的一部分包括按照模糊化方式實(shí)施安全性相關(guān)操作的一個(gè)或多個(gè)模塊,從而為安全性相關(guān)操作提供針對硬件攻擊的抵抗性。在一些實(shí)施例中,所述方法包括:接收用硬件描述語言編寫的代碼,其中所述代碼表示包括安全性相關(guān)操作的電子設(shè)備的功能;對所接收到的代碼應(yīng)用一種或多種白盒保護(hù)技術(shù),從而形成保護(hù)安全性相關(guān)操作免于硬件攻擊的受保護(hù)的代碼;以及使用受保護(hù)的代碼生成電子設(shè)備。使用受保護(hù)的代碼可以包括把受保護(hù)的代碼轉(zhuǎn)換成針對電子設(shè)備的網(wǎng)表(netlist),并且基于網(wǎng)表產(chǎn)生電子設(shè)備。在本發(fā)明的第三方面的一些實(shí)施例中,所述電子設(shè)備是根據(jù)本發(fā)明的第一方面(或者其實(shí)施例中任一個(gè))的電子設(shè)備。根據(jù)本發(fā)明的第四方面,提供一種被布置成實(shí)施根據(jù)前面提到的方法當(dāng)中的任一項(xiàng)的方法的裝置。根據(jù)本發(fā)明的第五方面,提供一種計(jì)算機(jī)程序,其在由處理器執(zhí)行時(shí)使得處理器實(shí)施任一項(xiàng)前面所提到的方法。計(jì)算機(jī)程序可以被存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上。附圖說明現(xiàn)在將參照附圖僅通過舉例的方式來描述本發(fā)明的實(shí)施例,其中:圖1示意性地圖示了根據(jù)本發(fā)明的一個(gè)實(shí)施例的系統(tǒng);圖2示意性地圖示了計(jì)算機(jī)系統(tǒng)的一個(gè)示例;圖3是圖示了根據(jù)本發(fā)明的一個(gè)實(shí)施例的用于操作圖1的系統(tǒng)的方法的流程圖;圖4a示意性地圖示了示例性印刷電子設(shè)備;圖4b示意性地圖示了根據(jù)本發(fā)明的一個(gè)實(shí)施例的示例性印刷電子設(shè)備;圖4c示意性地圖示了根據(jù)本發(fā)明的一個(gè)實(shí)施例的另一個(gè)示例性印刷電子設(shè)備;圖5示意性地圖示了將使用本發(fā)明的實(shí)施例模糊的示例性功能;圖6a和6b示意性地圖示了如何使用邏輯表達(dá)式實(shí)施查找表;圖7a和7b示意性地圖示了根據(jù)本發(fā)明的一個(gè)實(shí)施例的用于印刷電子設(shè)備的安全性相關(guān)功能的示例性處理;圖8示意性地圖示了本發(fā)明的另一個(gè)實(shí)施例;圖9示意性地圖示了包括優(yōu)化和保護(hù)工具集A40的計(jì)算機(jī)系統(tǒng)的一個(gè)示例;圖10更加詳細(xì)地圖示了圖9的優(yōu)化和保護(hù)工具集A40的一個(gè)示例;圖11提供了一個(gè)方法示例的流程圖;圖12圖示了可以由圖10的優(yōu)化和保護(hù)工具集A40實(shí)施的工作流程;圖13圖示了類似于圖12的工作流程的工作流程,但是其中源代碼表示中的輸入軟件項(xiàng)目被使用LLVM前端工具轉(zhuǎn)換成LLVMIR;圖14類似于圖13,但是具有二進(jìn)制或原生(native)代碼表示中的輸入軟件項(xiàng)目;圖15圖示了類似于圖12到14的工作流程的工作流程,但是其中LLVM編譯器中間層工具被用來在第一中間表示中對軟件項(xiàng)目實(shí)施二進(jìn)制重寫保護(hù);圖16示出了可以使用圖10的優(yōu)化和保護(hù)工具集實(shí)施的工作流程,其中輸出表示是asm.js或其他可執(zhí)行腳本表示;圖17以另外的一些變型和細(xì)節(jié)示意性地示出了圖10的優(yōu)化和保護(hù)工具集;圖18示出了圖10的布置如何可以被擴(kuò)展成使用更多數(shù)目的中間表示,以及如何在這些中間表示中的不同中間表示中應(yīng)用優(yōu)化和/或保護(hù);以及圖19圖示了由優(yōu)化和保護(hù)工具集對比如安全性庫、模塊和代理之類的軟件項(xiàng)目的處理。具體實(shí)施方式在后面的描述以及附圖中描述了本發(fā)明的特定實(shí)施例。但是將認(rèn)識到的是,本發(fā)明不限于所描述的實(shí)施例,并且一些實(shí)施例可以不包括后面所描述的所有特征。但是將顯而易見的是,在不背離所附權(quán)利要求中所闡述的本發(fā)明的更寬泛的精神和范圍的情況下,可以在這里做出各種修改和改變。1—系統(tǒng)總覽圖1示意性地圖示了根據(jù)本發(fā)明的一個(gè)實(shí)施例的系統(tǒng)100。系統(tǒng)100包括計(jì)算機(jī)系統(tǒng)110、印刷機(jī)120和網(wǎng)絡(luò)130。網(wǎng)絡(luò)130可以是適合于在計(jì)算機(jī)系統(tǒng)110與印刷機(jī)120之間傳送或傳輸數(shù)據(jù)的任何種類的數(shù)據(jù)通信網(wǎng)絡(luò)。因此,網(wǎng)絡(luò)130可以包括以下各項(xiàng)當(dāng)中的一項(xiàng)或多項(xiàng):局域網(wǎng),廣域網(wǎng),城域網(wǎng),因特網(wǎng),無線通信網(wǎng)絡(luò),有線或電纜通信網(wǎng)絡(luò),衛(wèi)星通信網(wǎng)絡(luò),電話網(wǎng)絡(luò)等等。計(jì)算機(jī)系統(tǒng)110和印刷機(jī)120可以被布置成通過網(wǎng)絡(luò)130經(jīng)由任何適當(dāng)?shù)臄?shù)據(jù)通信協(xié)議彼此通信。當(dāng)然將認(rèn)識到的是,在計(jì)算機(jī)系統(tǒng)110與印刷機(jī)120之間可以是實(shí)現(xiàn)計(jì)算機(jī)系統(tǒng)110與印刷機(jī)120之間的數(shù)據(jù)通信的一臺(tái)或多臺(tái)中間計(jì)算機(jī)或設(shè)備——這些計(jì)算機(jī)或設(shè)備通常被示出為網(wǎng)絡(luò)130的部分。印刷機(jī)120可以是能夠通過印刷技術(shù)生成印刷電子設(shè)備140的任何印刷設(shè)備。正如前面所描述的那樣,對于印刷電子設(shè)備140有許多不同的可能功能或用途或配置,并且有許多可能的印刷技術(shù)或技法(當(dāng)前可用的以及仍待開發(fā)的)可以被用來生成或形成印刷電子設(shè)備140。因此,印刷機(jī)120可以是實(shí)施一種或多種此類印刷技術(shù)以生成印刷電子設(shè)備140的任何印刷設(shè)備。因?yàn)檫@樣的印刷機(jī)120是眾所周知的,并且因?yàn)檫@樣的印刷技術(shù)是眾所周知的,因此這里將不對其進(jìn)行更加詳細(xì)的描述。正如前面所描述的那樣,印刷機(jī)120與網(wǎng)絡(luò)130連接或者通信。因此,印刷機(jī)120被布置成通過網(wǎng)絡(luò)130接收數(shù)據(jù),其中該數(shù)據(jù)定義將由印刷機(jī)120印刷的印刷電子設(shè)備140。換句話說,印刷機(jī)120被布置成通過網(wǎng)絡(luò)130接收數(shù)據(jù),并且處理所接收到的數(shù)據(jù),其中所接收到的數(shù)據(jù)使得印刷機(jī)120印刷出(并且從而形成或生成)印刷電子設(shè)備140。所述數(shù)據(jù)可以包括針對印刷機(jī)120的配置數(shù)據(jù),和/或?qū)⒂捎∷C(jī)120印刷并輸出的實(shí)際印刷電子設(shè)備140的細(xì)節(jié),和/或一條或多條命令(比如針對印刷機(jī)120的“印刷”命令)。印刷本身可以是完全自動(dòng)的過程。替換地,印刷機(jī)120可能需要來自印刷機(jī)120的操作員的某種人工輸入。同樣地,這方面是眾所周知的,并且因此這里將不進(jìn)行更加詳細(xì)的描述。如圖1中所示,由印刷機(jī)120生成的印刷電子設(shè)備140可以與另一個(gè)項(xiàng)目150(或者物品或物體)組合(或者附著到其或與之耦合)從而形成新的項(xiàng)目160(或者物品或物體)。這可以簡單地涉及把印刷電子設(shè)備140粘附到項(xiàng)目150(利用粘合劑或結(jié)合劑)。項(xiàng)目150本身可以具有一個(gè)或多個(gè)電子組件(例如一個(gè)或多個(gè)傳感器或者輸入端或輸出端或接口),并且印刷電子設(shè)備140因此可以與項(xiàng)目150組合,從而使得項(xiàng)目150的一個(gè)或多個(gè)電子組件和印刷電子設(shè)備140可以相互作用(例如項(xiàng)目150的傳感器和/或輸入端可以向印刷電子設(shè)備140提供數(shù)據(jù);印刷電子設(shè)備140可以向項(xiàng)目150的輸出端提供數(shù)據(jù);等等)。這方面的示例將在后面更加詳細(xì)地進(jìn)行描述。計(jì)算機(jī)系統(tǒng)110可以是任何計(jì)算機(jī)系統(tǒng),比如圖2中示出的一個(gè)或多個(gè)示例性計(jì)算機(jī)系統(tǒng)200(將被簡短描述)。舉例來說,計(jì)算機(jī)系統(tǒng)110可以包括個(gè)人計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、平板設(shè)備、膝上型計(jì)算機(jī)等等當(dāng)中的一項(xiàng)或多項(xiàng)。計(jì)算機(jī)系統(tǒng)110被布置成生成數(shù)據(jù)文件116(其在實(shí)踐中可以包括一個(gè)或多個(gè)文件)以用于通過網(wǎng)絡(luò)130發(fā)送到印刷機(jī)120。數(shù)據(jù)文件116包括數(shù)據(jù),正如前面所描述的那樣,所述數(shù)據(jù)使得印刷機(jī)120印刷出印刷電子設(shè)備140。數(shù)據(jù)文件116可以具有適合由印刷機(jī)120使用的任何格式。計(jì)算機(jī)系統(tǒng)110包括用于生成數(shù)據(jù)文件116的工具117。因此工具117可以包括在計(jì)算機(jī)系統(tǒng)117的一個(gè)或多個(gè)處理器上執(zhí)行的一個(gè)或多個(gè)軟件應(yīng)用。在圖1中所示出的示例性實(shí)施例中,工具117包括:設(shè)計(jì)模塊111;保護(hù)模塊113;以及輸出模塊115。設(shè)計(jì)模塊111、保護(hù)模塊113和輸出模塊115當(dāng)中的一項(xiàng)或多項(xiàng)在實(shí)踐中可以被實(shí)施成分開的獨(dú)立應(yīng)用,因此圖1中把設(shè)計(jì)模塊111、保護(hù)模塊113和輸出模塊115示出為單個(gè)工具117的一部分的虛線純粹是為了說明這些獨(dú)立應(yīng)用是一起形成工具117的更大的應(yīng)用套裝的部分。但是在其他實(shí)施例中,設(shè)計(jì)模塊111、保護(hù)模塊113和輸出模塊115可以形成單個(gè)軟件應(yīng)用(即工具117)的部分,從而使得圖1中的虛線表示在計(jì)算機(jī)系統(tǒng)110上執(zhí)行的實(shí)際應(yīng)用。設(shè)計(jì)模塊111可以是用于設(shè)計(jì)印刷電子設(shè)備140的任何傳統(tǒng)模塊。舉例來說,設(shè)計(jì)模塊111可以使得一位或多位設(shè)計(jì)者能夠使用硬件描述語言(HDL)設(shè)計(jì)一些或全部印刷電子設(shè)備140,或者編寫或設(shè)計(jì)針對印刷電子設(shè)備140的一些或全部功能。眾所周知,HDL是可以被用來對電子電路的結(jié)構(gòu)、設(shè)計(jì)和操作進(jìn)行編程的計(jì)算機(jī)程序語言。HDL例如可以是VHDL或Verilog,但是將認(rèn)識到的是,許多其他HDL存在并且可以替換地使用在本發(fā)明的實(shí)施例中。由于HDL(及其使用和實(shí)施方式)是眾所周知的,因此這里將不對它們進(jìn)行更加詳細(xì)的描述,但是,更多細(xì)節(jié)例如可以在http://en.wikipedia.org/wiki/Hardware_description_language處找到,其全部公開內(nèi)容通過引用被合并在此。因此,設(shè)計(jì)模塊111可以被用來生成設(shè)計(jì)文件112(其在實(shí)踐中可以包括一個(gè)或多個(gè)文件),設(shè)計(jì)文件112包含規(guī)定針對印刷電子設(shè)備140的一些或全部所期望的功能(即操作、功能、處理、規(guī)程、數(shù)據(jù)流等等)的數(shù)據(jù)。舉例來說,設(shè)計(jì)文件112可以包括用HDL編寫的代碼。附加地或替換地,工具117可以被布置成從計(jì)算機(jī)系統(tǒng)110的另一個(gè)系統(tǒng)或應(yīng)用(例如先前產(chǎn)生的設(shè)計(jì)文件112可能已經(jīng)由計(jì)算機(jī)系統(tǒng)110存儲(chǔ))或者通過網(wǎng)絡(luò)130從不同的計(jì)算機(jī)系統(tǒng)(圖1中未示出)接收設(shè)計(jì)文件112。因此,設(shè)計(jì)模塊111作為工具117的部分的存在是可選的。保護(hù)模塊113被布置成接收設(shè)計(jì)文件112并且對設(shè)計(jì)文件112應(yīng)用一種或多種保護(hù)技術(shù),從而生成受保護(hù)的設(shè)計(jì)文件114(其在實(shí)踐中可以包括一個(gè)或多個(gè)文件)。與設(shè)計(jì)文件112一樣,受保護(hù)的設(shè)計(jì)文件114包含規(guī)定針對印刷電子設(shè)備140的功能(即操作、功能、處理、規(guī)程、數(shù)據(jù)流等等)的數(shù)據(jù)——但是通過對設(shè)計(jì)文件112應(yīng)用一種或多種保護(hù)技術(shù):(a)其中一些或全部功能被以具有針對一項(xiàng)或多項(xiàng)“白盒攻擊”的抵抗性或魯棒性(使得提供針對擁有受保護(hù)的設(shè)計(jì)文件114的攻擊者的保護(hù))的方式實(shí)施或規(guī)定在受保護(hù)的設(shè)計(jì)文件114中;以及(b)所得到的印刷電子設(shè)備140具有針對硬件攻擊的增加的魯棒性或抵抗性。白盒攻擊和保護(hù)技術(shù)將在后面進(jìn)行描述。受保護(hù)的設(shè)計(jì)文件114可以包括用HDL(比如與被用于設(shè)計(jì)文件112的相同HDL)編寫的代碼。但是不一定必須是這種情況。舉例來說,保護(hù)模塊113可以實(shí)施附加的處理(比如編譯或合成步驟),從而產(chǎn)生已編譯或已合成的受保護(hù)的設(shè)計(jì)文件114。輸出模塊115是工具117的可選模塊(并且因此可以在本發(fā)明的一些實(shí)施例中被省略)。輸出模塊115實(shí)施把受保護(hù)的設(shè)計(jì)文件114從由保護(hù)工具113輸出的格式轉(zhuǎn)換到印刷機(jī)120作為其輸入所需要的數(shù)據(jù)文件116的格式所需要的一個(gè)或多個(gè)處理步驟。舉例來說,如果受保護(hù)的設(shè)計(jì)文件114是用HDL編寫的,則數(shù)據(jù)文件116的格式可能是網(wǎng)表,在這種情況下,輸出模塊115可以實(shí)施編譯和/或合成處理,以便生成將被包括在數(shù)據(jù)文件116中的網(wǎng)表。附加地或替換地,印刷機(jī)120可能需要數(shù)據(jù)文件116具有特定格式,在這種情況下,輸出模塊115可以被布置成實(shí)施從受保護(hù)的設(shè)計(jì)文件114的格式到該特定格式的格式轉(zhuǎn)換操作。附加地或替換地,由受保護(hù)的設(shè)計(jì)文件114定義的功能可以僅僅是針對印刷電子設(shè)備140的全部功能的子集,在這種情況下,輸出模塊115可以被布置成接收一個(gè)或多個(gè)其他文件(例如具有附加的HDL代碼),并且把所述一個(gè)或多個(gè)其他文件與受保護(hù)的設(shè)計(jì)文件114組合以生成針對印刷電子設(shè)備140的最終/完成設(shè)計(jì)。將認(rèn)識到的是,輸出模塊115相應(yīng)地可以附加地或替換地實(shí)施其他操作以生成數(shù)據(jù)文件116。在一些實(shí)施例中,印刷機(jī)120可以是計(jì)算機(jī)系統(tǒng)110的部分或者與之直接耦合,在這種情況下,網(wǎng)絡(luò)130可以從系統(tǒng)100中省略。前面已經(jīng)關(guān)于生成印刷電子設(shè)備140描述了圖1的系統(tǒng)100。但是將認(rèn)識到的是,取代使用印刷電子技術(shù),系統(tǒng)100可以使用電子束光刻來產(chǎn)生電子設(shè)備140(因此設(shè)備140不再是印刷電子設(shè)備140,而是改為使用電子束光刻產(chǎn)生的設(shè)備)。在這種情況下,印刷機(jī)120被使用電子束光刻產(chǎn)生設(shè)備的設(shè)備所取代。因此,數(shù)據(jù)文件116(其在實(shí)踐中可以包括一個(gè)或多個(gè)文件)包括如下數(shù)據(jù):正如前面所描述的那樣,該數(shù)據(jù)使得所述設(shè)備使用電子束光刻生成設(shè)備140。數(shù)據(jù)文件116可以具有適合由設(shè)備120使用的任何格式。因此,雖然在這里通過參照由“印刷”那些設(shè)備的“印刷機(jī)120”產(chǎn)生的“印刷電子設(shè)備140”描述了本發(fā)明的實(shí)施例,但是將認(rèn)識到的是,本發(fā)明的其他實(shí)施例可以利用電子束光刻而不是印刷電子技術(shù)。因此,雖然在這里基于印刷電子技術(shù)闡述了本發(fā)明的實(shí)施例,但是將認(rèn)識到的是,這里對于本發(fā)明的實(shí)施例的描述同樣適用于這些其他“電子束”實(shí)施例,并且將認(rèn)識到的是,當(dāng)與這些其他“電子束”實(shí)施例相關(guān)時(shí),(i)在這里對“印刷電子設(shè)備140”的提及將由“使用電子束光刻產(chǎn)生的設(shè)備140”取代;(ii)在這里對“印刷機(jī)120”的提及將由“用于使用電子束光刻產(chǎn)生設(shè)備140的裝置/系統(tǒng)”取代;(iii)對“印刷”的提及將由“使用電子束光刻形成設(shè)備140”取代;(iv)印刷電子技術(shù)的其他方面將由其在電子束光刻中的相應(yīng)對應(yīng)方面取代。圖3是圖示了根據(jù)本發(fā)明的一個(gè)實(shí)施例的用于操作圖1的系統(tǒng)100的方法300的流程圖。在步驟310處,計(jì)算機(jī)系統(tǒng)110獲得設(shè)計(jì)文件112。正如前面所提到的那樣,這可以涉及一位或多位設(shè)計(jì)者使用設(shè)計(jì)工具111來實(shí)際產(chǎn)生設(shè)計(jì)文件112。替換地,這可以涉及計(jì)算機(jī)系統(tǒng)110接收或獲得現(xiàn)有的設(shè)計(jì)文件112(例如從計(jì)算機(jī)系統(tǒng)110上的本地存儲(chǔ)裝置和/或通過網(wǎng)絡(luò)130從分開的計(jì)算機(jī)系統(tǒng)接收或獲得)。在步驟320處,計(jì)算機(jī)系統(tǒng)110使用保護(hù)模塊113來處理設(shè)計(jì)文件112,以便生成受保護(hù)的設(shè)計(jì)文件114。在可選步驟330處,計(jì)算機(jī)系統(tǒng)110使用輸出模塊115來處理受保護(hù)的設(shè)計(jì)文件114,以便生成適合于提供到印刷機(jī)120的數(shù)據(jù)文件116。如果沒有按照這種方式使用輸出模塊115,則數(shù)據(jù)文件116實(shí)際上與受保護(hù)的設(shè)計(jì)文件114相同。在步驟340處,計(jì)算機(jī)系統(tǒng)110例如通過網(wǎng)絡(luò)130把數(shù)據(jù)文件116提供到印刷機(jī)120。在步驟350處,印刷機(jī)120從計(jì)算機(jī)系統(tǒng)110接收數(shù)據(jù)文件116。在步驟360處,印刷機(jī)120使用所接收到的數(shù)據(jù)文件116來印刷并且因此生成印刷電子設(shè)備140。在可選步驟370處,將印刷電子設(shè)備140與項(xiàng)目150組合從而生成新的項(xiàng)目160。圖2示意性地圖示了計(jì)算機(jī)系統(tǒng)200的一個(gè)示例。系統(tǒng)200包括計(jì)算機(jī)202。計(jì)算機(jī)202包括:存儲(chǔ)介質(zhì)204,存儲(chǔ)器206,處理器208,接口210,用戶輸出接口212,用戶輸入接口214,以及網(wǎng)絡(luò)接口216,它們?nèi)客ㄟ^一條或多條通信總線218鏈接在一起。存儲(chǔ)介質(zhì)204可以是任何形式的非易失性數(shù)據(jù)存儲(chǔ)設(shè)備,比如硬盤驅(qū)動(dòng)器、磁盤、光盤、ROM等等當(dāng)中的一項(xiàng)或多項(xiàng)。存儲(chǔ)介質(zhì)204可以存儲(chǔ)供處理器208執(zhí)行的操作系統(tǒng),以使得計(jì)算機(jī)202運(yùn)轉(zhuǎn)。存儲(chǔ)介質(zhì)204還可以存儲(chǔ)一個(gè)或多個(gè)計(jì)算機(jī)程序(或者軟件或指令或代碼)。存儲(chǔ)器206可以是適合于存儲(chǔ)數(shù)據(jù)和/或計(jì)算機(jī)程序(或者軟件或指令或代碼)的任何隨機(jī)存取存儲(chǔ)器(存儲(chǔ)單元或易失性存儲(chǔ)介質(zhì))。處理器208可以是適合于執(zhí)行一個(gè)或多個(gè)計(jì)算機(jī)程序(比如存儲(chǔ)在存儲(chǔ)介質(zhì)204上和/或存儲(chǔ)器206中的計(jì)算機(jī)程序)的任何數(shù)據(jù)處理單元,其中一些計(jì)算機(jī)程序可以是根據(jù)本發(fā)明的實(shí)施例的計(jì)算機(jī)程序,或者是在由處理器208執(zhí)行時(shí)使得處理器208實(shí)施根據(jù)本發(fā)明的一個(gè)實(shí)施例的方法并且把系統(tǒng)200配置成根據(jù)本發(fā)明的一個(gè)實(shí)施例的系統(tǒng)的計(jì)算機(jī)程序。處理器208可以包括單個(gè)數(shù)據(jù)處理單元,或者并行地或彼此協(xié)作地操作的多個(gè)數(shù)據(jù)處理單元。處理器208在實(shí)施針對本發(fā)明的實(shí)施例的數(shù)據(jù)處理操作時(shí)可以向存儲(chǔ)介質(zhì)204和/或存儲(chǔ)器206存儲(chǔ)數(shù)據(jù)/從存儲(chǔ)介質(zhì)204和/或存儲(chǔ)器206讀取數(shù)據(jù)。接口210可以是用于提供去到處于計(jì)算機(jī)202外部或者可以從計(jì)算機(jī)202移除的設(shè)備222的接口的任何單元。設(shè)備222可以是數(shù)據(jù)存儲(chǔ)設(shè)備,例如光盤、磁盤、固態(tài)存儲(chǔ)設(shè)備等等當(dāng)中的一項(xiàng)或多項(xiàng)。設(shè)備222可以具有處理能力——例如所述設(shè)備可以是智能卡。接口210因此可以根據(jù)其接收自處理器208的一條或多條命令從設(shè)備222訪問數(shù)據(jù)、向設(shè)備222提供數(shù)據(jù)或者與設(shè)備222接口。用戶輸入接口214被布置成接收來自系統(tǒng)200的用戶或操作員的輸入。用戶可以通過連接到用戶輸入接口214或者與之通信的系統(tǒng)200的一個(gè)或多個(gè)輸入設(shè)備(比如鼠標(biāo)(或其他指示設(shè)備)226和/或鍵盤224)來提供該輸入。但是將認(rèn)識到的是,用戶可以通過一個(gè)或多個(gè)附加的或替換的輸入設(shè)備(比如觸摸屏)來向計(jì)算機(jī)202提供輸入。計(jì)算機(jī)202可以把通過用戶輸入接口214接收自輸入設(shè)備的輸入存儲(chǔ)在存儲(chǔ)器206中以供處理器208隨后訪問和處理,或者可以將其直接傳遞到處理器208,從而使得處理器208可以相應(yīng)地對用戶輸入做出響應(yīng)。用戶輸出接口212被布置成向系統(tǒng)200的用戶或操作員提供圖形/視覺和/或音頻輸出。因此,處理器208可以被布置成指令用戶輸出接口212形成表示所期望的圖形輸出的圖像/視頻信號,并且將該信號提供到與用戶輸出接口212連接的系統(tǒng)200的監(jiān)視器(或者屏幕或顯示單元)220。附加地或替換地,處理器208可以被布置成指令用戶輸出接口212形成表示所期望的音頻輸出的音頻信號,并且將該信號提供到與用戶輸出接口212連接的系統(tǒng)200的一個(gè)或多個(gè)揚(yáng)聲器221。最后,網(wǎng)絡(luò)接口216為計(jì)算機(jī)202提供從一個(gè)或多個(gè)數(shù)據(jù)通信網(wǎng)絡(luò)下載數(shù)據(jù)和/或向一個(gè)或多個(gè)數(shù)據(jù)通信網(wǎng)絡(luò)上傳數(shù)據(jù)的功能。將認(rèn)識到的是,在圖2中圖示并且在前面描述的系統(tǒng)200的架構(gòu)僅僅是示例性的,并且在本發(fā)明的實(shí)施例中可以使用具有不同架構(gòu)(例如具有少于圖2中所示出的組件或者具有圖2中所示出的之外的附加和/或替換組件)的其他計(jì)算機(jī)系統(tǒng)200。作為示例,計(jì)算機(jī)系統(tǒng)200可以包括以下各項(xiàng)當(dāng)中的一項(xiàng)或多項(xiàng):個(gè)人計(jì)算機(jī);服務(wù)器計(jì)算機(jī);平板設(shè)備;膝上型計(jì)算機(jī);等等。正如前面所提到的那樣,圖1的計(jì)算機(jī)系統(tǒng)100可以包括一個(gè)或多個(gè)圖2的計(jì)算機(jī)系統(tǒng)200。2—保護(hù)印刷電子設(shè)備或保證其安全圖4a示意性地圖示了在設(shè)計(jì)文件112被直接提供到輸出模塊115(而不是把設(shè)計(jì)文件112傳遞到保護(hù)模塊113,從而使得保護(hù)模塊113隨后可以處理設(shè)計(jì)文件以產(chǎn)生被提供到輸出模塊115的受保護(hù)的設(shè)計(jì)文件114)的情況下可以由印刷機(jī)120生成的示例性印刷電子設(shè)備140。印刷電子設(shè)備140包括實(shí)施所期望的功能(即操作、功能、處理、規(guī)程、數(shù)據(jù)流等等)的邏輯440。在一些實(shí)施例中,印刷電子設(shè)備140包括一個(gè)或多個(gè)傳感器410(比如光傳感器或溫度傳感器)——所述一個(gè)或多個(gè)傳感器410可以向邏輯440提供數(shù)據(jù)數(shù)值si以供所述邏輯處理。如圖4a中所示,如果印刷電子設(shè)備140包括所述一個(gè)多個(gè)傳感器410,則存在由一個(gè)或多個(gè)傳感器410提供到邏輯440的m1個(gè)數(shù)據(jù)數(shù)值si(i=1,…,m1,m1≥1)。在一些實(shí)施例中,印刷電子設(shè)備140包括一個(gè)或多個(gè)輸入端420(比如用于從比如項(xiàng)目150之類的另一個(gè)實(shí)體接收數(shù)據(jù)數(shù)值的輸入端,或者輸入端可以是用于通過無線數(shù)據(jù)通信路徑接收數(shù)據(jù)的無線數(shù)據(jù)通信輸入端)——所述一個(gè)或多個(gè)輸入端420可以向邏輯440提供數(shù)據(jù)數(shù)值xj以便由所述邏輯處理。如圖4a中所示,如果印刷電子設(shè)備140包括一個(gè)或多個(gè)輸入端420,則存在由一個(gè)或多個(gè)輸入端420提供到邏輯440的m2個(gè)數(shù)據(jù)數(shù)值xj(j=1,…,m2,m2≥1)。由邏輯440實(shí)施的處理的輸出或結(jié)果可以包括一個(gè)或多個(gè)數(shù)據(jù)數(shù)值。在一些實(shí)施例中,印刷電子設(shè)備140包括一個(gè)或多個(gè)傳送器460(比如無線數(shù)據(jù)傳送器),并且由邏輯440實(shí)施的處理的輸出或結(jié)果包括將被提供到所述一個(gè)或多個(gè)傳送器460的一個(gè)或多個(gè)數(shù)據(jù)數(shù)值ti。如圖4a中所示,如果印刷電子設(shè)備140包括一個(gè)或多個(gè)傳送器460,則存在由邏輯440輸出的m3個(gè)數(shù)據(jù)數(shù)值ti(i=1,…,m3,m3≥1)。在一些實(shí)施例中,印刷電子設(shè)備140包括一個(gè)或多個(gè)輸出端470(比如去到項(xiàng)目150的數(shù)據(jù)連接或者包括LED的輸出端),并且由邏輯440實(shí)施的處理的輸出或結(jié)果包括將被提供到一個(gè)或多個(gè)輸出端470的一個(gè)或多個(gè)數(shù)據(jù)數(shù)值yj。如圖4a中所示,如果印刷電子設(shè)備140包括一個(gè)或多個(gè)輸出端470,則存在由邏輯440輸出的m4個(gè)數(shù)據(jù)數(shù)值yj(j=1,…,m4,m4≥1)。在本發(fā)明的實(shí)施例中,設(shè)計(jì)文件112被編寫成使得邏輯440(或者印刷電子設(shè)備140)包括實(shí)施安全性相關(guān)操作(潛在地除了一項(xiàng)或多項(xiàng)其他操作之外)的一個(gè)或多個(gè)模塊。在這里,印刷電子設(shè)備140(或邏輯440)的“模塊”包括提供特定功能的一個(gè)或多個(gè)硬件組件(比如門、晶體管、寄存器以及其他電子組件)的集合——因此,所述一個(gè)或多個(gè)模塊包括此類硬件組件的一個(gè)或多個(gè)集合,其一起實(shí)施安全性相關(guān)操作。舉例來說,安全性相關(guān)操作可以使用秘密數(shù)據(jù)(比如密碼密鑰)——所述秘密數(shù)據(jù)可以由邏輯440存儲(chǔ),或者邏輯440可以被布置成實(shí)施密碼密鑰。安全性相關(guān)操作可以包括以下各項(xiàng)當(dāng)中的一項(xiàng)或多項(xiàng):(i)密碼操作(比如以下各項(xiàng)當(dāng)中的一項(xiàng)或多項(xiàng):加密操作;解密操作;數(shù)字簽名生成操作;數(shù)字簽名驗(yàn)證操作;散列生成操作;散列驗(yàn)證操作);(ii)條件訪問操作;(iii)數(shù)字權(quán)利管理操作;(iv)(密碼)密鑰管理操作。這樣的安全性相關(guān)操作是眾所周知的,并且因此這里將不進(jìn)行更加詳細(xì)的描述。但是一般來說,安全性相關(guān)操作是針對其有以下期望的操作:(a)防止攻擊者訪問正被用于實(shí)施安全性相關(guān)操作的一些或全部數(shù)據(jù)(例如秘密數(shù)據(jù));和/或(b)防止攻擊者修改或改變安全性相關(guān)操作的運(yùn)行或處理從而使得安全性相關(guān)操作按照未經(jīng)授權(quán)的方式實(shí)施或者提供攻擊者無權(quán)獲得的結(jié)果。安全性相關(guān)操作可以處理數(shù)據(jù)數(shù)值si(i=1,…,m1)和/或xj(j=1,…,m2)中的一個(gè)或多個(gè)以便生成輸出數(shù)據(jù),輸出數(shù)據(jù)例如可以包括數(shù)據(jù)數(shù)值ti(i=1,…,m3)和/或yj(j=1,…,m4)中的一個(gè)或多個(gè)?!鞍缀小杯h(huán)境是用于軟件數(shù)據(jù)處理的執(zhí)行環(huán)境,其中假設(shè)數(shù)據(jù)處理的攻擊者對于軟件數(shù)據(jù)處理的正被操作的數(shù)據(jù)(包括中間數(shù)值)、存儲(chǔ)器內(nèi)容以及執(zhí)行/過程流程具有完全的訪問權(quán)限和可見性。此外,在白盒環(huán)境中,假設(shè)攻擊者能夠修改軟件數(shù)據(jù)處理的正被操作的數(shù)據(jù)、存儲(chǔ)器內(nèi)容以及執(zhí)行/過程流程——這樣,攻擊者可以對數(shù)據(jù)處理進(jìn)行實(shí)驗(yàn)并且嘗試操縱數(shù)據(jù)處理的操作,目的是規(guī)避初始意圖的功能和/或識別秘密信息和/或出于其他目的。實(shí)際上,人們甚至可以假設(shè)攻擊者知曉正由數(shù)據(jù)處理實(shí)施的底層算法。但是數(shù)據(jù)處理可能需要使用秘密信息(例如一個(gè)或多個(gè)密碼密鑰),其中該信息需要對于攻擊者保持隱藏。類似地,將會(huì)希望防止攻擊者修改數(shù)據(jù)處理的執(zhí)行/控制流,例如防止攻擊者強(qiáng)制數(shù)據(jù)處理在判定塊之后采取并非合法執(zhí)行路徑的一條執(zhí)行路徑。“白盒”攻擊是當(dāng)在白盒環(huán)境中實(shí)施數(shù)據(jù)處理時(shí)攻擊者可以對軟件數(shù)據(jù)處理實(shí)施的攻擊(例如嘗試確定秘密信息或修改數(shù)據(jù)處理的執(zhí)行/控制流以達(dá)到所期望的目標(biāo)/目的)。白盒攻擊是眾所周知的。白盒攻擊是對軟件項(xiàng)目(或者代碼或指令)實(shí)施的攻擊,這是因?yàn)楣粽呖梢栽谲浖h(huán)境(比如調(diào)試器)中執(zhí)行(或者運(yùn)行或模擬)這樣的軟件項(xiàng)目,所述軟件環(huán)境使得攻擊者能夠在執(zhí)行期間監(jiān)測和修改存儲(chǔ)器中的數(shù)值和/或控制流——為此原因,白盒攻擊被認(rèn)為不適用于硬件設(shè)備。當(dāng)從計(jì)算機(jī)系統(tǒng)110被提供到印刷機(jī)120時(shí),數(shù)據(jù)文件116可能會(huì)被攻擊者攔截,攻擊者隨后可能能夠在仿真器/模擬器中對數(shù)據(jù)文件116進(jìn)行分析并且潛在地運(yùn)行它或使用它——因此數(shù)據(jù)文件116可以被視為對于白盒攻擊是開放的。即使數(shù)據(jù)文件116按照已加密形式被傳送到印刷機(jī)120,印刷機(jī)120仍將需要對數(shù)據(jù)文件116進(jìn)行解密以便實(shí)施印刷過程從而生成印刷電子設(shè)備140——在此時(shí),攻擊者可能能夠?qū)嵤┌缀泄?。類似地,攻擊者可能擁有由印刷機(jī)生成的印刷電子設(shè)備140。正如前面所提到的那樣,用以保護(hù)電子電路免于硬件攻擊(與軟件白盒攻擊不同)的傳統(tǒng)技術(shù)不太適合于保護(hù)印刷電子設(shè)備140,并且因此攻擊者可能能夠更加容易地實(shí)施針對印刷電子設(shè)備140本身的硬件攻擊。因此,保護(hù)模塊113的目的是基于初始設(shè)計(jì)文件112生成受保護(hù)的設(shè)計(jì)文件114。保護(hù)模塊113生成受保護(hù)的設(shè)計(jì)文件114,從而使得印刷電子設(shè)備140包括按照模糊化方式實(shí)施安全性相關(guān)操作的一個(gè)或多個(gè)模塊,從而為安全性相關(guān)操作提供針對硬件攻擊的抵抗性。后面將更加詳細(xì)地描述關(guān)于如何能夠?qū)嵤┻@一點(diǎn)的示例。但是,具體來說,已經(jīng)被創(chuàng)造性地認(rèn)識到的是,雖然白盒保護(hù)技術(shù)在傳統(tǒng)上已被用來保護(hù)軟件項(xiàng)目(因?yàn)檐浖?xiàng)目對于白盒攻擊是開放的,而白盒攻擊不適合于硬件設(shè)備),并且雖然傳統(tǒng)的電子設(shè)備已經(jīng)使用了其他保護(hù)技術(shù)來抵御硬件攻擊(比如使用多層金屬互連來添加金屬絲網(wǎng)或者施加難以移除的環(huán)氧樹脂層),但是可以通過對印刷電子設(shè)備所實(shí)施的功能應(yīng)用白盒技術(shù)來保護(hù)對于硬件攻擊更加開放的印刷電子設(shè)備,從而當(dāng)攻擊者正在對印刷電子設(shè)備實(shí)施硬件攻擊時(shí)使得更加難以理解正被實(shí)施的功能或者正被使用的數(shù)據(jù)。在一些實(shí)施例中,將使用一個(gè)或多個(gè)雙射函數(shù)(或者變換或變形)。雙射函數(shù)是單射(即1對1映射)并且滿射(即映射到整個(gè)特定數(shù)值范圍上)的函數(shù)。如果針對函數(shù)T的可能輸入數(shù)值的域是域Dom,并且如果函數(shù)T是單射函數(shù)(使得當(dāng)且僅當(dāng)a=b時(shí),T(a)=T(b)),則T是從Dom到范圍T(Dom)={T(a):aDom}上的雙射函數(shù)。初始的簡單示例將幫助理解雙射函數(shù)T的使用如何能夠幫助提供針對攻擊的保護(hù)。在該例中,雙射函數(shù)T是針對某一質(zhì)數(shù)和正整數(shù)n的伽羅瓦(Galois)域中的線性變換,即。舉例來說,如果數(shù)據(jù)數(shù)值si(i=1,…,m1)和xj(j=1,…,m2)是Z比特的數(shù)據(jù)數(shù)值,則它們可以被視為伽羅瓦域的元素,從而=2和n=Z??紤]根據(jù)r=G(s1,s2)=s1+s2對伽羅瓦域中的元素s1和s2(但是,當(dāng)然可以使用其他數(shù)據(jù)數(shù)值si或xj)進(jìn)行運(yùn)算的預(yù)定函數(shù)G,其中+是伽羅瓦域中的加法。在該伽羅瓦域中,加法s1+s2與異或(XOR)運(yùn)算相同,因此r=G(s1,s2)=s1⊕s2。設(shè)s1*、s2*和r*是根據(jù)伽羅瓦域中的相應(yīng)線性變換T1、T2和T3的s1、s2和r的經(jīng)過變換的版本,因此對于伽羅瓦域中的任意非零常數(shù)a、c和e以及伽羅瓦域中的任意常數(shù)b、d和f(因此常數(shù)a、c和e可以從中隨機(jī)選擇,并且常數(shù)b、d和f可以從中隨機(jī)選擇),s1*=T1(s1)=a?s1+b,s2*=T2(s2)=c?s2+d以及r*=T3(r)=e?r+f。于是r*=e?(s1+s2)+f=e?(a-1(s1*+b)+c-1(s2*+d))+f=g?s1*+h?s2*+i,其中g(shù)=e?a-1,h=e?c-1,并且i=e?(a-1b+c-1d)+f。因此,給定輸入s1和s2的經(jīng)過變換的版本s1*=T1(s1)和s2*=T2(s2),可以計(jì)算出結(jié)果r的經(jīng)過變換的版本r*=T3(r),而不必移除任何變換(也就是說不必從版本s1*和s2*導(dǎo)出s1和/或s2)。具體來說,在通過變換T1、T2和T3的相應(yīng)參數(shù)(針對T1的a和b,針對T2的c和d,針對T3的e和f)定義了變換T1、T2和T3之后,可以根據(jù)G*(s1*,s2*)=g?s1*+h?s2*+i來實(shí)施函數(shù)G的經(jīng)過變換的版本G*,其中g(shù)=e?a-1,h=e?c-1,并且i=e?(a-1b+c-1d)+f,從而可以計(jì)算r*=G*(s1*,s2*),而無需作為處理中的中間步驟來確定/揭示s1或s2。隨后可以從結(jié)果r的經(jīng)過變換的版本r*=G*(s1*,s2*)獲得結(jié)果r,因?yàn)閞=e-1(r*+f))——因此線性變換T4(其是T3的逆)可以被用來從經(jīng)過變換的版本r*獲得結(jié)果r,其中r=T4(r*)=e-1r*+e-1f。替換地,結(jié)果r的經(jīng)過變換的版本r*可以是去到后續(xù)函數(shù)的輸入。換句話說,給定對輸入s1和s2進(jìn)行運(yùn)算以產(chǎn)生結(jié)果r的函數(shù)G,如果規(guī)定了變換T1、T2和T3(例如通過隨機(jī)地選擇針對變換的參數(shù)而隨機(jī)地規(guī)定,或者基于一些其他參數(shù)/數(shù)據(jù)來規(guī)定),則可以生成/實(shí)施函數(shù)G的經(jīng)過變換的版本G*,其中函數(shù)G*對經(jīng)過變換的輸入s1*=T1(s1)和s2*=T2(s2)進(jìn)行運(yùn)算,以便根據(jù)r*=g?s1*+h?s2*+i來產(chǎn)生經(jīng)過變換的結(jié)果r*=T3(r)。如果一個(gè)人在白盒環(huán)境中實(shí)施函數(shù)G*,則此人無法識別出底層函數(shù)G正在實(shí)施什么運(yùn)算,并且此人也無法確定實(shí)際的結(jié)果r也無法確定輸入s1和s2(因?yàn)檫@些數(shù)值在實(shí)施函數(shù)G*時(shí)從未被揭示)。作為另一個(gè)示例,假設(shè)函數(shù)G根據(jù)r=G(s1)=s1+k在伽羅瓦域中對元素s1(但是當(dāng)然可以使用其他數(shù)據(jù)數(shù)值si或xj)進(jìn)行運(yùn)算,其中+是伽羅瓦域中的加法,并且k是預(yù)定的秘密數(shù)值(比如密碼密鑰)。在該伽羅瓦域中,加法s1+k與異或運(yùn)算相同,因此r=G(s1)=s1⊕k。設(shè)s1*和r*是根據(jù)伽羅瓦域中的相應(yīng)線性變換T1和T3的s1和r的經(jīng)過變換的版本,因此對于伽羅瓦域中的任意非零常數(shù)a和e以及伽羅瓦域中的任意常數(shù)b和f(因此常數(shù)a和e可以從中隨機(jī)選擇,并且常數(shù)b和f可以從中隨機(jī)選擇),s1*=T1(s1)=a?s1+b以及r*=T3(r)=e?r+f。于是r*=e?(s1+k)+f=e?(a-1(s1*+b)+k)+f=g?s1*+h,其中g(shù)=e?a-1,并且h=e?(a-1b+k)+f。因此,給定輸入s1的經(jīng)過變換的版本s1*=T1(s1),可以計(jì)算出結(jié)果r的經(jīng)過變換的版本r*=T3(r),而不必移除任何變換(也就是說不必從版本s1*導(dǎo)出s1)。具體來說,已經(jīng)通過變換T1和T3的相應(yīng)參數(shù)(針對T1的a和b,針對T3的e和f)定義了變換T1和T3,可以根據(jù)G*(s1*)=g?s1*+h來實(shí)施函數(shù)G的經(jīng)過變換的版本G*,其中g(shù)=e?a-1,h=e?(a-1b+k)+f,從而可以計(jì)算r*=G*(s1*),而無需確定/揭示s1,并且不會(huì)使得秘密數(shù)值k可由攻擊者獲得。隨后可以從結(jié)果r的經(jīng)過變換的版本r*=G*(s1*,s2*)獲得結(jié)果r,因?yàn)閞=e-1(r*+f))——因此線性變換T4(其是T3的逆)可以被用來從經(jīng)過變換的版本r*獲得結(jié)果r,其中r=T4(r*)=e-1r*+e-1f。替換地,結(jié)果r的經(jīng)過變換的版本r*可以是去到后續(xù)函數(shù)的輸入。換句話說,給定對輸入s1進(jìn)行運(yùn)算以產(chǎn)生結(jié)果r的函數(shù)G,如果規(guī)定了變換T1和T3(例如通過隨機(jī)地選擇針對變換的參數(shù)而隨機(jī)地規(guī)定,或者基于一些其他參數(shù)/數(shù)據(jù)而規(guī)定),則可以生成/實(shí)施函數(shù)G的經(jīng)過變換的版本G*,其中函數(shù)G*對經(jīng)過變換的輸入s1*=T1(s1)進(jìn)行運(yùn)算,以便根據(jù)r*=g?s1*+h產(chǎn)生經(jīng)過變換的結(jié)果r*=T3(r)。如果一個(gè)人在白盒環(huán)境中實(shí)施函數(shù)G*,則此人無法識別出底層函數(shù)G正在實(shí)施什么運(yùn)算,并且此人也無法確定實(shí)際的結(jié)果r,也無法確定輸入s1,也無法確定秘密密鑰k(因?yàn)檫@些數(shù)值在實(shí)施函數(shù)G*時(shí)從未被揭示)。要提到的是,在前面的示例中,T1和T2之一或全部二者可以是恒等變換(也就是說如果對于s1的所有數(shù)值都有T1(s1)=s1,則T1是恒等變換,因此在前面的示例中a=1并且b=0,并且如果T2(s2)=s2則T2是恒等變換,因此在前面的示例中c=1并且d=0)。如果是這種情況,則實(shí)施函數(shù)G*的人可以識別出由輸入s1采取的數(shù)值(如果T1是恒等變換的話)和/或由輸入s2采取的數(shù)值(如果T2是恒等變換的話)。但是只要T3不是恒等變換,則此人就無法識別出底層函數(shù)G正在實(shí)施什么運(yùn)算,并且此人也無法確定實(shí)際的結(jié)果r。類似地,在前面的示例中,T3可以是恒等變換(也就是說如果對于r的所有數(shù)值都有T3(r)=r則T3是恒等變換,因此在前面的示例中e=1并且f=0)。如果是這種情況,則實(shí)施函數(shù)G*的人可以識別出由輸出r采取的數(shù)值。但是只要T1和T2之一或全部二者不是恒等變換,則此人就無法識別出底層函數(shù)G正在實(shí)施什么運(yùn)算,并且此人也無法確定初始輸入s1和s2之一或全部二者。將認(rèn)識到的是,其他函數(shù)G可以被實(shí)施成對應(yīng)的“經(jīng)過變換的版本”G*,其中針對函數(shù)G*的(一項(xiàng)或多項(xiàng))輸入是根據(jù)相應(yīng)單射(1對1)變換的針對函數(shù)G的(一項(xiàng)或多項(xiàng))輸入的經(jīng)過變換的版本,并且函數(shù)G*的(一項(xiàng)或多項(xiàng))輸出是根據(jù)相應(yīng)單射變換的函數(shù)G的(一項(xiàng)或多項(xiàng))輸出的經(jīng)過變換的版本。所述變換不必一定是如前面所闡述的線性變換,而可以是任何其他種類的單射變換。因此,給定具有u項(xiàng)輸入α1,…,αu和v項(xiàng)輸出β1,…,βv的函數(shù)G,可以實(shí)施函數(shù)G的經(jīng)過變換的版本G*,其中G*使輸入α1,…,αu的經(jīng)過變換的版本α1*,…,αu*作為其輸入,并且把輸出β1,…,βv的經(jīng)過變換的版本β1*,…,βv*輸出,其中針對單射函數(shù)T1,…,Tu+v,αi*=Ti(αi)并且βi*=Ti+u(βi)。兩個(gè)或更多函數(shù)Ti可以彼此相同。后面討論這一點(diǎn)可以針對任何函數(shù)G來進(jìn)行的事實(shí)。正如后面所闡述的那樣,異或運(yùn)算連同基于常數(shù)的條件分支形成圖靈完備的系統(tǒng)。這意味著任何數(shù)學(xué)函數(shù)都可以僅使用(a)零個(gè)或更多個(gè)異或運(yùn)算以及(b)基于常數(shù)的零個(gè)或多個(gè)條件分支來實(shí)施。圖靈機(jī)是根據(jù)規(guī)則表在紙帶條上操縱符號的概念設(shè)備。盡管其簡單,但是圖靈機(jī)可以被適配成仿真任何計(jì)算機(jī)算法的邏輯。圖靈機(jī)對于在紙帶上進(jìn)行數(shù)學(xué)運(yùn)算的機(jī)器進(jìn)行數(shù)學(xué)建模。在該紙帶上有符號,機(jī)器可以使用紙帶頭讀取和寫入符號,每次一個(gè)。運(yùn)算由基本指令(比如“在狀態(tài)42中,如果所看到的符號是0,則寫入1;如果所看到的符號是1,則改變到狀態(tài)17;在狀態(tài)17中,如果所看到的符號是0,則寫入1并且改變到狀態(tài)6”等等)的有限集合完全確定。更精確地說,圖靈機(jī)由以下各項(xiàng)構(gòu)成:1、被劃分成一個(gè)接一個(gè)的單元格的紙帶。每一個(gè)單元格包含來自某一有限字母表的符號。所述字母表包含特殊的空白符號(在這里被寫成“B”)以及一個(gè)或多個(gè)其他符號。假設(shè)紙帶可任意地向左和向右擴(kuò)展,也就是說總是為圖靈機(jī)提供對于其計(jì)算所需要的數(shù)量的紙帶。假設(shè)之前沒有被寫入的單元格填充有空白符號。2、可以在紙帶上讀取和寫入符號并且每次把紙帶左和右移動(dòng)一個(gè)(并且僅一個(gè))單元格的頭。3、存儲(chǔ)圖靈機(jī)的當(dāng)前狀態(tài)的狀態(tài)寄存器,所述狀態(tài)是有限的許多狀態(tài)當(dāng)中的一個(gè)。存在用來初始化狀態(tài)寄存器的一個(gè)特殊的起始狀態(tài)。4、由一個(gè)或多個(gè)指令(每一個(gè)指令通常被表達(dá)成相應(yīng)五元組Siaj→Si1aj1dk)構(gòu)成的有限表(其有時(shí)被稱作動(dòng)作表或轉(zhuǎn)移函數(shù)),其規(guī)定:如果圖靈機(jī)當(dāng)前處于狀態(tài)Si并且當(dāng)前已經(jīng)從紙帶讀取了符號aj(也就是說當(dāng)前處于頭下的符號是aj),則圖靈機(jī)應(yīng)當(dāng)實(shí)施以下操作序列:-寫入aj1以取代當(dāng)前的符號aj。(符號aj1可以是空白符號)。-控制由dk描述的頭的位置。dk可以具有以下數(shù)值:“L”,用于表明把頭向左移動(dòng)一個(gè)單元格,“R”,用于表明把頭向右移動(dòng)一個(gè)單元格;或者“N”,用于表明不移動(dòng)頭,也就是保持相同的位置。-把當(dāng)前狀態(tài)設(shè)定到由Si1規(guī)定的狀態(tài)(Si1可以與Si相同或不同)。圖靈機(jī)是眾所周知的,并且因此這里將不進(jìn)行更加詳細(xì)的描述。如果可以表明動(dòng)作表中的任何可能的5元組都可以使用異或運(yùn)算和基于常數(shù)的條件分支來實(shí)施,則我們知道基于異或運(yùn)算和基于常數(shù)的條件分支的處理系統(tǒng)是圖靈完備的(這是因?yàn)槿魏魏瘮?shù)或計(jì)算機(jī)程序都可以被實(shí)施或建模成圖靈機(jī),并且該圖靈機(jī)的動(dòng)作表中的所有5元組都可以使用異或運(yùn)算和基于常數(shù)的條件分支來實(shí)施)??紤]圖靈機(jī)中的元素與僅使用異或和基于常數(shù)的條件分支的系統(tǒng)中的元素之間的以下映射:(a)圖靈機(jī)的字母表尺寸被設(shè)定到字母表的尺寸。(b)每一個(gè)狀態(tài)被實(shí)施成具有標(biāo)識符(其被用來跳躍)的代碼塊。因此,圖靈機(jī)中的下一個(gè)狀態(tài)可以通過以當(dāng)前狀態(tài)和存儲(chǔ)器的內(nèi)容為條件的GoTo語句來實(shí)現(xiàn)(也就是基于常數(shù)的條件分支)。(c)紙帶可以被實(shí)施成保存字母表中的元素的二進(jìn)制表示的存儲(chǔ)器。因此,紙帶的移動(dòng)可以通過改變指向存儲(chǔ)器的地址來實(shí)現(xiàn)。(d)使用被稱作“地址”的全局變量來指向等效于頭之下的紙帶節(jié)段的存儲(chǔ)器位置。(e)我們使用存儲(chǔ)器內(nèi)容的地址來讀取存儲(chǔ)器內(nèi)容。為了寫入到存儲(chǔ)器中,我們把存儲(chǔ)器內(nèi)容與產(chǎn)生所期望的數(shù)值的常數(shù)進(jìn)行異或。后面的偽代碼示出了典型的狀態(tài)實(shí)施方式(針對具有標(biāo)識符“i”的狀態(tài)),其中數(shù)值X1,X2,…Xq是常數(shù),并且“Addr”是指向存儲(chǔ)器位置的指針。下面示出的示例說明了遞增、遞減和不改變地址“Addr”變量的三種可能性。因此,動(dòng)作表中的任何可能的5元組都可以使用異或運(yùn)算和條件分支來實(shí)施。因此,基于異或運(yùn)算和條件分支的系統(tǒng)是圖靈完備的,也就是說任何圖靈機(jī)都可以僅使用異或(針對前面的點(diǎn)(e))和條件跳躍(針對前面的點(diǎn)(b))來實(shí)施。正如前面所表明的那樣,可以在經(jīng)過變換的域中(通過函數(shù)G*)實(shí)施等效于r=s1⊕s2的運(yùn)算,而從不移除對r*、s1*或s2*的變換。使用編程語言的能力實(shí)施條件跳躍。這意味著可以在經(jīng)過變換的域中實(shí)施任何數(shù)學(xué)運(yùn)算,而從不移除對正被處理的數(shù)據(jù)元素的變換。換句話說,給定具有u項(xiàng)輸入α1,…,αu(u≥1)和v項(xiàng)輸出β1,…,βv(v≥1)的任何函數(shù)G,可以實(shí)施函數(shù)G的經(jīng)過變換的版本G*,其中G*是使輸入α1,…,αu的經(jīng)過變換的版本α1*,…,αu*作為其(一個(gè)或多個(gè))輸入并且將(一個(gè)或多個(gè))輸出β1,…,βv的經(jīng)過變換的版本β1*,…,βv*輸出的函數(shù),其中針對單射函數(shù)T1,…,Tu+v,αi*=Ti(αi)和βi*=Ti+u(βi)。兩個(gè)或更多函數(shù)Ti有可能可以彼此相同。正如前面所闡述的那樣,單射函數(shù)T1,…,Tu+v可以被定義(例如隨機(jī)生成的單射函數(shù)),并且給定所定義的特定單射函數(shù)T1,…,Tu+v,得到(或者定義/獲得/實(shí)施)函數(shù)G的特定經(jīng)過變換的版本G*。使用雙射函數(shù)T來模糊預(yù)定函數(shù)的實(shí)施以及此類使用的各種方法在本
技術(shù)領(lǐng)域:
內(nèi)是眾所周知的——例如參見“White-BoxCryptographyandanAESImplementation”,byStanleyChow,PhilipEisen,HaroldJohnson,andPaulC.VanOorschot,inSelectedAreasinCryptography:9thAnnualInternationalWorkshop,SAC2002,St.John’s,Newfoundland,Canada,August15-16,2012;“AWhite-BoxDESImplementationforDRMApplications”,byStanleyChow,PhilEisen,HaroldJohnson,andPaulC.vanOorschot,inDigitalRightsManagement:ACMCCS-9Workshop,DRM2002,Washington,DC,USA,November18,2002;US61/055,694;WO2009/140774;US6779114;US7350085;US7397916;US6594761;以及US6842862,這些文獻(xiàn)的全部公開內(nèi)容通過引用被合并在此。圖4b示意性地圖示了根據(jù)本發(fā)明的實(shí)施例的示例性印刷電子設(shè)備140,即當(dāng)設(shè)計(jì)文件112受到保護(hù)模塊113的保護(hù)或保護(hù)模塊113保證設(shè)計(jì)文件112安全從而使得數(shù)據(jù)文件116基于受保護(hù)的設(shè)計(jì)文件114時(shí)印刷機(jī)120可以生成的印刷電子設(shè)備。具體來說,保護(hù)模塊113被布置成基于雙射變換應(yīng)用前述保護(hù)技術(shù)。圖4b的印刷電子設(shè)備140類似于圖4a的印刷電子設(shè)備140(并且因此在適當(dāng)?shù)那闆r下使用相同的附圖標(biāo)記)。如圖4b中所示,保護(hù)模塊113被布置成把設(shè)計(jì)文件112轉(zhuǎn)換成受保護(hù)的設(shè)計(jì)文件114,從而使得所得到的/對應(yīng)的印刷電子設(shè)備140包括第一變換模塊430、第二變換模塊450以及取代圖4a的邏輯440的經(jīng)過變換的邏輯480。第一變換模塊430被布置成接收數(shù)據(jù)數(shù)值si(i=1,…,m1)和/或數(shù)據(jù)數(shù)值xj(j=1,…,m2),并且應(yīng)用一項(xiàng)或多項(xiàng)雙射變換以便基于所接收到的數(shù)據(jù)數(shù)值生成經(jīng)過變換的數(shù)據(jù)數(shù)值uk(k=1,…,m5)。在一些實(shí)施例中,每一個(gè)經(jīng)過變換的數(shù)據(jù)數(shù)值uk是在相應(yīng)變換Tk下的數(shù)據(jù)數(shù)值si(i=1,…,m1)和/或數(shù)據(jù)數(shù)值xj(j=1,…,m2)中對應(yīng)數(shù)據(jù)數(shù)值的經(jīng)過變換的版本,即,針對索引i=1,…,m1或者索引j=1,…,m2,uk=Tk(si)或uk=Tk(xj)——因此,m5=m1+m2。在這里,相應(yīng)變換可以彼此相同;替換地,對于一些索引1≤k1<k2≤m5,uk1和uk2可以具有不同的相應(yīng)變換Tk1和Tk2。替換地,一個(gè)或多個(gè)經(jīng)過變換的數(shù)據(jù)數(shù)值uk基于來自包括數(shù)據(jù)數(shù)值si(i=1,…,m1)和/或數(shù)據(jù)數(shù)值xj(j=1,…,m2)的集合的兩個(gè)或更多數(shù)據(jù)數(shù)值——舉例來說,對于一些索引i和j,uk=Tk(si,xj)。第一變換模塊430被布置成把經(jīng)過變換的數(shù)據(jù)數(shù)值uk(k=1,…,m5)提供到經(jīng)過變換的邏輯480。正如前面所描述的那樣,由圖4a的邏輯440實(shí)施的函數(shù)/運(yùn)算可以被轉(zhuǎn)換成對經(jīng)過變換的數(shù)據(jù)數(shù)值uk(k=1,…,m5)而不是數(shù)據(jù)數(shù)值si(i=1,…,m1)和/或數(shù)據(jù)數(shù)值xj(j=1,…,m2)進(jìn)行運(yùn)算或者對其進(jìn)行使用的對應(yīng)函數(shù)/運(yùn)算。圖4b的經(jīng)過變換的邏輯480實(shí)施對經(jīng)過變換的數(shù)據(jù)數(shù)值uk(k=1,…,m5)進(jìn)行運(yùn)算或者對其進(jìn)行使用的這些對應(yīng)函數(shù)/運(yùn)算。正如前面所描述的那樣,經(jīng)過變換的邏輯480可以生成并且輸出一項(xiàng)或多項(xiàng)經(jīng)過變換的結(jié)果(或數(shù)值)vk(k=1,…,m6)。因此,經(jīng)過變換的邏輯480可以把經(jīng)過變換的結(jié)果vk(k=1,…,m6)提供或輸出到第二變換模塊450。第二變換模塊450被布置成接收經(jīng)過變換的結(jié)果vk(k=1,…,m6),并且應(yīng)用一項(xiàng)或多項(xiàng)雙射變換以生成輸出數(shù)據(jù)ti(k=1,…,m3)和/或yj(j=1,…,m4)。這是按照類似于第一變換模塊430的操作方式的方式實(shí)現(xiàn)的。第一變換模塊430和/或第二變換模塊450可以使用一個(gè)或多個(gè)相應(yīng)查找表來實(shí)施其相應(yīng)雙射中的一項(xiàng)或多項(xiàng)。作為示例,考慮如下情況:數(shù)據(jù)數(shù)值si是三比特?cái)?shù)值,具有二進(jìn)制表示(b2b1b0)(對于i=0,…,2,bi=0或1)。初始設(shè)計(jì)文件112可以被布置成使得邏輯440如圖5中所示的那樣對數(shù)據(jù)數(shù)值si實(shí)施函數(shù)F,也就是r=F(si),其中r的二進(jìn)制表示是(r2r1r0),并且r2=s2,r1=s1⊕s2,以及r0=s0。通過T(x)=(11x+9)mod15來定義雙射變換T:GF(24)→GF(24)。在該示例中,變換T將被用來把輸入數(shù)據(jù)數(shù)值si轉(zhuǎn)換成經(jīng)過變換的數(shù)據(jù)數(shù)值T(si)以供函數(shù)F的經(jīng)過變換的版本(即FT)對其進(jìn)行運(yùn)算,并且相同的變換T將被用來把函數(shù)FT的輸出轉(zhuǎn)換回到輸出r。保護(hù)模塊113因此將確定變換函數(shù)FT,從而使得經(jīng)過變換的邏輯480實(shí)施函數(shù)FT而不是函數(shù)F。因此,我們需要FT(T(si))=T(F(si)),從而使得對于si的所有可能數(shù)值,T-1(FT(T(si)))=F(si)。下面的表1列出了針對si的可能數(shù)值的范圍的r=F(si)的可能數(shù)值,連同T(si)和FT(T(si))的對應(yīng)數(shù)值。sisi的二進(jìn)制版本r=F(si)的二進(jìn)制版本rT(si)FT(T(si))000000009910010011552010010211301101131212410011068051111117411611010040871011015114表1。在該示例中,變換T被定義在4比特?cái)?shù)上。因此,對于除了r=T(si)的有效數(shù)值之外的所有輸入(也就是對于除了前面表1的第5列中的數(shù)值之外的針對函數(shù)FT的輸入,也就是數(shù)值2、3、6、10、13、14、15),函數(shù)FT可以使其對應(yīng)輸出被選擇成任何數(shù)值,例如隨機(jī)數(shù)值。因此,表2可以作為定義函數(shù)FT的示例性查找表。r=T(si)r的二進(jìn)制版本FT(r)FT(r)的二進(jìn)制版本000008100010001100012001050101300111311014010011101150101501016011081000701111211008100000000910019100110101020010111011401001211001211001311015010114111060110151111131101表2。將認(rèn)識到的是,使得針對前面的函數(shù)F的輸入是3比特?cái)?shù)值并且變換T的輸入和輸出是4比特?cái)?shù)值純粹是示例,并且針對函數(shù)F的(一項(xiàng)或多項(xiàng))輸入可以包括任何數(shù)目M個(gè)比特,并且變換T的(一項(xiàng)或多項(xiàng))輸入和(一項(xiàng)或多項(xiàng))輸出可以類似地包括任何數(shù)目N個(gè)比特,其中N≥M。如果N>M,則(如前面當(dāng)N=4和M=3時(shí)所示)可以為來自變換T的特定輸出(也就是為對應(yīng)于針對變換T的輸入的變換T的輸出,該針對變換T的輸入將不會(huì)從針對函數(shù)F的有效輸入出現(xiàn))賦予各種數(shù)值(例如隨機(jī)地賦值)。因此,通過使N>M,可以使用變換T的不同版本(并且因此可以實(shí)施印刷電子設(shè)備140的不同版本),其中所述不同版本在針對這些特定輸出的數(shù)值方面彼此不同。這不會(huì)影響所述不同版本的正常/意圖功能(這是因?yàn)轭A(yù)期在實(shí)踐中將不會(huì)使用變換T的多樣化輸出,這是因?yàn)樗鼈儗?yīng)于將不會(huì)從針對函數(shù)F的有效輸入出現(xiàn)的針對變換T的輸入)。這例如可以被用來幫助識別特定批次的印刷電子設(shè)備140和/或幫助追蹤各個(gè)個(gè)體印刷電子設(shè)備140和/或幫助追蹤受保護(hù)的設(shè)計(jì)文件114的拷貝和/或數(shù)據(jù)文件116的拷貝——舉例來說,被賦予這些輸出(也就是對應(yīng)于將不會(huì)從針對函數(shù)F的有效輸入出現(xiàn)的針對變換T的輸入的變換T的輸出)的數(shù)值可以被用來編碼或表示用于追蹤版本的標(biāo)識符或標(biāo)識數(shù)值。這樣的多樣性還使得攻擊者更加難以使用一批次的多樣化印刷電子設(shè)備140來實(shí)施重復(fù)攻擊??梢酝ㄟ^一項(xiàng)或多項(xiàng)邏輯/布爾表達(dá)式或運(yùn)算來實(shí)施查找表,查找表特別適合于在硬件中實(shí)施。假設(shè)針對查找表的輸入是M比特?cái)?shù)值的輸入x,其中x的第k個(gè)比特是bk,因此x的二進(jìn)制表示是bMbM-1…b2b1(使得對于k=1,…,M,bk是0或1)。在后面描述的示例中,M=8,因此x的二進(jìn)制表示是b8b7b6b5b4b3b2b1。還假設(shè)來自查找表的輸出(也就是響應(yīng)于接收到輸入x所查找到的數(shù)值)是N比特?cái)?shù)值的輸出y,其中y的第k個(gè)比特是ck,因此y的二進(jìn)制表示是cNcN-1…c2c1(使得對于k=1,…,N,ck是0或1)。在后面描述的示例中,N=8,因此y的二進(jìn)制表示是c8c7c6c5c4c3c2c1。這在圖6a中被示意性地圖示。當(dāng)然將認(rèn)識到的是,輸入x可以包括不同數(shù)目的比特,并且輸出y可以包括不同數(shù)目的比特(輸出y的比特?cái)?shù)目可以不同于輸入x的比特?cái)?shù)目),因此使得x和y都為8比特?cái)?shù)值純粹是出于說明性目的。將認(rèn)識到的是,每一個(gè)輸出比特ck可以被計(jì)算或表達(dá)成被應(yīng)用于輸入比特bi的相應(yīng)邏輯表達(dá)式Bk,也就是ck=Bk(b1,b2,…,bM)。這在圖6b中關(guān)于輸出比特c4被示意性地圖示。函數(shù)Bk可以使用一項(xiàng)或多項(xiàng)邏輯與(AND)(與在這里由表示)、零項(xiàng)或更多項(xiàng)邏輯或(OR)(或在這里由表示)以及零項(xiàng)或更多項(xiàng)邏輯非(NOT)(非在這里由表示)來表達(dá)。具體來說,假設(shè)查找表針對n個(gè)輸入數(shù)值X1,…,Xn(也就是說當(dāng)x取得X1,…,Xn當(dāng)中的任一個(gè)的數(shù)值時(shí))得到取得數(shù)值1的輸出比特ck,并且針對輸入x的所有其他可能數(shù)值,ck取得數(shù)值0。對于每一個(gè)i=1,…,n,設(shè)Ri是由定義的對應(yīng)邏輯表達(dá)式(也就是針對j=1,…,M的表達(dá)式b’j的與),其中對于j=1,…,M,如果輸入數(shù)值Xi的第j個(gè)比特bj是1則b’j=bj,并且如果輸入數(shù)值Xi的第j個(gè)比特bj是0則b’j=bj。舉例來說,對于十進(jìn)制的8比特輸入數(shù)值Xi=53或者二進(jìn)制的(00110101),則。因此,僅僅對于輸入數(shù)值53得出數(shù)值1。于是,Bk可以被定義成,即,通過把表達(dá)式Ri(i=1,…,n)一起或(如果n=1,則不必進(jìn)行或)。于是Bk僅對于取得X1,…,Xn之一的數(shù)值的輸入才得出數(shù)值1。舉例來說,假設(shè)n=3,并且只有在輸入x取得數(shù)值31(=二進(jìn)制(00011111))、53(=二進(jìn)制(00110101))或149(=二進(jìn)制(10010101))的情況下,c4才取得數(shù)值1。于是:因此B4可以被表達(dá)成:當(dāng)然存在表達(dá)Bk的更加高效或優(yōu)化的方式,即,利用更少的邏輯運(yùn)算來表達(dá)。舉例來說,人們可以將前面的B4表達(dá)如下:并且進(jìn)一步更加優(yōu)化的表達(dá)式也是可能的。實(shí)際上,一般來說預(yù)期的是,優(yōu)化的表達(dá)式可以包含前面通過把子表達(dá)式Ri簡單地或在一起所生成的“自然(naive)”邏輯表達(dá)式的10%到20%之間。因此,查找表可以被視為通過函數(shù)B1,…,BN實(shí)施,使得在給定輸入x=bMbM-1…b2b1的情況下,對于k=1,…,N,對應(yīng)輸出y=cNcN-1…c2c1由ck=Bk(b1,b2,…,bM)定義。因此,保護(hù)模塊113修改設(shè)計(jì)文件112中的代碼或設(shè)計(jì),從而使得受保護(hù)的設(shè)計(jì)文件114描述(或者定義或?qū)嵤┙?jīng)過變換的邏輯480而不是經(jīng)過變換的邏輯440,并且使得受保護(hù)的設(shè)計(jì)文件114描述(或者定義或?qū)嵤┑谝蛔儞Q模塊430和第二變換模塊450。圖4c示意性地圖示了根據(jù)本發(fā)明的實(shí)施例的另一個(gè)示例性印刷電子設(shè)備140,也就是當(dāng)設(shè)計(jì)文件112受到保護(hù)模塊113保護(hù)或由保護(hù)模塊113保證設(shè)計(jì)文件112的安全從而使得數(shù)據(jù)文件116基于受保護(hù)的設(shè)計(jì)文件114時(shí)可以由印刷機(jī)120生成的印刷電子設(shè)備。圖4c的印刷電子設(shè)備140與圖4b的印刷電子設(shè)備相同,除了在圖4c中,第一變換模塊430可以部分地由形成一個(gè)或多個(gè)傳感器410的部分的變換模塊430a(并且因此變換模塊430a對數(shù)據(jù)數(shù)值si(i=1,…,m1)應(yīng)用一項(xiàng)或多項(xiàng)雙射變換以形成一個(gè)或多個(gè)數(shù)據(jù)數(shù)值uk)和/或部分地由形成一個(gè)或多個(gè)輸入端420的部分的變換模塊430b(并且因此變換模塊430b對數(shù)據(jù)數(shù)值xj(j=1,…,m2)應(yīng)用一項(xiàng)或多項(xiàng)雙射變換以形成一項(xiàng)或多項(xiàng)數(shù)據(jù)數(shù)值uk)來實(shí)施。舉例來說,變換模塊430a可以被實(shí)施成一個(gè)或多個(gè)傳感器410的模數(shù)轉(zhuǎn)換器的部分;同樣地,變換模塊430b可以被實(shí)施成一個(gè)或多個(gè)輸入端420的模數(shù)轉(zhuǎn)換器的部分。類似地,如圖4c中所示,第二變換模塊450可以部分地由形成一個(gè)或多個(gè)傳送器460的部分的變換模塊450a(并且因此變換模塊450a對一個(gè)或多個(gè)數(shù)據(jù)數(shù)值vk(k=1,…,m6)應(yīng)用一項(xiàng)或多項(xiàng)雙射變換以得到數(shù)據(jù)數(shù)值ti(i=1,…,m3))和/或部分地由形成一個(gè)或多個(gè)輸出端470的部分的變換模塊450b(并且因此變換模塊450b對一個(gè)或多個(gè)數(shù)據(jù)數(shù)值vk(k=1,…,m6)應(yīng)用一項(xiàng)或多項(xiàng)雙射變換以得到數(shù)據(jù)數(shù)值yj(j=1,…,m4))來實(shí)施。舉例來說,變換模塊450a可以被實(shí)施成一個(gè)或多個(gè)傳送器460的數(shù)模轉(zhuǎn)換器的部分;同樣地,變換模塊430b可以被實(shí)施成一個(gè)或多個(gè)輸出端470的數(shù)模轉(zhuǎn)換器的部分。通過在傳感器410和/或輸入端420和/或傳送器460和/或輸出端470內(nèi)實(shí)施數(shù)據(jù)變換,總體安全性和篡改抵抗性得到提升。用于保護(hù)軟件項(xiàng)目免于白盒攻擊的各種軟件保護(hù)技術(shù)是已知的,并且使用比如C++之類的各種編程語言來實(shí)施。后面的附錄A討論了這樣的已知技術(shù)如何可以被應(yīng)用和適配來保護(hù)設(shè)計(jì)文件112中的HDL代碼以生成受保護(hù)的設(shè)計(jì)文件114(其可以包括模糊化的HDL代碼和/或模糊化的網(wǎng)表)。3—附加的保護(hù)在本發(fā)明的一些實(shí)施例中,除了應(yīng)用一種或多種保護(hù)技術(shù)以為安全性相關(guān)操作提供針對硬件攻擊的抵抗性之外,保護(hù)模塊113還可以修改設(shè)計(jì)文件112以形成受保護(hù)的設(shè)計(jì)文件114,從而使得所得到的印刷電子設(shè)備140包括一個(gè)或多個(gè)附加的安全性模塊,正如后面所描述的那樣。所述一個(gè)或多個(gè)安全性模塊當(dāng)中的一些或全部本身可以被實(shí)施成具有針對硬件攻擊的抵抗性。舉例來說,保護(hù)模塊113可以向設(shè)計(jì)文件112添加實(shí)施安全性模塊的功能的代碼,并且隨后向針對該安全性模塊和安全性相關(guān)操作全部二者的代碼應(yīng)用一種或多種保護(hù)技術(shù)。每一個(gè)安全性模塊被布置成檢測可能正在發(fā)生攻擊者進(jìn)行的攻擊(或者攻擊可能正被實(shí)施或者可能已被實(shí)施)——不同的安全性模塊可以檢測不同類型的攻擊或者對不同類型的攻擊作出響應(yīng)。如果該安全性模塊檢測到可能正在發(fā)生(或者可能已經(jīng)發(fā)生)攻擊,則該安全性模塊可以被布置成采取一項(xiàng)或多項(xiàng)預(yù)定動(dòng)作,比如使得印刷電子設(shè)備140停止運(yùn)作(暫時(shí)性或永久性地停止),或者使得印刷電子設(shè)備140輸出隨機(jī)數(shù)據(jù)或無意義的數(shù)據(jù)等等。在一些實(shí)施例中,一個(gè)安全性模塊被布置成實(shí)施測試以檢查印刷電子設(shè)備140是否按照所預(yù)期的那樣操作(也就是根據(jù)表明正在進(jìn)行正常操作的一條或多條預(yù)定標(biāo)準(zhǔn)進(jìn)行操作)。該檢查(或者測試或評估)可以被周期性地實(shí)施和/或在印刷電子設(shè)備140通電時(shí)實(shí)施。該檢查例如可以包括內(nèi)建的自測。該檢查可以包括監(jiān)測針對經(jīng)過變換的域中的未定義的數(shù)據(jù)數(shù)值的數(shù)據(jù)路徑。舉例來說,正如前面所討論的那樣,可能有針對去到經(jīng)過變換的函數(shù)FT的一項(xiàng)或多項(xiàng)輸入的一個(gè)或多個(gè)數(shù)值和/或針對經(jīng)過變換的函數(shù)FT的一項(xiàng)或多項(xiàng)輸出的一個(gè)或多個(gè)數(shù)值不應(yīng)當(dāng)在正常操作期間出現(xiàn)。舉例來說,如前面在表1和2中所示,該特定的經(jīng)過變換的函數(shù)FT的輸入和輸出絕不應(yīng)當(dāng)取得以下數(shù)值之一:2、3、6、7、10、13、14或15。如果輸入或輸出取得無效數(shù)值,則有可能攻擊者正在嘗試攻擊印刷電子設(shè)備140。如果該安全性模塊通過(一項(xiàng)或多項(xiàng))檢查檢測到印刷電子設(shè)備140沒有按照預(yù)期的那樣操作,則該安全性模塊可以認(rèn)為存在正由攻擊者實(shí)施的攻擊——該安全性模塊隨后可以按照前面所討論的那樣響應(yīng)于攻擊進(jìn)行操作。在一些實(shí)施例中,保護(hù)模塊113可以被布置成使得經(jīng)過變換的邏輯480包括相同計(jì)算(或者運(yùn)算或函數(shù))的多個(gè)實(shí)例或?qū)嵤?,從而使得?dāng)印刷電子設(shè)備140正在正常操作時(shí),這些多個(gè)實(shí)例或?qū)嵤┒紤?yīng)當(dāng)提供相應(yīng)的輸出。這實(shí)際上引入了冗余計(jì)算。因此,一個(gè)安全性模塊可以被布置成監(jiān)測所述多個(gè)實(shí)例或?qū)嵤?,以便檢查其輸出確實(shí)全部對應(yīng)。如果該安全性模塊檢測到這些輸出不全部對應(yīng),則該安全性模塊可以認(rèn)為存在正由攻擊者實(shí)施的攻擊——該安全性模塊隨后可以按照前面所討論的那樣響應(yīng)于該攻擊進(jìn)行操作。因此這迫使攻擊者修改該實(shí)施的多個(gè)部分,這使得攻擊者更難成功。在一些實(shí)施例中,各種數(shù)據(jù)數(shù)值可以被預(yù)期滿足特定標(biāo)準(zhǔn)或約束,或者可以被預(yù)期具有特定屬性。舉例來說,在正常操作期間,由經(jīng)過變換的邏輯480實(shí)施的處理可以使得:數(shù)據(jù)數(shù)值x1應(yīng)當(dāng)總是大于數(shù)據(jù)數(shù)值x2;或者數(shù)據(jù)數(shù)值x1應(yīng)當(dāng)總是僅處于從a到b的預(yù)定范圍內(nèi);或者數(shù)據(jù)數(shù)值x1應(yīng)當(dāng)總是負(fù)的;等等。因此,一個(gè)安全性模塊可以被布置成監(jiān)測這些各種數(shù)據(jù)數(shù)值及其相關(guān)聯(lián)的標(biāo)準(zhǔn)/約束/屬性。如果該安全性模塊檢測到這些各種數(shù)據(jù)數(shù)值當(dāng)中的一項(xiàng)或多項(xiàng)不滿足或符合其相關(guān)聯(lián)的標(biāo)準(zhǔn)/約束/屬性,則該安全性模塊可以認(rèn)為存在正由攻擊者實(shí)施的攻擊——該安全性模塊隨后可以按照前面所討論的那樣響應(yīng)于攻擊進(jìn)行操作。在一些實(shí)施例中,一個(gè)或多個(gè)安全性模塊是被布置成檢測針對印刷電子設(shè)備140的一項(xiàng)或多項(xiàng)物理攻擊的傳感器。在一些實(shí)施例中,所述傳感器在電力被供應(yīng)到印刷電子設(shè)備140時(shí)檢測攻擊;在其他實(shí)施例中,所述傳感器在印刷電子設(shè)備140處于待機(jī)/關(guān)閉模式時(shí)檢測攻擊,在這種情況下,印刷電子設(shè)備140可以包括用于該特定傳感器的電源或電池。通過這種方式,前面提到的(一個(gè)或多個(gè))安全性模塊因此實(shí)施以下各項(xiàng)當(dāng)中的一項(xiàng)或多項(xiàng):(i)完整性驗(yàn)證操作;(ii)篡改檢測操作;以及(iii)對正在針對印刷電子設(shè)備140實(shí)施攻擊的檢測。正如前面所提到的那樣,印刷電子設(shè)備140可以連接到或者附著到另一個(gè)項(xiàng)目或物體150,從而生成新的項(xiàng)目或物體160。在一個(gè)實(shí)施例中,印刷電子設(shè)備140被生成為使得其具有覆蓋印刷電子設(shè)備140的“敏感部分”的材料保護(hù)層。所述保護(hù)層可以作為印刷過程的一部分由印刷機(jī)120形成,或者可以在印刷機(jī)120印刷出印刷電子設(shè)備140之后被施加。所述“敏感部分”可以是使用對于空氣和/或水分/濕氣敏感的一種或多種化學(xué)品印刷的部分(或者節(jié)段或區(qū)域)——如果該敏感部分被暴露于空氣和/或水分/濕氣,則該敏感部分可能被損壞,從而防止印刷電子設(shè)備140操作。因此,所述材料保護(hù)層防止空氣和/或水分/濕氣與敏感部分發(fā)生接觸,也就是說在沒有保護(hù)層的情況下,印刷電子設(shè)備140的敏感部分將暴露于空氣和/或水分/濕氣(例如該敏感部分可以形成印刷電子設(shè)備140的表面的至少一部分)。項(xiàng)目150可以包括一個(gè)或多個(gè)引腳,并且印刷電子設(shè)備140可以按照使得所述引腳穿通或修補(bǔ)保護(hù)層的方式附著到項(xiàng)目150。因此,如果印刷電子設(shè)備140被從項(xiàng)目150移除,則由于保護(hù)層中的孔洞不再被引腳阻塞,印刷電子設(shè)備140的敏感部分可以暴露于空氣和/或水分/濕氣。這樣,印刷電子設(shè)備140從項(xiàng)目150的移除可以被布置成損壞/破壞印刷電子設(shè)備140。印刷電子設(shè)備140可以使用強(qiáng)膠(或粘合劑)附著到項(xiàng)目150。膠的強(qiáng)度可以被選擇成使得如果從項(xiàng)目150移除印刷電子設(shè)備140,則印刷電子設(shè)備140將破裂。前面描述的技術(shù)是用于確保印刷電子設(shè)備140保持附著到項(xiàng)目150的物理和化學(xué)手段。一個(gè)或多個(gè)前面提到的安全性模塊也可以被布置成促進(jìn)這一點(diǎn)。因此,一個(gè)或多個(gè)前面提到的安全性模塊可以被布置成實(shí)施以下各項(xiàng)當(dāng)中的一項(xiàng)或全部兩項(xiàng):(i)用以驗(yàn)證印刷電子設(shè)備140所連接到的物體/項(xiàng)目150的一項(xiàng)或多項(xiàng)預(yù)定屬性的操作;和/或(ii)用以驗(yàn)證印刷電子設(shè)備140連接到物體/項(xiàng)目150的操作。后面將對此更加詳細(xì)地進(jìn)行討論。一個(gè)或多個(gè)安全性模塊可以包括用以檢測項(xiàng)目150的存在的傳感器。如果傳感器沒有檢測到項(xiàng)目150的存在,則該安全性模塊可以認(rèn)為存在正由攻擊者實(shí)施的攻擊(或者已經(jīng)實(shí)施了攻擊)——該安全性模塊隨后可以按照前面所討論的那樣響應(yīng)于攻擊進(jìn)行操作。一個(gè)或多個(gè)安全性模塊可以包括檢測或測量項(xiàng)目150的屬性或特性并且隨后把所檢測或測量的屬性或特性與參考數(shù)據(jù)進(jìn)行比較的傳感器——如果所測量的屬性或特性與參考數(shù)據(jù)不匹配(或者不足夠接近地匹配),則該安全性模塊可以認(rèn)為存在正由攻擊者實(shí)施的攻擊(或者已經(jīng)實(shí)施了攻擊)——該安全性模塊隨后可以按照前面所討論的那樣響應(yīng)于攻擊進(jìn)行操作。舉例來說,所述傳感器可以測量項(xiàng)目150的電阻抗并且將該阻抗與預(yù)定數(shù)值進(jìn)行比較。如果所測量的阻抗不足夠接近所述預(yù)定數(shù)值(也就是處在圍繞預(yù)定數(shù)值的閾值內(nèi)),則該安全性模塊可以認(rèn)為存在正由攻擊者實(shí)施的攻擊(或者已經(jīng)實(shí)施了攻擊)——該安全性模塊隨后可以按照前面所討論的那樣響應(yīng)于攻擊進(jìn)行操作。作為另一個(gè)示例,項(xiàng)目150上的印刷電子設(shè)備140與項(xiàng)目150發(fā)生接觸的區(qū)域(其在后面被稱作“接觸區(qū)域”)可以包括一項(xiàng)或多項(xiàng)圖樣或?qū)傩?。舉例來說,接觸區(qū)域可以包括簡單地由于項(xiàng)目150的制造而出現(xiàn)的隨機(jī)圖樣或?qū)傩?,該制造?dǎo)致接觸區(qū)域上的隨機(jī)不規(guī)則性(例如隆起和溝槽)。因此,在一些實(shí)施例中,接觸區(qū)域在物理上是不可克隆的。因此,在一些實(shí)施例中,(一個(gè)或多個(gè))安全性模塊中的一個(gè)或多個(gè)可以包括用于檢測接觸區(qū)域上的圖樣或者接觸區(qū)域的一項(xiàng)或多項(xiàng)屬性的傳感器。這可以按照許多方式來使用,例如:-在一個(gè)實(shí)施例中,當(dāng)印刷電子設(shè)備140首先被附著到項(xiàng)目150時(shí),安全性模塊可以被初始化——這涉及安全性模塊使用其傳感器來讀取或檢測接觸區(qū)域上的圖樣并且存儲(chǔ)該圖樣的表示。當(dāng)印刷電子設(shè)備140被使用時(shí)(也就是在“正?!辈僮髌陂g),安全性模塊可以被布置成讀取或檢測接觸區(qū)域上的當(dāng)前圖樣,并且把當(dāng)前圖樣與所存儲(chǔ)的表示進(jìn)行比較。如果它們不匹配,則這表明印刷電子設(shè)備140已被從其初始項(xiàng)目150移除并且附著到另一個(gè)項(xiàng)目150——因此,該安全性模塊于是可以認(rèn)為存在正由攻擊者實(shí)施的攻擊(或者已經(jīng)實(shí)施的攻擊),并且該安全性模塊隨后可以按照前面所討論的那樣響應(yīng)于攻擊進(jìn)行操作。-在一個(gè)實(shí)施例中,當(dāng)印刷電子設(shè)備140首先被附著到項(xiàng)目150時(shí),安全性模塊可以使用其傳感器來讀取或檢測接觸區(qū)域上的圖樣,并且提供該圖樣的表示作為輸出。該輸出例如可以被提供到認(rèn)證系統(tǒng)——認(rèn)證系統(tǒng)隨后可以存儲(chǔ)所述表示以用于認(rèn)證與印刷電子設(shè)備140的未來交互。舉例來說,當(dāng)印刷電子設(shè)備140被使用時(shí)(也就是在“正?!辈僮髌陂g),安全性模塊可以被布置成讀取或檢測接觸區(qū)域上的當(dāng)前圖樣,并且把當(dāng)前圖樣(或者當(dāng)前圖樣的表示)用作針對安全性相關(guān)功能的輸入si。舉例來說,當(dāng)前圖樣(或者其表示)可以至少部分地被用來幫助確定用于實(shí)施密碼操作(比如加密由認(rèn)證系統(tǒng)提供的隨機(jī)數(shù)或者生成其散列)的密碼密鑰。所述密碼操作的輸出可以被提供到認(rèn)證系統(tǒng)。由于認(rèn)證系統(tǒng)存儲(chǔ)原始表示,于是認(rèn)證系統(tǒng)可以被布置成基于所存儲(chǔ)的表示來實(shí)施與由印刷電子設(shè)備140實(shí)施的相同的密碼操作,并且把由認(rèn)證系統(tǒng)實(shí)施的密碼操作的輸出與由印刷電子設(shè)備140實(shí)施的密碼操作的輸出進(jìn)行比較。如果印刷電子設(shè)備140尚未被從原始項(xiàng)目150移除,則兩項(xiàng)輸出應(yīng)當(dāng)匹配。因此,如果兩項(xiàng)輸出匹配,則認(rèn)證系統(tǒng)可以驗(yàn)證印刷電子設(shè)備140被附著到“正確的”項(xiàng)目150;如果兩項(xiàng)輸出不匹配,則認(rèn)證系統(tǒng)可以確定印刷電子設(shè)備140沒有被附著到“正確的”項(xiàng)目150。4—示例性使用在一個(gè)實(shí)施例中,印刷電子設(shè)備140被用來形成智能卡(例如供數(shù)字廣播機(jī)頂盒使用的智能卡)。由印刷機(jī)120產(chǎn)生的印刷電子設(shè)備140可以是最終的智能卡本身;替換地,印刷電子設(shè)備140可以被附著到塑料卡(項(xiàng)目150),從而得到智能卡(即項(xiàng)目160)。如已知的,智能卡實(shí)施各種安全性相關(guān)操作(比如用于控制針對數(shù)字內(nèi)容的訪問的條件訪問或數(shù)字權(quán)利管理功能),安全性相關(guān)操作可以如前面所描述的那樣被保護(hù)以免于硬件攻擊。在一個(gè)實(shí)施例中,印刷電子設(shè)備140(或者包括印刷電子設(shè)備140的項(xiàng)目160)可以被用作所謂的“智能標(biāo)簽”。智能標(biāo)簽是被布置成存儲(chǔ)和提供/輸出關(guān)于該智能標(biāo)簽所附著到的物體(或產(chǎn)品)的信息的設(shè)備或裝置。所述信息可以是任何種類的信息,比如針對該特定物體的標(biāo)識代碼,關(guān)于物體來源(例如產(chǎn)生/制造的位置和/或日期)的信息,提供關(guān)于物體的細(xì)節(jié)(例如元數(shù)據(jù)或描述)的信息等等。印刷電子設(shè)備140可以例如通過傳送器460(比如無線傳送器)輸出所述信息。在一些實(shí)施例中,針對智能標(biāo)簽的安全性相關(guān)功能可以包括對信息進(jìn)行加密和/或數(shù)字簽名,從而使得智能標(biāo)簽可以按照保護(hù)信息的完整性和/或?qū)崿F(xiàn)對信息來源的認(rèn)證的方式輸出該信息。這例如在信息包括物體的標(biāo)識符(例如唯一標(biāo)識代碼)時(shí)是特別有用的。具體來說,用戶的設(shè)備(比如移動(dòng)電話、計(jì)算機(jī)、銷售終端等等)可以接收來自印刷電子設(shè)備140的標(biāo)識符,并且實(shí)施驗(yàn)證操作。對于驗(yàn)證操作,用戶的設(shè)備例如可以向認(rèn)證系統(tǒng)發(fā)送認(rèn)證請求(例如通過因特網(wǎng)或某種其他網(wǎng)絡(luò)),其中認(rèn)證請求包括標(biāo)識符,并且響應(yīng)于所接收到的請求,認(rèn)證系統(tǒng)確定請求中的標(biāo)識符是否對應(yīng)于可信的物體(例如通過把所接收到的標(biāo)識符與存儲(chǔ)在認(rèn)證系統(tǒng)的數(shù)據(jù)庫中的可信標(biāo)識符進(jìn)行比較)并且相應(yīng)地發(fā)送報(bào)告回到用戶的設(shè)備。在一些實(shí)施例中,認(rèn)證請求可以包括附加的數(shù)據(jù)以便促進(jìn)認(rèn)證系統(tǒng)進(jìn)行認(rèn)證處理。舉例來說,例如如果認(rèn)證請求包括如前面所描述的接觸區(qū)域的圖樣的表示,則安全性可以得到提高——如果由認(rèn)證系統(tǒng)使用的數(shù)據(jù)庫與圖樣的表示相關(guān)聯(lián)地存儲(chǔ)標(biāo)識符,則認(rèn)證系統(tǒng)可以檢查認(rèn)證請求是否包括針對有效圖樣的有效標(biāo)識符。類似地,例如如果認(rèn)證請求包括用戶的設(shè)備的位置或者印刷電子設(shè)備140的位置,則安全性可以得到提高。認(rèn)證系統(tǒng)于是可以被布置成確定當(dāng)前認(rèn)證請求和與該認(rèn)證請求中的標(biāo)識符相關(guān)聯(lián)的先前認(rèn)證請求之間的時(shí)間差異T(例如通過把所接收到的認(rèn)證請求的日期/時(shí)間存儲(chǔ)在數(shù)據(jù)庫中),并且認(rèn)證系統(tǒng)還可以被布置成確定針對當(dāng)前認(rèn)證請求的位置與針對先前認(rèn)證請求的位置之間的距離或差異D(例如通過把所接收到的認(rèn)證請求的位置存儲(chǔ)在數(shù)據(jù)庫中)。如果所述距離或差異超出基于時(shí)間差異的閾值(例如如果D/T大于預(yù)定閾值),則認(rèn)證系統(tǒng)可以確定印刷電子設(shè)備140已被克隆,并且因此可以用“認(rèn)證失敗”消息對認(rèn)證請求作出響應(yīng)。將認(rèn)識到的是,本發(fā)明的實(shí)施例可以按照其他方式利用提供在認(rèn)證請求中的位置數(shù)據(jù)和/或其他環(huán)境數(shù)據(jù)。在一些實(shí)施例中,認(rèn)證系統(tǒng)可以與印刷電子設(shè)備140的標(biāo)識符相關(guān)聯(lián)地存儲(chǔ)也由印刷電子設(shè)備140存儲(chǔ)(并且如前面所描述的那樣受到保護(hù)以免于攻擊)的秘密數(shù)據(jù)(比如密碼密鑰,例如對稱密鑰)。因此,由認(rèn)證系統(tǒng)實(shí)施的認(rèn)證處理可以涉及認(rèn)證系統(tǒng)向印刷電子設(shè)備140提供挑戰(zhàn)——所述挑戰(zhàn)可以包括隨機(jī)數(shù)、隨機(jī)數(shù)據(jù)或者任何其他不可預(yù)測的數(shù)據(jù),或者先前在針對印刷電子設(shè)備140的先前挑戰(zhàn)中尚未被使用過的任何數(shù)據(jù)。印刷電子設(shè)備140可以被布置成使用或基于秘密數(shù)據(jù)對挑戰(zhàn)實(shí)施密碼操作(比如加密操作或生成散列),并且響應(yīng)于挑戰(zhàn)向認(rèn)證系統(tǒng)提供包括標(biāo)識符和密碼操作的結(jié)果全部二者的消息。認(rèn)證系統(tǒng)在接收到消息時(shí)可以對消息進(jìn)行認(rèn)證——認(rèn)證系統(tǒng)知曉挑戰(zhàn)和秘密數(shù)據(jù)全部二者,并且因此可以自身使用或基于由認(rèn)證系統(tǒng)存儲(chǔ)的秘密數(shù)據(jù)對挑戰(zhàn)實(shí)施密碼操作。如果認(rèn)證系統(tǒng)所實(shí)施的密碼操作的結(jié)果與包含在消息中的結(jié)果相匹配,則認(rèn)證系統(tǒng)認(rèn)為消息是可信的,并且可以返回“認(rèn)證成功”消息;否則,認(rèn)證系統(tǒng)認(rèn)為消息不是可信的,并且可以返回“認(rèn)證失敗”消息。對于該實(shí)施例,由于重放攻擊(replayattack)不再可能,因此設(shè)備的克隆更加困難。圖7a示意性地圖示了根據(jù)前面的實(shí)施例的用于印刷電子設(shè)備140的處理。該實(shí)施例可以如下被進(jìn)一步擴(kuò)展。具體來說,除了使用或者基于秘密數(shù)據(jù)之外,密碼操作還可以使用或者基于來自印刷電子設(shè)備140的一個(gè)或多個(gè)傳感器410的輸出。舉例來說,密碼操作可以附加地基于項(xiàng)目150上的接觸區(qū)域的圖樣。認(rèn)證系統(tǒng)可以被布置成存儲(chǔ)針對來自一個(gè)或多個(gè)傳感器410的輸出的有效數(shù)值(即預(yù)期數(shù)值),從而使得認(rèn)證系統(tǒng)仍然可以實(shí)施與由印刷電子設(shè)備140所實(shí)施的相同的密碼操作。舉例來說,可以基于秘密數(shù)據(jù)以及來自一個(gè)或多個(gè)傳感器410的輸出形成用于密碼操作的密鑰——如果印刷電子設(shè)備140未被篡改,則印刷電子設(shè)備140和認(rèn)證系統(tǒng)因?yàn)樗麄儗⑹褂孟嗤拿荑€而都將從密碼操作生成相同的結(jié)果;如果印刷電子設(shè)備140已被篡改,則印刷電子設(shè)備140和認(rèn)證系統(tǒng)將因?yàn)樗麄儗⑹褂貌煌拿荑€而從密碼操作生成不同的結(jié)果。在該實(shí)施例中,其輸出被用于密碼操作的一個(gè)或多個(gè)傳感器410可以包括檢測或確定智能標(biāo)簽所附著到的物體的一項(xiàng)或多項(xiàng)屬性的傳感器410。舉例來說,傳感器410的輸出可以標(biāo)識物體的一個(gè)或多個(gè)重要方面或?qū)傩裕ū热缬绊懳矬w的價(jià)值的方面,比如包裝的物體是否已被打開或者物體是否已被使用)或者與之相關(guān)。圖7b示意性地圖示了根據(jù)前面的實(shí)施例的用于印刷電子設(shè)備140的處理。智能標(biāo)簽例如可以被附著到藥物包裝,并且因此可以被布置成安全地存儲(chǔ)針對藥物的劑量/處方/使用指示。同樣地,前面提到的功能還可以被用來確保智能標(biāo)簽將只有在它被附著到正確的/初始的藥物包裝的情況下才會(huì)正確地操作,從而幫助防止藥物的誤用。在一個(gè)實(shí)施例中,印刷電子設(shè)備140(或者包括印刷電子設(shè)備140的項(xiàng)目160)可以被用作所謂的“智能傳感器”。智能傳感器包括一個(gè)或多個(gè)傳感器410,其例如測量印刷電子設(shè)備140所處的環(huán)境的一項(xiàng)或多項(xiàng)屬性,比如溫度、環(huán)境光水平、音量、人的存在、電能消耗、打碎玻璃的聲音等等。安全性相關(guān)操作可以被布置成保證由一個(gè)或多個(gè)傳感器410提供的測量結(jié)果的安全,例如通過對表示所述測量結(jié)果的數(shù)據(jù)進(jìn)行加密或數(shù)字簽名,從而使得印刷電子設(shè)備140可以輸出安全的測量數(shù)據(jù)。這幫助防止攻擊者訪問或使用或修改從智能傳感器輸出或者由智能傳感器傳送的測量數(shù)據(jù)。圖8示意性地圖示了本發(fā)明的另一個(gè)實(shí)施例。具體來說,移動(dòng)設(shè)備800(諸如移動(dòng)電話、平板計(jì)算機(jī)、一副“智能眼鏡”、“智能手表”等等)的用戶希望把移動(dòng)設(shè)備800與來自該移動(dòng)設(shè)備800的位置處的電子設(shè)備810的集合當(dāng)中的特定電子設(shè)備810*連接(也就是說將在移動(dòng)設(shè)備800與特定電子設(shè)備810*之間產(chǎn)生無線數(shù)據(jù)通信鏈接)。電子設(shè)備810(包括特定電子設(shè)備810*)可以是如前面所討論的安全印刷電子設(shè)備,但是不必一定是這種情況。如果電子設(shè)備810是如前面所討論的安全印刷電子設(shè)備,則其例如可以是智能傳感器或智能標(biāo)簽。移動(dòng)設(shè)備800可以包括實(shí)施后面所描述的移動(dòng)設(shè)備800的一些或全部功能的(如前面所描述的)安全印刷電子設(shè)備。移動(dòng)設(shè)備800包括攝影機(jī)803,用于顯示或輸出由攝影機(jī)802捕獲的一幅或多幅圖像的視覺表示(或圖像)的屏幕(或顯示器)803,以及無線通信接口804(比如射頻網(wǎng)絡(luò)接口)。通信接口804例如可以是WiFi或藍(lán)牙通信接口804。通信接口804是適合于與一個(gè)或多個(gè)電子設(shè)備810(包括特定電子設(shè)備810*)進(jìn)行通信的無線通信接口——因此,這些電子設(shè)備810也包括對應(yīng)的無線通信接口(圖8中未示出)。移動(dòng)設(shè)備800包括處理器。所述處理器被布置成執(zhí)行軟件應(yīng)用以便實(shí)施如在后面所闡述的功能,從而控制攝影機(jī)802和通信接口804。但是將認(rèn)識到的是,替代地,可以用硬件實(shí)施該功能的一些或全部以作為移動(dòng)設(shè)備800的部分。使用軟件應(yīng)用的移動(dòng)設(shè)備800被布置成:(a)控制攝影機(jī)802以捕獲圖像。圖8圖示了攝影機(jī)802的光學(xué)視場840。因此,由攝影機(jī)802捕獲的圖像可以包括一個(gè)或多個(gè)電子設(shè)備810(包括特定電子設(shè)備810*),或者至少包括電子設(shè)備810(包括特定電子設(shè)備810*)的表示。在一些實(shí)施例中,響應(yīng)于來自移動(dòng)設(shè)備800的用戶的命令或輸入(比如通過用戶按下移動(dòng)設(shè)備800上的按鈕或者通過經(jīng)由由軟件應(yīng)用提供的接口向軟件應(yīng)用提供某種輸入),軟件應(yīng)用使用攝影機(jī)802來捕獲圖像。(b)允許用戶選擇所捕獲圖像的一部分。這例如可以包括用戶選擇所捕獲圖像上的點(diǎn)(例如通過按下屏幕803上的點(diǎn)),或者用戶定義或繪制或表明圖像的一個(gè)區(qū)域(例如通過繪制該區(qū)域的周界)。因此,屏幕803可以是觸敏的,以便使得用戶能夠提供這樣的輸入。替代地,移動(dòng)設(shè)備800可以被布置成通過其他手段接收來自用戶的輸入,比如通過一個(gè)或多個(gè)按鈕或控件,或者用以檢測用戶的操作或輸入或動(dòng)作(比如監(jiān)測用戶的一只或全部兩只眼睛以便檢測用戶正在觀看的所捕獲圖像上的位置)的一個(gè)或多個(gè)傳感器。將認(rèn)識到的是,選擇機(jī)制并不是本發(fā)明的該實(shí)施例的重要方面,因此可以使用任何選擇機(jī)制。用戶選擇的所捕獲圖像的部分是表示或描繪或?qū)?yīng)于特定電子設(shè)備810*的部分。(c)基于所選擇的部分,控制無線通信接口804與對應(yīng)于所捕獲圖像的所選擇部分的電子設(shè)備810建立無線數(shù)據(jù)通信鏈接。無線通信接口804可以被布置成輸出如圖8中所示的定向RF射束830,并且軟件應(yīng)用因此可以控制或指令無線通信接口804導(dǎo)引RF射束830,從而使得RF射束830被導(dǎo)向?qū)?yīng)于所捕獲圖像的所選擇部分的電子設(shè)備810(即特定電子設(shè)備810*)。移動(dòng)設(shè)備800與特定電子設(shè)備810*之間的無線數(shù)據(jù)通信鏈接的建立于是可以根據(jù)任何傳統(tǒng)的無線通信協(xié)議來進(jìn)行。在一些實(shí)施例(特別適合于其無線通信接口804無法導(dǎo)引RF射束830的移動(dòng)設(shè)備800)中,軟件應(yīng)用可以被布置成順序地對一個(gè)或多個(gè)電子設(shè)備810進(jìn)行輪詢。舉例來說,無線通信接口804可能已經(jīng)檢測到一個(gè)或多個(gè)電子設(shè)備810的存在,并且隨后可以遍及所檢測到的各個(gè)電子設(shè)備810循環(huán)。具體來說,軟件應(yīng)用可以被布置成依次請求每一個(gè)所檢測到的電子設(shè)備810向移動(dòng)設(shè)備800提供輸出或反饋信號(例如通過激活光源),移動(dòng)設(shè)備800(例如通過攝影機(jī)802或無線通信接口804)可以接收所述輸出或反饋信號。軟件應(yīng)用隨后可以確定接收自電子設(shè)備810的輸出/信號是否對應(yīng)于所捕獲圖像的所選擇部分。舉例來說,軟件應(yīng)用可以被布置成:(a)在被輪詢的電子設(shè)備810激活(或者預(yù)期已激活)其光源的時(shí)間點(diǎn)捕獲一幅或多幅圖像;(b)檢測這個(gè)所捕獲的圖像是否具有對應(yīng)于初始捕獲的圖像的所選擇部分的一部分;(c)如果是,則檢測該部分是否描繪所激活的光源(例如通過把初始捕獲的圖像與一幅或多幅新捕獲的圖像進(jìn)行比較以尋找亮點(diǎn));以及(d)如果是,則該被輪詢的電子設(shè)備810是應(yīng)當(dāng)與之建立無線數(shù)據(jù)通信鏈接的特定電子設(shè)備810*。5—修改將認(rèn)識到的是,所描述的方法被示為按照特定順序?qū)嵤┑膫€(gè)體步驟。但是技術(shù)人員將認(rèn)識到,這些步驟可以被組合或者按照不同的順序來實(shí)施,同時(shí)仍然實(shí)現(xiàn)所期望的結(jié)果。將認(rèn)識到的是,可以使用各種不同的信息處理系統(tǒng)來實(shí)施本發(fā)明的實(shí)施例。具體來說,雖然附圖及其討論提供了示例性的計(jì)算系統(tǒng)和方法,但是這些僅僅是為了在討論本發(fā)明的各個(gè)方面時(shí)提供有用的參考而呈現(xiàn)的。本發(fā)明的實(shí)施例可以被實(shí)施在任何適當(dāng)?shù)臄?shù)據(jù)處理設(shè)備(比如個(gè)人計(jì)算機(jī)、膝上型計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)等等)上。當(dāng)然,對于所述系統(tǒng)和方法的描述出于討論的目的而被簡化,并且其僅僅是可以被用于本發(fā)明的實(shí)施例的許多不同類型的系統(tǒng)和方法之一。將認(rèn)識到的是,邏輯塊之間的邊界僅僅是說明性的,并且替換的實(shí)施例可以合并邏輯塊或元素,或者可以對各個(gè)邏輯塊或元素施加替換的功能分解。將認(rèn)識到的是,前面提到的功能可以被實(shí)施為硬件和/或軟件的一個(gè)或多個(gè)對應(yīng)模塊。舉例來說,前面提到的功能可以被實(shí)施成一個(gè)或多個(gè)軟件組件以供系統(tǒng)的處理器執(zhí)行。替換地,前面提到的功能可以被實(shí)施成硬件,比如一個(gè)或多個(gè)現(xiàn)場可編程門陣列(FPGA),和/或一個(gè)或多個(gè)專用集成電路(ASIC),和/或一個(gè)或多個(gè)數(shù)字信號處理器(DSP),和/或其他硬件布置。在這里所包含的流程圖中實(shí)施或者如前面所描述的方法步驟可以各自由對應(yīng)的相應(yīng)模塊實(shí)施;在這里所包含的流程圖中實(shí)施或者如前面所描述的多個(gè)方法步驟可以一起由單個(gè)模塊實(shí)施。將認(rèn)識到的是,如果本發(fā)明的實(shí)施例是通過計(jì)算機(jī)程序?qū)嵤┑?,則承載計(jì)算機(jī)程序的存儲(chǔ)介質(zhì)和傳送介質(zhì)形成本發(fā)明的各方面。計(jì)算機(jī)程序可以具有一條或多條程序指令或程序代碼,其在由計(jì)算機(jī)執(zhí)行時(shí)實(shí)施本發(fā)明的實(shí)施例。這里所使用的術(shù)語“程序”可以是被設(shè)計(jì)用于在計(jì)算機(jī)系統(tǒng)上執(zhí)行的指令序列,并且可以包括子例程、函數(shù)、規(guī)程、模塊、對象方法、對象實(shí)施、可執(zhí)行應(yīng)用、小應(yīng)用程序、小服務(wù)程序、源代碼、對象代碼、共享庫、動(dòng)態(tài)鏈接庫和/或被設(shè)計(jì)用于在計(jì)算機(jī)系統(tǒng)上執(zhí)行的其他指令序列。存儲(chǔ)介質(zhì)可以是磁盤(比如硬盤驅(qū)動(dòng)器或軟盤)、光盤(比如CD-ROM、DVD-ROM或BluRay盤)、或者存儲(chǔ)器(比如ROM、RAM、EEPROM、EPROM、閃存或者便攜式/可移除存儲(chǔ)器設(shè)備)等等。傳送介質(zhì)可以是通信信號、數(shù)據(jù)廣播、兩臺(tái)或更多臺(tái)計(jì)算機(jī)之間的通信鏈接等等。附錄A近年來,編程人員為之提供軟件的終端用戶計(jì)算機(jī)設(shè)備的數(shù)目已大大增加,這一增加的大部分是在用于移動(dòng)電話和移動(dòng)計(jì)算的設(shè)備(包括智能電話、平板計(jì)算機(jī)等等)的領(lǐng)域中,但是也在更加傳統(tǒng)風(fēng)格的臺(tái)式計(jì)算機(jī)以及嵌入在例如汽車、電視等之類的其他制造商品中的計(jì)算機(jī)的領(lǐng)域內(nèi)。提供給此類設(shè)備的軟件的一大部分具有通常被稱作“app”的應(yīng)用的形式,并且該軟件通常可以采用原生代碼、比如JavaScript之類的腳本化語言以及諸如Java之類的其他語言的形式來提供。如果沒有使用各種軟件保護(hù)技術(shù)適當(dāng)?shù)乇Wo(hù)軟件,則此類軟件以及所述軟件被用來向用戶居間傳遞的數(shù)據(jù)或內(nèi)容常常存在被危害的風(fēng)險(xiǎn)。舉例來說,此類技術(shù)可以被用來使得攻擊者非常難以提取可以被用來獲得對于比如視頻、音頻或其他數(shù)據(jù)類型之類的內(nèi)容的未經(jīng)授權(quán)的訪問的加密密鑰,并且可以被用來使得攻擊者非常難以復(fù)制軟件以用于其他設(shè)備上的未經(jīng)授權(quán)的使用。但是使用此類軟件保護(hù)技術(shù)可能導(dǎo)致軟件性能的降低,例如降低執(zhí)行速度,增加在用戶設(shè)備上存儲(chǔ)軟件所需的存儲(chǔ)器數(shù)量,或者增加執(zhí)行所需的存儲(chǔ)器。此類軟件保護(hù)技術(shù)還可能難以跨廣泛的各種不同軟件類型(例如用不同的源代碼語言編寫的先前存在的軟件或者以特定原生代碼格式存在的軟件)應(yīng)用。將希望能夠?qū)τ谲浖?xiàng)目提供針對攻擊的保護(hù),并且跨諸如不同源代碼語言和原生代碼類型的各種軟件表示提供此類保護(hù),同時(shí)還保持軟件在終端用戶設(shè)備上的良好性能水平。還將希望遞送按照這種方式適當(dāng)?shù)乇Wo(hù)的軟件,以供使用在多種不同的平臺(tái)類型上。因此,我們描述一種統(tǒng)一的安全性框架,其中把被用于各表示之間的轉(zhuǎn)換、用于優(yōu)化、編譯等等的第一集合中的軟件工具的優(yōu)點(diǎn)與被用于軟件保護(hù)的第二集合中的軟件工具的優(yōu)點(diǎn)相組合。在一個(gè)示例中,第一集合中的軟件工具可以是LLVM項(xiàng)目的工具,該工具通常使用LLVM中間表示進(jìn)行操作。但是來自使用其他中間歸納進(jìn)行操作的其他集合的工具可以被使用,例如來自Microsoft公共語言基礎(chǔ)結(jié)構(gòu)的工具,該工具通常使用共同中間語言CIL。后面將把由第一集合中的軟件工具使用的中間表示標(biāo)示成第一中間歸納。注意,第一集合中的軟件工具也可以包括用于軟件保護(hù)的工具,比如二進(jìn)制重寫保護(hù)工具。中間表示是既非原始意圖在終端用戶設(shè)備上執(zhí)行也非原始意圖由軟件工程師使用來構(gòu)造原始源代碼(盡管任一種此類活動(dòng)當(dāng)然在原理上是可能的)的軟件表示。在后面的描述中,針對統(tǒng)一安全性框架的原始軟件輸入和用于在終端用戶設(shè)備上使用的經(jīng)過變換的軟件輸出都沒有被投放(cast)在中間表示中。第二工具集合中的軟件工具使用不同的中間歸納,該中間歸納通常更適合于由如下軟件工具使用或者原始意圖由如下軟件工具使用:該軟件工具對由統(tǒng)一安全性框架所處理的軟件項(xiàng)目應(yīng)用安全性保護(hù)變換。該中間表示在后面通常被標(biāo)示成第二中間表示,并且不同于第一中間表示。第二中間表示可以按照如此方式被設(shè)計(jì):使得諸如C和C++之類的語言的源代碼可以容易地被轉(zhuǎn)換成第二中間表示,并且可以容易地通過適當(dāng)?shù)霓D(zhuǎn)換工具從所述第二中間表示重建相同或類似的語言的源代碼。更一般來說,描述了統(tǒng)一安全性框架,其中提供用于對軟件項(xiàng)目應(yīng)用安全性變換的軟件工具,從而使得例如可以在多項(xiàng)不同的中間表示中對軟件項(xiàng)目相繼地實(shí)施多個(gè)安全性變換步驟。統(tǒng)一安全性框架還可以提供用于對軟件項(xiàng)目應(yīng)用優(yōu)化變換的軟件工具,從而使得例如可以在多項(xiàng)不同的中間表示中對軟件項(xiàng)目相繼地實(shí)施多個(gè)優(yōu)化變換步驟。所描述的布置可以被用來:接受任何輸入語言或原生代碼/二進(jìn)制表示的輸入軟件項(xiàng)目以進(jìn)行優(yōu)化和保護(hù);并且通過各種形式(包括任何所期望的原生代碼/二進(jìn)制表示、JavaScript或者JavaScript的子集等等)輸出受保護(hù)和優(yōu)化的軟件項(xiàng)目。在一些示例中,輸入表示(例如特定二進(jìn)制代碼)可以與輸出表示相同,從而對現(xiàn)有二進(jìn)制代碼軟件項(xiàng)目實(shí)施優(yōu)化和保護(hù)。為此目的,我們描述一種方法,包括:在第一中間表示中實(shí)施軟件項(xiàng)目的優(yōu)化,并且在不同于第一中間表示的第二中間表示中實(shí)施軟件項(xiàng)目的保護(hù)。第一中間表示中的優(yōu)化既可以在實(shí)施第二中間表示中的保護(hù)之前實(shí)施也可以在其后實(shí)施,并且因此所述方法可以包括:在第一次實(shí)施優(yōu)化之后并且在隨后實(shí)施保護(hù)之前把軟件項(xiàng)目從第一中間表示轉(zhuǎn)換到第二中間表示,以及在實(shí)施保護(hù)之后并且在隨后第二次實(shí)施優(yōu)化之前從第二中間表示轉(zhuǎn)換到第一中間表示。類似地,第二中間表示中的保護(hù)既可以在實(shí)施第一中間表示中的優(yōu)化之前實(shí)施也可以在其后實(shí)施,并且因此所述方法可以包括:在第一次實(shí)施保護(hù)之后并且在隨后實(shí)施優(yōu)化之前把軟件項(xiàng)目從第二中間表示轉(zhuǎn)換到第一中間表示,以及在實(shí)施優(yōu)化之后并且在隨后第二次實(shí)施保護(hù)之前從第一中間表示轉(zhuǎn)換到第二中間表示。相關(guān)中間表示中的保護(hù)和優(yōu)化的步驟可以被交替實(shí)施任意次數(shù),以保護(hù)或優(yōu)化開始,并且按照交替方式繼續(xù)一個(gè)或多個(gè)另外的步驟。正如前面所提到的那樣,第一中間表示可以是LLVM中間表示LLVMIR,但是可以使用其他中間表示,比如MicrosoftCIL。更一般來說,我們描述一種方法,用于:使用在一項(xiàng)或多項(xiàng)中間表示中實(shí)施的優(yōu)化步驟來實(shí)施軟件項(xiàng)目的優(yōu)化;以及使用一項(xiàng)或多項(xiàng)中間表示中的保護(hù)步驟來實(shí)施軟件項(xiàng)目的保護(hù),一些或全部中間表示可以與被用于實(shí)施優(yōu)化的中間表示相同或不同。所述優(yōu)化可以包括各種類型的優(yōu)化,例如針對軟件項(xiàng)目的尺寸、運(yùn)行時(shí)間速度和運(yùn)行時(shí)間存儲(chǔ)器需求當(dāng)中的一項(xiàng)或多項(xiàng)。用以實(shí)現(xiàn)此類優(yōu)化的技術(shù)可以包括向量化、空閑時(shí)間、常數(shù)傳播、無用賦值消除、內(nèi)聯(lián)展開、可到達(dá)性分析、保護(hù)中斷正常(protectionbreaknormal)以及其他優(yōu)化。在第二中間表示中對軟件項(xiàng)目的保護(hù)包括:對軟件項(xiàng)目應(yīng)用一種或多種保護(hù)技術(shù),特別是保護(hù)軟件的程序和/或數(shù)據(jù)方面免于攻擊的安全性保護(hù)技術(shù)。這樣的技術(shù)例如可以包括白盒保護(hù)技術(shù)、節(jié)點(diǎn)鎖定技術(shù)、數(shù)據(jù)流模糊化、控制流模糊化和變換、同態(tài)數(shù)據(jù)變換、密鑰隱藏、程序互鎖、邊界混合以及其他技術(shù)??梢酝ㄟ^各種方式把所使用的技術(shù)組合在一起從而形成一種或多種工具,例如作為被實(shí)施成優(yōu)化和保護(hù)工具集的部分的隱蔽引擎(cloakingengine)。軟件項(xiàng)目被提供在通常不同于第一中間表示和第二中間表示二者的輸入表示中。因此所述方法可以涉及:在實(shí)施優(yōu)化之前并且通常也在實(shí)施前面所提到的保護(hù)之前把軟件項(xiàng)目從輸入表示轉(zhuǎn)換到第一中間表示。在一些示例中,輸入表示中的軟件項(xiàng)目被轉(zhuǎn)換到第二中間表示并且隨后在第一優(yōu)化之前并且可選地也在實(shí)施保護(hù)之前被從第二中間表示轉(zhuǎn)換。輸入表示可以是源代碼表示,比如C、C++、Objective-C、Java、JavaScript、C#、Ada、Fortran、ActionScript、GLSL、Haskell、Julia、Python、Ruby和Rust。但是輸入表示可以替換地是原生代碼表示,例如針對特定處理器系列(比如x86、x86-64、ARM、SPARC、PowerPC、MIPS以及m68k處理器系列當(dāng)中的任一種)的原生代碼(即二進(jìn)制代碼)表示。輸入表示還可以是硬件描述語言(HDL)。眾所周知,HDL是可以被用來對電子電路的結(jié)構(gòu)、設(shè)計(jì)和操作進(jìn)行編程的計(jì)算機(jī)程序語言。HDL例如可以是VHDL或Verilog,但是將認(rèn)識到的是,存在許多其他HDL并且可以替換地使用在各示例中。由于HDL(及其使用和實(shí)施)是眾所周知的,因此這里將不對它們進(jìn)行更加詳細(xì)的描述,但是更多細(xì)節(jié)例如可以在http://en.wikipedia.org/wiki/Hardware_description_language處找到,其全部公開內(nèi)容通過引用被合并在此。當(dāng)已經(jīng)實(shí)施了前面的優(yōu)化和保護(hù)過程時(shí),可以把軟件項(xiàng)目轉(zhuǎn)換到輸出表示。這一處理階段還可以包括另外的優(yōu)化和/或保護(hù)階段。在一些示例中,把軟件項(xiàng)目轉(zhuǎn)換到輸出表示包括把軟件項(xiàng)目編譯(并且通常還鏈接)到輸出表示中,例如編譯到原生代碼表示中。隨后在編譯和鏈接之后還可以對軟件項(xiàng)目應(yīng)用另外的二進(jìn)制保護(hù)技術(shù)。在編譯之前,可以首先把軟件項(xiàng)目從第一中間表示轉(zhuǎn)換到第二中間表示并且繼續(xù)轉(zhuǎn)換到源代碼表示,源代碼表示被傳遞到編譯器,或者可以在第一中間表示中把軟件項(xiàng)目直接傳遞到編譯器。在第一種情況下,可以使用對源代碼表示進(jìn)行操作的編譯器,比如C/C++編譯器。在第二種情況下,如果第一中間表示是LLVMIR,則可以使用LLVM編譯器。在任何情況下,所述編譯器可以是優(yōu)化編譯器,以便為受保護(hù)的軟件項(xiàng)目提供另一級優(yōu)化。把軟件項(xiàng)目轉(zhuǎn)換到輸出表示還可以包括:在編譯之前對第一中間表示中的軟件項(xiàng)目應(yīng)用二進(jìn)制重寫保護(hù)工具,和/或可以在過程中的其他時(shí)間應(yīng)用這樣的工具。替代把軟件項(xiàng)目編譯到原生代碼表示中,可以改為把軟件項(xiàng)目轉(zhuǎn)換到腳本表示中,并且特別是轉(zhuǎn)換到可以在終端用戶設(shè)備上執(zhí)行的腳本表示中。很方便的是,可以為此目的使用JavaScript表示,因?yàn)檫@樣的腳本可以由終端用戶設(shè)備上的web瀏覽器直接執(zhí)行。更具體來說,可以使用作為JavaScript的子集的asm.js表示,這是因?yàn)閍sm.js適合于在終端用戶設(shè)備上特別高效地執(zhí)行。舉例來說,如果第一中間表示是LLVMIR,則可以使用Emscripten工具來把軟件項(xiàng)目從第一中間表示轉(zhuǎn)換到asm.js表示。如果輸入表示是硬件描述語言,則輸出表示通??梢蕴幱谀軌蛟诟用嫦蛴布膶蛹墸ū热缭诰W(wǎng)表中)描述電子電路的相應(yīng)表示中。在這里描述了比如編譯和鏈接之類的處理方面的情況下,本領(lǐng)域技術(shù)人員將認(rèn)識到,當(dāng)使用具有HDL輸入表示的所描述的布置時(shí),可以使用諸如使用適當(dāng)工具的合成之類的等效步驟,并且對于所描述的布置的保護(hù)和優(yōu)化方面可以使用適用于HDL工作的適當(dāng)?shù)能浖ぞ?。于是輸出軟件?xiàng)目是對于應(yīng)用了適當(dāng)?shù)哪:?保護(hù)和優(yōu)化步驟的電子系統(tǒng)的描述。所述軟件項(xiàng)目可以是各種軟件項(xiàng)目(比如用于在用戶設(shè)備上執(zhí)行的應(yīng)用、庫、模塊、代理等等)中的任一種。具體來說,所述軟件項(xiàng)目可以是安全性軟件項(xiàng)目,比如包含用于實(shí)施比如加密/解密和數(shù)字權(quán)利管理功能之類的安全性功能的軟件的庫、模塊或代理。所述方法可以被應(yīng)用于兩個(gè)這樣的軟件項(xiàng)目,并且這些軟件項(xiàng)目當(dāng)中的一個(gè)可以例如通過規(guī)程調(diào)用或其他參考而使用另一個(gè)軟件項(xiàng)目中的功能。類似地,根據(jù)所描述的示例所優(yōu)化和保護(hù)的軟件項(xiàng)目可以利用或調(diào)用更低層(比如系統(tǒng)層或硬件層)中的安全性相關(guān)或受保護(hù)的功能。類似地,軟件項(xiàng)目可以描述電子系統(tǒng),并且被提供用于針對HDL中的示例性布置的輸入。我們還描述一種保護(hù)軟件項(xiàng)目的方法,其包括:對軟件項(xiàng)目應(yīng)用一種或多種保護(hù)技術(shù),并且使用一個(gè)或多個(gè)LLVM工具對軟件項(xiàng)目進(jìn)行優(yōu)化,并且這一方面可以與本文中其他地方所提到的各種選項(xiàng)相組合。舉例來說,可以使用保護(hù)組件來對軟件項(xiàng)目應(yīng)用一種或多種保護(hù)技術(shù),所保護(hù)組件被布置成使用不同于LLVM中間表示的中間表示來進(jìn)行操作,并且所述方法還可以包括:使用LLVM工具在一項(xiàng)或多項(xiàng)表示與和LLVM中間表示之間轉(zhuǎn)換軟件項(xiàng)目。所述方法可以被用來在asm.js或原生代碼表示之一中輸出受保護(hù)和優(yōu)化的軟件項(xiàng)目。在如前面所討論的那樣對軟件項(xiàng)目進(jìn)行處理之后,可以把軟件項(xiàng)目遞送到一個(gè)或多個(gè)用戶設(shè)備以供執(zhí)行??梢酝ㄟ^各種方式(比如通過有線、光學(xué)或無線網(wǎng)絡(luò),使用計(jì)算機(jī)可讀介質(zhì),以及通過其他方式)把軟件項(xiàng)目遞送到用戶設(shè)備。用于提供所討論的方法和裝置的軟件可以被提供在一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)上、通過網(wǎng)絡(luò)提供或者通過其他方式提供,以便在適當(dāng)?shù)挠?jì)算機(jī)裝置上執(zhí)行,計(jì)算機(jī)裝置例如是包括存儲(chǔ)器和一個(gè)或多個(gè)處理器的計(jì)算機(jī)設(shè)備或者多個(gè)此類設(shè)備,其與適當(dāng)?shù)妮斎牒洼敵鲈O(shè)施(比如鍵盤、鼠標(biāo)和屏幕)相組合以使得操作員能夠控制所述裝置,其還連同用于存儲(chǔ)計(jì)算機(jī)程序代碼以用于在所述裝置上實(shí)現(xiàn)所描述的布置的永久性存儲(chǔ)裝置。因此,我們還描述了用于保護(hù)軟件項(xiàng)目的計(jì)算機(jī)裝置,其包括:被布置成在第一中間表示(比如LLVMIR)中實(shí)施軟件項(xiàng)目的優(yōu)化的優(yōu)化器組件,以及被布置成在第二中間歸納中實(shí)施軟件項(xiàng)目的保護(hù)的保護(hù)器組件。所述裝置可以被布置成使得優(yōu)化器組件在軟件項(xiàng)目的第一中間表示中實(shí)施優(yōu)化,這既可以在保護(hù)器組件在軟件項(xiàng)目的第二中間表示中實(shí)施保護(hù)之前也可以在其之后進(jìn)行。優(yōu)化組件可以包括一個(gè)或多個(gè)LLVM優(yōu)化工具。保護(hù)組件可以被布置成對軟件項(xiàng)目應(yīng)用一種或多種保護(hù)技術(shù),該保護(hù)技術(shù)包括以下各項(xiàng)中的一項(xiàng)或多項(xiàng):白盒保護(hù)技術(shù)、節(jié)點(diǎn)鎖定技術(shù)、數(shù)據(jù)流模糊化、控制流模糊化和變換、同態(tài)數(shù)據(jù)變換、密鑰隱藏、程序互鎖以及邊界混合。所述裝置還可以包括被布置成把軟件項(xiàng)目從輸入表示轉(zhuǎn)換到LLVMIR的輸入轉(zhuǎn)換器,并且所述輸入表示可以是以下各項(xiàng)之一:二進(jìn)制或原生代碼表示、字節(jié)代碼表示以及源代碼表示。所述裝置還可以包括:編譯器和鏈接器,被布置成輸出作為二進(jìn)制代碼的經(jīng)過優(yōu)化和受保護(hù)的軟件項(xiàng)目,以及輸出轉(zhuǎn)換器,被布置成輸出作為asm.js代碼的經(jīng)過優(yōu)化和受保護(hù)的軟件項(xiàng)目。我們還描述一種統(tǒng)一隱蔽工具集,包括保護(hù)組件、優(yōu)化器組件以及一個(gè)或多個(gè)轉(zhuǎn)換器,該轉(zhuǎn)換器用于在由保護(hù)組件和優(yōu)化器組件使用的各項(xiàng)中間表示之間進(jìn)行轉(zhuǎn)換。優(yōu)化器組件可以包括一個(gè)或多個(gè)LLVM優(yōu)化器工具,并且所述統(tǒng)一隱蔽工具集可以包括一個(gè)或多個(gè)LLVM前端工具,用于從輸入表示轉(zhuǎn)換到LLVM中間表示中。所述統(tǒng)一隱蔽工具集、保護(hù)組件和/或優(yōu)化器組件可以被提供以在多于一項(xiàng)中間表示中對軟件項(xiàng)目應(yīng)用變換。所述統(tǒng)一隱蔽工具集還可以實(shí)施如這里所闡述的所述示例的各個(gè)其他方面,例如其中保護(hù)組件實(shí)施以下技術(shù)當(dāng)中的一種或多種:白盒保護(hù)技術(shù),節(jié)點(diǎn)鎖定技術(shù),數(shù)據(jù)流模糊化,控制流模糊化和變換,同態(tài)數(shù)據(jù)變換,密鑰隱藏,程序互鎖,以及邊界混合;所述統(tǒng)一隱蔽工具集還包括被布置成編譯并且鏈接到原生代碼表示中的編譯器和鏈接器;并且所述統(tǒng)一隱蔽工具集還包括輸出轉(zhuǎn)換器,用于轉(zhuǎn)換到作為JavaScript的子集的輸出表示。該描述還涵蓋已使用所描述的方法和/或裝置被優(yōu)化和保護(hù)的一個(gè)或多個(gè)軟件項(xiàng)目,并且這樣的軟件項(xiàng)目可以在計(jì)算機(jī)存儲(chǔ)器中、在計(jì)算機(jī)可讀介質(zhì)上、通過電信或計(jì)算機(jī)網(wǎng)絡(luò)以及通過其他方式被提供、存儲(chǔ)或傳輸?,F(xiàn)在將參照圖9-18來描述各個(gè)示例。在后面的描述中和在附圖中描述了特定示例。但是將認(rèn)識到的是,本討論中的構(gòu)思不限于所描述的示例,并且所述構(gòu)思的一些實(shí)施可以不包括后面所描述的全部特征?,F(xiàn)在參照圖9,其中示出了示例性計(jì)算機(jī)系統(tǒng)。例如由服務(wù)器A14提供軟件項(xiàng)目A12,所述軟件項(xiàng)目A12先前已被存儲(chǔ)在該服務(wù)器中。軟件項(xiàng)目A12可以意圖用于不同的目的,但是在圖9的系統(tǒng)中,其是意圖在多臺(tái)用戶計(jì)算機(jī)A20當(dāng)中的一臺(tái)或多臺(tái)上執(zhí)行和使用的應(yīng)用(有時(shí)被稱作app,這取決于比如該應(yīng)用如何被遞送以及其如何在用戶設(shè)備的情境中和更廣泛的操作環(huán)境中被使用之類的方面)。用戶計(jì)算機(jī)A20可以是個(gè)人計(jì)算機(jī)、智能電話、平板計(jì)算機(jī)或者任何其他適當(dāng)?shù)挠脩粼O(shè)備。這樣的用戶設(shè)備A20通常將包括操作系統(tǒng)A24,所述操作系統(tǒng)為運(yùn)行在用戶設(shè)備上的諸如web瀏覽器A22之類的其他軟件實(shí)體提供服務(wù)。軟件項(xiàng)目A12可以通過各種形式被遞送給用戶設(shè)備,但是通常可以采用如下形式:原生可執(zhí)行代碼、比如Java字節(jié)代碼之類的通用低層級代碼或者比如Java腳本之類的腳本化語言。通常,通用低層級代碼或腳本化語言軟件項(xiàng)目A12將在web瀏覽器A22內(nèi)或者在其直接控制下執(zhí)行。原生可執(zhí)行代碼中的軟件項(xiàng)目A12更有可能在操作系統(tǒng)A24的直接控制下執(zhí)行,但是某些類型的原生代碼(比如谷歌NaCl和PNaCl)則在web瀏覽器環(huán)境內(nèi)執(zhí)行。圖9的軟件項(xiàng)目A12通??梢杂蛇h(yuǎn)程web服務(wù)器A30通過比如因特網(wǎng)之類的數(shù)據(jù)網(wǎng)絡(luò)A28遞送到一個(gè)或多個(gè)用戶設(shè)備,但是可以使用其他遞送和安裝布置。所圖示的web服務(wù)器或者一臺(tái)或多臺(tái)其他服務(wù)器還可以為用戶設(shè)備A20并且特別是為在用戶設(shè)備A20上執(zhí)行的軟件項(xiàng)目A12提供數(shù)據(jù)、支持、數(shù)字權(quán)利管理和/或其他服務(wù)A32。不管是在用戶設(shè)備A20上的執(zhí)行之前、期間還是之后,軟件項(xiàng)目A12在這些設(shè)備A20上對于通過多種方式的攻擊和危害可能是脆弱的。舉例來說,軟件項(xiàng)目可以實(shí)施數(shù)字權(quán)利管理技術(shù),攻擊者可以例如通過提取算法的加密密鑰或細(xì)節(jié)來嘗試危害該數(shù)字權(quán)利管理技術(shù),這可以實(shí)現(xiàn)在將來規(guī)避針對該特定軟件項(xiàng)目、針對特定數(shù)字內(nèi)容等等的數(shù)字權(quán)利管理技術(shù)。因此,系統(tǒng)A10還提供優(yōu)化和保護(hù)工具集A40,其被用來在遞送到用戶設(shè)備A20之前對軟件項(xiàng)目A12進(jìn)行優(yōu)化和保護(hù)。在圖9中,優(yōu)化和保護(hù)工具集A40在軟件項(xiàng)目A12被遞送到web服務(wù)器A32之前對軟件項(xiàng)目A12實(shí)施動(dòng)作,但是其可以在服務(wù)器A14、web服務(wù)器A30中、在開發(fā)環(huán)境中(未示出)中或者在別處被實(shí)施。圖9中的優(yōu)化和保護(hù)工具集A40被示出為在操作系統(tǒng)A43的控制下在適當(dāng)?shù)挠?jì)算機(jī)裝置A42上執(zhí)行。計(jì)算機(jī)裝置A42通常將包括一個(gè)或多個(gè)處理器A44,其在用戶通過輸入/輸出設(shè)施A50的控制下使用存儲(chǔ)器A46執(zhí)行優(yōu)化和保護(hù)工具集A42的軟件代碼。計(jì)算機(jī)裝置A42以及優(yōu)化和保護(hù)工具集A40的功能可以跨由適當(dāng)?shù)臄?shù)據(jù)網(wǎng)絡(luò)連接連接的多個(gè)計(jì)算機(jī)單元分布。被用來提供優(yōu)化和保護(hù)工具集A40的全部軟件的部分可以被存儲(chǔ)在非易失性存儲(chǔ)裝置A48中,和/或存儲(chǔ)在一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)中,和/或可以通過數(shù)據(jù)網(wǎng)絡(luò)被傳送到計(jì)算機(jī)裝置A42。要提到的是,將被優(yōu)化和保護(hù)的軟件項(xiàng)目A12還可以是用于在比如應(yīng)用之類的另一個(gè)軟件項(xiàng)目中使用或者由其該另一個(gè)軟件項(xiàng)目使用的組件。為此目的,軟件項(xiàng)目A12例如可以是庫、模塊、代理或類似項(xiàng)目。在圖10中示意性地示出了優(yōu)化和保護(hù)工具集A40的示例性實(shí)施方式。優(yōu)化和保護(hù)工具集A40包括優(yōu)化器組件A100和保護(hù)器組件A110。優(yōu)化器組件A100被適配成對軟件項(xiàng)目A12實(shí)施優(yōu)化技術(shù)。優(yōu)化器組件A100被配置成在第一中間表示IR1中實(shí)施此類技術(shù),從而使得在優(yōu)化器組件A100實(shí)施軟件項(xiàng)目的優(yōu)化之前需要把軟件項(xiàng)目A12轉(zhuǎn)譯到該第一中間表示IR1中。保護(hù)器組件A110被適配成對軟件項(xiàng)目A12實(shí)施保護(hù)技術(shù)。保護(hù)組件被配置成在第二中間表示IR2中實(shí)施此類技術(shù),從而使得在保護(hù)器組件A110實(shí)施軟件項(xiàng)目A12的保護(hù)之前需要把軟件項(xiàng)目A12轉(zhuǎn)譯到該第二中間表示中。第一和第二中間表示是彼此不同的中間表示。通常來說,保護(hù)器組件A110無法對處于第一中間表示中的軟件項(xiàng)目進(jìn)行操作,并且優(yōu)化器組件無法對處于第二中間表示中的軟件項(xiàng)目進(jìn)行操作。優(yōu)化器組件A100和保護(hù)組件A110當(dāng)中的每一個(gè)可以被實(shí)施成優(yōu)化和保護(hù)工具集A40中的多個(gè)子組件A102、A112。特定組件的子組件可以關(guān)于彼此提供不同的和/或重復(fù)的功能,例如使得組件的總體角色可以通過各種方式被分布在優(yōu)化和保護(hù)工具集A40的軟件內(nèi)。優(yōu)化和保護(hù)工具集A40還提供多個(gè)轉(zhuǎn)換器,其被適配成把軟件項(xiàng)目A12從一種表示轉(zhuǎn)換到另一種。這些轉(zhuǎn)換器包括:第一轉(zhuǎn)換器組件A120,被布置成把軟件項(xiàng)目從由優(yōu)化器組件A100所使用的第一中間表示IR1轉(zhuǎn)換到由保護(hù)器組件A110所使用的第二中間表示IR2;以及第二轉(zhuǎn)換器組件A122,被布置成把軟件項(xiàng)目從由保護(hù)器組件A100所使用的第二中間表示IR2轉(zhuǎn)換到由優(yōu)化器組件110所使用第一中間表示IR1。當(dāng)然,第一和第二轉(zhuǎn)換器組件A120、A122可以被組合在單個(gè)功能軟件單元(比如單個(gè)模塊、可執(zhí)行或者面向?qū)ο蟮姆椒ǎㄈ绻M脑挘┲小\浖?xiàng)目A12在輸入表示Ri中被提供到優(yōu)化和保護(hù)工具集40。該輸入表示可以是任意數(shù)目的不同表示當(dāng)中的一種,例如第一或第二中間表示IR1、IR2,或者是另一種表示,比如源代碼表示、二進(jìn)制代碼表示等等。類似地,軟件項(xiàng)目A12在輸出表示Ro中被從優(yōu)化和保護(hù)工具集40輸出。該輸出表示也可以是任意數(shù)目的不同表示當(dāng)中的一種,例如第一或第二中間表示IR1、IR2或者是另一種表示(比如源代碼表示、二進(jìn)制代碼表示等等)中的任一種。優(yōu)化和保護(hù)工具集A40還可以包括一個(gè)或多個(gè)另外的組件,每一個(gè)組件被布置成對處于特定表示中的軟件項(xiàng)目A12進(jìn)行操作。這樣的組件例如可以包括:二進(jìn)制保護(hù)組件A130,提供被布置成對處于二進(jìn)制表示Rb中的軟件項(xiàng)目A12進(jìn)行操作的二進(jìn)制保護(hù)工具;二進(jìn)制重寫保護(hù)組件A135,提供被布置成對處于二進(jìn)制表示或某種其他表示(比如第一中間表示等等)中的軟件項(xiàng)目A12進(jìn)行操作的二進(jìn)制重寫保護(hù)工具。因此,除了第一轉(zhuǎn)換器組件A120和第二轉(zhuǎn)換器組件A122之外,優(yōu)化和保護(hù)工具集A40還被提供有在圖10中還被示出為X3…Xn的其他轉(zhuǎn)換器組件A124、A126,它們被用于按照需要在各種表示之間轉(zhuǎn)換軟件項(xiàng)目A12。舉例來說,一個(gè)這樣的轉(zhuǎn)換器組件A124、A126可以從C/C++源代碼表示轉(zhuǎn)換到第二中間表示IR2,并且另一個(gè)這樣的轉(zhuǎn)換器組件可以從第二中間表示IR2轉(zhuǎn)換回到C/C++源代碼表示。圖10還示出了作為優(yōu)化和保護(hù)工具集A40的部分的一個(gè)或多個(gè)編譯器或編譯器和鏈接器組件A140,它們可以被用來對軟件項(xiàng)目A12進(jìn)行編譯和鏈接,以便例如通常把軟件項(xiàng)目A12轉(zhuǎn)換到原生或二進(jìn)制代碼表示或者另一種適當(dāng)?shù)哪繕?biāo)表示中??梢员挥糜谳斎氡硎綬i以及優(yōu)化和保護(hù)工具集A40內(nèi)的其他表示的源代碼表示的示例包括C、C++、Objective-C、C#、Java、JavaScript、Ada、Fortran、ActionScript、GLSL、Haskell、Julia、Python、Ruby和Rust,但是技術(shù)人員將會(huì)知曉許多其他表示。輸入表示Ri可以替換地是原生或二進(jìn)制代碼、字節(jié)代碼等等,或者可能是第一和第二中間表示之一。可以被用于輸出表示Ro的表示的示例包括:用于直接在用戶設(shè)備上執(zhí)行的原生代碼表示,包括適于在web瀏覽器的控制下執(zhí)行的比如PNaCl和NaCl之類的原生代碼表示;比如Java字節(jié)代碼之類的字節(jié)代碼表示;比如Java源代碼之類的適于解譯后執(zhí)行或運(yùn)行時(shí)間編譯的表示;比如JavaScript和JavaScript的子集(比如asm.js)之類的腳本表示;以及可能的第一或第二中間表示。第一中間表示IR1通常可以被選擇成便于、適于或者按照其他方式被選擇用于實(shí)施優(yōu)化技術(shù)的中間表示。具體來說,第一中間表示可以是LLVMIR(LLVM中間表示)。技術(shù)人員已知并且例如在LLVM網(wǎng)站“http://llvm.org”討論的LLVM項(xiàng)目提供模塊化并且可重復(fù)使用的編譯器和工具鏈技術(shù)的集合,這些技術(shù):(i)引入支持與語言無關(guān)的指令集和類型系統(tǒng)的明確規(guī)定的通用中間表示(LLVMIR);(ii)提供完整編譯器系統(tǒng)和基礎(chǔ)結(jié)構(gòu)的中間層,該中間層取得LLVMIR中的軟件項(xiàng)目并且發(fā)出LLVMIR中的軟件項(xiàng)目的高度優(yōu)化的版本,該高度優(yōu)化的版本做好準(zhǔn)備進(jìn)行在多種源代碼表示中編寫的程序的編譯時(shí)間、鏈接時(shí)間、運(yùn)行時(shí)間和“空閑時(shí)間”優(yōu)化;(iii)支持用于源代碼和其他表示的豐富LLVM前端工具,所述表示不僅包括C和C++,而且還包括其他受歡迎的編程語言,比如前面提到的源代碼語言以及Java字節(jié)代碼等等;(iv)通過LLVM后端工具的集合,目前支持許多其他受歡迎的平臺(tái)和系統(tǒng),并且在不遠(yuǎn)的將來將支持更多移動(dòng)平臺(tái);以及(v)與OpenGL以及低端和高端GPU一起工作。適合于用作第一中間表示的其他表示包括Microsoft共同中間語言(CIL)。第二中間表示IR2通常可以被選擇成便于、適于或者按照其他方式被選擇用于實(shí)施保護(hù)技術(shù)的中間表示。第二中間表示例如可以按照如下這樣的方式被設(shè)計(jì)和實(shí)施:特定語言(例如C和C++)中的源代碼可以容易地被轉(zhuǎn)換到第二中間表示中,并且使得相同或類似語言中的源代碼可以容易地從第二中間表示構(gòu)造。由優(yōu)化器實(shí)施的優(yōu)化技術(shù)可以包括用以提高軟件項(xiàng)目的執(zhí)行速度、減少執(zhí)行空閑時(shí)間、減少對于軟件項(xiàng)目的存儲(chǔ)和/或執(zhí)行所需的存儲(chǔ)器、提高核心或GPU的使用率等等的技術(shù)。方便的是,這些和其他優(yōu)化功能由LLVM項(xiàng)目提供。用以實(shí)現(xiàn)此類優(yōu)化的技術(shù)可以包括向量化、空閑時(shí)間、常數(shù)傳播、無用賦值消除、內(nèi)聯(lián)展開、可到達(dá)性分析、保護(hù)中斷正常以及其他優(yōu)化。保護(hù)器組件的目的是保護(hù)軟件項(xiàng)目的功能或數(shù)據(jù)處理,和/或保護(hù)由軟件項(xiàng)目使用或處理的數(shù)據(jù)。這可以通過應(yīng)用隱蔽技術(shù)(比如同態(tài)數(shù)據(jù)變換、控制流變換、白盒加密術(shù)、密鑰隱藏、程序互鎖以及邊界混合)來實(shí)現(xiàn)。具體來說,由保護(hù)器組件處理之后的軟件項(xiàng)目將提供與這樣的處理之前相同的功能或數(shù)據(jù)處理——但是該功能或數(shù)據(jù)處理通常以一種方式被實(shí)施在受保護(hù)的軟件項(xiàng)目中,從而使得用戶設(shè)備的操作員無法通過非意圖的或未經(jīng)授權(quán)的方式訪問或使用來自軟件項(xiàng)目的該功能或數(shù)據(jù)處理(然而如果按照未受保護(hù)的形式向用戶設(shè)備提供軟件項(xiàng)目,則用戶設(shè)備的操作員可能能夠按照非意圖的或者未經(jīng)授權(quán)的方式訪問或使用所述功能或數(shù)據(jù)處理)。類似地,在由保護(hù)器組件處理之后,軟件項(xiàng)目可以按照受保護(hù)的或者模糊化的方式存儲(chǔ)秘密信息(比如密碼密鑰),從而使得攻擊者更加難以(如果不是不可能的話)推斷出或訪問該秘密信息(然而如果按照未受保護(hù)的形式向用戶設(shè)備提供了軟件項(xiàng)目,則用戶設(shè)備的操作員可能能夠推斷出或訪問該秘密信息)。例如:-軟件項(xiàng)目可以包括至少部分地基于將由該軟件項(xiàng)目處理的一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)目的判定(或者判定塊或分支點(diǎn))。如果軟件項(xiàng)目按照未受保護(hù)的形式被提供到用戶設(shè)備A20,則攻擊者可能能夠強(qiáng)制軟件項(xiàng)目執(zhí)行,從而使得在處理判定之后遵循一執(zhí)行路徑,即使該執(zhí)行路徑原本不應(yīng)當(dāng)被遵循。舉例來說,所述判定可以包括測試程序變量B是真(TRUE)還是假(FALSE),并且軟件項(xiàng)目可以被布置成使得如果判定識別出B為真,則執(zhí)行路徑PT被遵循/執(zhí)行,而如果判定識別出B為假,則執(zhí)行路徑PF被遵循/執(zhí)行。在這種情況下,攻擊者可以(例如通過使用調(diào)試器)在所述判定識別出B為真的情況下強(qiáng)制軟件項(xiàng)目遵循路徑PF,和/或在所述判定識別出B為假的情況下強(qiáng)制軟件項(xiàng)目遵循路徑PT。因此,在一些實(shí)施例中,保護(hù)器組件A110旨在通過對軟件項(xiàng)目內(nèi)的所述判定應(yīng)用一種或多種軟件保護(hù)技術(shù)來防止攻擊者這樣做(或者至少使其更加困難)。-軟件項(xiàng)目可以包括以下各項(xiàng)當(dāng)中的一項(xiàng)或多項(xiàng):安全性相關(guān)功能;訪問控制功能;密碼功能;以及權(quán)利管理功能。這樣的功能常常涉及使用秘密數(shù)據(jù),比如一個(gè)或多個(gè)密碼密鑰。所述處理可以涉及使用一個(gè)或多個(gè)密碼密鑰和/或?qū)σ粋€(gè)或多個(gè)密碼密鑰進(jìn)行操作或者利用一個(gè)或多個(gè)密碼密鑰進(jìn)行操作。如果攻擊者能夠識別或確定秘密數(shù)據(jù),則已經(jīng)發(fā)生安全漏洞,并且對于受到秘密數(shù)據(jù)保護(hù)的數(shù)據(jù)(比如音頻和/或視頻內(nèi)容)的控制或管理可能被規(guī)避。因此,在一些示例中,保護(hù)器組件A110旨在通過對軟件項(xiàng)目內(nèi)的此類功能應(yīng)用一種或多種軟件保護(hù)技術(shù)來防止攻擊者識別或確定一項(xiàng)或多項(xiàng)秘密數(shù)據(jù)(或者至少使其更加困難)?!鞍缀校╳hite-box)”環(huán)境是用于軟件項(xiàng)目的執(zhí)行環(huán)境,其中假設(shè)軟件項(xiàng)目的攻擊者對于軟件項(xiàng)目的正被操作的數(shù)據(jù)(包括中間數(shù)值)、存儲(chǔ)器內(nèi)容以及執(zhí)行/過程流程具有完全的訪問權(quán)限和可見性。此外,在白盒環(huán)境中,假設(shè)攻擊者能夠例如通過使用調(diào)試器修改軟件項(xiàng)目的正被操作的數(shù)據(jù)、存儲(chǔ)器內(nèi)容以及執(zhí)行/過程流程——這樣,攻擊者可以對軟件項(xiàng)目的操作進(jìn)行實(shí)驗(yàn)并且嘗試操縱軟件項(xiàng)目的操作,其目的是規(guī)避初始意圖的功能和/或識別秘密信息和/或出于其他目的。實(shí)際上,人們甚至可以假設(shè)攻擊者知曉正由軟件項(xiàng)目實(shí)施的底層算法。但是軟件項(xiàng)目可能需要使用秘密信息(例如一個(gè)或多個(gè)密碼密鑰),其中該信息需要對于攻擊者保持隱藏。類似地,將會(huì)希望防止攻擊者修改軟件項(xiàng)目的執(zhí)行/控制流,例如防止攻擊者強(qiáng)制軟件項(xiàng)目在判定塊之后采取并非合法執(zhí)行路徑的一條執(zhí)行路徑。有許多技術(shù)(其在這里被稱作“白盒模糊化技術(shù)”)用于變換軟件項(xiàng)目,從而使得它抵抗白盒攻擊。這樣的白盒模糊化技術(shù)的示例可以被發(fā)現(xiàn),這樣的白盒模糊化技術(shù)的示例中可以在如下文獻(xiàn)中找到:“White-BoxCryptographyandanAESImplementation”S.Chowetal,SelectedAreasinCryptography,9thAnnualInternationalWorkshop,SAC2002,LectureNotesinComputerScience2595(2003),p250-270)以及“AWhite-boxDESImplementationforDRMApplications”,S.Chowetal,DigitalRightsManagement,ACMCCS-9Workshop,DRM2002,LectureNotesinComputerScience2696(2003),p1-15,其全部公開內(nèi)容通過引用被合并在此。附加的示例可以在US61/055,694和WO2009/140774中找到,這兩個(gè)文獻(xiàn)的全部公開內(nèi)容通過引用被合并在此。一些白盒模糊化技術(shù)實(shí)施數(shù)據(jù)流模糊——例如參見US7,350,085、US7,397,916、US6,594,761和US6,842,862,其全部公開內(nèi)容通過引用被合并在此。一些白盒模糊化技術(shù)實(shí)施控制流模糊——例如參見US6,779,114、US6,594,761和US6,842,862,其全部公開內(nèi)容通過引用被合并在此。但是將認(rèn)識到,存在其他白盒模糊化技術(shù),并且各示例可以使用任何白盒模糊化技術(shù)。作為另一個(gè)示例,有可能的情況是軟件項(xiàng)目可能意圖被提供(或者分發(fā))到特定用戶設(shè)備A20(或者用戶設(shè)備A20的特定集合)并且由其使用,并且因此希望把軟件項(xiàng)目“鎖定”到(一個(gè)或多個(gè))特定用戶設(shè)備A20,也就是說防止軟件項(xiàng)目在另一個(gè)用戶設(shè)備A20上執(zhí)行。因此,有許多技術(shù)(在這里被稱作“節(jié)點(diǎn)鎖定”保護(hù)技術(shù))用于變換軟件項(xiàng)目,使得受保護(hù)的軟件項(xiàng)目可以在一個(gè)或多個(gè)預(yù)定/特定用戶設(shè)備A20上執(zhí)行(或者由其執(zhí)行)但是將不會(huì)在其他用戶設(shè)備上執(zhí)行。這樣的節(jié)點(diǎn)鎖定技術(shù)的示例可以在WO2012/126077中找到,其全部公開內(nèi)容通過引用被合并在此。但是將認(rèn)識到的是,存在其他節(jié)點(diǎn)鎖定技術(shù),并且各個(gè)示例可以使用任何節(jié)點(diǎn)鎖定技術(shù)。數(shù)字加水印是一種眾所周知的技術(shù)。具體來說,數(shù)字加水印涉及修改初始數(shù)字對象以產(chǎn)生加有水印的數(shù)字對象。做出修改以把特定數(shù)據(jù)(其被稱作有效載荷數(shù)據(jù))嵌入或隱藏到初始數(shù)字對象中。所述有效載荷數(shù)據(jù)例如可以包括標(biāo)識數(shù)字對象的所有權(quán)或其他權(quán)利信息的數(shù)據(jù)。有效載荷數(shù)據(jù)可以標(biāo)識加有水印的數(shù)字對象的(預(yù)期)接收者,在這種情況下,有效載荷數(shù)據(jù)被稱作數(shù)字指紋——這樣的數(shù)字加水印可以被用來幫助追蹤數(shù)字對象的未經(jīng)授權(quán)的拷貝的起源。數(shù)字加水印可以被應(yīng)用于軟件項(xiàng)目。這樣的軟件加水印技術(shù)的示例可以在US7,395,433中找到,該文獻(xiàn)的全部公開內(nèi)容通過引用被合并在此。但是將認(rèn)識到,存在其他軟件加水印技術(shù),并且各示例可以使用任何軟件加水印技術(shù)??赡芟M衍浖?xiàng)目的不同版本提供到不同的用戶設(shè)備A20。軟件項(xiàng)目的不同版本為不同的用戶設(shè)備A20提供相同的功能——但是受保護(hù)的軟件項(xiàng)目的不同版本被不同地編程或?qū)嵤?。這樣有助于限制攻擊者成功地攻擊受保護(hù)的軟件項(xiàng)目的影響。具體來說,如果攻擊者成功地攻擊了他的受保護(hù)的軟件項(xiàng)目的版本,則該攻擊(或者通過該攻擊發(fā)現(xiàn)或訪問的比如密碼密鑰之類的數(shù)據(jù))可能不適合于供受保護(hù)的軟件項(xiàng)目的不同版本使用。因此,有許多技術(shù)(在這里被稱作“多樣性(diversity)”技術(shù))用于對軟件項(xiàng)目進(jìn)行變換,從而使得生成軟件項(xiàng)目的不同的受保護(hù)的版本(也就是說從而使得引入“多樣性”)。這樣的多樣性技術(shù)的示例可以在WO2011/120123中找到,其全部公開內(nèi)容通過引用被合并在此。但是將認(rèn)識到的是,存在其他多樣性技術(shù),并且各個(gè)示例可以使用任何多樣性技術(shù)。前面提到的白盒模糊化技術(shù)、節(jié)點(diǎn)鎖定技術(shù)、軟件加水印技術(shù)和多樣性技術(shù)是軟件保護(hù)技術(shù)的示例。將認(rèn)識到的是,存在對軟件項(xiàng)目應(yīng)用保護(hù)的其他方法。因此,這里所使用的術(shù)語“軟件保護(hù)技術(shù)”應(yīng)當(dāng)被理解成意味著對軟件項(xiàng)目應(yīng)用保護(hù)的任何方法(目的是挫敗攻擊者的攻擊,或者至少使得攻擊者更加難以成功進(jìn)行其攻擊),比如任一種前面提到的白盒模糊化技術(shù)和/或任一種前面提到的節(jié)點(diǎn)鎖定技術(shù)和/或任一種前面提到的軟件加水印技術(shù)和/或任一種前面提到的多樣性技術(shù)。存在許多方式可以由保護(hù)器組件A110用來在軟件項(xiàng)目A260內(nèi)實(shí)施前面提到的軟件保護(hù)技術(shù)。舉例來說,為了保護(hù)軟件項(xiàng)目,保護(hù)器模塊A110可以修改軟件項(xiàng)目內(nèi)的一個(gè)或多個(gè)代碼部分,和/或可以將一個(gè)或多個(gè)新的代碼部分添加或引入到軟件項(xiàng)目A220中。作出這些修改的實(shí)際方式或者編寫新的代碼部分的實(shí)際方式當(dāng)然可以變化——畢竟有許多編寫軟件以實(shí)現(xiàn)相同功能的方式。二進(jìn)制保護(hù)組件A130用于接受在由編譯器和鏈接器A140進(jìn)行編譯之后具有原生或二進(jìn)制代碼或字節(jié)代碼形式的軟件項(xiàng)目,并且應(yīng)用二進(jìn)制保護(hù)技術(shù),比如完整性驗(yàn)證、反調(diào)試(anti-debugging)、代碼加密、安全加載以及安全存儲(chǔ)。二進(jìn)制保護(hù)組件隨后通常把軟件項(xiàng)目重新包裝到具有必要的安全性數(shù)據(jù)的完全受保護(hù)的二進(jìn)制代碼中,所述安全性數(shù)據(jù)可以在其在用戶設(shè)備A20上加載和執(zhí)行期間被訪問和使用。因此,對于開發(fā)人員可以訪問其中所有源代碼的軟件項(xiàng)目,優(yōu)化和保護(hù)工具集A40可以被用來:使用保護(hù)組件A112首先在第二中間表示中對應(yīng)用的源代碼應(yīng)用源代碼保護(hù)工具,并且隨后通過使用源代碼保護(hù)技術(shù)對已經(jīng)受到保護(hù)的二進(jìn)制代碼應(yīng)用二進(jìn)制保護(hù)。在源代碼和二進(jìn)制代碼域二者中都對軟件項(xiàng)目應(yīng)用這樣的保護(hù)得到更加有效地受到保護(hù)的軟件項(xiàng)目。圖11圖示了可以使用優(yōu)化和保護(hù)工具集A40實(shí)施的工作流程A200中的一些。軟件項(xiàng)目在輸入表示Ri中被提供到工具集。該表示通??梢允侨缜懊嫠懻摰脑创a或二進(jìn)制代碼表示。軟件項(xiàng)目在步驟A205處被轉(zhuǎn)換到第一中間表示。這可以涉及使用單個(gè)轉(zhuǎn)換器組件A120-A128,或者兩個(gè)或更多個(gè)轉(zhuǎn)換器組件。通常來說,軟件項(xiàng)目可以從輸入表示Ri直接被轉(zhuǎn)換到第一中間表示中,或者從輸入表示Ri通過另一表示(比如第二中間表示)被轉(zhuǎn)換到第一中間表示中。隨后在步驟A210處使用圖10的優(yōu)化器組件A100對第一中間表示IR1中的軟件項(xiàng)目進(jìn)行優(yōu)化,并且隨后在步驟A215處使用圖2的第一轉(zhuǎn)換器A120將第一中間表示IR1中的軟件項(xiàng)轉(zhuǎn)換到第二中間表示IR2。隨后在步驟A220處使用圖10的保護(hù)器組件A110對第二中間表示IR2中的軟件項(xiàng)目進(jìn)行保護(hù),并且隨后在步驟A225處使用圖10的第二轉(zhuǎn)換器A122將第二中間表示IR2中的軟件項(xiàng)目轉(zhuǎn)換回到第一中間表示IR1。隨后第一中間表示IR1中的軟件項(xiàng)目在步驟A230處使用圖10的優(yōu)化器組件A100再次被優(yōu)化。其隨后在輸出表示Ro中被輸出之前可以在步驟235處經(jīng)歷另外的處理的各個(gè)方面。另外的處理的各個(gè)方面可以包括編譯和鏈接、二進(jìn)制保護(hù)、轉(zhuǎn)換到其他表示等等當(dāng)中的一項(xiàng)或多項(xiàng)。圖中的虛線流程箭頭表明在第二優(yōu)化步驟A230之后,工作流程A200可以返回到用于轉(zhuǎn)換回到第二中間表示的步驟A215,以及一個(gè)或多個(gè)另外的保護(hù)和優(yōu)化步驟。圖11的工作流程A200可以按照不同方式被改變。舉例來說,軟件項(xiàng)目可以在保護(hù)步驟A220之前或者之后僅被優(yōu)化一次,并且進(jìn)一步處理的步驟A235可以被省略或者包括多個(gè)步驟。保護(hù)或優(yōu)化可以在另一項(xiàng)之前被實(shí)施,并且可以實(shí)施任意數(shù)目的另外的優(yōu)化和保護(hù)步驟。從輸入表示Ri到針對優(yōu)化所使用的表示IR1的轉(zhuǎn)換可以包括多個(gè)轉(zhuǎn)換步驟,例如從Ri到IR2的轉(zhuǎn)換,之后是從IR2到IR1的轉(zhuǎn)換。另外的處理步驟A235可以包括其他優(yōu)化和/或保護(hù)步驟,例如二進(jìn)制重寫保護(hù)步驟?,F(xiàn)在將描述如何可以實(shí)施圖10的優(yōu)化和保護(hù)工具集A40以及比如圖11的工作流程之類的工作流程的更加具體的示例。在這些具體示例中,第一中間表示通常是前面所討論的LLVMIR。這實(shí)現(xiàn)了原生應(yīng)用保護(hù)的范圍的擴(kuò)展以獲得更好的性能和安全性,并且還針對優(yōu)化和保護(hù)工具集A40的大得多的操作范圍開放了新的安全性可能性。對發(fā)明人已經(jīng)變得顯而易見的是,在準(zhǔn)備用于分發(fā)到多個(gè)用戶設(shè)備A20的軟件項(xiàng)目時(shí),存在安全性與性能之間的沖突問題。一般來說,受保護(hù)的軟件會(huì)引入必要的冗余性和開銷,這將使得具有受保護(hù)的形式并且特別是具有隱蔽的形式的軟件的性能變慢。被應(yīng)用于軟件項(xiàng)目的保護(hù)技術(shù)越多,對于性能的影響就越顯著。因此,需要在性能與安全性之間取得平衡。典型的保護(hù)技術(shù)可以把靜態(tài)程序相關(guān)性轉(zhuǎn)換成部分靜態(tài)并且部分動(dòng)態(tài)相關(guān)性。這防止通常比動(dòng)態(tài)攻擊更容易實(shí)施的完全靜態(tài)的攻擊。但是這還引入了限制,該限制是:這些保護(hù)技術(shù)可能會(huì)破壞依賴于對靜態(tài)相關(guān)性的屬性的分析的特定優(yōu)化能力。由于這一限制,保護(hù)和優(yōu)化策略需要在較低安全性/保護(hù)但是例如在執(zhí)行速度和/或更小程序尺寸方面的更好優(yōu)化與較高安全性/保護(hù)但是更少優(yōu)化之間作出選擇。圖12圖示了可以使用優(yōu)化和保護(hù)工具集A40實(shí)施的工作流程。軟件項(xiàng)目在作為C/C++源代碼表示Rc的輸入表示Ri中被提供到優(yōu)化和保護(hù)工具集A40。軟件項(xiàng)目被傳遞到由以下各項(xiàng)構(gòu)成的工具集組件分組A300:從表示Rc轉(zhuǎn)換到第二中間表示IR2的轉(zhuǎn)換器X3,保護(hù)器組件A110,以及從第二中間表示IR2轉(zhuǎn)換回到源代碼表示Rc的轉(zhuǎn)換器X4。如果將不會(huì)發(fā)生第一中間表示中的LLVM優(yōu)化,則軟件項(xiàng)目可以在被傳遞到編譯器、優(yōu)化器和鏈接器A140之前被順序地傳遞經(jīng)過這些功能當(dāng)中的每一項(xiàng)以對軟件項(xiàng)目進(jìn)行保護(hù),并且隨后繼續(xù)傳遞到二進(jìn)制保護(hù)組件A130以便在作為原生/二進(jìn)制代碼表示Rb的輸出表示中輸出軟件項(xiàng)目。還提供安全庫和代理的集合A145以用于編譯/鏈接軟件項(xiàng)目1A2,并且如果需要的話還被提供用于由二進(jìn)制保護(hù)組件A130使用。工具集組件分組A300由優(yōu)化器組件A100補(bǔ)充,優(yōu)化器組件A100在這里出于清楚起見被示出為實(shí)施一個(gè)或多個(gè)LLVM優(yōu)化工具的單個(gè)子組件A102,但是例如可以使用多個(gè)子組件A102,其中在每一個(gè)優(yōu)化階段使用不同的子組件、多個(gè)子組件或者子組件的不同組合。圖10的X1和X2轉(zhuǎn)換器隨后被用來把軟件項(xiàng)目從使用X3轉(zhuǎn)換器124形成的和/或由工具集組件分組A300中的保護(hù)器組件A112輸出的第二中間表示轉(zhuǎn)換到第一中間表示以供LLVM優(yōu)化工具使用,并且在由LLVM優(yōu)化工具進(jìn)行的優(yōu)化之后對軟件項(xiàng)目進(jìn)行轉(zhuǎn)換,以便由保護(hù)器組件A110進(jìn)行保護(hù)和/或用于由X4轉(zhuǎn)換器轉(zhuǎn)換回到Rc表示。在圖12中使用虛線圖示了一些替換的工作流程路徑。舉例來說,在由保護(hù)器組件A110進(jìn)行處理并且轉(zhuǎn)換到IR1表示之后,軟件項(xiàng)目可以被直接發(fā)送到編譯器、優(yōu)化器和鏈接器A140,而沒有由優(yōu)化器組件A100進(jìn)行第二處理步驟。類似地,如果編譯器、優(yōu)化器和鏈接器A140能夠應(yīng)對第一中間表示中的輸入,則在優(yōu)化器組件A100進(jìn)行第二處理步驟之后,軟件項(xiàng)目可以被直接發(fā)送到編譯器、優(yōu)化器和鏈接器A140,而沒有由X1和X4轉(zhuǎn)換器進(jìn)行的轉(zhuǎn)換。因此,X1和X2轉(zhuǎn)換器在由保護(hù)器組件在第二中間表示中提供的保護(hù)技術(shù)的域與由LLVM優(yōu)化工具在第一中間表示中提供的優(yōu)化技術(shù)的域之間提供橋梁,從而整合了優(yōu)化和保護(hù)工具集A40的這兩個(gè)操作領(lǐng)域。這種方法還有助于解決前面所討論的保護(hù)與優(yōu)化之間的沖突,因?yàn)閮?yōu)化和保護(hù)工具集A40可以利用可用的LLVM優(yōu)化工具和技術(shù)的能力,以便在由保護(hù)組件A110應(yīng)用保護(hù)技術(shù)之前和之后都提供優(yōu)化。通過在多個(gè)層級實(shí)現(xiàn)優(yōu)化,有可能移除安全性與性能之間的限制,從而可以針對相同的軟件項(xiàng)目A12都獲得更好的安全性和改進(jìn)的性能兩者。圖13圖示了可以使用優(yōu)化和保護(hù)工具集A40實(shí)施的另一個(gè)工作流程。在該圖中,軟件項(xiàng)目在作為源代碼表示Rs的輸入表示Ri中被提供到優(yōu)化和保護(hù)工具集40。源代碼表示Rs例如可以是Objective-C、Java、JavaScript、C#、Ada、Fortran、ActionScript、GLSL、Haskell、Julia、Python、Ruby或Rust。軟件項(xiàng)目被傳遞到轉(zhuǎn)換器X5,轉(zhuǎn)換器X5把源代碼表示Rs轉(zhuǎn)換到第一中間表示中。轉(zhuǎn)換器X5可以被提供作為LLVM前端工具A320的集合的一部分,所述LLVM前端工具A320提供從各種各樣的源代碼表示到LLVMIR的轉(zhuǎn)換?,F(xiàn)在處于LLVMIR中的軟件項(xiàng)目可以被傳遞到優(yōu)化器組件A100以用于由LLVM優(yōu)化器工具實(shí)施第一優(yōu)化步驟,或者被直接傳遞到X1轉(zhuǎn)換器(如虛線所示)以便在被傳遞到優(yōu)化器組件A100之前轉(zhuǎn)換到第二中間表示。圖13的其余部分對應(yīng)于圖12。要注意,圖13的工具集組件分組300沒有被示出為包括X3轉(zhuǎn)換器,這是因?yàn)槠湓趫D13的工作流程中不是必要的,但是如果希望的話仍然可以將其包括在該分組中。由于非常豐富的可用LLVM前端工具A320的集合可以把許多不同的語言轉(zhuǎn)換到LLVMIR中,并且由此利用LLVM編譯設(shè)施來獲得精密的分析和更好的性能,因此如圖13中所示,這些LLVM前端工具可以被用來擴(kuò)展優(yōu)化和保護(hù)工具集A40的前端能力,以便把較大的編程語言集合中的程序源代碼經(jīng)由可以在其中應(yīng)用保護(hù)器組件A110的保護(hù)技術(shù)的第一中間表示轉(zhuǎn)換到第二中間表示中。圖14圖示了可以使用優(yōu)化和保護(hù)工具集A40實(shí)施的另一個(gè)工作流程。在該圖中,軟件項(xiàng)目在作為原生/二進(jìn)制表示Rb的輸入表示Ri中被提供到優(yōu)化和保護(hù)工具集A40,以供在用戶設(shè)備A20的特定平臺(tái)或類別上執(zhí)行。二進(jìn)制表示Rb例如可以是x86、x86-64、ARM、SPARC、PowerPC、MIPS和m68k二進(jìn)制表示當(dāng)中的任一種。軟件項(xiàng)目被傳遞到轉(zhuǎn)換器X6,轉(zhuǎn)換器X6把二進(jìn)制表示Rb轉(zhuǎn)換到第一中間表示中。轉(zhuǎn)換器X6可以被提供作為LLVM二進(jìn)制工具A330的集合的部分,所述LLVM二進(jìn)制工具A330提供從各種各樣的二進(jìn)制表示到LLVMIR的轉(zhuǎn)換。圖14的其余部分對應(yīng)于圖12和13。通過以這種方式使用LLVM二進(jìn)制工具,在被轉(zhuǎn)換到第二中間表示中以供輸入到保護(hù)器組件A300以便應(yīng)用比如隱蔽之類的保護(hù)技術(shù)之前,原生/二進(jìn)制代碼中的軟件項(xiàng)目可以被轉(zhuǎn)換到LLVMIR形式中。如果輸出表示Ro是針對與輸入表示二進(jìn)制代碼的目標(biāo)平臺(tái)不同的目標(biāo)平臺(tái)的二進(jìn)制代碼,則通過適當(dāng)?shù)嘏渲镁幾g器、優(yōu)化器和鏈接器A140,優(yōu)化和保護(hù)工具集A40可以容易地被用來達(dá)到這個(gè)目標(biāo):在應(yīng)用所需的保護(hù)技術(shù)時(shí)一個(gè)輸出同時(shí)用于不同的目標(biāo)平臺(tái)。LLVM編譯器中間層工具包括精密的程序分析能力,比如更加精確的別名(alias)分析、指針逃逸(pointerescape)分析以及相關(guān)性分析,這些可以提供豐富的程序?qū)傩院拖嚓P(guān)性,它們可以被用來出于不同目的對程序進(jìn)行變換。圖10中圖示的二進(jìn)制重寫保護(hù)組件A135提供一個(gè)或多個(gè)二進(jìn)制重寫保護(hù)工具,二進(jìn)制重寫保護(hù)工具接受LLVMIR形式的軟件項(xiàng)目,通過利用LLVM的程序分析功能進(jìn)行模糊化變換,并且得到LLVMIR中的軟件項(xiàng)目的更加安全的版本。二進(jìn)制重寫保護(hù)組件A135可以通過多種不同方式(包括獨(dú)立二進(jìn)制重寫保護(hù)、利用二進(jìn)制保護(hù)工具的二進(jìn)制重寫保護(hù)以及利用源隱蔽工具和二進(jìn)制保護(hù)工具二者的二進(jìn)制重寫保護(hù))增強(qiáng)軟件項(xiàng)目的保護(hù)。獨(dú)立二進(jìn)制重寫保護(hù)——通常來說,二進(jìn)制保護(hù)對處于二進(jìn)制形式中的二進(jìn)制代碼進(jìn)行保護(hù),并且一些這樣的保護(hù)技術(shù)需要對二進(jìn)制表示進(jìn)行作用,例如完整性驗(yàn)證、安全加載以及動(dòng)態(tài)代碼加密。此外,如果所需的程序信息變?yōu)榭捎茫瑒t二進(jìn)制保護(hù)可以應(yīng)用特定種類的變換。但是現(xiàn)有的二進(jìn)制保護(hù)工具往往對分析能力的支持有限,從而使得非常有限的二進(jìn)制變換能夠直接以二進(jìn)制形式進(jìn)行。替代地,二進(jìn)制重寫保護(hù)工具可以被適配成在比如LLVMIR之類的中間表示中作用于軟件項(xiàng)目,在中間表示中精密得多的程序分析支持可以被利用,從而應(yīng)用無法容易地被直接應(yīng)用于二進(jìn)制表示中的軟件的許多變換技術(shù)。在獨(dú)立模式下,使用一個(gè)或多個(gè)LLVM二進(jìn)制工具A330把處于未受保護(hù)的二進(jìn)制代碼表示中的軟件項(xiàng)目轉(zhuǎn)換到LLVMIR中,并且隨后二進(jìn)制重寫保護(hù)組件A135被用來通過與LLVM程序分析工具進(jìn)行交互來對軟件項(xiàng)目應(yīng)用特定程序變換。然后通過使用LLVMIR到二進(jìn)制轉(zhuǎn)換器、編譯器、優(yōu)化器和鏈接器或者通過其他方式把LLVMIR中的重寫軟件項(xiàng)目轉(zhuǎn)換到受保護(hù)的二進(jìn)制代碼表示中。利用二進(jìn)制保護(hù)工具的二進(jìn)制重寫保護(hù)——在此模式下,可以通過使用二進(jìn)制重寫保護(hù)組件A135把處于二進(jìn)制代碼表示中的、被提供到優(yōu)化和保護(hù)工具集A40的軟件項(xiàng)目模糊化到受保護(hù)的二進(jìn)制表示中。然后可以通過使用比如由圖10的二進(jìn)制保護(hù)組件A130提供的通用二進(jìn)制保護(hù)工具進(jìn)一步保護(hù)軟件項(xiàng)目。以這種方式通過使用二進(jìn)制重寫保護(hù)和二進(jìn)制保護(hù)二者把不同的保護(hù)層組合在一起得到更加安全的軟件項(xiàng)目A12。利用源層級保護(hù)和二進(jìn)制保護(hù)的二進(jìn)制重寫保護(hù)——一般來說,對比如前面所討論的第二中間表示之類的源代碼類型表示的保護(hù)處理可以提供更加全面和更深層次的數(shù)據(jù)流和控制流保護(hù)。圖15使用類似于圖14的工作流程的工作流程圖示了這一點(diǎn),其中LLVM二進(jìn)制工具被用來把在二進(jìn)制表示中提供到優(yōu)化和保護(hù)工具集A40的軟件項(xiàng)目A12轉(zhuǎn)換到第一中間表示。此外在圖15中,在保護(hù)器組件A112的動(dòng)作之后從優(yōu)化器組件A102或者替換地直接從轉(zhuǎn)換器X2輸出的軟件項(xiàng)目被導(dǎo)向二進(jìn)制重寫保護(hù)工具A135。在二進(jìn)制重寫保護(hù)工具A135的操作之后,軟件項(xiàng)目隨后被繼續(xù)傳遞到先前所描述的編譯器、優(yōu)化器和鏈接器A140。二進(jìn)制重寫保護(hù)工具A135是可以被使用在這種布置中的LLVM編譯器中間層工具A345的示例。如由圖15中的虛線所示,軟件項(xiàng)目可以替換地在第一優(yōu)化之后被直接導(dǎo)向二進(jìn)制重寫保護(hù)工具而沒有由保護(hù)器組件A112進(jìn)行處理或第二優(yōu)化階段,或者可以按照省略第一或第二優(yōu)化步驟的方式被處理。web應(yīng)用是使用web瀏覽器作為客戶端環(huán)境的應(yīng)用。web應(yīng)用通常是用瀏覽器支持的編程語言(比如JavaScript)與瀏覽器渲染的標(biāo)記語言(比如HTML)相組合來編碼的,并且依賴于其主控web瀏覽器來使其可執(zhí)行?!癮sm.js”是JavaScript的有限子集,并且例如在網(wǎng)站http://asmjs.org處進(jìn)行了討論?!癮sm.js”支持C類計(jì)算,但是由于其是JavaScript的子集,因此其在支持JavaScript的任何web瀏覽器中正確地運(yùn)行,而不需要任何進(jìn)一步的特殊支持。由asm.js使用的子集使得容易使用類型推斷的普通方法辨識出低層級操作?!癮sm.js”確實(shí)依賴于支持WebGL所需要的擴(kuò)展(比如UInt32、INt16等等之類的緩沖器和類型數(shù)組)以便支持低層級結(jié)構(gòu)、數(shù)組等等,但是這些通常在主控web服務(wù)器中可用??梢允褂谩皍seasm”指令在JavaScript文件中標(biāo)記JavaScript程序遵循“asm.js”表示。主控web瀏覽器隨后可以在沒有針對“asm.js”的顯式支持的情況下忽略該指令,或者可以在支持可用的情況下檢查程序是否符合“asm.js”表示。如果在web瀏覽器中支持可用,則與通常的JavaScript相比,asm.js代碼能夠以大大提高的速度和效率運(yùn)行,這通常是通過把a(bǔ)sm.js代碼編譯到原生二進(jìn)制代碼表示中而實(shí)現(xiàn)的。在現(xiàn)有技術(shù)中提供了用于把比如C和C++之類的源代碼表示轉(zhuǎn)換到asm.js表示中的工具。一個(gè)這樣的工具鏈將由如下各項(xiàng)構(gòu)成:把C和C++表示轉(zhuǎn)換到LLVRIR中的Clang工具(參見http://clang.llvm.org)以及把LLVMIR轉(zhuǎn)換到asm.js表示中的Emscripten工具(參見https://github.com/kripken/emscripten)。LLVM優(yōu)化工具可以作為該工具鏈的部分被應(yīng)用,以便在應(yīng)用Emscripten工具之前實(shí)施優(yōu)化。圖16圖示了優(yōu)化和保護(hù)工具集A40如何可以被用來優(yōu)化和保護(hù)在C/C++源表示Rc中提供的軟件項(xiàng)目,并且在asm.js表示Ra中輸出軟件項(xiàng)目。圖16的工作流程遵循與圖12到15的方案類似的方案。根據(jù)用粗虛線示出的第一工作流程路線,在C/C++表示Rc中輸入的軟件項(xiàng)目被傳遞到工具集組件分組A300,在工具集組件分組A300處,軟件項(xiàng)目由轉(zhuǎn)換器X3轉(zhuǎn)換到第二中間表示,隨后由保護(hù)組件A112保護(hù),并且隨后被轉(zhuǎn)換回到C/C++表示Rc。受保護(hù)的軟件項(xiàng)目隨后被傳遞到被標(biāo)示成X7的Clang組件A350,Clang組件A350把C/C++源代碼表示Rc轉(zhuǎn)換到通常是LLVMIR的第一中間表示IR1。該表示被傳遞到形成優(yōu)化器組件A102的部分的LLVM優(yōu)化器A310,并且隨后被傳遞到被標(biāo)示成X8的Emscripten組件A360,Emscripten組件A360把第一中間表示轉(zhuǎn)換到asm.js表示Ra以供輸出。根據(jù)用實(shí)線總體上示出的第二工作流程路線,在C/C++表示Rc中輸入的軟件項(xiàng)目首先被傳遞到被標(biāo)示成X7的Clang組件A350,Clang組件A350把C/C++源代碼表示Rc轉(zhuǎn)換到通常是LLVMIR的第一中間表示IR1。該表示被傳遞到形成優(yōu)化器組件A102的部分的LLVM優(yōu)化器A310,并且隨后被傳遞到被標(biāo)示成X1的第一轉(zhuǎn)換器A122,以便轉(zhuǎn)換到第二中間表示以用于傳遞到保護(hù)器組件A112。在由保護(hù)器組件A112處理之后,軟件項(xiàng)目被傳遞到被標(biāo)示成X2的第二轉(zhuǎn)換器A120以便轉(zhuǎn)換回到第一中間表示,并且隨后被傳遞到優(yōu)化器組件A102以用于第二優(yōu)化階段。最后,軟件項(xiàng)目被傳遞到被標(biāo)示成X8的Emscripten組件A360,Emscripten組件A360把第一中間表示轉(zhuǎn)換到asm.js表示Ra以供輸出。該工作流程內(nèi)的一些替換方案以細(xì)虛線示出,按照細(xì)虛線,第一或第二優(yōu)化步驟可以被省略。通過使用優(yōu)化和保護(hù)工具集A40來實(shí)施包括保護(hù)和優(yōu)化的C/C++到asm.js轉(zhuǎn)換,有可能既開發(fā)出比如C/C++中的webapp(web應(yīng)用)之類的新的軟件項(xiàng)目以用于在asm.js中遞送到用戶設(shè)備,又把C/C++中的現(xiàn)有軟件項(xiàng)目移植到受保護(hù)和優(yōu)化的asm.js表示中。由于asm.js使能的瀏覽器可以實(shí)施比使用一般的JavaScript的情況強(qiáng)得多的運(yùn)行時(shí)間優(yōu)化,因此經(jīng)過優(yōu)化和受保護(hù)的asm.js軟件項(xiàng)目可以高速運(yùn)行。實(shí)際上,發(fā)明人進(jìn)行的測試已表明,用C/C++編寫并且使用前面所討論的優(yōu)化和保護(hù)工具集A40處理以形成經(jīng)過優(yōu)化和受保護(hù)的asm.js代碼的軟件項(xiàng)目可以比最初用原生代碼編寫的對應(yīng)軟件項(xiàng)目的性能更好。這表明了在優(yōu)化和保護(hù)工具集A40中使用的優(yōu)化器的優(yōu)越性能。雖然圖16示出了使用優(yōu)化和保護(hù)工具集A40來接受在C/C++中輸入的軟件項(xiàng)目,但是通過使用不同的LLVM前端工具取代圖16中示出的Clang工具A350,利用如已經(jīng)討論的后續(xù)優(yōu)化和保護(hù)步驟以及到asm.js表示Ra的最終轉(zhuǎn)換,其他源代碼表示(比如Object-C、Java、JavaScript、C#等等)可以用于輸入表示Ri。這樣就開放了許多新的機(jī)會(huì)以把除了C/C++之外的其他語言中的現(xiàn)有應(yīng)用移植到web應(yīng)用中,或者在這些語言中開發(fā)可供使用在瀏覽器環(huán)境中的新的web應(yīng)用。類似地,通過用一個(gè)或多個(gè)LLVM二進(jìn)制工具A330(例如已經(jīng)結(jié)合圖15討論的)取代Clang工具A350,圖16中所示的工作流程可以被改變成接受原生/二進(jìn)制表示Rb中的輸入軟件項(xiàng)目。這樣的工作流程的顯著優(yōu)點(diǎn)在于,可以把原生代碼表示中的現(xiàn)有軟件項(xiàng)目移植到webapp中以用于利用由保護(hù)組件A112提供的增強(qiáng)的安全性在瀏覽器環(huán)境(例如HTML5)中運(yùn)行,同時(shí)保持例如執(zhí)行速度方面的性能。圖17再次圖示了已經(jīng)在圖10中示出的優(yōu)化和保護(hù)工具集A40,但是現(xiàn)在具有反映結(jié)合圖11-16討論的工作流程的一些其他具體細(xì)節(jié)和方面。舉例來說,圖17中圖示的優(yōu)化和保護(hù)工具集A40特別提到使用LLVMIR作為第一中間表示。采用比如LLVM之類的技術(shù)框架可以幫助把面向C/C++源代碼結(jié)構(gòu)和類似結(jié)構(gòu)或者最初針對C/C++源代碼結(jié)構(gòu)和類似結(jié)構(gòu)編寫的軟件保護(hù)能力應(yīng)用于在其他源代碼表示、二進(jìn)制代碼表示和類似代碼表示中提供的軟件項(xiàng)目的保護(hù)。因此,圖17示出了針對到優(yōu)化和保護(hù)工具集A40的輸入的軟件項(xiàng)目可以處于C/C++源代碼(表示Rc)、另一種源代碼(表示Rs)或者原生/二進(jìn)制代碼(表示Rb)中。如果輸入軟件項(xiàng)目處于C/C++源代碼表示中,則其可以使用X3轉(zhuǎn)換器被轉(zhuǎn)換到由保護(hù)組件A112使用的第二中間表示。使用LLVM前端/二進(jìn)制工具A320、A330,輸入軟件項(xiàng)目的所有不同表示都可以被轉(zhuǎn)換到第一中間表示。然后可以按照各種方式由統(tǒng)一工具集分組A400的各個(gè)元素對輸入軟件項(xiàng)目進(jìn)行處理。這些組件包括:對在第二中間表示中的軟件項(xiàng)目進(jìn)行操作的保護(hù)組件A110,對在LLVM中間表示中的軟件項(xiàng)目進(jìn)行操作的二進(jìn)制重寫保護(hù)組件A135,以及對在LLVM中間表示中的軟件項(xiàng)目進(jìn)行操作的優(yōu)化器組件A102。統(tǒng)一工具集分組A400還包括至少第一和第二X1、X2轉(zhuǎn)換器A122、A120,它們在LLVM中間表示與第二中間表示之間進(jìn)行轉(zhuǎn)換,從而使得統(tǒng)一工具集分組A400的任何組件都可以對軟件項(xiàng)目A12起作用。在由統(tǒng)一工具集分組A400的組件處理之后,軟件項(xiàng)目可以被傳遞到各種組件以用于進(jìn)一步處理,以便形成處于相關(guān)輸出表示中的軟件項(xiàng)目。如果在第二中間表示中從統(tǒng)一工具集分組A400被傳遞,則可以使用轉(zhuǎn)換器X4A126把軟件項(xiàng)目轉(zhuǎn)換回到C/C++源代碼表示Rc,以便由C/C++編譯器和鏈接器組件A140-1進(jìn)行編譯和鏈接。如果在LLVM中間表示中從統(tǒng)一工具集分組A400被傳遞,則可以由LLVM編譯器和鏈接器A140-2對軟件項(xiàng)目進(jìn)行編譯和鏈接。在全部兩種情況下,來自優(yōu)化和保護(hù)工具集A40的輸出于是是處于原生/二進(jìn)制代碼表示Rb中的軟件項(xiàng)目。替換地,軟件項(xiàng)目可以在LLVM中間表示中被從統(tǒng)一工具集分組A400傳遞到由Emscripten工具A360提供的轉(zhuǎn)換器X8,從而使得來自優(yōu)化和保護(hù)工具集A40的輸出是處于asm.js表示Ra中的軟件項(xiàng)目。使用圖17的優(yōu)化和保護(hù)工具集A40,比如應(yīng)用或軟件模塊或庫之類的軟件項(xiàng)目,不管使用什么語言實(shí)施它,都可以使用相同的保護(hù)組件A110以及可以由該組件A110實(shí)施的隱蔽和其他技術(shù)的工具集來得到保護(hù)。如果軟件項(xiàng)目是在原生/二進(jìn)制代碼中從優(yōu)化和保護(hù)工具集A40輸出,則其可以在原生執(zhí)行環(huán)境(包括PNaCl)中運(yùn)行,或者如果是在JavaScript或asm.js中輸出,則其可以在web瀏覽器環(huán)境中運(yùn)行。這在圖17的優(yōu)化和保護(hù)工具集A40中通過在兩種不同的中間表示中操作統(tǒng)一工具集分組A400的組件來實(shí)現(xiàn),其中保護(hù)組件A110對第二中間表示中的軟件項(xiàng)目進(jìn)行操作,并且至少優(yōu)化器組件A100對在LLVM中間表示中的軟件項(xiàng)目進(jìn)行操作。圖10-17中圖示的布置主要利用第一中間表示來實(shí)施軟件項(xiàng)目的優(yōu)化,并且利用第二中間表示來實(shí)施軟件項(xiàng)目的保護(hù)。但是參照圖18,有可能使用第一表示來實(shí)施軟件項(xiàng)目的保護(hù),和/或使用第二表示來實(shí)施軟件項(xiàng)目的優(yōu)化。此外,雖然圖10-17的布置利用了兩種中間表示,但是將認(rèn)識到的是,有可能使用三種或更多種中間表示,其中每一種中間表示被用于軟件項(xiàng)目的優(yōu)化和保護(hù)的其中之一或全部二者。圖18類似于圖10,但是示出了如何可以由優(yōu)化和保護(hù)工具集A40使用任意數(shù)目的中間表示IR1…IRN,其中每一種中間表示被用于保護(hù)和優(yōu)化的其中之一或全部二者。舉例來說,在圖18的布置中,第一中間表示IR1被優(yōu)化器組件A100-1和保護(hù)器組件A110-1二者使用,第二中間表示被優(yōu)化器組件A100-2使用但是不被任何保護(hù)器組件使用,并且第三中間表示被保護(hù)器組件A110-3使用但是不被任何優(yōu)化器組件使用。至于圖10,每一個(gè)優(yōu)化器組件可以包括一個(gè)或多個(gè)優(yōu)化器子組件(圖18中未示出),并且每一個(gè)保護(hù)器組件可以包括一個(gè)或多個(gè)保護(hù)器子組件(圖18中也未示出)。這些子組件可以實(shí)施前面已經(jīng)討論過的任何優(yōu)化和保護(hù)功能,但是在適當(dāng)?shù)闹虚g表示的限制內(nèi)。要注意,雖然圖18示出了供每一種不同的中間表示使用的不同保護(hù)器和/或優(yōu)化器組件,但還有可能使得一個(gè)或多個(gè)保護(hù)器和/或優(yōu)化器組件在中間表示的多種不同中間表示內(nèi)工作。雖然關(guān)于每一種中間表示在圖18中示出的組件是優(yōu)化器和/或保護(hù)器組件,但是可以提供用于對軟件項(xiàng)目實(shí)施其他任務(wù)和變換的組件,以便在一種或多種中間表示中使用。各種中間表示IR1…IRN可以包括LLVMIR以及例如前面已經(jīng)討論過的各種其他表示。為了在各種中間表示IR1…IRN之間轉(zhuǎn)換軟件項(xiàng)目(通常在使用工具集時(shí)的保護(hù)和/或優(yōu)化的各種狀態(tài)中),適當(dāng)?shù)霓D(zhuǎn)換器功能A125被提供。轉(zhuǎn)換器功能A125可以例如被實(shí)施成單個(gè)庫類、工具或其他元件,或者被實(shí)施成多個(gè)此類元件,其中每一個(gè)這樣的元件實(shí)施一種或多種所需的轉(zhuǎn)換類型。并不總是必須提供各種中間表示之間的所有可能轉(zhuǎn)換,并且類似地,例如通過比如LLVMIR之類的更加常用的中間表示,一些轉(zhuǎn)換可以被提供為兩項(xiàng)或更多項(xiàng)其他轉(zhuǎn)換的組合。在圖18中作為優(yōu)化和保護(hù)工具集A40的部分還示出了一個(gè)或多個(gè)二進(jìn)制重寫工具A135,一個(gè)或多個(gè)二進(jìn)制保護(hù)工具A130,以及一個(gè)或多個(gè)編譯器和/或鏈接器工具A140。根據(jù)工具集A40的需求,這些工具當(dāng)中的每一個(gè)可以使用一種或多種中間表示IR1…IRN或者其他表示來操作。前面所討論并且在圖10和17中圖示的優(yōu)化和保護(hù)工具集A40可以被用來保護(hù)比如庫、模塊和代理以及應(yīng)用之類的軟件組件,并且所有這樣的軟件組件都落在所描述的軟件項(xiàng)目A12的范圍內(nèi)。這在圖19中圖示,其中可以是安全性庫、模塊、代理和類似項(xiàng)目的各種軟件項(xiàng)目被輸入到優(yōu)化和保護(hù)工具集A40,優(yōu)化和保護(hù)工具集A40按照受保護(hù)和優(yōu)化的形式輸出這些軟件項(xiàng)目。根據(jù)需求,任何此類軟件項(xiàng)目可以在原生/二進(jìn)制代碼表示Rb和/或asm.js表示Ra中被輸出。把a(bǔ)sm.js表示中的一個(gè)或多個(gè)經(jīng)過優(yōu)化和受保護(hù)的軟件項(xiàng)目與原生/二進(jìn)制代碼表示中的一個(gè)或多個(gè)經(jīng)過優(yōu)化和受保護(hù)的軟件項(xiàng)目相連,并且把這些軟件項(xiàng)目當(dāng)中的每一個(gè)與底層系統(tǒng)層A430和更底層硬件層A440相連的箭頭A420表示:asm.js、原生和系統(tǒng)層當(dāng)中的每一項(xiàng)都可以訪問和使用分級結(jié)構(gòu)中的每一個(gè)更低層級的比如安全性特征之類的特征。一般來說,比如安全性庫、模塊和代理之類的軟件組件具有其自身的安全性能力和特征,并且這些軟件組件的魯棒性和安全性在確保應(yīng)用的安全性方面可能是關(guān)鍵的,該軟件組件被用在所述應(yīng)用內(nèi)或者由所述應(yīng)用參考或調(diào)用該軟件組件。因此,優(yōu)化和保護(hù)工具集A40以及這里所描述的工作流程可以被用來改進(jìn)此類軟件組件的安全性,并且因此也改進(jìn)此類組件被使用在其中的應(yīng)用的安全性。使用所描述的布置的各個(gè)方面,可以為用戶設(shè)備A20提供多層安全性,包括硬件層級安全性特征、系統(tǒng)或操作系統(tǒng)層級安全性特征、原生層安全性特征以及web層安全性特征。使用優(yōu)化和保護(hù)工具集A40保護(hù)的比如庫、模塊和代理之類的軟件組件可以提供對于硬件和系統(tǒng)層級安全性特征的訪問,所述硬件和系統(tǒng)層級安全性特征對于web應(yīng)用層不應(yīng)當(dāng)是可見的。由于優(yōu)化和保護(hù)工具集A40可以被用來在原生代碼和JavaScript(包括asm.js)全部二者中產(chǎn)生受保護(hù)的軟件組件,因此其可以被用來構(gòu)造和支持從JavaScript/asm.js中的受保護(hù)的軟件組件到原生代碼中的受保護(hù)的軟件組件的調(diào)用相關(guān)性。當(dāng)前第1頁1 2 3