用于保護(hù)數(shù)據(jù)的方法
【專(zhuān)利摘要】在本公開(kāi)中,通過(guò)已知的映像計(jì)算散列函數(shù),例如程序中的地址范圍。已知散列函數(shù)的結(jié)果在兩個(gè)不同的時(shí)間點(diǎn)處相同,即在運(yùn)行程序之前,即在建立時(shí)間簽名,和在程序運(yùn)行期間,即運(yùn)行時(shí)間。程序員希望隱藏的值,即秘密值,在建立時(shí)間也是已知的。在建立時(shí)間,以這樣一種方式組合秘密值和散列使得可在運(yùn)行時(shí)間反轉(zhuǎn)該組合操作。該組合值,即salt,與程序一起被存儲(chǔ)。之后,在運(yùn)行時(shí)間,程序與在簽名時(shí)間計(jì)算的那樣計(jì)算相同的散列值,并且進(jìn)行反向的組合操作,以便揭示該秘密值。
【專(zhuān)利說(shuō)明】用于保護(hù)數(shù)據(jù)的方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及用于保護(hù)數(shù)據(jù)的方法,并且特別地關(guān)于向敏感數(shù)據(jù)提供保護(hù)。
【背景技術(shù)】
[0002] 敏感程序(即遭受攻擊/篡改的程序)具有在其操作期間使用的被認(rèn)為敏感的某 些數(shù)據(jù)。例如,在完成軟件內(nèi)的一組計(jì)算后,需要激活程序中的一大組子例程中的子例程。 然而,揭示哪個(gè)子例程將被激活可有助于攻擊者破壞軟件的操作。在這種情況下,子例程的 地址是需要保護(hù)的寶貴資產(chǎn)。在另一個(gè)例子中,視頻流可能需要用鑰匙來(lái)解密。因此,密鑰 構(gòu)成了需要保護(hù)的寶貴資產(chǎn)。
[0003] 現(xiàn)有的軟件實(shí)現(xiàn)適合于不同程度的靜態(tài)分析。也就是說(shuō),一旦攻擊者能夠提取整 個(gè)軟件負(fù)載,他們能夠基于他們希望利用的功能優(yōu)先化和反向工程化目標(biāo)的組件。因?yàn)樗?有的重要數(shù)據(jù)變量是靜態(tài)的,所以攻擊者可以簡(jiǎn)單地從反向工程化的代碼讀取它們。直接 嵌入在程序中的秘密易于被攻擊者檢索,例如函數(shù)地址和/或解密密鑰。
[0004] 這個(gè)問(wèn)題的基本解決方案在于隱藏敏感數(shù)據(jù)。這樣做的一種眾所周知的方法是通 過(guò)"分割秘密"模型,從而該數(shù)據(jù)被分解成兩部分,每一部分單獨(dú)是無(wú)用的,但在組合時(shí)恢復(fù) 原始數(shù)據(jù)。
[0005] 本文公開(kāi)的系統(tǒng)和方法提供散列(hashing)數(shù)據(jù)的方法和系統(tǒng),用于對(duì)敏感數(shù)據(jù) 提供保護(hù)以消除或減輕上述缺點(diǎn)中的至少一些。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明的一個(gè)目的是提供保護(hù)敏感數(shù)據(jù)的改進(jìn)方法。
[0007] 因此,在本公開(kāi)中,通過(guò)已知的映像(image)(例如程序中的地址范圍)計(jì)算散列 函數(shù)。已知散列函數(shù)的結(jié)果在兩個(gè)不同的時(shí)間點(diǎn)處相同,即在運(yùn)行程序之前(即在建立時(shí) 間簽名),和在程序運(yùn)行期間(即運(yùn)行時(shí)間)。程序員希望隱藏的值(即秘密值)在建立時(shí) 間也是已知的。仍然在建立時(shí)間,以這樣一種方式組合秘密值和散列使得可在運(yùn)行時(shí)間反 轉(zhuǎn)該組合操作。該組合值(即salt(混淆值))與程序一起被存儲(chǔ)。注意:salt決不靜態(tài) 地揭示秘密值。之后,在運(yùn)行時(shí)間,程序與在簽名時(shí)間計(jì)算的那樣計(jì)算相同的散列值,并且 進(jìn)行反向組合操作,以便揭示該秘密值。進(jìn)一步的細(xì)分顯示如何在不進(jìn)行與敏感值的直接 比較(這將不希望地揭示預(yù)期的"正確"值)的情況下驗(yàn)證敏感值是正確的。
[0008] 根據(jù)本發(fā)明的一個(gè)方面,提供了一種保護(hù)敏感數(shù)據(jù)的方法,包括步驟:在建立時(shí) 間期間,對(duì)映像進(jìn)行散列以產(chǎn)生第一散列,將敏感數(shù)據(jù)與第一散列組合以形成salt,存儲(chǔ) salt,并且在運(yùn)行時(shí)間,對(duì)映像進(jìn)行散列以產(chǎn)生第二散列,檢索salt,將第二散列與salt組 合以恢復(fù)敏感數(shù)據(jù)。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0009] 參照附圖,將從下面的詳細(xì)描述中進(jìn)一步理解本發(fā)明,其中:
[0010] 圖1示出根據(jù)本公開(kāi)第一實(shí)施例的保護(hù)敏感數(shù)據(jù)的方法;
[0011] 圖2示出根據(jù)本公開(kāi)第一實(shí)施例的恢復(fù)敏感數(shù)據(jù)的方法;
[0012] 圖3示出根據(jù)本公開(kāi)第二實(shí)施例的保護(hù)敏感數(shù)據(jù)的方法;
[0013] 圖4示出根據(jù)本公開(kāi)第一實(shí)施例的恢復(fù)敏感數(shù)據(jù)的方法;
[0014] 圖5示出根據(jù)本公開(kāi)第三實(shí)施例的保護(hù)敏感數(shù)據(jù)的方法;
[0015] 圖6示出根據(jù)本公開(kāi)第三實(shí)施例的恢復(fù)敏感數(shù)據(jù)的方法;
[0016] 圖7示出根據(jù)本公開(kāi)第四實(shí)施例的保護(hù)敏感數(shù)據(jù)的方法;
[0017] 圖8示出圖7的方法的進(jìn)一步的細(xì)節(jié);
[0018] 圖9示出圖7的方法的進(jìn)一步的細(xì)節(jié);
[0019] 圖10示出圖7的方法的進(jìn)一步的細(xì)節(jié);以及
[0020] 圖11示出恢復(fù)由圖8至10的方法所保護(hù)的敏感數(shù)據(jù)的方法。
【具體實(shí)施方式】
[0021] 定義
[0022]
【權(quán)利要求】
1. 一種保護(hù)敏感數(shù)據(jù)的方法,包括步驟: 在建立時(shí)間期間,對(duì)映像進(jìn)行散列以產(chǎn)生第一散列; 將敏感數(shù)據(jù)與第一散列組合以形成salt ;以及 存儲(chǔ)salt ; 在運(yùn)行時(shí)間,對(duì)映像進(jìn)行散列以產(chǎn)生第二散列; 檢索salt ; 將第二散列與salt組合以恢復(fù)敏感數(shù)據(jù)。
2. 如權(quán)利要求1的方法,還包括將第一值與映像組合的步驟。
3. 如權(quán)利要求1的方法,還包括步驟:將敏感數(shù)據(jù)分割成至少兩部分,將第一值與映像 組合,將敏感數(shù)據(jù)的第一部分與第一散列組合以形成第一 salt,以及將第二值與映像組合, 將敏感數(shù)據(jù)的第二部分與第一散列組合以形成第二salt。
4. 如權(quán)利要求3的方法,其中檢索salt的步驟檢索第一和第二salt,并且組合第二散 列的步驟將第二散列與第一及第二salt組合以分別恢復(fù)敏感數(shù)據(jù)的第一和第二部分。
5. 如權(quán)利要求4的任一項(xiàng)權(quán)利要求的方法,還包括步驟:對(duì)第一和第二散列進(jìn)行散列 以產(chǎn)生第三和第四散列,以及比較第三和第四散列以確定它們是否相同,并且如果它們相 同則驗(yàn)證該敏感數(shù)據(jù)。
6. 如權(quán)利要求5的方法,其中將敏感數(shù)據(jù)與第三散列值組合的步驟包括將敏感數(shù)據(jù)與 隨機(jī)數(shù)據(jù)組合。
7. 如權(quán)利要求6的方法,其中將敏感數(shù)據(jù)與第三散列值組合的步驟包括:將敏感數(shù)據(jù) 與隨機(jī)數(shù)據(jù)組合,并且將輸出與隨機(jī)數(shù)據(jù)及第三散列值組合。
8. 如權(quán)利要求7的方法,其中敏感數(shù)據(jù)是指令地址。
9. 如權(quán)利要求8的方法,其中指令地址包括轉(zhuǎn)移地址和回調(diào)函數(shù)地址中的至少一個(gè)。
10. 如權(quán)利要求8或9的方法,其中指令地址具有32位和64位之一。
11. 如權(quán)利要求1的方法,其中映像是任何文件的一部分。
12. 如權(quán)利要求11的方法,其中映像是可執(zhí)行文件的一部分。
13. -種保護(hù)敏感數(shù)據(jù)的方法,包括步驟: 在建立時(shí)間期間,對(duì)映像進(jìn)行散列以產(chǎn)生第一散列; 對(duì)第一散列進(jìn)行散列以產(chǎn)生第二散列; 將敏感數(shù)據(jù)與第二散列組合以產(chǎn)生組合值; 將第一散列與組合值組合以形成salt ;以及 存儲(chǔ)salt ; 在運(yùn)行時(shí)間,對(duì)映像進(jìn)行散列以產(chǎn)生第三散列; 對(duì)第三散列進(jìn)行散列以產(chǎn)生第四散列; 檢索salt ; 將第三散列與salt組合以恢復(fù)組合值; 比較來(lái)自恢復(fù)的組合值的第二散列與第四散列,并且如果它們相同; 則從該組合的數(shù)據(jù)的其余部分恢復(fù)敏感數(shù)據(jù)。
14. 如權(quán)利要求13的方法,其中將敏感數(shù)據(jù)與第二散列值組合的步驟包括添加隨機(jī)數(shù) 據(jù)的步驟。
15. 如權(quán)利要求14的方法,其中將敏感數(shù)據(jù)與第二散列值組合的步驟包括將敏感數(shù)據(jù) 與隨機(jī)數(shù)據(jù)進(jìn)行異或。
16. 如權(quán)利要求15的方法,其中將敏感數(shù)據(jù)與第二散列值組合的步驟包括:將敏感數(shù) 據(jù)與隨機(jī)數(shù)據(jù)進(jìn)行異或,以及將輸出與隨機(jī)數(shù)據(jù)及第二散列值組合。
17. 如權(quán)利要求16的方法,其中敏感數(shù)據(jù)是指令地址。
18. 如權(quán)利要求17的方法,其中指令地址包括轉(zhuǎn)移地址和回調(diào)函數(shù)地址中的至少一 個(gè)。
19. 如權(quán)利要求17或18的方法,其中指令地址具有32位和64位之一。
20. 如權(quán)利要求13的方法,其中映像是任何文件的一部分。
21. 如權(quán)利要求20的方法,其中映像是可執(zhí)行文件的一部分。
22. 如權(quán)利要求21的方法,其中映像具有與之組合的值。
23. 如權(quán)利要求22的方法,其中該值對(duì)應(yīng)于指令地址。
24. 如權(quán)利要求23的方法,其中存在多個(gè)指令地址,每個(gè)地址具有與映像組合的對(duì)應(yīng) 值。
25. 如權(quán)利要求24的方法,其中將第一散列與組合值組合以形成salt的步驟針對(duì)與映 像組合的每個(gè)對(duì)應(yīng)值而如比進(jìn)行,以產(chǎn)生對(duì)應(yīng)的多個(gè)salt。
【文檔編號(hào)】G06F21/60GK104272319SQ201280071962
【公開(kāi)日】2015年1月7日 申請(qǐng)日期:2012年3月26日 優(yōu)先權(quán)日:2012年3月26日
【發(fā)明者】R·克爾滕, H·董, C·利姆 申請(qǐng)人:愛(ài)迪德加拿大公司