|
1 | 1 | # Secure Boot and Lifecycle Evidence |
2 | 2 |
|
3 | | -Status: BLOCKED for production secure boot. |
| 3 | +Status: development secure-boot prototype — host and simulation evidence |
| 4 | +complete; production (silicon) secure boot is not claimed (see Non-Claims). |
4 | 5 |
|
5 | | -This repository currently contains a e1-chip identity ROM, not a secure boot |
6 | | -implementation. The ROM exposes the platform contract words `OPSO`, `CHIP`, |
7 | | -contract version `1`, and a boot-vector placeholder. It has no firmware |
8 | | -authentication or lifecycle enforcement. |
| 6 | +The repository now implements the OPNPHN01 secure-boot chain in firmware and |
| 7 | +RTL with reproducible host/simulation evidence: a constant-time mask-ROM |
| 8 | +verifier, a one-hot lifecycle controller, an OTP controller model, a DICE |
| 9 | +measurement chain, ATE provisioning + readback, and negative-evidence |
| 10 | +rejection transcripts. Production secure boot still depends on silicon — the |
| 11 | +OTP macro, the OpenTitan crypto blocks, and on-die entropy — and is not |
| 12 | +asserted from this evidence. |
9 | 13 |
|
10 | 14 | ## Current Evidence |
11 | 15 |
|
12 | 16 | | Surface | Local evidence | Security result | |
13 | 17 | |---|---|---| |
14 | | -| Boot ROM identity words | `rtl/bootrom/e1_bootrom.sv` and platform-contract checks | Contract ROM only; not a trust anchor. | |
15 | | -| Boot ROM write behavior | `verify/cocotb/test_e1_lifecycle.py` writes ROM offsets and verifies reads stay fixed | Negative evidence that the current ROM is immutable through the MMIO path. | |
16 | | -| Lifecycle state | No lifecycle RTL, registers, pins, or reset straps | BLOCKED. | |
17 | | -| eFuse/OTP | No fuse macro, fuse shadow registers, or provisioning flow | BLOCKED. | |
18 | | -| Root key material | No key hash, public key, certificate chain, or device-unique key source | BLOCKED. | |
19 | | -| Image authentication | No ROM hash parser, signature verifier, manifest parser, or fail-closed branch | BLOCKED. | |
20 | | -| Rollback protection | No monotonic counter, version fuse, RPMB, or anti-rollback policy | BLOCKED. | |
21 | | -| Debug authentication | Package debug bridge is a bring-up bus master; no lifecycle-gated authentication | BLOCKED for production debug lock. | |
| 18 | +| Mask-ROM verifier | `fw/boot-rom/secure/{verify,ed25519_ct,sha256,measure}.c`; host KATs `fw/boot-rom/secure/tests/`; `fw/pmc/src/secure_boot.c` | Constant-time Ed25519 + SHA-256 OPNPHN01 verifier; distinct fail-closed halt code per reject path. | |
| 19 | +| Secure-boot negative evidence | `tests/security/negative/` (`secure-boot-negative-evidence-check`) | Reproducible rejection transcripts: unsigned, tampered payload, wrong key, corrupt header, rollback downgrade, revoked key, lifecycle-below-min, debug-locked unlock denial. | |
| 20 | +| Lifecycle state | `rtl/security/lc/e1_lc_ctrl.sv` + `verify/cocotb/test_e1_lc_ctrl.py` (`security-lifecycle-scope-check`) | One-hot BLANK/DEV/MFG/LOCKED/RMA/SCRAP; permitted-transition enforcement + signed debug-auth; sim-verified. Silicon lifecycle controller integration tracked in rot-integration-check. | |
| 21 | +| eFuse/OTP | `rtl/security/otp/e1_otp_map.sv` + `fw/provisioning/e1_provision.py` (`otp-rtl-check`, `provisioning-readback-check`) | 2-of-3 majority read, write-auth controller, parity-fault halt; provisioning + readback model. Silicon OTP macro BLOCKED. | |
| 22 | +| Root key material / DICE | `fw/dice/cdi.c`; `docs/sw/security/dice-chain.md` (`dice-measurement-chain-check`) | UDS->CDI ladder, DeviceID/Alias key derivation, KAT-validated. UDS silicon entropy (SRAM PUF / keymgr) BLOCKED. | |
| 23 | +| Rollback protection | OTP unary rollback slots in `e1_otp_map.sv` + verifier rollback check | Advance-only monotonic counters; verifier rejects downgrade (negative evidence above). | |
| 24 | +| Debug authentication | `e1_lc_ctrl.sv` signed challenge-response (RoT-verified Ed25519, no XOR) | Lifecycle-gated; LOCKED denies direct debug; sim-verified. RoT crypto binding tracked in rot-integration-check. | |
| 25 | +| RoT integration spine | `rtl/security/rot/e1_rot_top.sv` (`rot-integration-check`) | Ibex + OTP + lifecycle + mailbox + reset-sequencer elaborate and test clean. OpenTitan crypto-block integration BLOCKED (named missing dependency). | |
22 | 26 |
|
23 | 27 | ## Required Evidence Before Any Secure-Boot Claim |
24 | 28 |
|
@@ -50,5 +54,8 @@ these artifacts exist and are locally reproducible: |
50 | 54 |
|
51 | 55 | Do not claim production secure boot, verified boot, device identity, |
52 | 56 | hardware-backed key storage, secure debug, anti-rollback, or Android AVB |
53 | | -enforcement from the current RTL. Those are future requirements, not present |
54 | | -features. |
| 57 | +enforcement from this host/simulation prototype. The verifier, lifecycle, OTP, |
| 58 | +DICE, and rollback logic above are development evidence only; production secure |
| 59 | +boot requires silicon (the OTP macro, the OpenTitan crypto blocks, and on-die |
| 60 | +entropy) and the manufacturing key ceremony (`key-ceremony.md`). Android AVB |
| 61 | +enforcement is not yet implemented. |
0 commit comments