Maintenance release: security hardening for the hardware RNG and for transaction/change handling. Firmware-only upgrade, the secure bootloader is unchanged since v1.10.3, so specter_upgrade_v1.10.5.bin contains no boot section.
Release notes
- fix: Reject dead-TRNG output in
get_random_bytes(fixes #370) by @White7hat7 in #372 - fix: Change-output classification now requires verified descriptor derivation by @schnuartz-ai in #387
- fix: Re-add mixed-inputs warning for multi-wallet transactions by @schnuartz-ai in #382
- chore: Update embit to v0.8.2 by @miketlk in #376
- build: Fix reproducible build (fixes #371) by @schnuartz-ai in #412
- docs: Add SECURITY.md disclosure policy, refresh security model docs by @schnuartz-ai in #373
- docs: Link udev/README.md in mkdocs by @maggo83 in #345
Full Changelog: v1.10.3...v1.10.5
Upgrade process
Copy specter_upgrade_v1.10.5.bin to the SD card and insert it into the device. The bootloader will check the
signatures of the upgrade file and update the firmware.
Devices running v1.9.0 or earlier must install v1.10.3 first because it rotated the bootloader signing keys. v1.10.5 is signed with that same key set.
Flashing an empty board
Initial programming is intended for a blank or recovery device. Back up any required wallet information first: flashing this image is not the normal upgrade path for an initialized device and may overwrite existing device storage.
If your Discovery board is empty or has very old firmware (below v1.4.0), connect it over mini-USB with the power jumper set to STLK and copy-paste initial_firmware_v1.10.5.bin to the mounted drive.
With stlink-tools:
st-flash write path/to/initial_firmware_v1.10.5.bin 0x8000000
If you want to use a self-signed bootloader and firmware, see the instructions in the bootloader repo.
sha256.signed.txt
contains the SHA-256 hashes of the firmware binary files, GPG-signed by release signer Mike Tolkachev (@miketlk) — the same identity as the second upgrade-file signature.
Fingerprint: F2DB C4C6 14C1 13E2 B15F 879A DD5C 1264 EBD6 45BE
Get the public key from an independent keyserver:
Download the public key as an ASCII-armored .asc file from keys.openpgp.org
The key is also available as a GitHub mirror.
curl -sL https://keys.openpgp.org/vks/v1/by-fingerprint/F2DBC4C614C113E2B15F879ADD5C1264EBD645BE | gpg --import
gpg --fingerprint F2DBC4C614C113E2B15F879ADD5C1264EBD645BE
Confirm that the complete fingerprint matches the value above. The key is also available from keyservers as 0xDD5C1264EBD645BE. Then verify the OpenPGP signature and the downloaded firmware files:
gpg --verify sha256.signed.txt
gpg --decrypt sha256.signed.txt > sha256.verified.txt
shasum -a 256 -c sha256.verified.txtOn Linux, sha256sum -c sha256.verified.txt can be used instead of shasum.
The SECURITY.md release-signer table lists this key. Note: earlier releases' sha256.signed.txt (v1.10.3, v1.9.0) used different keys, check that document for the key that matches the release you are verifying.
Reproducible build
You can build binaries identical to the ones in this release yourself. Follow this instruction. When the build is almost complete the script outputs a message for signing and asks you for the signatures.
Verify that the upgrade message is:
1.10.5-1fychyfccs5a0l4xhgskqutqzmkpfga7fd49waatccalglpecxr5qkm92z0
Add first signature (k9ert):
IIc0ZJD4Y4Ll2efRUwwdxgrMiYkxK1DPY3PzqVFyU3ifd2pvZ8WQqNGuJjErHCJxvN48DES/i3J77zzMYtJ+W7w=
Add second signature (Mike):
JLqLFabJRKGRFPHce1jzKq52m++hRp4eWxyyKFEsl3W+OIHYeDydfb6FQZckw1Ofdcrui4sXG7+ZPF4X2rOjuQM=
Then hit enter and check that release/sha256.txt has the same hashes as
sha256.signed.txt.
Source commit: b2d87e55338289a258ee985b26c7b064d5b49132 (tag v1.10.5).