|
| 1 | +# v1.1.0-rc1 Publication Report |
| 2 | + |
| 3 | +Date: 2026-07-31 |
| 4 | + |
| 5 | +## Repository |
| 6 | + |
| 7 | +- Owner: `Zimbo88` |
| 8 | +- Repository: `stm32-security-lab` |
| 9 | +- URL: https://github.com/Zimbo88/stm32-security-lab |
| 10 | +- Visibility: `PUBLIC` |
| 11 | +- Default branch: `master` |
| 12 | +- Publication type: GitHub pre-release |
| 13 | +- Source commit: `b8b72f4e624d5139a18ac4c3d7ad17651b8d0139` |
| 14 | + |
| 15 | +The release represents the five-part hardening campaign as an open-source |
| 16 | +research-platform candidate. It is not a production-ready, certified, or |
| 17 | +formally verified security system. |
| 18 | + |
| 19 | +## Preflight |
| 20 | + |
| 21 | +The following checks were run on the release branch and again on the merged |
| 22 | +default branch: |
| 23 | + |
| 24 | +- `python3 tools/publication_scan.py --tracked`: clean; no error-level findings. |
| 25 | +- `python3 tools/check_no_private_keys.py`: passed; no tracked private-key material. |
| 26 | +- `python3 tools/check_documentation.py`: passed; no missing relative links. |
| 27 | +- `python3 tools/check_workflows.py`: passed; all four repository workflows parsed and passed policy checks. |
| 28 | +- Git history scan: no private Ed25519 seed, PEM private key, token, or credential was found. |
| 29 | +- `git diff --check`: passed. |
| 30 | + |
| 31 | +The current release tree excludes local flash dumps, hardware baselines, raw |
| 32 | +HIL logs, logic-analyzer captures, and local device data. Older research |
| 33 | +captures remain in historical commits that were already present in the public |
| 34 | +repository; history was not rewritten because no actual secret or credential |
| 35 | +was found. This is a documented historical-artifact limitation. |
| 36 | + |
| 37 | +The initial remote branch runs found two environment omissions. They were |
| 38 | +fixed without weakening tests: |
| 39 | + |
| 40 | +- `02acb00`: install the ARM GCC toolchain in the security-test workflow. |
| 41 | +- `9f764bd`: make PyYAML an explicit base test dependency. |
| 42 | + |
| 43 | +## Remote CI |
| 44 | + |
| 45 | +All required branch, PR, and post-merge checks passed. |
| 46 | + |
| 47 | +Branch checks for `9f764bd`: |
| 48 | + |
| 49 | +- CI: run `30647173093` — success |
| 50 | +- Firmware build: run `30647172936` — success |
| 51 | +- Security tests: run `30647173069` — success |
| 52 | +- Documentation and repository hygiene: run `30647173694` — success |
| 53 | + |
| 54 | +Pull request checks for PR #4: |
| 55 | + |
| 56 | +- CI: run `30647447104` — success |
| 57 | +- Firmware build: run `30647447089` — success |
| 58 | +- Security tests: run `30647447007` — success |
| 59 | +- Documentation and repository hygiene: run `30647447050` — success |
| 60 | + |
| 61 | +Post-merge `master` checks for `b8b72f4`: |
| 62 | + |
| 63 | +- CI: run `30647750622` — success |
| 64 | +- Firmware build: run `30647750586` — success |
| 65 | +- Security tests: run `30647750585` — success |
| 66 | +- Documentation and repository hygiene: run `30647750557` — success |
| 67 | + |
| 68 | +## Pull Request |
| 69 | + |
| 70 | +- PR: #4 |
| 71 | +- URL: https://github.com/Zimbo88/stm32-security-lab/pull/4 |
| 72 | +- Branches: `release/v1.1.0-rc1` → `master` |
| 73 | +- Merge commit: `b8b72f4e624d5139a18ac4c3d7ad17651b8d0139` |
| 74 | +- Merge method: normal merge commit |
| 75 | +- Merged: 2026-07-31 |
| 76 | + |
| 77 | +## Release |
| 78 | + |
| 79 | +- Tag: `v1.1.0-rc1` |
| 80 | +- Tag target: `b8b72f4e624d5139a18ac4c3d7ad17651b8d0139` |
| 81 | +- Release URL: https://github.com/Zimbo88/stm32-security-lab/releases/tag/v1.1.0-rc1 |
| 82 | +- Title: `STM32 Security Lab v1.1.0-rc1 — Security Hardening and Hardware Validation Candidate` |
| 83 | +- Status: pre-release, not draft, not a stable release |
| 84 | +- Published: 2026-07-31 |
| 85 | + |
| 86 | +Published assets: |
| 87 | + |
| 88 | +- `v1.1.0-rc1.tar.gz` — release archive; SHA-256 `4ea5a01c3aa9f52bee7383a1def78c237925a1881e7865538fceeebc08bb7b87` |
| 89 | +- `SHA256SUMS` |
| 90 | +- `release-manifest.json` |
| 91 | +- `release-provenance.json` |
| 92 | +- `sbom.spdx.json` |
| 93 | +- `THIRD_PARTY_NOTICES.md` |
| 94 | +- `embedded-public-key.hex` |
| 95 | +- `public-key.hex` |
| 96 | + |
| 97 | +The release archive contains the checked bootloader, legacy image, Slot-A and |
| 98 | +Slot-B artifacts and signed example update packages. All signed examples use |
| 99 | +the synthetic CI test key and are explicitly not intended for production or |
| 100 | +for devices provisioned with another root key. |
| 101 | + |
| 102 | +Public fingerprints recorded in the manifest and release notes: |
| 103 | + |
| 104 | +- embedded public key: `482dd9daac3d406f779995a50a00eb2ac9948eb412cba4403e2f81091780499a` |
| 105 | +- synthetic signing test key: `56475aa75463474c0285df5dbf2bcab73da651358839e9b77481b2eab107708c` |
| 106 | + |
| 107 | +## Local reproducibility |
| 108 | + |
| 109 | +Two clean checkouts of the pre-merge release branch produced identical |
| 110 | +archives with SHA-256 |
| 111 | +`91bdb2633f10d21fb2b32328b261ae361ca80b594f4dd0b698d848d71c57bc2d`. |
| 112 | + |
| 113 | +After merging, a fresh checkout of `master` ran `make test-fast`, built the |
| 114 | +release candidate, verified it, and produced the same final archive hash as |
| 115 | +the local merged checkout: |
| 116 | + |
| 117 | +`4ea5a01c3aa9f52bee7383a1def78c237925a1881e7865538fceeebc08bb7b87` |
| 118 | + |
| 119 | +This is local reproducibility evidence, not a claim of bit-for-bit |
| 120 | +reproducibility across arbitrary toolchains. |
| 121 | + |
| 122 | +## Security status |
| 123 | + |
| 124 | +- RDP2 was not enabled. |
| 125 | +- WRP was not enabled. |
| 126 | +- Option Bytes were not changed. |
| 127 | +- No private key was committed or uploaded. |
| 128 | +- Only public synthetic test-key material and test-key-signed examples were published. |
| 129 | +- No automatic RDP2 or WRP command was added or executed. |
| 130 | + |
| 131 | +## Known limitations |
| 132 | + |
| 133 | +- No complete controlled Power-Loss campaign was performed. |
| 134 | +- The final hardware corruption campaign remains incomplete. |
| 135 | +- The fully debugger-independent reset/recovery lifecycle was not completely proven because NRST availability was limited. |
| 136 | +- No external security review was performed. |
| 137 | +- No long-duration libFuzzer/AFL++ campaign was completed. |
| 138 | +- The platform is not production-qualified, certified, or suitable for arbitrary STM32 boards. |
| 139 | +- Hardware evidence is limited to the documented STM32F429 reference setup. |
| 140 | + |
| 141 | +## Publication status |
| 142 | + |
| 143 | +REPOSITORY PUBLISHED – REMOTE CI PASSED – V1.1.0-RC1 PRE-RELEASE CREATED |
0 commit comments