Patterns in the Secure Boot Chain

Definition:

  1. Firmware[N] - the N level firmware binary. Any firmware layer is updatable.

    Firmware[0] means the component verified by Hardware.

    Firmware[N] means the component verified by Firmware[N-1].

    It may include both code (Firmware[N].Code) and data (Firmware[N].Data).

  2. Firmware[N].Code - the code of the N level firmware binary.

    It may include the verifier (Firmware[N].Code.Verifier.)

  3. Firmware[N].Data - the data of the N level firmware binary.

    It may include the verification policy. (Firmware[N].Data.Policy.)

  4. Firmware[N].Code.Verifier - the verification function of the N level firmware binary.

  5. Firmware[N].Data.Policy - the policy data inside of the N level firmware binary. This data is used by the verification function. Both verification function and policy data have below subcategory:

    1. Boot - the firmware boot

    2. FirmwareUpdate - the firmware update (it may or might not include policy data)

    3. PolicyUpdate - the policy update. It may or might not exist.

    4. Recovery - the firmware recovery

    5. Communication - the firmware runtime communication

  6. Hardware – the hardware, including Register Transfer Level (RTL) and register. The hardware is not updatable. The hardware must be fused when it is shipped to the end user.

There are two types of verification:

  1. The verifier for boot (verified boot). The read-only code and read-only data are in this category. This category includes both initial installation and upgrade. For example, UEFI Secure Boot is for code installation, or signed capsule update is for code/data upgrade. In most cases, the verification is based upon a crypto-algorithm, such as Secure Hash Algorithm (SHA) or Rivest-Shamir-Adleman Algorithm (RSA). The policy data can be the hash value of the firmware or the public key hash of the firmware. Above 5.a, 5.b, 5.c, 5.d belongs to this type.

  2. The verifier for communication (verified communication). The read/write data are in this category. This category is for cross-boundary data passing such as SMM communication, including the UEFI non-volatile variable. In most cases, the verification is based upon the boundary check, valid range check, etc. Above 5.e belongs to this type.

Patterns for Verified Boot

Table 1-3: Patterns for Verified Boot

Item Entity Provider Location
TP Firmware[N].Code.Verifier.Boot (Firmware[N].Data.Policy.Boot, Firmware[N+1]) Firmware Owner Same as Firmware[N]
CDI Firmware[N] Firmware Owner Originally on Flash, loaded into RAM by Firmware[N-1]
UDI Firmware[N+1] Firmware Owner Originally on Flash, loaded into RAM by Firmware[N]

NOTE: If N == 0, Firmware[-1] means the hardware.

Patterns for Verified Policy Update

Table 1-4: Patterns for Verified Policy Update

Item Entity Provider Location
TP Firmware[N].Code.Verifier.PolicyUpdate (Firmware[N].Data.Policy.PolicyUpdate, Firmware[N].Data.Policy:New) Firmware Owner
CDI Firmware[N].Code.Verifier.PolicyUpdate + Firmware[N].Data.Policy.PolicyUpdate Firmware Owner In an isolated execution environment. As such the rest of Firmware[N] cannot tamper with it.
UDI Firmware[N].Data.Policy:New Policy Data Owner Memory, loaded into an isolated environment, by Firmware[N]. Code.Verifier. PolicyUpdate

Patterns for Verified Firmware Update

Table 1-5: Patterns for Verified Firmware Update

Item Entity Provider Location
TP Firmware[N].Code.Verifier.FirmwareUpdate (Firmware[N].Data.Policy.FirmwareUpdate, Firmware[N]:New) Firmware Owner
CDI Firmware[N] Firmware Owner Flash unlockable environment, loaded by Firmware[N-1]
UDI Firmware[N]:New Firmware Owner Flash unlockable environment, loaded by original Firmware[N]

Patterns for Verified Recovery

Table 1-6: Patterns for Verified Recovery

Item Entity Provider Location
TP Firmware[N].Code.Verifier.Recovery (Firmware[N].Data.Policy.Recovery, Firmware[N+1]:Recovery) Firmware Owner
CDI Firmware[N] Firmware Owner Originally on flash, loaded into RAM by Firmware[N-1]
UDI Firmware[N+1]:Recovery Firmware Owner Originally on recovery storage (Flash, USB, Hard drive), loaded into RAM by Firmware[N]

Patterns for Verified Runtime Communication

Table 1-7: Patterns for Verified Runtime Communication

Item Entity Provider Location
TP Firmware[N].Code.Verifier.RuntimeCommunication (Firmware[N].Data.Policy.RuntimeCommunication, Data:New) Firmware Owner
CDI Firmware[N].Code.Verifier.RuntimeCommunication + Firmware[N].Data.Policy.RuntimeCommunication Firmware Owner In an isolated execution environment. As such the rest of Firmware[N] cannot tamper it.
UDI Data:New Any Memory, loaded into an isolated environment, by Firmware[N]. Code.Verifier. PolicyUpdate.
This can be any Data, as long as the format is known by the producer and consumer.