对称加密更新镜像¶
SWUpdate允许在CBC模式下使用256位AES分组密码对更新镜像进行对称加密。
构建加密的SWU镜像¶
首先,通过 openssl 创建密钥,这是openssl项目的一部分。 完整的文档可以在 OpenSSL Website. 找到
openssl enc -aes-256-cbc -k <PASSPHRASE> -P -md sha1
密钥和初始化向量是基于给定的 <PASSPHRASE>
生成的。
上述命令的输出如下:
salt=CE7B0488EFBF0D1B
key=B78CC67DD3DC13042A1B575184D4E16D6A09412C242CE253ACEE0F06B5AD68FC
iv =65D793B87B6724BB27954C7664F15FF3
然后,使用这些信息加密图像:
openssl enc -aes-256-cbc -in <INFILE> -out <OUTFILE> -K <KEY> -iv <IV> -S <SALT>
其中, <INFILE>
为未加密源镜像文件, <OUTFILE>
为加密后输出的镜像,
将在 sw-description
引用。
<KEY>
是上述创建KEY命令得到的输出中,第二行的十六进制部分。
<IV>
是第三行的十六进制部分,而 <SALT>
是第一行的十六进制部分。
然后,将密钥、初始化向量和盐的十六进制值放在由空格分隔的一行上,以创建一个 密钥文件,并在最终通过-k参数传递给SWUpdate. 例如,对于以上的示例数值
B78CC67DD3DC13042A1B575184D4E16D6A09412C242CE253ACEE0F06B5AD68FC 65D793B87B6724BB27954C7664F15FF3 CE7B0488EFBF0D1B
注意,尽管不推荐,但为了向后兼容性,可以不带盐值使用OpenSSL。
要禁用盐值,请将 -nosalt
参数添加到上面的密钥生成命令中。
同时,在encryption命令中删除 -S <SALT>
参数,
并省略要提供给SWUpdate的密钥文件中的的第三个字段,即SALT。
UBI卷的加密¶
由于Linux内核api对UBI卷的限制,在实际写入任何内容之前, 需要声明要写入磁盘的数据大小。 不幸的是,加密映像的大小在完全解密之前是不知道的, 因此无法正确声明要写入磁盘的文件的大小。
出于这个原因,UBI镜像可以像这样声明特殊属性 “decrypted-size” :
images: ( {
filename = "rootfs.ubifs.enc";
volume = "rootfs";
encrypted = true;
properties = {decrypted-size = "104857600";}
}
);
在组装cpio存档之前,应该计算解密图像的实际大小并将其写入sw-description。 在本例中,104857600是解密后rootfs的大小:加密后的大小会更大。
带加密镜像的sw-description例子¶
下面的示例是一个(最小的) sw-description
,用于在Beaglebone上安装Yocto镜像。
注意 encryption = true;
的设置。
software =
{
version = "0.0.1";
images: ( {
filename = "core-image-full-cmdline-beaglebone.ext3.enc";
device = "/dev/mmcblk0p3";
encrypted = true;
}
);
}
对加密映像运行SWUpdate¶
通过在SWUpdate的配置中设置 ENCRYPTED_IMAGES
选项,可以激活对称加密支持。
使用 -K 参数向SWUpdate提供上面生成的对称密钥文件。