1624c9a0bSTamas BanRuntime Security Engine (RSE) 2624c9a0bSTamas Ban============================= 3a5a5947aSTamas Ban 4624c9a0bSTamas BanThis document focuses on the relationship between the Runtime Security Engine 5624c9a0bSTamas Ban(RSE) and the application processor (AP). According to the ARM reference design 6624c9a0bSTamas Banthe RSE is an independent core next to the AP and the SCP on the same die. It 7a5a5947aSTamas Banprovides fundamental security guarantees and runtime services for the rest of 8a5a5947aSTamas Banthe system (e.g.: trusted boot, measured boot, platform attestation, 9a5a5947aSTamas Bankey management, and key derivation). 10a5a5947aSTamas Ban 11624c9a0bSTamas BanAt power up RSE boots first from its private ROM code. It validates and loads 12a5a5947aSTamas Banits own images and the initial images of SCP and AP. When AP and SCP are 13a5a5947aSTamas Banreleased from reset and their initial code is loaded then they continue their 14624c9a0bSTamas Banown boot process, which is the same as on non-RSE systems. Please refer to the 15624c9a0bSTamas Ban``RSE documentation`` [1]_ for more details about the RSE boot flow. 16a5a5947aSTamas Ban 17624c9a0bSTamas BanThe last stage of the RSE firmware is a persistent, runtime component. Much 18a5a5947aSTamas Banlike AP_BL31, this is a passive entity which has no periodical task to do and 19624c9a0bSTamas Banjust waits for external requests from other subsystems. RSE and other 20624c9a0bSTamas Bansubsystems can communicate with each other over message exchange. RSE waits 21a5a5947aSTamas Banin idle for the incoming request, handles them, and sends a response then goes 22a5a5947aSTamas Banback to idle. 23a5a5947aSTamas Ban 24624c9a0bSTamas BanRSE communication layer 25a5a5947aSTamas Ban----------------------- 26a5a5947aSTamas Ban 27624c9a0bSTamas BanThe communication between RSE and other subsystems are primarily relying on the 2836416b1eSYann GautierMessage Handling Unit (MHU) module. 2936416b1eSYann Gautier 3036416b1eSYann GautierHowever, this is possible to use this communication protocol with a different 3136416b1eSYann Gautiermailbox than MHU, by setting the flag ``PLAT_MHU=NO_MHU`` and implementing the 3236416b1eSYann GautierAPIs given in the file: ``include/drivers/arm/rse_comms.h``. 3336416b1eSYann Gautier 3436416b1eSYann GautierThe number of MHU interfaces between RSE and other cores is IMPDEF. Besides MHU 3536416b1eSYann Gautierother modules also could take part in the communication. RSE is capable of 3636416b1eSYann Gautiermapping the AP memory to its address space. 37624c9a0bSTamas BanThereby either RSE core itself or a DMA engine if it is present, can move the 38624c9a0bSTamas Bandata between memory belonging to RSE or AP. In this way, a bigger amount of data 39a5a5947aSTamas Bancan be transferred in a short time. 40a5a5947aSTamas Ban 41a5a5947aSTamas BanThe MHU comes in pairs. There is a sender and receiver side. They are connected 42a5a5947aSTamas Banto each other. An MHU interface consists of two pairs of MHUs, one sender and 43a5a5947aSTamas Banone receiver on both sides. Bidirectional communication is possible over an 44624c9a0bSTamas Baninterface. One pair provides message sending from AP to RSE and the other pair 45624c9a0bSTamas Banfrom RSE to AP. The sender and receiver are connected via channels. There is an 46a5a5947aSTamas BanIMPDEF number of channels (e.g: 4-16) between a sender and a receiver module. 47a5a5947aSTamas Ban 48624c9a0bSTamas BanThe RSE communication layer provides two ways for message exchange: 49a5a5947aSTamas Ban 50a5a5947aSTamas Ban- ``Embedded messaging``: The full message, including header and payload, are 51a5a5947aSTamas Ban exchanged over the MHU channels. A channel is capable of delivering a single 52a5a5947aSTamas Ban word. The sender writes the data to the channel register on its side and the 53a5a5947aSTamas Ban receiver can read the data from the channel on the other side. One dedicated 54a5a5947aSTamas Ban channel is used for signalling. It does not deliver any payload it is just 55a5a5947aSTamas Ban meant for signalling that the sender loaded the data to the channel registers 56a5a5947aSTamas Ban so the receiver can read them. The receiver uses the same channel to signal 57a5a5947aSTamas Ban that data was read. Signalling happens via IRQ. If the message is longer than 58a5a5947aSTamas Ban the data fit to the channel registers then the message is sent over in 59a5a5947aSTamas Ban multiple rounds. Both, sender and receiver allocate a local buffer for the 60a5a5947aSTamas Ban messages. Data is copied from/to these buffers to/from the channel registers. 61a5a5947aSTamas Ban- ``Pointer-access messaging``: The message header and the payload are 62a5a5947aSTamas Ban separated and they are conveyed in different ways. The header is sent 63a5a5947aSTamas Ban over the channels, similar to the embedded messaging but the payload is 64624c9a0bSTamas Ban copied over by RSE core (or by DMA) between the sender and the receiver. This 65a5a5947aSTamas Ban could be useful in the case of long messages because transaction time is less 66624c9a0bSTamas Ban compared to the embedded messaging mode. Small payloads are copied by the RSE 67a5a5947aSTamas Ban core because setting up DMA would require more CPU cycles. The payload is 68624c9a0bSTamas Ban either copied into an internal buffer or directly read-written by RSE. Actual 69624c9a0bSTamas Ban behavior depends on RSE setup, whether the partition supports memory-mapped 70a5a5947aSTamas Ban ``iovec``. Therefore, the sender must handle both cases and prevent access to 71624c9a0bSTamas Ban the memory, where payload data lives, while the RSE handles the request. 72a5a5947aSTamas Ban 73624c9a0bSTamas BanThe RSE communication layer supports both ways of messaging in parallel. It is 74a5a5947aSTamas Bandecided at runtime based on the message size which way to transfer the message. 75a5a5947aSTamas Ban 76a5a5947aSTamas Ban.. code-block:: bash 77a5a5947aSTamas Ban 78a5a5947aSTamas Ban +----------------------------------------------+ +-------------------+ 79a5a5947aSTamas Ban | | | | 80a5a5947aSTamas Ban | AP | | | 81a5a5947aSTamas Ban | | +--->| SRAM | 82a5a5947aSTamas Ban +----------------------------------------------| | | | 83a5a5947aSTamas Ban | BL1 / BL2 / BL31 | | | | 84a5a5947aSTamas Ban +----------------------------------------------+ | +-------------------+ 85a5a5947aSTamas Ban | ^ | ^ ^ 86a5a5947aSTamas Ban | send IRQ | receive |direct | | 87a5a5947aSTamas Ban V | |access | | 88a5a5947aSTamas Ban +--------------------+ +--------------------+ | | | 89a5a5947aSTamas Ban | MHU sender | | MHU receiver | | | Copy data | 90a5a5947aSTamas Ban +--------------------+ +--------------------+ | | | 91a5a5947aSTamas Ban | | | | | | | | | | | 92a5a5947aSTamas Ban | | channels | | | | channels | | | | | 93a5a5947aSTamas Ban | | e.g: 4-16 | | | | e.g: 4-16 | | | V | 94a5a5947aSTamas Ban +--------------------+ +--------------------+ | +-------+ | 95a5a5947aSTamas Ban | MHU receiver | | MHU sender | | +->| DMA | | 96a5a5947aSTamas Ban +--------------------+ +--------------------+ | | +-------+ | 97a5a5947aSTamas Ban | ^ | | ^ | 98a5a5947aSTamas Ban IRQ | receive | send | | | Copy data | 99a5a5947aSTamas Ban V | | | V V 100a5a5947aSTamas Ban +----------------------------------------------+ | | +-------------------+ 101a5a5947aSTamas Ban | |--+-+ | | 102624c9a0bSTamas Ban | RSE | | SRAM | 103a5a5947aSTamas Ban | | | | 104a5a5947aSTamas Ban +----------------------------------------------+ +-------------------+ 105a5a5947aSTamas Ban 106a5a5947aSTamas Ban.. Note:: 107a5a5947aSTamas Ban 108624c9a0bSTamas Ban The RSE communication layer is not prepared for concurrent execution. The 109a5a5947aSTamas Ban current use case only requires message exchange during the boot phase. In 110a5a5947aSTamas Ban the boot phase, only a single core is running and the rest of the cores are 111a5a5947aSTamas Ban in reset. 112a5a5947aSTamas Ban 113a5a5947aSTamas BanMessage structure 114a5a5947aSTamas Ban^^^^^^^^^^^^^^^^^ 115624c9a0bSTamas BanA description of the message format can be found in the ``RSE communication 116a5a5947aSTamas Bandesign`` [2]_ document. 117a5a5947aSTamas Ban 118a5a5947aSTamas BanSource files 119a5a5947aSTamas Ban^^^^^^^^^^^^ 120624c9a0bSTamas Ban- RSE comms: ``drivers/arm/rse`` 121a5a5947aSTamas Ban- MHU driver: ``drivers/arm/mhu`` 122a5a5947aSTamas Ban 123a5a5947aSTamas Ban 124a5a5947aSTamas BanAPI for communication over MHU 125a5a5947aSTamas Ban^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 126a5a5947aSTamas BanThe API is defined in these header files: 127a5a5947aSTamas Ban 128624c9a0bSTamas Ban- ``include/drivers/arm/rse_comms.h`` 129a5a5947aSTamas Ban- ``include/drivers/arm/mhu.h`` 130a5a5947aSTamas Ban 131624c9a0bSTamas BanRSE provided runtime services 132a5a5947aSTamas Ban----------------------------- 133a5a5947aSTamas Ban 134624c9a0bSTamas BanRSE provides the following runtime services: 135a5a5947aSTamas Ban 136a5a5947aSTamas Ban- ``Measured boot``: Securely store the firmware measurements which were 137a5a5947aSTamas Ban computed during the boot process and the associated metadata (image 138a5a5947aSTamas Ban description, measurement algorithm, etc.). More info on measured boot service 139624c9a0bSTamas Ban in RSE can be found in the ``measured_boot_integration_guide`` [3]_ . 140a5a5947aSTamas Ban- ``Delegated attestation``: Query the platform attestation token and derive a 141a5a5947aSTamas Ban delegated attestation key. More info on the delegated attestation service 142624c9a0bSTamas Ban in RSE can be found in the ``delegated_attestation_integration_guide`` [4]_ . 143a5a5947aSTamas Ban- ``OTP assets management``: Public keys used by AP during the trusted boot 144624c9a0bSTamas Ban process can be requested from RSE. Furthermore, AP can request RSE to 145a5a5947aSTamas Ban increase a non-volatile counter. Please refer to the 146624c9a0bSTamas Ban ``RSE key management`` [5]_ document for more details. 147e4582e42STamas Ban- ``DICE Protection Environment``: Securely store the firmware measurements 148e4582e42STamas Ban which were computed during the boot process and the associated metadata. It is 149e4582e42STamas Ban also capable of representing the boot measurements in the form of a 150e4582e42STamas Ban certificate chain, which is queriable. Please refer to the 151e4582e42STamas Ban ``DICE Protection Environment (DPE)`` [8]_ document for more details. 152a5a5947aSTamas Ban 153a5a5947aSTamas BanRuntime service API 154a5a5947aSTamas Ban^^^^^^^^^^^^^^^^^^^ 155624c9a0bSTamas BanThe RSE provided runtime services implement a PSA aligned API. The parameter 156a5a5947aSTamas Banencoding follows the PSA client protocol described in the 157a5a5947aSTamas Ban``Firmware Framework for M`` [6]_ document in chapter 4.4. The implementation is 158a5a5947aSTamas Banrestricted to the static handle use case therefore only the ``psa_call`` API is 159a5a5947aSTamas Banimplemented. 160a5a5947aSTamas Ban 161a5a5947aSTamas Ban 162a5a5947aSTamas BanSoftware and API layers 163a5a5947aSTamas Ban^^^^^^^^^^^^^^^^^^^^^^^ 164a5a5947aSTamas Ban 165a5a5947aSTamas Ban.. code-block:: bash 166a5a5947aSTamas Ban 167a5a5947aSTamas Ban +----------------+ +---------------------+ 168a5a5947aSTamas Ban | BL1 / BL2 | | BL31 | 169a5a5947aSTamas Ban +----------------+ +---------------------+ 170a5a5947aSTamas Ban | | 171a5a5947aSTamas Ban | extend_measurement() | get_delegated_key() 172a5a5947aSTamas Ban | | get_platform_token() 173a5a5947aSTamas Ban V V 174a5a5947aSTamas Ban +----------------+ +---------------------+ 175a5a5947aSTamas Ban | PSA protocol | | PSA protocol | 176a5a5947aSTamas Ban +----------------+ +---------------------+ 177a5a5947aSTamas Ban | | 178a5a5947aSTamas Ban | psa_call() | psa_call() 179a5a5947aSTamas Ban | | 180a5a5947aSTamas Ban V V 181a5a5947aSTamas Ban +------------------------------------------------+ 182624c9a0bSTamas Ban | RSE communication protocol | 183a5a5947aSTamas Ban +------------------------------------------------+ 184a5a5947aSTamas Ban | ^ 185a5a5947aSTamas Ban | mhu_send_data() | mhu_receive_data() 186a5a5947aSTamas Ban | | 187a5a5947aSTamas Ban V | 188a5a5947aSTamas Ban +------------------------------------------------+ 189a5a5947aSTamas Ban | MHU driver | 190a5a5947aSTamas Ban +------------------------------------------------+ 191a5a5947aSTamas Ban | ^ 192a5a5947aSTamas Ban | Register access | IRQ 193a5a5947aSTamas Ban V | 194a5a5947aSTamas Ban +------------------------------------------------+ 195a5a5947aSTamas Ban | MHU HW on AP side | 196a5a5947aSTamas Ban +------------------------------------------------+ 197a5a5947aSTamas Ban ^ 198a5a5947aSTamas Ban | Physical wires 199a5a5947aSTamas Ban | 200a5a5947aSTamas Ban V 201a5a5947aSTamas Ban +------------------------------------------------+ 202624c9a0bSTamas Ban | MHU HW on RSE side | 203a5a5947aSTamas Ban +------------------------------------------------+ 204a5a5947aSTamas Ban | ^ 205a5a5947aSTamas Ban | IRQ | Register access 206a5a5947aSTamas Ban V | 207a5a5947aSTamas Ban +------------------------------------------------+ 208a5a5947aSTamas Ban | MHU driver | 209a5a5947aSTamas Ban +------------------------------------------------+ 210a5a5947aSTamas Ban | | 211a5a5947aSTamas Ban V V 212a5a5947aSTamas Ban +---------------+ +------------------------+ 213a5a5947aSTamas Ban | Measured boot | | Delegated attestation | 214a5a5947aSTamas Ban | service | | service | 215a5a5947aSTamas Ban +---------------+ +------------------------+ 216a5a5947aSTamas Ban 217a5a5947aSTamas Ban 218624c9a0bSTamas BanRSE based Measured Boot 219a5a5947aSTamas Ban----------------------- 220a5a5947aSTamas Ban 221a5a5947aSTamas BanMeasured Boot is the process of cryptographically measuring (computing the hash 222a5a5947aSTamas Banvalue of a binary) the code and critical data used at boot time. The 223a5a5947aSTamas Banmeasurement must be stored in a tamper-resistant way, so the security state 224624c9a0bSTamas Banof the device can be attested later to an external party. RSE provides a runtime 225a5a5947aSTamas Banservice which is meant to store measurements and associated metadata alongside. 226a5a5947aSTamas Ban 227a5a5947aSTamas BanData is stored in internal SRAM which is only accessible by the secure runtime 228624c9a0bSTamas Banfirmware of RSE. Data is stored in so-called measurement slots. A platform has 229a5a5947aSTamas BanIMPDEF number of measurement slots. The measurement storage follows extend 230a5a5947aSTamas Bansemantics. This means that measurements are not stored directly (as it was 231a5a5947aSTamas Bantaken) instead they contribute to the current value of the measurement slot. 232a5a5947aSTamas BanThe extension implements this logic, where ``||`` stands for concatenation: 233a5a5947aSTamas Ban 234a5a5947aSTamas Ban.. code-block:: bash 235a5a5947aSTamas Ban 236a5a5947aSTamas Ban new_value_of_measurement_slot = Hash(old_value_of_measurement_slot || measurement) 237a5a5947aSTamas Ban 238a5a5947aSTamas BanSupported hash algorithms: sha-256, sha-512 239a5a5947aSTamas Ban 240a5a5947aSTamas BanMeasured Boot API 241a5a5947aSTamas Ban^^^^^^^^^^^^^^^^^ 242a5a5947aSTamas Ban 243a5a5947aSTamas BanDefined here: 244a5a5947aSTamas Ban 245a5a5947aSTamas Ban- ``include/lib/psa/measured_boot.h`` 246a5a5947aSTamas Ban 247a5a5947aSTamas Ban.. code-block:: c 248a5a5947aSTamas Ban 249a5a5947aSTamas Ban psa_status_t 250624c9a0bSTamas Ban rse_measured_boot_extend_measurement(uint8_t index, 251a5a5947aSTamas Ban const uint8_t *signer_id, 252a5a5947aSTamas Ban size_t signer_id_size, 253a5a5947aSTamas Ban const uint8_t *version, 254a5a5947aSTamas Ban size_t version_size, 255a5a5947aSTamas Ban uint32_t measurement_algo, 256a5a5947aSTamas Ban const uint8_t *sw_type, 257a5a5947aSTamas Ban size_t sw_type_size, 258a5a5947aSTamas Ban const uint8_t *measurement_value, 259a5a5947aSTamas Ban size_t measurement_value_size, 260a5a5947aSTamas Ban bool lock_measurement); 261a5a5947aSTamas Ban 262a5a5947aSTamas BanMeasured Boot Metadata 263a5a5947aSTamas Ban^^^^^^^^^^^^^^^^^^^^^^ 264a5a5947aSTamas Ban 265a5a5947aSTamas BanThe following metadata can be stored alongside the measurement: 266a5a5947aSTamas Ban 267a5a5947aSTamas Ban- ``Signer-id``: Mandatory. The hash of the firmware image signing public key. 268a5a5947aSTamas Ban- ``Measurement algorithm``: Optional. The hash algorithm which was used to 269a5a5947aSTamas Ban compute the measurement (e.g.: sha-256, etc.). 270a5a5947aSTamas Ban- ``Version info``: Optional. The firmware version info (e.g.: 2.7). 271a5a5947aSTamas Ban- ``SW type``: Optional. Short text description (e.g.: BL1, BL2, BL31, etc.) 272a5a5947aSTamas Ban 273a5a5947aSTamas Ban.. Note:: 274a5a5947aSTamas Ban Version info is not implemented in TF-A yet. 275a5a5947aSTamas Ban 276a5a5947aSTamas Ban 277a5a5947aSTamas BanThe caller must specify in which measurement slot to extend a certain 278a5a5947aSTamas Banmeasurement and metadata. A measurement slot can be extended by multiple 279a5a5947aSTamas Banmeasurements. The default value is IMPDEF. All measurement slot is cleared at 280a5a5947aSTamas Banreset, there is no other way to clear them. In the reference implementation, 281a5a5947aSTamas Banthe measurement slots are initialized to 0. At the first call to extend the 282a5a5947aSTamas Banmeasurement in a slot, the extend operation uses the default value of the 283a5a5947aSTamas Banmeasurement slot. All upcoming extend operation on the same slot contributes 284a5a5947aSTamas Banto the previous value of that measurement slot. 285a5a5947aSTamas Ban 286a5a5947aSTamas BanThe following rules are kept when a slot is extended multiple times: 287a5a5947aSTamas Ban 288a5a5947aSTamas Ban- ``Signer-id`` must be the same as the previous call(s), otherwise a 289a5a5947aSTamas Ban PSA_ERROR_NOT_PERMITTED error code is returned. 290a5a5947aSTamas Ban 291a5a5947aSTamas Ban- ``Measurement algorithm``: must be the same as the previous call(s), 292a5a5947aSTamas Ban otherwise, a PSA_ERROR_NOT_PERMITTED error code is returned. 293a5a5947aSTamas Ban 294a5a5947aSTamas BanIn case of error no further action is taken (slot is not locked). If there is 295a5a5947aSTamas Bana valid data in a sub-sequent call then measurement slot will be extended. The 296a5a5947aSTamas Banrest of the metadata is handled as follows when a measurement slot is extended 297a5a5947aSTamas Banmultiple times: 298a5a5947aSTamas Ban 299a5a5947aSTamas Ban- ``SW type``: Cleared. 300a5a5947aSTamas Ban- ``Version info``: Cleared. 301a5a5947aSTamas Ban 302a5a5947aSTamas Ban.. Note:: 303a5a5947aSTamas Ban 304a5a5947aSTamas Ban Extending multiple measurements in the same slot leads to some metadata 305624c9a0bSTamas Ban information loss. Since RSE is not constrained on special HW resources to 306a5a5947aSTamas Ban store the measurements and metadata, therefore it is worth considering to 307a5a5947aSTamas Ban store all of them one by one in distinct slots. However, they are one-by-one 308a5a5947aSTamas Ban included in the platform attestation token. So, the number of distinct 309a5a5947aSTamas Ban firmware image measurements has an impact on the size of the attestation 310a5a5947aSTamas Ban token. 311a5a5947aSTamas Ban 312624c9a0bSTamas BanThe allocation of the measurement slot among RSE, Root and Realm worlds is 313a5a5947aSTamas Banplatform dependent. The platform must provide an allocation of the measurement 314a5a5947aSTamas Banslot at build time. An example can be found in 315a5a5947aSTamas Ban``tf-a/plat/arm/board/tc/tc_bl1_measured_boot.c`` 316a5a5947aSTamas BanFurthermore, the memory, which holds the metadata is also statically allocated 317624c9a0bSTamas Banin RSE memory. Some of the fields have a static value (measurement algorithm), 318a5a5947aSTamas Banand some of the values have a dynamic value (measurement value) which is updated 319a5a5947aSTamas Banby the bootloaders when the firmware image is loaded and measured. The metadata 320a5a5947aSTamas Banstructure is defined in 321624c9a0bSTamas Ban``include/drivers/measured_boot/rse/rse_measured_boot.h``. 322a5a5947aSTamas Ban 323a5a5947aSTamas Ban.. code-block:: c 324a5a5947aSTamas Ban 325624c9a0bSTamas Ban struct rse_mboot_metadata { 326a5a5947aSTamas Ban unsigned int id; 327a5a5947aSTamas Ban uint8_t slot; 328a5a5947aSTamas Ban uint8_t signer_id[SIGNER_ID_MAX_SIZE]; 329a5a5947aSTamas Ban size_t signer_id_size; 330a5a5947aSTamas Ban uint8_t version[VERSION_MAX_SIZE]; 331a5a5947aSTamas Ban size_t version_size; 332a5a5947aSTamas Ban uint8_t sw_type[SW_TYPE_MAX_SIZE]; 333a5a5947aSTamas Ban size_t sw_type_size; 334a5a5947aSTamas Ban void *pk_oid; 335a5a5947aSTamas Ban bool lock_measurement; 336a5a5947aSTamas Ban }; 337a5a5947aSTamas Ban 338a5a5947aSTamas BanSigner-ID API 339a5a5947aSTamas Ban^^^^^^^^^^^^^ 340a5a5947aSTamas Ban 341a5a5947aSTamas BanThis function calculates the hash of a public key (signer-ID) using the 342624c9a0bSTamas Ban``Measurement algorithm`` and stores it in the ``rse_mboot_metadata`` field 343a5a5947aSTamas Bannamed ``signer_id``. 344a5a5947aSTamas BanPrior to calling this function, the caller must ensure that the ``signer_id`` 345a5a5947aSTamas Banfield points to the zero-filled buffer. 346a5a5947aSTamas Ban 347a5a5947aSTamas BanDefined here: 348a5a5947aSTamas Ban 349624c9a0bSTamas Ban- ``include/drivers/measured_boot/rse/rse_measured_boot.h`` 350a5a5947aSTamas Ban 351a5a5947aSTamas Ban.. code-block:: c 352a5a5947aSTamas Ban 353624c9a0bSTamas Ban int rse_mboot_set_signer_id(struct rse_mboot_metadata *metadata_ptr, 354a5a5947aSTamas Ban const void *pk_oid, 355a5a5947aSTamas Ban const void *pk_ptr, 356a5a5947aSTamas Ban size_t pk_len) 357a5a5947aSTamas Ban 358a5a5947aSTamas Ban 359624c9a0bSTamas Ban- First parameter is the pointer to the ``rse_mboot_metadata`` structure. 360a5a5947aSTamas Ban- Second parameter is the pointer to the key-OID of the public key. 361a5a5947aSTamas Ban- Third parameter is the pointer to the public key buffer. 362a5a5947aSTamas Ban- Fourth parameter is the size of public key buffer. 363a5a5947aSTamas Ban- This function returns 0 on success, a signed integer error code 364a5a5947aSTamas Ban otherwise. 365a5a5947aSTamas Ban 366a5a5947aSTamas BanBuild time config options 367a5a5947aSTamas Ban^^^^^^^^^^^^^^^^^^^^^^^^^ 368a5a5947aSTamas Ban 369e4582e42STamas Ban- ``MEASURED_BOOT``: Enable measured boot. 370624c9a0bSTamas Ban- ``MBOOT_RSE_HASH_ALG``: Determine the hash algorithm to measure the images. 371a5a5947aSTamas Ban The default value is sha-256. 372a5a5947aSTamas Ban 373a5a5947aSTamas BanMeasured boot flow 374a5a5947aSTamas Ban^^^^^^^^^^^^^^^^^^ 375a5a5947aSTamas Ban 376624c9a0bSTamas Ban.. figure:: ../resources/diagrams/rse_measured_boot_flow.svg 377a5a5947aSTamas Ban :align: center 378a5a5947aSTamas Ban 379a5a5947aSTamas BanSample console log 380a5a5947aSTamas Ban^^^^^^^^^^^^^^^^^^ 381a5a5947aSTamas Ban 382a5a5947aSTamas Ban.. code-block:: bash 383a5a5947aSTamas Ban 384a5a5947aSTamas Ban INFO: Measured boot extend measurement: 385a5a5947aSTamas Ban INFO: - slot : 6 386a5a5947aSTamas Ban INFO: - signer_id : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 387a5a5947aSTamas Ban INFO: : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 388a5a5947aSTamas Ban INFO: - version : 389a5a5947aSTamas Ban INFO: - version_size: 0 390a5a5947aSTamas Ban INFO: - sw_type : FW_CONFIG 391a5a5947aSTamas Ban INFO: - sw_type_size: 10 392a5a5947aSTamas Ban INFO: - algorithm : 2000009 393a5a5947aSTamas Ban INFO: - measurement : aa ea d3 a7 a8 e2 ab 7d 13 a6 cb 34 99 10 b9 a1 394a5a5947aSTamas Ban INFO: : 1b 9f a0 52 c5 a8 b1 d7 76 f2 c1 c1 ef ca 1a df 395a5a5947aSTamas Ban INFO: - locking : true 396a5a5947aSTamas Ban INFO: FCONF: Config file with image ID:31 loaded at address = 0x4001010 397a5a5947aSTamas Ban INFO: Loading image id=24 at address 0x4001300 398a5a5947aSTamas Ban INFO: Image id=24 loaded: 0x4001300 - 0x400153a 399a5a5947aSTamas Ban INFO: Measured boot extend measurement: 400a5a5947aSTamas Ban INFO: - slot : 7 401a5a5947aSTamas Ban INFO: - signer_id : b0 f3 82 09 12 97 d8 3a 37 7a 72 47 1b ec 32 73 402a5a5947aSTamas Ban INFO: : e9 92 32 e2 49 59 f6 5e 8b 4a 4a 46 d8 22 9a da 403a5a5947aSTamas Ban INFO: - version : 404a5a5947aSTamas Ban INFO: - version_size: 0 405a5a5947aSTamas Ban INFO: - sw_type : TB_FW_CONFIG 406a5a5947aSTamas Ban INFO: - sw_type_size: 13 407a5a5947aSTamas Ban INFO: - algorithm : 2000009 408a5a5947aSTamas Ban INFO: - measurement : 05 b9 dc 98 62 26 a7 1c 2d e5 bb af f0 90 52 28 409a5a5947aSTamas Ban INFO: : f2 24 15 8a 3a 56 60 95 d6 51 3a 7a 1a 50 9b b7 410a5a5947aSTamas Ban INFO: - locking : true 411a5a5947aSTamas Ban INFO: FCONF: Config file with image ID:24 loaded at address = 0x4001300 412a5a5947aSTamas Ban INFO: BL1: Loading BL2 413a5a5947aSTamas Ban INFO: Loading image id=1 at address 0x404d000 414a5a5947aSTamas Ban INFO: Image id=1 loaded: 0x404d000 - 0x406412a 415a5a5947aSTamas Ban INFO: Measured boot extend measurement: 416a5a5947aSTamas Ban INFO: - slot : 8 417a5a5947aSTamas Ban INFO: - signer_id : b0 f3 82 09 12 97 d8 3a 37 7a 72 47 1b ec 32 73 418a5a5947aSTamas Ban INFO: : e9 92 32 e2 49 59 f6 5e 8b 4a 4a 46 d8 22 9a da 419a5a5947aSTamas Ban INFO: - version : 420a5a5947aSTamas Ban INFO: - version_size: 0 421a5a5947aSTamas Ban INFO: - sw_type : BL_2 422a5a5947aSTamas Ban INFO: - sw_type_size: 5 423a5a5947aSTamas Ban INFO: - algorithm : 2000009 424a5a5947aSTamas Ban INFO: - measurement : 53 a1 51 75 25 90 fb a1 d9 b8 c8 34 32 3a 01 16 425a5a5947aSTamas Ban INFO: : c9 9e 74 91 7d 28 02 56 3f 5c 40 94 37 58 50 68 426a5a5947aSTamas Ban INFO: - locking : true 427a5a5947aSTamas Ban 428a5a5947aSTamas BanDelegated Attestation 429a5a5947aSTamas Ban--------------------- 430a5a5947aSTamas Ban 431a5a5947aSTamas BanDelegated Attestation Service was mainly developed to support the attestation 432a5a5947aSTamas Banflow on the ``ARM Confidential Compute Architecture`` (ARM CCA) [7]_. 433a5a5947aSTamas BanThe detailed description of the delegated attestation service can be found in 434a5a5947aSTamas Banthe ``Delegated Attestation Service Integration Guide`` [4]_ document. 435a5a5947aSTamas Ban 436a5a5947aSTamas BanIn the CCA use case, the Realm Management Monitor (RMM) relies on the delegated 437624c9a0bSTamas Banattestation service of the RSE to get a realm attestation key and the CCA 438a5a5947aSTamas Banplatform token. BL31 does not use the service for its own purpose, only calls 439624c9a0bSTamas Banit on behalf of RMM. The access to MHU interface and thereby to RSE is 440a5a5947aSTamas Banrestricted to BL31 only. Therefore, RMM does not have direct access, all calls 441a5a5947aSTamas Banneed to go through BL31. The RMM dispatcher module of the BL31 is responsible 442a5a5947aSTamas Banfor delivering the calls between the two parties. 443a5a5947aSTamas Ban 444a5a5947aSTamas BanDelegated Attestation API 445a5a5947aSTamas Ban^^^^^^^^^^^^^^^^^^^^^^^^^ 446a5a5947aSTamas BanDefined here: 447a5a5947aSTamas Ban 448a5a5947aSTamas Ban- ``include/lib/psa/delegated_attestation.h`` 449a5a5947aSTamas Ban 450a5a5947aSTamas Ban.. code-block:: c 451a5a5947aSTamas Ban 452a5a5947aSTamas Ban psa_status_t 453624c9a0bSTamas Ban rse_delegated_attest_get_delegated_key(uint8_t ecc_curve, 454a5a5947aSTamas Ban uint32_t key_bits, 455a5a5947aSTamas Ban uint8_t *key_buf, 456a5a5947aSTamas Ban size_t key_buf_size, 457a5a5947aSTamas Ban size_t *key_size, 458a5a5947aSTamas Ban uint32_t hash_algo); 459a5a5947aSTamas Ban 460a5a5947aSTamas Ban psa_status_t 461624c9a0bSTamas Ban rse_delegated_attest_get_token(const uint8_t *dak_pub_hash, 462a5a5947aSTamas Ban size_t dak_pub_hash_size, 463a5a5947aSTamas Ban uint8_t *token_buf, 464a5a5947aSTamas Ban size_t token_buf_size, 465a5a5947aSTamas Ban size_t *token_size); 466a5a5947aSTamas Ban 467a5a5947aSTamas BanAttestation flow 468a5a5947aSTamas Ban^^^^^^^^^^^^^^^^ 469a5a5947aSTamas Ban 470624c9a0bSTamas Ban.. figure:: ../resources/diagrams/rse_attestation_flow.svg 471a5a5947aSTamas Ban :align: center 472a5a5947aSTamas Ban 473a5a5947aSTamas BanSample attestation token 474a5a5947aSTamas Ban^^^^^^^^^^^^^^^^^^^^^^^^ 475a5a5947aSTamas Ban 476a5a5947aSTamas BanBinary format: 477a5a5947aSTamas Ban 478a5a5947aSTamas Ban.. code-block:: bash 479a5a5947aSTamas Ban 480a5a5947aSTamas Ban INFO: DELEGATED ATTEST TEST START 481a5a5947aSTamas Ban INFO: Get delegated attestation key start 482a5a5947aSTamas Ban INFO: Get delegated attest key succeeds, len: 48 483a5a5947aSTamas Ban INFO: Delegated attest key: 484a5a5947aSTamas Ban INFO: 0d 2a 66 61 d4 89 17 e1 70 c6 73 56 df f4 11 fd 485a5a5947aSTamas Ban INFO: 7d 1f 3b 8a a3 30 3d 70 4c d9 06 c3 c7 ef 29 43 486a5a5947aSTamas Ban INFO: 0f ee b5 e7 56 e0 71 74 1b c4 39 39 fd 85 f6 7b 487a5a5947aSTamas Ban INFO: Get platform token start 488a5a5947aSTamas Ban INFO: Get platform token succeeds, len: 1086 489a5a5947aSTamas Ban INFO: Platform attestation token: 4905c8b5f9fSTamas Ban INFO: d2 84 44 a1 01 38 22 a0 59 05 81 a9 19 01 09 78 4915c8b5f9fSTamas Ban INFO: 23 74 61 67 3a 61 72 6d 2e 63 6f 6d 2c 32 30 32 4925c8b5f9fSTamas Ban INFO: 33 3a 63 63 61 5f 70 6c 61 74 66 6f 72 6d 23 31 4935c8b5f9fSTamas Ban INFO: 2e 30 2e 30 0a 58 20 0d 22 e0 8a 98 46 90 58 48 4945c8b5f9fSTamas Ban INFO: 63 18 28 34 89 bd b3 6f 09 db ef eb 18 64 df 43 4955c8b5f9fSTamas Ban INFO: 3f a6 e5 4e a2 d7 11 19 09 5c 58 20 7f 45 4c 46 4965c8b5f9fSTamas Ban INFO: 02 01 01 00 00 00 00 00 00 00 00 00 03 00 3e 00 4975c8b5f9fSTamas Ban INFO: 01 00 00 00 50 58 00 00 00 00 00 00 19 01 00 58 4985c8b5f9fSTamas Ban INFO: 21 01 07 06 05 04 03 02 01 00 0f 0e 0d 0c 0b 0a 4995c8b5f9fSTamas Ban INFO: 09 08 17 16 15 14 13 12 11 10 1f 1e 1d 1c 1b 1a 5005c8b5f9fSTamas Ban INFO: 19 18 19 09 61 44 cf cf cf cf 19 09 5b 19 30 03 5015c8b5f9fSTamas Ban INFO: 19 09 62 67 73 68 61 2d 32 35 36 19 09 60 78 3a 5025c8b5f9fSTamas Ban INFO: 68 74 74 70 73 3a 2f 2f 76 65 72 61 69 73 6f 6e 5035c8b5f9fSTamas Ban INFO: 2e 65 78 61 6d 70 6c 65 2f 2e 77 65 6c 6c 2d 6b 5045c8b5f9fSTamas Ban INFO: 6e 6f 77 6e 2f 76 65 72 61 69 73 6f 6e 2f 76 65 5055c8b5f9fSTamas Ban INFO: 72 69 66 69 63 61 74 69 6f 6e 19 09 5f 8d a4 01 5065c8b5f9fSTamas Ban INFO: 69 52 53 45 5f 42 4c 31 5f 32 05 58 20 53 78 79 5075c8b5f9fSTamas Ban INFO: 63 07 53 5d f3 ec 8d 8b 15 a2 e2 dc 56 41 41 9c 5085c8b5f9fSTamas Ban INFO: 3d 30 60 cf e3 22 38 c0 fa 97 3f 7a a3 02 58 20 5095c8b5f9fSTamas Ban INFO: 9a 27 1f 2a 91 6b 0b 6e e6 ce cb 24 26 f0 b3 20 5105c8b5f9fSTamas Ban INFO: 6e f0 74 57 8b e5 5d 9b c9 4f 6f 3f e3 ab 86 aa 5115c8b5f9fSTamas Ban INFO: 06 67 73 68 61 2d 32 35 36 a4 01 67 52 53 45 5f 5126dfeb60aSThomas Fossati INFO: 42 4c 32 05 58 20 53 78 79 63 07 53 5d f3 ec 8d 5136dfeb60aSThomas Fossati INFO: 8b 15 a2 e2 dc 56 41 41 9c 3d 30 60 cf e3 22 38 5145c8b5f9fSTamas Ban INFO: c0 fa 97 3f 7a a3 02 58 20 53 c2 34 e5 e8 47 2b 5155c8b5f9fSTamas Ban INFO: 6a c5 1c 1a e1 ca b3 fe 06 fa d0 53 be b8 eb fd 5165c8b5f9fSTamas Ban INFO: 89 77 b0 10 65 5b fd d3 c3 06 67 73 68 61 2d 32 5175c8b5f9fSTamas Ban INFO: 35 36 a4 01 65 52 53 45 5f 53 05 58 20 53 78 79 5185c8b5f9fSTamas Ban INFO: 63 07 53 5d f3 ec 8d 8b 15 a2 e2 dc 56 41 41 9c 5195c8b5f9fSTamas Ban INFO: 3d 30 60 cf e3 22 38 c0 fa 97 3f 7a a3 02 58 20 5205c8b5f9fSTamas Ban INFO: 11 21 cf cc d5 91 3f 0a 63 fe c4 0a 6f fd 44 ea 5215c8b5f9fSTamas Ban INFO: 64 f9 dc 13 5c 66 63 4b a0 01 d1 0b cf 43 02 a2 5225c8b5f9fSTamas Ban INFO: 06 67 73 68 61 2d 32 35 36 a4 01 66 41 50 5f 42 5235c8b5f9fSTamas Ban INFO: 4c 31 05 58 20 53 78 79 63 07 53 5d f3 ec 8d 8b 5245c8b5f9fSTamas Ban INFO: 15 a2 e2 dc 56 41 41 9c 3d 30 60 cf e3 22 38 c0 5255c8b5f9fSTamas Ban INFO: fa 97 3f 7a a3 02 58 20 15 71 b5 ec 78 bd 68 51 5265c8b5f9fSTamas Ban INFO: 2b f7 83 0b b6 a2 a4 4b 20 47 c7 df 57 bc e7 9e 5275c8b5f9fSTamas Ban INFO: b8 a1 c0 e5 be a0 a5 01 06 67 73 68 61 2d 32 35 5285c8b5f9fSTamas Ban INFO: 36 a4 01 66 41 50 5f 42 4c 32 05 58 20 53 78 79 5295c8b5f9fSTamas Ban INFO: 63 07 53 5d f3 ec 8d 8b 15 a2 e2 dc 56 41 41 9c 5305c8b5f9fSTamas Ban INFO: 3d 30 60 cf e3 22 38 c0 fa 97 3f 7a a3 02 58 20 5315c8b5f9fSTamas Ban INFO: 10 15 9b af 26 2b 43 a9 2d 95 db 59 da e1 f7 2c 5325c8b5f9fSTamas Ban INFO: 64 51 27 30 16 61 e0 a3 ce 4e 38 b2 95 a9 7c 58 5335c8b5f9fSTamas Ban INFO: 06 67 73 68 61 2d 32 35 36 a4 01 67 53 43 50 5f 5345c8b5f9fSTamas Ban INFO: 42 4c 31 05 58 20 53 78 79 63 07 53 5d f3 ec 8d 5356dfeb60aSThomas Fossati INFO: 8b 15 a2 e2 dc 56 41 41 9c 3d 30 60 cf e3 22 38 5365c8b5f9fSTamas Ban INFO: c0 fa 97 3f 7a a3 02 58 20 10 12 2e 85 6b 3f cd 5375c8b5f9fSTamas Ban INFO: 49 f0 63 63 63 17 47 61 49 cb 73 0a 1a a1 cf aa 5385c8b5f9fSTamas Ban INFO: d8 18 55 2b 72 f5 6d 6f 68 06 67 73 68 61 2d 32 5395c8b5f9fSTamas Ban INFO: 35 36 a4 01 67 53 43 50 5f 42 4c 32 05 58 20 f1 5405c8b5f9fSTamas Ban INFO: 4b 49 87 90 4b cb 58 14 e4 45 9a 05 7e d4 d2 0f 5415c8b5f9fSTamas Ban INFO: 58 a6 33 15 22 88 a7 61 21 4d cd 28 78 0b 56 02 5425c8b5f9fSTamas Ban INFO: 58 20 aa 67 a1 69 b0 bb a2 17 aa 0a a8 8a 65 34 5435c8b5f9fSTamas Ban INFO: 69 20 c8 4c 42 44 7c 36 ba 5f 7e a6 5f 42 2c 1f 5445c8b5f9fSTamas Ban INFO: e5 d8 06 67 73 68 61 2d 32 35 36 a4 01 67 41 50 5455c8b5f9fSTamas Ban INFO: 5f 42 4c 33 31 05 58 20 53 78 79 63 07 53 5d f3 5465c8b5f9fSTamas Ban INFO: ec 8d 8b 15 a2 e2 dc 56 41 41 9c 3d 30 60 cf e3 5475c8b5f9fSTamas Ban INFO: 22 38 c0 fa 97 3f 7a a3 02 58 20 2e 6d 31 a5 98 5485c8b5f9fSTamas Ban INFO: 3a 91 25 1b fa e5 ae fa 1c 0a 19 d8 ba 3c f6 01 5495c8b5f9fSTamas Ban INFO: d0 e8 a7 06 b4 cf a9 66 1a 6b 8a 06 67 73 68 61 5505c8b5f9fSTamas Ban INFO: 2d 32 35 36 a4 01 63 52 4d 4d 05 58 20 53 78 79 5515c8b5f9fSTamas Ban INFO: 63 07 53 5d f3 ec 8d 8b 15 a2 e2 dc 56 41 41 9c 5525c8b5f9fSTamas Ban INFO: 3d 30 60 cf e3 22 38 c0 fa 97 3f 7a a3 02 58 20 5535c8b5f9fSTamas Ban INFO: a1 fb 50 e6 c8 6f ae 16 79 ef 33 51 29 6f d6 71 5545c8b5f9fSTamas Ban INFO: 34 11 a0 8c f8 dd 17 90 a4 fd 05 fa e8 68 81 64 5555c8b5f9fSTamas Ban INFO: 06 67 73 68 61 2d 32 35 36 a4 01 69 48 57 5f 43 5565c8b5f9fSTamas Ban INFO: 4f 4e 46 49 47 05 58 20 53 78 79 63 07 53 5d f3 5575c8b5f9fSTamas Ban INFO: ec 8d 8b 15 a2 e2 dc 56 41 41 9c 3d 30 60 cf e3 5585c8b5f9fSTamas Ban INFO: 22 38 c0 fa 97 3f 7a a3 02 58 20 1a 25 24 02 97 5595c8b5f9fSTamas Ban INFO: 2f 60 57 fa 53 cc 17 2b 52 b9 ff ca 69 8e 18 31 5605c8b5f9fSTamas Ban INFO: 1f ac d0 f3 b0 6e ca ae f7 9e 17 06 67 73 68 61 5615c8b5f9fSTamas Ban INFO: 2d 32 35 36 a4 01 69 46 57 5f 43 4f 4e 46 49 47 5625c8b5f9fSTamas Ban INFO: 05 58 20 53 78 79 63 07 53 5d f3 ec 8d 8b 15 a2 5635c8b5f9fSTamas Ban INFO: e2 dc 56 41 41 9c 3d 30 60 cf e3 22 38 c0 fa 97 5645c8b5f9fSTamas Ban INFO: 3f 7a a3 02 58 20 9a 92 ad bc 0c ee 38 ef 65 8c 5655c8b5f9fSTamas Ban INFO: 71 ce 1b 1b f8 c6 56 68 f1 66 bf b2 13 64 4c 89 5665c8b5f9fSTamas Ban INFO: 5c cb 1a d0 7a 25 06 67 73 68 61 2d 32 35 36 a4 5675c8b5f9fSTamas Ban INFO: 01 6c 54 42 5f 46 57 5f 43 4f 4e 46 49 47 05 58 5686dfeb60aSThomas Fossati INFO: 20 53 78 79 63 07 53 5d f3 ec 8d 8b 15 a2 e2 dc 5696dfeb60aSThomas Fossati INFO: 56 41 41 9c 3d 30 60 cf e3 22 38 c0 fa 97 3f 7a 5705c8b5f9fSTamas Ban INFO: a3 02 58 20 23 89 03 18 0c c1 04 ec 2c 5d 8b 3f 5715c8b5f9fSTamas Ban INFO: 20 c5 bc 61 b3 89 ec 0a 96 7d f8 cc 20 8c dc 7c 5725c8b5f9fSTamas Ban INFO: d4 54 17 4f 06 67 73 68 61 2d 32 35 36 a4 01 6d 5735c8b5f9fSTamas Ban INFO: 53 4f 43 5f 46 57 5f 43 4f 4e 46 49 47 05 58 20 5745c8b5f9fSTamas Ban INFO: 53 78 79 63 07 53 5d f3 ec 8d 8b 15 a2 e2 dc 56 5755c8b5f9fSTamas Ban INFO: 41 41 9c 3d 30 60 cf e3 22 38 c0 fa 97 3f 7a a3 5765c8b5f9fSTamas Ban INFO: 02 58 20 e6 c2 1e 8d 26 0f e7 18 82 de bd b3 39 5775c8b5f9fSTamas Ban INFO: d2 40 2a 2c a7 64 85 29 bc 23 03 f4 86 49 bc e0 5785c8b5f9fSTamas Ban INFO: 38 00 17 06 67 73 68 61 2d 32 35 36 58 60 31 d0 5795c8b5f9fSTamas Ban INFO: 4d 52 cc de 95 2c 1e 32 cb a1 81 88 5a 40 b8 cc 5805c8b5f9fSTamas Ban INFO: 38 e0 52 8c 1e 89 58 98 07 64 2a a5 e3 f2 bc 37 5815c8b5f9fSTamas Ban INFO: f9 53 74 50 6b ff 4d 2e 4b e7 06 3c 4d 72 41 92 5825c8b5f9fSTamas Ban INFO: 70 c7 22 e8 d4 d9 3e e8 b6 c9 fa ce 3b 43 c9 76 5835c8b5f9fSTamas Ban INFO: 1a 49 94 1a b6 f3 8f fd ff 49 6a d4 63 b4 cb fa 5845c8b5f9fSTamas Ban INFO: 11 d8 3e 23 e3 1f 7f 62 32 9d e3 0c 1c c8 585a5a5947aSTamas Ban INFO: DELEGATED ATTEST TEST END 586a5a5947aSTamas Ban 587a5a5947aSTamas BanJSON format: 588a5a5947aSTamas Ban 589a5a5947aSTamas Ban.. code-block:: JSON 590a5a5947aSTamas Ban 591a5a5947aSTamas Ban { 5925c8b5f9fSTamas Ban "CCA_ATTESTATION_PROFILE": "tag:arm.com,2023:cca_platform#1.0.0", 5935c8b5f9fSTamas Ban "CCA_PLATFORM_CHALLENGE": "b'0D22E08A98469058486318283489BDB36F09DBEFEB1864DF433FA6E54EA2D711'", 5946dfeb60aSThomas Fossati "CCA_PLATFORM_IMPLEMENTATION_ID": "b'7F454C4602010100000000000000000003003E00010000005058000000000000'", 5956dfeb60aSThomas Fossati "CCA_PLATFORM_INSTANCE_ID": "b'0107060504030201000F0E0D0C0B0A090817161514131211101F1E1D1C1B1A1918'", 5966dfeb60aSThomas Fossati "CCA_PLATFORM_CONFIG": "b'CFCFCFCF'", 5976dfeb60aSThomas Fossati "CCA_PLATFORM_LIFECYCLE": "secured_3003", 5986dfeb60aSThomas Fossati "CCA_PLATFORM_HASH_ALGO_ID": "sha-256", 5996dfeb60aSThomas Fossati "CCA_PLATFORM_VERIFICATION_SERVICE": "https://veraison.example/.well-known/veraison/verification", 600a5a5947aSTamas Ban "CCA_PLATFORM_SW_COMPONENTS": [ 601a5a5947aSTamas Ban { 6026dfeb60aSThomas Fossati "SW_COMPONENT_TYPE": "RSE_BL1_2", 6036dfeb60aSThomas Fossati "SIGNER_ID": "b'5378796307535DF3EC8D8B15A2E2DC5641419C3D3060CFE32238C0FA973F7AA3'", 6046dfeb60aSThomas Fossati "MEASUREMENT_VALUE": "b'9A271F2A916B0B6EE6CECB2426F0B3206EF074578BE55D9BC94F6F3FE3AB86AA'", 6056dfeb60aSThomas Fossati "CCA_SW_COMPONENT_HASH_ID": "sha-256" 606a5a5947aSTamas Ban }, 607a5a5947aSTamas Ban { 6086dfeb60aSThomas Fossati "SW_COMPONENT_TYPE": "RSE_BL2", 6096dfeb60aSThomas Fossati "SIGNER_ID": "b'5378796307535DF3EC8D8B15A2E2DC5641419C3D3060CFE32238C0FA973F7AA3'", 6106dfeb60aSThomas Fossati "MEASUREMENT_VALUE": "b'53C234E5E8472B6AC51C1AE1CAB3FE06FAD053BEB8EBFD8977B010655BFDD3C3'", 6116dfeb60aSThomas Fossati "CCA_SW_COMPONENT_HASH_ID": "sha-256" 612a5a5947aSTamas Ban }, 613a5a5947aSTamas Ban { 6146dfeb60aSThomas Fossati "SW_COMPONENT_TYPE": "RSE_S", 6156dfeb60aSThomas Fossati "SIGNER_ID": "b'5378796307535DF3EC8D8B15A2E2DC5641419C3D3060CFE32238C0FA973F7AA3'", 6166dfeb60aSThomas Fossati "MEASUREMENT_VALUE": "b'1121CFCCD5913F0A63FEC40A6FFD44EA64F9DC135C66634BA001D10BCF4302A2'", 6176dfeb60aSThomas Fossati "CCA_SW_COMPONENT_HASH_ID": "sha-256" 618a5a5947aSTamas Ban }, 619a5a5947aSTamas Ban { 6206dfeb60aSThomas Fossati "SW_COMPONENT_TYPE": "AP_BL1", 6216dfeb60aSThomas Fossati "SIGNER_ID": "b'5378796307535DF3EC8D8B15A2E2DC5641419C3D3060CFE32238C0FA973F7AA3'", 6226dfeb60aSThomas Fossati "MEASUREMENT_VALUE": "b'1571B5EC78BD68512BF7830BB6A2A44B2047C7DF57BCE79EB8A1C0E5BEA0A501'", 6236dfeb60aSThomas Fossati "CCA_SW_COMPONENT_HASH_ID": "sha-256" 624a5a5947aSTamas Ban }, 625a5a5947aSTamas Ban { 6266dfeb60aSThomas Fossati "SW_COMPONENT_TYPE": "AP_BL2", 6276dfeb60aSThomas Fossati "SIGNER_ID": "b'5378796307535DF3EC8D8B15A2E2DC5641419C3D3060CFE32238C0FA973F7AA3'", 6286dfeb60aSThomas Fossati "MEASUREMENT_VALUE": "b'10159BAF262B43A92D95DB59DAE1F72C645127301661E0A3CE4E38B295A97C58'", 6296dfeb60aSThomas Fossati "CCA_SW_COMPONENT_HASH_ID": "sha-256" 630a5a5947aSTamas Ban }, 631a5a5947aSTamas Ban { 6326dfeb60aSThomas Fossati "SW_COMPONENT_TYPE": "SCP_BL1", 6336dfeb60aSThomas Fossati "SIGNER_ID": "b'5378796307535DF3EC8D8B15A2E2DC5641419C3D3060CFE32238C0FA973F7AA3'", 6346dfeb60aSThomas Fossati "MEASUREMENT_VALUE": "b'10122E856B3FCD49F063636317476149CB730A1AA1CFAAD818552B72F56D6F68'", 6356dfeb60aSThomas Fossati "CCA_SW_COMPONENT_HASH_ID": "sha-256" 636a5a5947aSTamas Ban }, 637a5a5947aSTamas Ban { 6386dfeb60aSThomas Fossati "SW_COMPONENT_TYPE": "SCP_BL2", 6396dfeb60aSThomas Fossati "SIGNER_ID": "b'F14B4987904BCB5814E4459A057ED4D20F58A633152288A761214DCD28780B56'", 6406dfeb60aSThomas Fossati "MEASUREMENT_VALUE": "b'AA67A169B0BBA217AA0AA88A65346920C84C42447C36BA5F7EA65F422C1FE5D8'", 6416dfeb60aSThomas Fossati "CCA_SW_COMPONENT_HASH_ID": "sha-256" 642a5a5947aSTamas Ban }, 643a5a5947aSTamas Ban { 6446dfeb60aSThomas Fossati "SW_COMPONENT_TYPE": "AP_BL31", 6456dfeb60aSThomas Fossati "SIGNER_ID": "b'5378796307535DF3EC8D8B15A2E2DC5641419C3D3060CFE32238C0FA973F7AA3'", 6466dfeb60aSThomas Fossati "MEASUREMENT_VALUE": "b'2E6D31A5983A91251BFAE5AEFA1C0A19D8BA3CF601D0E8A706B4CFA9661A6B8A'", 6476dfeb60aSThomas Fossati "CCA_SW_COMPONENT_HASH_ID": "sha-256" 648a5a5947aSTamas Ban }, 649a5a5947aSTamas Ban { 6506dfeb60aSThomas Fossati "SW_COMPONENT_TYPE": "RMM", 6516dfeb60aSThomas Fossati "SIGNER_ID": "b'5378796307535DF3EC8D8B15A2E2DC5641419C3D3060CFE32238C0FA973F7AA3'", 6526dfeb60aSThomas Fossati "MEASUREMENT_VALUE": "b'A1FB50E6C86FAE1679EF3351296FD6713411A08CF8DD1790A4FD05FAE8688164'", 6536dfeb60aSThomas Fossati "CCA_SW_COMPONENT_HASH_ID": "sha-256" 6546dfeb60aSThomas Fossati }, 6556dfeb60aSThomas Fossati { 6566dfeb60aSThomas Fossati "SW_COMPONENT_TYPE": "HW_CONFIG", 6576dfeb60aSThomas Fossati "SIGNER_ID": "b'5378796307535DF3EC8D8B15A2E2DC5641419C3D3060CFE32238C0FA973F7AA3'", 6586dfeb60aSThomas Fossati "MEASUREMENT_VALUE": "b'1A252402972F6057FA53CC172B52B9FFCA698E18311FACD0F3B06ECAAEF79E17'", 6596dfeb60aSThomas Fossati "CCA_SW_COMPONENT_HASH_ID": "sha-256" 6606dfeb60aSThomas Fossati }, 6616dfeb60aSThomas Fossati { 6626dfeb60aSThomas Fossati "SW_COMPONENT_TYPE": "FW_CONFIG", 6636dfeb60aSThomas Fossati "SIGNER_ID": "b'5378796307535DF3EC8D8B15A2E2DC5641419C3D3060CFE32238C0FA973F7AA3'", 6646dfeb60aSThomas Fossati "MEASUREMENT_VALUE": "b'9A92ADBC0CEE38EF658C71CE1B1BF8C65668F166BFB213644C895CCB1AD07A25'", 6656dfeb60aSThomas Fossati "CCA_SW_COMPONENT_HASH_ID": "sha-256" 6666dfeb60aSThomas Fossati }, 6676dfeb60aSThomas Fossati { 6686dfeb60aSThomas Fossati "SW_COMPONENT_TYPE": "TB_FW_CONFIG", 6696dfeb60aSThomas Fossati "SIGNER_ID": "b'5378796307535DF3EC8D8B15A2E2DC5641419C3D3060CFE32238C0FA973F7AA3'", 6706dfeb60aSThomas Fossati "MEASUREMENT_VALUE": "b'238903180CC104EC2C5D8B3F20C5BC61B389EC0A967DF8CC208CDC7CD454174F'", 6716dfeb60aSThomas Fossati "CCA_SW_COMPONENT_HASH_ID": "sha-256" 6726dfeb60aSThomas Fossati }, 6736dfeb60aSThomas Fossati { 6746dfeb60aSThomas Fossati "SW_COMPONENT_TYPE": "SOC_FW_CONFIG", 6756dfeb60aSThomas Fossati "SIGNER_ID": "b'5378796307535DF3EC8D8B15A2E2DC5641419C3D3060CFE32238C0FA973F7AA3'", 6766dfeb60aSThomas Fossati "MEASUREMENT_VALUE": "b'E6C21E8D260FE71882DEBDB339D2402A2CA7648529BC2303F48649BCE0380017'", 6776dfeb60aSThomas Fossati "CCA_SW_COMPONENT_HASH_ID": "sha-256" 678a5a5947aSTamas Ban } 6796dfeb60aSThomas Fossati ] 680a5a5947aSTamas Ban } 681a5a5947aSTamas Ban 682e4582e42STamas BanRSE based DICE Protection Environment 683e4582e42STamas Ban------------------------------------- 684e4582e42STamas Ban 685e4582e42STamas BanThe ``DICE Protection Environment (DPE)`` [8]_ service makes it possible to 686e4582e42STamas Banexecute |DICE| commands within an isolated execution environment. It provides 687e4582e42STamas Banclients with an interface to send DICE commands, encoded as CBOR objects, 688e4582e42STamas Banthat act on opaque context handles. The |DPE| service performs |DICE| 689e4582e42STamas Banderivations and certification on its internal contexts, without exposing the 690e4582e42STamas Ban|DICE| secrets (private keys and CDIs) outside of the isolated execution 691e4582e42STamas Banenvironment. 692e4582e42STamas Ban 693e4582e42STamas Ban|DPE| API 694e4582e42STamas Ban^^^^^^^^^ 695e4582e42STamas Ban 696e4582e42STamas BanDefined here: 697e4582e42STamas Ban 698e4582e42STamas Ban- ``include/lib/psa/dice_protection_environment.h`` 699e4582e42STamas Ban 700e4582e42STamas Ban.. code-block:: c 701e4582e42STamas Ban 702e4582e42STamas Ban dpe_error_t 703e4582e42STamas Ban dpe_derive_context(int context_handle, 704e4582e42STamas Ban uint32_t cert_id, 705e4582e42STamas Ban bool retain_parent_context, 706e4582e42STamas Ban bool allow_new_context_to_derive, 707e4582e42STamas Ban bool create_certificate, 708e4582e42STamas Ban const DiceInputValues *dice_inputs, 709e4582e42STamas Ban int32_t target_locality, 710e4582e42STamas Ban bool return_certificate, 711e4582e42STamas Ban bool allow_new_context_to_export, 712e4582e42STamas Ban bool export_cdi, 713e4582e42STamas Ban int *new_context_handle, 714e4582e42STamas Ban int *new_parent_context_handle, 715e4582e42STamas Ban uint8_t *new_certificate_buf, 716e4582e42STamas Ban size_t new_certificate_buf_size, 717e4582e42STamas Ban size_t *new_certificate_actual_size, 718e4582e42STamas Ban uint8_t *exported_cdi_buf, 719e4582e42STamas Ban size_t exported_cdi_buf_size, 720e4582e42STamas Ban size_t *exported_cdi_actual_size); 721e4582e42STamas Ban 722e4582e42STamas BanBuild time config options 723e4582e42STamas Ban^^^^^^^^^^^^^^^^^^^^^^^^^ 724e4582e42STamas Ban 725e4582e42STamas Ban- ``MEASURED_BOOT``: Enable measured boot. 726e4582e42STamas Ban- ``DICE_PROTECTION_ENVIRONMENT``: Boolean flag to specify the measured boot 727e4582e42STamas Ban backend when |RSE| based ``MEASURED_BOOT`` is enabled. The default value is 728e4582e42STamas Ban ``0``. When set to ``1`` then measurements and additional metadata collected 729e4582e42STamas Ban during the measured boot process are sent to the |DPE| for storage and 730e4582e42STamas Ban processing. 731e4582e42STamas Ban- ``DPE_ALG_ID``: Determine the hash algorithm to measure the images. The 732e4582e42STamas Ban default value is sha-256. 733e4582e42STamas Ban 734e4582e42STamas BanExample certificate chain 735e4582e42STamas Ban^^^^^^^^^^^^^^^^^^^^^^^^^ 736e4582e42STamas Ban 737e4582e42STamas Ban``plat/arm/board/tc/tc_dpe.h`` 738e4582e42STamas Ban 739624c9a0bSTamas BanRSE OTP Assets Management 740a5a5947aSTamas Ban------------------------- 741a5a5947aSTamas Ban 742624c9a0bSTamas BanRSE provides access for AP to assets in OTP, which include keys for image 743a5a5947aSTamas Bansignature verification and non-volatile counters for anti-rollback protection. 744a5a5947aSTamas Ban 745a5a5947aSTamas BanNon-Volatile Counter API 746a5a5947aSTamas Ban^^^^^^^^^^^^^^^^^^^^^^^^ 747a5a5947aSTamas Ban 748624c9a0bSTamas BanAP/RSE interface for retrieving and incrementing non-volatile counters API is 749a5a5947aSTamas Banas follows. 750a5a5947aSTamas Ban 751a5a5947aSTamas BanDefined here: 752a5a5947aSTamas Ban 753624c9a0bSTamas Ban- ``include/lib/psa/rse_platform_api.h`` 754a5a5947aSTamas Ban 755a5a5947aSTamas Ban.. code-block:: c 756a5a5947aSTamas Ban 757624c9a0bSTamas Ban psa_status_t rse_platform_nv_counter_increment(uint32_t counter_id) 758a5a5947aSTamas Ban 759624c9a0bSTamas Ban psa_status_t rse_platform_nv_counter_read(uint32_t counter_id, 760a5a5947aSTamas Ban uint32_t size, uint8_t *val) 761a5a5947aSTamas Ban 762a5a5947aSTamas BanThrough this service, we can read/increment any of the 3 non-volatile 763a5a5947aSTamas Bancounters used on an Arm CCA platform: 764a5a5947aSTamas Ban 765a5a5947aSTamas Ban- ``Non-volatile counter for CCA firmware (BL2, BL31, RMM).`` 766a5a5947aSTamas Ban- ``Non-volatile counter for secure firmware.`` 767a5a5947aSTamas Ban- ``Non-volatile counter for non-secure firmware.`` 768a5a5947aSTamas Ban 769a5a5947aSTamas BanPublic Key API 770a5a5947aSTamas Ban^^^^^^^^^^^^^^ 771a5a5947aSTamas Ban 772624c9a0bSTamas BanAP/RSE interface for reading the ROTPK is as follows. 773a5a5947aSTamas Ban 774a5a5947aSTamas BanDefined here: 775a5a5947aSTamas Ban 776624c9a0bSTamas Ban- ``include/lib/psa/rse_platform_api.h`` 777a5a5947aSTamas Ban 778a5a5947aSTamas Ban.. code-block:: c 779a5a5947aSTamas Ban 780624c9a0bSTamas Ban psa_status_t rse_platform_key_read(enum rse_key_id_builtin_t key, 781a5a5947aSTamas Ban uint8_t *data, size_t data_size, size_t *data_length) 782a5a5947aSTamas Ban 783a5a5947aSTamas BanThrough this service, we can read any of the 3 ROTPKs used on an 784a5a5947aSTamas BanArm CCA platform: 785a5a5947aSTamas Ban 786a5a5947aSTamas Ban- ``ROTPK for CCA firmware (BL2, BL31, RMM).`` 787a5a5947aSTamas Ban- ``ROTPK for secure firmware.`` 788a5a5947aSTamas Ban- ``ROTPK for non-secure firmware.`` 789a5a5947aSTamas Ban 7901147a470SLeo YanGet entropy API 7911147a470SLeo Yan^^^^^^^^^^^^^^^ 7921147a470SLeo Yan 7931147a470SLeo YanAP/RSE interface for reading the entropy is as follows. 7941147a470SLeo Yan 7951147a470SLeo YanDefined here: 7961147a470SLeo Yan 7971147a470SLeo Yan- ``include/lib/psa/rse_platform_api.h`` 7981147a470SLeo Yan 7991147a470SLeo Yan.. code-block:: c 8001147a470SLeo Yan 8011147a470SLeo Yan psa_status_t rse_platform_get_entropy(uint8_t *data, size_t data_size) 8021147a470SLeo Yan 8031147a470SLeo YanThrough this service, we can read an entropy generated from RSE. 8041147a470SLeo Yan 805a5a5947aSTamas BanReferences 806a5a5947aSTamas Ban---------- 807a5a5947aSTamas Ban 808e4582e42STamas Ban.. [1] https://trustedfirmware-m.readthedocs.io/en/latest/platform/arm/rse/index.html 809e4582e42STamas Ban.. [2] https://trustedfirmware-m.readthedocs.io/en/latest/platform/arm/rse/rse_comms.html 810e4582e42STamas Ban.. [3] https://trustedfirmware-m.readthedocs.io/projects/tf-m-extras/en/latest/partitions/measured_boot_integration_guide.html 811e4582e42STamas Ban.. [4] https://trustedfirmware-m.readthedocs.io/projects/tf-m-extras/en/latest/partitions/delegated_attestation/delegated_attest_integration_guide.html 812e4582e42STamas Ban.. [5] https://trustedfirmware-m.readthedocs.io/en/latest/platform/arm/rse/rse_key_management.html 813*854d199bSGovindraj Raja.. [6] https://developer.arm.com/documentation/den0063 814a5a5947aSTamas Ban.. [7] https://developer.arm.com/documentation/DEN0096/A_a/?lang=en 815e4582e42STamas Ban.. [8] https://trustedfirmware-m.readthedocs.io/projects/tf-m-extras/en/latest/partitions/dice_protection_environment/dice_protection_environment.html 816a5a5947aSTamas Ban 817a5a5947aSTamas Ban-------------- 818a5a5947aSTamas Ban 819*854d199bSGovindraj Raja*Copyright (c) 2023-2025, Arm Limited. All rights reserved.* 8206dfeb60aSThomas Fossati*Copyright (c) 2024, Linaro Limited. All rights reserved.* 82136416b1eSYann Gautier*Copyright (c) 2025, STMicroelectronics - All Rights Reserved* 822