本文分享自《远程升级怕截胡?详解FOTA安全升级》 。

OTA技术介绍

物联网OTA升级技术指的是各种物联网终端通过网络下载远程服务器上的升级包,并完成对物联网终端系统或者应用等软件升级到新版本的端云一体化融合技术。总体而言OTA技术体系包括软件版本管理、任务发布管理、连接下载管道、端侧升级能力、安全稳定保障和升级交互体验。

系统具备OTA升级能力,能帮助客户在项目进展过程中加速产品上线,在产品发布后方便的进行功能缺陷修复和产品性能优化,后续维护过程中也能及时的导入新功能,增强产品体验,在提高售后效率的同时降低运维成本。

对于OTA远程升级而言,在保障升级成功率的基础上,最重要的就是保证升级的安全性,OneOS OTA升级利用数字签名等方式保障了固件的完整性和发送方的不可抵赖性。下面我们一起来详细了解吧!

OTA从升级目标分类可以分为FOTA和SOTA。FOTA即固件升级,升级主程序固件,一般需要系统重启进入Bootloader中重新刷写应用固件到APP分区。SOTA为应用升级,主要升级运行在操作系统之上的软件应用程序,需要软件架构及操作系统的支持,升级过程不需要系统重启。本文主要分析OneOS FOTA安全升级的能力。

OneOS FOTA 设计框架

OneOS 安全FOTA设计框架如图 1所示,设计包括开发平台、FOTA云平台、密管系统、文件服务器和终端设备五个模块。

1FOTA2.0 设计框架

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

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

本文完~

远程升级怕截胡?详解FOTA安全升级相关推荐

  1. Android开发详解之App升级程序一点通

    Android开发详解之App升级程序一点通 结束语 UpdateManager.java import java.io.File; import java.io.FileOutputStream; ...

  2. Pinterest 3.0 for iOS设计过程——升级iOS7设计思路详解

    Pinterest 3.0 for iOS设计过程--升级iOS7设计思路详解 时间2013-12-11 11:39:31  苹果开发中文站 原文  http://www.cocoachina.com ...

  3. java远程_java实现电脑远程控制详解,附完整源代码

    Java JDK1.4 的Robot对象,该对象可以完成屏幕图像截取操作,控制鼠标,键盘,如此便可以轻而易举地实现远程服务器的控制.本文向大家介绍如何用Java Robot对象实现远程服务器的控制,并 ...

  4. SSH终端远程复制:scp命令详解

    scp命令详解 先说下常用的情况: 两台机器IP分别为:A.104.238.161.75,B.43.224.34.73. 在A服务器上操作,将B服务器上/home/lk/目录下所有的文件全部复制到本地 ...

  5. SSH远程连接原理及操作详解

    参考资料SSH登录原理_藏红的博客-CSDN博客 SSH全称是Secure Shell,SSH协议是基于应用层的协议,为远程登录会话和其他网络服务提供安全性的协议.SSH使用最多的是远程登录和传输文件 ...

  6. 怎么设置锤子手机显示无服务器,锤子手机远程协助怎么使用 锤子手机远程协助使用教程【详解】...

    最近,锤子科技向锤子手机用户推送了全新的Smartisan OS 2.5版本.该版本除了对已知的一些bug进行修复之外,也带了全新的:远程协助功能.那么,锤子手机远程协助怎么使用呢?今天,小编就给大家 ...

  7. 一、Synchronized详解与锁升级

    一.synchronized 1.共享问题 1.共享问题:在多线程的环境下,由于多个公共资源可能会被多个线程共享,也就是多个线程可能会操作(增.删.改等)同一资源.当多个线程操作同一资源时,很容易导致 ...

  8. android 远程视频监控程序源码,详解基于Android已开放源代码的远程视频监控系统教程...

    网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.Socket的英文原义是"孔"或"插座".通常也称作"套接字 ...

  9. iOS 8系统正式版升级指南及功能详解

    9月18日上午消息,苹果公司iOS8系统最早于今年6月的苹果开发者大会上发布,此前已经有多个面向开发者的测试版,今天上线的,才是面向一般用户的正式版本. 很多用户目前还没有升级,此前也没接触过iOS8 ...

最新文章

  1. 2020长沙“科技之星”榜单重磅揭晓,近百家企业凭实力“出道”!
  2. Failed to import pydot. You must install pydot and graphviz for `pydotprint` to work.
  3. 初识微信小程序第一弹
  4. ASP.NET MVC 学习之路-4
  5. kibana操作elasticsearch:多字段查询(multi_match)
  6. 单继承-继承的传递性
  7. snapchat_我刚刚在Snapchat获得开发人员职位。
  8. Android MVP模式简单易懂的介绍方式 (一)
  9. 拉面说:如何成为速食拉面独角兽
  10. 第三章:3.9 引用Django 认证登陆
  11. 地理加权回归GWR4.0软件下载与使用
  12. 基于樽海鞘群算法的线性规划求解matlab程序
  13. java使用aspose实现Excel转PDF加入密码保护并解密
  14. ORA-06401: NETCMN: invalid driver designator 的解决办法
  15. php+mysql(5.1)+apache+centos 编译安装
  16. bootstrap3 兼容IE8浏览器
  17. 使用RNN模型构建人名分类器
  18. Linux如何获取mtd数据,【转载】上接Linux MTD下获取Nand flash各个参数的过程的详细解析【转】...
  19. 计算机开多位数立方根原理,开立方
  20. 域用户登陆,错误:无法登录到你的账户,通常可以通过从你的账户注销,然后重新登录来解决此问题

热门文章

  1. android alarmmanager后台,Android各版本AlarmManager使用
  2. Android学习之AlarmManager使用
  3. UNITY 开发日记/教程 俄罗斯方块 (五) 方块平移和旋转
  4. 遭到强烈反对后,Apple推迟了扫描设备以查找虐待儿童图像的计划
  5. c语言学籍管理系统实训作业,学籍管理系统C语言实训报告
  6. Mybatis <choose> <when> <otherwise>
  7. ES6字符串新增方法
  8. 什么是瞬时极性法,怎么使用?
  9. 7.Maven依赖的基本概念
  10. linux at24测试程序,AT91RM9200在linux2.6.20下TWI测试程序