[P-6]我的系统升级solution

需要考虑如下几个问题:

(1)升级过程中安全性:例如升级失败(write/erase isse或者升级过程中断电等)
(2)Firmware的安全性(security service):数据本身的安全性。
(3)简单易用性

对于(1)和(3),可以通过软件的设计来保证,

对于(2),对于IoT设备,由于成本和资源的限制,这就需要在系统性能(运行速度,code size)和安全特性之间找到一个合适的平衡点,因为安全特性的实施往往对CPU性能,memory等有一定要求,例如一些公钥算法,在没有硬件支持的情况下,其一些复杂的数学运算往往是CPU所不能承受了,包括code size方面。

因此结合flash memory的大小,实现如下方案:

 

 

图2 是对NVM重新划分后memory结构图:
Bootloader:升级检测相关任务均在该程序中执行
Firmware 1:应用程序1或者备份区域
Firmware 2:应用程序2或者备份区域
EEPROM: 存储升级信息,用户数据,系统异常信息等

系统启动跳转过程如下:

 

系统上电后,首先会判断当前需要运行Firmware1 还是Firmware 2,

假如当前运行的是Firmware 1,则系统升级后升级文件烧写到Firmware 2区域,如果Firmware 2检查后没有问题,则重启系统,进入运行Firmware 2程序

假如当前运行的是Firmware 2,则系统升级后升级文件烧写到Firmware 1区域,如果Firmware 1检查后没有问题,则重启系统,进入运行Firmware 1程序

这样就能保证Flash中永远至少有一份完整有效的系统,而不至于系统遭受损坏。

对于系统的跳转,可以结合ARM Cortex-M VTOR寄存器以及memory重映射来实现。

而安全特性则需要结合具体算法来实现,例如 RSA,ECDH、ECDSH,SHA256,AES,CMAC CBC-MAC, KHDE等密码学中涉及到算法

 

posted @ 2016-12-19 23:21  美好的2020  阅读(132)  评论(0编辑  收藏  举报