本發(fā)明涉及計算機技術(shù)領(lǐng)域,特別涉及一種基于bmc和tcm進行完整性度量的方法和服務(wù)器。
背景技術(shù):
隨著服務(wù)器在各行各業(yè)應(yīng)用越來越深入,使得服務(wù)器的安全性問題得到廣泛的關(guān)注。尤其是在服務(wù)器啟動過程中,很容易受到攻擊,因此,對服務(wù)器進行完整性度量,以保證服務(wù)器的安全啟動則顯得尤為重要。
目前,完整性度量的方是主要是,把靜態(tài)核心度量根crtm存儲于bios中,這樣默認crtm為可信的,則由bios中的crtm控制整個的啟動過程,在服務(wù)器啟動過程中,crtm并不會將控制權(quán)釋放給下一階段的被度量部件,并不能實現(xiàn)信任傳遞。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供了一種基于bmc和tcm進行完整性度量的方法和服務(wù)器,實現(xiàn)了信任傳遞。
一種基于bmc和tcm進行完整性度量的方法,通過spi總線構(gòu)建基板管理控制器bmc與bios之間的連接,通過lpc總線構(gòu)建所述bmc與可信密碼模塊tcm之間的連接,并在所述tcm中存儲sm3雜湊算法和基準值;還包括:
所述bmc通過所述spi總線收集所述bios中的關(guān)鍵代碼;
通過所述lpc總線調(diào)用所述tcm中存儲的sm3雜湊算法,對所述關(guān)鍵代碼進行度量,得到度量值;
判斷所述度量值與所述tcm中存儲的基準值是否一致,如果是,則發(fā)送控制信號給cpu,以控制所述cpu上電,并將信任鏈傳遞給所述bios中的關(guān)鍵代碼;否則,禁止所述cpu啟動。
優(yōu)選地,上述方法進一步包括:在所述bmc中構(gòu)建非易失存儲器flash,并在所述tcm中存儲sm4加密算法;
在所述通過所述lpc總線調(diào)用所述tcm中存儲的sm3雜湊算法,對所述關(guān)鍵代碼進行度量之后,在所述判斷所述度量值與所述tcm中存儲的基準值是否一致之前,進一步包括:
生成度量日志信息,并調(diào)用所述tcm中存儲的sm4加密算法對所述度量日志信息進行加密;
將加密后的度量日志信息存儲到所述bmc中的flash中,所述度量日志信息,包括:度量時間和所述度量值。
優(yōu)選地,上述方法進一步包括:設(shè)置初次啟動標識信息;
在所述tcm中存儲基準值之前,進一步包括:
當讀取到所述初次啟動標識信息時,調(diào)用所述sm3雜湊算法,對所述關(guān)鍵代碼進行雜湊運算,得到256bit的基準值。
優(yōu)選地,在所述判斷所述度量值與所述tcm中存儲的基準值是否一致之后,在所述發(fā)送控制信號給cpu之前,進一步包括:
所述bmc和所述tcm對所述度量值進行數(shù)字簽名,并利用簽名后的度量值生成可信控制信號;
所述發(fā)送控制信號給cpu,包括:將所述可信控制信號發(fā)送給所述cpu。
優(yōu)選地,上述方法進一步包括:
隱藏所述bmc和所述tcm的地址空間,并為所述bmc和所述tcm的地址空間設(shè)置對應(yīng)的指令集;
外部通過解析所述指令集對所述bmc和所述tcm進行訪問。
優(yōu)選地,上述方法進一步包括:設(shè)置臨時數(shù)據(jù)的失效時間;
當所述臨時數(shù)據(jù)達到所述失效時間時,所述bmc和所述tcm分別清除自身運行過程中產(chǎn)生的臨時數(shù)據(jù)。
一種服務(wù)器,包括:基板管理控制器bmc、bios、可信密碼模塊tcm及cpu,其中,
所述bmc通過spi總線與所述bios連接,并通過lpc總線與所述tcm連接;
所述tcm,用于存儲sm3雜湊算法和基準值;
所述bmc,用于通過所述spi總線收集所述bios中的關(guān)鍵代碼,并通過所述lpc總線調(diào)用所述tcm中存儲的sm3雜湊算法,對所述關(guān)鍵代碼進行度量,得到度量值;判斷所述度量值與所述tcm中存儲的基準值是否一致,如果是,則發(fā)送控制信號給cpu,以控制所述cpu上電,并將信任鏈傳遞給所述bios中的關(guān)鍵代碼;否則,切斷禁止所述cpu啟動。
優(yōu)選地,所述bmc,包括:加密單元和非易失存儲器flash,其中,
所述tcm,進一步用于存儲sm4加密算法;
所述加密單元,用于生成度量日志信息,并調(diào)用所述tcm中存儲的sm4加密算法對所述度量日志信息進行加密,將加密后的度量日志信息發(fā)送給所flash中,所述度量日志信息,包括:度量時間和所述度量值;
所述flash,用于存儲所述加密后的度量日志信息。
優(yōu)選地,
所述bmc,進一步用于設(shè)置初次啟動標識信息,當讀取到所述初次啟動標識信息時,調(diào)用所述tcm中存儲的所述sm3雜湊算法,對所述bios中的關(guān)鍵代碼進行雜湊運算,得到256bit的基準值。
優(yōu)選地,
所述tcm,進一步用于對所述度量值進行數(shù)字簽名;
所述bmc,進一步用于對所述度量值進行數(shù)字簽名,并利用簽名后的度量值生成可信控制信號,將所述可信控制信號發(fā)送給所述cpu。
優(yōu)選地,
所述bmc,進一步用于為自身產(chǎn)生的臨時數(shù)據(jù)設(shè)置失效時間,當所述臨時數(shù)據(jù)達到所述失效時間時,清除自身運行過程中產(chǎn)生的臨時數(shù)據(jù);
所述tcm,進一步用于為自身產(chǎn)生的臨時數(shù)據(jù)設(shè)置失效時間,當所述臨時數(shù)據(jù)達到所述失效時間時,清除自身運行過程中產(chǎn)生的臨時數(shù)據(jù)。
本發(fā)明實施例提供了基于bmc和tcm進行完整性度量的方法和服務(wù)器,bmc通過spi總線收集bios中的關(guān)鍵代碼,并通過lpc總線調(diào)用tcm中存儲的sm3雜湊算法,對關(guān)鍵代碼進行度量,得到度量值;當述度量值與tcm中存儲的基準值一致,則發(fā)送控制信號給cpu,以控制cpu上電,并將信任鏈傳遞給bios中的關(guān)鍵代碼,整個度量過程通過bmc和tcm完成,并將完成的信任鏈傳遞給bios,從而實現(xiàn)了信任傳遞。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明一個實施例提供的一種基于bmc和tcm進行完整性度量的方法的流程圖;
圖2是本發(fā)明另一個實施例提供的一種基于bmc和tcm進行完整性度量的方法的流程圖;
圖3是本發(fā)明一個實施例提供的服務(wù)器的結(jié)構(gòu)示意圖;
圖4是本發(fā)明另一個實施例提供的服務(wù)器的結(jié)構(gòu)示意圖。
具體實施方式
為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例,基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動的前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
如圖1所示,本發(fā)明實施例提供了一種基于bmc和tcm進行完整性度量的方法,該方法可以包括以下步驟:
步驟101:通過spi總線構(gòu)建基板管理控制器bmc與bios之間的連接,通過lpc總線構(gòu)建所述bmc與可信密碼模塊tcm之間的連接;
步驟102:在所述tcm中存儲sm3雜湊算法和基準值;
步驟103:所述bmc通過所述spi總線收集所述bios中的關(guān)鍵代碼;
步驟104:通過所述lpc總線調(diào)用所述tcm中存儲的sm3雜湊算法,對所述關(guān)鍵代碼進行度量,得到度量值;
步驟105:判斷所述度量值與所述tcm中存儲的基準值是否一致,如果是,則執(zhí)行步驟106;否則,執(zhí)行步驟107;
步驟106:發(fā)送控制信號給cpu,以控制所述cpu上電,并將信任鏈傳遞給所述bios中的關(guān)鍵代碼,并結(jié)束當前流程;
步驟107:禁止所述cpu啟動。
在圖1所示的實施例中,bmc通過spi總線收集bios中的關(guān)鍵代碼,并通過lpc總線調(diào)用tcm中存儲的sm3雜湊算法,對關(guān)鍵代碼進行度量,得到度量值;當述度量值與tcm中存儲的基準值一致,則發(fā)送控制信號給cpu,以控制cpu上電,并將信任鏈傳遞給bios中的關(guān)鍵代碼,整個度量過程通過bmc和tcm完成,并將完成的信任鏈傳遞給bios,從而實現(xiàn)了信任傳遞。
在本發(fā)明一個實施例中,為了保證度量結(jié)果的安全性,上述方法進一步包括:在所述bmc中構(gòu)建非易失存儲器flash,并在所述tcm中存儲sm4加密算法;在所述通過所述lpc總線調(diào)用所述tcm中存儲的sm3雜湊算法,對所述關(guān)鍵代碼進行度量之后,在所述判斷所述度量值與所述tcm中存儲的基準值是否一致之前,進一步包括:
生成度量日志信息,并調(diào)用所述tcm中存儲的sm4加密算法對所述度量日志信息進行加密;將加密后的度量日志信息存儲到所述bmc中的flash中,所述度量日志信息,包括:度量時間和所述度量值。則在進行后續(xù)判斷過程中通過解密度量日志信息得到度量值,以準確的判斷度量值與tcm中存儲的基準值是否一致。
在本發(fā)明一個實施例中,為了獲得比較準確的基準值,上述方法進一步包括:設(shè)置初次啟動標識信息;在所述tcm中存儲基準值之前,進一步包括:當讀取到所述初次啟動標識信息時,調(diào)用所述sm3雜湊算法,對所述關(guān)鍵代碼進行雜湊運算,得到256bit的基準值。即以初次啟動度量得到的度量值作為基準值,保證整個度量過程的一致性,同時保證基準值的準確性。
在本發(fā)明一個實施例中,為了進一步保證度量過程的安全性,在所述判斷所述度量值與所述tcm中存儲的基準值是否一致之后,在所述發(fā)送控制信號給cpu之前,進一步包括:所述bmc和所述tcm對所述度量值進行數(shù)字簽名,并利用簽名后的度量值生成可信控制信號;所述發(fā)送控制信號給cpu,包括:將所述可信控制信號發(fā)送給所述cpu,由于可信控制信號被進行數(shù)字簽名,使得可信控制信號不能被任意更改,從而保證度量過程的安全性。
在本發(fā)明一個實施例中,為了進一步保證bmc和tcm的安全性,上述方法進一步包括:隱藏所述bmc和所述tcm的地址空間,并為所述bmc和所述tcm的地址空間設(shè)置對應(yīng)的指令集;外部通過解析所述指令集對所述bmc和所述tcm進行訪問。
在本發(fā)明一個實施例中,為了進一步保證bmc和tcm的安全性,上述方法進一步包括:設(shè)置臨時數(shù)據(jù)的失效時間;當所述臨時數(shù)據(jù)達到所述失效時間時,所述bmc和所述tcm分別清除自身運行過程中產(chǎn)生的臨時數(shù)據(jù),從而避免bmc和tcm中的臨時數(shù)據(jù)被惡意攻擊,從而進一步保證了bmc和tcm的安全性。
如圖2所示,本發(fā)明實施例提供了一種基于bmc和tcm進行完整性度量的方法,該方法可以包括以下步驟:
步驟201:通過spi總線構(gòu)建基板管理控制器bmc與bios之間的連接,通過lpc總線構(gòu)建所述bmc與可信密碼模塊tcm之間的連接;
步驟202:在所述bmc中構(gòu)建非易失存儲器flash,并在所述tcm中存儲sm4加密算法;
該步驟的sm4加密算法采用32輪非線性迭代結(jié)構(gòu)。加密算法對應(yīng)解密算法,該加密算法和對應(yīng)的解密算法的結(jié)構(gòu)相同,只是輪密鑰的使用順序相反,解密輪密鑰是加密輪密鑰的逆序。在下述進行判斷的過程需要通過解密算法對加密后的基準值進行解密。
步驟203:設(shè)置初次啟動標識信息,并在所述tcm中存儲sm3雜湊算法;
該初次啟動標識信息是為了實現(xiàn)對基準值的度量,一旦服務(wù)器啟動過,則該初次啟動標識信息將會被更改,在后續(xù)啟動過程中則不會再次被發(fā)現(xiàn)。例如:設(shè)置初次啟動標識信息為first_boot_flag=1;一旦服務(wù)器啟動,則將所述標識信息修改為first_boot_flag=0;即當啟動時讀取到first_boot_flag=0時,則表明服務(wù)器為非初次啟動。
上述sm3雜湊算法主要是對長度為l(l<264)bit的消息m,經(jīng)過填充和迭代壓縮,生成雜湊值,雜湊值長度為256bit。
其中,sm3雜湊算法的填充過程為:
假設(shè)消息m的長度為lbit。首先將bit“1”添加到消息的末尾,再添加k個“0”,k是滿足l+1+k≡448mod512的最小的非負整數(shù)。然后再添加一個64位比特串,該比特串是長度l的二進制表示。填充后的消息m′的比特長度為512的倍數(shù)。
迭代壓縮過程:
將填充后的消息m′按512bit進行分組:m′=b(0)b(1)···b(n-1)
其中n=(l+k+65)/512。
對m′按下列方式迭代:
fori=0ton-1
v(i+1)=cf(v(i),b(i))
endfor
其中cf是壓縮函數(shù),v(0)為256bit初始值iv,b(i)為填充后的消息分組,迭代壓縮的結(jié)果為v(n)。
然后,
將消息分組b(i)按以下方法擴展生成132個字w0,w1,···,w67,w′0,w′1,···,w′63,用于壓縮函數(shù)cf:
a)將消息分組b(i)劃分為16個字w0,w1,···,w15。
b)forj=16to67
endfor
c)forj=0to63
endfor
令a,b,c,d,e,f,g,h為字寄存器,ss1,ss2,tt1,tt2為中間變量,壓縮函數(shù)vi+1=cf(v(i),b(i)),0≤i≤n-1。
計算過程描述如下:
abcdefgh←v(i)
forj=0to63
ss1←((a<<12)+e+(tj<<j))<<7
tt1←ffj(a,b,c)+d+ss2+w′j
tt2←ggj(e,f,g)+h+ss1+wj
d←cc←b<<9
b←a
a←tt1
h←g
g←f<<19
f←e
e←p0(tt2)
endfor
abcdefgh←v(n)
輸出256bit的雜湊值y=abcdefgh。
步驟204:當讀取到所述初次啟動標識信息時,調(diào)用所述sm3雜湊算法,對所述關(guān)鍵代碼進行雜湊運算,得到256bit的基準值;
步驟205:將256bit的基準值存儲到tcm中;
該過程中要是為了保證基準值的安全性。
步驟206:所述bmc通過所述spi總線收集所述bios中的關(guān)鍵代碼;
步驟207:通過所述lpc總線調(diào)用所述tcm中存儲的sm3雜湊算法,對所述關(guān)鍵代碼進行度量,得到度量值;
步驟208:生成度量日志信息,并調(diào)用所述tcm中存儲的sm4加密算法對所述度量日志信息進行加密;
步驟209:將加密后的度量日志信息存儲到所述bmc中的flash中,所述度量日志信息,包括:度量時間和度量值;
該flash為bmc的非易失存儲器,其大小可為1m字節(jié)??捎脕泶鎯Χ攘繒r間和度量值。
步驟210:判斷所述度量日志信息中的度量值與所述tcm中存儲的256bit的基準值是否一致,如果是,則執(zhí)行步驟211;否則,執(zhí)行步驟213;
在該過程中需要將上述步驟208和步驟209加密后的度量值進行解密,該解密過程是通過sm4加密算法對應(yīng)的sm4解密算法實現(xiàn)。
步驟211:所述bmc和所述tcm對所述度量值進行數(shù)字簽名,并利用簽名后的度量值生成可信控制信號;
步驟212:將所述可信控制信號發(fā)送給所述cpu,以控制所述cpu上電,并將信任鏈傳遞給所述bios中的關(guān)鍵代碼,并結(jié)束當前流程;
該步驟的實現(xiàn)主要是因為,bmc作為系統(tǒng)平臺的可信度量根,同時具有主板監(jiān)控管理功能。另外,在bmc中通過可編程邏輯實現(xiàn)主板的上電時序控制,在服務(wù)器接通電源時通過主板電源組件控制bmc和tcm先加電,cpu先不加電啟動;只有當度量完成bios確保可信后cpu才加電。
步驟213:禁止所述cpu啟動。
另外,在上述實施例所述的整個度量過程或者服務(wù)器使用過程中,均隱藏所述bmc和所述tcm的地址空間,并為所述bmc和所述tcm的地址空間設(shè)置對應(yīng)的指令集;則外部通過解析所述指令集對所述bmc和所述tcm進行訪問,例如:bios或者cpu對bmc進行訪問時,則是通過解析指令集來完成訪問,從而保證了bmc和tcm的安全性。
另外,在上述實施例的度量過程中,bmc和tcm均會產(chǎn)生臨時數(shù)據(jù),為了避免臨時數(shù)據(jù)被攻擊,還可以為bmc和tcm設(shè)置臨時數(shù)據(jù)的失效時間,那么,當所述臨時數(shù)據(jù)達到所述失效時間時,所述bmc和所述tcm分別清除自身運行過程中產(chǎn)生的臨時數(shù)據(jù)。
如圖3所示,本發(fā)明實施例提供一種服務(wù)器,包括:基板管理控制器bmc301、bios302、可信密碼模塊tcm303及cpu304,其中,
所述bmc301通過spi總線與所述bios302連接,并通過lpc總線與所述tcm303連接;
所述tcm303,用于存儲sm3雜湊算法和基準值;
所述bmc301,用于通過所述spi總線收集所述bios302中的關(guān)鍵代碼,并通過所述lpc總線調(diào)用所述tcm303中存儲的sm3雜湊算法,對所述關(guān)鍵代碼進行度量,得到度量值;判斷所述度量值與所述tcm303中存儲的基準值是否一致,如果是,則發(fā)送控制信號給cpu304,以控制所述cpu304上電,并將信任鏈傳遞給所述bios302中的關(guān)鍵代碼;否則,切斷禁止所述cpu304啟動。
如圖4所示,在本發(fā)明另一個實施例中,所述bmc301,包括:加密單元401和非易失存儲器flash402,其中,
所述tcm303,進一步用于存儲sm4加密算法;
所述加密單元401,用于生成度量日志信息,并調(diào)用所述tcm303中存儲的sm4加密算法對所述度量日志信息進行加密,將加密后的度量日志信息發(fā)送給所flash402中,所述度量日志信息,包括:度量時間和所述度量值;
所述flash402,用于存儲所述加密后的度量日志信息。
在本發(fā)明又一實施例中,所述bmc301,進一步用于設(shè)置初次啟動標識信息,當讀取到所述初次啟動標識信息時,調(diào)用所述tcm303中存儲的所述sm3雜湊算法,對所述bios302中的關(guān)鍵代碼進行雜湊運算,得到256bit的基準值。
在本發(fā)明另一實施例中,所述tcm303,進一步用于對所述度量值進行數(shù)字簽名;
所述bmc301,進一步用于對所述度量值進行數(shù)字簽名,并利用簽名后的度量值生成可信控制信號,將所述可信控制信號發(fā)送給所述cpu304。
在本發(fā)明另一實施例中,所述bmc301,進一步用于為自身產(chǎn)生的臨時數(shù)據(jù)設(shè)置失效時間,當所述臨時數(shù)據(jù)達到所述失效時間時,清除自身運行過程中產(chǎn)生的臨時數(shù)據(jù);
所述tcm303,進一步用于為自身產(chǎn)生的臨時數(shù)據(jù)設(shè)置失效時間,當所述臨時數(shù)據(jù)達到所述失效時間時,清除自身運行過程中產(chǎn)生的臨時數(shù)據(jù)。
上述裝置內(nèi)的各單元之間的信息交互、執(zhí)行過程等內(nèi)容,由于與本發(fā)明方法實施例基于同一構(gòu)思,具體內(nèi)容可參見本發(fā)明方法實施例中的敘述,此處不再贅述。
根據(jù)上述方案,本發(fā)明的各實施例,至少具有如下有益效果:
1.bmc通過spi總線收集bios中的關(guān)鍵代碼,并通過lpc總線調(diào)用tcm中存儲的sm3雜湊算法,對關(guān)鍵代碼進行度量,得到度量值;當述度量值與tcm中存儲的基準值一致,則發(fā)送控制信號給cpu,以控制cpu上電,并將信任鏈傳遞給bios中的關(guān)鍵代碼,整個度量過程通過bmc和tcm完成,并將完成的信任鏈傳遞給bios,從而實現(xiàn)了信任傳遞。
2.通過生成度量日志信息,并調(diào)用所述tcm中存儲的sm4加密算法對所述度量日志信息進行加密,將加密后的度量日志信息存儲到所述bmc中的flash中,所述度量日志信息包括:度量時間和所述度量值,保證度量日志信息中度量值的安全性。
3.通過設(shè)置初次啟動標識信息,當讀取到初次啟動標識信息時,調(diào)用sm3雜湊算法,對關(guān)鍵代碼進行雜湊運算,得到256bit的基準值,保證基準值與度量值度量過程的一致性,同時保證基準值的準確性。
4.通過bmc和tcm對度量值進行數(shù)字簽名,并利用簽名后的度量值生成可信控制信號,將可信控制信號發(fā)送給cpu,從而保證可信度量過程的安全性。
5.通過隱藏所述bmc和所述tcm的地址空間,并為所述bmc和所述tcm的地址空間設(shè)置對應(yīng)的指令集,外部通過解析所述指令集對所述bmc和所述tcm進行訪問,從而保證bmc和tcm的安全性。
6.通過設(shè)置臨時數(shù)據(jù)的失效時間,當臨時數(shù)據(jù)達到所述失效時間時,所述bmc和所述tcm分別清除自身運行過程中產(chǎn)生的臨時數(shù)據(jù),避免臨時數(shù)據(jù)被惡意攻擊,從而進一步保證了bmc和tcm的安全性。
需要說明的是,在本文中,諸如第一和第二之類的關(guān)系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個······”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同因素。
本領(lǐng)域普通技術(shù)人員可以理解:實現(xiàn)上述方法實施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成,前述的程序可以存儲在計算機可讀取的存儲介質(zhì)中,該程序在執(zhí)行時,執(zhí)行包括上述方法實施例的步驟;而前述的存儲介質(zhì)包括:rom、ram、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)中。
最后需要說明的是:以上所述僅為本發(fā)明的較佳實施例,僅用于說明本發(fā)明的技術(shù)方案,并非用于限定本發(fā)明的保護范圍。凡在本發(fā)明的精神和原則之內(nèi)所做的任何修改、等同替換、改進等,均包含在本發(fā)明的保護范圍內(nèi)。