【swupdate文档 五】从可信的来源更新镜像

从可信的来源更新镜像

现在越来越重要的是,设备不仅要能安全地进行更新操作,
而且要能够验证发送的图像是否来自一个已知的源, 并且没有嵌入恶意软件。

为了实现这个目标,SWUpdate必须验证传入的镜像。
有几种方法可以做到这一点。
这里有一些问题,完整的复合镜像需要签名吗?还是只是它的某些部分需要?

不同做法的优缺点将在下一章中描述。

对复合镜像进行签名

一个直接了当的做法是对整个复合镜像进行签名。但是。这样做有一些严重
的缺点。这会导致无法在加载完整个复合镜像之前对镜像进行验证。
这意味着,校验需要在安装了镜像之后才进行,而不是在实际写入设备
之前就能进行。
这会导致,如果校验失败,需要对已经安装好的镜像做一些取消安装的操作,
这种取消安装的操作,在碰到掉电时,可能会导致一些不希望保留的数据被保留在设备上。

对子镜像进行签名

如果每个子图像都签名了,验证就可以在操作相应的硬件之前完成。
只有签名正确的镜像会被实际安装。
不过这样存在一个问题,子镜像没有跟sw-descrription文件中的发布描述绑定到一起。
即使sw-description也做了签名,即使对sw-description进行了签名,攻击者也可以
将签名子镜像们混合在一起,生成可以安装的新的复合镜像,因为所有子镜像都可通过验证。

对sw-description进行签名并与哈希验证相结合

为了避免所描述的缺点,SWUpdate将签名的sw-description与每个子镜像的哈希验证结合起来。
这意味着只有经过验证的源代码生成的sw-description才能被安装程序接受。
而sw-description包含每个子镜像的哈希值,可验证每个交付的子镜像确实属于本次发布。

算法的选择

可以通过menuconfig选择签名和验证sw-descrription文件的算法。
目前,实现了以下机制:

  • RSA 公钥/私钥。 私钥属于编译系统,而公钥需要被安装到设备上。
  • 使用证书的CMS

密钥或证书使用"-k"参数传递给SWUpdate。

生成密钥/证书的工具

openssl 工具用于生成密钥。这是OpenSSL项目的一部分。完整的文档可以 在
openSSL 网站
上找到

使用 RSA PKCS#1.5

生成私钥和公钥

首先,需要生成私钥

openssl genrsa -aes256 -out priv.pem

这里需要一个密码。可以从文件中去获取这个密码 - 当然,
这个密码文件必须保护好,防止被入侵。

openssl genrsa -aes256 -passout file:passout -out priv.pem

使用如下命令,从私钥导出公钥:

openssl rsa -in priv.pem -out public.pem -outform PEM -pubout

"public.pem" 包含了适用于swupdate的格式的密钥。
该文件可以通过-k参数在命令行传递给swupdate。

如何使用RSA进行签名

对镜像进行签名非常简单:

openssl dgst -sha256 -sign priv.pem sw-description > sw-description.sig

与证书和CMS一起使用

生成自签名证书

openssl req -x509 -newkey rsa:4096 -nodes -keyout mycert.key.pem     -out mycert.cert.pem -subj "/O=SWUpdate /CN=target"

有关参数的更多信息,请参阅文档。 "mycert.key.pem" 包含了私钥,用于签名。
不能 被部署到目标设备上。

目标设备上必须安装有 "mycert.cert.pem" - 这将被SWUpdate用于完成校验。

使用PKI颁发的证书

也可以使用PKI签发的代码签名证书。
不过,SWUpdate是使用OpenSSL库来处理CMS签名的,该库要求在签名证书上设置以下属性:

keyUsage=digitalSignature
extendedKeyUsage=emailProtection

如果不能满足此要求,也可以完全禁用签名证书密钥检查。 这是由
CONFIG_CMS_IGNORE_CERTIFICATE_PURPOSE 配置选项控制的。

如何用CMS签名

对镜像进行签名,跟前一种情况一样很简单:

