trusted-board-boot.md 9.66 KB
Newer Older
1
2
3
4
5
6
7
8
Trusted Board Boot Design Guide
===============================

Contents :

1.  [Introduction](#1--introduction)
2.  [Chain of Trust](#2--chain-of-trust)
3.  [Trusted Board Boot Sequence](#3--trusted-board-boot-sequence)
9
4.  [Authentication Framework](#4--authentication-framework)
10
11
12
13
14
15
16
17
18
19
20
5.  [Certificate Generation Tool](#5--certificate-generation-tool)


1.  Introduction
----------------

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).

21
22
23
24
This document describes the design of ARM Trusted Firmware TBB, which is an
implementation of the Trusted Board Boot Requirements (TBBR) specification,
ARM DEN0006C-1. It should be used in conjunction with the [Firmware Update]
design document, which implements a specific aspect of the TBBR.
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46


2.  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 SHA-256 hash of the Root of Trust Public Key (ROTPK). It is stored in the
    trusted root-key storage registers.

*   The BL1 image, on the assumption that it resides in ROM so cannot be
    tampered with.

The remaining components in the CoT are either certificates or boot loader
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
47
extensions. To sign the certificates, the PKCS#1 SHA-256 with RSA Encryption
48
signature scheme is used with a RSA key length of 2048 bits. Future version of
49
Trusted Firmware will support additional cryptographic algorithms.
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68

The certificates are categorised as "Key" and "Content" certificates. Key
certificates are used to verify public keys which have been used to sign content
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. The SHA-256 function is
used to calculate all hashes. 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:

*   **Root of trust key**

    The private part of this key is used to sign the BL2 content certificate and
    the trusted key certificate. The public part is the ROTPK.

*   **Trusted world key**

    The private part is used to sign the key certificates corresponding to the
69
    secure world images (SCP_BL2, BL31 and BL32). The public part is stored in
70
71
72
73
74
    one of the extension fields in the trusted world certificate.

*   **Non-trusted world key**

    The private part is used to sign the key certificate corresponding to the
75
    non secure world image (BL33). The public part is stored in one of the
76
77
78
79
    extension fields in the trusted world certificate.

*   **BL3-X keys**

80
    For each of SCP_BL2, BL31, BL32 and BL33, the private part is used to
81
82
    sign the content certificate for the BL3-X image. The public part is stored
    in one of the extension fields in the corresponding key certificate.
83
84
85
86
87

The following images are included in the CoT:

*   BL1
*   BL2
88
*   SCP_BL2 (optional)
89
90
91
*   BL31
*   BL33
*   BL32 (optional)
92
93
94
95
96
97
98
99
100
101
102
103
104
105

The following certificates are used to authenticate the images.

*   **BL2 content certificate**

    It is self-signed with the private part of the ROT key. It contains a hash
    of the BL2 image.

*   **Trusted key certificate**

    It is self-signed with the private part of the ROT key. It contains the
    public part of the trusted world key and the public part of the non-trusted
    world key.

106
*   **SCP_BL2 key certificate**
107
108

    It is self-signed with the trusted world key. It contains the public part of
109
    the SCP_BL2 key.
110

111
*   **SCP_BL2 content certificate**
112

113
114
    It is self-signed with the SCP_BL2 key. It contains a hash of the SCP_BL2
    image.
115

116
*   **BL31 key certificate**
117
118

    It is self-signed with the trusted world key. It contains the public part of
119
    the BL31 key.
120

121
*   **BL31 content certificate**
122

123
    It is self-signed with the BL31 key. It contains a hash of the BL31 image.
124

125
*   **BL32 key certificate**
126
127

    It is self-signed with the trusted world key. It contains the public part of
128
    the BL32 key.
129

130
*   **BL32 content certificate**
131

132
    It is self-signed with the BL32 key. It contains a hash of the BL32 image.
133

134
*   **BL33 key certificate**
135
136

    It is self-signed with the non-trusted world key. It contains the public
137
    part of the BL33 key.
138

139
*   **BL33 content certificate**
140

141
    It is self-signed with the BL33 key. It contains a hash of the BL33 image.
142

143
144
The SCP_BL2 and BL32 certificates are optional, but they must be present if the
corresponding SCP_BL2 or BL32 images are present.
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170


3.  Trusted Board Boot Sequence
-------------------------------

The CoT is verified through the following sequence of steps. The system panics
if any of the steps fail.

*   BL1 loads and verifies the BL2 content certificate. The issuer public key is
    read from the verified certificate. A hash of that key is calculated and
    compared with the hash of the ROTPK read from the trusted root-key storage
    registers. If they match, the BL2 hash is read from the certificate.

    Note: the matching operation is platform specific and is currently
    unimplemented on the ARM development platforms.

*   BL1 loads the BL2 image. Its hash is calculated and compared with the hash
    read from the certificate. Control is transferred to the BL2 image if all
    the comparisons succeed.

*   BL2 loads and verifies the trusted key certificate. The issuer public key is
    read from the verified certificate. A hash of that key is calculated and
    compared with the hash of the ROTPK read from the trusted root-key storage
    registers. If the comparison succeeds, BL2 reads and saves the trusted and
    non-trusted world public keys from the verified certificate.

171
172
The next two steps are executed for each of the SCP_BL2, BL31 & BL32 images.
The steps for the optional SCP_BL2 and BL32 images are skipped if these images
173
are not present.
174

175
*   BL2 loads and verifies the BL3x 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 BL3x public key from the
178
179
    certificate.

180
181
182
*   BL2 loads and verifies the BL3x content certificate. The signature is
    verified using the BL3x public key. If the signature verification succeeds,
    BL2 reads and saves the BL3x image hash from the certificate.
183

184
The next two steps are executed only for the BL33 image.
185

186
187
*   BL2 loads and verifies the BL33 key certificate. If the signature
    verification succeeds, BL2 reads and saves the BL33 public key from the
188
189
    certificate.

190
191
*   BL2 loads and verifies the BL33 content certificate. If the signature
    verification succeeds, BL2 reads and saves the BL33 image hash from the
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
    certificate.

The next step is executed for all the boot loader images.

*   BL2 calculates the hash of each image. It compares it with the hash obtained
    from the corresponding content certificate. The image authentication succeeds
    if the hashes match.

The Trusted Board Boot implementation spans both generic and platform-specific
BL1 and BL2 code, and in tool code on the host build machine. The feature is
enabled through use of specific build flags as described in the [User Guide].

On the host machine, a tool generates the certificates, which are included in
the FIP along with the boot loader images. These certificates are loaded in
Trusted SRAM using the IO storage framework. They are then verified by an
Authentication module included in the Trusted Firmware.

The mechanism used for generating the FIP and the Authentication module are
described in the following sections.


213
214
4.  Authentication Framework
----------------------------
215

216
217
218
The authentication framework included in the Trusted Firmware provides support
to implement the desired trusted boot sequence. ARM platforms use this framework
to implement the boot requirements specified in the TBBR-client document.
219

220
221
More information about the authentication framework can be found in the
[Auth Framework] document.
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248


5.  Certificate Generation Tool
-------------------------------

The `cert_create` tool is built and runs on the host machine as part of the
Trusted Firmware build process when `GENERATE_COT=1`. It takes the boot loader
images and keys as inputs (keys must be in PEM format) and generates the
certificates (in DER format) required to establish the CoT. New keys can be
generated by the tool in case they are not provided. The certificates are then
passed as inputs to the `fip_create` tool for creating the FIP.

The certificates are also stored individually in the in the output build
directory.

The tool resides in the `tools/cert_create` directory. It uses OpenSSL SSL
library version 1.0.1 or later to generate the X.509 certificates. Instructions
for building and using the tool can be found in the [User Guide].


- - - - - - - - - - - - - - - - - - - - - - - - - -

_Copyright (c) 2015, ARM Limited and Contributors. All rights reserved._


[X.509 v3]:          http://www.ietf.org/rfc/rfc5280.txt
[X.690]:             http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf
249
[Auth Framework]:    auth-framework.md
250
[User Guide]:        user-guide.md
251
[Firmware Update]:   firmware-update.md