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