遠端升級怕截胡?詳解FOTA安全升級

語言: CN / TW / HK

01 OTA技術介紹

物聯網OTA升級技術指的是各種物聯網終端通過網路下載遠端伺服器上的升級包,並完成對物聯網終端系統或者應用等軟體升級到新版本的端雲一體化融合技術。總體而言OTA技術體系包括軟體版本管理、任務釋出管理、連線下載管道、端側升級能力、安全穩定保障和升級互動體驗。

系統具備OTA升級能力,能幫助客戶在專案進展過程中加速產品上線,在產品釋出後方便的進行功能缺陷修復和產品效能優化,後續維護過程中也能及時的匯入新功能,增強產品體驗,在提高售後效率的同時降低運維成本。

對於OTA遠端升級而言,在保障升級成功率的基礎上,最重要的就是保證升級的安全性,OneOS OTA升級利用數字簽名等方式保障了韌體的完整性和傳送方的不可抵賴性。下面我們一起來詳細瞭解吧!

OTA從升級目標分類可以分為FOTA和SOTA。FOTA即韌體升級,升級主程式韌體,一般需要系統重啟進入Bootloader中重新刷寫應用韌體到APP分割槽。SOTA為應用升級,主要升級執行在作業系統之上的軟體應用程式,需要軟體架構及作業系統的支援,升級過程不需要系統重啟。本文主要分析OneOS FOTA安全升級的能力。

02 OneOS FOTA 設計框架

OneOS 安全FOTA設計框架如下1所示,設計包括開發平臺、FOTA雲平臺、密管系統、檔案伺服器和終端裝置五個模組。

FOTA2.0 設計框架

03 OneOS FOTA升級步驟詳解

Step1 韌體開發

使用者在FOTA平臺建立升級專案,通過menuconfig將平臺專案資訊寫入工程,通過編譯將韌體與專案之間的關係繫結。

圖 2 專案資訊寫入

在編譯完成以後,通過打包指令生成專案info檔案,將bin檔案和info檔案打包輸出目標版本的ZIP檔案,如圖3所示,韌體打包指令如圖4所示(打包軟體地址根據實際情況修改)。

圖 3 ZIP檔案內容

圖 4 韌體打包

Step2 安全加固

FOTA平臺將前置版本和目標版本韌體作差分,得到差分韌體,將差分韌體上傳至密管系統,呼叫開發者私鑰對差分韌體進行簽名,得到其簽名值Signature;再使用隨機對稱金鑰對差分韌體進行加密,得到差分韌體密文Palyload;最後使用對稱金鑰對隨機對稱金鑰進行加密,得到隨機對稱金鑰的密文EncKey

Step3 安全協議

在獲取SignatureEncKey、Palyload以後,進行組包,為差分韌體密文Palyload新增協議頭。Header包含General area、Secure area和Padding三部分。

General area由Header magic、載荷大小Palyload size、安全計數Sec_cnt(防回滾)、協議頭大小Header size(指示Header area大小)、簽名演算法sign_alg(指示差分韌體簽名演算法)、加密演算法enc_alg組成(指示加密差分韌體的演算法)。

Secure area由Signature(簽名值)和EncKey(對稱金鑰密文)兩部分組成。最後是用於填充對齊的Padding部分,32位元組對齊。

圖5 韌體頭協議

組包後經測試通過即可釋出到檔案伺服器,供終端下載升級。

Step4 安全升級

端側在初次燒錄韌體時,通過menuconfig將驗籤公鑰配置到Bootloader韌體中,並燒錄到端側裝置。

圖6 驗籤公鑰配置

端側韌體通過分時輪詢或者手動觸發升級檢查,向FOTA雲平臺發起升級查詢,如果存在已釋出的升級韌體,則將其下載到端側裝置中。

端側Bootloader安全升級軟體設計框架如圖7所示。安全升級模組通過fota_update()唯一介面進入,FOTA業務層以SM庫和ABUP庫為支撐,SM庫提供密碼學運算能力,ABUP庫提供差分還原能力。

圖 7 bootloader安全升級軟體設計框架

裝置重啟時,Bootloader首先檢查裝置是否存在待升級的韌體(根據Header_Magic判斷),如果存在,則首先判斷該韌體Header裡的安全計數Sec_cnt是否大於裝置當前的韌體安全計數,如果是,則啟動升級流程,流程如圖8所示。

圖8 安全升級流程

通過預置在bootloader中的對稱金鑰解密密文Enc_Key,獲得韌體加密的對稱金鑰,並通過Header_enc_alg獲取解密演算法解密韌體密文,得到韌體明文,將儲存在非易失性儲存器中的韌體密文替換為韌體明文。

解密操作完成後,利用預置在Bootloader中的公鑰和解密出來的韌體明文,來驗證Header_Signature中的簽名值是否正確。

韌體驗證過程中,如果驗證不通過,則判定韌體非法,放棄本次升級,並上報FOTA雲平臺。驗證通過以後,通過下載時從雲平臺獲取的資訊可知,當前的韌體為完整韌體或者差分韌體。如果是完整韌體,直接使用目標韌體升級裝置韌體;如果是差分韌體,則需要呼叫abup_fotapatch_procedure()(ABUP差分還原演算法)介面或者ota_start_up()(自研差分演算法)對差分韌體進行還原操作,利用差分韌體直接升級裝置韌體。

通過上述的驗證流程能夠極大的保證升級過程中的安全性。升級操作過程完成以後,系統跳轉升級後的系統進行啟動,裝置主動上報升級情況,完成整個升級流程。

本文完~