当前位置:网站首页>远程升级怕截胡?详解FOTA安全升级
远程升级怕截胡?详解FOTA安全升级
2022-07-05 05:13:00 【酱酱酱子】
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()(自研差分算法)对差分固件进行还原操作,利用差分固件直接升级设备固件。
通过上述的验证流程能够极大的保证升级过程中的安全性。升级操作过程完成以后,系统跳转升级后的系统进行启动,设备主动上报升级情况,完成整个升级流程。
本文完~
边栏推荐
- Bucket sort
- [轉]: OSGI規範 深入淺出
- GameObject class and transform class of unity
- Simple HelloWorld color change
- How much do you know about 3DMAX rendering skills and HDRI light sources? Dry goods sharing
- 3dsmax snaps to frozen objects
- Embedded database development programming (zero)
- The next key of win generates the timestamp file of the current day
- cocos2dx_ Lua particle system
- Unity ugui source code graphic
猜你喜欢
UE4/UE5 虚幻引擎,材质篇,纹理,Compression and Memory压缩和内存
【论文笔记】Multi-Goal Reinforcement Learning: Challenging Robotics Environments and Request for Research
Bucket sort
UE fantasy engine, project structure
Use of snippets in vscode (code template)
win10虚拟机集群优化方案
django连接数据库报错,这是什么原因
2021-10-29
2022/7/2 question summary
Redis has four methods for checking big keys, which are necessary for optimization
随机推荐
Vs2015 secret key
嵌入式数据库开发编程(六)——C API
Django reports an error when connecting to the database. What is the reason
xftp7与xshell7下载(官网)
django连接数据库报错,这是什么原因
Judge the position of the monster in the role under unity3d
Out and ref functions of unity
UE4/UE5 虚幻引擎,材质篇(三),不同距离的材质优化
Chinese notes of unit particle system particle effect
Heap sort summary
669. Prune binary search tree ●●
Unity and database
Unity find the coordinates of a point on the circle
用 Jmeter 工具做个小型压力测试
Basic knowledge points of dictionary
3dsmax scanning function point connection drawing connection line
cocos2dx_ Lua particle system
JVM call not used once in ten years
Data is stored in the form of table
[LeetCode] 整数反转【7】