openssl cms -sign -in  sw-description -out sw-description.sig -signer mycert.cert.pem         -inkey mycert.key.pem -outform DER -nosmimecap -binary

构建签名的SWU镜像

有两个文件,sw-description和它的签名sw-description.sig。
签名文件必须紧跟在描述文件后面。

sw-description中的每个图像必须具有 "sha256" 属性,
即镜像的sha256校验和。如果有一个镜像不具有sha256属性,
则整个复合镜像的的校验结果会是未通过,SWUpdate在开始安装之前会停止并报错。

创建签名镜像的简单脚本可以是:

#!/bin/bash

MODE="RSA"
PRODUCT_NAME="myproduct"
CONTAINER_VER="1.0"
IMAGES="rootfs kernel"
FILES="sw-description sw-description.sig $IMAGES"

#if you use RSA
if [ x"$MODE" == "xRSA" ]; then
    openssl dgst -sha256 -sign priv.pem sw-description > sw-description.sig
else
    openssl cms -sign -in  sw-description -out sw-description.sig -signer mycert.cert.pem         -inkey mycert.key.pem -outform DER -nosmimecap -binary
fi
for i in $FILES;do
        echo $i;done | cpio -ov -H crc >  ${PRODUCT_NAME}_${CONTAINER_VER}.swu

签名镜像的sw-description示例

本例应用于Beaglebone,安装Yocto images:

software =
{
        version = "0.1.0";

        hardware-compatibility: [ "revC"];

        images: (
                {
                    filename = "core-image-full-cmdline-beaglebone.ext3";
                    device = "/dev/mmcblk0p2";
                    type = "raw";
                    sha256 = "43cdedde429d1ee379a7d91e3e7c4b0b9ff952543a91a55bb2221e5c72cb342b";
                }
        );
        scripts: (
                {
                    filename = "test.lua";
                    type = "lua";
                    sha256 = "f53e0b271af4c2896f56a6adffa79a1ffa3e373c9ac96e00c4cfc577b9bea5f1";
                 }
        );
}

对签名镜像运行SWUpdate

验证是通过在SWUpdate的配置中设置CONFIG_SIGNED_IMAGES激活的。
一旦激活,SWUpdate将始终检查复合图像。
出于安全原因,不可能在运行时禁用检查。
-k参数(公钥文件)是必须的,如果公钥没有传递,程序将终止运行。

本文地址 https://www.cnblogs.com/zqb-all/p/10296719.html

译自 swupdate 文档 https://sbabic.github.io/swupdate/signed_images.html

有更新会在github上发布 https://zqb-all.github.io/swupdate/signed_images.html

原文地址:https://www.cnblogs.com/zqb-all/p/10296719.html

时间: 2024-08-29 15:38:05

【swupdate文档 五】从可信的来源更新镜像的相关文章

朱晔的互联网架构实践心得S1E9:架构评审一百问和设计文档五要素

朱晔的互联网架构实践心得S1E9:架构评审一百问和设计文档五要素 [下载文本PDF进行阅读] 本文我会来说说我认为架构评审中应该看的一些点,以及我写设计文档的一些心得.助你在架构评审中过五关斩六将,助你写出能让人收藏点赞的设计文档. 技术架构评审 架构评审或技术方案评审的价值在于集众人的力量大家一起来分析看看方案里是否有坑,方案上线后是否会遇到不可逾越的重大技术问题,提前尽可能把一些事情先考虑到提出质疑其实对项目的健康发展有很大的好处.很多公司都有架构评审委员会都有架构评审的流程,做业务的兄弟要

【swupdate文档 二】许可证

许可证 SWUpdate是免费软件.它的版权属于Stefano Babic和其他许多贡献代码的人(详情请参阅实际源代码和git提交信息). 您可以根据自由软件基金会发布的GNU通用公共许可证第2版的条款重新分发SWUpdate和/或修改它. 它的大部分还可以根据您的选择,在GNU通用公共许可证的任何后续版本下发布--有关例外情况,请参阅个别文件. 为了更容易地表示许可证,源文件中的许可证头将被替换为对由Linux基金会的SPDX项目[1]定义的唯一许可证标识符的一行引用. 例如,在源文件中,完整

