Skip to content
DenseChip
Learn
PracticeCode labInterview

DenseChip

Navigate

Menu

LearnPracticeCode labInterview

Tools

All toolsSV editorCode repoResume
DenseChip

Practice, courses, and chip-design tools in one focused workspace.

LearnPracticeCode labInterviewToolsLearning paths

© 2026 DenseChip

AboutRoadmapCareersInternshipsFAQContactPrivacyTerms
Skip to lesson

Course contents

  • How to Use This Course
  • The NanoSoC Tour
  • Reading Path
  • SoC Glossary10
  • SoC Metrics Reference
  • SoC Cheatsheet
  • What SoC Integration Is12
  • Architecture and Budgets21
  • Memory Maps and Address Decode26
  • Interconnect and Bus Fabrics26
  • Clock and Reset Architecture24
  • Power Architecture21
  • Interrupts, DMA and Peripherals15
  • Memories, Boot and Security21
    • Memory Subsystem Integration
    • ECC and Error Handling
    • External Memory Controller Integration
    • Boot ROM and Boot Modes
    • eFuse and OTP
    • Secure Boot and Root of Trust
      • Chain of Trust and Immutable ROM
      • Image Authentication, Conceptually
      • Failure Handling and Recovery
    • Security Architecture
  • IP Integration and Handoff21
  • Top-Level Verification and Bring-up21
  • Package, Pads and I/O18
  • Chip Signoff and Tapeout18
  • SoC Interview Prep16
  • Capstone: Integrate NanoSoC14
Loading lesson

←Secure Boot and Root of Trust
  1. Topics
  2. SoC Design
  3. Memories, Boot and Security
  4. Secure Boot and Root of Trust
  5. Chain of Trust and Immutable ROM
On this page

    Part 8 of 14, lesson 16 of 21Part 8 of 14/Memories, Boot and Security/Lesson 16 of 21All levels

    Chain of Trust and Immutable ROM

    The anchor and the links: what cannot change, what verifies what, and where each key lives.

    Why it matters

    This lesson has one job: anchor trust in something an attacker cannot rewrite. On NanoSoC that anchor is the boot ROM plus the fused secrets: the ROM code is fixed at manufacture, the device keys live in fuse shadow registers with no bus read path, and every later stage is verified before it runs. If any link runs before verification, the chain is decoration: execution precedes trust, and the attacker only needs the weakest early link.

    The core idea

    The chain has four links. The ROM is immutable and implicitly trusted; it is the root. The fused keys authenticate the next stage, so the keys must be present before the first verification and readable only by the verification engine. Each loaded image carries a manifest describing its version and where it may run, and the ROM checks the manifest against policy before jumping. Control passes only after verification succeeds, which means the jump instruction is gated on a pass flag, not merely sequenced after the check. The NanoSoC chain is short, ROM to one SRAM0 image, but the shape generalises: every longer chain repeats verify-then-run per stage. Two things can quietly bend the root. A ROM patch table is mutable state that redirects the root, so its entries must come from an authenticated image or from fuses and be locked once written (see the handoff lesson). And the wake shortcut jumps into the retained SRAM0 image without running any check: the design must say whether retention is trusted (the array stays powered in the always-on domain) or whether the wake path re-verifies before the jump, which adds the verification time to the 14.073 microsecond wake.

    Link

    What verifies

    Key or anchor

    Stored in

    Handoff rule

    ROM

    Itself, by immutability

    Manufactured contents

    Mask ROM

    Starts at the reset vector

    Keys

    Loaded by the fuse read-out

    Fuse programming

    Fuse shadows, engine only

    Ready before first verification

    Image manifest

    Verified by the ROM

    Fused key

    Image header in SRAM0

    Checked before the jump

    Application

    Verified per its manifest

    Manifest policy

    SRAM0 image

    Runs only on pass flag

    Diagram
    # not-run: trust-chain sizes, NanoSoC teaching values
    ROM: 16 KB immutable at 0x0000_0000. Image: 8 KB loaded to SRAM0.
    Manifest (illustrative): one 64-byte header per image, covered by the check.
    Keys (illustrative allocation, not a recommended key size): 64 bits of device identity in fuse shadows.
    Cost of the chain on boot: one verification pass over 8 KB before the jump.
      The 12.581 ms boot total includes only the 192 us checksum read, which proves the bytes
      arrived. Real authentication adds hashing and signature work that is NOT in that total:
      add the verifier's time (a hardware engine's figure is an input, not a NanoSoC number).

    What the review looks for

    • The trust diagram names each link, its verifier, its key store and the flag that gates handoff.

    • No link executes before its verification completes; the gate is a hardware flag, not a software convention.

    • Key storage has no read path except into the verification engine, confirmed by connectivity review.

    Verify and debug

    Tamper with each link in simulation: flip one image bit and confirm the jump never happens; delay the key shadows and confirm verification waits rather than defaulting to pass; force the pass flag and confirm an assertion fires when execution precedes it. A chain that reports failure but jumps anyway is the standard broken implementation.

    Verification that reports but does not gate: the check runs, the log says fail, and the jump follows regardless. Symptom: secure boot passes all positive tests and no negative test. Caught by tamper tests that flip image bits. Fix: gate the handoff on the pass flag in hardware, and test the fail path as a first-class boot path.

    If asked what the root of trust is on NanoSoC, answer with two items: the immutable ROM and the fused keys. Then say what each contributes: the ROM contributes unchangeable behaviour, the fuses contribute unchangeable identity.

    Check yourself The ROM verifies the image but the jump is a plain branch after the check function returns. What is wrong?

    The gate is convention, not enforcement: a bug or an attack that skips the call still jumps. The pass flag must enable the jump path in hardware so a skipped check cannot proceed.

    Related topics

    • Next: Image Authentication, Conceptually

    • Bring-up: Secure Boot Enablement and Fuse Bring-up

    Previous

    166 / 289

    Next: Image Authentication, Conceptually

    Up next

    Up nextImage Authentication, Conceptually

    Sign in to save progress

    Practice this lessonPrevious lessonReport an error

    See also

    • Failure Handling and Recovery