使用基函數(shù)編碼來(lái)保護(hù)可訪問(wèn)的系統(tǒng)的制作方法
【專(zhuān)利摘要】提供了用于保護(hù)可訪問(wèn)的計(jì)算機(jī)可執(zhí)行程序代碼和系統(tǒng)的系統(tǒng)與技術(shù)。一個(gè)或多個(gè)基函數(shù)可以被生成并與現(xiàn)有程序代碼摻合,使得潛在攻擊者可能難以或者不可能從現(xiàn)有代碼中區(qū)分基函數(shù)。還可以使用各種其他摻合和保護(hù)技術(shù)來(lái)保護(hù)所述系統(tǒng)和代碼,所述其他摻合和保護(hù)技術(shù)諸如分式、變量相關(guān)編碼、動(dòng)態(tài)數(shù)據(jù)識(shí)別編碼以及交叉鏈接,它們可以單獨(dú)或組合使用,和/或可以與基函數(shù)摻合。
【專(zhuān)利說(shuō)明】使用基函數(shù)編碼來(lái)保護(hù)可訪問(wèn)的系統(tǒng)
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明總地涉及電子計(jì)算設(shè)備和計(jì)算機(jī)系統(tǒng),并且更特別地,涉及保護(hù)是可訪問(wèn) 的而受攻擊的設(shè)備和系統(tǒng)上的軟件和固件。
【背景技術(shù)】
[0002] 計(jì)算機(jī)、電子計(jì)算設(shè)備以及計(jì)算機(jī)軟件在所有它們各種形式上的使用被認(rèn)為是非 常普遍的并且日益增長(zhǎng)。此外,隨著強(qiáng)大通信網(wǎng)絡(luò)的普遍,計(jì)算機(jī)軟件程序和數(shù)據(jù)文件可以 被訪問(wèn)、交換、拷貝和分發(fā)的簡(jiǎn)便也日益增長(zhǎng)。為了利用這些計(jì)算機(jī)和通信系統(tǒng)以及它們提 供的效率,存在對(duì)用于安全地存儲(chǔ)和交換計(jì)算機(jī)軟件與數(shù)據(jù)的方法的需要。
[0003] 已經(jīng)證明廣泛使用和接受的維持機(jī)密性或隱私的一種方法是使用秘密密碼密鑰 對(duì)數(shù)據(jù)加密?,F(xiàn)有的加密系統(tǒng)被設(shè)計(jì)為保護(hù)它們的秘密密鑰或其他秘密數(shù)據(jù)免受"黑盒攻 擊"。這是這樣的情形,其中攻擊者具有算法的知識(shí)并且可以檢查來(lái)自算法的各種輸入和輸 出,但是對(duì)于算法本身的執(zhí)行沒(méi)有可見(jiàn)性(諸如自適應(yīng)選擇的輸入/輸出攻擊)。
[0004] 盡管依賴于黑盒模型的密碼系統(tǒng)是非常普遍的,但是已經(jīng)表明該模型并未反映現(xiàn) 實(shí)。通常,攻擊者處于觀察算法的執(zhí)行的至少某個(gè)方面的位置,并且具有對(duì)目標(biāo)算法的足夠 訪問(wèn)以掛載成功的攻擊(即,信道側(cè)攻擊,諸如定時(shí)分析、功率分析、高速緩存攻擊、故障注 入等。)這樣的攻擊通常稱(chēng)為"灰盒"攻擊,所假設(shè)的是攻擊者能夠觀察系統(tǒng)執(zhí)行的至少部 分。
[0005] 認(rèn)識(shí)到此,已經(jīng)做出努力來(lái)設(shè)計(jì)抵抗更強(qiáng)大的攻擊模型一"白盒攻擊"的加密 算法和數(shù)據(jù)信道。白盒攻擊是對(duì)軟件算法的攻擊,其中假設(shè)攻擊者對(duì)于算法的執(zhí)行具有完 全可見(jiàn)性。迄今為止,這樣的保護(hù)系統(tǒng)已經(jīng)經(jīng)歷了合理的成功,但是因?yàn)檫@樣的保護(hù)系統(tǒng)變 得越來(lái)越精密,所以攻擊技術(shù)也越來(lái)越精密(諸如編碼減少攻擊、統(tǒng)計(jì)分桶(bucketing)攻 擊以及同態(tài)映射攻擊)。因此,許多現(xiàn)有的白盒保護(hù)系統(tǒng)正被表明對(duì)于抵抗聯(lián)合攻擊是無(wú)效 的。
[0006] 借助于簡(jiǎn)單編碼的軟件混淆有時(shí)已經(jīng)在使用。為了是有用的,這樣的編碼在軟件 混淆中的應(yīng)用必須不會(huì)過(guò)度增加軟件的時(shí)間和空間消耗,因此這樣的編碼典型地相對(duì)簡(jiǎn) 單。因此,盡管它們可以整體地保護(hù)軟件,但是它們未提供高度的安全性。在軟件中存在許 多通信邊界,所述邊界代表具體的脆弱性:未受保護(hù)形式的數(shù)據(jù)進(jìn)或出混淆程序的通道、數(shù) 據(jù)進(jìn)或出軟件或硬件中的密碼實(shí)現(xiàn)的通道等等?,F(xiàn)有編碼策略的強(qiáng)度典型地受它們保護(hù)的 數(shù)據(jù)大小的嚴(yán)重限制。對(duì)于常規(guī)編碼,這樣的受保護(hù)的項(xiàng)大約為32比特,有時(shí)為64比特, 并且有時(shí)是諸如字符或字節(jié)的更小數(shù)據(jù)段。鑒于編碼和操作數(shù)大小的限制,一般無(wú)法防止 對(duì)這樣的編碼的相當(dāng)迅速的暴力破解。
[0007] 因此,存在對(duì)更有效的秘密隱藏和防篡改技術(shù)的需要,從而提供對(duì)軟件代碼和數(shù) 據(jù)的總體保護(hù)以及對(duì)秘密秘密密鑰、生物計(jì)量數(shù)據(jù)、加密的數(shù)據(jù)等的保護(hù)。還期望提供比常 規(guī)簡(jiǎn)單編碼強(qiáng)得多形式的對(duì)軟件邊界的保護(hù)。
【發(fā)明內(nèi)容】
[0008] 本發(fā)明的實(shí)施例總地旨在提供更有效的秘密隱藏和防篡改技術(shù),從而提供對(duì)軟件 代碼和數(shù)據(jù)的保護(hù),而不用擔(dān)心安全性將被破壞。
[0009] 本文公開(kāi)的方法和系統(tǒng)不限于任何特定基本程序。它們可以應(yīng)用于密碼系統(tǒng),但 是等同地,可以應(yīng)用于非密碼系統(tǒng)。被保護(hù)的代碼也不規(guī)定保護(hù)它做了寫(xiě)什么,所以保護(hù)技 術(shù)不受基本代碼的約束。相對(duì)于可能留下或創(chuàng)建基于基本代碼的模式的其他保護(hù)技術(shù),這 可以提供益處。這樣的模式可能提供可被攻擊者利用的弱點(diǎn)。
[0010] 本文公開(kāi)的一些實(shí)施例提供"深刻數(shù)據(jù)相關(guān)性",這可以使得難以或不可能排解或 者區(qū)分受保護(hù)的代碼和正在提供保護(hù)的代碼。例如,AES算法典型地始終執(zhí)行相同方式,而 不管是何輸入數(shù)據(jù)。這使得攻擊者直接直到他在找什么以及去哪里找到它。大多數(shù)白盒保 護(hù)系統(tǒng)具有剛性等式結(jié)構(gòu),其未解決該類(lèi)型的問(wèn)題。即,攻擊者可以知道找什么類(lèi)型的操作 或效果,以及何時(shí)在代碼或執(zhí)行中進(jìn)行查看以找到那些操作或效果。相對(duì)地,本文公開(kāi)的實(shí) 施例可以提供非剛性的編碼,諸如其中,保護(hù)算法的每次迭代導(dǎo)致不同的編碼。因此,系統(tǒng) 是極其不可重復(fù)的。除了別的以外,這可以使本文公開(kāi)的實(shí)施例對(duì)于"比較"類(lèi)型攻擊是更 有抵抗力的,在該"比較"類(lèi)型攻擊中,攻擊者改變1比特并觀察目標(biāo)程序如何改變。以本 文公開(kāi)的一些實(shí)施例中,如果攻擊者改變1比特,則受保護(hù)的代碼將看起來(lái)完全不同。
[0011] 作為概述,本文描述的工具、一系列工具以及技術(shù)的實(shí)施例可以分組如下: 1)用于模糊目標(biāo)代碼模塊之間以及目標(biāo)代碼與保護(hù)代碼之間的邊界的系統(tǒng)和技術(shù)。這 例如可以通過(guò)將代碼與周?chē)a摻合在一起以及將密碼與其他代碼進(jìn)行交織來(lái)實(shí)現(xiàn),這在 其他保護(hù)性系統(tǒng)中通常未完成。
[0012] 2)用于確保破裂需要人干預(yù)的系統(tǒng)和技術(shù)。人尋找它們之前已經(jīng)看到的模式。通 過(guò)根據(jù)本文公開(kāi)的實(shí)施例引入隨機(jī)函數(shù),可以移除重復(fù)性和/或常見(jiàn)模式,使得自動(dòng)攻擊 是很大程度上無(wú)效的。
[0013] 3)用于保護(hù)防范"比較攻擊"的系統(tǒng)和技術(shù)。如上所提及的,比較攻擊是其中比較 代碼執(zhí)行的兩次迭代以參看差異的攻擊,諸如改變單個(gè)輸入比特以查看操作和輸出如何改 變。如本文所公開(kāi)的保護(hù)算法可以以受保護(hù)代碼的每次迭代產(chǎn)生動(dòng)態(tài)不同的函數(shù),所以比 較攻擊未提供任何有用信息。
[0014] 本文描述的混淆技術(shù)可以在開(kāi)銷(xiāo)可以被接納的任何時(shí)候?qū)崿F(xiàn)。白盒保護(hù)系統(tǒng)典型 地比本文描述的技術(shù)具有更大開(kāi)銷(xiāo),并且因此處于劣勢(shì)。
[0015] 一些實(shí)施例包括用于軟件保護(hù)的系統(tǒng)和技術(shù),其通過(guò)向目標(biāo)代碼應(yīng)用雙射"基函 數(shù)"來(lái)操作。這些基函數(shù)是互逆函數(shù)對(duì).&//,其例如用于對(duì)操作編碼,并然后在軟件應(yīng)用 中的稍后點(diǎn)處不對(duì)操作編碼。編碼使原始函數(shù)和其生成的數(shù)據(jù)模糊。信息沒(méi)有損失,因?yàn)?不編碼操作容納編碼操作,從而在經(jīng)編碼的應(yīng)用中稍后"撤銷(xiāo)"或"反轉(zhuǎn)"其影響。可以選 擇基函數(shù)對(duì)使得攻擊者不能容易找到或確定逆函數(shù)。即,給定函數(shù)/*,在沒(méi)有密鑰K的情況 下可能不容易找到逆。密鑰K可以在代碼生成時(shí)使用,但是任何一旦函數(shù)I 已經(jīng)生 成并應(yīng)用于目標(biāo)代碼就被丟棄。這些基函數(shù)對(duì)也是無(wú)損的,即,數(shù)學(xué)上可逆的。受保護(hù)的軟 件應(yīng)用完全不需要對(duì)函數(shù)或過(guò)程進(jìn)行解碼以在目標(biāo)代碼中的其他位置使用它,因?yàn)榫幋a和 不編碼改變包括在經(jīng)編碼的應(yīng)用內(nèi)。在一些實(shí)施例中,可能優(yōu)選的是,基函數(shù)是"深度非線 性的",因此使得同態(tài)攻擊更加可能。在一些實(shí)施例中,基函數(shù)對(duì)可以包括置換多項(xiàng)式編碼。 置換多項(xiàng)式是可逆的多項(xiàng)式(多項(xiàng)式雙射)。
[0016] 一些實(shí)施例可以生成或使用基函數(shù)對(duì),以使得它們生成"實(shí)例多樣性"和"動(dòng)態(tài)多 樣性"。為了實(shí)現(xiàn)"實(shí)例多樣性",每個(gè)基函數(shù)對(duì)可以創(chuàng)建安全"通信信道",諸如在軟件應(yīng)用 的部分之間、在兩個(gè)軟件應(yīng)用或平臺(tái)之間等等。動(dòng)態(tài)多樣性可以通過(guò)將軟件的操作鏈接到 輸入數(shù)據(jù)來(lái)創(chuàng)建。每當(dāng)諸如針對(duì)在兩個(gè)經(jīng)編碼的應(yīng)用之間的通信執(zhí)行編碼時(shí),可以在兩個(gè) 應(yīng)用之間生成實(shí)例和動(dòng)態(tài)多樣性?;瘮?shù)可以是高度"文本相關(guān)的",所以它們提供良好的 對(duì)明文和擾動(dòng)攻擊的抵抗力。如果攻擊者改變?nèi)魏蝺?nèi)容,甚至是做出諸如1比特值的非常 小的改變,則該改變將導(dǎo)致非常大的行為改變。該特征與常規(guī)密碼代碼形成鮮明對(duì)照,所述 常規(guī)密碼代碼典型地對(duì)于代碼的每次迭代產(chǎn)生相同的模式和結(jié)構(gòu),而不管攻擊者做出的改 變。通過(guò)做出小改變并觀察影響,攻擊者能夠收集關(guān)于密碼代碼的操作的信息,但是他不能 對(duì)使用本文公開(kāi)的系統(tǒng)和技術(shù)編碼的軟件進(jìn)行相同操作。本文公開(kāi)的實(shí)施例提供的多樣性 還提供對(duì)"類(lèi)攻擊"的抵抗力。即,在所有情況下不可能提供這樣的攻擊方法,該攻擊方法 可以系統(tǒng)地并且自動(dòng)地破裂本發(fā)明的每個(gè)實(shí)施例。還注意,常規(guī)白盒實(shí)現(xiàn)和代碼優(yōu)化器將 不提供足夠的多樣性來(lái)獲得任何有效保護(hù)。
[0017] 逆基函數(shù)的多樣性和不可逆性極大地增加了攻擊問(wèn)題的復(fù)雜度。與常規(guī)軟件代碼 或代碼保護(hù)系統(tǒng)相對(duì)地,當(dāng)嘗試擊敗本文公開(kāi)的系統(tǒng)和技術(shù)時(shí),攻擊者必須首先算出他正 在攻擊什么函數(shù)、代碼部分、應(yīng)用等等,然后如何對(duì)它求逆,以及然后如何利用它。
[0018] 本文公開(kāi)的實(shí)施例提供的多樣性可以提供可變、隨機(jī)選擇的結(jié)構(gòu)來(lái)保護(hù)代碼。生 成基函數(shù)對(duì)和編碼的引擎可以依賴于隨機(jī)或偽隨機(jī)密鑰來(lái)選擇基本函數(shù)和/或密鑰。然 而,根據(jù)本文公開(kāi)的實(shí)施例的密鑰不可以與許多常規(guī)安全系統(tǒng)的密鑰一樣大(即,64或128 比特);相反,其可以是數(shù)千或數(shù)萬(wàn)比特。例如,開(kāi)發(fā)的原型使用2000比特。
[0019] 本文公開(kāi)的基函數(shù)可以包括用于編碼、解碼或重編碼數(shù)據(jù)的雙射。這樣的雙射可 以包括以下特性: 1)對(duì)寬數(shù)據(jù)元素編碼(典型地,四個(gè)或更多主計(jì)算機(jī)字寬)與典型標(biāo)量編碼(參見(jiàn)附錄 中列出的[5,7])不同,但是與塊密碼類(lèi)似。
[0020] 2)僅對(duì)數(shù)據(jù)編碼:與典型標(biāo)量編碼不同,但是與密碼類(lèi)似,它們不需要保護(hù)除在它 們自己的對(duì)數(shù)據(jù)元素的重編碼中涉及的那些以外的計(jì)算。
[0021] 3)取消數(shù)據(jù)塊或流,和/或產(chǎn)生數(shù)據(jù)塊或流的固定長(zhǎng)度哈希以用于認(rèn)證目的,類(lèi) 似于塊密碼,但是與標(biāo)量編碼不同。
[0022] 4)采用從軟件的操作指令系統(tǒng)特意選擇的操作的形式,所述操作將駐留在所述軟 件中并且所述操作將與所述軟件互鎖;即,它們被設(shè)計(jì)為類(lèi)似在它們被嵌入的上下文中的 代碼,但是與密碼不同。
[0023] 5)與密碼和標(biāo)量編碼二者不同,采用海量多編碼。標(biāo)量編碼一般采用一個(gè)或者至 多幾個(gè)數(shù)學(xué)構(gòu)造。密碼典型地采用稍大些的數(shù)量,但是該數(shù)量仍然很小。在本發(fā)明的一些 實(shí)施例中,各種編碼被應(yīng)用于整個(gè)函數(shù),從而創(chuàng)建產(chǎn)生自許多形式的保護(hù)相互交互的錯(cuò)綜 復(fù)雜交織的結(jié)構(gòu)。
[0024] 6)與密碼和標(biāo)量編碼二者不同,提供海量多樣的算法結(jié)構(gòu)。實(shí)施例可以沒(méi)有固定 數(shù)量的輪,沒(méi)有用于各種子步驟的操作數(shù)的固定寬度,沒(méi)有各種子步驟的固定互連,以及沒(méi) 有任何種類(lèi)的預(yù)定數(shù)量的迭代。
[0025] 7)與密碼和標(biāo)量編碼二者不同,借助于高度數(shù)據(jù)相關(guān)算法來(lái)提供海量動(dòng)態(tài)多樣 性:即,對(duì)于對(duì)基函數(shù)雙射的任何具體采用,通過(guò)其子步驟的路徑、其迭代計(jì)數(shù)等等強(qiáng)烈取 決于要編碼、解碼或重編碼的實(shí)際數(shù)據(jù)輸入。
[0026] 8 )與密碼和標(biāo)量編碼二者不同,提供與它們的嵌入上下文海量互依性;S卩,它們的 行為可以強(qiáng)烈取決于它們被嵌入其中的軟件,并且可以使它們被嵌入其中的軟件強(qiáng)烈取決 于它們。
[0027] -些實(shí)施例可以使用大的量的實(shí)際熵(S卩,大的真隨機(jī)輸入)。然而,如果生成基函 數(shù)對(duì)的引擎自身未曝露于攻擊者,則其可以安全地采用顯著更小的密鑰,該顯著更小的密 鑰然后借助于偽隨機(jī)數(shù)生成器生成大得多的偽隨機(jī)密鑰,因?yàn)樵谠撉闆r中,攻擊者必須應(yīng) 付實(shí)際密鑰熵(其用于至偽隨機(jī)數(shù)生成器的種子)和從該生成器的編程不可避免地產(chǎn)生的 隨機(jī)性。
[0028] 在一些實(shí)施例中,還可以使用偏置置換。如果內(nèi)部數(shù)據(jù)用于生成基函數(shù)對(duì)或其他 編碼數(shù)據(jù)/函數(shù)而非隨機(jī)數(shù),則產(chǎn)生的編碼將包含偏置。如果引入代碼以創(chuàng)建編碼可能容 易明顯的未偏置置換,則導(dǎo)致系統(tǒng)中的弱點(diǎn)。相對(duì)地,本文公開(kāi)的實(shí)施例可以生成偏置置 換,但是然后使用各種工具來(lái)使它們較少偏置。該方法已經(jīng)表明比已知技術(shù)要不明顯得多。
[0029] -些實(shí)施例可以包括用于以下的技術(shù):綁定管道開(kāi)始和管道結(jié)束,使得目標(biāo)軟件 代碼在兩端被系于應(yīng)用或平臺(tái)。例如,在對(duì)等數(shù)據(jù)傳送環(huán)境或數(shù)字權(quán)利管理(DRM)環(huán)境中, 這可以是有用的。本文公開(kāi)的系統(tǒng)和技術(shù)還可以用于將密碼系于其他軟件應(yīng)用或平臺(tái),這 使用常規(guī)技術(shù)一般是難以完成的。
[0030] -些實(shí)施例可以使用"函數(shù)索引的交織"。該技術(shù)提供來(lái)自線性部件和非線性等式 求解的深非線性度。其可以以許多方式來(lái)使用,諸如邊界保護(hù)、動(dòng)態(tài)常數(shù)生成(例如,密鑰到 代碼)、提供動(dòng)態(tài)多樣性(數(shù)據(jù)相關(guān)功能性)、自組合密碼、密碼混合以及組合密碼與非密碼。 例如,其可以用于將黑盒密碼與本文公開(kāi)的其他保護(hù)代碼進(jìn)行混合,從而提供黑盒密碼的 長(zhǎng)期安全性,具有白盒安全性的其他益處。如上文所提到的,本文公開(kāi)的實(shí)施例的編碼可以 與運(yùn)行時(shí)數(shù)據(jù)高度相關(guān)。以函數(shù)索引的交織,兩種信息被使用:密鑰K,其確定基函數(shù)和結(jié) 構(gòu),以及R,其確定哪些混淆要應(yīng)用于"定義實(shí)現(xiàn)"。典型地,客戶端看不到R。密鑰K可以從 上下文擴(kuò)充,但是在本文描述的一些示例中,僅R以該方式擴(kuò)充??蛇x地,來(lái)自用戶或他的 設(shè)備(諸如智能電話、平板計(jì)算機(jī)、PDA、服務(wù)器或臺(tái)式計(jì)算機(jī)系統(tǒng)等等)的半一致信息或數(shù) 據(jù)(諸如IP地址)可以用于如運(yùn)行時(shí)密鑰那樣編碼和解碼。
[0031] 也可以使用遞歸函數(shù)索引的交織。函數(shù)索引的交織典型地對(duì)任意函數(shù)進(jìn)行交織。 如果這些函數(shù)中的一些是通過(guò)函數(shù)索引的交織獲得的它們自身的函數(shù),則這是函數(shù)索引的 交織的遞歸使用。
[0032] -些實(shí)施例可以包括隨機(jī)交叉鏈接、交叉俘獲、數(shù)據(jù)流復(fù)制、隨機(jī)交叉連接以及隨 機(jī)檢查,與代碼重定序相組合,創(chuàng)建全向交叉相關(guān)性以及變量相關(guān)編碼。
[0033] -些實(shí)施例可以使用與分式變換(動(dòng)態(tài)數(shù)據(jù)識(shí)別編碼)的存儲(chǔ)器混洗以隱藏?cái)?shù)據(jù) 流,這也可以被采用。在動(dòng)態(tài)數(shù)據(jù)識(shí)別編碼中,可以使用存儲(chǔ)器單元的陣列A,其可以視為具 有虛擬索引0,1,2. ...,M-I ,其中M是陣列的大小和在有限環(huán)ZZ(Af)上的置換多項(xiàng)式p的模 數(shù)(即,整數(shù)模M),如在C程序陣列中那樣。然而,對(duì)于任何給定索引i,在陣列中存在其對(duì) 應(yīng)于的不固定的位置,因?yàn)槠浔粚ぶ窞镻 (i),并且P采用從至程序的輸入確定的系數(shù)。位置 4貞〇);Mwni…可以被認(rèn)為是外延主機(jī)器的那些的"偽寄存器" ,足糾。 通過(guò)將數(shù)據(jù)移進(jìn)和移出這些寄存器、對(duì)每次移動(dòng)時(shí)對(duì)移動(dòng)的數(shù)據(jù)重編碼以及通過(guò)針對(duì)許多 不同值重用這些"偽寄存器"(例如,通過(guò)采用圖著色寄存器分配),攻擊者跟隨程序的數(shù)據(jù) 流的難度可以大大增加。
[0034] 一些實(shí)施例可以使用"散布和摻合"編碼。這是描述基函數(shù)加代碼交織的使用的 另一種方式,其"涂覆"基函數(shù)的邊界以使得攻擊者更加難以辨別它們。一般的數(shù)據(jù)摻合可 以具有基函數(shù)的與其他代碼混合的部分,使得更加難以標(biāo)識(shí)和提升代碼。
[0035] -些實(shí)施例提供安全生命周期管理。黑盒安全性提供良好的長(zhǎng)期保護(hù),但是在今 天的應(yīng)用中不太有用。本文公開(kāi)的實(shí)施例可以比實(shí)現(xiàn)在未受保護(hù)的設(shè)備上可能被破裂更快 地刷新所述實(shí)現(xiàn)。不同的設(shè)備和應(yīng)用具有不同的需要。例如,按次計(jì)費(fèi)的電視廣播(諸如體 育賽事)在該賽事幾天后可能具有很小的價(jià)值,所以可能僅有必要在一天左右提供足夠安 全性來(lái)保護(hù)該廣播數(shù)據(jù)。類(lèi)似地,計(jì)算機(jī)游戲市場(chǎng)可能在幾周之后快速變小,所以可能關(guān)鍵 僅在前幾周或幾月保護(hù)該游戲。本文公開(kāi)的實(shí)施例可以允許用戶應(yīng)用需要的安全級(jí)別,從 而權(quán)衡安全性與性能。字面上,可調(diào)整的"混淆刻度盤(pán)"可以放置在控制臺(tái)上。盡管實(shí)現(xiàn)的 特定定義的安全級(jí)別可能是未知的,但是混淆方法被應(yīng)用的強(qiáng)度可以被控制。一般地,這些 設(shè)定可以在應(yīng)用被創(chuàng)建時(shí)用其嵌入的基函數(shù)進(jìn)行調(diào)整,作為軟件開(kāi)發(fā)過(guò)程的部分。安全性 分析可以提供對(duì)給定特定混淆級(jí)別破裂應(yīng)用將有多困難的估計(jì)?;谠摴烙?jì),可以做出如 何平衡性能需要與安全性需要的工程決定,并且"混淆刻度盤(pán)"可以被相應(yīng)地設(shè)置。這種靈 活性是用其他保護(hù)系統(tǒng)無(wú)法獲得的。例如,利用ASE,使用固定的密鑰長(zhǎng)度和固定的代碼,它 們不能被調(diào)整。
[0036] -些實(shí)施例可以提供靈活的安全性刷新速率,允許對(duì)刷新代碼的"移動(dòng)目標(biāo)"的復(fù) 雜度的權(quán)衡。在許多情況中,所需的是足夠快地刷新以保持領(lǐng)先于潛在攻擊者。
[0037] -些實(shí)施例可能沒(méi)有在黑客曝露的環(huán)境中提供長(zhǎng)期數(shù)據(jù)安全的主要目標(biāo)。對(duì)此, 方案是不將數(shù)據(jù)曝露給黑客,而是通過(guò)例如為客戶端提供用于證書(shū)保護(hù)(安全I(xiàn)D (TM),口 令短語(yǔ)等)的web呈現(xiàn)而僅曝露訪問(wèn)該數(shù)據(jù)的手段,所述客戶端經(jīng)由受保護(hù)的對(duì)話來(lái)訪問(wèn)數(shù) 據(jù),所述對(duì)話可以至多曝露一小部分?jǐn)?shù)據(jù)。在黑客曝露環(huán)境中,可以預(yù)期將部署以相同方式 對(duì)曝露的軟件進(jìn)行刷新的過(guò)程。例如,在衛(wèi)星TV條件訪問(wèn)系統(tǒng)中,嵌入在機(jī)頂盒(STB)中 的軟件中的密碼密鑰被定期刷新,使得任何對(duì)密鑰的損害具有僅用于有限時(shí)間段的值。當(dāng) 前,可以借助于軟件混淆和/或白盒密碼在該有限曝露時(shí)段上保護(hù)這樣的密碼密鑰。
[0038] 然而,白盒密碼已證明對(duì)于這樣的攻擊是脆弱的,所述攻擊可能由具有分析可執(zhí) 行程序的專(zhuān)家知識(shí)的密碼學(xué)尖端攻擊者非??焖俚貓?zhí)行,因?yàn)樗捎玫拿艽a算法在存在的 被最透徹地檢查的算法當(dāng)中,并且用于分析程序的工具也已經(jīng)在近來(lái)變得非常精細(xì)。此外, 密碼具有特殊的計(jì)算屬性,因?yàn)樗鼈兘?jīng)常在未在計(jì)算中通常使用的算術(shù)域上定義:例如, AES在伽羅瓦域上定義,RSA公鑰密碼系統(tǒng)通過(guò)在極大模數(shù)上的模算術(shù)來(lái)定義,在比特運(yùn)算 上的3DES,查找表以及以復(fù)制比特外延的比特置換。
[0039] 實(shí)際上,對(duì)程序的精細(xì)分析已經(jīng)創(chuàng)建了有時(shí)可以完全繞過(guò)密碼分析的需要:代碼 提升攻擊,由此攻擊者簡(jiǎn)單地提取密碼算法并且在沒(méi)有進(jìn)一步分析的情況下采用它(因?yàn)?它畢竟是操作的軟件段,盡管其可以被混淆)來(lái)破裂軟件應(yīng)用的功能性。
[0040] 一些實(shí)施例可以提供強(qiáng)得多的對(duì)攻擊的短期抵抗。這樣的保護(hù)可以適于其中需要 抵抗的時(shí)間相對(duì)短的系統(tǒng),因?yàn)榻柚谒⑿埋v留在曝露平臺(tái)上的軟件解決了長(zhǎng)期安全性。 這解決了特定空白的需求,其關(guān)注由以下創(chuàng)建的緊張點(diǎn):高度精細(xì)的密碼分析工具和知識(shí)、 被極好研究的密碼、經(jīng)由軟件混淆可提供的有限保護(hù)、用于分析可執(zhí)行程序的高度精細(xì)工 具,以及軟件在典型商業(yè)內(nèi)容分發(fā)環(huán)境中有限的曝露次數(shù)。目標(biāo)是防止這些種類(lèi)的攻擊, 使用白盒密碼的經(jīng)驗(yàn)已經(jīng)示出為在現(xiàn)有技術(shù)內(nèi):快速密碼攻擊和/或代碼提升攻擊如此之 快,以至于即使給出在曝露程序(諸如STB程序)的刷新之間有限的有效性生命跨度,它們也 具有值。
[0041] 在許多情況中,僅有必要抵抗在刷新周期期間的持續(xù)時(shí)間內(nèi)的分析,并且將密碼 替換如此緊密地系于其駐留在其中的應(yīng)用,從而代碼提升攻擊在刷新周期的持續(xù)時(shí)間內(nèi)也 是不可行的。刷新周期率由工程和成本考慮來(lái)確定,有多少帶寬可以分配給刷新,我們可以 多平滑地將刷新與進(jìn)行中的服務(wù)整合在一起而不損失服務(wù)質(zhì)量等等:這些都是在提供條件 訪問(wèn)系統(tǒng)領(lǐng)域中非常好理解的問(wèn)題。這些考慮粗略地指示對(duì)于分析和提升攻擊我們的保護(hù) 必須堅(jiān)持多久。
[0042] 一些實(shí)施例可以通過(guò)以下提供可以抵抗更長(zhǎng)時(shí)間段內(nèi)的攻擊的顯著更大的編碼: 放棄用經(jīng)編碼的操作數(shù)進(jìn)行計(jì)算的觀念--如上使用較簡(jiǎn)單的編碼所做的--并用更像 密碼的事物來(lái)替換它。密碼本身可以是并且確實(shí)用于該目的,但是它們常常不能容易地與 普通軟件互鎖,因?yàn)椋?)它們的算法被密碼標(biāo)準(zhǔn)剛性地固定以及(2)它們的計(jì)算典型地與 普通軟件非常不同并因此既不容易在其內(nèi)被隱匿也不容易與其互鎖。本文描述的基函數(shù)提 供了允許隱匿和互鎖的替代:它們利用常規(guī)操作,并且它們的算法與用密碼的情況相比極 大地更加靈活。它們可以與密碼組合來(lái)將與常規(guī)密碼一樣強(qiáng)的黑盒安全級(jí)別與顯著優(yōu)勝于 如上的簡(jiǎn)單編碼和已知的白盒密碼二者的白盒安全級(jí)別進(jìn)行組合。
[0043] 在一些實(shí)施例中,可以通過(guò)以下來(lái)創(chuàng)建基函數(shù):選擇字大小w和矢量長(zhǎng)度N,并生 成可逆狀態(tài)矢量函數(shù),所述可逆狀態(tài)矢量函數(shù)被配置為對(duì)w元素字的N矢量進(jìn)行操作,所述 可逆狀態(tài)矢量函數(shù)包括多個(gè)可逆操作的組合。所述狀態(tài)矢量函數(shù)可以接收至少64比特的 輸入并提供至少64比特的輸出。所述狀態(tài)矢量函數(shù)中的步驟的第一部分在Z/(2W)上執(zhí)行線 性或仿射計(jì)算。使用第一和第二編索引技術(shù)對(duì)所述狀態(tài)矢量函數(shù)中的步驟的部分編索引。 然后可以修改在現(xiàn)有計(jì)算機(jī)程序中的至少一個(gè)操作以取代所選擇的操作而執(zhí)行所述狀態(tài) 矢量函數(shù)。每個(gè)編索引技術(shù)可以控制不同的編索引操作,諸如if-then-else構(gòu)造、switch、 元素置換選擇、迭代計(jì)數(shù)、元素旋轉(zhuǎn)計(jì)數(shù)、函數(shù)索引的密鑰索引等等。所述狀態(tài)矢量函數(shù)中 的步驟的一些可以是非T函數(shù)操作。一般地,所述狀態(tài)矢量函數(shù)中的每個(gè)步驟可以可逆的, 使得整個(gè)狀態(tài)矢量函數(shù)是通過(guò)對(duì)每個(gè)步驟取逆而是可逆的。在一些配置中,所述狀態(tài)矢量 函數(shù)可以使用例如運(yùn)行時(shí)密鑰、生成時(shí)密鑰或函數(shù)索引的密鑰來(lái)加密鑰。所述狀態(tài)矢量函 數(shù)可以通過(guò)各種操作類(lèi)型來(lái)實(shí)現(xiàn),諸如線性操作、矩陣操作、隨機(jī)交換等。各種編碼方案還 可以應(yīng)用于所述狀態(tài)矢量函數(shù)的輸入和/或輸出,和/或所述狀態(tài)矢量函數(shù)的操作。在一 些配置中,不同的編碼可以被應(yīng)用以在與所述狀態(tài)矢量函數(shù)相關(guān)聯(lián)的各個(gè)點(diǎn)處產(chǎn)生分式。
[0044] 在一些實(shí)施例中,本文所公開(kāi)的基函數(shù)可以通過(guò)例如以下來(lái)執(zhí)行:接收具有字大 小w的輸入,向所述輸入應(yīng)用可逆狀態(tài)矢量函數(shù),所述可逆狀態(tài)矢量函數(shù)被配置為對(duì)w元素 字的N矢量進(jìn)行操作,其中所述可逆狀態(tài)矢量函數(shù)包括多個(gè)可逆操作,并且所述狀態(tài)矢量 函數(shù)中的步驟的第一部分在z/a")上執(zhí)行線性或仿射計(jì)算??梢韵蛩隹赡鏍顟B(tài)矢量函數(shù) 的輸出應(yīng)用額外操作,其中每一個(gè)操作是基于不同編索引技術(shù)而選擇的。一般地,所述狀態(tài) 矢量函數(shù)可以具有本文關(guān)于狀態(tài)矢量函數(shù)和基函數(shù)公開(kāi)的任何屬性。
[0045] 在一些實(shí)施例中,第一操作可以通過(guò)執(zhí)行第二操作來(lái)執(zhí)行,例如通過(guò)以下來(lái)執(zhí)行: 接收用第一編碼A編碼為A(X)的輸入X,使用的值對(duì)所述輸入執(zhí)行第一多個(gè)計(jì)算機(jī) 可執(zhí)行操作,其中Fi是第二編碼機(jī)制B的逆,所述第二編碼B不同于所述第一編碼A,基于 來(lái)提供輸出。這樣的操作可以認(rèn)為是"分式",并且可以允許操作被執(zhí)行而對(duì)于外部用 戶或者對(duì)于潛在攻擊者是不可訪問(wèn)或不可見(jiàn)的。在一些配置中,所述第一操作的輸出未被 在外部提供給可執(zhí)行代碼,所述第一操作與所述可執(zhí)行代碼被集成在一起。
[0046] 在一些實(shí)施例中,對(duì)于被配置為接收輸入并提供輸出的矩陣操作,在執(zhí)行操作之 前,可以根據(jù)排序網(wǎng)絡(luò)拓?fù)鋪?lái)置換所述輸入??梢允褂弥脫Q后的輸入執(zhí)行所述矩陣操作以 生成輸出,并且根據(jù)所述排序網(wǎng)絡(luò)拓?fù)鋪?lái)置換所述輸出。可以將置換后的輸出提供為所述 矩陣操作的輸出。
[0047] 在一些實(shí)施例中,可以接收第一輸入,并且向所述第一輸入應(yīng)用函數(shù)索引的交織 的第一函數(shù)以生成具有左部分和右部分的第一輸出??梢韵蛩龅谝惠敵鰬?yīng)用函數(shù)索引的 交織的第二函數(shù)以生成第二輸出,其中,所述第一輸出的左部分被用作所述第二函數(shù)的右 輸入,并且所述第一輸出的右部分被用作所述第二函數(shù)的左輸入。然后可以提供所述第二 輸出作為對(duì)所述第一輸出的編碼。
[0048] 在一些實(shí)施例中,可以生成密鑰K,并且基于密鑰K和隨機(jī)化信息R來(lái)生成一對(duì)基 函數(shù)瓜五"??梢韵蛲ㄐ殴艿赖牡谝欢藨?yīng)用基函數(shù)介,并且向所述通信管道的第二端應(yīng)用 逆,之后可以丟棄所述密鑰K。通信管道可以跨單個(gè)平臺(tái)上或分離平臺(tái)上的應(yīng)用。
[0049] 在一些實(shí)施例中,要由計(jì)算機(jī)系統(tǒng)在程序執(zhí)行期間執(zhí)行的一個(gè)或多個(gè)操作可以被 復(fù)制以創(chuàng)建一個(gè)或多個(gè)操作的第一拷貝。程序任何可以被修改為執(zhí)行第一操作拷貝而非第 一操作。每個(gè)操作和對(duì)應(yīng)的拷貝可以使用不同編碼來(lái)編碼。操作對(duì)也可以用于創(chuàng)建檢查值, 諸如其中,在操作結(jié)果的執(zhí)行與拷貝的執(zhí)行之間的差異被添加到操作的結(jié)果或操作拷貝的 結(jié)果。這可以允許檢測(cè)攻擊者在程序執(zhí)行期間做出的修改。
[0050] 在一些實(shí)施例中,在包括多個(gè)操作和每個(gè)操作的拷貝的程序的執(zhí)行期間,在到達(dá) 在其處應(yīng)當(dāng)執(zhí)行多個(gè)操作中的操作的執(zhí)行點(diǎn)時(shí),拷貝或原始操作可以被隨機(jī)選擇并由程序 執(zhí)行。隨機(jī)選擇的操作的結(jié)果可以與將在只有操作的單個(gè)拷貝被執(zhí)行時(shí)獲得的結(jié)果相等。
[0051] 在一些實(shí)施例中,可以從應(yīng)用接收輸入??梢杂枚鄠€(gè)M寄存器位置tv..來(lái)定義 大小為M的陣列,w 。還可以定義置換多項(xiàng)式p、從輸入產(chǎn)生z的基于輸入的矢量映 射矩陣A,以及一系列常數(shù)A = ◎。然后可以執(zhí)行一系列操作,每個(gè)操作提供中間結(jié)果, 所述中間結(jié)果存儲(chǔ)在從M寄存器隨機(jī)選擇的M寄存器中。然后可以基于一系列中間結(jié)果將 最后結(jié)果從存儲(chǔ)最后結(jié)果的最后M存儲(chǔ)器提供到應(yīng)用。存儲(chǔ)在M寄存器中的每個(gè)中間結(jié)果 可以具有在將中間結(jié)果存儲(chǔ)到對(duì)應(yīng)M寄存器中之前應(yīng)用于中間結(jié)果的單獨(dú)編碼。應(yīng)用于中 間結(jié)果的不同編碼可以從多個(gè)不同編碼當(dāng)中隨機(jī)地選擇。類(lèi)似地,可以或可以不對(duì)應(yīng)于用 于將中間結(jié)果存儲(chǔ)在M寄存器中的編碼的不同編碼可以應(yīng)用于存儲(chǔ)在M寄存器中的中間結(jié) 果。新的M寄存器可以按照需要被分配,例如僅當(dāng)根據(jù)圖著色分配算法需要時(shí)被分配。
[0052] 在一些實(shí)施例中,產(chǎn)生至少第一值a作為輸出的第一操作可以被執(zhí)行,并且使 用a和第二值b將第一變量X編碼為aX+b??梢允褂胊X+b作為輸入來(lái)執(zhí)行第二操作 ,并且可以執(zhí)行使用a和b的解碼操作,之后a和b可以被丟棄。值b還可以是第三操作 Afq的輸出。使用Mvi和/或!的不同執(zhí)行實(shí)例,不同編碼可以用于編碼為aX+b的多個(gè)輸 入值。可以基于一個(gè)或多個(gè)常數(shù)被存儲(chǔ)在存儲(chǔ)器中的預(yù)期時(shí)間來(lái)從存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ) 器中的任何值中選擇這些值。類(lèi)似地,包含用于執(zhí)行操作和gCK/的指令的現(xiàn)有計(jì)算 機(jī)可讀程序代碼可以被修改為將X編碼為cX+d,并且當(dāng)執(zhí)行時(shí)g(K)至少產(chǎn)生第一值c??梢?針對(duì)至少一個(gè)X執(zhí)行操作治,并且c和d后續(xù)被丟棄。
[0053] 在一些實(shí)施例中,至少一個(gè)基函數(shù)可以與用于現(xiàn)有應(yīng)用的可執(zhí)行程序代碼摻合。 例如,可以通過(guò)用基函數(shù)替換現(xiàn)有程序中的至少一個(gè)操作,來(lái)將基函數(shù)與可執(zhí)行程序代碼 進(jìn)行摻合。還可以通過(guò)應(yīng)用本文所公開(kāi)的技術(shù)中的一種、一些或全部來(lái)將基函數(shù)與現(xiàn)有應(yīng) 用進(jìn)行摻合,所述技術(shù)包括分式、變量相關(guān)編碼、動(dòng)態(tài)數(shù)據(jù)識(shí)別編碼和/或交叉鏈接。所使 用的基函數(shù)和/或任何摻合技術(shù)可以包括或者可以排他地包括這樣的操作,所述操作與它 們與之摻合的現(xiàn)有應(yīng)用程序代碼的部分中呈現(xiàn)的操作是類(lèi)似或不可區(qū)分的。因此,攻擊者 可能難以或不可能在沒(méi)有基函數(shù)的情況下從將在現(xiàn)有可執(zhí)行程序代碼中呈現(xiàn)的那些中區(qū) 分基函數(shù)和或混合技術(shù)操作。
[0054] 在一些實(shí)施例中,可以提供一種計(jì)算機(jī)系統(tǒng)和/或計(jì)算機(jī)程序產(chǎn)品,包括處理器 和/或存儲(chǔ)指令的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述指令使得所述處理器執(zhí)行本文所公開(kāi)的一種 或多種技術(shù)。
[0055] 此外,因?yàn)楸疚墓_(kāi)的與基函數(shù)一起使用的算法可以是相對(duì)靈活的和開(kāi)放式的, 所以它們?cè)试S軟件多樣性的高度靈活的方案,并且改變的實(shí)例與使用白盒密碼可能的情況 相比更深地不同。因此,它們遠(yuǎn)不易受自動(dòng)攻擊的攻擊。只要可以迫使攻擊需要人參與,就 是高度有利的,因?yàn)槲覀兛梢孕陆ㄊ鼙Wo(hù)代碼的實(shí)例并且數(shù)據(jù)可以以計(jì)算機(jī)速度被自動(dòng)生 成,而僅可以以人類(lèi)速度來(lái)?yè)p害它們。
[0056] 在考查以下附圖和詳細(xì)描述后,本發(fā)明的其他系統(tǒng)、方法、特征和優(yōu)點(diǎn)對(duì)于本領(lǐng)域 技術(shù)人員將是或者將變得清楚。意圖將所有這樣的附加系統(tǒng)、方法、特征和優(yōu)點(diǎn)包括在本說(shuō) 明書(shū)內(nèi)、在本發(fā)明的范圍內(nèi)以及受所附權(quán)利要求的保護(hù)。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0057] 在附圖中: 圖1示出了根據(jù)本發(fā)明的用于加密函數(shù)的交換圖表; 圖2示出了根據(jù)本發(fā)明的虛擬機(jī)一般指令格式; 圖3示出了根據(jù)本發(fā)明的虛擬機(jī)進(jìn)入/退出指令格式; 圖4示出了根據(jù)本發(fā)明的標(biāo)記I "木人(Woodenman)"構(gòu)建; 圖5和6示出了根據(jù)本發(fā)明的標(biāo)記II構(gòu)建的分別的第一半和第二半; 圖7示出了根據(jù)本發(fā)明的排序網(wǎng)絡(luò)的圖形表示; 圖8示出了根據(jù)本發(fā)明的執(zhí)行函數(shù)索引的交織的方法的流程圖; 圖9示出了根據(jù)本發(fā)明的執(zhí)行控制流復(fù)制的方法的流程圖; 圖10示出了根據(jù)本發(fā)明的執(zhí)行數(shù)據(jù)流復(fù)制的方法的流程圖; 圖11示出了根據(jù)本發(fā)明的創(chuàng)建/a?區(qū)段的方法的流程圖; 圖12給出了用于實(shí)現(xiàn)本發(fā)明的標(biāo)記II保護(hù)系統(tǒng)的處理流程圖; 圖13示出了本發(fā)明的標(biāo)記III實(shí)現(xiàn)的區(qū)段設(shè)計(jì)的不規(guī)則結(jié)構(gòu)的圖形表示; 圖14示出了可以用本發(fā)明的標(biāo)記III實(shí)現(xiàn)中的T函數(shù)劃分實(shí)現(xiàn)的粒度的圖形表示; 圖15示出了本發(fā)明的標(biāo)記III實(shí)現(xiàn)的總體結(jié)構(gòu)的圖形表示; 圖16示出了本發(fā)明的標(biāo)記III實(shí)現(xiàn)的防御層的圖形表示; 圖17示出了本發(fā)明的實(shí)現(xiàn)中的海量數(shù)據(jù)編碼的圖形表示; 圖18和19示出了本發(fā)明的實(shí)現(xiàn)中的控制流編碼的圖形表示; 圖20示出了本發(fā)明的實(shí)現(xiàn)中的動(dòng)態(tài)數(shù)據(jù)識(shí)別編碼(mangling)的圖形表示; 圖21示出了本發(fā)明的實(shí)現(xiàn)中的交叉鏈接和交叉俘獲的圖形表示; 圖22示出了本發(fā)明的實(shí)現(xiàn)中的上下文相關(guān)編碼的圖形表示; 圖23給出了用于實(shí)現(xiàn)本發(fā)明的標(biāo)記II保護(hù)系統(tǒng)的處理流程圖; 圖24示出了在本發(fā)明的實(shí)現(xiàn)中的海量數(shù)據(jù)編碼或動(dòng)態(tài)數(shù)據(jù)識(shí)別編碼的典型使用的圖 形表示; 圖25示出了闡述本發(fā)明的實(shí)施例尋求解決的主要問(wèn)題的示例性框圖; 表25給出了對(duì)軟件邊界問(wèn)題進(jìn)行分類(lèi)的表; 圖26示出了未受保護(hù)形式的、白盒保護(hù)的以及用本發(fā)明的系統(tǒng)進(jìn)行保護(hù)的示例性軟 件系統(tǒng)的框圖; 圖27示出了對(duì)比由黑盒安全性、白盒安全性以及在本發(fā)明的示例性實(shí)施例下的保護(hù) 所提供的保護(hù)級(jí)別的柱狀圖; 圖28示出了對(duì)比密碼、哈希以及根據(jù)本發(fā)明的示例性基函數(shù)的處理流程圖; 圖29示出了本發(fā)明的基函數(shù)可以如何用于提供安全通信管道的示例性框圖; 圖30示出了根據(jù)本發(fā)明的用于函數(shù)索引的交織的處理流程圖; 圖31給出了用于實(shí)現(xiàn)本發(fā)明的標(biāo)記I保護(hù)系統(tǒng)的處理流程圖。
【具體實(shí)施方式】
[0058] 本文公開(kāi)的實(shí)施例描述了可以允許保護(hù)計(jì)算機(jī)系統(tǒng)的可能暴露于攻擊者的方面 的系統(tǒng)、技術(shù)和接收機(jī)程序產(chǎn)品。例如,已經(jīng)在供最終用戶操作的商品硬件上分發(fā)的軟件應(yīng) 用可能遭受在執(zhí)行期間具有對(duì)代碼的訪問(wèn)的實(shí)體的攻擊。
[0059] -般而言,本文公開(kāi)的實(shí)施例提供用于創(chuàng)建基函數(shù)的集合以及以以下方式將那些 函數(shù)與現(xiàn)有程序代碼進(jìn)行集成的技術(shù):使得對(duì)于潛在攻擊者而言難以或者不可能隔離、區(qū) 分或者接近地檢查基函數(shù)和/或現(xiàn)有的程序代碼。例如,本文公開(kāi)的處理可以接收現(xiàn)有程 序代碼并將基函數(shù)與現(xiàn)有代碼進(jìn)行組合。也可以使用諸如分式、動(dòng)態(tài)數(shù)據(jù)識(shí)別編碼、交叉鏈 接和/或如本文所公開(kāi)的變量相關(guān)編碼的各種技術(shù)來(lái)組合基函數(shù)與現(xiàn)有代碼,以進(jìn)一步摻 合基函數(shù)與現(xiàn)有代碼?;瘮?shù)和其他技術(shù)可以使用計(jì)算上與現(xiàn)有程序代碼使用的那些類(lèi) 似、相同或不能區(qū)分的操作,這可以增加潛在攻擊者區(qū)分受保護(hù)代碼與應(yīng)用的保護(hù)技術(shù)的 難度。如本文將描述的,這可以提供這樣的最終軟件產(chǎn)品,其與使用常規(guī)保護(hù)技術(shù)可能的情 況下相比對(duì)于各種攻擊是更有彈性的。
[0060] 如在圖25中所示,本文公開(kāi)的實(shí)施例可以提供用于若干基本問(wèn)題的解決方案,這 些基本問(wèn)題在要保護(hù)軟件免受攻擊時(shí)出現(xiàn),所示基本問(wèn)題諸如軟件邊界保護(hù)、高級(jí)多樣性 和可再生性問(wèn)題以及保護(hù)可測(cè)量性問(wèn)題。
[0061] 軟件邊界問(wèn)題可以組織成五組,如表1中所示:外皮問(wèn)題、數(shù)據(jù)邊界、代碼邊界、受 保護(hù)數(shù)據(jù)與受保護(hù)代碼之間的邊界以及受保護(hù)軟件與安全硬件之間的邊界。
[0062] 表 1
【權(quán)利要求】
1. 一種方法,包括: 選擇字大小W ; 選擇矢量長(zhǎng)度N ; 生成可逆狀態(tài)矢量函數(shù),所述可逆狀態(tài)矢量函數(shù)被配置為對(duì)w元素字的N矢量進(jìn)行 操作,所述可逆狀態(tài)矢量函數(shù)包括多個(gè)可逆操作的組合,其中所述狀態(tài)矢量函數(shù)接收至少 64比特的輸入并提供至少64比特的輸出,并且所述狀態(tài)矢量函數(shù)中的步驟的第一部分在 z/(r)上執(zhí)行線性或仿射計(jì)算; 使用第一編索引技術(shù)對(duì)所述狀態(tài)矢量函數(shù)中的步驟的第一部分編索引; 使用第二編索引技術(shù)對(duì)所述狀態(tài)矢量函數(shù)中的步驟的第二部分編索引; 在現(xiàn)有計(jì)算機(jī)可執(zhí)行程序中選擇至少一個(gè)操作以進(jìn)行修改;以及 修改所述現(xiàn)有計(jì)算機(jī)程序以取代所選擇的至少一個(gè)操作而執(zhí)行所述狀態(tài)矢量函數(shù)。
2. 如權(quán)利要求1所述的方法,其中,所述第一編索引技術(shù)和所述第二編索引技術(shù)中的 每一個(gè)控制從由以下構(gòu)成的組獨(dú)立選擇的操作類(lèi)型:if-then-else構(gòu)造;switch構(gòu)造;元 素置換選擇;迭代計(jì)數(shù);元素旋轉(zhuǎn)計(jì)數(shù);以及函數(shù)索引的密鑰索引。
3. 如權(quán)利要求1或2中任意一項(xiàng)所述的方法,其中,所述狀態(tài)矢量函數(shù)中的步驟的第三 部分中的每個(gè)步驟包括非T函數(shù)操作。
4. 如權(quán)利要求3所述的方法,其中步驟的所述第三部分中的每個(gè)步驟是從由以下構(gòu)成 的組中選擇的操作類(lèi)型:函數(shù)索引的加密鑰的按元素旋轉(zhuǎn)以及函數(shù)索引的加密鑰的子矢量 置換。
5. 如任何之前權(quán)利要求所述的方法,其中,所述可逆狀態(tài)矢量函數(shù)包括多個(gè)可逆操作 的串接。
6. 如任何之前權(quán)利要求所述的方法,其中,w是從由以下構(gòu)成的組中選擇的:16比特、 32比特以及64比特。
7. 如任何之前權(quán)利要求所述的方法,其中,w被選擇為主計(jì)算平臺(tái)的默認(rèn)整數(shù)大小。
8. 如任何之前權(quán)利要求所述的方法,其中,字大小w是N矢量的內(nèi)部字大小的兩倍。
9. 如任何之前權(quán)利要求所述的方法,還包括: 生成所述可逆狀態(tài)示例函數(shù)的逆,所述可逆狀態(tài)矢量函數(shù)的逆包括所述多個(gè)可逆操作 的每個(gè)的逆的串接。
10. 如任何之前權(quán)利要求所述的方法,還包括: 從由以下構(gòu)成的組中選擇用于所述可逆狀態(tài)矢量函數(shù)的密鑰類(lèi)型:運(yùn)行時(shí)密鑰、生成 時(shí)密鑰以及函數(shù)索引的密鑰。
11. 如權(quán)利要求10所述的方法,其中,所選擇的密鑰類(lèi)型是運(yùn)行時(shí)密鑰,所述方法還包 括: 修改所述狀態(tài)矢量函數(shù)以接受提供密鑰k的運(yùn)行時(shí)輸入。
12. 如權(quán)利要求10所述的方法,其中,所選擇的密鑰類(lèi)型是生成時(shí)密鑰,所述方法還包 括針對(duì)密鑰K部分地評(píng)估所述狀態(tài)矢量函數(shù)。
13. 如權(quán)利要求10所述的方法,其中,所選擇的密鑰類(lèi)型是函數(shù)索引的密鑰,所述方法 還包括:針對(duì)所述多個(gè)可逆操作A的每一個(gè),提供用于可逆操作的相關(guān)聯(lián)逆的密鑰J?,。
14. 如任何之前權(quán)利要求所述的方法,其中,所述狀態(tài)矢量函數(shù)是至少部分通過(guò)多個(gè)矩 陣操作來(lái)實(shí)現(xiàn)的。
15. 如任何之前權(quán)利要求所述的方法,其中,所述第一編索引技術(shù)和所述第二編索引技 術(shù)中的至少一個(gè)控制多個(gè)操作,所述多個(gè)操作包括根據(jù)排序網(wǎng)絡(luò)拓?fù)鋱?zhí)行的隨機(jī)交換。
16. 如權(quán)利要求15所述的方法,其中,所述排序網(wǎng)絡(luò)拓?fù)涫菑挠梢韵聵?gòu)成的組中選擇 的:Batcher網(wǎng)絡(luò)、Banyan網(wǎng)絡(luò)、完美混洗網(wǎng)絡(luò)以及Omega網(wǎng)絡(luò)。
17. 如任何之前權(quán)利要求所述的方法,還包括: 用第一編碼機(jī)制對(duì)至所述狀態(tài)矢量函數(shù)的輸入進(jìn)行編碼; 其中,所述狀態(tài)矢量函數(shù)中的每個(gè)操作被適配和配置為當(dāng)至所述狀態(tài)矢量函數(shù)的所述 輸入用不同于所述第一編碼機(jī)制的第二編碼機(jī)制編碼時(shí)操作。
18. 如權(quán)利要求17所述的方法,其中,所述第一編碼機(jī)制將所述輸入編碼為aM+b,其中 a和b是常數(shù)。
19. 如權(quán)利要求18所述的方法,其中,M是可逆矩陣。
20. 如權(quán)利要求18或19中任意一項(xiàng)所述的方法,其中,所述第二編碼機(jī)制當(dāng)應(yīng)用于所 述輸入時(shí)將所述輸入編碼為cN+d,其中c和d分別是不同于a和b的常數(shù)。
21. 如權(quán)利要求20所述的方法,其中,N是可逆矩陣。
22. 如任何之前權(quán)利要求所述的方法,其中,在所述現(xiàn)有計(jì)算機(jī)可執(zhí)行程序中的所述至 少一個(gè)操作和所述狀態(tài)矢量函數(shù)使用計(jì)算上類(lèi)似的運(yùn)算。
23. 如任何之前權(quán)利要求所述的方法,其中,修改所述現(xiàn)有計(jì)算機(jī)程序的步驟還包括向 所述狀態(tài)矢量函數(shù)和所述現(xiàn)有計(jì)算機(jī)程序的組合應(yīng)用從由以下構(gòu)成的組中選擇的至少一 種技術(shù):分式、變量相關(guān)編碼、動(dòng)態(tài)數(shù)據(jù)識(shí)別編碼以及交叉鏈接。
24. 如權(quán)利要求23所述的方法,其中,所述狀態(tài)矢量函數(shù)和實(shí)現(xiàn)所述至少一種技術(shù)代 碼中的每一個(gè)使用在計(jì)算上與所述現(xiàn)有計(jì)算機(jī)程序中給出的那些類(lèi)似的運(yùn)算。
25. -種方法,包括: 接收具有子大小w的輸入; 向所述輸入應(yīng)用可逆狀態(tài)矢量函數(shù),所述可逆狀態(tài)矢量函數(shù)被配置為對(duì)w元素字的N 矢量進(jìn)行操作,所述可逆狀態(tài)矢量函數(shù)包括多個(gè)可逆操作的組合,其中所述狀態(tài)矢量函數(shù) 中的步驟的第一部分在Z/(2W)上執(zhí)行線性或仿射計(jì)算; 向所述可逆狀態(tài)矢量函數(shù)的輸出應(yīng)用來(lái)自第一多個(gè)操作當(dāng)中的第一操作,所述第一操 作是基于第一編索引技術(shù)而選擇的; 向所述第一操作的輸出應(yīng)用來(lái)自第二多個(gè)操作當(dāng)中的第二操作,所述第二操作是基于 與所述第一編索引技術(shù)不同的第二編索引技術(shù)而選擇的;以及 提供所述第二操作的輸出。
26. 如權(quán)利要求25所述的方法,其中,所述第二操作是基于從所述第一操作的執(zhí)行得 到的索引而從所述第二多個(gè)操作選擇的。
27. 如權(quán)利要求25或26中任意一項(xiàng)所述的方法,其中,所述第一編索引技術(shù)和所述第 二編索引技術(shù)中的每一個(gè)控制從由以下構(gòu)成的組獨(dú)立選擇的操作類(lèi)型:if-then-else構(gòu) 造;switch構(gòu)造;元素置換選擇;迭代計(jì)數(shù);元素旋轉(zhuǎn)計(jì)數(shù);以及函數(shù)索引的密鑰索引。
28. 如權(quán)利要求25-27中任意一項(xiàng)所述的方法,其中,所述狀態(tài)矢量函數(shù)中的步驟的第 三部分中的每個(gè)步驟包括非T函數(shù)操作。
29. 如權(quán)利要求28所述的方法,其中步驟的所述第三部分中的每個(gè)步驟是從由以下構(gòu) 成的組中選擇的操作類(lèi)型:函數(shù)索引的加密鑰的按元素旋轉(zhuǎn)以及函數(shù)索引的加密鑰的子矢 量置換。
30. 如權(quán)利要求25-29中任意一項(xiàng)所述的方法,其中,所述可逆狀態(tài)矢量函數(shù)包括多個(gè) 可逆操作的串接。
31. 如權(quán)利要求25-30中任意一項(xiàng)所述的方法,其中,w是從由以下構(gòu)成的組中選擇的: 16比特、32比特以及64比特。
32. -種通過(guò)執(zhí)行第二操作來(lái)執(zhí)行第一操作的方法,所述方法包括: 通過(guò)以下來(lái)執(zhí)行所述第二操作: 接收用第一編碼A編碼為A (X)的輸入X ; 使用5'?的值對(duì)所述輸入執(zhí)行第一多個(gè)計(jì)算機(jī)可執(zhí)行操作,其中反;是第二編碼機(jī)制 B的逆,所述第二編碼B不同于所述第一編碼A ;以及 基于來(lái)提供輸出。
33. 如權(quán)利要求32所述的方法,其中,所述第一操作是對(duì)If ~/!印執(zhí)行的。
34. 如權(quán)利要求33所述的方法,其中,所述第一操作的輸出未被在外部提供給可執(zhí)行 代碼,所述第一操作與所述可執(zhí)行代碼被集成在一起。
35. 如權(quán)利要求32-34中任意一項(xiàng)所述的方法,其中,所述第一編碼機(jī)制將所述輸入編 碼為aM+b,其中a和b是常數(shù)。
36. 如權(quán)利要求35所述的方法,其中,M是可逆矩陣。
37. 如權(quán)利要求35或36中任意一項(xiàng)所述的方法,其中,所述第二編碼機(jī)制如果應(yīng)用于 所述輸入則將所述輸入編碼為cN+d,其中c和d分別是不同于a和b的常數(shù)。
38. 如權(quán)利要求37所述的方法,其中,N是可逆矩陣。
39. 一種方法,包括: 對(duì)于被配置為接收輸入并提供輸出的矩陣操作,在執(zhí)行操作之前,根據(jù)排序網(wǎng)絡(luò)拓?fù)?來(lái)置換所述輸入; 使用置換后的輸入執(zhí)行所述矩陣操作以生成輸出; 根據(jù)所述排序網(wǎng)絡(luò)拓?fù)鋪?lái)置換所述輸出;以及 將置換后的輸出提供為所述矩陣操作的輸出。
40. 如權(quán)利要求39所述的方法,其中,所述排序網(wǎng)絡(luò)拓?fù)涫菑挠梢韵聵?gòu)成的組中選擇 的:Batcher網(wǎng)絡(luò)、Banyan網(wǎng)絡(luò)、完美混洗網(wǎng)絡(luò)以及Omega網(wǎng)絡(luò)。
41. 如權(quán)利要求39或40中任意一項(xiàng)所述的方法,其中,對(duì)于多個(gè)后續(xù)操作中的每一個(gè), 根據(jù)所述排序網(wǎng)絡(luò)拓?fù)鋪?lái)置換針對(duì)后續(xù)操作的輸入。
42. -種方法,包括: 接收第一輸入; 向所述第一輸入應(yīng)用函數(shù)索引的交織的第一函數(shù)以生成具有左部分和右部分的第一 輸出; 向所述第一輸出應(yīng)用函數(shù)索引的交織的第二函數(shù)以生成第二輸出,其中,所述第一輸 出的左部分被用作所述第二函數(shù)的右輸入,并且所述第一輸出的右部分被用作所述第二函 數(shù)的左輸入;以及 提供所述第二輸出作為對(duì)所述第一輸入的編碼。
43. 如權(quán)利要求42所述的方法,其中,所述第一輸入用第一編碼來(lái)編碼,還包括: 基于不同于所述第一編碼的第二編碼來(lái)應(yīng)用函數(shù)索引的交織的第一函數(shù)和函數(shù)索引 的交織的第二函數(shù)。
44. 如權(quán)利要求42所述的方法,還包括: 用第一編碼對(duì)輸入編碼;以及 使用被適配和配置為當(dāng)所述第一輸入用不同于第一編碼機(jī)制的第二編碼機(jī)制來(lái)編碼 時(shí)對(duì)輸入進(jìn)行操作的操作,來(lái)執(zhí)行每個(gè)其他記載的步驟。
45. 如權(quán)利要求44所述的方法,其中,所述第一編碼機(jī)制將所述第一輸入編碼為aM+b, 其中a和b是常數(shù)。
46. 如權(quán)利要求45所述的方法,其中,M是可逆矩陣。
47. 如權(quán)利要求45所述的方法,其中,所述第二編碼機(jī)制如果應(yīng)用于所述第一輸入則 將輸入編碼為cN+d,其中c和d分別是不同于a和b的常數(shù)。
48. 如權(quán)利要求47所述的方法,其中,N是可逆矩陣。
49. 一種方法,包括: 生成密鑰K ; 基于所生成的密鑰K和隨機(jī)化信息R來(lái)生成一對(duì)基函數(shù)瓜及"; 向通信管道的第一端應(yīng)用基函數(shù)./r ; 向所述通信管道的第二端應(yīng)用基函數(shù)逆;以及 丟棄所述S鑰K。
50. 如權(quán)利要求50所述的方法,其中,所述密鑰K是使用隨機(jī)或偽隨機(jī)過(guò)程生成的。
51. 如權(quán)利要求49-50中任意一項(xiàng)所述的方法,其中,所述通信管道的第一端通過(guò)在第 一平臺(tái)上的第一應(yīng)用來(lái)訪問(wèn)。
52. 如權(quán)利要求49-51中任意一項(xiàng)所述的方法,其中,所述通信管道的第二端通過(guò)在所 述第一平臺(tái)上的第二應(yīng)用來(lái)訪問(wèn)。
53. 如權(quán)利要求49-51中任意一項(xiàng)所述的方法,其中,所述通信管道的第二端通過(guò)在第 二平臺(tái)上的第二應(yīng)用來(lái)訪問(wèn)。
54. -種方法,包括: 接收至少一個(gè)基函數(shù); 接收用于現(xiàn)有計(jì)算機(jī)程序的應(yīng)用代碼;以及 通過(guò)用所述至少一個(gè)基函數(shù)替換所述應(yīng)用代碼中的至少一個(gè)操作,來(lái)?yè)胶纤鲋辽僖?個(gè)基函數(shù)和用于所述現(xiàn)有計(jì)算機(jī)程序的所述應(yīng)用代碼。
55. 如權(quán)利要求54所述的方法,還包括: 向所述至少一個(gè)基函數(shù)和所述應(yīng)用代碼應(yīng)用至少一種摻合技術(shù),所述至少一種摻合技 術(shù)選自由以下構(gòu)成的組:分式、變量相關(guān)編碼、動(dòng)態(tài)數(shù)據(jù)識(shí)別編碼以及交叉鏈接。
56. -種計(jì)算機(jī)系統(tǒng),包括: 處理器;以及 存儲(chǔ)指令的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述指令使得所述處理器執(zhí)行任何之前權(quán)利要求中 所記載的方法。
【文檔編號(hào)】G06F21/52GK104335218SQ201380028121
【公開(kāi)日】2015年2月4日 申請(qǐng)日期:2013年3月28日 優(yōu)先權(quán)日:2012年3月30日
【發(fā)明者】H.約翰遜, Y.X.古, M.韋納, Y.周 申請(qǐng)人:愛(ài)迪德加拿大公司