隨著電子產品更新換代速度的加快,往往都會進行系統升級或APP功能維護升級,但是由此產生了兩個主要問題。首先,由于更新過程中出現錯誤,該設備可能變得無用;另外一個主要問題是:如何避免未經授權的用戶訪問目標產品的固件?
在嵌入式領域,根據嵌入式系統的MCU存儲結構和更新原理,提出了通過加密方式升級設備功能的方法,其中最常用的方法為BootLoader加密升級。
Bootloader 是在操作系統或用戶應用程序運行之前執行的一小段程序,通過這一小段程序,我們可以初始化硬件設備(如 CPU、SDRAM、Flash、串口等)、建立內存空間的映射表,從而將系統的軟硬件環境帶到一個合適的狀態,為最終調用操作系統內核或者用戶應用程序準備好正確的環境。
如何使用BootLoader加密升級可以防止競爭對手/惡意用戶獲得對固件代碼的訪問權限?
首先是使用代碼加密來保護固件。這里需要實現對稱密碼,以及私鑰的引導加載程序中的生成和包含。在制造商方面,需要保護相同的私鑰,用于加密新固件版本。如圖1所示,一般對稱加密算法流程。
圖1對稱加密算法流程
對于常見的AES-128加密算法,由于AES處理的單位是字節,128位的輸入明文或固件P和輸入的密鑰K都被分為16個字節,一般我們會將明文分組用字節為單位的正方形狀態矩陣來描述,在每一輪的算法中,狀態矩陣的內容不斷發生變化,最終的結果作為密文輸出。如圖2所示,AES-128分塊加密。
圖2 AES-128加密過程
AES算法是基于置換和代替的,置換是數據的重新排列,而代替是用一個單元數據替換另一個。AES算法使用了多重循環實現置換和代替,在規范中被稱為Bytes Sub(字節替換)-對數據的每個字節應用非線性變換;Shift Rows(行位移變換)-對每一行字節循環重新排序;Mix Columns(列混合變換)-對矩陣的列應用線性變換;Add Round Key(輪密鑰加)-對狀態和每輪的子密鑰進行異或操作。該算法對內存的需求非常低,使得它很適應于資源受限制的環境。
AES(AES-128)加解密的流程,如圖3所示。
圖3AES-128加解密流程
對于實際AES(AES-128)加密過程中,在第一輪的迭代之前,會將明文和原始密鑰進行異或加密運算,然后正常執行從第一輪到第九輪一樣的加密函數,其中都會包含四個操作:字節代換、行位移、列混合和輪密鑰加;在最后一輪迭代不執行列混合運算。
解密的過程仍然為10輪,每一輪的操作都是加密操作的你操作。由于AES一輪的4個操作都是可逆的,因此解密操作的一輪就是執行逆行一位、逆字節代換、輪密鑰加和逆列混合;同加密操作類似,最后一輪不執行逆列混合,在第一輪解密之前,執行一次密鑰加操作。
如圖4所示,為Boot Loader固件升級流程圖。
圖4Boot Loader固件升級流程
用戶程序升級成功之后,可以通過函數指針的方式調用該程序。函數在編譯時都會被分配一個入口地址,該地址就是函數的指針。只要用一個指針變量指向這個函數的入口地址,就可以通過指針變量調用這個函數。函數指針的本質是指針變量,只不過該指針變量指向函數,讀出程序標志區的運行地址就可以通過指針變量調用新寫入的程序。
固件升級的數據加密方案,對于具有IAP功能的芯片具有普遍意義,不僅適用于網絡遠程升級,同樣適用于本地升級。至于加密算法可以根據MCU的能力進行靈活選擇。
例如NXP推出的跨界MCU-iMX.RT1052系列MCU具有強大的安全組件,出于安全目的,數據協處理器(DCP)提供硬件加速和密碼算法;其內置加密算法:AES-128(ECB和CBC模式)、哈希算法:SHA-1和SHA256、CRC-32等。
SNVS、DCP內部密鑰存儲或通用存儲器中進行密鑰選擇,當一個密鑰被寫入時,內部存儲器可存儲多達四個AES-128密鑰,它只能由DCP AES-128引擎讀取。
-
嵌入式系統
+關注
關注
41文章
3564瀏覽量
129224 -
AES
+關注
關注
0文章
103瀏覽量
33206
原文標題:安全加密(五):如何使用AES防止固件泄露
文章出處:【微信號:Zlgmcu7890,微信公眾號:周立功單片機】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論