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.