-
Notifications
You must be signed in to change notification settings - Fork 94
Description
Scope
This RFC describes the rationale and implementation proposal for transitioning FIELD_ENTROPY from a FUSE-only approach to a model where FIELD_ENTROPY can be either FUSE-based or non-FUSE-based, according to the integrator's choice. FIELD_ENTROPY may be tied to device ownership and passed in from external sources. The RFC will also address the problem statement, change proposal, and threat analysis, explaining why we believe this approach does not degrade security but instead enhances usability.
This is mostly a ROM change so filing this under caliptra-sw.
Rationale
This RFC proposes changes to the FIELD_ENTROPY mechanism that is currently implemented in Caliptra Core 1.x, 2.0, and 2.1 for future Caliptra Core releases. Specifically, it addresses a fundamental incompatibility between FUSE-based FIELD_ENTROPY and silicon products that follow a circular economy model — where devices are expected to be returned, refurbished, and redeployed multiple times throughout their operational lifetime. With only 2 (or 4) FIELD_ENTROPY FUSE slots in current implementations, FUSE-based FIELD_ENTROPY is not sustainable for products that undergo repeated RMA, ownership transfer, and refurbishment cycles. This RFC recommends adding non-FUSE-based FIELD_ENTROPY capability.
Problem Statement
Current Caliptra implementations provide only 2 (or 4) FIELD_ENTROPY FUSE slots. FIELD_ENTROPY is used to derive locally significant device identity LDevID and to hedge against attackers who may have obtained the Unique Device Secret UDS before the device reaches the owner's facility. However, FUSE-based FIELD_ENTROPY is fundamentally incompatible with silicon products that follow a circular economy model:
-
Finite slots vs. near unlimited lifecycle events — With only 2–4 FIELD_ENTROPY FUSE slots available, each RMA or ownership transfer permanently consumes a non-renewable resource. For silicon products designed to be returned, refurbished, and redeployed, FIELD_ENTROPY slot exhaustion is inevitable. A product with 2 slots is fully depleted after just two lifecycle events; even 4 slots merely delays the problem.
-
High-value multi-component modules — Some silicon products are increasingly shipped as multi-component modules (e.g., CPUs paired with multiple GPUs on a single board). An RMA of such a module replaces far more silicon than a single socket, making each consumed FIELD_ENTROPY slot disproportionately expensive relative to the overall module cost.
-
Customer acceptance risk — Cloud Service Providers and enterprise customers may not accept refurbished boards that have depleted or nearly depleted FIELD_ENTROPY slots, creating a practical barrier to product serviceability and undermining circular economy goals.
Change Proposal
We need to consider implementation that uses Caliptra Subsystem (MCU + Core) and implementation that only uses Calipotra Core when it comes to this change. The key would be about how to pass per device unique FIELD_ENTROPY from an off silicon location (Flash or DOT) to Caliptra Core for Caliptra Core to be able to conduct LDevID Derivation in ROM. This should be done without mandating per device unique firmware (Caliptra Core Firmware/Manifest) to ease adaptation and real world deployment possibilities.
The proposed changes for Caliptra Core are as follows:
-
ROM
- The change shall be additive, so the original FUSE based FIELD_ENTROPY should still be an option if vendor choose to support that.
- The selection for choosing between FUSE-based or non-FUSE-based should be an integration gasket choice and decided at time of integration.
- Add new command
GET_LDEVIDin ROM that would be the flexible mechanism for either MCU or vendor ROT to provide Caliptra Core a non FUSE based FIELD_ENTROPY - Revise the ROM flow so that
LDevIDis generated just in time before RI_DOWNLOAD_FIRMWARE.- If FUSE based FIELD_ENTROPY is not used and no
GET_LDEVIDcommand is received, assume 0 as FIELD_ENTROPY
- If FUSE based FIELD_ENTROPY is not used and no
- As an additional security measure, FIELD_ENTROPY should be treated as a seed value and obfuscated using RTL-derived.
- The change shall be additive, so the original FUSE based FIELD_ENTROPY should still be an option if vendor choose to support that.
-
HW
- Support an additional integration gasket mechanism where the integrator will select between FUSE-based or non-FUSE-based FIELD_ENTROPY usage.
With Caliptra Core supporting flexibile implementation choice to obtain FIELD_ENTROPY from a command. The caller, be it Caliptra MCU or another silicon vendor ROT, has many options on how this can be supported.
- Support some type of MCTP VDM to store FIELD_ENTROPY on flash and can be retrieved at boot time.
- Support this as part of DOT protocol where FIELD_ENTROPY is one of the argument added to DOT alongside of CAK/LAK.
- For volatile DOT, the management controller needs to track FIELD_ENTROPY to ensure consistancy
- For mutable locking DOT, it can be tracked with DOT_BLOB
For Caliptra MCU I would suggest that we tie this with DOT because DOT handling in Caliptra MCU ROM happens prior to RI_DOWNLOAD_FIRMWARE and is already part of the boot flow.
Implementation Tradeoff
Field Entropy in Manifest instead of Command
There are locations in the Caliptra Manifest where it is feasible to insert the FIELD_ENTROPY. This would prevent the need for a new command GET_LDEVID in ROM. However this creates a situation where there needs to be some kind of support for per device unique firmware. To avoid the need to support logistic difficulty of per device unique firmware, we have choose to have a more flexible approach to use GET_LDEVID command and have Caliptra MCU and Silicon Vendor to have a choice on how FIELD_ENTROPY is obtained, which one option is to tie it into Device Ownership Transfer schemes.
Expand Field Entropy using KDF and FUSE instead of as additional input
There are alternative methods to increase the availability of FIELD_ENTROPY using fuses. For example, a Key Derivation Function (KDF) could be used to expand a set of FUSE bits, such that each FIELD_ENTROPY update only requires burning a single FUSE bit, significantly altering the derived FIELD_ENTROPY value when combined with an RTL key.
However, the primary objective of FIELD_ENTROPY is to inject fresh, device-specific entropy into the DICE chain, rather than to expand upon existing entropy tied to a vendor-owned RTL key.
Enabling flash-based injection of FIELD_ENTROPY preserves the property of introducing genuine new entropy for LDevID derivation.
Threat Analysis
The following table compares FUSE-based and flash-based FIELD_ENTROPY across known attack vectors:
| Attack Path | FUSE Attack Profile | Flash Attack Profile | FUSE Mitigation | Flash Mitigation |
|---|---|---|---|---|
| Malicious manufacturing spoofing on FIELD_ENTROPY | Expert | Expert | FIELD_ENTROPY obfuscation with class RTL key | Sames as FUSE Mitigation |
| Physical invasive attack | Expert | Intermediate | Shield FUSE IP (integration dependent) | N/A |
| Boot path tampering while retrieving FIELD_ENTROPY values | Expert | Expert | FIELD_ENTROPY obfuscation with class RTL key | Sames as FUSE Mitigation |
| Deriving die-specific keys from known FIELD_ENTROPY | Expert | Expert | Confine unobfuscated FIELD_ENTROPY and derivations to key vault | Sames as FUSE Mitigation |
Conclusion: Outside of physical invasive attacks (which require Expert-level capability for fuses and Intermediate for flash), the security profiles are not significantly different. The physical attack vector for flash can be further hardened by upgrading Caliptra's obfuscation to use a per-device unique key or PUF key (an integration-level change).
Implementation Timeline
Intercept the next Caliptra Core release (2.2).
Test Plan
The following test is focused on Caliptra Core functionalities.
- Ensure existing FIELD_ENTROPY usage using FUSE based input still works as expected.
- When non-FUSE-based input is selected, test the new
GET_LDEVIDCommand would obtain input and have said input properly used inLDevIDderivation. Use Known Answer Test for such derivation.
Maintenance
TBD