1 Trusted Board Boot Design Guide 2 =============================== 3 4 Contents : 5 6 1. [Introduction](#1--introduction) 7 2. [Chain of Trust](#2--chain-of-trust) 8 3. [Trusted Board Boot Sequence](#3--trusted-board-boot-sequence) 9 4. [Authentication Module](#4--authentication-module) 10 5. [Certificate Generation Tool](#5--certificate-generation-tool) 11 12 13 1. Introduction 14 ---------------- 15 16 The Trusted Board Boot (TBB) feature prevents malicious firmware from running on 17 the platform by authenticating all firmware images up to and including the 18 normal world bootloader. It does this by establishing a Chain of Trust using 19 Public-Key-Cryptography Standards (PKCS). 20 21 This document describes the design of the ARM Trusted Firmware TBB 22 implementation. The current implementation is a proof of concept; future 23 versions will provide stronger architectural interfaces and implement the 24 missing functionality required in a production TBB-enabled system. 25 26 27 2. Chain of Trust 28 ------------------ 29 30 A Chain of Trust (CoT) starts with a set of implicitly trusted components. On 31 the ARM development platforms, these components are: 32 33 * A SHA-256 hash of the Root of Trust Public Key (ROTPK). It is stored in the 34 trusted root-key storage registers. 35 36 * The BL1 image, on the assumption that it resides in ROM so cannot be 37 tampered with. 38 39 The remaining components in the CoT are either certificates or boot loader 40 images. The certificates follow the [X.509 v3] standard. This standard 41 enables adding custom extensions to the certificates, which are used to store 42 essential information to establish the CoT. 43 44 In the TBB CoT all certificates are self-signed. There is no need for a 45 Certificate Authority (CA) because the CoT is not established by verifying the 46 validity of a certificate's issuer but by the content of the certificate 47 extensions. To sign the certificates, the PKCS#1 SHA-1 with RSA Encryption 48 signature scheme is used with a RSA key length of 2048 bits. Future version of 49 Trusted Firmware will replace SHA-1 usage with SHA-256 and support additional 50 cryptographic algorithms. 51 52 The certificates are categorised as "Key" and "Content" certificates. Key 53 certificates are used to verify public keys which have been used to sign content 54 certificates. Content certificates are used to store the hash of a boot loader 55 image. An image can be authenticated by calculating its hash and matching it 56 with the hash extracted from the content certificate. The SHA-256 function is 57 used to calculate all hashes. The public keys and hashes are included as 58 non-standard extension fields in the [X.509 v3] certificates. 59 60 The keys used to establish the CoT are: 61 62 * **Root of trust key** 63 64 The private part of this key is used to sign the BL2 content certificate and 65 the trusted key certificate. The public part is the ROTPK. 66 67 * **Trusted world key** 68 69 The private part is used to sign the key certificates corresponding to the 70 secure world images (BL3-0, BL3-1 and BL3-2). The public part is stored in 71 one of the extension fields in the trusted world certificate. 72 73 * **Non-trusted world key** 74 75 The private part is used to sign the key certificate corresponding to the 76 non secure world image (BL3-3). The public part is stored in one of the 77 extension fields in the trusted world certificate. 78 79 * **BL3-X keys** 80 81 For each of BL3-0, BL3-1, BL3-2 and BL3-3, the private part is used to sign 82 the content certificate for the BL3-X image. The public part is stored in 83 one of the extension fields in the corresponding key certificate. 84 85 The following images are included in the CoT: 86 87 * BL1 88 * BL2 89 * BL3-0 (optional) 90 * BL3-1 91 * BL3-3 92 * BL3-2 (optional) 93 94 The following certificates are used to authenticate the images. 95 96 * **BL2 content certificate** 97 98 It is self-signed with the private part of the ROT key. It contains a hash 99 of the BL2 image. 100 101 * **Trusted key certificate** 102 103 It is self-signed with the private part of the ROT key. It contains the 104 public part of the trusted world key and the public part of the non-trusted 105 world key. 106 107 * **BL3-0 key certificate** 108 109 It is self-signed with the trusted world key. It contains the public part of 110 the BL3-0 key. 111 112 * **BL3-0 content certificate** 113 114 It is self-signed with the BL3-0 key. It contains a hash of the BL3-0 image. 115 116 * **BL3-1 key certificate** 117 118 It is self-signed with the trusted world key. It contains the public part of 119 the BL3-1 key. 120 121 * **BL3-1 content certificate** 122 123 It is self-signed with the BL3-1 key. It contains a hash of the BL3-1 image. 124 125 * **BL3-2 key certificate** 126 127 It is self-signed with the trusted world key. It contains the public part of 128 the BL3-2 key. 129 130 * **BL3-2 content certificate** 131 132 It is self-signed with the BL3-2 key. It contains a hash of the BL3-2 image. 133 134 * **BL3-3 key certificate** 135 136 It is self-signed with the non-trusted world key. It contains the public 137 part of the BL3-3 key. 138 139 * **BL3-3 content certificate** 140 141 It is self-signed with the BL3-3 key. It contains a hash of the BL3-3 image. 142 143 The BL3-0 and BL3-2 certificates are optional, but they must be present if the 144 corresponding BL3-0 or BL3-2 images are present. 145 146 147 3. Trusted Board Boot Sequence 148 ------------------------------- 149 150 The CoT is verified through the following sequence of steps. The system panics 151 if any of the steps fail. 152 153 * BL1 loads and verifies the BL2 content certificate. The issuer public key is 154 read from the verified certificate. A hash of that key is calculated and 155 compared with the hash of the ROTPK read from the trusted root-key storage 156 registers. If they match, the BL2 hash is read from the certificate. 157 158 Note: the matching operation is platform specific and is currently 159 unimplemented on the ARM development platforms. 160 161 * BL1 loads the BL2 image. Its hash is calculated and compared with the hash 162 read from the certificate. Control is transferred to the BL2 image if all 163 the comparisons succeed. 164 165 * BL2 loads and verifies the trusted key certificate. The issuer public key is 166 read from the verified certificate. A hash of that key is calculated and 167 compared with the hash of the ROTPK read from the trusted root-key storage 168 registers. If the comparison succeeds, BL2 reads and saves the trusted and 169 non-trusted world public keys from the verified certificate. 170 171 The next two steps are executed for each of the BL3-0, BL3-1 & BL3-2 images. The 172 steps for the optional BL3-0 and BL3-2 images are skipped if these images are 173 not present. 174 175 * BL2 loads and verifies the BL3-x key certificate. The certificate signature 176 is verified using the trusted world public key. If the signature 177 verification succeeds, BL2 reads and saves the BL3-x public key from the 178 certificate. 179 180 * BL2 loads and verifies the BL3-x content certificate. The signature is 181 verified using the BL3-x public key. If the signature verification succeeds, 182 BL2 reads and saves the BL3-x image hash from the certificate. 183 184 The next two steps are executed only for the BL3-3 image. 185 186 * BL2 loads and verifies the BL3-3 key certificate. If the signature 187 verification succeeds, BL2 reads and saves the BL3-3 public key from the 188 certificate. 189 190 * BL2 loads and verifies the BL3-3 content certificate. If the signature 191 verification succeeds, BL2 reads and saves the BL3-3 image hash from the 192 certificate. 193 194 The next step is executed for all the boot loader images. 195 196 * BL2 calculates the hash of each image. It compares it with the hash obtained 197 from the corresponding content certificate. The image authentication succeeds 198 if the hashes match. 199 200 The Trusted Board Boot implementation spans both generic and platform-specific 201 BL1 and BL2 code, and in tool code on the host build machine. The feature is 202 enabled through use of specific build flags as described in the [User Guide]. 203 204 On the host machine, a tool generates the certificates, which are included in 205 the FIP along with the boot loader images. These certificates are loaded in 206 Trusted SRAM using the IO storage framework. They are then verified by an 207 Authentication module included in the Trusted Firmware. 208 209 The mechanism used for generating the FIP and the Authentication module are 210 described in the following sections. 211 212 213 4. Authentication Module 214 ------------------------- 215 216 The authentication module implements the required support to authenticate the 217 corresponding certificates or images at each step in the Trusted Board Boot 218 sequence. The module relies on the PolarSSL library (v1.3.9) to perform the 219 following operations: 220 221 * Parsing X.509 certificates and verifying them using SHA-1 with RSA 222 Encryption. 223 * Extracting public keys and hashes from the certificates. 224 * Generating hashes (SHA-256) of boot loader images 225 226 At each step, the module is responsible for allocating memory to store the 227 public keys or hashes that will be used in later steps. The step identifier is 228 used to determine what information must be saved, according to the CoT model 229 detailed in the previous sections. 230 231 The authentication module resides in the `common/auth/polarssl` directory. 232 Instructions for including the necessary modules of the PolarSSL SSL library and 233 building the authentication module can be found in the [User Guide]. 234 235 236 5. Certificate Generation Tool 237 ------------------------------- 238 239 The `cert_create` tool is built and runs on the host machine as part of the 240 Trusted Firmware build process when `GENERATE_COT=1`. It takes the boot loader 241 images and keys as inputs (keys must be in PEM format) and generates the 242 certificates (in DER format) required to establish the CoT. New keys can be 243 generated by the tool in case they are not provided. The certificates are then 244 passed as inputs to the `fip_create` tool for creating the FIP. 245 246 The certificates are also stored individually in the in the output build 247 directory. 248 249 The tool resides in the `tools/cert_create` directory. It uses OpenSSL SSL 250 library version 1.0.1 or later to generate the X.509 certificates. Instructions 251 for building and using the tool can be found in the [User Guide]. 252 253 254 - - - - - - - - - - - - - - - - - - - - - - - - - - 255 256 _Copyright (c) 2015, ARM Limited and Contributors. All rights reserved._ 257 258 259 [X.509 v3]: http://www.ietf.org/rfc/rfc5280.txt 260 [X.690]: http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf 261 [User Guide]: user-guide.md 262