Coldcard/firmware

GitHub: Coldcard/firmware

Coldcard 硬件钱包的完整开源固件及桌面模拟器,支持可复现构建以验证二进制完整性。

Stars: 697 | Forks: 181

# COLDCARD 硬件钱包 Coldcard 是一款价格实惠、极致安全且可验证的 Bitcoin 硬件钱包。 请访问 [Coldcard.com](http://coldcard.com) 获取您的设备 ![coldcard logo](https://coldcard.com/static/images/coldcard-logo-nav.png) ![Mk5 coldcard 正面图片](https://coldcard.com/static/images/mk5-front.png) ## 快速链接 - [最新固件变更和更新](releases/ChangeLog.md) - [PGP 签名文件](releases/signatures.txt) - [固件二进制文件](https://coldcard.com/downloads) ## 可复现构建 为了确信此源代码树与您设备上的二进制文件一致, 您可以从源代码重新构建并获得**完全相同的字节**。此过程 已使用 Docker 自动化。步骤如下: 1. 安装 [Docker](https://www.docker.com) 并启动它。 2. 如果尚未安装 [make (GNUMake)](https://www.gnu.org/software/make/),请进行安装。 3. 检出特定版本的代码,并启动该过程。 git clone https://github.com/Coldcard/firmware.git git checkout 2023-12-21T1526-v5.2.2 # 将该二进制文件的副本放入 ./releases/2023-12-21T1526-v5.2.2-mk4-coldcard.dfu cd firmware/stm32 make -f MK4-Makefile repro 4. 过程结束时将显示清晰的确认消息,或显示差异。 5. 构建产物可在 `firmware/stm32/built` 中找到。 6. 如果您不信任 `make repro` 的结果,请参阅 `docs/notes-on-repro.md`, 其中详细分解了该过程。 7. Q 固件的过程相同,但在最后一步中将 `MK4-Makefile` 更改为 `Q1-Makefile` ## 长期分支 我们现在维护两个分支:`master` 和 `edge`。 “Edge”将包含可能尚未完全成熟的功能, 例如 Taproot 或 Miniscript。我们发布新 Edge 版本的标准较低,因此我们可以更快地迭代并将这些进步 提供给其他开发者。 Q 和 Mk 系列共享相同的代码库。已添加或 删除的单个文件,可以在 `shared/manifest_mk4.py` 和 `shared/manifest_q1.py` 之间的差异中看到。通用文件位于 `shared/manifest.py` 中。 为 Mk5 构建的固件支持 Mk4,没有任何功能差异。 ## 检出与设置 **注意** 这是 `master` 分支,涵盖最新的硬件(Mk 和 Q)。 请参阅 `v4-legacy` 分支以获取仅支持 Mk3/Mk2 及更早版本的固件。 执行递归检出以获取所有子模块: ``` git clone --recursive https://github.com/Coldcard/firmware.git ``` 已经检出但遇到 git 错误?请执行此操作: ``` git fetch git reset --hard origin/master ``` 或者,要获取最新版本,您可以检出一个带标签的分支: ``` git clone https://github.com/Coldcard/firmware.git cd firmware git checkout $(git describe --match "20*" --abbrev=0) git submodule update --init --recursive ``` 不要使用包含任何空格的路径。Makefile 不能很好地 处理这种情况,我们不打算修复它。 请记住,python 依赖项可能会在版本之间发生变化, 因此在顶层执行此命令: ``` pip install -r requirements.txt ``` ### macOS 需要 [Python 3.5 或更高版本](https://www.python.org) 和 [Homebrew](https://brew.sh)。 如果在基于 ARM 的 MacOS 系统上工作,您可能需要在开始之前创建一个 使用 `arch -x86_64 bash` 的新 shell,或者继续 在此源代码树上工作。 #### 设置并运行桌面模拟器 您可能至少需要安装这些软件包: ``` brew install sdl2 xterm swig brew install --cask xquartz gcc-arm-embedded ``` 过去这些也是必需的: ``` brew tap PX4/px4 brew search px4/px4/gcc-arm-none-eabi ``` 然后安装最新版本,当前为 83: ``` brew install px4/px4/gcc-arm-none-eabi-83 ``` 您可能需要执行 `brew upgrade gcc-arm-embedded`,因为我们需要 10.2 或更高版本。 然后: ``` brew install automake autogen virtualenv virtualenv -p python3 ENV source ENV/bin/activate (or source ENV/bin/activate.csh based on shell preference) pip install -U pip pip install -r requirements.txt # 应用 micropython 补丁 pushd external/micropython git apply ../../macos-mpy.patch popd make -C external/micropython/mpy-cross cd unix; make setup && make ngu-setup && make && ./simulator.py ``` 您可能需要重启以避免出现 `DISPLAY is not set` 错误。 下次您想运行模拟器时,只需执行 ``` source ENV/bin/activate && cd unix && ./simulator.py ``` #### 构建固件 - `cd ../cli; pip install --editable .` - `cd ../stm32; make setup && make; make firmware-signed.dfu` - 生成的文件 `firmware-signed.dfu` 可以使用此命令(已基于上述步骤安装) 直接加载到 Coldcard 上 - `ckcc upgrade firmware-signed.dfu` 如下所示: ``` [ENV] [firmware/stm32 42] ckcc upgrade firmware-signed.dfu 675328 bytes (start @ 293) to send from 'firmware-signed.dfu' Uploading [##########--------------------------] 29% 0d 00:01:04 ``` #### Big Sur 问题 `defaults write org.python.python ApplePersistenceIgnoreState NO` 将抑制关于 `Python[22580:10101559] ApplePersistenceIgnoreState: Existing state will not be touched. New state will be written to...` 的警告 请参阅 ### Linux 在 Ubuntu 20.04 上安装和运行 Coldcard 模拟器所需的所有步骤: ``` # 安装(系统)要求、工具和库 apt install build-essential git python3 python3-pip libudev-dev gcc-arm-none-eabi libffi-dev xterm swig libpcsclite-dev python-is-python3 autoconf libtool python3-venv # 获取源代码,这需要很长时间(因为外部库),然后打开 git clone --recursive https://github.com/Coldcard/firmware.git cd firmware # 应用 address 补丁 # 如果 unix/linux_addr.patch 存在,请使用以下命令 # 当前版本不需要 # git apply unix/linux_addr.patch # * ubuntu 24.04 需要以下内容 pushd external/micropython git apply ../../ubuntu24_mpy.patch popd # * # 创建 Python virtual environment 并激活它 python3 -m venv ENV # or virtualenv -p python3 ENV source ENV/bin/activate # 安装依赖 pip install -U pip setuptools pip install -r requirements.txt #general requirements pip install pysdl2-dll # Ubuntu needs this dependency # 构建 Coldcard 模拟器 cd unix pushd ../external/micropython/mpy-cross/ make # mpy-cross popd make setup make ngu-setup make # 在活动的 virtualenv 中运行模拟器 ./simulator.py # 稍后,如果您想运行它(重启后)。这假设您将 git repo 解压在 ~ (home) 中 cd ~/firmware source ENV/bin/activate cd unix ./simulator.py ``` 还要确保您的 python3 已符号链接到 python。 ## 代码组织 顶层目录: `shared` - 桌面测试版本和真实版本之间的共享代码 - 预计主要为 python,且属于较高级别 - Mk4 或 Mk5 专用的代码将列在 `manifest_mk4.py` 中, 而 Q 专用的代码将列在 `manifest_q1.py` 中 `unix` - unix (macOS) 版本,用于测试/快速开发 - 这是产品的模拟器 `testing` - 测试用例和相关数据 `stm32` - 嵌入式二进制文件(及构建),用于实际产品硬件 - 最终目标是要加载到硬件上的二进制文件 `external` - 来自其他项目的代码,即可怕的子模块 `graphics` - 作为最终产品一部分提供的图像(图标) `stm32/bootloader` - 32k 的出厂设置代码,您无法更改 (Mk3) - 但是,您可以检查 coldcard 上的代码并将其与此进行比较。 `stm32/mk4-bootloader` `stm32/q1-bootloader` - 128k 的出厂设置代码,您无法更改 - 但是,您可以检查 coldcard 上的代码并将其与此进行比较。 `hardware` - Coldcard 所有版本的原理图和物料清单。 `unix/work/...` - `/MicroSD/*` “模拟” microSD 卡上的文件 - `/VirtDisk/*` 模拟的虚拟磁盘文件。 - `/settings/*.aes` 模拟器的持久设置 ## 支持 发现错误?电子邮件:support@coinkite.com
标签:DFU, Docker, Makefile, Miniscript, PSBT, STM32, Taproot, 冷卡, 冷钱包, 加密货币, 区块链, 可复现构建, 固件, 多重签名, 安全防御评估, 嵌入式系统, 开源硬件, 微控制器, 数字货币安全, 服务器监控, 极简安全, 比特币, 硬件钱包, 离线签名, 私钥管理, 网络安全研究, 请求拦截, 逆向工具, 金融科技