本發(fā)明涉及電子通信領(lǐng)域,尤其涉及一種系統(tǒng)安全啟動方法及裝置。
背景技術(shù):
隨著各種通信業(yè)務(wù)的不斷增長,嵌入式系統(tǒng),特別是基站設(shè)備,對于系統(tǒng)啟動的安全性、可靠性要求越來越高。目前通常采用BOOT來引導(dǎo)中央處理器啟動,但是該種啟動方法存在一定的缺陷:由于BOOT程序需要不斷升級,如果升級時遇到斷電等突發(fā)事件,將會導(dǎo)致BOOT程序丟失;如果BOOT被篡改成一個非法BOOT,則會導(dǎo)致系統(tǒng)運行不安全的程序,增加了系統(tǒng)設(shè)備的安全隱患。
現(xiàn)有技術(shù)中為克服上述的啟動缺陷,通常采用安全BOOT模塊來安全引導(dǎo)BOOT啟動,防止系統(tǒng)運行非法BOOT;采用雙BOOT技術(shù)來有效降低因BOOT損壞而導(dǎo)致系統(tǒng)無法啟動的風(fēng)險。然而目前的安全BOOT模塊一般不具備認證雙BOOT的功能,即安全BOOT總是從存儲器固定位置去認證加載BOOT,不能按照用戶要求從其他地址去認證加載備用BOOT;而對于雙BOOT技術(shù)時,目前大多數(shù)方案均要借用外部邏輯器件(如EPLD、FPGA等)或者多個存儲介質(zhì)(如寄存器)實現(xiàn)BOOT之間的切換,這顯然增加了設(shè)備成本、功耗和PCB板的面積。
因此,現(xiàn)有技術(shù)中存在不能實現(xiàn)雙BOOT的安全認證以及雙BOOT之間切換實現(xiàn)過分依賴外部器件的問題,不符合嵌入式產(chǎn)品需具備的低功耗、低成本、體積小等特點。
技術(shù)實現(xiàn)要素:
本發(fā)明提供一種系統(tǒng)安全啟動方法及裝置,用以解決現(xiàn)有技術(shù)不能實現(xiàn)雙BOOT的安全認證以及雙BOOT過分依賴外部器件實現(xiàn)的問題。
依據(jù)本發(fā)明的一個方面,提供了一種系統(tǒng)安全啟動方法,將存儲區(qū)域分為至少兩級BOOT:其中,第一級BOOT存儲BOOT引導(dǎo)區(qū)信息,其他級BOOT中每級BOOT均存儲至少兩個BOOT區(qū)的信息,所述方法包括:
獲取步驟:所述BOOT引導(dǎo)區(qū)從第i級BOOT的存儲信息中獲取該級的控制信息,并根據(jù)所述控制信息從該級BOOT中選取一待認證BOOT區(qū);
認證步驟:所述BOOT引導(dǎo)區(qū)對所選BOOT區(qū)進行認證,若認證成功,則引導(dǎo)中央控制器對所選的BOOT區(qū)加載運行;若認證失敗,則在該級BOOT的其他BOOT區(qū)中選取一待認證BOOT區(qū),重復(fù)該步驟,直到認證成功,加載選取的BOOT區(qū),并在加載成功后,令i=i+1,i最小取2,返回所述獲取步驟。
優(yōu)選地,在所述獲取步驟前,還包括:
引導(dǎo)區(qū)加載步驟:所述中央控制器對所述BOOT引導(dǎo)區(qū)進行認證后加載。
優(yōu)選地,所述BOOT引導(dǎo)區(qū)選取一待認證BOOT區(qū)后,修改所述控制信息使其選定除所選BOOT區(qū)以及認證失敗的BOOT區(qū)外的其他BOOT區(qū);
當(dāng)所選BOOT認證/加載失敗,根據(jù)修改后的控制信息選取BOOT區(qū);
當(dāng)所選BOOT加載成功,恢復(fù)所述控制信息選定當(dāng)前BOOT區(qū)。
優(yōu)選地,所述BOOT引導(dǎo)區(qū)對所選BOOT區(qū)進行認證時,
從所述該級BOOT的存儲信息獲取安全信息;
根據(jù)所述安全信息對所選BOOT進行認證。
優(yōu)選地,根據(jù)所述安全信息對所選BOOT進行認證,包括:
對所選的BOOT區(qū)的版本進行哈希運算,獲取哈希值;
從所述BOOT引導(dǎo)區(qū)的存儲信息中獲取BOOT區(qū)的認證公鑰;
根據(jù)所述認證公鑰對所選BOOT區(qū)的版本簽名進行解密,獲取解密值;
判斷所述哈希值與所述解密值是否一致,當(dāng)所述哈希值和解密值一致時, 認證通過;否則,認證失敗。
依據(jù)本發(fā)明的另一個方面,提供了一種系統(tǒng)安全啟動裝置,包括:
存儲模塊:包括至少兩級BOOT,第一級BOOT存儲BOOT引導(dǎo)區(qū)信息,其他級BOOT中每級BOOT均存儲至少兩個BOOT區(qū)的信息;
獲取模塊:用于所述BOOT引導(dǎo)區(qū)從第i級BOOT存儲信息中獲取該級的控制信息,并根據(jù)所述控制信息從該級BOOT中選取一待認證BOOT區(qū);
認證模塊:用于所述BOOT引導(dǎo)區(qū)對所選BOOT區(qū)進行認證,若認證成功,則引導(dǎo)中央控制器對所選的BOOT區(qū)加載運行;若認證失敗,則在該級BOOT的其他BOOT區(qū)中選取一待認證BOOT區(qū),重復(fù)該步驟,直到認證成功,加載選取的BOOT區(qū),并在加載成功后,令i=i+1,i最小取2,并由所述獲取模塊繼續(xù)處理。
優(yōu)選地,所述裝置還包括引導(dǎo)區(qū)加載模塊:
用于所述中央控制器對所述BOOT引導(dǎo)區(qū)進行認證后加載。
優(yōu)選地,所述裝置還包括控制模塊:
用于所述BOOT引導(dǎo)區(qū)選取一待認證BOOT區(qū)后,修改所述控制信息使其選定除所選BOOT區(qū)以及認證失敗的BOOT區(qū)外的其他BOOT區(qū);
當(dāng)所選BOOT認證/加載失敗,根據(jù)修改后的控制信息選取BOOT區(qū);
當(dāng)所選BOOT加載成功,恢復(fù)所述控制信息選定當(dāng)前BOOT區(qū)。
優(yōu)選地,所述認證模塊包括:
獲取單元,用于從所述存儲模塊中獲取該級BOOT的安全信息;
認證單元,用于所述BOOT引導(dǎo)區(qū)根據(jù)所述安全信息對所選BOOT進行認證。
優(yōu)選地,所述認證單元具體用于,
對所選的BOOT區(qū)的版本進行哈希運算,獲取哈希值;
從所述存儲模塊的BOOT引導(dǎo)區(qū)存儲信息中獲取BOOT區(qū)的認證公鑰;
根據(jù)所述認證公鑰對所選BOOT區(qū)的版本簽名進行解密,獲取解密值;
判斷所述哈希值與所述解密值是否一致,當(dāng)所述哈希值和解密值一致時,認證通過;否則失敗。
本發(fā)明有益效果如下:
本發(fā)明將單芯片上的存儲區(qū)域劃分多級,第一級存儲BOOT引導(dǎo)區(qū)的信息;其他級存儲至少兩個BOOT區(qū)的信息。在加載時,BOOT引導(dǎo)區(qū)從每級BOOT的存儲信息中獲取控制信息;根據(jù)該控制信息可以選取待認證的BOOT區(qū),并對所選的BOOT區(qū)進行認證后加載,若認證失敗,則在該級BOOT的其他BOOT區(qū)中選取一待認證BOOT區(qū)。與現(xiàn)有技術(shù)相比,本發(fā)明在不依賴外部邏輯器件條件下,通過軟件控制方法即可同時實現(xiàn)了多BOOT的安全認證功能,保證了BOOT的可靠性,有效降低因升級BOOT導(dǎo)致系統(tǒng)無法啟動的風(fēng)險。
上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本發(fā)明的具體實施方式。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例的系統(tǒng)安全啟動方法的流程示意圖;
圖2為本發(fā)明實施例的多級BOOT的存儲區(qū)域物理分區(qū)結(jié)構(gòu)示意圖;
圖3為本發(fā)明實施例的雙BOOT的存儲區(qū)域物理分區(qū)結(jié)構(gòu)示意圖;
圖4為本發(fā)明實施例的多級BOOT的系統(tǒng)安全啟動方法的流程圖;
圖5為本發(fā)明實施例的雙BOOT的系統(tǒng)安全啟動方法的流程圖;
圖6為本發(fā)明實施例的雙BOOT區(qū)的切換流程圖;
圖7為本發(fā)明實施例的雙BOOT區(qū)的控制流程圖;
圖8為本發(fā)明實施例的BOOT區(qū)的認證流程圖;
圖9為本發(fā)明實施例的系統(tǒng)安全啟動裝置的結(jié)構(gòu)示意圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
為了解決目前雙BOOT的安全認證以及雙BOOT之間切換過分依賴外部器件實現(xiàn)的問題,本發(fā)明提供了一種系統(tǒng)安全啟動方法,將存儲區(qū)域分為至少兩級BOOT:其中,第一級BOOT存儲BOOT引導(dǎo)區(qū)信息,其他級BOOT中每級BOOT均存儲至少兩個BOOT區(qū)的信息,參見圖1,具體包括步驟:
獲取步驟S101:BOOT引導(dǎo)區(qū)從第i級BOOT的存儲信息中獲取該級的控制信息,并根據(jù)控制信息從該級BOOT中選取一待認證BOOT區(qū);
認證步驟S102:BOOT引導(dǎo)區(qū)對所選BOOT區(qū)進行認證,若認證成功,則引導(dǎo)中央處理器對所選的BOOT區(qū)加載運行;若認證失敗,則在該級BOOT的其他BOOT區(qū)中選取一待認證BOOT區(qū),重復(fù)該步驟,直到認證成功,加載選取的BOOT區(qū),并在加載成功后,令i=i+1,i最小取2,返回獲取步驟。
本發(fā)明將單芯片上的存儲區(qū)域劃分多級,第一級存儲BOOT引導(dǎo)區(qū)的信息;其他級存儲至少兩個BOOT區(qū)的信息。在加載時,BOOT引導(dǎo)區(qū)從每級BOOT的存儲信息中獲取控制信息;根據(jù)該控制信息可以選取待認證的BOOT區(qū),并對所選的BOOT區(qū)進行認證后加載,若認證失敗,則在該級BOOT的其他BOOT區(qū)中選取一待認證BOOT區(qū)。通過本發(fā)明在不依賴外部邏輯器件條件下,通過軟件控制方法即可同時實現(xiàn)了雙BOOT的安全認證功能,保證了BOOT的可靠性。
以下結(jié)合附圖以及實施例,對本發(fā)明進行進一步詳細說明。應(yīng)當(dāng)理解,此 處所描述的具體實施例僅僅用以解釋本發(fā)明,并不限定本發(fā)明。
本發(fā)明將存儲區(qū)域分為至少兩級BOOT:其中,第一級BOOT存儲BOOT引導(dǎo)區(qū)信息,其他級BOOT中每級BOOT均存儲至少兩個BOOT區(qū)的信息。通過在存儲區(qū)域中配置各個BOOT的信息,在實際加載時,通過讀寫操作即可實現(xiàn)BOOT的選定、切換以及認證。
具體地,本發(fā)明中根據(jù)應(yīng)用功能不同,將BOOT劃分成BASEBOOT+各級BOOT架構(gòu)。本發(fā)明中BOOT引導(dǎo)區(qū)(即BASEBOOT)主要完成各級主從BOOT區(qū)的選擇、BOOT區(qū)的認證等最小功能。BASEBOOT功能集要盡量小,一旦研發(fā)調(diào)試完成,基本就不改動,確保外場不升級。其他各級BOOT用于完成相關(guān)驅(qū)動初始化、應(yīng)用程序引導(dǎo)以及和應(yīng)用相關(guān)的參數(shù)傳遞等功能,可能會由于需求變化或者版本的BUG而存在升級的可能性。
本發(fā)明的一個實施例中,在分配存儲區(qū)域時,多級BOOT的FLASH的物理分區(qū),參見圖2。本實施例中在單一存儲器芯片上依次劃分第一級BOOT引導(dǎo)區(qū)、第二級至第N級的主BOOT區(qū)、第二級至第N級的從BOOT區(qū)、BOOT控制區(qū)以及安全信息區(qū)。其中:
第一級BOOT引導(dǎo)區(qū)的功能集盡量簡單穩(wěn)定,將功能變化點放入其他BOOT中,減少第一級BOOT升級的可能性。對其他級BOOT采用主從BOOT區(qū)結(jié)構(gòu),本發(fā)明中主BOOT區(qū)為一個,從BOOT區(qū)至少為一個。BOOT控制區(qū)用于存放各級BOOT的BOOT控制信息。BOOT引導(dǎo)區(qū)根據(jù)控制信息選擇其他級BOOT的主從BOOT區(qū)。安全信息區(qū)存放各級BOOT的安全信息,用于各個BOOT區(qū)的安全認證。
本發(fā)明的一個實施例中,在分配存儲區(qū)域時,雙BOOT的FLASH的物理分區(qū),參見圖3。本實施例中單一存儲器芯片分為第一級BOOT引導(dǎo)區(qū)、第二級主從BOOT區(qū)。其中每級中包含了相應(yīng)的控制信息和安全信息。第一級BOOT、主BOOT區(qū)以及從BOOT區(qū)的字段長度大小相同。
具體地,第一級BOOT引導(dǎo)區(qū)的存儲信息包括BASEBOOT版本、公鑰、 保留字段以及安全信息。其中,公鑰用于BOOT引導(dǎo)區(qū)對后續(xù)BOOT級的安全認證。安全信息根據(jù)CPU的安全BOOT功能要求進行設(shè)置,BASEBOOT的安全認證由CPU的安全BOOT模塊認證。
主BOOT區(qū)的存儲信息包括:主BOOT版本、安全信息以及保存字段;從BOOT區(qū)的存儲信息:從BOOT版本、保留字段、安全信息以及BOOT控制字。其中,除第一級外的其他級的BOOT采用RSA非對稱加解密方法,私鑰由運營商或設(shè)備商進行保存,不可外泄。公鑰作為BOOT引導(dǎo)區(qū)一部分(和BASEBOOT一起打包)。當(dāng)BASEBOOT認證通過,則認為此公鑰合法,用于后續(xù)各級BOOT的解密。版本簽名,是通過私鑰分別對主從BOOT區(qū)版本進行HASH加密計算后,得到的一個簽名。BOOT控制字用于選擇主BOOT還是從BOOT。
本發(fā)明中將BOOT分為多級在同一芯片中進行存儲,因此針對多級BOOT認證加載的工作流程圖,具體參見圖4,中央控制器啟動后,認證并加載第一級BASEBOOT;接著第一級BOOT依序在各級BOOT選取BOOT區(qū),對所選的BOOT區(qū)進行認證并加載,直至第N級BOOT成功運行。若所選BOOT區(qū)認證失敗后,選取本級BOOT的其他BOOT區(qū)進行認證并加載。
下面以兩級BOOT、雙BOOT區(qū)為例對具體的選取及認證過程進行詳細說明說明。上述介紹了芯片中存儲區(qū)域中除第一級BOOT外的其他級都包含BOOT控制信息,用于存放BOOT控制字。BOOT引導(dǎo)區(qū)根據(jù)BOOT控制字來選擇后一級BOOT的主從BOOT區(qū)。在后續(xù)認證加載過程中,BOOT引導(dǎo)區(qū)根據(jù)實際運行情況對BOOT控制字進行修改,用以實現(xiàn)BOOT區(qū)之間的切換功能。本實施例所提供的系統(tǒng)啟動方法,參見圖5,具體包括如下步驟:
步驟501,中央控制器啟動后,對BASEBOOT進行認證,認證通過,則加載運行第一級BOOT,否則復(fù)位或者通過提示燈等方式告知用戶。本實施例中,在系統(tǒng)啟動后,中央控制器需對BOOT引導(dǎo)區(qū)進行認證后加載,保證了BOOT引導(dǎo)區(qū)的安全性。
步驟502,第一級BOOT根據(jù)第二級BOOT的雙BOOT控制字選擇第二級 BOOT的主從BOOT區(qū),并設(shè)置雙BOOT區(qū)控制字。
這里設(shè)置雙BOOT區(qū)控制字選定兩個BOOT區(qū)中的未被選取BOOT區(qū)的。這樣保證當(dāng)前BOOT區(qū)認證或加載失敗后,第一級BOOT能夠從兩個BOOT區(qū)中的另一個BOOT區(qū)選擇第二級BOOT進行認證加載。
步驟503,第一級BOOT根據(jù)安全信息對被選第二級BOOT進行安全認證:若認證通過,則加載第二級BOOT,則設(shè)置雙BOOT控制字選定當(dāng)前所選的BOOT區(qū);認證失敗,則CPU復(fù)位,重復(fù)上述步驟,如果該級BOOT的兩個BOOT區(qū)都認證失敗或者不可正常運行,則會導(dǎo)致CPU不斷復(fù)位,無法正常運行,因此本實施例采用指示燈來告警。
基于上述可知,本實施例通過兩次設(shè)置雙BOOT控制字,即可實現(xiàn)了雙BOOT之間的切換。對于BOOT控制字的設(shè)置方式,具體參見圖6和圖7,通過控制字0、1實現(xiàn)主從BOOT的切換。控制字為1選取主BOOT區(qū)的,控制字為0則選取從BOOT。BOOT引導(dǎo)區(qū)選擇完BOOT區(qū)后,即刻對雙BOOT控制字進行取反。如果被選BOOT認證成功且加載成功,則將BOOT控制字再次取反。如果認證失敗或加載失敗,看門狗溢出復(fù)位,啟動CPU。需要說明的是,雙BOOT切換也可以通過下述的方式實現(xiàn):在選取BOOT區(qū)后,不需要設(shè)置控制字。而當(dāng)認證失敗或者運行異常后,則設(shè)置雙BOOT控制字取反;認證通過后,保持控制字不變即可。
本發(fā)明根據(jù)當(dāng)前運行BOOT的運行情況,設(shè)置BOOT控制字:當(dāng)前BOOT如果認證/加載失敗,則能使得CPU復(fù)位后選擇另一個BOOT區(qū),達到BOOT區(qū)之間的切換功能。通過采用不斷更改BOOT控制字的形式切換BOOT區(qū),可以有效保證BOOT的可靠性,有效降低升級BOOT導(dǎo)致系統(tǒng)無法啟動的風(fēng)險。
BOOT引導(dǎo)區(qū)選定BOOT區(qū)后,從該級BOOT的存儲信息中獲取安全信息,并根據(jù)安全信息對被選BOOT進行安全認證,參見圖8,具體包括如下步驟:
對所選BOOT版本進行HASH運算,得到一個HASH值VAL1;
獲取的BASEBOOT存儲信息中的公鑰,并根據(jù)公鑰對所選BOOT版本簽 名解密,得到VAL2;
將VAL1和VAL2進行比較:如果相等,則被選BOOT認證通過,否則將CPU復(fù)位,下次啟動時從兩個BOOT區(qū)中選擇另一個BOOT進行認證。
對于HASH算法可以自行選擇,這里不做限定,但需要保證BOOT版本簽名采用的HASH算法和認證使用的HASH算法一致即可。第二級BOOT認證后,就可以正常加載運行。
本發(fā)明還提供了一種系統(tǒng)安全啟動裝置,如圖9所示,具體包括:
存儲模塊:包括至少兩級BOOT,第一級BOOT存儲BOOT引導(dǎo)區(qū)信息,其他級BOOT中每級BOOT均存儲至少兩個BOOT區(qū)的信息;
獲取模塊:用于BOOT引導(dǎo)區(qū)從第i級BOOT存儲信息中獲取該級的控制信息,并根據(jù)控制信息從該級BOOT中選取一待認證BOOT區(qū);
認證模塊:用于BOOT引導(dǎo)區(qū)對所選BOOT區(qū)進行認證,若認證成功,則引導(dǎo)中央控制器對所選的BOOT區(qū)加載運行;若認證失敗,則在該級BOOT的其他BOOT區(qū)中選取一待認證BOOT區(qū),重復(fù)該步驟,直到認證成功,加載選取的BOOT區(qū),并在加載成功后,令i=i+1,i最小取2,并由獲取模塊繼續(xù)處理。
進一步地,該裝置還包括引導(dǎo)區(qū)加載模塊:
用于中央處理器中央控制器對BOOT引導(dǎo)區(qū)進行認證后加載。
進一步地,該裝置還包括控制模塊:
用于BOOT引導(dǎo)區(qū)選取一待認證BOOT區(qū)后,修改控制信息使其選定除所選BOOT區(qū)以及認證失敗的BOOT區(qū)外的其他BOOT區(qū);
當(dāng)所選BOOT認證/加載失敗,根據(jù)修改后的控制信息選取BOOT區(qū);
當(dāng)所選BOOT加載成功,恢復(fù)控制信息選定當(dāng)前BOOT區(qū)。
進一步地,認證模塊包括:
獲取單元,用于從存儲模塊中獲取該級BOOT的安全信息;
認證單元,用于BOOT引導(dǎo)區(qū)根據(jù)安全信息對所選BOOT進行認證。
進一步地,認證單元具體用于,
對所選的BOOT區(qū)的版本進行哈希運算,獲取哈希值;
從存儲模塊的BOOT引導(dǎo)區(qū)存儲信息中獲取BOOT區(qū)的認證公鑰;
根據(jù)認證公鑰對所選BOOT區(qū)的版本簽名進行解密,獲取解密值;
判斷哈希值與解密值是否一致,當(dāng)哈希值和解密值一致時,認證通過;否則失敗。
綜上所述,本發(fā)明所提供的系統(tǒng)安全啟動方法,根據(jù)下一級BOOT的控制字選擇主從BOOT區(qū),并根據(jù)安全信息對被選BOOT區(qū)進行安全認證:當(dāng)認證通過,則加載所選BOOT;認證失敗,則設(shè)置雙BOOT控制字,同時復(fù)位;復(fù)位后,從本級其他BOOT區(qū)中的選擇一BOOT進行認證加載:如果運行過程異常,則設(shè)置雙BOOT控制字,同時復(fù)位,使得復(fù)位后,本級其他BOOT區(qū)選擇一BOOT區(qū)進行認證加載。依此類推,直到第N級BOOT加載運行。因此,與現(xiàn)有技術(shù)相比本發(fā)明在能夠不依賴外部器件的條件下,通過軟件手段同時實現(xiàn)安全BOOT和雙BOOT,既可以保證系統(tǒng)安全、可靠啟動,又可以降低系統(tǒng)設(shè)備成本和功耗。
本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例方法中的全部或部分流程,是可以通過計算機程序來指令相關(guān)的硬件來完成,程序可存儲于計算機可讀取存儲介質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法的實施例的流程。
雖然通過實施例描述了本申請,本領(lǐng)域的技術(shù)人員知道,本申請有許多變形和變化而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。