01 OTA 技术介绍 物联网 OTA 升级技术指的是各种物联网终端通过网络下载远程服务器上的升级包,并完成对物联网终端系统或者应用等软件升级到新版本的端云一体化融合技术。总体而言 OTA 技术体系包括软件版本管理、任务发布管理、连接下载管道、端侧升级能力、安全稳定保障和升级交互体验。 系统具备 OTA 升级能力,能帮助客户在项目进展过程中加速产品上线,在产品发布后方便的进行功能缺陷修复和产品性能优化,后续维护过程中也能及时的导入新功能,增强产品体验,在提高售后效率的同时降低运维成本。 对于 OTA 远程升级而言,在保障升级成功率的基础上,最重要的就是保证升级的安全性,OneOS OTA 升级利用数字签名等方式保障了固件的完整性和发送方的不可抵赖性。下面我们一起来详细了解吧! OTA 从升级目标分类可以分为 FOTA 和 SOTA。FOTA 即固件升级,升级主程序固件,一般需要系统重启进入 Bootloader 中重新刷写应用固件到 APP 分区。SOTA 为应用升级,主要升级运行在操作系统之上的软件应用程序,需要软件架构及操作系统的支持,升级过程不需要系统重启。本文主要分析 OneOS FOTA 安全升级的能力。 02 OneOS FOTA 设计框架OneOS 安全 FOTA 设计框架如下图 1 所示,设计包括开发平台、FOTA 云平台、密管系统、文件服务器和终端设备五个模块。 图 1 FOTA2.0 设计框架
03 OneOS FOTA 升级步骤详解Step1 固件开发用户在 FOTA 平台创建升级项目,通过 menuconfig 将平台项目信息写入工程,通过编译将固件与项目之间的关系绑定。 图 2 项目信息写入 在编译完成以后,通过打包指令生成项目 info 文件,将 bin 文件和 info 文件打包输出目标版本的 ZIP 文件,如图 3 所示,固件打包指令如图 4 所示(打包软件地址根据实际情况修改)。 图 3 ZIP 文件内容 图 4 固件打包 Step2 安全加固FOTA 平台将前置版本和目标版本固件作差分,得到差分固件,将差分固件上传至密管系统,调用开发者私钥对差分固件进行签名,得到其签名值 Signature;再使用随机对称密钥对差分固件进行加密,得到差分固件密文 Palyload;最后使用对称密钥对随机对称密钥进行加密,得到随机对称密钥的密文 EncKey。 Step3 安全协议在获取 Signature、EncKey、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()(自研差分算法) 对差分固件进行还原操作,利用差分固件直接升级设备固件。 通过上述的验证流程能够极大的保证升级过程中的安全性。升级操作过程完成以后,系统跳转升级后的系统进行启动,设备主动上报升级情况,完成整个升级流程。 本文完~
|