远程升级怕截胡?详解FOTA安全升级

原创
06/29 11:04
阅读数 3.7K

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()(自研差分算法)对差分固件进行还原操作,利用差分固件直接升级设备固件。

通过上述的验证流程能够极大的保证升级过程中的安全性。升级操作过程完成以后,系统跳转升级后的系统进行启动,设备主动上报升级情况,完成整个升级流程。

本文完~

展开阅读全文

作者的其它热门文章

打赏
1
2 收藏
分享
打赏
0 评论
2 收藏
1
分享
返回顶部
顶部