xref: /rk3399_ARM-atf/docs/design/trusted-board-boot.rst (revision 2afa143a4fb4873e6152e2d402de100ba02a7a3a)
18aa05055SPaul BeesleyTrusted Board Boot
28aa05055SPaul Beesley==================
340d553cfSPaul Beesley
45d9711feSSandrine BailleuxThe `Trusted Board Boot` (TBB) feature prevents malicious firmware from running
55d9711feSSandrine Bailleuxon the platform by authenticating all firmware images up to and including the
65d9711feSSandrine Bailleuxnormal world bootloader. It does this by establishing a `Chain of Trust` using
740d553cfSPaul BeesleyPublic-Key-Cryptography Standards (PKCS).
840d553cfSPaul Beesley
940d553cfSPaul BeesleyThis document describes the design of Trusted Firmware-A (TF-A) TBB, which is an
1040d553cfSPaul Beesleyimplementation of the `Trusted Board Boot Requirements (TBBR)`_ specification,
115d9711feSSandrine BailleuxArm DEN0006D. It should be used in conjunction with the :ref:`Firmware Update
125d9711feSSandrine Bailleux(FWU)` design document, which implements a specific aspect of the TBBR.
1340d553cfSPaul Beesley
1440d553cfSPaul BeesleyChain of Trust
1540d553cfSPaul Beesley--------------
1640d553cfSPaul Beesley
175d9711feSSandrine BailleuxA Chain of Trust (CoT) starts with a set of implicitly trusted components, which
185d9711feSSandrine Bailleuxare used to establish trust in the next layer of components, and so on, in a
195d9711feSSandrine Bailleux`chained` manner.
2040d553cfSPaul Beesley
215d9711feSSandrine BailleuxThe chain of trust depends on several factors, including:
225d9711feSSandrine Bailleux
235d9711feSSandrine Bailleux-  The set of firmware images in use on this platform.
245d9711feSSandrine Bailleux   Typically, most platforms share a common set of firmware images (BL1, BL2,
255d9711feSSandrine Bailleux   BL31, BL33) but extra platform-specific images might be required.
265d9711feSSandrine Bailleux
275d9711feSSandrine Bailleux-  The key provisioning scheme: which keys need to programmed into the device
285d9711feSSandrine Bailleux   and at which stage during the platform's manufacturing lifecycle.
295d9711feSSandrine Bailleux
305d9711feSSandrine Bailleux-  The key ownership model: who owns which key.
315d9711feSSandrine Bailleux
325d9711feSSandrine BailleuxAs these vary across platforms, chains of trust also vary across
335d9711feSSandrine Bailleuxplatforms. Although each platform is free to define its own CoT based on its
345d9711feSSandrine Bailleuxneeds, TF-A provides a set of "default" CoTs fitting some typical trust models,
355d9711feSSandrine Bailleuxwhich platforms may reuse. The rest of this section presents general concepts
365d9711feSSandrine Bailleuxwhich apply to all these default CoTs.
375d9711feSSandrine Bailleux
385d9711feSSandrine BailleuxThe implicitly trusted components forming the trust anchor are:
395d9711feSSandrine Bailleux
405d9711feSSandrine Bailleux-  A Root of Trust Public Key (ROTPK), or a hash of it.
415d9711feSSandrine Bailleux
425d9711feSSandrine Bailleux   On Arm development platforms, a SHA-256 hash of the ROTPK is stored in the
43316c5cc6SSandrine Bailleux   trusted root-key storage registers. Alternatively, a development ROTPK might
44316c5cc6SSandrine Bailleux   be used and its hash embedded into the BL1 and BL2 images (only for
45316c5cc6SSandrine Bailleux   development purposes).
4640d553cfSPaul Beesley
4740d553cfSPaul Beesley-  The BL1 image, on the assumption that it resides in ROM so cannot be
4840d553cfSPaul Beesley   tampered with.
4940d553cfSPaul Beesley
5040d553cfSPaul BeesleyThe remaining components in the CoT are either certificates or boot loader
5140d553cfSPaul Beesleyimages. The certificates follow the `X.509 v3`_ standard. This standard
5240d553cfSPaul Beesleyenables adding custom extensions to the certificates, which are used to store
5340d553cfSPaul Beesleyessential information to establish the CoT.
5440d553cfSPaul Beesley
555d9711feSSandrine BailleuxAll certificates are self-signed. There is no need for a Certificate Authority
565d9711feSSandrine Bailleux(CA) because the CoT is not established by verifying the validity of a
575d9711feSSandrine Bailleuxcertificate's issuer but by the content of the certificate extensions. To sign
585d9711feSSandrine Bailleuxthe certificates, different signature schemes are available, please refer to the
595d9711feSSandrine Bailleux:ref:`Build Options` for more details.
6040d553cfSPaul Beesley
6140d553cfSPaul BeesleyThe certificates are categorised as "Key" and "Content" certificates. Key
6240d553cfSPaul Beesleycertificates are used to verify public keys which have been used to sign content
6340d553cfSPaul Beesleycertificates. Content certificates are used to store the hash of a boot loader
6440d553cfSPaul Beesleyimage. An image can be authenticated by calculating its hash and matching it
65316c5cc6SSandrine Bailleuxwith the hash extracted from the content certificate. Various hash algorithms
66316c5cc6SSandrine Bailleuxare supported to calculate all hashes, please refer to the :ref:`Build Options`
675d9711feSSandrine Bailleuxfor more details. The public keys and hashes are included as non-standard
68316c5cc6SSandrine Bailleuxextension fields in the `X.509 v3`_ certificates.
6940d553cfSPaul Beesley
705d9711feSSandrine BailleuxThe next sections now present specificities of each default CoT provided in
715d9711feSSandrine BailleuxTF-A.
725d9711feSSandrine Bailleux
735d9711feSSandrine BailleuxDefault CoT #1: TBBR
745d9711feSSandrine Bailleux~~~~~~~~~~~~~~~~~~~~
755d9711feSSandrine Bailleux
765d9711feSSandrine BailleuxThe `TBBR` CoT is named after the specification it follows to the letter.
775d9711feSSandrine Bailleux
785d9711feSSandrine BailleuxIn the TBBR CoT, all firmware binaries and certificates are (directly or
795d9711feSSandrine Bailleuxindirectly) linked to the Root of Trust Public Key (ROTPK). Typically, the same
805d9711feSSandrine Bailleuxvendor owns the ROTPK, the Trusted key and the Non-Trusted Key. Thus, this vendor
815d9711feSSandrine Bailleuxis involved in signing every BL3x Key Certificate.
825d9711feSSandrine Bailleux
835d9711feSSandrine BailleuxThe keys used to establish this CoT are:
8440d553cfSPaul Beesley
8540d553cfSPaul Beesley-  **Root of trust key**
8640d553cfSPaul Beesley
87*2afa143aSSandrine Bailleux   The private part of this key is used to sign the trusted boot firmware
88*2afa143aSSandrine Bailleux   certificate and the trusted key certificate. The public part is the ROTPK.
8940d553cfSPaul Beesley
9040d553cfSPaul Beesley-  **Trusted world key**
9140d553cfSPaul Beesley
9240d553cfSPaul Beesley   The private part is used to sign the key certificates corresponding to the
9340d553cfSPaul Beesley   secure world images (SCP_BL2, BL31 and BL32). The public part is stored in
94*2afa143aSSandrine Bailleux   one of the extension fields in the trusted key certificate.
9540d553cfSPaul Beesley
9640d553cfSPaul Beesley-  **Non-trusted world key**
9740d553cfSPaul Beesley
9840d553cfSPaul Beesley   The private part is used to sign the key certificate corresponding to the
99*2afa143aSSandrine Bailleux   non-secure world image (BL33). The public part is stored in one of the
100*2afa143aSSandrine Bailleux   extension fields in the trusted key certificate.
10140d553cfSPaul Beesley
102316c5cc6SSandrine Bailleux-  **BL3X keys**
10340d553cfSPaul Beesley
10440d553cfSPaul Beesley   For each of SCP_BL2, BL31, BL32 and BL33, the private part is used to
105316c5cc6SSandrine Bailleux   sign the content certificate for the BL3X image. The public part is stored
10640d553cfSPaul Beesley   in one of the extension fields in the corresponding key certificate.
10740d553cfSPaul Beesley
10840d553cfSPaul BeesleyThe following images are included in the CoT:
10940d553cfSPaul Beesley
11040d553cfSPaul Beesley-  BL1
11140d553cfSPaul Beesley-  BL2
11240d553cfSPaul Beesley-  SCP_BL2 (optional)
11340d553cfSPaul Beesley-  BL31
11440d553cfSPaul Beesley-  BL33
11540d553cfSPaul Beesley-  BL32 (optional)
11640d553cfSPaul Beesley
11740d553cfSPaul BeesleyThe following certificates are used to authenticate the images.
11840d553cfSPaul Beesley
119*2afa143aSSandrine Bailleux-  **Trusted boot firmware certificate**
12040d553cfSPaul Beesley
121*2afa143aSSandrine Bailleux   It is self-signed with the private part of the ROT key. It contains a hash of
122*2afa143aSSandrine Bailleux   the BL2 image and hashes of various firmware configuration files
123*2afa143aSSandrine Bailleux   (TB_FW_CONFIG, HW_CONFIG, FW_CONFIG).
12440d553cfSPaul Beesley
12540d553cfSPaul Beesley-  **Trusted key certificate**
12640d553cfSPaul Beesley
12740d553cfSPaul Beesley   It is self-signed with the private part of the ROT key. It contains the
12840d553cfSPaul Beesley   public part of the trusted world key and the public part of the non-trusted
12940d553cfSPaul Beesley   world key.
13040d553cfSPaul Beesley
131*2afa143aSSandrine Bailleux-  **SCP firmware key certificate**
13240d553cfSPaul Beesley
13340d553cfSPaul Beesley   It is self-signed with the trusted world key. It contains the public part of
13440d553cfSPaul Beesley   the SCP_BL2 key.
13540d553cfSPaul Beesley
136*2afa143aSSandrine Bailleux-  **SCP firmware content certificate**
13740d553cfSPaul Beesley
13840d553cfSPaul Beesley   It is self-signed with the SCP_BL2 key. It contains a hash of the SCP_BL2
13940d553cfSPaul Beesley   image.
14040d553cfSPaul Beesley
141*2afa143aSSandrine Bailleux-  **SoC firmware key certificate**
14240d553cfSPaul Beesley
14340d553cfSPaul Beesley   It is self-signed with the trusted world key. It contains the public part of
14440d553cfSPaul Beesley   the BL31 key.
14540d553cfSPaul Beesley
146*2afa143aSSandrine Bailleux-  **SoC firmware content certificate**
14740d553cfSPaul Beesley
148*2afa143aSSandrine Bailleux   It is self-signed with the BL31 key. It contains hashes of the BL31 image and
149*2afa143aSSandrine Bailleux   its configuration file (SOC_FW_CONFIG).
15040d553cfSPaul Beesley
151*2afa143aSSandrine Bailleux-  **Trusted OS key certificate**
15240d553cfSPaul Beesley
15340d553cfSPaul Beesley   It is self-signed with the trusted world key. It contains the public part of
15440d553cfSPaul Beesley   the BL32 key.
15540d553cfSPaul Beesley
156*2afa143aSSandrine Bailleux-  **Trusted OS content certificate**
15740d553cfSPaul Beesley
158*2afa143aSSandrine Bailleux   It is self-signed with the BL32 key. It contains hashes of the BL32 image(s)
159*2afa143aSSandrine Bailleux   and its configuration file(s) (TOS_FW_CONFIG).
16040d553cfSPaul Beesley
161*2afa143aSSandrine Bailleux-  **Non-trusted firmware key certificate**
16240d553cfSPaul Beesley
16340d553cfSPaul Beesley   It is self-signed with the non-trusted world key. It contains the public
16440d553cfSPaul Beesley   part of the BL33 key.
16540d553cfSPaul Beesley
166*2afa143aSSandrine Bailleux-  **Non-trusted firmware content certificate**
16740d553cfSPaul Beesley
168*2afa143aSSandrine Bailleux   It is self-signed with the BL33 key. It contains hashes of the BL33 image and
169*2afa143aSSandrine Bailleux   its configuration file (NT_FW_CONFIG).
17040d553cfSPaul Beesley
171*2afa143aSSandrine BailleuxThe SCP firmware and Trusted OS certificates are optional, but they must be
172*2afa143aSSandrine Bailleuxpresent if the corresponding SCP_BL2 or BL32 images are present.
17340d553cfSPaul Beesley
1745d9711feSSandrine BailleuxThe following diagram summarizes the part of the TBBR CoT enforced by BL2. Some
1755d9711feSSandrine Bailleuximages (SCP, debug certificates, secure partitions, configuration files) are not
1765d9711feSSandrine Bailleuxshown here for conciseness:
1775d9711feSSandrine Bailleux
1785d9711feSSandrine Bailleux.. image:: ../resources/diagrams/cot-tbbr.jpg
1795d9711feSSandrine Bailleux
1805d9711feSSandrine BailleuxDefault CoT #2: Dualroot
1815d9711feSSandrine Bailleux~~~~~~~~~~~~~~~~~~~~~~~~
1825d9711feSSandrine Bailleux
1835d9711feSSandrine BailleuxThe `dualroot` CoT is targeted at systems where the Normal World firmware is
1845d9711feSSandrine Bailleuxowned by a different entity than the Secure World Firmware, and those 2 entities
1855d9711feSSandrine Bailleuxdo not wish to share any keys or have any dependency between each other when it
1865d9711feSSandrine Bailleuxcomes to signing their respective images. It establishes 2 separate signing
1875d9711feSSandrine Bailleuxdomains, each with its own Root of Trust key. In that sense, this CoT has 2
1885d9711feSSandrine Bailleuxroots of trust, hence the `dualroot` name.
1895d9711feSSandrine Bailleux
1905d9711feSSandrine BailleuxAlthough the dualroot CoT reuses some of the TBBR CoT components and concepts,
1915d9711feSSandrine Bailleuxit differs on the BL33 image's chain of trust, which is rooted into a new key,
1925d9711feSSandrine Bailleuxcalled `Platform ROTPK`, or `PROTPK` for short.
1935d9711feSSandrine Bailleux
1945d9711feSSandrine BailleuxThe following diagram summarizes the part of the dualroot CoT enforced by
1955d9711feSSandrine BailleuxBL2. Some images (SCP, debug certificates, secure partitions, configuration
1965d9711feSSandrine Bailleuxfiles) are not shown here for conciseness:
1975d9711feSSandrine Bailleux
1985d9711feSSandrine Bailleux.. image:: ../resources/diagrams/cot-dualroot.jpg
1995d9711feSSandrine Bailleux
2005d9711feSSandrine BailleuxDefault CoT #3: CCA
2015d9711feSSandrine Bailleux~~~~~~~~~~~~~~~~~~~
2025d9711feSSandrine Bailleux
2035d9711feSSandrine BailleuxThis CoT is targeted at Arm CCA systems. The Arm CCA security model recommends
2045d9711feSSandrine Bailleuxmaking supply chains for the Arm CCA firmware, the secure world firmware and the
2055d9711feSSandrine Bailleuxplatform owner firmware, independent. Hence, this CoT has 3 roots of trust, one
2065d9711feSSandrine Bailleuxfor each supply chain.
2075d9711feSSandrine Bailleux
20840d553cfSPaul BeesleyTrusted Board Boot Sequence
20940d553cfSPaul Beesley---------------------------
21040d553cfSPaul Beesley
21140d553cfSPaul BeesleyThe CoT is verified through the following sequence of steps. The system panics
21240d553cfSPaul Beesleyif any of the steps fail.
21340d553cfSPaul Beesley
21440d553cfSPaul Beesley-  BL1 loads and verifies the BL2 content certificate. The issuer public key is
21540d553cfSPaul Beesley   read from the verified certificate. A hash of that key is calculated and
21640d553cfSPaul Beesley   compared with the hash of the ROTPK read from the trusted root-key storage
21740d553cfSPaul Beesley   registers. If they match, the BL2 hash is read from the certificate.
21840d553cfSPaul Beesley
219e1c5026aSPaul Beesley   .. note::
220e1c5026aSPaul Beesley      The matching operation is platform specific and is currently
22140d553cfSPaul Beesley      unimplemented on the Arm development platforms.
22240d553cfSPaul Beesley
22340d553cfSPaul Beesley-  BL1 loads the BL2 image. Its hash is calculated and compared with the hash
22440d553cfSPaul Beesley   read from the certificate. Control is transferred to the BL2 image if all
22540d553cfSPaul Beesley   the comparisons succeed.
22640d553cfSPaul Beesley
22740d553cfSPaul Beesley-  BL2 loads and verifies the trusted key certificate. The issuer public key is
22840d553cfSPaul Beesley   read from the verified certificate. A hash of that key is calculated and
22940d553cfSPaul Beesley   compared with the hash of the ROTPK read from the trusted root-key storage
23040d553cfSPaul Beesley   registers. If the comparison succeeds, BL2 reads and saves the trusted and
23140d553cfSPaul Beesley   non-trusted world public keys from the verified certificate.
23240d553cfSPaul Beesley
23340d553cfSPaul BeesleyThe next two steps are executed for each of the SCP_BL2, BL31 & BL32 images.
23440d553cfSPaul BeesleyThe steps for the optional SCP_BL2 and BL32 images are skipped if these images
23540d553cfSPaul Beesleyare not present.
23640d553cfSPaul Beesley
23740d553cfSPaul Beesley-  BL2 loads and verifies the BL3x key certificate. The certificate signature
23840d553cfSPaul Beesley   is verified using the trusted world public key. If the signature
23940d553cfSPaul Beesley   verification succeeds, BL2 reads and saves the BL3x public key from the
24040d553cfSPaul Beesley   certificate.
24140d553cfSPaul Beesley
24240d553cfSPaul Beesley-  BL2 loads and verifies the BL3x content certificate. The signature is
24340d553cfSPaul Beesley   verified using the BL3x public key. If the signature verification succeeds,
24440d553cfSPaul Beesley   BL2 reads and saves the BL3x image hash from the certificate.
24540d553cfSPaul Beesley
24640d553cfSPaul BeesleyThe next two steps are executed only for the BL33 image.
24740d553cfSPaul Beesley
24840d553cfSPaul Beesley-  BL2 loads and verifies the BL33 key certificate. If the signature
24940d553cfSPaul Beesley   verification succeeds, BL2 reads and saves the BL33 public key from the
25040d553cfSPaul Beesley   certificate.
25140d553cfSPaul Beesley
25240d553cfSPaul Beesley-  BL2 loads and verifies the BL33 content certificate. If the signature
25340d553cfSPaul Beesley   verification succeeds, BL2 reads and saves the BL33 image hash from the
25440d553cfSPaul Beesley   certificate.
25540d553cfSPaul Beesley
25640d553cfSPaul BeesleyThe next step is executed for all the boot loader images.
25740d553cfSPaul Beesley
25840d553cfSPaul Beesley-  BL2 calculates the hash of each image. It compares it with the hash obtained
25940d553cfSPaul Beesley   from the corresponding content certificate. The image authentication succeeds
26040d553cfSPaul Beesley   if the hashes match.
26140d553cfSPaul Beesley
26240d553cfSPaul BeesleyThe Trusted Board Boot implementation spans both generic and platform-specific
26340d553cfSPaul BeesleyBL1 and BL2 code, and in tool code on the host build machine. The feature is
26443f35ef5SPaul Beesleyenabled through use of specific build flags as described in
26543f35ef5SPaul Beesley:ref:`Build Options`.
26640d553cfSPaul Beesley
26740d553cfSPaul BeesleyOn the host machine, a tool generates the certificates, which are included in
26840d553cfSPaul Beesleythe FIP along with the boot loader images. These certificates are loaded in
26940d553cfSPaul BeesleyTrusted SRAM using the IO storage framework. They are then verified by an
27040d553cfSPaul BeesleyAuthentication module included in TF-A.
27140d553cfSPaul Beesley
27240d553cfSPaul BeesleyThe mechanism used for generating the FIP and the Authentication module are
27340d553cfSPaul Beesleydescribed in the following sections.
27440d553cfSPaul Beesley
27540d553cfSPaul BeesleyAuthentication Framework
27640d553cfSPaul Beesley------------------------
27740d553cfSPaul Beesley
27840d553cfSPaul BeesleyThe authentication framework included in TF-A provides support to implement
27940d553cfSPaul Beesleythe desired trusted boot sequence. Arm platforms use this framework to
28034760951SPaul Beesleyimplement the boot requirements specified in the
28134760951SPaul Beesley`Trusted Board Boot Requirements (TBBR)`_ document.
28240d553cfSPaul Beesley
28340d553cfSPaul BeesleyMore information about the authentication framework can be found in the
28434760951SPaul Beesley:ref:`Authentication Framework & Chain of Trust` document.
28540d553cfSPaul Beesley
28640d553cfSPaul BeesleyCertificate Generation Tool
28740d553cfSPaul Beesley---------------------------
28840d553cfSPaul Beesley
28940d553cfSPaul BeesleyThe ``cert_create`` tool is built and runs on the host machine as part of the
29040d553cfSPaul BeesleyTF-A build process when ``GENERATE_COT=1``. It takes the boot loader images
291616b3ce2SRobin van der Grachtand keys as inputs and generates the certificates (in DER format) required to
292616b3ce2SRobin van der Grachtestablish the CoT. The input keys must either be a file in PEM format or a
293616b3ce2SRobin van der GrachtPKCS11 URI in case a HSM is used. New keys can be generated by the tool in
294616b3ce2SRobin van der Grachtcase they are not provided. The certificates are then passed as inputs to
295616b3ce2SRobin van der Grachtthe ``fiptool`` utility for creating the FIP.
29640d553cfSPaul Beesley
297316c5cc6SSandrine BailleuxThe certificates are also stored individually in the output build directory.
29840d553cfSPaul Beesley
29943f35ef5SPaul BeesleyThe tool resides in the ``tools/cert_create`` directory. It uses the OpenSSL SSL
30043f35ef5SPaul Beesleylibrary version to generate the X.509 certificates. The specific version of the
30143f35ef5SPaul Beesleylibrary that is required is given in the :ref:`Prerequisites` document.
30243f35ef5SPaul Beesley
30343f35ef5SPaul BeesleyInstructions for building and using the tool can be found at
30443f35ef5SPaul Beesley:ref:`tools_build_cert_create`.
30540d553cfSPaul Beesley
306f97062a5SSumit GargAuthenticated Encryption Framework
307f97062a5SSumit Garg----------------------------------
308f97062a5SSumit Garg
309f97062a5SSumit GargThe authenticated encryption framework included in TF-A provides support to
310f97062a5SSumit Gargimplement the optional firmware encryption feature. This feature can be
311f97062a5SSumit Gargoptionally enabled on platforms to implement the optional requirement:
312f97062a5SSumit GargR060_TBBR_FUNCTION as specified in the `Trusted Board Boot Requirements (TBBR)`_
313f97062a5SSumit Gargdocument.
314f97062a5SSumit Garg
315f97062a5SSumit GargFirmware Encryption Tool
316f97062a5SSumit Garg------------------------
317f97062a5SSumit Garg
318f97062a5SSumit GargThe ``encrypt_fw`` tool is built and runs on the host machine as part of the
319f97062a5SSumit GargTF-A build process when ``DECRYPTION_SUPPORT != none``. It takes the plain
320f97062a5SSumit Gargfirmware image as input and generates the encrypted firmware image which can
321f97062a5SSumit Gargthen be passed as input to the ``fiptool`` utility for creating the FIP.
322f97062a5SSumit Garg
323f97062a5SSumit GargThe encrypted firmwares are also stored individually in the output build
324f97062a5SSumit Gargdirectory.
325f97062a5SSumit Garg
326f97062a5SSumit GargThe tool resides in the ``tools/encrypt_fw`` directory. It uses OpenSSL SSL
327f97062a5SSumit Garglibrary version 1.0.1 or later to do authenticated encryption operation.
328f97062a5SSumit GargInstructions for building and using the tool can be found in the
329f97062a5SSumit Garg:ref:`tools_build_enctool`.
330f97062a5SSumit Garg
33140d553cfSPaul Beesley--------------
33240d553cfSPaul Beesley
333316c5cc6SSandrine Bailleux*Copyright (c) 2015-2020, Arm Limited and Contributors. All rights reserved.*
33440d553cfSPaul Beesley
33540d553cfSPaul Beesley.. _X.509 v3: https://tools.ietf.org/rfc/rfc5280.txt
3364290d343SSandrine Bailleux.. _Trusted Board Boot Requirements (TBBR): https://developer.arm.com/docs/den0006/latest
337