【swupdate文档 三】SWUpdate: 嵌入式系统的软件升级

SWUpdate: 嵌入式系统的软件升级 概述 本项目被认为有助于从存储媒体或网络更新嵌入式系统.但是,它应该主要作为一个框架来考虑,在这个框架中可以方便地向应用程序添加更多的协议或安装程序(在SWUpdate中称为处理程序). 一个用例是从外部本地媒体(如USB-Pen或sd卡)进行更新.在这种情况下,更新是在没有操作员干预的情况下完成的:它被认为是"一键更新",软件在复位时启动,只需按下一个键(或者以任何目标可以识别的方式),自动进行所有检查.最后,更新过程只向操作员报告状态(成功

Word 文档插入时间日期禁止自动更新

前些天写了点总结并插入时间和日期,记得勾掉了那个自动更新的,但是刚才打开时发现当时的日期和时间变成现在的了,我就纳闷了,然后我去看那插入日期和时间的那个框,里面确实没有勾选自动更新,于是百度, 百度都说只要把那个自动更新的勾去掉了就不会自动更新了,但是我的怎么就自动更新了呢? 是这样的,在你完成插入操作之前要把那个自动更新的勾去掉,再去插入时间和日期,这样插入的时间和日期就不会自动更新了,我当时是用的快捷键插入的时间和日期, 然后再去去掉那个自动更新的勾,这样其实没用了,记住在不需要自动更新时间

[翻译] 精益文档

精益文档 Lean Documentation (原文) Posted by Tomas Björkholm on Apr 09, 2015 我的业余研究告诉我,要实现更大的有效性和上乘的质量,最重要的三件事是知识,知识,还是知识.知识最好通过交流获得,但是只有和有知识的人交流才会有效.糟糕的是,有些情况下这样的人无法参与讨论. My amateur research has given me the insight that the three most important things fo

通过beego快速创建一个Restful风格API项目及API文档自动化(转)

通过beego快速创建一个Restful风格API项目及API文档自动化 本文演示如何快速(一分钟内,不写一行代码)的根据数据库及表创建一个Restful风格的API项目,及提供便于在线测试API的界面. 一.创建数据库及数据表(MySQL) #db--jeedev -- ---------------------------- -- Table structure for `app` -- ---------------------------- DROP TABLE IF EXISTS `a

中文Appium API 文档

该文档是Testerhome官方翻译的源地址:https://github.com/appium/appium/tree/master/docs/cn官方网站上的:http://appium.io/slate/cn/master/?ruby#about-appium 中文Appium API 文档 第一章:关于appium1.1 appium客户端客户端类库列表及Appium服务端支持 这些类库封装了标准Selenium客户端类库,为用户提供所有常见的JSON 格式selenium命令以及额外的

Linux中查找帮助文档的几种方法

初学Linux,看到了关于查看命令帮助的几种方法,觉得有用故记录与此,以备不时之需,也希望能帮到他人.刚学,如有不对之处,还请各位前辈不令赐教. 一.help COMMAND -->shell的内嵌命令可以用此命令. 二.COMMAND --help -->命令自带的普通格式的使用帮助 三.使用手册:man [options] COMMAND  -->使用手册在man命令里面主要有以下几个选项:NAME:功能性说明,SYNOPSIS:语法格式(很重要),DESCRIPTION:描述,OP

elasticsearch的rest搜索---对于相关度的大牛的文档

目录: 一.针对这次装B 的解释 二.下载,安装插件elasticsearch-1.7.0   三.索引的mapping 四. 查询 五.对于相关度的大牛的文档 五.对于相关度的大牛的文档 http://blog.csdn.net/dm_vincent/article/details/42201789   这个是网址,我这里只是引用,没有抄袭