不管是玩單片機(jī)還是嵌入式linux,基本上都會(huì)接觸到bootloader,所以bootloader程序也是一個(gè)關(guān)鍵的組件,進(jìn)行硬件初始化,應(yīng)用程序的合法性、完成性檢測(cè)、升級(jí)功能等等都與其息息相關(guān)。
像一些在ram運(yùn)行的應(yīng)用程序,或者是一些運(yùn)行內(nèi)存比較小的MCU等等,它需要保證從外部存儲(chǔ)器中讀取的應(yīng)用程序是可信的,不能拿過(guò)來(lái)就執(zhí)行,那往往是不安全的,特別是為了防止惡意程序的注入和攻擊,在Bootloader程序中實(shí)現(xiàn)一定的安全機(jī)制就非常有必要了~
那么今天就大致聊聊,一些常用的Bootloader安全機(jī)制的設(shè)計(jì):
1
進(jìn)行image校驗(yàn)
image校驗(yàn)我們也常叫鏡像校驗(yàn),Bootloader程序可以對(duì)從外部存儲(chǔ)器中讀取的應(yīng)用程序鏡像進(jìn)行校驗(yàn),以確保其完整性和正確性,常見(jiàn)的鏡像校驗(yàn)方式包括CRC、哈希值等。
當(dāng)然你如果想簡(jiǎn)單一點(diǎn)使用求和檢驗(yàn)也是可行的,將應(yīng)用程序鏡像中每個(gè)字節(jié)的值相加,得到一個(gè)校驗(yàn)和。
Bootloader程序?qū)⒂?jì)算得到的校驗(yàn)和與預(yù)先存儲(chǔ)在應(yīng)用程序鏡像中的校驗(yàn)和進(jìn)行比較,如果兩者相等,說(shuō)明應(yīng)用程序鏡像沒(méi)有被篡改,校驗(yàn)和的優(yōu)點(diǎn)是計(jì)算簡(jiǎn)單,缺點(diǎn)當(dāng)然就是校驗(yàn)?zāi)芰τ邢蓿资芄簟?br />
而相比求和校驗(yàn),CRC等是一種更加可靠和安全的校驗(yàn)方式,它可以檢測(cè)出更多的錯(cuò)誤,并且不易受攻擊。
在STM32中,CRC校驗(yàn)可以使用硬件或軟件實(shí)現(xiàn)。
硬件CRC校驗(yàn)可以使用STM32的CRC模塊,直接對(duì)應(yīng)用程序鏡像進(jìn)行校驗(yàn),速度快、精度高。軟件CRC校驗(yàn)則需要Bootloader程序自行實(shí)現(xiàn)CRC算法,速度較慢,但也可以得到較好的校驗(yàn)效果。
如果校驗(yàn)通過(guò),則可以加載應(yīng)用程序鏡像;如果校驗(yàn)失敗,則應(yīng)該拒絕加載應(yīng)用程序鏡像,并給出相應(yīng)的提示。
鏡像校驗(yàn)是可以保證從外部存儲(chǔ)器中讀取的應(yīng)用程序是可信的,避免惡意程序的注入和攻擊。如果鏡像校驗(yàn)失敗,Bootloader程序可以拒絕加載應(yīng)用程序鏡像,避免惡意程序的注入。
2
簽名認(rèn)證
簽名認(rèn)證并不是一個(gè)加密和解密的過(guò)程,它是一種數(shù)字簽名技術(shù)。 數(shù)字簽名是一種用于確保電子文檔的完整性和認(rèn)證性的技術(shù),它使用密鑰對(duì)(公鑰和私鑰)來(lái)生成和驗(yàn)證簽名。
數(shù)字簽名的過(guò)程如下:
1、生成簽名:文檔的發(fā)送者使用私鑰對(duì)文檔進(jìn)行哈希運(yùn)算,然后使用私鑰對(duì)哈希值進(jìn)行加密,生成簽名。
2、驗(yàn)證簽名:文檔的接收者使用公鑰對(duì)簽名進(jìn)行解密,得到哈希值,然后對(duì)文檔進(jìn)行哈希運(yùn)算,得到另一個(gè)哈希值。接收者比較這兩個(gè)哈希值,如果相等,則說(shuō)明文檔沒(méi)有被篡改,并且簽名是可信的。
需要注意的是,數(shù)字簽名技術(shù)依賴于密鑰對(duì)的安全性,私鑰需要妥善保管,防止泄露和丟失,公鑰需要預(yù)置在Bootloader程序中,確保其可信和安全。
簽名認(rèn)證需要使用一組密鑰對(duì),包括私鑰和公鑰。
開(kāi)發(fā)者使用私鑰對(duì)應(yīng)用程序進(jìn)行簽名,Bootloader程序使用公鑰進(jìn)行認(rèn)證。如果簽名認(rèn)證失敗,Bootloader程序可以拒絕加載應(yīng)用程序鏡像。
3
內(nèi)存保護(hù)
在STM32的Bootloader中,內(nèi)存保護(hù)是一種重要的安全機(jī)制,可以保護(hù)Bootloader程序和其他重要的代碼和數(shù)據(jù)不被應(yīng)用程序覆蓋、修改或篡改。
內(nèi)存保護(hù)通常使用硬件或軟件實(shí)現(xiàn)。在STM32中,硬件內(nèi)存保護(hù)可以使用CPU的內(nèi)存保護(hù)單元(MPU)實(shí)現(xiàn),軟件內(nèi)存保護(hù)可以使用內(nèi)存管理單元(MMU)或軟件實(shí)現(xiàn)的保護(hù)機(jī)制,具體使用哪種需要看資源情況。
硬件內(nèi)存保護(hù)
可以將MCU的內(nèi)存空間劃分為若干個(gè)區(qū)域,并為每個(gè)區(qū)域配置不同的訪問(wèn)權(quán)限。Bootloader程序可以將應(yīng)用程序加載到特定的區(qū)域中,防止應(yīng)用程序覆蓋或修改Bootloader程序和其他重要的代碼和數(shù)據(jù)。硬件內(nèi)存保護(hù)的優(yōu)點(diǎn)是速度快、可靠性高,缺點(diǎn)是配置復(fù)雜,需要占用一定的硬件資源。
軟件內(nèi)存保護(hù)
可以使用MMU或軟件實(shí)現(xiàn)的保護(hù)機(jī)制,但一般有MMU單元的都屬于微處理器了,而微控制器。MMU是一種硬件單元,用于將虛擬地址映射到物理地址,并可以配置不同的訪問(wèn)權(quán)限。
軟件實(shí)現(xiàn)的保護(hù)機(jī)制可以在Bootloader程序中實(shí)現(xiàn)一些保護(hù)代碼,用于檢測(cè)和防止應(yīng)用程序的篡改和攻擊。軟件內(nèi)存保護(hù)的優(yōu)點(diǎn)是靈活性高,缺點(diǎn)是速度較慢,可靠性較低。
內(nèi)存保護(hù)可以保護(hù)Bootloader程序和其他重要的代碼和數(shù)據(jù)不被應(yīng)用程序覆蓋、修改或篡改。在實(shí)現(xiàn)內(nèi)存保護(hù)時(shí),需要注意區(qū)域劃分、加載位置、訪問(wèn)權(quán)限、保護(hù)代碼等方面的問(wèn)題。
4
使用只讀存儲(chǔ)器
只讀存儲(chǔ)器(ROM)通常是一種非易失性存儲(chǔ)器,具有讀取快、安全可靠、不易受攻擊等優(yōu)點(diǎn)。
將Bootloader程序放在只讀存儲(chǔ)器中,可以保證Bootloader程序的完整性和安全性,防止惡意程序的注入和攻擊。只讀存儲(chǔ)器也可以是MCU的Flash、ROM等。
5
最后
值得注意的是,Bootloader程序的安全機(jī)制應(yīng)該根據(jù)實(shí)際的應(yīng)用場(chǎng)景和需求進(jìn)行設(shè)計(jì)和實(shí)現(xiàn)。
安全機(jī)制的增加會(huì)增加系統(tǒng)的復(fù)雜性和開(kāi)發(fā)成本,因此應(yīng)該在安全性和可用性之間進(jìn)行權(quán)衡。
審核編輯:劉清
-
單片機(jī)
+關(guān)注
關(guān)注
6037文章
44562瀏覽量
635918 -
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7496瀏覽量
163924 -
嵌入式系統(tǒng)
+關(guān)注
關(guān)注
41文章
3593瀏覽量
129527 -
CRC校驗(yàn)
+關(guān)注
關(guān)注
0文章
84瀏覽量
15212 -
MCU控制
+關(guān)注
關(guān)注
0文章
48瀏覽量
6740
原文標(biāo)題:四種Bootloader程序安全機(jī)制設(shè)計(jì)
文章出處:【微信號(hào):最后一個(gè)bug,微信公眾號(hào):最后一個(gè)bug】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論