專利名稱:用于進行代碼驗證的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及引導控制機構(gòu),更具體言之,本發(fā)明涉及采用硬件簽名的引導控制機構(gòu)。
背景技術(shù):
計算機系統(tǒng)中的安全是令人關(guān)心的。在計算技術(shù)系統(tǒng)中會發(fā)生代碼或數(shù)據(jù)的非授權(quán)讀取,或者是在計算機系統(tǒng)中代碼或數(shù)據(jù)受到不小心或惡意的改變。
針對引導代碼過程的安全的通常的解決方案是采用軟件密碼鎖,也稱為軟件密碼簽名。一般,在遇到可疑引導代碼時,軟件密碼鎖或軟件密碼簽名通過執(zhí)行一個函數(shù),如散列函數(shù),對一段引導代碼進行分析。如經(jīng)過散列函數(shù)計算的值是正確的(即軟件“簽名”是正確的),就認為可疑代碼是安全的并容許其訪問系統(tǒng)。
然而,存在許多與軟件散列系統(tǒng)相關(guān)聯(lián)的問題。比如,對512位的塊進行散列處理的計算復雜性可能很大。利用一臺32位的RISC計算機,比如,一般可能要使用數(shù)千條指令對一個512位的輸入數(shù)據(jù)決進行處理。結(jié)果,散列系統(tǒng)一般也就提供速度較低的驗證過程。于是,需要一種至少能夠克服通常的系統(tǒng)的一些缺陷的散列處理過程。
發(fā)明內(nèi)容
本發(fā)明驗證代碼,如引導代碼。一存儲器尋址引擎按一步長值函數(shù)來選擇存儲器的一部分作為第一輸入散列值。還提供第二輸入散列值??梢詰?yīng)用驗證電路來對所選擇的存儲器部分和第二輸入散列值進行散列處理。也可應(yīng)用比較電路來對驗證電路的輸出和預期值進行比較。
為了更徹底的了解本發(fā)明及其優(yōu)點,現(xiàn)在結(jié)合附圖參考下面的詳細描述,附圖中圖1示意地示出用于驗證引導代碼的散列系統(tǒng)。
圖2A和圖2B示出應(yīng)用散列系統(tǒng)的方法的流程圖。
圖3示出應(yīng)用散列邏輯硬件的方法的流程圖。
具體實施例方式
在下面的討論中,提出多個具體細節(jié)供徹底了解本發(fā)明。然而,本領(lǐng)域人士可以理解,本發(fā)明無需這些具體細節(jié)也可以實現(xiàn)。在其他場合,公知的元件以示意圖或框圖形式示出,以避免以不需要的細節(jié)掩蓋本發(fā)明。此外,對于大部分而言,涉及網(wǎng)絡(luò)通信、電磁信令技術(shù)等等的細節(jié),已經(jīng)盡可能省略,只要這些細節(jié)未被認為是徹底了解本發(fā)明所必需并且被認為是相關(guān)技術(shù)界人士所了解的。
另外,還要注意,除非另有說明,此處所描述的所有功能既可以利用硬件或軟件,也可以利用執(zhí)行固件的微處理器,或其某種組合來完成。在一個實施方式中,采用的是用來完成這些功能的經(jīng)過編碼的專用集成邏輯電路。在另外一些實施方式中,完成這些功能利用的是處理器,如計算機或電子數(shù)據(jù)處理器,根據(jù)的是代碼,如計算機程序代碼,軟件,和/或經(jīng)過編程用來執(zhí)行這種功能的集成電路,除非另有說明。
下面參考圖1,圖中示出的是散列系統(tǒng)100。此散列系統(tǒng)100包括一個主存儲器110。此主存儲器110分割為16個存儲字,存儲字0至存儲字15。在示出的實施方式中,主存儲器是512位,并且每個存儲字是32位,雖然本專業(yè)人士可以理解,其他的主存儲器110大小也在本發(fā)明的范圍之內(nèi)。
散列系統(tǒng)100包括一個非易失性存儲器寄存器130。此存儲器寄存器130包括初始化值INX(IN0至IN7),素數(shù)因子控制符,或“跳躍”值,SX(S0至S7),以及預期值EX(E0至E7)。這些數(shù)值即使在系統(tǒng)100斷電時也存儲于非易失性存儲器寄存器130中,從而可以防止授權(quán)的個人企圖改變這些數(shù)值和更改散列函數(shù)輸出。
一般講,INX值是一個輸入到驗證引擎150的種子值。在驗證引擎150內(nèi)INX值與散列函數(shù)中的字0組合。之后驗證引擎150對兩個輸入執(zhí)行散列處理。正如技術(shù)人士可以理解的那樣,散列一般可以定義為對輸入執(zhí)行的非交換的累積組合數(shù)學函數(shù),從而創(chuàng)建一個硬件引導代碼簽名(“簽名”)。一個良好的累積組合函數(shù)應(yīng)該是這樣一個函數(shù),其中來自函數(shù)的前一個迭代結(jié)果的全部的位與輸入的全部的位相組合而產(chǎn)生一個新結(jié)果。此外,此結(jié)果的全部位應(yīng)該以某種方式取決于輸入和前一個結(jié)果值。非交換函數(shù)是以這樣的方式進行運算的函數(shù),即兩個相繼迭代的結(jié)果也取決于其處理兩個輸入值的次序。例如,加法函數(shù)是交換函數(shù),因為(A+B)與(B+A)相同,但減法函數(shù)是非交換函數(shù),因為(A-B)與(B-A)不同(除非A和B具有相同的值)。
在圖1示出的實施方式中,由驗證引擎150執(zhí)行存儲字的散列處理。一個散列結(jié)果160包括一個初始種子值和字0的函數(shù)。這產(chǎn)生一個輸出到散列結(jié)果160的散列輸出。之后,此輸出通過反饋環(huán)路155反饋到散列函數(shù)的輸入。實質(zhì)上同時,第二個存儲字也送入到驗證引擎150的散列的輸入,從而產(chǎn)生一個新的散列結(jié)果。
之后,一個SX值從非易失性存儲器寄存器130輸入到存儲器尋址引擎120。通常,存儲器尋址引擎120按SX值的函數(shù)從主存儲器110選擇字。之后此選擇的字輸入到散列函數(shù)150,每個散列一個。由存儲器尋址引擎120每次進行的新字選擇都發(fā)生于在驗證引擎150完成一個新散列之時。比如,如果SX=1,由存儲器尋址引擎120選擇存儲字的次序是存儲字0、存儲字1、存儲字2等等,驗證引擎150完成的每個散列各一個。如果SX=3,按存儲字0、存儲字3、存儲字6等等裝入存儲字0,驗證引擎150完成的每個散列各一個。在一個實施方式中,裝入的第一字定義作字0。
在一個實施方式中,跳躍值相對待檢測的存儲器范圍的數(shù)是素數(shù)。比如,在圖1中,有16個待檢測的存儲字。16等于24。因此,在1和16之間的任何不是2的因數(shù)的數(shù)字都是可接受的素數(shù)并且可用作SX。存儲字的選擇順序由存儲器尋址引擎120通過從指定的存儲器范圍,如范圍“0”,開始而進行。之后,加上SX值來確定下一個可接受的地址范圍。
表1
換言之,散列電路150在累積非交換的散列處理中使用由存儲器尋址引擎120按跳躍值SX的函數(shù)選擇的字。之后將每個非交換組合散列處理的結(jié)果回送到散列電路,以便與由存儲器尋址引擎120選擇的下一個字以非交換累積方式相組合。
比如,如SX=3,第一個存儲字0將從存儲器尋址引擎120與種子值INX一起送入散列函數(shù)。之后,由驗證引擎150完成的散列的輸出通過反饋環(huán)路155回送到驗證引擎150的散列中。之后存儲器尋址引擎將另一個字,3,輸出到驗證引擎。這些在驗證引擎150中都重新一起進行散列處理。這一新散列的輸出作為進一步的輸入通過反饋環(huán)路155與由存儲器尋址引擎選擇的字6一起送入驗證引擎150的散列,等等。這一散列處理過程一直繼續(xù)到全部存儲器范圍經(jīng)過檢測為止。
在示出的實施方式中,散列電路150使用跳躍值SX一直到主存儲器110中的所有的單元都被讀出并且進行非交換組合。在示出的實施方式中,SX是素數(shù),或是由不包含形成主存儲器110的大小的素數(shù)因子構(gòu)成。于是,對每個給定的SX存儲器110的每個存儲字都受到一次選擇,如果SX的值由存儲器尋址引擎120使用的次數(shù)等于主存儲器110中的字數(shù)時。例如,如果SX=3,并且在存儲器中有16個字,則當存儲器尋址引擎120選擇并傳輸字0、3、6、9等等16次時,主存儲器110中所有的字都被存儲器尋址引擎120選擇并傳輸?shù)津炞C引擎150進行散列處理。
在示出的實施方式中,一旦由存儲器尋址引擎120選擇的字高于包含在主存儲器內(nèi)的字的計數(shù),計數(shù)“回繞”變?yōu)榱?。比如,如SX值是“3”,并且存儲器尋址引擎120所選擇的最后的字是字15,則下一個選擇的字是字2、字5等等。在一個實施方式中,由存儲器尋址引擎進行的字的選擇一直繼續(xù)到選擇數(shù)等于主存儲器110中的字數(shù)為止。
一旦所有的存儲器范圍都以給定的INX在組合中經(jīng)受了檢測時,就將給定的INX的最終散列值(FVX)輸入到散列結(jié)果寄存器160。散列結(jié)果寄存器160將FVX與從非易失性存儲器寄存器130接收到的預期值EX進行比較。如果兩者相等,則主存儲器110中的字順利通過與該具體INX值相聯(lián)系的檢測。于是系統(tǒng)100開始檢測下一個INX值,并且存儲器尋址引擎120利用下一個相關(guān)聯(lián)的SX進行下一輪的存儲字選擇。如果對散列不存在更多的INX值,則存儲器信息,如引導代碼,已經(jīng)通過散列邏輯并且因此是“安全”的,即是沒有更改的,而檢測結(jié)束。然而,對于任何值INX,如果FVX不等于EX,則主存儲器110中的字沒有順利通過與INX值相關(guān)聯(lián)的檢測,代碼被認為“更改”過,此代碼不能接受,并且檢測結(jié)束。
在示出的實施方式中,增加用來生成與EX相比較的FVX的SX值的數(shù)目,通常會使得在比較散列結(jié)果與EX之際誤將更改的代碼當作未更改的機會減小。比如,雖然經(jīng)過更改的代碼對于給定的SX可以通過存儲器的第一遍并從而產(chǎn)生一個正確`的FV1,但由存儲器尋址引擎120使用新的SX值并且以驗證引擎150使用的不同的次序第二遍通過存儲器110通常會產(chǎn)生不同的FVX。隨著計算出的每一個額外的FVX,更改的代碼通過所有的FXX和INX之間的比較的幾率減小。
在示于圖1的實施方式中,驗證引擎150使用的是累積的但是是非交換的過程組合字串和散列結(jié)果來構(gòu)建散列值,或簽名,以便與預期值EX進行比較,每個INX一個。本專業(yè)人士可以理解,非交換意味著散列結(jié)果,由散列電路150生成,并且取決于散列電路150處理輸入值的次序以及輸入值本身。
比如,一般講,如果用來組合不同值的函數(shù)fC是交換函數(shù),則(AfCB)與(BfCA)產(chǎn)生的結(jié)果相同。然而,在示出的實施方式中,由存儲器尋址引擎120選擇的字和散列結(jié)果160要在非交換累積散列電路150中組合,因為電路150使用的函數(shù)是非交換函數(shù)。因此,(AfnB)與(BfnA)產(chǎn)生的結(jié)果一般不同。
在一個實施方式中,驗證引擎150利用一個循環(huán)左移1位(“rot1”)函數(shù)。一般,rot1采用的數(shù)據(jù)為存儲器范圍或種子值這樣的數(shù)據(jù),存儲并擦除最高有效數(shù)字,將每個數(shù)字移動到下一個最高有效位置保持中,并將所存儲的最高有效數(shù)字置于最低有效數(shù)字位置保持中。在一個實施方式中,使用循環(huán)右移函數(shù)。同樣,也可使用其他函數(shù)來使邏輯組合變?yōu)榉墙粨Q的。
在示出的實施方式中,驗證引擎150使用至少兩個值的組合,至少其中的一個經(jīng)過更改而使此組合成為一般非交換累積函數(shù)。
1.新散列值=(老的散列反饋輸出fn字x)。
換言之,老的散列反饋輸出是以非交換組合方式與存儲器尋址引擎120選擇的字SX組合的。對于存儲字0,散列種子值INX代替老的散列輸出。
在圖1中,非交換累積函數(shù)fn包括利用一個“rot1”函數(shù)。在一個實施方式中,利用一個邏輯“與”函數(shù)將這些值組合。
2.新散列值=(-rot1,(R,1)+字x)。
換言之,使老的散列值循環(huán)左移1位(該值是來自散列結(jié)果150的反饋散列值)并與存儲器尋址引擎120選擇的字x相加而得到散列結(jié)果。在另一實施方式中,利用一個邏輯”異或,,函數(shù)將這些值組合。一般講,在驗證引擎150內(nèi)使用非交換累積函數(shù),如rot1函數(shù),在系統(tǒng)100比較FVX和EX時可使更改的代碼被當作未更改的代碼的機會減小。
下面看圖2A和2B,其中示出用于驗證代碼的方法200。一般,在方法200中,驗證引擎150對輸入值進行散列處理以產(chǎn)生一系列FVX。將這些FVX與預期值EX進行比較來確定主存儲器110的字是否包含未更改的代碼和/或數(shù)據(jù),或者代碼和/或數(shù)據(jù)是否被更改并因而是不可接受的。
在步驟210中,存儲器尋址引擎120定義SX為S0。在步驟215中,設(shè)定INX為IN0。在步驟217中,設(shè)定EX為E0。
在步驟220中,由預期結(jié)果比較器170從非易失性存儲器寄存器130讀出預期值EX。在步驟225中,由存儲器尋址引擎120從非易失性存儲器寄存器130讀出步長值SX。一般,此值SX是素數(shù)或與等待驗證的存儲器,如主存儲器110,有關(guān)系的素數(shù)的組合。在方法200中,為便于描述,S0=1,雖然S0的其他值也在本發(fā)明的范圍之內(nèi)。
在步驟230中,設(shè)定存儲器計數(shù)值等于0。此存儲器計數(shù)值一般可定義為值SX與開始值相加多少次。在一個實施方式中,開始值為零,與字零相對應(yīng)。
在步驟240中,將INX值從非易失性存儲器寄存器130輸入到散列結(jié)果160中,該結(jié)果通過反饋環(huán)路155送入驗證引擎150中。在另外一個實施方式中,INX直接輸入到驗證引擎150。
在步驟250中,從主存儲器110中讀出所選擇的存儲字,與乘以存儲器計數(shù)值的SX相關(guān)聯(lián),從存儲器尋址引擎120傳輸?shù)津炞C引擎150。如果此存儲器計數(shù)值大于存儲器中的字數(shù),就發(fā)生存儲器環(huán)繞。
在步驟255中,對取自主存儲器110的選擇字利用種子值INX或先前的散列結(jié)果執(zhí)行散列處理。此散列處理可為在方程(1)中公開的散列處理。
在步驟260中,存儲器尋址引擎120確定對給定的SX是否所有存儲器單元或部分已被讀出。在一個實施方式中,這一點是通過比較存儲器計數(shù)值和主存儲器110中的字數(shù)完成的。如果主存儲器110中的字尚未全部被選擇,則執(zhí)行步驟245。在步驟245中,利用反饋環(huán)路155將散列電路150的輸出反饋到散列電路的輸入端,如方程(1)所示。之后,在步驟265中,再一次執(zhí)行累積非交換散列處理,并將存儲器單元計數(shù)值加“1”。再次執(zhí)行步驟250,并重復這一循環(huán)一直繼續(xù)到對給定的SX全部字都讀出為止。
然而,如果對給定的SX全部存儲器單元都已經(jīng)讀出,則由步驟270確定散列電路150的最終值FVX是否等于存儲于非易失性存儲器寄存器130中的預期值EX。在步驟275中,如兩者不相等,則主存儲器110中的代碼和數(shù)據(jù)已經(jīng)更改,因而不可靠,而驗證失敗。于是,此方法在步驟277停止。
然而,如果對給定的SX最終散列值等于預期值EX,則主存儲器110中的字已經(jīng)通過對該SX和INX的值的組合的驗證。于是,在步驟280中,方法200確定是否全部INX都已經(jīng)檢測。如果是,就是主存儲器110中的字通過了驗證,并且未更改。因此,此方法在步驟295停止。
然而,如果并非所有的INX都已經(jīng)通過檢測,則在步驟285中將所選擇的INX加1從INX變?yōu)镮N(X+1),如IN3變?yōu)镮N4。另外,相應(yīng)的SX也加1變?yōu)镾(X+1),如S3變?yōu)镾4。EX也加1變?yōu)镋(X+1),如E3變?yōu)镋4。之后,方法200再執(zhí)行一次一直到全部INX都經(jīng)過檢測并通過檢測為止,或者是一直到最終散列值FHVX不等于其相應(yīng)的EX為止。
下面看圖3,其中公開的是用于生成散列值的方法的流程圖300,如在方法200的步驟255中執(zhí)行的。在步驟310中,散列電路輸入INX或來自步驟255的前一個調(diào)用中前一個散列輸出。在步驟320中,將存儲器尋址引擎120所選擇的字也輸入到散列電路。在步驟330中,將字或前一個值循環(huán)左移以產(chǎn)生循環(huán)移位輸入散列值。最后,在步驟340中,將循環(huán)移位輸入散列值與非循環(huán)移位散列值相加而得到散列結(jié)果。在一個實施方式中,前一個散列值是循環(huán)左移值。
可以理解,本發(fā)明可采用多種形式與實施方式。因此,在不脫離本發(fā)明的精神和范圍的情況下可以有多種不同的實施形態(tài)實現(xiàn)本發(fā)明。在參考某些優(yōu)選實施例對本發(fā)明進行上述描述之后,應(yīng)該注意,此處公開的實施方式本質(zhì)上是示例性的而非限制性的,并且可以預期在上述公開內(nèi)容中可以有多種變化、改型、改變和替換,并且,在一些情況下,可以采用本發(fā)明的某些特點而不使用其另一些特點。根據(jù)對實施方式的上述描述的綜述,本專業(yè)人士可能認為很多變化和改型是明顯的和有益的。因此,下附的權(quán)利要求可以做廣泛的解釋并且與本發(fā)明的范圍一致。
權(quán)利要求
1.一種用于代碼驗證的系統(tǒng),包括一存儲器尋址引擎,用來按步長值函數(shù)選擇存儲器的一部分,作為第一輸入散列值;一第二輸入散列值;一驗證引擎,用來對存儲器的該部分和第二輸入散列值兩者進行散列處理;以及一比較電路,對驗證引擎的輸出和預期值進行比較。
2.如權(quán)利要求1的系統(tǒng),其中驗證引擎所使用的散列包括一非交換累積函數(shù)。
3.如權(quán)利要求2的系統(tǒng),其中非交換累積函數(shù)還使用一個“與”函數(shù)對存儲器的該部分和第二輸入值進行散列處理。
4.如權(quán)利要求1的系統(tǒng),其中步長值不包括存儲器的大小的素數(shù)。
5.如權(quán)利要求1的系統(tǒng),其中第二輸入散列值包括初始種子值。
6.如權(quán)利要求1的系統(tǒng),其中第二輸入散列值包括一反饋散列值。
7.如權(quán)利要求1的系統(tǒng),其中驗證引擎使用“異或”函數(shù)來對存儲器的該部分和第二輸入值進行散列處理。
8.如權(quán)利要求1的系統(tǒng),其中所選擇的存儲器的該部分是一個字。
9.如權(quán)利要求1的系統(tǒng),其中存儲器尋址引擎用來按步長值函數(shù)選擇多個被選的存儲器部分。
10.如權(quán)利要求1的系統(tǒng),其中驗證引擎使用多個初始種子值。
11.一種用于計算機代碼序列驗證的方法,包括讀出所選擇的第一存儲器部分;讀出預期值;讀出第二散列輸入值;對所選擇的存儲器部分和第二散列輸入值進行散列處理;將散列結(jié)果反饋到第二散列輸入;讀出所選擇的第二存儲器部分;對所選擇的第二存儲器部分與反饋的散列結(jié)果進行散列處理;以及將反饋散列結(jié)果的散列處理結(jié)果與預期值進行比較。
12.如權(quán)利要求11的方法,其中的散列處理步驟還包括使第二散列輸入的最高有效數(shù)字循環(huán)左移。
13.如權(quán)利要求11的方法,其中的散列處理步驟還包括使用非交換累積組合。
14.如權(quán)利要求11的方法,還包括按步長值函數(shù)選擇多個存儲器部分。
15.如權(quán)利要求14的方法,還包括使用存儲器環(huán)繞來選擇多個存儲器部分。
16.如權(quán)利要求11的方法,還包括將最終散列值傳輸?shù)筋A期結(jié)果比較器。
17.如權(quán)利要求11的方法,還包括使用多個初始值。
18.如權(quán)利要求11的方法,還包括生成多個最終散列值。
19.一種用于計算機代碼序列驗證的計算機程序產(chǎn)品,此計算機程序產(chǎn)品具有其中嵌入有計算機程序的介質(zhì),此計算機程序包括用于讀出所選擇的第一存儲器部分的計算機代碼;用于讀出預期值的計算機代碼;用于讀出第二散列輸入值的計算機代碼;用于對所選擇的存儲器部分和第二散列輸入值進行散列處理的計算機代碼;用于將散列結(jié)果反饋到第二散列輸入的計算機代碼;用于讀出所選擇的第二存儲器部分的計算機代碼;用于對所選擇的第二存儲器部分與反饋的散列結(jié)果進行散列處理的計算機代碼;以及用于將反饋散列結(jié)果的散列處理結(jié)果與預期值進行比較的計算機代碼。
20.一種用于計算機代碼序列驗證的處理器,此處理器包含一計算機程序,其構(gòu)成包括用于讀出所選擇的第一存儲器部分的計算機代碼;用于讀出預期值的計算機代碼;用于讀出第二散列輸入值的計算機代碼;用于對所選擇的存儲器部分和第二散列輸入值進行散列處理的計算機代碼;用于將散列結(jié)果反饋到第二散列輸入的計算機代碼;用于讀出所選擇的第二存儲器部分的計算機代碼;用于對所選擇的第二存儲器部分與反饋的散列結(jié)果進行散列處理的計算機代碼;以及用于將反饋散列結(jié)果的散列處理結(jié)果與預期值進行比較的計算機代碼。
全文摘要
本發(fā)明用于驗證代碼,如引導代碼。一存儲器尋址引擎用來按步長值的函數(shù)選擇存儲器的一部分,作為第一輸入散列值。此步長值允許對第二輸入散列值(如先前的循環(huán)左移散列值)與多個存儲器部分進行非交換累積散列處理。驗證電路可用于對存儲器的該部分和第二輸入散列值執(zhí)行散列處理。之后可應(yīng)用比較電路對驗證電路的輸出和預期值進行比較。
文檔編號G06F21/00GK1503144SQ20031010336
公開日2004年6月9日 申請日期2003年10月29日 優(yōu)先權(quán)日2002年11月21日
發(fā)明者D·J·克拉夫特, D J 克拉夫特 申請人:國際商業(yè)機器公司