◆張大松 姜洪朝 劉智國(guó)
基于SHA-256的可信啟動(dòng)完整性校驗(yàn)程序設(shè)計(jì)與驗(yàn)證
◆張大松 姜洪朝 劉智國(guó)
(中國(guó)電子信息產(chǎn)業(yè)集團(tuán)有限公司第六研究所 北京 100083)
本文針對(duì)工業(yè)控制領(lǐng)域中控制器安全運(yùn)行的問題,進(jìn)行了控制器內(nèi)置程序安全啟動(dòng)方面的研究,提出了采用SHA-256安全哈希算法對(duì)控制器內(nèi)置程序進(jìn)行校驗(yàn)的程序完整性檢查方法。本文提出了控制器程序的安全可信啟動(dòng)系統(tǒng)架構(gòu),給出了基于SHA-256哈希算法的校驗(yàn)處理流程,并在控制器上進(jìn)行了實(shí)際的效果測(cè)試和驗(yàn)證。驗(yàn)證試驗(yàn)表明,本文提出的可信啟動(dòng)方法能夠有效檢測(cè)出控制器程序內(nèi)容的篡改破壞情況,具有極高的靈敏度,能夠保證控制器程序的可信安全啟動(dòng)。
工控安全;安全哈希算法;安全防護(hù);可信啟動(dòng);完整性校驗(yàn)
在工業(yè)控制領(lǐng)域,保證控制器內(nèi)置程序的完整性是一項(xiàng)重要的任務(wù)。控制器程序容易在人為、病毒或意外干擾的情況下被修改,從而產(chǎn)生意料之外的運(yùn)行結(jié)果。通常,控制器都是一個(gè)系統(tǒng)的核心部件,任何意外運(yùn)行結(jié)果都會(huì)對(duì)系統(tǒng)產(chǎn)生巨大的影響,甚至毀滅性的破壞。在現(xiàn)實(shí)中,隨著智能化的控制器普及應(yīng)用,這種意外事件屢見不鮮,比如著名的伊朗核電站離心機(jī)PLC事件[1]。因此,保證控制器的安全運(yùn)行是一項(xiàng)需要深入研究的問題。
哈希算法是密碼學(xué)中重要的分支之一,主要用于數(shù)據(jù)的完整性校驗(yàn)、基于口令的身份認(rèn)證、數(shù)字簽名等領(lǐng)域[2]。采用哈希算法能夠從信息數(shù)據(jù)中提取代表數(shù)據(jù)特征的特征數(shù)值,即哈希值,這是一個(gè)不可逆的數(shù)學(xué)映射過程,因此具有安全屬性[3]。著名的哈希算法有MD系列和SHA系列。MD-5和SHA-1已經(jīng)被破解,目前應(yīng)用最為廣泛的是SHA-2系列算法。采用哈希算法,通過設(shè)計(jì)合適的算法處理過程并應(yīng)用于控制器的程序設(shè)計(jì),能夠?qū)崿F(xiàn)對(duì)控制器程序內(nèi)容的完整性校驗(yàn),從而達(dá)到安全可信啟動(dòng)和運(yùn)行的目的[4]。SHA-256是SHA-2系列算法中的一種,技術(shù)成熟可靠,具有大量的實(shí)際應(yīng)用,其運(yùn)算速度和安全級(jí)別比較適合工業(yè)控制器的處理能力。
本文采用SHA-256哈希算法設(shè)計(jì)校驗(yàn)程序,使得控制器能夠在啟動(dòng)時(shí)進(jìn)行內(nèi)容完整性校驗(yàn),進(jìn)而保證控制器的安全可信啟動(dòng)及運(yùn)行。目前,大部分工業(yè)控制器沒有程序完整性校驗(yàn)機(jī)制,存在極大的安全隱患。本文提出的校驗(yàn)方法,代碼簡(jiǎn)短、校驗(yàn)精度高、運(yùn)算速度快,與工業(yè)控制器的處理能力和程序存儲(chǔ)容量相契合。
采用密碼算法是實(shí)現(xiàn)信息安全的有效途徑之一,國(guó)際通用密碼算法在安全領(lǐng)域廣泛使用,如RSA、ECC、MD5、SHA-1、SHA-2、DES、3DES、AES等[5]。這些密碼算法經(jīng)過合理設(shè)計(jì),能夠用于實(shí)現(xiàn)數(shù)字簽名、數(shù)據(jù)加密傳輸、密鑰協(xié)商、身份識(shí)別認(rèn)證等安全功能[6]。
目前,國(guó)際主流標(biāo)準(zhǔn)密碼算法主要分為三類:對(duì)稱加密算法、非對(duì)稱加密算法、哈希算法[7]。
(1)對(duì)稱加密算法:其主要特點(diǎn)是加密和解密使用同一個(gè)密鑰,常用對(duì)稱加密算法有DES、3DES、AES。DES由IBM公司研制,并于1997年被美國(guó)政府推廣使用,廣泛應(yīng)用于數(shù)據(jù)安全的各個(gè)方面。3DES是基于DES進(jìn)行改進(jìn)的一種加密算法,主要特點(diǎn)是使用3個(gè)64位密鑰對(duì)原始數(shù)據(jù)進(jìn)行3次加密。由于DES存在安全隱患,美國(guó)國(guó)家標(biāo)準(zhǔn)技術(shù)研究所(NIST)研制出AES加密算法取代DES,成為適應(yīng)數(shù)據(jù)安全發(fā)展的加密標(biāo)準(zhǔn)。目前應(yīng)用廣泛的3DES-2、3DES-3已經(jīng)逐步升級(jí)為AES,密鑰長(zhǎng)度由128位逐步增加到192位和256位。
(2)非對(duì)稱加密算法:該加密算法的密鑰分為公鑰和私鑰,公鑰可以公開,私鑰不可以公開。常用非對(duì)稱加密算法包括:基于大數(shù)分解的RSA算法和基于橢圓曲線離散對(duì)數(shù)的ECC算法。RSA加密算法由Ron Rivest、Adi Shamir和Leonard Adleman三人于1977年提出,加密原理以數(shù)論為基礎(chǔ)。ECC加密算法由Koblitz和Miller兩人于1985年提出,其基本原理是先用橢圓曲線上的有理點(diǎn)構(gòu)造Abel加法群上橢圓離散對(duì)數(shù),然后利用其中的計(jì)算困難性實(shí)現(xiàn)加密。在加解密應(yīng)用上,ECC算法相比RSA算法在多個(gè)方面優(yōu)勢(shì)明顯,包括加解密速度、占用存儲(chǔ)空間、帶寬等方面??紤]到密碼更新?lián)Q代速度,實(shí)際使用中在短時(shí)間內(nèi)兩種算法會(huì)同時(shí)存在。兩者的密鑰長(zhǎng)度隨應(yīng)用場(chǎng)合的安全要求提高而逐步增加。
3)Hash算法:Hash算法是一種單向算法,主要功能是通過數(shù)學(xué)運(yùn)算從原始數(shù)據(jù)提取出指定長(zhǎng)度的一段惟一Hash值[8]。常用Hash算法有MD4、MD5、SHA-1、SHA-2、SHA-3。Rivest先于1989年提出MD2算法,之后不斷改進(jìn)加強(qiáng)算法的安全性,于1990年、1991年分別提出MD4、MD5算法[9]。MD5算法的主要改進(jìn)是在MD4的基礎(chǔ)上增加了safety belts機(jī)制。MD5曾經(jīng)廣泛使用于計(jì)算機(jī)安全領(lǐng)域,用以提供數(shù)據(jù)的完整性保護(hù),但是之后被中國(guó)學(xué)者王小云破解[10]。SHA(Secure Hash Algorithm,安全散列算法)是由美國(guó)國(guó)家安全局(NSA)提出、美國(guó)NIST發(fā)布的密碼散列函數(shù)系列,目前應(yīng)用廣泛[11]。目前,MD5、SHA-1因?yàn)榇嬖诎踩L(fēng)險(xiǎn)使用逐漸減少,主流應(yīng)用逐漸向SHA-2、SHA-3過渡,Hash值長(zhǎng)度逐步增加。
本文主要以SHA-2系列算法中的SHA-256算法為核心設(shè)計(jì)控制器程序完整性校驗(yàn)程序。
一般控制器都采用傳統(tǒng)啟動(dòng)方法,即上電后由控制器內(nèi)置bootloader直接跳轉(zhuǎn)到控制器程序,然后執(zhí)行控制任務(wù)。采用完整性校驗(yàn)的控制器可信啟動(dòng)流程則是,先由bootloader跳轉(zhuǎn)到校驗(yàn)程序,然后校驗(yàn)程序?qū)刂破鞒绦蜻M(jìn)行掃描并生成一個(gè)校驗(yàn)值,然后將校驗(yàn)值與事先存儲(chǔ)的校驗(yàn)結(jié)果進(jìn)行對(duì)比。如果一致,則由校驗(yàn)程序跳轉(zhuǎn)到控制器程序;否則,校驗(yàn)程序輸出警告信息并報(bào)錯(cuò),拒絕執(zhí)行下一步的控制器程序。
圖1 可信與傳統(tǒng)系統(tǒng)啟動(dòng)步驟對(duì)比
SHA-2系列哈希算法共有4種,分別是SHA-224、SHA-256、SHA-384和SHA-512。4種SHA-2算法處理過程基本一樣,都是分為2個(gè)步驟:預(yù)處理和哈希計(jì)算。預(yù)處理階段依次包括消息填充、消息分隔以及哈希初始值設(shè)置。哈希計(jì)算階段使用哈希函數(shù)結(jié)合待處理的數(shù)據(jù)塊和相關(guān)常數(shù),進(jìn)行多次迭代產(chǎn)生系列哈希值,直到所有數(shù)據(jù)塊處理完畢。
SHA-2算法處理過程的迭代結(jié)構(gòu)如圖2所示。
基于SHA-256算法,在校驗(yàn)程序中對(duì)控制器程序進(jìn)行掃描和校驗(yàn),進(jìn)而判斷控制器程序的完整性以及是否滿足可信啟動(dòng)的條件。
具體過程為:首先將控制器程序按照SHA-256算法處理的要求切割為n個(gè)數(shù)據(jù)塊,然后由壓縮函數(shù)結(jié)合前一步的哈希值生成當(dāng)前步哈希值,依次循環(huán)處理,直到處理完最后一個(gè)數(shù)據(jù)塊Bn和產(chǎn)生最后一個(gè)哈希值Hn。Hn即為控制器程序的哈希值。哈希值H0為已知默認(rèn)初始值。
如果哈希值Hn與事先存儲(chǔ)的校驗(yàn)結(jié)果一致,則認(rèn)為控制器程序內(nèi)容沒有發(fā)生任何篡改,可以進(jìn)一步執(zhí)行啟動(dòng)控制器程序的工作,否則拒絕啟動(dòng)控制器程序,并輸出報(bào)錯(cuò)信息。
圖2 SHA-256算法處理流程
為了驗(yàn)證本文提出的程序可信啟動(dòng)完整性校驗(yàn)程序設(shè)計(jì)功能的有效性,進(jìn)行了2次驗(yàn)證試驗(yàn)。第1次模擬控制器程序內(nèi)容未被修改的情況下,控制器正常啟動(dòng)。第2次模擬控制器程序內(nèi)容被修改的情況下,控制器拒絕啟動(dòng),校驗(yàn)程序能夠檢測(cè)到控制器程序已被修改,并輸出警告信息和報(bào)錯(cuò)信息。
本文采用串口作為與控制器通信的接口,通過串口調(diào)用控制器內(nèi)置程序及函數(shù),結(jié)果均反饋輸出到串口調(diào)試軟件界面。
本次試驗(yàn)?zāi)M控制器啟動(dòng)校驗(yàn)成功的情況。啟動(dòng)前,控制器程序完整,沒有經(jīng)過任何內(nèi)容修改??刂破魍耆凑照2襟E啟動(dòng),經(jīng)過3步之后,程序啟動(dòng)完畢,控制器系統(tǒng)進(jìn)入正常運(yùn)行狀態(tài)。在Step 2進(jìn)行了程序校驗(yàn),輸出了校驗(yàn)結(jié)果。由圖3可見,校驗(yàn)結(jié)果與事先存儲(chǔ)的校驗(yàn)哈希值完全相同,說明控制器程序沒有被破壞,因此控制器能夠成功啟動(dòng)。
圖3 控制器程序啟動(dòng)校驗(yàn)成功試驗(yàn)
本次試驗(yàn)?zāi)M控制器啟動(dòng)校驗(yàn)失敗的情況。試驗(yàn)前,先人為修改控制器內(nèi)置程序,具體通過事先準(zhǔn)備的控制器程序修改接口命令來進(jìn)行內(nèi)置程序的修改。操作過程如下:
首先,選擇控制器的存儲(chǔ)器地址0x8030000,通過Show命令顯示內(nèi)容為0xca。
然后,修改控制器的存儲(chǔ)器地址0x8030000的內(nèi)容,通過Change命令修改為0xcb。
之后,重新啟動(dòng)控制器,啟動(dòng)過程進(jìn)行到Step 2時(shí)進(jìn)行了校驗(yàn)。由圖4可見,校驗(yàn)結(jié)果與事先存儲(chǔ)的校驗(yàn)哈希值不同,說明控制器程序已經(jīng)遭到破壞,因此控制器拒絕執(zhí)行后續(xù)啟動(dòng)流程并報(bào)錯(cuò)。
采用SHA-256算法具有極高的校驗(yàn)精度。在啟動(dòng)校驗(yàn)失敗試驗(yàn)中,控制器程序中僅僅一個(gè)字節(jié)中的一位發(fā)生了改變,SHA-256算法產(chǎn)生的哈希值就會(huì)產(chǎn)生顯著變化,然后產(chǎn)生報(bào)錯(cuò)信息,因此在實(shí)際應(yīng)用中能夠檢測(cè)到控制器程序最少一位的篡改事件,具有極高的精度及可靠性。
在實(shí)際應(yīng)用中,可能需要進(jìn)一步定位程序篡改發(fā)生的位置。
此時(shí)需要事先存儲(chǔ)控制器程序的系列哈希值,即圖2中的H1到Hn。然后在控制器啟動(dòng)時(shí),逐一比較校驗(yàn)程序產(chǎn)生的哈希值。如果第i個(gè)哈希值Hi與事先存儲(chǔ)的哈希值不一致,則可以斷定控制器程序的第i個(gè)數(shù)據(jù)塊Bi發(fā)生了篡改,由此可以定位控制器程序具體發(fā)生篡改的數(shù)據(jù)塊。
利用這一特性可以進(jìn)一步實(shí)現(xiàn)控制器程序的局部修復(fù)。
圖4 控制器程序啟動(dòng)校驗(yàn)失敗試驗(yàn)
本文通過采用安全哈希算法構(gòu)建控制器內(nèi)置程序的安全可信啟動(dòng)架構(gòu)和校驗(yàn)流程,可以實(shí)現(xiàn)對(duì)內(nèi)置程序的完整性檢測(cè),提高控制器內(nèi)置程序的安全防護(hù)能力,保證了控制器的安全啟動(dòng)及運(yùn)行,實(shí)際測(cè)試驗(yàn)證了所提方法的可行性及有效性,具有極高的校驗(yàn)精度,能夠定位控制器程序損壞發(fā)生的數(shù)據(jù)塊。
[1]朱明露.功能安全標(biāo)準(zhǔn)在電廠安全系統(tǒng)中的應(yīng)用研究[J].中國(guó)儀器儀表,2015(9):29-31.
[2]范明鈕,王光衛(wèi).密碼學(xué)理論與技術(shù)[M].清華大學(xué)出版社,2008.
[3]王張宜,李波,張煥國(guó).Hash函數(shù)的安全性研究[J].計(jì)算機(jī)工程與應(yīng)用,2005,41(12):18-19.
[4]魏欽志.工業(yè)控制系統(tǒng)安全現(xiàn)狀及安全策略分析[J].信息安全與技術(shù),2013(2):23-26
[5]李樹國(guó),周潤(rùn)德,馮建華.RSA密碼協(xié)處理器的實(shí)現(xiàn)[J].電子學(xué)報(bào),2001,29(11):1441-1444.
[6]崔艷娜,張紅金,李繼安.工業(yè)控制系統(tǒng)漏洞的統(tǒng)計(jì)及其分析研究[J].電子產(chǎn)品可靠性與環(huán)境試驗(yàn),2018(6):41-46
[7]王締酈,白國(guó)強(qiáng),陳弘毅.一種Montgomery模乘算法硬件結(jié)構(gòu)[J].微電子學(xué)與計(jì)算機(jī),2010(5):1-4.
[8]申延召.SM3密碼雜湊算法分析[D].上海:東華大學(xué),2013.
[9]劉宗斌,馬原,荊繼武.SM3哈希算法的硬件實(shí)現(xiàn)與研究[C].第26次全國(guó)計(jì)算機(jī)安全學(xué)術(shù)交流會(huì).福建,中國(guó).2011:191-193.
[10]王曉燕,楊先文.基于FPGA的SM3算法優(yōu)化設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2012,38(6):244-246.
[11]董馨.可配置SHA-2系列算法和SHA-3(BLAKE-32)算法的硬件實(shí)現(xiàn)[D].武漢:華中科技大學(xué),2012.
北京市科技計(jì)劃項(xiàng)目(No.Z181100005118005,No.Z191100004619003);廣東省電力系統(tǒng)網(wǎng)絡(luò)安全企業(yè)重點(diǎn)實(shí)驗(yàn)室(Guangdong Provincial Key Laboratory of Power System Network Security)