release(7.15.0-rc18): final audit candidate#320
Conversation
|
Dress rehearsal evidence for candidate
The RC-tag release workflow itself previously completed successfully for RC17 |
7683f10 to
accd11d
Compare
Remove the trezor-firmware submodule dependency and vendor the audited crypto subtree with applicable upstream security backports, regression coverage, provenance documentation, and firmware cache clearing.
Retain the complete default Gitleaks ruleset while excluding only published AES vectors and Ed25519 C declarations from the generic-api-key heuristic.
The first hosted run completed cppcheck in 9m40s under a 10-minute job timeout. Raise the bound to 15 minutes to avoid timing-dependent RC18 gate failures.
|
Pushed the constant-time Pallas/RedPallas remediation as Validation on the exact source:
This fixes the known variable-time implementation. The PR intentionally remains draft. Independent cryptographic review, physical power/EM leakage assessment, hosted CI on this exact head, the exact-pinned full-image rehearsal, and canonical dependency repins remain release gates. Do not tag, sign, merge, or publish yet. |
|
Exact-head CI is green: run 30179957180 completed successfully on Both ARM artifacts built successfully. The primary physical-test image is the regular/full artifact Independent cryptographic review is recorded as complete. The PR remains draft; next gate is flashing this exact unsigned image to a test device and exercising boot, Zcash Orchard signing/performance, Bitcoin/EVM smoke tests, reconnect behavior, and repeated power cycles. |
|
Physical RC18 dress rehearsal on bfc0f3e confirmed the Zcash PCZT flow was correct but exposed a severe latency regression: each Orchard action took more than five minutes before confirmation. Root cause: the constant-time Pallas integration replaced the public affine compatibility path globally. Orchard cmx verification performs roughly 218 public Sinsemilla point additions per action, so routing all of them through the fixed-schedule projective path dominated runtime. Head 030c43e repairs the boundary:
Local evidence on the exact pinned builder:
The PR remains draft. bfc0f3e is superseded; 030c43e still requires green CI and a fresh physical timing/signing retest before RC approval. |
|
CI run 30181705474 is fully green on exact head 030c43e. All crypto, Valgrind, ASan/UBSan, static analysis, full and bitcoin-only ARM/emulator builds, SRAM/disassembly gates, unit suites, Python integration, dylib screenshot tests, and aggregate reporting passed. The authoritative GitHub-built regular/full Zcash firmware is artifact firmware-v7.15.0-030c43e-full. Its complete firmware image SHA-256 is: 68e2c0d1807176191632903af65e96b78e74495cec283e4413f07774d4065533 This supersedes both the slow bfc0f3e image and the locally built pre-CI checksum recorded above. PR remains draft pending the physical two-action Orchard timing and final serialized-transaction verification. |
|
Hardware-test candidate update for exact head The apparent 0% hang was real: the existing progress trickle advanced only from This head:
CI run 30185858191 is fully green: crypto/Valgrind/ASan/UBSan, static analysis, both ARM builds and SRAM gates, both emulator/unit variants, dylib tests, Python integration, and test-report generation. Full device-test artifact: Flash image SHA-256 ( Remaining release gate: measure on real hardware. Confirm that the signing bar advances smoothly from 0–50% for action 0 and 50–100% for action 1, record each action's elapsed time, and complete/broadcast the shield transaction. The expected speedup is approximately 2x in the dominant RedPallas portion, but the hardware measurement is authoritative. PR intentionally remains draft; no tag/release action taken. |
|
RC19 follow-through: merged as |
|
Audit-record correction from the authoritative RC19 manifests: |
Summary
Stages firmware 7.15.0 RC18 as a full dress-rehearsal PR against the exact upstream
developbaseline. RC18 includes the regular multi-chain firmware with Zcash Orchard privacy and the bitcoin-only firmware. There is no separate Zcash artifact.This remains a draft for final human and security review. Do not merge, tag, sign, or publish it yet.
Human review map
The release is deliberately split into four review targets:
62230ee620fa9ea2bdd2c8067be7fde3f9362248addc0242847cd7be9c402980498b321b344bef346d0ae670e287a75338244fe82c4bef33a920a2eefd1012c5adbacf88e2ca521a95b335a2849d528fMoving the crypto source back to the pinned KeepKey Trezor fork and removing an out-of-scope future-work document reduced this firmware PR to 168 files, 21,569 additions, and 1,888 deletions. The crypto PR is 54 files, 5,806 additions, and 372 deletions, organized as reviewable commits for the primitives, security backports, constant-time implementation, latency boundary, signing correctness/progress, and fork-owned CI/provenance.
PR #319's multiline signed-message fix and unit coverage are included here; #319 is closed as superseded.
Why this PR is 21,569 lines
The final diff does not contain generated protocol or vendored crypto source. The
dependency changes are three one-line submodule repins. The additions break down
as follows:
lib/Classifying the same additions by directly named feature path gives 5,789 lines
of Zcash/Orchard, 3,422 Hive, 2,980 clearsign/authenticator, 1,969
Tendermint-family, 1,530 Ethereum, 1,028 TRON, 1,022 Solana, and 3,829 shared
UI, storage, emulator, build, security, and release work. Removing tests,
provenance, or safety gates would reduce the displayed line count while making
the release harder to review and less safe.
The review-shape problem is commit history:
accd11d9staged 20,961 additionsas one snapshot after the fork's
developbranch was reset to upstream. Thesame work had already been separated into reviewable PRs before that reset:
For upstream review, #320 should remain the exact aggregate integration and
release-evidence candidate. The smaller feature PRs can be refreshed and merged
bottom-up; as they land, the remaining #320 diff collapses to the final RC18
integration, constant-time Zcash repair, and dependency repins. Reopening only
the old five-PR upstream stack would still leave 11,642 additions because it
predates the later Hive and full-surface security work. Replaying the complete
previously merged fork sequence through #318 leaves only 1,675 additions and
562 deletions for the final RC18 integration layer.
Release shape
full/ regular: the normal multi-chain firmware, including Zcash shielded/Orchard support;bitcoin-only: Bitcoin-only firmware with non-Bitcoin chains and Zcash privacy compiled out;zcash-privacybuild, artifact, emulator leg, or SRAM gate;Security-review disposition
random32()now uses the OS CSPRNG path with complete-read, interruption, and failure handling; there is no libcrandom()fallback.Physical power/EM leakage assessment on STM32 remains a separate assurance gate. Software tests and structural disassembly checks do not replace it.
Zcash correctness and device UX
The RC18 flow validates, clear-signs, and hashes every Orchard action, but signs only real spends. Dummy-spend signatures created by PCZT finalization remain intact. This fixes the physical shield failure where firmware attempted to sign dummy actions and eventually returned
RedPallas signing failed.The device now reports progress for all three long-running phases that physical testing exposed:
The public verification path is kept separate from the secret constant-time path, preserving the security property without forcing every public operation through the slow ladder.
Evidence
Crypto fork PR head
323e50d19..., canonically merged as62230ee62...:Crypto auditCI is green on the exact PR head;63d0766a248a8b5c849cfbd4757e6dad0d6c3c78;crypto/source is byte-identical to the crypto source exercised by the preceding firmware candidate.Firmware evidence:
9d28cb3fde9dd2f1ec532368221bd3337bc1dcf1completed shield, deshield, and Orchard-to-Orchard private send with the repaired progress UI;5003ee6279d3cdbaad267d6a452d863d06a19133;a643f627a67b5d633007b54d541a0faf061fce21and proved their executable payloads byte-identical to the tested candidate;fd1012c5adbacf88e2ca521a95b335a2849d528f;Exact-head artifact comparison (
fd1012c5...):6616b49602f453faee960043917b1e2cdb48d09585013557ea72c4076cd76eb9;41303c45da55b3c58bfb70af56d088b9c1b007ea1753d80479739937b9d28abe;200e6507fde1bab941eed885a124de1ecb2d3c35f5e4d0eb43eeafb89f1587f9;b03f72ec9be230ca779e2f9d9cab24b49358d72234f99acc054293f52bb69b4c;0e759c57a487556472d2bc604fcccdba143fd9c37f2c786460fceac69de45947;9d28cb3f...candidate and the green fork-projectiona049a8b4...candidate;a643f627..., the only 38 differing bytes are inside the contiguous embedded Git commit SHA.Fork policy
The firmware pins the exact reviewed commit from the KeepKey Trezor fork; it does not depend on a mutable branch. The fork is still 7,996 monorepo commits behind the audited upstream point. PR #4 records the upstream security triage through
trezor/trezor-firmware@90e07df785d6b812e030cf841f75d8a641ab466band owns the standalone crypto gates.Updating the whole fork is intentionally a post-RC18 modernization task: the current upstream crypto tree differs from the tested RC18 tree across 156 files, so combining that migration with this release would invalidate the existing crypto and hardware evidence.
Remaining release gates
developmatches upstreamdevelopfor the firmware PR baseline;323e50d19...and PR Add comprehensive Zcash support with ZIP143 signing and native ARM64 Mac emulator #4 merged as62230ee62...with an identical tree;fd1012c5...(run 30220773721);Do not tag, merge, sign, or publish RC18 until every remaining gate is complete.