MS-RTOS APP 镜像数字签名

更新时间:
2024-07-25
下载文档

MS-RTOS APP 镜像数字签名

本章将介绍 MS-RTOS APP 镜像数字签名的使用。

为什么需要 APP 镜像数字签名?

APP 镜像数字签名有效阻止了未经签名或被恶意篡改或伪造的 APP 在目标系统(如智能电力设备)上运行,有效保证了目标系统的安全性。

使能 APP 镜像数字签名功能

APP 镜像数字签名功能在 MS-RTOS Base 工程构建时默认是关闭的,使用此功能需要重新构建 MS-RTOS Base,并修改默认配置。具体修改方式如下:

通过登录 MS-RTOS 云开发平台,进入 MS-RTOS 构建界面,点击参数配置:

avatar

在 APP 启动器使能菜单下选择一种 APP 镜像数字签名算法:

avatar

保存并构建 Base,在之后系统镜像编译与 APP 编译时均需要使用此 Base。

安装 python3

下载 python3 安装包并安装 https://www.python.org/downloads/

安装时勾选添加到环境变量 PATH 或手动添加 python3 安装目录到环境变量 PATH,这样可在命令控制台下直接执行 python 文件。

更换 python pip3 源

地址
阿里云http://mirrors.aliyun.com/pypi/simple/
中国科技大学https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣(douban)http://pypi.douban.com/simple/
清华大学https://pypi.tuna.tsinghua.edu.cn/simple/
中国科学技术大学http://pypi.mirrors.ustc.edu.cn/simple/

使用以下命令更换 python pip3 源:

pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/

升级 pip 到最新版本

pip install pip -U

工具

APP 数字签名功能相关工具、文件见 MS-RTOS Base 目录 libmsrtos\src\hosttools

安装数字签名工具依赖

pip3 install --user -r requirements.txt

生成数字签名私钥

执行以下命令生成数字签名私钥,使用 rsa-2048 签名算法:

./msrtos-sign.py keygen -k filename.pem -t rsa-2048

请妥善保管 filename.pem,不要泄漏。

除了 rsa-2048 外,msrtos-sign.py 还支持以下几种数字签名算法:

  • rsa-2048
  • rsa-3072
  • ecdsa-p256
  • ecdsa-p224
  • ed25519
  • x25519

请确保使用的数字签名算法与 MS-RTOS SDK 的配置一致。

生成数字签名公钥

./msrtos-sign.py getpub -k filename.pem

控制台将输出:

/* Autogenerated by imgtool.py, do not edit. */
const unsigned char rsa_pub_key[] = {
   ...
};
const unsigned int rsa_pub_key_len = 270;

将以上代码复制到 BSP 的 bsp_init.c 文件,BSP 的启动线程 boot_thread 在调用 ms_app_startms_apps_start 函数启动 APP 前,需要加入 launcher 的初始化,并传入数字签名公钥:

static void boot_thread(ms_ptr_t arg)
{
    // do some thing 

    ms_launcher_init(rsa_pub_key, rsa_pub_key_len);

    // do some thing 

    ms_apps_start("ms-boot-param.dtb");
}

对 APP 镜像数字签名

使用如下命令对 helloworld.bin 进行数字签名,将生成 signed-helloworld.bin--slot-size 指定的大小需要比镜像文件要大:

./msrtos-sign.py sign --key filename.pem --header-size 64 --align 8 --version 1.2 --slot-size 0x60000 --pad-header helloworld.bin signed-helloworld.bin

一个数字签名不合法的 APP,ms_app_startms_apps_start 函数将返回 MS_ERR_LAUNCHER_APP_SIGNATURE_FAIL

文档内容是否对您有所帮助?
有帮助
没帮助