Skip to content

security(DD-020/REQ-PIX-019): hardware-first root-of-trust (SE050 + HAB) with software fallback#102

Merged
avrabe merged 1 commit into
mainfrom
security/dd020-hardware-root-of-trust
Jun 24, 2026
Merged

security(DD-020/REQ-PIX-019): hardware-first root-of-trust (SE050 + HAB) with software fallback#102
avrabe merged 1 commit into
mainfrom
security/dd020-hardware-root-of-trust

Conversation

@avrabe

@avrabe avrabe commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

Research-grounded (PX4 fmu-v6xrt source) + the decision "hardware with a software fallback if the hardware does not provide."

Board (researched): NXP SE050 EdgeLock secure element on I2C4 @ 0x48 (PX4_I2C_OBDEV_SE050, power-sequenced in init.c) + i.MX RT1176 HAB secure boot (IVT struct ivt_s carries a csf field, but CSF_ADDRESS=0/csf=0 → default image unsigned; HAB open). Both present in hardware, neither active in the stock dev build (PX4 default crypto = sw_crypto).

DD-020 — two layers, each HW-first / SW-fallback:

  • Boot chain: HAB (fused SRK + CSF-signed loader) = silicon root; software sigil-verify + relay-sec anti-rollback = fallback when HAB is open/unprovisioned.
  • Key vault / crypto: SE050 as a relay-hal I2c transport + verified driver (DD-018), holding the verify key + relay-sec keys + attestation; software crypto backend = fallback when SE050 absent/unhealthy. HW/SW selection reuses the DD-018 Presence/health + DD-014 health-vote mechanism (use if present+healthy, else degrade with the downgrade logged, not silent).

Honest caveat recorded: a software root is weaker (bypassable loader, no tamper resistance) → the SW fallback is for dev/unprovisioned/degraded-field, not the certified target; production must provision the hardware (burn HAB fuses, provision the SE050).

REQ-PIX-019 captures the binding (sequenced after REQ-PIX-012 — the SE050 reuses the same embedded-hal-async I2c seam). DD-016's integrity section refined as the software-fallback layer under this hardware-first root.

rivet validate (v0.18.0): PASS.

🤖 Generated with Claude Code

…AB) with software fallback (sigil/relay-sec)

Research-grounded (PX4 fmu-v6xrt source) + user decision ("hardware with a
software fallback if the hardware does not provide").

BOARD (researched): NXP SE050 EdgeLock secure element on I2C4 @ 0x48
(PX4_I2C_OBDEV_SE050, power-sequenced in init.c) + i.MX RT1176 HAB secure boot
(IVT struct ivt_s carries a csf field, but CSF_ADDRESS=0/csf=0 -> default image
UNSIGNED; HAB open). Both present in HW, neither active in the stock dev build;
PX4 default crypto = sw_crypto.

DD-020 decision (two layers, each HW-first / SW-fallback):
- BOOT CHAIN: HAB (fused SRK + CSF-signed loader) as the silicon root; software
  sigil-signature verify + relay-sec anti-rollback as the fallback when HAB is
  open/unprovisioned. Production provisions HAB; dev runs the SW gate (reported
  lower-assurance mode).
- KEY VAULT/CRYPTO: SE050 as a relay-hal I2c transport + verified driver (DD-018),
  holding the verify key + relay-sec keys + attestation; software crypto backend
  as fallback when SE050 absent/unhealthy. HW/SW selection REUSES DD-018
  Presence/health + DD-014 health-vote (use if present+healthy, else degrade with
  the downgrade LOGGED).

Honest caveat recorded: a software root is weaker (bypassable loader / no tamper
resistance) -> SW fallback is for dev/unprovisioned/degraded, NOT the certified
target; production MUST provision HW. DD-016 integrity refined as the SW-fallback
layer; REQ-PIX-019 captures the binding (sequenced after REQ-PIX-012, reuses the
embedded-hal-async I2c seam).

rivet validate (v0.18.0): PASS.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@avrabe avrabe merged commit 3bf0661 into main Jun 24, 2026
4 checks passed
@avrabe avrabe deleted the security/dd020-hardware-root-of-trust branch June 24, 2026 04:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant