18aa05055SPaul BeesleyTrusted Board Boot 28aa05055SPaul Beesley================== 340d553cfSPaul Beesley 440d553cfSPaul BeesleyThe Trusted Board Boot (TBB) feature prevents malicious firmware from running on 540d553cfSPaul Beesleythe platform by authenticating all firmware images up to and including the 640d553cfSPaul Beesleynormal 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, 1134760951SPaul BeesleyArm DEN0006D. It should be used in conjunction with the 1234760951SPaul Beesley:ref:`Firmware Update (FWU)` design document, which implements a specific aspect 1334760951SPaul Beesleyof the TBBR. 1440d553cfSPaul Beesley 1540d553cfSPaul BeesleyChain of Trust 1640d553cfSPaul Beesley-------------- 1740d553cfSPaul Beesley 1840d553cfSPaul BeesleyA Chain of Trust (CoT) starts with a set of implicitly trusted components. On 1940d553cfSPaul Beesleythe Arm development platforms, these components are: 2040d553cfSPaul Beesley 2140d553cfSPaul Beesley- A SHA-256 hash of the Root of Trust Public Key (ROTPK). It is stored in the 2240d553cfSPaul Beesley trusted root-key storage registers. 2340d553cfSPaul Beesley 2440d553cfSPaul Beesley- The BL1 image, on the assumption that it resides in ROM so cannot be 2540d553cfSPaul Beesley tampered with. 2640d553cfSPaul Beesley 2740d553cfSPaul BeesleyThe remaining components in the CoT are either certificates or boot loader 2840d553cfSPaul Beesleyimages. The certificates follow the `X.509 v3`_ standard. This standard 2940d553cfSPaul Beesleyenables adding custom extensions to the certificates, which are used to store 3040d553cfSPaul Beesleyessential information to establish the CoT. 3140d553cfSPaul Beesley 3240d553cfSPaul BeesleyIn the TBB CoT all certificates are self-signed. There is no need for a 3340d553cfSPaul BeesleyCertificate Authority (CA) because the CoT is not established by verifying the 3440d553cfSPaul Beesleyvalidity of a certificate's issuer but by the content of the certificate 3540d553cfSPaul Beesleyextensions. To sign the certificates, the PKCS#1 SHA-256 with RSA Encryption 3640d553cfSPaul Beesleysignature scheme is used with a RSA key length of 2048 bits. Future version of 3740d553cfSPaul BeesleyTF-A will support additional cryptographic algorithms. 3840d553cfSPaul Beesley 3940d553cfSPaul BeesleyThe certificates are categorised as "Key" and "Content" certificates. Key 4040d553cfSPaul Beesleycertificates are used to verify public keys which have been used to sign content 4140d553cfSPaul Beesleycertificates. Content certificates are used to store the hash of a boot loader 4240d553cfSPaul Beesleyimage. An image can be authenticated by calculating its hash and matching it 4340d553cfSPaul Beesleywith the hash extracted from the content certificate. The SHA-256 function is 4440d553cfSPaul Beesleyused to calculate all hashes. The public keys and hashes are included as 4540d553cfSPaul Beesleynon-standard extension fields in the `X.509 v3`_ certificates. 4640d553cfSPaul Beesley 4740d553cfSPaul BeesleyThe keys used to establish the CoT are: 4840d553cfSPaul Beesley 4940d553cfSPaul Beesley- **Root of trust key** 5040d553cfSPaul Beesley 5140d553cfSPaul Beesley The private part of this key is used to sign the BL2 content certificate and 5240d553cfSPaul Beesley the trusted key certificate. The public part is the ROTPK. 5340d553cfSPaul Beesley 5440d553cfSPaul Beesley- **Trusted world key** 5540d553cfSPaul Beesley 5640d553cfSPaul Beesley The private part is used to sign the key certificates corresponding to the 5740d553cfSPaul Beesley secure world images (SCP_BL2, BL31 and BL32). The public part is stored in 5840d553cfSPaul Beesley one of the extension fields in the trusted world certificate. 5940d553cfSPaul Beesley 6040d553cfSPaul Beesley- **Non-trusted world key** 6140d553cfSPaul Beesley 6240d553cfSPaul Beesley The private part is used to sign the key certificate corresponding to the 6340d553cfSPaul Beesley non secure world image (BL33). The public part is stored in one of the 6440d553cfSPaul Beesley extension fields in the trusted world certificate. 6540d553cfSPaul Beesley 6640d553cfSPaul Beesley- **BL3-X keys** 6740d553cfSPaul Beesley 6840d553cfSPaul Beesley For each of SCP_BL2, BL31, BL32 and BL33, the private part is used to 6940d553cfSPaul Beesley sign the content certificate for the BL3-X image. The public part is stored 7040d553cfSPaul Beesley in one of the extension fields in the corresponding key certificate. 7140d553cfSPaul Beesley 7240d553cfSPaul BeesleyThe following images are included in the CoT: 7340d553cfSPaul Beesley 7440d553cfSPaul Beesley- BL1 7540d553cfSPaul Beesley- BL2 7640d553cfSPaul Beesley- SCP_BL2 (optional) 7740d553cfSPaul Beesley- BL31 7840d553cfSPaul Beesley- BL33 7940d553cfSPaul Beesley- BL32 (optional) 8040d553cfSPaul Beesley 8140d553cfSPaul BeesleyThe following certificates are used to authenticate the images. 8240d553cfSPaul Beesley 8340d553cfSPaul Beesley- **BL2 content certificate** 8440d553cfSPaul Beesley 8540d553cfSPaul Beesley It is self-signed with the private part of the ROT key. It contains a hash 8640d553cfSPaul Beesley of the BL2 image. 8740d553cfSPaul Beesley 8840d553cfSPaul Beesley- **Trusted key certificate** 8940d553cfSPaul Beesley 9040d553cfSPaul Beesley It is self-signed with the private part of the ROT key. It contains the 9140d553cfSPaul Beesley public part of the trusted world key and the public part of the non-trusted 9240d553cfSPaul Beesley world key. 9340d553cfSPaul Beesley 9440d553cfSPaul Beesley- **SCP_BL2 key certificate** 9540d553cfSPaul Beesley 9640d553cfSPaul Beesley It is self-signed with the trusted world key. It contains the public part of 9740d553cfSPaul Beesley the SCP_BL2 key. 9840d553cfSPaul Beesley 9940d553cfSPaul Beesley- **SCP_BL2 content certificate** 10040d553cfSPaul Beesley 10140d553cfSPaul Beesley It is self-signed with the SCP_BL2 key. It contains a hash of the SCP_BL2 10240d553cfSPaul Beesley image. 10340d553cfSPaul Beesley 10440d553cfSPaul Beesley- **BL31 key certificate** 10540d553cfSPaul Beesley 10640d553cfSPaul Beesley It is self-signed with the trusted world key. It contains the public part of 10740d553cfSPaul Beesley the BL31 key. 10840d553cfSPaul Beesley 10940d553cfSPaul Beesley- **BL31 content certificate** 11040d553cfSPaul Beesley 11140d553cfSPaul Beesley It is self-signed with the BL31 key. It contains a hash of the BL31 image. 11240d553cfSPaul Beesley 11340d553cfSPaul Beesley- **BL32 key certificate** 11440d553cfSPaul Beesley 11540d553cfSPaul Beesley It is self-signed with the trusted world key. It contains the public part of 11640d553cfSPaul Beesley the BL32 key. 11740d553cfSPaul Beesley 11840d553cfSPaul Beesley- **BL32 content certificate** 11940d553cfSPaul Beesley 12040d553cfSPaul Beesley It is self-signed with the BL32 key. It contains a hash of the BL32 image. 12140d553cfSPaul Beesley 12240d553cfSPaul Beesley- **BL33 key certificate** 12340d553cfSPaul Beesley 12440d553cfSPaul Beesley It is self-signed with the non-trusted world key. It contains the public 12540d553cfSPaul Beesley part of the BL33 key. 12640d553cfSPaul Beesley 12740d553cfSPaul Beesley- **BL33 content certificate** 12840d553cfSPaul Beesley 12940d553cfSPaul Beesley It is self-signed with the BL33 key. It contains a hash of the BL33 image. 13040d553cfSPaul Beesley 13140d553cfSPaul BeesleyThe SCP_BL2 and BL32 certificates are optional, but they must be present if the 13240d553cfSPaul Beesleycorresponding SCP_BL2 or BL32 images are present. 13340d553cfSPaul Beesley 13440d553cfSPaul BeesleyTrusted Board Boot Sequence 13540d553cfSPaul Beesley--------------------------- 13640d553cfSPaul Beesley 13740d553cfSPaul BeesleyThe CoT is verified through the following sequence of steps. The system panics 13840d553cfSPaul Beesleyif any of the steps fail. 13940d553cfSPaul Beesley 14040d553cfSPaul Beesley- BL1 loads and verifies the BL2 content certificate. The issuer public key is 14140d553cfSPaul Beesley read from the verified certificate. A hash of that key is calculated and 14240d553cfSPaul Beesley compared with the hash of the ROTPK read from the trusted root-key storage 14340d553cfSPaul Beesley registers. If they match, the BL2 hash is read from the certificate. 14440d553cfSPaul Beesley 145e1c5026aSPaul Beesley .. note:: 146e1c5026aSPaul Beesley The matching operation is platform specific and is currently 14740d553cfSPaul Beesley unimplemented on the Arm development platforms. 14840d553cfSPaul Beesley 14940d553cfSPaul Beesley- BL1 loads the BL2 image. Its hash is calculated and compared with the hash 15040d553cfSPaul Beesley read from the certificate. Control is transferred to the BL2 image if all 15140d553cfSPaul Beesley the comparisons succeed. 15240d553cfSPaul Beesley 15340d553cfSPaul Beesley- BL2 loads and verifies the trusted key certificate. The issuer public key is 15440d553cfSPaul Beesley read from the verified certificate. A hash of that key is calculated and 15540d553cfSPaul Beesley compared with the hash of the ROTPK read from the trusted root-key storage 15640d553cfSPaul Beesley registers. If the comparison succeeds, BL2 reads and saves the trusted and 15740d553cfSPaul Beesley non-trusted world public keys from the verified certificate. 15840d553cfSPaul Beesley 15940d553cfSPaul BeesleyThe next two steps are executed for each of the SCP_BL2, BL31 & BL32 images. 16040d553cfSPaul BeesleyThe steps for the optional SCP_BL2 and BL32 images are skipped if these images 16140d553cfSPaul Beesleyare not present. 16240d553cfSPaul Beesley 16340d553cfSPaul Beesley- BL2 loads and verifies the BL3x key certificate. The certificate signature 16440d553cfSPaul Beesley is verified using the trusted world public key. If the signature 16540d553cfSPaul Beesley verification succeeds, BL2 reads and saves the BL3x public key from the 16640d553cfSPaul Beesley certificate. 16740d553cfSPaul Beesley 16840d553cfSPaul Beesley- BL2 loads and verifies the BL3x content certificate. The signature is 16940d553cfSPaul Beesley verified using the BL3x public key. If the signature verification succeeds, 17040d553cfSPaul Beesley BL2 reads and saves the BL3x image hash from the certificate. 17140d553cfSPaul Beesley 17240d553cfSPaul BeesleyThe next two steps are executed only for the BL33 image. 17340d553cfSPaul Beesley 17440d553cfSPaul Beesley- BL2 loads and verifies the BL33 key certificate. If the signature 17540d553cfSPaul Beesley verification succeeds, BL2 reads and saves the BL33 public key from the 17640d553cfSPaul Beesley certificate. 17740d553cfSPaul Beesley 17840d553cfSPaul Beesley- BL2 loads and verifies the BL33 content certificate. If the signature 17940d553cfSPaul Beesley verification succeeds, BL2 reads and saves the BL33 image hash from the 18040d553cfSPaul Beesley certificate. 18140d553cfSPaul Beesley 18240d553cfSPaul BeesleyThe next step is executed for all the boot loader images. 18340d553cfSPaul Beesley 18440d553cfSPaul Beesley- BL2 calculates the hash of each image. It compares it with the hash obtained 18540d553cfSPaul Beesley from the corresponding content certificate. The image authentication succeeds 18640d553cfSPaul Beesley if the hashes match. 18740d553cfSPaul Beesley 18840d553cfSPaul BeesleyThe Trusted Board Boot implementation spans both generic and platform-specific 18940d553cfSPaul BeesleyBL1 and BL2 code, and in tool code on the host build machine. The feature is 19043f35ef5SPaul Beesleyenabled through use of specific build flags as described in 19143f35ef5SPaul Beesley:ref:`Build Options`. 19240d553cfSPaul Beesley 19340d553cfSPaul BeesleyOn the host machine, a tool generates the certificates, which are included in 19440d553cfSPaul Beesleythe FIP along with the boot loader images. These certificates are loaded in 19540d553cfSPaul BeesleyTrusted SRAM using the IO storage framework. They are then verified by an 19640d553cfSPaul BeesleyAuthentication module included in TF-A. 19740d553cfSPaul Beesley 19840d553cfSPaul BeesleyThe mechanism used for generating the FIP and the Authentication module are 19940d553cfSPaul Beesleydescribed in the following sections. 20040d553cfSPaul Beesley 20140d553cfSPaul BeesleyAuthentication Framework 20240d553cfSPaul Beesley------------------------ 20340d553cfSPaul Beesley 20440d553cfSPaul BeesleyThe authentication framework included in TF-A provides support to implement 20540d553cfSPaul Beesleythe desired trusted boot sequence. Arm platforms use this framework to 20634760951SPaul Beesleyimplement the boot requirements specified in the 20734760951SPaul Beesley`Trusted Board Boot Requirements (TBBR)`_ document. 20840d553cfSPaul Beesley 20940d553cfSPaul BeesleyMore information about the authentication framework can be found in the 21034760951SPaul Beesley:ref:`Authentication Framework & Chain of Trust` document. 21140d553cfSPaul Beesley 21240d553cfSPaul BeesleyCertificate Generation Tool 21340d553cfSPaul Beesley--------------------------- 21440d553cfSPaul Beesley 21540d553cfSPaul BeesleyThe ``cert_create`` tool is built and runs on the host machine as part of the 21640d553cfSPaul BeesleyTF-A build process when ``GENERATE_COT=1``. It takes the boot loader images 21740d553cfSPaul Beesleyand keys as inputs (keys must be in PEM format) and generates the 21840d553cfSPaul Beesleycertificates (in DER format) required to establish the CoT. New keys can be 21940d553cfSPaul Beesleygenerated by the tool in case they are not provided. The certificates are then 22040d553cfSPaul Beesleypassed as inputs to the ``fiptool`` utility for creating the FIP. 22140d553cfSPaul Beesley 22240d553cfSPaul BeesleyThe certificates are also stored individually in the in the output build 22340d553cfSPaul Beesleydirectory. 22440d553cfSPaul Beesley 22543f35ef5SPaul BeesleyThe tool resides in the ``tools/cert_create`` directory. It uses the OpenSSL SSL 22643f35ef5SPaul Beesleylibrary version to generate the X.509 certificates. The specific version of the 22743f35ef5SPaul Beesleylibrary that is required is given in the :ref:`Prerequisites` document. 22843f35ef5SPaul Beesley 22943f35ef5SPaul BeesleyInstructions for building and using the tool can be found at 23043f35ef5SPaul Beesley:ref:`tools_build_cert_create`. 23140d553cfSPaul Beesley 232*f97062a5SSumit GargAuthenticated Encryption Framework 233*f97062a5SSumit Garg---------------------------------- 234*f97062a5SSumit Garg 235*f97062a5SSumit GargThe authenticated encryption framework included in TF-A provides support to 236*f97062a5SSumit Gargimplement the optional firmware encryption feature. This feature can be 237*f97062a5SSumit Gargoptionally enabled on platforms to implement the optional requirement: 238*f97062a5SSumit GargR060_TBBR_FUNCTION as specified in the `Trusted Board Boot Requirements (TBBR)`_ 239*f97062a5SSumit Gargdocument. 240*f97062a5SSumit Garg 241*f97062a5SSumit GargNote that due to security considerations and complexity of this feature, it is 242*f97062a5SSumit Gargmarked as experimental. 243*f97062a5SSumit Garg 244*f97062a5SSumit GargFirmware Encryption Tool 245*f97062a5SSumit Garg------------------------ 246*f97062a5SSumit Garg 247*f97062a5SSumit GargThe ``encrypt_fw`` tool is built and runs on the host machine as part of the 248*f97062a5SSumit GargTF-A build process when ``DECRYPTION_SUPPORT != none``. It takes the plain 249*f97062a5SSumit Gargfirmware image as input and generates the encrypted firmware image which can 250*f97062a5SSumit Gargthen be passed as input to the ``fiptool`` utility for creating the FIP. 251*f97062a5SSumit Garg 252*f97062a5SSumit GargThe encrypted firmwares are also stored individually in the output build 253*f97062a5SSumit Gargdirectory. 254*f97062a5SSumit Garg 255*f97062a5SSumit GargThe tool resides in the ``tools/encrypt_fw`` directory. It uses OpenSSL SSL 256*f97062a5SSumit Garglibrary version 1.0.1 or later to do authenticated encryption operation. 257*f97062a5SSumit GargInstructions for building and using the tool can be found in the 258*f97062a5SSumit Garg:ref:`tools_build_enctool`. 259*f97062a5SSumit Garg 26040d553cfSPaul Beesley-------------- 26140d553cfSPaul Beesley 26240d553cfSPaul Beesley*Copyright (c) 2015-2019, Arm Limited and Contributors. All rights reserved.* 26340d553cfSPaul Beesley 26440d553cfSPaul Beesley.. _X.509 v3: https://tools.ietf.org/rfc/rfc5280.txt 26534760951SPaul Beesley.. _Trusted Board Boot Requirements (TBBR): https://developer.arm.com/docs/den0006/latest/trusted-board-boot-requirements-client-tbbr-client-armv8-a 266