blob: 5478e2326d84d9be323a0a3c1516b0214943efc8 [file] [log] [blame]
Maulik Pateld3142702022-06-22 10:09:13 +01001#######################################
2Measured Boot Service Integration Guide
3#######################################
4
5Introduction
6************
7Measured Boot partition provides services to extend and read
8measurements (hash values and metadata) during various stages of a power cycle.
9These measurements can be extended and read by any application/service
10(secure or non-secure).
11
12************
13Measurements
14************
15The initial attestation token (required by attestation service) is formed of
16various claims. Each software component claim comprises of the following
17measurements which are extended and read by Measured Boot services.
18
19 - **Measurement type**: It represents the role of the
20 software component. Value is encoded as a short(!) text string.
21
22 - **Measurement value**: It represents a hash of the invariant software
23 component in memory at start-up time. The value must be a cryptographic
24 hash of 256 bits or stronger. Value is encoded as a byte string.
25
26 - **Version**: It represents the issued software version. Value is encoded
27 as a text string.
28
29 - **Signer ID**: It represents the hash of a signing authority public key.
30 Value is encoded as a byte string.
31
32 - **Measurement description**: It represents the way in which the
33 measurement value of the software component is computed. Value is
34 encoded as text string containing an abbreviated description (name) of
35 the measurement method.
36
37**************
38Code structure
39**************
40
41The TF-M Measured Boot Service source and header files are located in current
42directory. The interfaces for the measured boot service are located in the
43``interface/include``. The headers to be included by applications that want
44to use functions from the API is ``measured_boot_api.h`` and
45``measured_boot_defs.h``.
46
47Service source files
48====================
49
50- Measured Boot Service:
51 - ``measured_boot.c`` : Implements core functionalities such as
52 implementation of APIs, extension and reading of measurements.
53 - ``measured_boot_api.c``: Implements the secure API layer to
54 allow other services in the secure domain to request functionalities
55 from the measured boot service using the PSA API interface.
56 - ``measured_boot_req_mngr.c``: Includes the initialization entry of
57 measured boot service and handles service requests in IPC model.
58
59Measured Boot Interfaces
60========================
61
62The TF-M Measured Boot service exposes the following interfaces:
63
64.. code-block:: c
65
66 psa_status_t tfm_measured_boot_read_measurement(
67 uint8_t index,
68 uint8_t *signer_id,
69 size_t signer_id_size,
70 size_t *signer_id_len,
71 uint8_t *version,
72 size_t version_size,
73 size_t *version_len,
74 uint32_t *measurement_algo,
75 uint8_t *sw_type,
76 size_t sw_type_size,
77 size_t *sw_type_len,
78 uint8_t *measurement_value,
79 size_t measurement_value_size,
80 size_t *measurement_value_len,
81 bool *is_locked);
82 psa_status_t tfm_measured_boot_extend_measurement(
83 uint8_t index,
84 const uint8_t *signer_id,
85 size_t signer_id_size,
86 const uint8_t *version,
87 size_t version_size,
88 uint32_t measurement_algo,
89 const uint8_t *sw_type,
90 size_t sw_type_size,
91 const uint8_t *measurement_value,
92 size_t measurement_value_size,
93 bool lock_measurement);
94
95When reading measurement, the caller must allocate large enough
96buffers to accommodate data for all the output measurement parameters.
97The definitions ``SIGNER_ID_MAX_SIZE``, ``VERSION_MAX_SIZE``,
98``SW_TYPE_MAX_SIZE``, and ``MEASUREMENT_VALUE_MAX_SIZE`` can be used to
99determine the required size of the buffers.
100
101System integrators might need to port these interfaces to a custom secure
102partition manager implementation (SPM). Implementations in TF-M project can be
103found in tf-m-extras repository.
104
105- ``partitions/measured_boot/interface/src/measured_boot_api.c``:
106 non-secure as well as secure interface implementation
107
108Related compile time options for out of tree build
109--------------------------------------------------
110- ``TFM_PARTITION_MEASURED_BOOT``: To include measured boot secure partition
111 and its services, its value should be ON. By default, it is switched OFF.
112
113- ``MEASURED_BOOT_HASH_ALG``: This option selects the hash algorithm used
114 for extension of measurement hashes. Its default value is PSA_ALG_SHA_256.
115
116- ``TFM_EXTRA_MANIFEST_LIST_FILES``: <tf-m-extras-repo>/partitions/
117 measured_boot/measured_boot_manifest_list.yaml
118
119- ``TFM_EXTRA_PARTITION_PATHS``: <tf-m-extras-repo>/partitions/measured_boot
120
121************
122Verification
123************
124
125Regression test
126===============
127
128To be implemented.
129
130--------------
131
132*Copyright (c) 2022, Arm Limited. All rights reserved.*