Browse Source

docs(auth): add more information about CoTs

Explain that platforms are free to define their own Chain of Trust (CoT)
based on their needs but default ones are provided in TF-A source code:
TBBR, dualroot and CCA.

Give a brief overview of the use case for each of these CoTs.

Simplified diagrams are also provided for the TBBR and dualroot CoTs -
CCA CoT is missing such a diagram right now, it should be provided as a
future improvement.

Also do some cosmetic changes along the way.

Signed-off-by: Sandrine Bailleux <sandrine.bailleux@arm.com>
Change-Id: I7c4014d4d12d852b0ae5632ba9c71a9ad266080a
pull/1999/merge
Sandrine Bailleux 9 months ago
parent
commit
5d9711fec3
  1. 100
      docs/design/trusted-board-boot.rst
  2. BIN
      docs/resources/diagrams/cot-dualroot.jpg
  3. BIN
      docs/resources/diagrams/cot-tbbr.jpg

100
docs/design/trusted-board-boot.rst

@ -1,24 +1,45 @@
Trusted Board Boot
==================
The Trusted Board Boot (TBB) feature prevents malicious firmware from running on
the platform by authenticating all firmware images up to and including the
normal world bootloader. It does this by establishing a Chain of Trust using
The `Trusted Board Boot` (TBB) feature prevents malicious firmware from running
on the platform by authenticating all firmware images up to and including the
normal world bootloader. It does this by establishing a `Chain of Trust` using
Public-Key-Cryptography Standards (PKCS).
This document describes the design of Trusted Firmware-A (TF-A) TBB, which is an
implementation of the `Trusted Board Boot Requirements (TBBR)`_ specification,
Arm DEN0006D. It should be used in conjunction with the
:ref:`Firmware Update (FWU)` design document, which implements a specific aspect
of the TBBR.
Arm DEN0006D. It should be used in conjunction with the :ref:`Firmware Update
(FWU)` design document, which implements a specific aspect of the TBBR.
Chain of Trust
--------------
A Chain of Trust (CoT) starts with a set of implicitly trusted components. On
the Arm development platforms, these components are:
A Chain of Trust (CoT) starts with a set of implicitly trusted components, which
are used to establish trust in the next layer of components, and so on, in a
`chained` manner.
- A SHA-256 hash of the Root of Trust Public Key (ROTPK). It is stored in the
The chain of trust depends on several factors, including:
- The set of firmware images in use on this platform.
Typically, most platforms share a common set of firmware images (BL1, BL2,
BL31, BL33) but extra platform-specific images might be required.
- The key provisioning scheme: which keys need to programmed into the device
and at which stage during the platform's manufacturing lifecycle.
- The key ownership model: who owns which key.
As these vary across platforms, chains of trust also vary across
platforms. Although each platform is free to define its own CoT based on its
needs, TF-A provides a set of "default" CoTs fitting some typical trust models,
which platforms may reuse. The rest of this section presents general concepts
which apply to all these default CoTs.
The implicitly trusted components forming the trust anchor are:
- A Root of Trust Public Key (ROTPK), or a hash of it.
On Arm development platforms, a SHA-256 hash of the ROTPK is stored in the
trusted root-key storage registers. Alternatively, a development ROTPK might
be used and its hash embedded into the BL1 and BL2 images (only for
development purposes).
@ -31,11 +52,11 @@ images. The certificates follow the `X.509 v3`_ standard. This standard
enables adding custom extensions to the certificates, which are used to store
essential information to establish the CoT.
In the TBB CoT all certificates are self-signed. There is no need for a
Certificate Authority (CA) because the CoT is not established by verifying the
validity of a certificate's issuer but by the content of the certificate
extensions. To sign the certificates, different signature schemes are available,
please refer to the :ref:`Build Options` for more details.
All certificates are self-signed. There is no need for a Certificate Authority
(CA) because the CoT is not established by verifying the validity of a
certificate's issuer but by the content of the certificate extensions. To sign
the certificates, different signature schemes are available, please refer to the
:ref:`Build Options` for more details.
The certificates are categorised as "Key" and "Content" certificates. Key
certificates are used to verify public keys which have been used to sign content
@ -43,10 +64,23 @@ certificates. Content certificates are used to store the hash of a boot loader
image. An image can be authenticated by calculating its hash and matching it
with the hash extracted from the content certificate. Various hash algorithms
are supported to calculate all hashes, please refer to the :ref:`Build Options`
for more details.. The public keys and hashes are included as non-standard
for more details. The public keys and hashes are included as non-standard
extension fields in the `X.509 v3`_ certificates.
The keys used to establish the CoT are:
The next sections now present specificities of each default CoT provided in
TF-A.
Default CoT #1: TBBR
~~~~~~~~~~~~~~~~~~~~
The `TBBR` CoT is named after the specification it follows to the letter.
In the TBBR CoT, all firmware binaries and certificates are (directly or
indirectly) linked to the Root of Trust Public Key (ROTPK). Typically, the same
vendor owns the ROTPK, the Trusted key and the Non-Trusted Key. Thus, this vendor
is involved in signing every BL3x Key Certificate.
The keys used to establish this CoT are:
- **Root of trust key**
@ -133,6 +167,40 @@ The following certificates are used to authenticate the images.
The SCP_BL2 and BL32 certificates are optional, but they must be present if the
corresponding SCP_BL2 or BL32 images are present.
The following diagram summarizes the part of the TBBR CoT enforced by BL2. Some
images (SCP, debug certificates, secure partitions, configuration files) are not
shown here for conciseness:
.. image:: ../resources/diagrams/cot-tbbr.jpg
Default CoT #2: Dualroot
~~~~~~~~~~~~~~~~~~~~~~~~
The `dualroot` CoT is targeted at systems where the Normal World firmware is
owned by a different entity than the Secure World Firmware, and those 2 entities
do not wish to share any keys or have any dependency between each other when it
comes to signing their respective images. It establishes 2 separate signing
domains, each with its own Root of Trust key. In that sense, this CoT has 2
roots of trust, hence the `dualroot` name.
Although the dualroot CoT reuses some of the TBBR CoT components and concepts,
it differs on the BL33 image's chain of trust, which is rooted into a new key,
called `Platform ROTPK`, or `PROTPK` for short.
The following diagram summarizes the part of the dualroot CoT enforced by
BL2. Some images (SCP, debug certificates, secure partitions, configuration
files) are not shown here for conciseness:
.. image:: ../resources/diagrams/cot-dualroot.jpg
Default CoT #3: CCA
~~~~~~~~~~~~~~~~~~~
This CoT is targeted at Arm CCA systems. The Arm CCA security model recommends
making supply chains for the Arm CCA firmware, the secure world firmware and the
platform owner firmware, independent. Hence, this CoT has 3 roots of trust, one
for each supply chain.
Trusted Board Boot Sequence
---------------------------

BIN
docs/resources/diagrams/cot-dualroot.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

BIN
docs/resources/diagrams/cot-tbbr.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Loading…
Cancel
Save