OneKey 帮助中心

验证 OneKey 发布的固件与开源代码的一致性

Customer Service
Customer Service
  • 更新

目前 OneKey 硬件产品 classic、mini 和 touch 所有安装的固件均开源且可以通过 CI 编译出最终待发布的固件。包含的具体固件类型及开源的仓库如下:

所有固件的发布均会通过 CI 进行打包后,由 OneKey 内部人员进行签名后发布。

当有正式的固件或蓝牙固件准备发布时,我们会通过执行对应仓库的 action,在 CI 中对开源的代码进行编译,编译成功后会上传到 github artifacts 存储,最终签名后放置到 OneKey 的 CDN 上后,更新配置https://data.onekey.so/config.json 后,在 OneKey APP 和 https://firmware.onekey.so 进行更新提示用户对应的更新。

1.png

2.png3.png

 

OneKey 普通固件验证方式

验证 github release 与 CI 编译时的代码一致

以最新发布的 OneKey Classic v2.9.0 版本固件为例,首先在仓库 release 中找到对应的 commit https://github.com/OneKeyHQ/firmware/releases

4.png

点击图一位置即可找到编译时的 commit hash,也可点击 compare 对比新老两个版本之间所有提交的代码和 commit,在 release 的 assets 当中会放置签名后的待发布固件内容。

点击上述红框中的 CI 任务,找到当前固件的编译过程(注:因为部分固件在别的分支当中,所以在验证 commit hash 时,需要确认 checkout 任务是否一致)

点击进入 CI 任务详情,查看 checkout 相关的信息,可以看到此时是编译的 2bd0563 开头的 commit,与 release 发布的 commit 一致

5.png
验证 CI 编译结果与发布结果一致

CI 产生的固件会上传到 github artifacts 暂时存储,OneKey 会将 CI 产生的固件进行再次签名(多签)之后,更新 github release 再发布到用户终端。内部主要会产生两个文件:

 

 

更新时机

作用

bootloader.*.bin

出厂烧录进硬件设备后无法更改

启动校验固件签名信息等

firmware.*.bin

用户可通过工具更新进入设备

各类业务相关逻辑

 

对于普通固件来说(Classic、Mini 和 Touch 均适用),多签后会在 CI 版本的固件前增加 1024 字节的签名结果,在设备启动时 bootloader 进行验证。

为了方便用户下载,OneKey 会将签名的结果放置于 CDN 内。所以对于 https://data.onekey.so/config.json 中的 classic.url 字段来说,需要再进行两步验证确保发布的版本是一致的。

  • 验证 github release 中下载的固件和 CDN 完全一致

6.png
  • 验证 github release 是由 CI 多签后得到的 tail -c +1024 /path/to/bin | shasum -a 256

7.png

针对截图中展示的三个 bin 文件名称

ci-classic.*.bin 代表从 github CI 中下载的固件内容(未签名)

release-classic.*.bin 代表从 github release 中下载的固件内容(已签名)

classic.*.bin 代表从 OneKey CDN 下载的固件内容(已签名)

由此即可验证,OneKey 发布的所有固件,无论是 github release 还是 CDN 发布的,都是由开源代码通过 github action(CI) 编译处理多签后发布的。

如果用户在下载安装时,没有安装多签后的固件,或固件签名异常,则会在启动时有风险版本的提示信息。

这篇文章有帮助吗?

5 人中有 5 人觉得有帮助

还有其它问题?提交请求

评论

0 条评论

文章评论已关闭。