FOTA升级包签名

带加密与签名的FOTA升级包

信息摘要和数字签名

信息摘要:对数据进行处理,得到一段固定长度的结果,其特点输入:

  1. 输出长度固定。即输出长度和输入长度无关

  2. 不可逆。即由输出数据理论上不能推导出输入数据

  3. 对输入数据敏感。当输入数据变化极小时,输出数据也会发生明显的变化

  4. 防碰撞。即不同的数据数据得到相同输出数据的可能性极低

由于信息摘要有上述特点,一般保证数据的完整性,对一个大文件进行摘要运算,得到其摘要值。通过网络或者其他渠道传输后,通过验证其摘要值,确定大文件本身有没有发生变化

数字签名:数字签名其实分成两步,首先对原始文件进行摘要运算,得到摘要值,然后使用公开密钥算法中的私钥对摘要值进行加密。其签名和验证过程如下图所示

jiami

密钥获取

使用openssl生成密钥

1
$openssl genrsa -out test.key 1024

这里-out指定生成文件的。需要注意的是这个文件包含了公钥和密钥两部分,也就是说这个文件即可用来加密也可以用来解密。后面的1024是生成密钥的长度

使用密钥生成公钥

1
$openssl rsa -in test.key -pubout -out test_pub.key

-in指定输入文件,-out指定提取生成公钥的文件名。至此,我们手上就有了一个公钥,一个私钥(包含公钥)

签名生成与验证

使用私钥生成签名

1
$openssl dgst -sha256 -sign test.key -out test.sha256 update_test.img

摘要为sha256格式,输出签名为test.sha256

使用公钥验证签名

1
$openssl dgst -sha256 -verify test_pub.key -signature test.sha256 update_test.img

制作FOTA升级包

加密

将签名与升级镜像使用zip压缩,并使用自带的加密方式进行加密

1
2
$zip -r -P 123456 update_test.zip  update_test.img
$zip -r update_test.zip --password 123456 test.sha256 test.sha256

解密

直接使用unzip解密

1
$unzip -P 123456 update_test.zip

FOTA升级包签名
https://carl-5535.github.io/2021/01/20/工作总结/FOTA升级包签名/
作者
Carl Chen
发布于
2021年1月20日
许可协议