跳到主内容
3月24日,由比特派&BitHD推出的“零基础编译开源的钱包固件”直播课程圆满结束,让小白用户亲身体验到了编译与验证开源的硬件钱包固件的整个过程。此次在线直播教程由BitHD品牌负责人果子主导,以下为本次直播的图文教程。
*本教程基于 mac 系统运行,windows 系统用户可下载 linux 系统完成操作流程。
本教程所有代码命令需在终端下执行,可在程序槽中直接打开,或搜索“终端”、“terminal”。
https://docs.docker.com/install/
2.b.在终端中输入以下命令点击回车,安装 homebrew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
2.c.在终端输入以下命令,通过 homebrew 安装 python3 和 pipenv
brew install python3 pipenv
1,在桌面新建文件夹,并命名为 “BITHD”
3,在终端继续输入以下命令,在 GitHub 上获取开源代码
git clone https://github.com/bithd/bithd-mcu.git
4,获取成功后,BITHD 文件内会生成 BITHD-mcu 文件夹
该文件夹即是 GitHub 上开源的 BITHD 固件代码,之后的编译操作会在该文件目录下执行。
*该步骤对电脑性能要求较高,部分步骤会耗时较久,在终端未完成操作前,请不要关闭终端,耐心等待终端完成编译。
export TAG=v2.7.4; ./build-firmware.sh $TAG
编译完成后,在 BITHD/BITHD-mcu/build 文件夹内,会生成编译好的固件文件,此时已经完成了对 GitHub 开源代码的编译步骤。
1,在终端输入以下命令,安装指定的 python 环境
pipenv --python 3 install
2,在终端输入以下命令,生成准备签名的 bin 文件
pipenv run ./script/prepare_firmware.py -f ./build/bithd-$TAG-unsigned.bin
该步骤会在 BITHD/BITHD-mcu/build 文件夹内,生成注入空签名信息的文件bithd-v2.7.4-prepared.bin
3,在终端输入以下命令,使用 BITHD 官方提供的签名文件对该文件进行签名
*签名所需的签名文件保存在 BITHD/BITHD-mcu/signatures 文件夹内
pipenv run ./script/build_signed_firmware.py -f ./build/bithd-$TAG-prepared.bin -s . signatures/$TAG.csv
签名完成后,会在 BITHD/BITHD-mcu/build 文件夹内,生成 bithd-v2.7.4-signed 文件。该文件即是我们在 GitHub 上获取到的源码通过编译生成,并且使用 BITHD 官方提供的签名文件进行签名的固件文件。
至此,我们已经完成了从 GitHub 上获取源码,到编译源码生成固件包,并对固件包进行签名的步骤。接下来我们将进行固件包的验证步骤。
1,链接 BITHD,在 Bitpie 中导出最新的固件更新包。该导出操作只会导出固件文件,跟资产信息没有任何关系。
2,通过对比文件,验证设备中的固件与 GitHub 开源固件代码是否一致
diff <(xxd build/bithd-$TAG-prepared.bin) <(xxd build/bithd-$TAG-firmware.bin)
*注意:请将导出的固件文件放到 BITHD/BITHD-mcu/build 文件夹内,并修改导出的固件名称与命令中示例名称相同。例如:从安卓设备中导出的固件名称为 bithd-wallet-firmware,我们需要将其重命名为 bithd-v2.7.4-firmware ,放入 build 文件夹内,否则命令执行将会出现错误。
从对比结果中我们可以看到,我们自己编译并且注入空签名数据的固件和我们从设备中导出的固件,只有前256位签名信息的不同,除了签名信息以外所有的代码都完全相同。也证明了我们在设备中使用的固件代码与 GitHub 上开源的固件代码是完全相同的。
3,通过计算哈希值,验证设备中的固件与 GitHub 开源固件代码是否一致
3.a 在终端输入以下命令,计算我们在设备中导出的固件哈希值
shasum -a 256 ./build/bithd-$TAG-firmware.bin
https://github.com/bithd/bithd-mcu/releases
可以发现我们从设备中导出的固件代码哈希与 GitHub 上提供的固件哈希是完全相同的,也就是说,他们的代码也完全一致,没有任何一个包括空格在内的差异。
https://zhuanlan.zhihu.com/p/38797088