【轉】安全加密(五):如何使用AES防止固件泄露

本文導讀算法

 

隨着電子產品更新換代速度的加快,每每都會進行系統升級或APP功能維護升級,可是由此產生了兩個主要問題。首先,因爲更新過程當中出現錯誤,該設備可能變得無用;另一個主要問題是:如何避免未經受權的用戶訪問目標產品的固件?安全

 

在嵌入式領域,根據嵌入式系統的MCU存儲結構和更新原理,提出了經過加密方式升級設備功能的方法,其中最經常使用的方法爲BootLoader加密升級。網絡

 

Bootloader 是在操做系統或用戶應用程序運行以前執行的一小段程序,經過這一小段程序,咱們能夠初始化硬件設備(如 CPU、SDRAM、Flash、串口等)、創建內存空間的映射表,從而將系統的軟硬件環境帶到一個合適的狀態,爲最終調用操做系統內核或者用戶應用程序準備好正確的環境。函數

 

如何使用BootLoader加密升級能夠防止競爭對手/惡意用戶得到對固件代碼的訪問權限?加密

 

首先是使用代碼加密來保護固件。這裏須要實現對稱密碼,以及私鑰的引導加載程序中的生成和包含。在製造商方面,須要保護相同的私鑰,用於加密新固件版本。如圖1所示,通常對稱加密算法流程。操作系統

對於常見的AES-128加密算法,因爲AES處理的單位是字節,128位的輸入明文或固件P和輸入的密鑰K都被分爲16個字節,通常咱們會將明文分組用字節爲單位的正方形狀態矩陣來描述,在每一輪的算法中,狀態矩陣的內容不斷髮生變化,最終的結果做爲密文輸出。如圖2所示,AES-128分塊加密。3d

AES算法是基於置換和代替的,置換是數據的從新排列,而代替是用一個單元數據替換另外一個。AES算法使用了多重循環實現置換和代替,在規範中被稱爲Bytes Sub(字節替換)-對數據的每一個字節應用非線性變換;Shift Rows(行位移變換)-對每一行字節循環從新排序;Mix Columns(列混合變換)-對矩陣的列應用線性變換;Add Round Key(輪密鑰加)-對狀態和每輪的子密鑰進行異或操做。該算法對內存的需求很是低,使得它很適應於資源受限制的環境。指針

 

AES(AES-128)加解密的流程,如圖3所示。blog

對於實際AES(AES-128)加密過程當中,在第一輪的迭代以前,會將明文和原始密鑰進行異或加密運算,而後正常執行從第一輪到第九輪同樣的加密函數,其中都會包含四個操做:字節代換、行位移、列混合和輪密鑰加;在最後一輪迭代不執行列混合運算。排序

 

解密的過程仍然爲10輪,每一輪的操做都是加密操做的你操做。因爲AES一輪的4個操做都是可逆的,所以解密操做的一輪就是執行逆行一位、逆字節代換、輪密鑰加和逆列混合;同加密操做相似,最後一輪不執行逆列混合,在第一輪解密以前,執行一次密鑰加操做。

 

如圖4所示,爲Boot Loader固件升級流程圖。

 

用戶程序升級成功以後,能夠經過函數指針的方式調用該程序。函數在編譯時都會被分配一個入口地址,該地址就是函數的指針。只要用一個指針變量指向這個函數的入口地址,就能夠經過指針變量調用這個函數。函數指針的本質是指針變量,只不過該指針變量指向函數,讀出程序標誌區的運行地址就能夠經過指針變量調用新寫入的程序。

 

固件升級的數據加密方案,對於具備IAP功能的芯片具備廣泛意義,不只適用於網絡遠程升級,一樣適用於本地升級。至於加密算法能夠根據MCU的能力進行靈活選擇。

 

例如NXP推出的跨界MCU-iMX.RT1052系列MCU具備強大的安全組件,出於安全目的,數據協處理器(DCP)提供硬件加速和密碼算法;其內置加密算法:AES-128(ECB和CBC模式)、哈希算法:SHA-1和SHA25六、CRC-32等。

 

SNVS、DCP內部密鑰存儲或通用存儲器中進行密鑰選擇,當一個密鑰被寫入時,內部存儲器可存儲多達四個AES-128密鑰,它只能由DCP AES-128引擎讀取。

 

 

來源

相關文章
相關標籤/搜索