本發(fā)明涉及一種硬件支持嵌入式系統(tǒng)程序指令標(biāo)記的保護(hù)方法。它利用指令起止地址的拼接作為干擾信息,干擾信息與指令一起作為雜湊算法的輸入,然后把雜湊算法的輸出,即散列值作為指令標(biāo)記的一部分,可防止針對(duì)指令標(biāo)記的雜湊算法破解攻擊。屬于嵌入式系統(tǒng)安全技術(shù)領(lǐng)域。
背景技術(shù):
隨著電子科學(xué)與計(jì)算機(jī)技術(shù)的發(fā)展,越來(lái)越多的嵌入式設(shè)備進(jìn)入了人們的生活中,逐漸在諸多領(lǐng)域發(fā)揮重要的系統(tǒng)自動(dòng)控制及數(shù)據(jù)存儲(chǔ)的作用。同時(shí)越來(lái)越多的應(yīng)用及更為方便的網(wǎng)絡(luò)接入,使嵌入式平臺(tái)面臨著越來(lái)越多的安全挑戰(zhàn)。嵌入式系統(tǒng)在運(yùn)算能力、內(nèi)存、功耗等方面有著嚴(yán)格的資源約束限制。采用通用計(jì)算機(jī)上的病毒掃描和防入侵軟件來(lái)防御安全攻擊,將會(huì)帶來(lái)性能的降低和功耗的增加。因此,嵌入式系統(tǒng)的安全問(wèn)題比通用系統(tǒng)的安全問(wèn)題更具有挑戰(zhàn)性。
完整性檢測(cè)可以保證信息在存儲(chǔ)和傳輸?shù)倪^(guò)程中沒(méi)有遭受非授權(quán)方式的篡改或破壞。目前的完整性檢測(cè)一般都使用雜湊算法。雜湊算法是指把任意長(zhǎng)度的輸入,通過(guò)散列算法變換成固定長(zhǎng)度的輸出的過(guò)程,該輸出就是散列值,散列值表示的是數(shù)據(jù)的特征信息。將雜湊算法計(jì)算出的指令的散列值與基本塊監(jiān)控信息中的提前計(jì)算的指令的散列值對(duì)比,如果對(duì)比信息不一致,可以中止程序的運(yùn)行,或進(jìn)行系統(tǒng)恢復(fù)。
目前,嵌入式監(jiān)控模型普遍直接對(duì)指令基本塊用雜湊算法進(jìn)行校驗(yàn),事實(shí)上,這種做法并不安全,有許多針對(duì)雜湊算法的攻擊方法,暴力破解和查表法都能破解雜湊算法,其中最有效果的是彩虹表攻擊,彩虹表綜合了暴力破解和查表法的特點(diǎn),是一種使用空間換取時(shí)間的技術(shù)。彩虹表的方式之所以有效是因?yàn)閷?duì)每一個(gè)指令都使用完全相同的雜湊算法。如果兩個(gè)指令相同,那么它們的散列值也一定相同。我們可以通過(guò)讓每一個(gè)雜湊函數(shù)不同,即使同一個(gè)指令進(jìn)行兩次雜湊,得到的散列值也會(huì)不同,從而避免這種攻擊。通過(guò)給指令加一個(gè)隨機(jī)的干擾信息后綴,然后再進(jìn)行雜湊。通過(guò)增加干擾信息,相同的指令每次雜湊的輸入都是完全不一樣的字符串了。在檢查指令是否正確的時(shí)候,我們也還需要這個(gè)干擾信息,所以干擾信息一般都是和指令一起保存在數(shù)據(jù)庫(kù)里,或者作為指令字符串的一部分。即使干擾信息被攻擊者得到,只要干擾信息是隨機(jī)的,查表法、彩虹表攻擊都會(huì)失效。因?yàn)楣粽邿o(wú)法事先知道干擾信息是什么,也就沒(méi)有辦法預(yù)先計(jì)算出彩虹表。
技術(shù)實(shí)現(xiàn)要素:
1、目的:
本發(fā)明的目的是提供一種硬件支持嵌入式系統(tǒng)程序指令標(biāo)記的保護(hù)方法,它使用散列值作為指令是否完整且沒(méi)有被篡改的依據(jù),同時(shí)對(duì)通過(guò)散列值逆向得到指令的雜湊算法的攻擊進(jìn)行了預(yù)防。
2、技術(shù)方案:
本發(fā)明設(shè)計(jì)一種硬件支持嵌入式系統(tǒng)程序指令標(biāo)記的保護(hù)方法,它利用指令起止地址的拼接作為干擾信息,干擾信息與指令一起作為雜湊算法的輸入,然后把雜湊算法的輸出,即散列值作為指令標(biāo)記的一部分。在指令運(yùn)行時(shí)候,將指令起止地址重新按原來(lái)的方式組合成干擾信息,干擾信息和指令一起使用雜湊算法的硬件化電路再次計(jì)算一個(gè)散列值,然后這個(gè)散列值會(huì)和指令標(biāo)記中的散列值進(jìn)行比較,相同則表明指令完整且沒(méi)有被篡改,不同則表明指令發(fā)生了改變。
本發(fā)明一種硬件支持嵌入式系統(tǒng)程序指令標(biāo)記的保護(hù)方法,該方法具體步驟包括:
步驟1,讀入指令基本塊文件;其中,指令基本塊文件指的是由多個(gè)指令基本塊組成的文件,每個(gè)指令基本塊中包括指令起止地址和指令兩部分;
步驟2,確定安全指令長(zhǎng)度;其中,安全指令長(zhǎng)度會(huì)根據(jù)雜湊算法的復(fù)雜程度和具體的安全需求綜合確定;
步驟3,對(duì)每一個(gè)指令基本塊,將指令的長(zhǎng)度與安全指令長(zhǎng)度比較,如果指令的長(zhǎng)度小于安全指令長(zhǎng)度,則進(jìn)行步驟4,否則進(jìn)行步驟5并記錄對(duì)應(yīng)的指令的拼接次數(shù)為0;其中,拼接次數(shù)指的是指令起止地址與指令起止地址拼接的次數(shù);
步驟4,用指令起止地址組合成干擾信息,干擾信息的長(zhǎng)度和指令的長(zhǎng)度相加應(yīng)該滿足大于安全指令長(zhǎng)度的要求,再將指令和干擾信息按順序拼接到一起組合成新的包含干擾信息的“指令”;其中,指令起止地址的組合方式是指令起止地址自身的拼接,拼接次數(shù)記為n,其中,拼接次數(shù)n選取為滿足要求的最小的拼接次數(shù);
步驟5,以拼接后的指令作為雜湊算法的輸入,得到輸出靜態(tài)散列值;其中,該靜態(tài)散列值指的是指令執(zhí)行之前計(jì)算得到的散列值,與下文中在指令執(zhí)行時(shí)候計(jì)算得到的動(dòng)態(tài)散列值相對(duì)應(yīng);
步驟6,將相對(duì)應(yīng)的指令起止地址,指令起止地址的拼接次數(shù)和靜態(tài)散列值保存下來(lái)作為指令標(biāo)記;
步驟7,在安全嵌入式處理器運(yùn)行時(shí),安全嵌入式處理器的緩存中包含有指令和指令起止地址信息;對(duì)應(yīng)前述緩存中的指令起止地址在指令標(biāo)記中搜索出拼接次數(shù)和靜態(tài)散列值;
步驟8,按照步驟4的方式將指令、指令起止地址根據(jù)拼接次數(shù)進(jìn)行拼接,得到經(jīng)過(guò)拼接后的指令,拼接次數(shù)為0的指令不用拼接;
步驟9,以經(jīng)過(guò)步驟8過(guò)程后的指令作為雜湊算法的硬件化電路的輸入,輸出與指令標(biāo)記中對(duì)應(yīng)的靜態(tài)散列值進(jìn)行比較,其中,雜湊算法的硬件化電路的輸出稱為動(dòng)態(tài)散列值;
步驟10,如果動(dòng)態(tài)散列值和靜態(tài)散列值相同,則表明指令完整且沒(méi)有被篡改,如果動(dòng)態(tài)散列值和靜態(tài)散列值不同,表明指令發(fā)生了改變。
通過(guò)以上步驟,完成了對(duì)硬件支持嵌入式系統(tǒng)程序指令標(biāo)記的保護(hù),加重了攻擊者在使用雜湊算法的攻擊方法攻擊硬件支持嵌入式系統(tǒng)程序指令標(biāo)記時(shí)候的計(jì)算負(fù)擔(dān),從而提高了硬件支持嵌入式系統(tǒng)程序指令標(biāo)記的安全性,解決了由于硬件支持嵌入式系統(tǒng)程序指令標(biāo)記容易暴露所引發(fā)的安全問(wèn)題。
3、優(yōu)點(diǎn)及功效:
這種硬件支持嵌入式系統(tǒng)程序指令標(biāo)記的保護(hù)方法具有以下幾個(gè)優(yōu)點(diǎn):
(1)本專利通過(guò)對(duì)指令增加后綴,由于每一個(gè)指令的指令起止地址都不同,等效于改變了雜湊算法的結(jié)構(gòu),攻擊者需要對(duì)每一個(gè)指令重新計(jì)算一個(gè)彩虹表進(jìn)行攻擊,加重了攻擊者的計(jì)算負(fù)擔(dān),提高了監(jiān)控模型的安全性。
(2)本專利使用的干擾信息是指令起止地址,不需要另外生成隨機(jī)干擾信息,并且在靜態(tài)模型中不需要額外增加空間保存這些干擾信息,從而在提高安全性的同時(shí)相當(dāng)于節(jié)省了存儲(chǔ)空間。
(3)本專利中干擾信息的添加是以指令和干擾信息的長(zhǎng)度達(dá)到安全指令長(zhǎng)度為目標(biāo)的,因此對(duì)于長(zhǎng)度較長(zhǎng)的指令,在程序執(zhí)行時(shí)候計(jì)算動(dòng)態(tài)散列值的過(guò)程所消耗的計(jì)算時(shí)間會(huì)更加合理。
附圖說(shuō)明
圖1是本發(fā)明所述的保護(hù)方法流程圖。
具體實(shí)施方式
本發(fā)明利用指令起止地址的拼接作為干擾信息,干擾信息與指令一起作為雜湊算法的輸入,然后把雜湊算法的輸出,即散列值作為指令標(biāo)記的一部分。在指令運(yùn)行時(shí)候,將指令起止地址重新按原來(lái)的方式組合成干擾信息,干擾信息和指令一起使用雜湊算法的硬件化電路再次計(jì)算一個(gè)散列值,然后這個(gè)散列值會(huì)和指令標(biāo)記中的散列值進(jìn)行比較,相同則表明指令完整且沒(méi)有被篡改,不同則表明指令發(fā)生了改變。
本發(fā)明一種硬件支持嵌入式系統(tǒng)程序指令標(biāo)記的保護(hù)方法,見(jiàn)圖1所示,其具體實(shí)施步驟如下:
步驟1,讀入指令基本塊文件。其中,指令基本塊文件指的是由多個(gè)指令基本塊組成的文件,每個(gè)指令基本塊中包括指令起止地址和指令兩部分;
步驟2,確定安全指令長(zhǎng)度。其中,安全指令長(zhǎng)度會(huì)根據(jù)雜湊算法的復(fù)雜程度和具體的安全需求綜合確定;
步驟3,對(duì)每一個(gè)指令基本塊,將指令的長(zhǎng)度與安全指令長(zhǎng)度比較,如果指令的長(zhǎng)度小于安全指令長(zhǎng)度,則進(jìn)行步驟4,否則進(jìn)行步驟5并記錄對(duì)應(yīng)的指令的拼接次數(shù)為0。其中,拼接次數(shù)指的是指令起止地址與指令起止地址拼接的次數(shù);
步驟4,用指令起止地址組合成干擾信息,干擾信息的長(zhǎng)度和指令的長(zhǎng)度相加應(yīng)該滿足大于安全指令長(zhǎng)度的要求,再將指令和干擾信息按順序拼接到一起組合成新的包含干擾信息的“指令”。其中,指令起止地址的組合方式是指令起止地址自身的拼接,拼接次數(shù)記為n,其中,拼接次數(shù)n選取為滿足要求的最小的拼接次數(shù);
步驟5,以拼接后的指令作為雜湊算法的輸入,得到輸出靜態(tài)散列值,其中,靜態(tài)散列值指的是指令執(zhí)行之前計(jì)算得到的散列值,與下文中在指令執(zhí)行時(shí)候計(jì)算得到的動(dòng)態(tài)散列值相對(duì)應(yīng);
步驟6,將相對(duì)應(yīng)的指令起止地址,指令起止地址的拼接次數(shù)和靜態(tài)散列值保存下來(lái)作為指令標(biāo)記;
步驟7,在安全嵌入式處理器運(yùn)行時(shí),安全嵌入式處理器的緩存中包含有指令和指令起止地址信息。對(duì)應(yīng)前述緩存中的指令起止地址在指令標(biāo)記中搜索出拼接次數(shù)和靜態(tài)散列值;
步驟8,按照步驟4的方式將指令、指令起止地址根據(jù)拼接次數(shù)進(jìn)行拼接,得到經(jīng)過(guò)拼接后的指令,拼接次數(shù)為0的指令不用拼接;
步驟9,以經(jīng)過(guò)步驟8過(guò)程后的指令作為雜湊算法的硬件化電路的輸入,輸出與指令標(biāo)記中對(duì)應(yīng)的靜態(tài)散列值進(jìn)行比較,其中,雜湊算法的硬件化電路的輸出稱為動(dòng)態(tài)散列值;
步驟10,如果動(dòng)態(tài)散列值和靜態(tài)散列值相同,則表明指令完整且沒(méi)有被篡改。如果動(dòng)態(tài)散列值和靜態(tài)散列值不同,表明指令發(fā)生了改變。
通過(guò)以上步驟,完成了對(duì)硬件支持嵌入式系統(tǒng)程序指令標(biāo)記的保護(hù),加重了攻擊者在使用雜湊算法的攻擊方法攻擊硬件支持嵌入式系統(tǒng)程序指令標(biāo)記時(shí)候的計(jì)算負(fù)擔(dān),從而提高了硬件支持嵌入式系統(tǒng)程序指令標(biāo)記的安全性,解決了由于硬件支持嵌入式系統(tǒng)程序指令標(biāo)記容易暴露所引發(fā)的安全問(wèn)題。