1*624c9a0bSTamas BanRuntime Security Engine (RSE) 2*624c9a0bSTamas Ban============================= 3a5a5947aSTamas Ban 4*624c9a0bSTamas BanThis document focuses on the relationship between the Runtime Security Engine 5*624c9a0bSTamas Ban(RSE) and the application processor (AP). According to the ARM reference design 6*624c9a0bSTamas 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 11*624c9a0bSTamas 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 14*624c9a0bSTamas Banown boot process, which is the same as on non-RSE systems. Please refer to the 15*624c9a0bSTamas Ban``RSE documentation`` [1]_ for more details about the RSE boot flow. 16a5a5947aSTamas Ban 17*624c9a0bSTamas 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 19*624c9a0bSTamas Banjust waits for external requests from other subsystems. RSE and other 20*624c9a0bSTamas 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 24*624c9a0bSTamas BanRSE communication layer 25a5a5947aSTamas Ban----------------------- 26a5a5947aSTamas Ban 27*624c9a0bSTamas BanThe communication between RSE and other subsystems are primarily relying on the 28*624c9a0bSTamas BanMessage Handling Unit (MHU) module. The number of MHU interfaces between RSE 29a5a5947aSTamas Banand other cores is IMPDEF. Besides MHU other modules also could take part in 30*624c9a0bSTamas Banthe communication. RSE is capable of mapping the AP memory to its address space. 31*624c9a0bSTamas BanThereby either RSE core itself or a DMA engine if it is present, can move the 32*624c9a0bSTamas Bandata between memory belonging to RSE or AP. In this way, a bigger amount of data 33a5a5947aSTamas Bancan be transferred in a short time. 34a5a5947aSTamas Ban 35a5a5947aSTamas BanThe MHU comes in pairs. There is a sender and receiver side. They are connected 36a5a5947aSTamas Banto each other. An MHU interface consists of two pairs of MHUs, one sender and 37a5a5947aSTamas Banone receiver on both sides. Bidirectional communication is possible over an 38*624c9a0bSTamas Baninterface. One pair provides message sending from AP to RSE and the other pair 39*624c9a0bSTamas Banfrom RSE to AP. The sender and receiver are connected via channels. There is an 40a5a5947aSTamas BanIMPDEF number of channels (e.g: 4-16) between a sender and a receiver module. 41a5a5947aSTamas Ban 42*624c9a0bSTamas BanThe RSE communication layer provides two ways for message exchange: 43a5a5947aSTamas Ban 44a5a5947aSTamas Ban- ``Embedded messaging``: The full message, including header and payload, are 45a5a5947aSTamas Ban exchanged over the MHU channels. A channel is capable of delivering a single 46a5a5947aSTamas Ban word. The sender writes the data to the channel register on its side and the 47a5a5947aSTamas Ban receiver can read the data from the channel on the other side. One dedicated 48a5a5947aSTamas Ban channel is used for signalling. It does not deliver any payload it is just 49a5a5947aSTamas Ban meant for signalling that the sender loaded the data to the channel registers 50a5a5947aSTamas Ban so the receiver can read them. The receiver uses the same channel to signal 51a5a5947aSTamas Ban that data was read. Signalling happens via IRQ. If the message is longer than 52a5a5947aSTamas Ban the data fit to the channel registers then the message is sent over in 53a5a5947aSTamas Ban multiple rounds. Both, sender and receiver allocate a local buffer for the 54a5a5947aSTamas Ban messages. Data is copied from/to these buffers to/from the channel registers. 55a5a5947aSTamas Ban- ``Pointer-access messaging``: The message header and the payload are 56a5a5947aSTamas Ban separated and they are conveyed in different ways. The header is sent 57a5a5947aSTamas Ban over the channels, similar to the embedded messaging but the payload is 58*624c9a0bSTamas Ban copied over by RSE core (or by DMA) between the sender and the receiver. This 59a5a5947aSTamas Ban could be useful in the case of long messages because transaction time is less 60*624c9a0bSTamas Ban compared to the embedded messaging mode. Small payloads are copied by the RSE 61a5a5947aSTamas Ban core because setting up DMA would require more CPU cycles. The payload is 62*624c9a0bSTamas Ban either copied into an internal buffer or directly read-written by RSE. Actual 63*624c9a0bSTamas Ban behavior depends on RSE setup, whether the partition supports memory-mapped 64a5a5947aSTamas Ban ``iovec``. Therefore, the sender must handle both cases and prevent access to 65*624c9a0bSTamas Ban the memory, where payload data lives, while the RSE handles the request. 66a5a5947aSTamas Ban 67*624c9a0bSTamas BanThe RSE communication layer supports both ways of messaging in parallel. It is 68a5a5947aSTamas Bandecided at runtime based on the message size which way to transfer the message. 69a5a5947aSTamas Ban 70a5a5947aSTamas Ban.. code-block:: bash 71a5a5947aSTamas Ban 72a5a5947aSTamas Ban +----------------------------------------------+ +-------------------+ 73a5a5947aSTamas Ban | | | | 74a5a5947aSTamas Ban | AP | | | 75a5a5947aSTamas Ban | | +--->| SRAM | 76a5a5947aSTamas Ban +----------------------------------------------| | | | 77a5a5947aSTamas Ban | BL1 / BL2 / BL31 | | | | 78a5a5947aSTamas Ban +----------------------------------------------+ | +-------------------+ 79a5a5947aSTamas Ban | ^ | ^ ^ 80a5a5947aSTamas Ban | send IRQ | receive |direct | | 81a5a5947aSTamas Ban V | |access | | 82a5a5947aSTamas Ban +--------------------+ +--------------------+ | | | 83a5a5947aSTamas Ban | MHU sender | | MHU receiver | | | Copy data | 84a5a5947aSTamas Ban +--------------------+ +--------------------+ | | | 85a5a5947aSTamas Ban | | | | | | | | | | | 86a5a5947aSTamas Ban | | channels | | | | channels | | | | | 87a5a5947aSTamas Ban | | e.g: 4-16 | | | | e.g: 4-16 | | | V | 88a5a5947aSTamas Ban +--------------------+ +--------------------+ | +-------+ | 89a5a5947aSTamas Ban | MHU receiver | | MHU sender | | +->| DMA | | 90a5a5947aSTamas Ban +--------------------+ +--------------------+ | | +-------+ | 91a5a5947aSTamas Ban | ^ | | ^ | 92a5a5947aSTamas Ban IRQ | receive | send | | | Copy data | 93a5a5947aSTamas Ban V | | | V V 94a5a5947aSTamas Ban +----------------------------------------------+ | | +-------------------+ 95a5a5947aSTamas Ban | |--+-+ | | 96*624c9a0bSTamas Ban | RSE | | SRAM | 97a5a5947aSTamas Ban | | | | 98a5a5947aSTamas Ban +----------------------------------------------+ +-------------------+ 99a5a5947aSTamas Ban 100a5a5947aSTamas Ban.. Note:: 101a5a5947aSTamas Ban 102*624c9a0bSTamas Ban The RSE communication layer is not prepared for concurrent execution. The 103a5a5947aSTamas Ban current use case only requires message exchange during the boot phase. In 104a5a5947aSTamas Ban the boot phase, only a single core is running and the rest of the cores are 105a5a5947aSTamas Ban in reset. 106a5a5947aSTamas Ban 107a5a5947aSTamas BanMessage structure 108a5a5947aSTamas Ban^^^^^^^^^^^^^^^^^ 109*624c9a0bSTamas BanA description of the message format can be found in the ``RSE communication 110a5a5947aSTamas Bandesign`` [2]_ document. 111a5a5947aSTamas Ban 112a5a5947aSTamas BanSource files 113a5a5947aSTamas Ban^^^^^^^^^^^^ 114*624c9a0bSTamas Ban- RSE comms: ``drivers/arm/rse`` 115a5a5947aSTamas Ban- MHU driver: ``drivers/arm/mhu`` 116a5a5947aSTamas Ban 117a5a5947aSTamas Ban 118a5a5947aSTamas BanAPI for communication over MHU 119a5a5947aSTamas Ban^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 120a5a5947aSTamas BanThe API is defined in these header files: 121a5a5947aSTamas Ban 122*624c9a0bSTamas Ban- ``include/drivers/arm/rse_comms.h`` 123a5a5947aSTamas Ban- ``include/drivers/arm/mhu.h`` 124a5a5947aSTamas Ban 125*624c9a0bSTamas BanRSE provided runtime services 126a5a5947aSTamas Ban----------------------------- 127a5a5947aSTamas Ban 128*624c9a0bSTamas BanRSE provides the following runtime services: 129a5a5947aSTamas Ban 130a5a5947aSTamas Ban- ``Measured boot``: Securely store the firmware measurements which were 131a5a5947aSTamas Ban computed during the boot process and the associated metadata (image 132a5a5947aSTamas Ban description, measurement algorithm, etc.). More info on measured boot service 133*624c9a0bSTamas Ban in RSE can be found in the ``measured_boot_integration_guide`` [3]_ . 134a5a5947aSTamas Ban- ``Delegated attestation``: Query the platform attestation token and derive a 135a5a5947aSTamas Ban delegated attestation key. More info on the delegated attestation service 136*624c9a0bSTamas Ban in RSE can be found in the ``delegated_attestation_integration_guide`` [4]_ . 137a5a5947aSTamas Ban- ``OTP assets management``: Public keys used by AP during the trusted boot 138*624c9a0bSTamas Ban process can be requested from RSE. Furthermore, AP can request RSE to 139a5a5947aSTamas Ban increase a non-volatile counter. Please refer to the 140*624c9a0bSTamas Ban ``RSE key management`` [5]_ document for more details. 141a5a5947aSTamas Ban 142a5a5947aSTamas BanRuntime service API 143a5a5947aSTamas Ban^^^^^^^^^^^^^^^^^^^ 144*624c9a0bSTamas BanThe RSE provided runtime services implement a PSA aligned API. The parameter 145a5a5947aSTamas Banencoding follows the PSA client protocol described in the 146a5a5947aSTamas Ban``Firmware Framework for M`` [6]_ document in chapter 4.4. The implementation is 147a5a5947aSTamas Banrestricted to the static handle use case therefore only the ``psa_call`` API is 148a5a5947aSTamas Banimplemented. 149a5a5947aSTamas Ban 150a5a5947aSTamas Ban 151a5a5947aSTamas BanSoftware and API layers 152a5a5947aSTamas Ban^^^^^^^^^^^^^^^^^^^^^^^ 153a5a5947aSTamas Ban 154a5a5947aSTamas Ban.. code-block:: bash 155a5a5947aSTamas Ban 156a5a5947aSTamas Ban +----------------+ +---------------------+ 157a5a5947aSTamas Ban | BL1 / BL2 | | BL31 | 158a5a5947aSTamas Ban +----------------+ +---------------------+ 159a5a5947aSTamas Ban | | 160a5a5947aSTamas Ban | extend_measurement() | get_delegated_key() 161a5a5947aSTamas Ban | | get_platform_token() 162a5a5947aSTamas Ban V V 163a5a5947aSTamas Ban +----------------+ +---------------------+ 164a5a5947aSTamas Ban | PSA protocol | | PSA protocol | 165a5a5947aSTamas Ban +----------------+ +---------------------+ 166a5a5947aSTamas Ban | | 167a5a5947aSTamas Ban | psa_call() | psa_call() 168a5a5947aSTamas Ban | | 169a5a5947aSTamas Ban V V 170a5a5947aSTamas Ban +------------------------------------------------+ 171*624c9a0bSTamas Ban | RSE communication protocol | 172a5a5947aSTamas Ban +------------------------------------------------+ 173a5a5947aSTamas Ban | ^ 174a5a5947aSTamas Ban | mhu_send_data() | mhu_receive_data() 175a5a5947aSTamas Ban | | 176a5a5947aSTamas Ban V | 177a5a5947aSTamas Ban +------------------------------------------------+ 178a5a5947aSTamas Ban | MHU driver | 179a5a5947aSTamas Ban +------------------------------------------------+ 180a5a5947aSTamas Ban | ^ 181a5a5947aSTamas Ban | Register access | IRQ 182a5a5947aSTamas Ban V | 183a5a5947aSTamas Ban +------------------------------------------------+ 184a5a5947aSTamas Ban | MHU HW on AP side | 185a5a5947aSTamas Ban +------------------------------------------------+ 186a5a5947aSTamas Ban ^ 187a5a5947aSTamas Ban | Physical wires 188a5a5947aSTamas Ban | 189a5a5947aSTamas Ban V 190a5a5947aSTamas Ban +------------------------------------------------+ 191*624c9a0bSTamas Ban | MHU HW on RSE side | 192a5a5947aSTamas Ban +------------------------------------------------+ 193a5a5947aSTamas Ban | ^ 194a5a5947aSTamas Ban | IRQ | Register access 195a5a5947aSTamas Ban V | 196a5a5947aSTamas Ban +------------------------------------------------+ 197a5a5947aSTamas Ban | MHU driver | 198a5a5947aSTamas Ban +------------------------------------------------+ 199a5a5947aSTamas Ban | | 200a5a5947aSTamas Ban V V 201a5a5947aSTamas Ban +---------------+ +------------------------+ 202a5a5947aSTamas Ban | Measured boot | | Delegated attestation | 203a5a5947aSTamas Ban | service | | service | 204a5a5947aSTamas Ban +---------------+ +------------------------+ 205a5a5947aSTamas Ban 206a5a5947aSTamas Ban 207*624c9a0bSTamas BanRSE based Measured Boot 208a5a5947aSTamas Ban----------------------- 209a5a5947aSTamas Ban 210a5a5947aSTamas BanMeasured Boot is the process of cryptographically measuring (computing the hash 211a5a5947aSTamas Banvalue of a binary) the code and critical data used at boot time. The 212a5a5947aSTamas Banmeasurement must be stored in a tamper-resistant way, so the security state 213*624c9a0bSTamas Banof the device can be attested later to an external party. RSE provides a runtime 214a5a5947aSTamas Banservice which is meant to store measurements and associated metadata alongside. 215a5a5947aSTamas Ban 216a5a5947aSTamas BanData is stored in internal SRAM which is only accessible by the secure runtime 217*624c9a0bSTamas Banfirmware of RSE. Data is stored in so-called measurement slots. A platform has 218a5a5947aSTamas BanIMPDEF number of measurement slots. The measurement storage follows extend 219a5a5947aSTamas Bansemantics. This means that measurements are not stored directly (as it was 220a5a5947aSTamas Bantaken) instead they contribute to the current value of the measurement slot. 221a5a5947aSTamas BanThe extension implements this logic, where ``||`` stands for concatenation: 222a5a5947aSTamas Ban 223a5a5947aSTamas Ban.. code-block:: bash 224a5a5947aSTamas Ban 225a5a5947aSTamas Ban new_value_of_measurement_slot = Hash(old_value_of_measurement_slot || measurement) 226a5a5947aSTamas Ban 227a5a5947aSTamas BanSupported hash algorithms: sha-256, sha-512 228a5a5947aSTamas Ban 229a5a5947aSTamas BanMeasured Boot API 230a5a5947aSTamas Ban^^^^^^^^^^^^^^^^^ 231a5a5947aSTamas Ban 232a5a5947aSTamas BanDefined here: 233a5a5947aSTamas Ban 234a5a5947aSTamas Ban- ``include/lib/psa/measured_boot.h`` 235a5a5947aSTamas Ban 236a5a5947aSTamas Ban.. code-block:: c 237a5a5947aSTamas Ban 238a5a5947aSTamas Ban psa_status_t 239*624c9a0bSTamas Ban rse_measured_boot_extend_measurement(uint8_t index, 240a5a5947aSTamas Ban const uint8_t *signer_id, 241a5a5947aSTamas Ban size_t signer_id_size, 242a5a5947aSTamas Ban const uint8_t *version, 243a5a5947aSTamas Ban size_t version_size, 244a5a5947aSTamas Ban uint32_t measurement_algo, 245a5a5947aSTamas Ban const uint8_t *sw_type, 246a5a5947aSTamas Ban size_t sw_type_size, 247a5a5947aSTamas Ban const uint8_t *measurement_value, 248a5a5947aSTamas Ban size_t measurement_value_size, 249a5a5947aSTamas Ban bool lock_measurement); 250a5a5947aSTamas Ban 251a5a5947aSTamas BanMeasured Boot Metadata 252a5a5947aSTamas Ban^^^^^^^^^^^^^^^^^^^^^^ 253a5a5947aSTamas Ban 254a5a5947aSTamas BanThe following metadata can be stored alongside the measurement: 255a5a5947aSTamas Ban 256a5a5947aSTamas Ban- ``Signer-id``: Mandatory. The hash of the firmware image signing public key. 257a5a5947aSTamas Ban- ``Measurement algorithm``: Optional. The hash algorithm which was used to 258a5a5947aSTamas Ban compute the measurement (e.g.: sha-256, etc.). 259a5a5947aSTamas Ban- ``Version info``: Optional. The firmware version info (e.g.: 2.7). 260a5a5947aSTamas Ban- ``SW type``: Optional. Short text description (e.g.: BL1, BL2, BL31, etc.) 261a5a5947aSTamas Ban 262a5a5947aSTamas Ban.. Note:: 263a5a5947aSTamas Ban Version info is not implemented in TF-A yet. 264a5a5947aSTamas Ban 265a5a5947aSTamas Ban 266a5a5947aSTamas BanThe caller must specify in which measurement slot to extend a certain 267a5a5947aSTamas Banmeasurement and metadata. A measurement slot can be extended by multiple 268a5a5947aSTamas Banmeasurements. The default value is IMPDEF. All measurement slot is cleared at 269a5a5947aSTamas Banreset, there is no other way to clear them. In the reference implementation, 270a5a5947aSTamas Banthe measurement slots are initialized to 0. At the first call to extend the 271a5a5947aSTamas Banmeasurement in a slot, the extend operation uses the default value of the 272a5a5947aSTamas Banmeasurement slot. All upcoming extend operation on the same slot contributes 273a5a5947aSTamas Banto the previous value of that measurement slot. 274a5a5947aSTamas Ban 275a5a5947aSTamas BanThe following rules are kept when a slot is extended multiple times: 276a5a5947aSTamas Ban 277a5a5947aSTamas Ban- ``Signer-id`` must be the same as the previous call(s), otherwise a 278a5a5947aSTamas Ban PSA_ERROR_NOT_PERMITTED error code is returned. 279a5a5947aSTamas Ban 280a5a5947aSTamas Ban- ``Measurement algorithm``: must be the same as the previous call(s), 281a5a5947aSTamas Ban otherwise, a PSA_ERROR_NOT_PERMITTED error code is returned. 282a5a5947aSTamas Ban 283a5a5947aSTamas BanIn case of error no further action is taken (slot is not locked). If there is 284a5a5947aSTamas Bana valid data in a sub-sequent call then measurement slot will be extended. The 285a5a5947aSTamas Banrest of the metadata is handled as follows when a measurement slot is extended 286a5a5947aSTamas Banmultiple times: 287a5a5947aSTamas Ban 288a5a5947aSTamas Ban- ``SW type``: Cleared. 289a5a5947aSTamas Ban- ``Version info``: Cleared. 290a5a5947aSTamas Ban 291a5a5947aSTamas Ban.. Note:: 292a5a5947aSTamas Ban 293a5a5947aSTamas Ban Extending multiple measurements in the same slot leads to some metadata 294*624c9a0bSTamas Ban information loss. Since RSE is not constrained on special HW resources to 295a5a5947aSTamas Ban store the measurements and metadata, therefore it is worth considering to 296a5a5947aSTamas Ban store all of them one by one in distinct slots. However, they are one-by-one 297a5a5947aSTamas Ban included in the platform attestation token. So, the number of distinct 298a5a5947aSTamas Ban firmware image measurements has an impact on the size of the attestation 299a5a5947aSTamas Ban token. 300a5a5947aSTamas Ban 301*624c9a0bSTamas BanThe allocation of the measurement slot among RSE, Root and Realm worlds is 302a5a5947aSTamas Banplatform dependent. The platform must provide an allocation of the measurement 303a5a5947aSTamas Banslot at build time. An example can be found in 304a5a5947aSTamas Ban``tf-a/plat/arm/board/tc/tc_bl1_measured_boot.c`` 305a5a5947aSTamas BanFurthermore, the memory, which holds the metadata is also statically allocated 306*624c9a0bSTamas Banin RSE memory. Some of the fields have a static value (measurement algorithm), 307a5a5947aSTamas Banand some of the values have a dynamic value (measurement value) which is updated 308a5a5947aSTamas Banby the bootloaders when the firmware image is loaded and measured. The metadata 309a5a5947aSTamas Banstructure is defined in 310*624c9a0bSTamas Ban``include/drivers/measured_boot/rse/rse_measured_boot.h``. 311a5a5947aSTamas Ban 312a5a5947aSTamas Ban.. code-block:: c 313a5a5947aSTamas Ban 314*624c9a0bSTamas Ban struct rse_mboot_metadata { 315a5a5947aSTamas Ban unsigned int id; 316a5a5947aSTamas Ban uint8_t slot; 317a5a5947aSTamas Ban uint8_t signer_id[SIGNER_ID_MAX_SIZE]; 318a5a5947aSTamas Ban size_t signer_id_size; 319a5a5947aSTamas Ban uint8_t version[VERSION_MAX_SIZE]; 320a5a5947aSTamas Ban size_t version_size; 321a5a5947aSTamas Ban uint8_t sw_type[SW_TYPE_MAX_SIZE]; 322a5a5947aSTamas Ban size_t sw_type_size; 323a5a5947aSTamas Ban void *pk_oid; 324a5a5947aSTamas Ban bool lock_measurement; 325a5a5947aSTamas Ban }; 326a5a5947aSTamas Ban 327a5a5947aSTamas BanSigner-ID API 328a5a5947aSTamas Ban^^^^^^^^^^^^^ 329a5a5947aSTamas Ban 330a5a5947aSTamas BanThis function calculates the hash of a public key (signer-ID) using the 331*624c9a0bSTamas Ban``Measurement algorithm`` and stores it in the ``rse_mboot_metadata`` field 332a5a5947aSTamas Bannamed ``signer_id``. 333a5a5947aSTamas BanPrior to calling this function, the caller must ensure that the ``signer_id`` 334a5a5947aSTamas Banfield points to the zero-filled buffer. 335a5a5947aSTamas Ban 336a5a5947aSTamas BanDefined here: 337a5a5947aSTamas Ban 338*624c9a0bSTamas Ban- ``include/drivers/measured_boot/rse/rse_measured_boot.h`` 339a5a5947aSTamas Ban 340a5a5947aSTamas Ban.. code-block:: c 341a5a5947aSTamas Ban 342*624c9a0bSTamas Ban int rse_mboot_set_signer_id(struct rse_mboot_metadata *metadata_ptr, 343a5a5947aSTamas Ban const void *pk_oid, 344a5a5947aSTamas Ban const void *pk_ptr, 345a5a5947aSTamas Ban size_t pk_len) 346a5a5947aSTamas Ban 347a5a5947aSTamas Ban 348*624c9a0bSTamas Ban- First parameter is the pointer to the ``rse_mboot_metadata`` structure. 349a5a5947aSTamas Ban- Second parameter is the pointer to the key-OID of the public key. 350a5a5947aSTamas Ban- Third parameter is the pointer to the public key buffer. 351a5a5947aSTamas Ban- Fourth parameter is the size of public key buffer. 352a5a5947aSTamas Ban- This function returns 0 on success, a signed integer error code 353a5a5947aSTamas Ban otherwise. 354a5a5947aSTamas Ban 355a5a5947aSTamas BanBuild time config options 356a5a5947aSTamas Ban^^^^^^^^^^^^^^^^^^^^^^^^^ 357a5a5947aSTamas Ban 358a5a5947aSTamas Ban- ``MEASURED_BOOT``: Enable measured boot. It depends on the platform 359*624c9a0bSTamas Ban implementation whether RSE or TPM (or both) backend based measured boot is 360a5a5947aSTamas Ban enabled. 361*624c9a0bSTamas Ban- ``MBOOT_RSE_HASH_ALG``: Determine the hash algorithm to measure the images. 362a5a5947aSTamas Ban The default value is sha-256. 363a5a5947aSTamas Ban 364a5a5947aSTamas BanMeasured boot flow 365a5a5947aSTamas Ban^^^^^^^^^^^^^^^^^^ 366a5a5947aSTamas Ban 367*624c9a0bSTamas Ban.. figure:: ../resources/diagrams/rse_measured_boot_flow.svg 368a5a5947aSTamas Ban :align: center 369a5a5947aSTamas Ban 370a5a5947aSTamas BanSample console log 371a5a5947aSTamas Ban^^^^^^^^^^^^^^^^^^ 372a5a5947aSTamas Ban 373a5a5947aSTamas Ban.. code-block:: bash 374a5a5947aSTamas Ban 375a5a5947aSTamas Ban INFO: Measured boot extend measurement: 376a5a5947aSTamas Ban INFO: - slot : 6 377a5a5947aSTamas Ban INFO: - signer_id : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 378a5a5947aSTamas Ban INFO: : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 379a5a5947aSTamas Ban INFO: - version : 380a5a5947aSTamas Ban INFO: - version_size: 0 381a5a5947aSTamas Ban INFO: - sw_type : FW_CONFIG 382a5a5947aSTamas Ban INFO: - sw_type_size: 10 383a5a5947aSTamas Ban INFO: - algorithm : 2000009 384a5a5947aSTamas Ban INFO: - measurement : aa ea d3 a7 a8 e2 ab 7d 13 a6 cb 34 99 10 b9 a1 385a5a5947aSTamas Ban INFO: : 1b 9f a0 52 c5 a8 b1 d7 76 f2 c1 c1 ef ca 1a df 386a5a5947aSTamas Ban INFO: - locking : true 387a5a5947aSTamas Ban INFO: FCONF: Config file with image ID:31 loaded at address = 0x4001010 388a5a5947aSTamas Ban INFO: Loading image id=24 at address 0x4001300 389a5a5947aSTamas Ban INFO: Image id=24 loaded: 0x4001300 - 0x400153a 390a5a5947aSTamas Ban INFO: Measured boot extend measurement: 391a5a5947aSTamas Ban INFO: - slot : 7 392a5a5947aSTamas Ban INFO: - signer_id : b0 f3 82 09 12 97 d8 3a 37 7a 72 47 1b ec 32 73 393a5a5947aSTamas Ban INFO: : e9 92 32 e2 49 59 f6 5e 8b 4a 4a 46 d8 22 9a da 394a5a5947aSTamas Ban INFO: - version : 395a5a5947aSTamas Ban INFO: - version_size: 0 396a5a5947aSTamas Ban INFO: - sw_type : TB_FW_CONFIG 397a5a5947aSTamas Ban INFO: - sw_type_size: 13 398a5a5947aSTamas Ban INFO: - algorithm : 2000009 399a5a5947aSTamas Ban INFO: - measurement : 05 b9 dc 98 62 26 a7 1c 2d e5 bb af f0 90 52 28 400a5a5947aSTamas Ban INFO: : f2 24 15 8a 3a 56 60 95 d6 51 3a 7a 1a 50 9b b7 401a5a5947aSTamas Ban INFO: - locking : true 402a5a5947aSTamas Ban INFO: FCONF: Config file with image ID:24 loaded at address = 0x4001300 403a5a5947aSTamas Ban INFO: BL1: Loading BL2 404a5a5947aSTamas Ban INFO: Loading image id=1 at address 0x404d000 405a5a5947aSTamas Ban INFO: Image id=1 loaded: 0x404d000 - 0x406412a 406a5a5947aSTamas Ban INFO: Measured boot extend measurement: 407a5a5947aSTamas Ban INFO: - slot : 8 408a5a5947aSTamas Ban INFO: - signer_id : b0 f3 82 09 12 97 d8 3a 37 7a 72 47 1b ec 32 73 409a5a5947aSTamas Ban INFO: : e9 92 32 e2 49 59 f6 5e 8b 4a 4a 46 d8 22 9a da 410a5a5947aSTamas Ban INFO: - version : 411a5a5947aSTamas Ban INFO: - version_size: 0 412a5a5947aSTamas Ban INFO: - sw_type : BL_2 413a5a5947aSTamas Ban INFO: - sw_type_size: 5 414a5a5947aSTamas Ban INFO: - algorithm : 2000009 415a5a5947aSTamas Ban INFO: - measurement : 53 a1 51 75 25 90 fb a1 d9 b8 c8 34 32 3a 01 16 416a5a5947aSTamas Ban INFO: : c9 9e 74 91 7d 28 02 56 3f 5c 40 94 37 58 50 68 417a5a5947aSTamas Ban INFO: - locking : true 418a5a5947aSTamas Ban 419a5a5947aSTamas BanDelegated Attestation 420a5a5947aSTamas Ban--------------------- 421a5a5947aSTamas Ban 422a5a5947aSTamas BanDelegated Attestation Service was mainly developed to support the attestation 423a5a5947aSTamas Banflow on the ``ARM Confidential Compute Architecture`` (ARM CCA) [7]_. 424a5a5947aSTamas BanThe detailed description of the delegated attestation service can be found in 425a5a5947aSTamas Banthe ``Delegated Attestation Service Integration Guide`` [4]_ document. 426a5a5947aSTamas Ban 427a5a5947aSTamas BanIn the CCA use case, the Realm Management Monitor (RMM) relies on the delegated 428*624c9a0bSTamas Banattestation service of the RSE to get a realm attestation key and the CCA 429a5a5947aSTamas Banplatform token. BL31 does not use the service for its own purpose, only calls 430*624c9a0bSTamas Banit on behalf of RMM. The access to MHU interface and thereby to RSE is 431a5a5947aSTamas Banrestricted to BL31 only. Therefore, RMM does not have direct access, all calls 432a5a5947aSTamas Banneed to go through BL31. The RMM dispatcher module of the BL31 is responsible 433a5a5947aSTamas Banfor delivering the calls between the two parties. 434a5a5947aSTamas Ban 435a5a5947aSTamas Ban.. Note:: 436*624c9a0bSTamas Ban Currently the connection between the RMM dispatcher and the PSA/RSE layer 437a5a5947aSTamas Ban is not yet implemented. RMM dispatcher just returns hard coded data. 438a5a5947aSTamas Ban 439a5a5947aSTamas BanDelegated Attestation API 440a5a5947aSTamas Ban^^^^^^^^^^^^^^^^^^^^^^^^^ 441a5a5947aSTamas BanDefined here: 442a5a5947aSTamas Ban 443a5a5947aSTamas Ban- ``include/lib/psa/delegated_attestation.h`` 444a5a5947aSTamas Ban 445a5a5947aSTamas Ban.. code-block:: c 446a5a5947aSTamas Ban 447a5a5947aSTamas Ban psa_status_t 448*624c9a0bSTamas Ban rse_delegated_attest_get_delegated_key(uint8_t ecc_curve, 449a5a5947aSTamas Ban uint32_t key_bits, 450a5a5947aSTamas Ban uint8_t *key_buf, 451a5a5947aSTamas Ban size_t key_buf_size, 452a5a5947aSTamas Ban size_t *key_size, 453a5a5947aSTamas Ban uint32_t hash_algo); 454a5a5947aSTamas Ban 455a5a5947aSTamas Ban psa_status_t 456*624c9a0bSTamas Ban rse_delegated_attest_get_token(const uint8_t *dak_pub_hash, 457a5a5947aSTamas Ban size_t dak_pub_hash_size, 458a5a5947aSTamas Ban uint8_t *token_buf, 459a5a5947aSTamas Ban size_t token_buf_size, 460a5a5947aSTamas Ban size_t *token_size); 461a5a5947aSTamas Ban 462a5a5947aSTamas BanAttestation flow 463a5a5947aSTamas Ban^^^^^^^^^^^^^^^^ 464a5a5947aSTamas Ban 465*624c9a0bSTamas Ban.. figure:: ../resources/diagrams/rse_attestation_flow.svg 466a5a5947aSTamas Ban :align: center 467a5a5947aSTamas Ban 468a5a5947aSTamas BanSample attestation token 469a5a5947aSTamas Ban^^^^^^^^^^^^^^^^^^^^^^^^ 470a5a5947aSTamas Ban 471a5a5947aSTamas BanBinary format: 472a5a5947aSTamas Ban 473a5a5947aSTamas Ban.. code-block:: bash 474a5a5947aSTamas Ban 475a5a5947aSTamas Ban INFO: DELEGATED ATTEST TEST START 476a5a5947aSTamas Ban INFO: Get delegated attestation key start 477a5a5947aSTamas Ban INFO: Get delegated attest key succeeds, len: 48 478a5a5947aSTamas Ban INFO: Delegated attest key: 479a5a5947aSTamas Ban INFO: 0d 2a 66 61 d4 89 17 e1 70 c6 73 56 df f4 11 fd 480a5a5947aSTamas Ban INFO: 7d 1f 3b 8a a3 30 3d 70 4c d9 06 c3 c7 ef 29 43 481a5a5947aSTamas Ban INFO: 0f ee b5 e7 56 e0 71 74 1b c4 39 39 fd 85 f6 7b 482a5a5947aSTamas Ban INFO: Get platform token start 483a5a5947aSTamas Ban INFO: Get platform token succeeds, len: 1086 484a5a5947aSTamas Ban INFO: Platform attestation token: 485a5a5947aSTamas Ban INFO: d2 84 44 a1 01 38 22 a0 59 03 d1 a9 0a 58 20 00 486a5a5947aSTamas Ban INFO: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 487a5a5947aSTamas Ban INFO: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 19 488a5a5947aSTamas Ban INFO: 01 00 58 21 01 cb 8c 79 f7 a0 0a 6c ce 12 66 f8 489a5a5947aSTamas Ban INFO: 64 45 48 42 0e c5 10 bf 84 ee 22 18 b9 8f 11 04 490a5a5947aSTamas Ban INFO: c7 22 31 9d fb 19 09 5c 58 20 aa aa aa aa aa aa 491a5a5947aSTamas Ban INFO: aa aa bb bb bb bb bb bb bb bb cc cc cc cc cc cc 492a5a5947aSTamas Ban INFO: cc cc dd dd dd dd dd dd dd dd 19 09 5b 19 30 00 493a5a5947aSTamas Ban INFO: 19 09 5f 89 a4 05 58 20 bf e6 d8 6f 88 26 f4 ff 494a5a5947aSTamas Ban INFO: 97 fb 96 c4 e6 fb c4 99 3e 46 19 fc 56 5d a2 6a 495a5a5947aSTamas Ban INFO: df 34 c3 29 48 9a dc 38 04 67 31 2e 36 2e 30 2b 496a5a5947aSTamas Ban INFO: 30 01 64 52 54 5f 30 02 58 20 90 27 f2 46 ab 31 497a5a5947aSTamas Ban INFO: 85 36 46 c4 d7 c6 60 ed 31 0d 3c f0 14 de f0 6c 498a5a5947aSTamas Ban INFO: 24 0b de b6 7a 84 fc 3f 5b b7 a4 05 58 20 b3 60 499a5a5947aSTamas Ban INFO: ca f5 c9 8c 6b 94 2a 48 82 fa 9d 48 23 ef b1 66 500a5a5947aSTamas Ban INFO: a9 ef 6a 6e 4a a3 7c 19 19 ed 1f cc c0 49 04 67 501a5a5947aSTamas Ban INFO: 30 2e 30 2e 30 2b 30 01 64 52 54 5f 31 02 58 20 502a5a5947aSTamas Ban INFO: 52 13 15 d4 9d b2 cf 54 e4 99 37 44 40 68 f0 70 503a5a5947aSTamas Ban INFO: 7d 73 64 ae f7 08 14 b0 f7 82 ad c6 17 db a3 91 504a5a5947aSTamas Ban INFO: a4 05 58 20 bf e6 d8 6f 88 26 f4 ff 97 fb 96 c4 505a5a5947aSTamas Ban INFO: e6 fb c4 99 3e 46 19 fc 56 5d a2 6a df 34 c3 29 506a5a5947aSTamas Ban INFO: 48 9a dc 38 04 67 31 2e 35 2e 30 2b 30 01 64 52 507a5a5947aSTamas Ban INFO: 54 5f 32 02 58 20 8e 5d 64 7e 6f 6c c6 6f d4 4f 508a5a5947aSTamas Ban INFO: 54 b6 06 e5 47 9a cc 1b f3 7f ce 87 38 49 c5 92 509a5a5947aSTamas Ban INFO: d8 2f 85 2e 85 42 a4 05 58 20 bf e6 d8 6f 88 26 510a5a5947aSTamas Ban INFO: f4 ff 97 fb 96 c4 e6 fb c4 99 3e 46 19 fc 56 5d 511a5a5947aSTamas Ban INFO: a2 6a df 34 c3 29 48 9a dc 38 04 67 31 2e 35 2e 512a5a5947aSTamas Ban INFO: 30 2b 30 01 60 02 58 20 b8 01 65 a7 78 8b c6 59 513a5a5947aSTamas Ban INFO: 42 8d 33 10 85 d1 49 0a dc 9e c3 ee df 85 1b d2 514a5a5947aSTamas Ban INFO: f0 73 73 6a 0c 07 11 b8 a4 05 58 20 b0 f3 82 09 515a5a5947aSTamas Ban INFO: 12 97 d8 3a 37 7a 72 47 1b ec 32 73 e9 92 32 e2 516a5a5947aSTamas Ban INFO: 49 59 f6 5e 8b 4a 4a 46 d8 22 9a da 04 60 01 6a 517a5a5947aSTamas Ban INFO: 46 57 5f 43 4f 4e 46 49 47 00 02 58 20 21 9e a0 518a5a5947aSTamas Ban INFO: 13 82 e6 d7 97 5a 11 13 a3 5f 45 39 68 b1 d9 a3 519a5a5947aSTamas Ban INFO: ea 6a ab 84 23 3b 8c 06 16 98 20 ba b9 a4 05 58 520a5a5947aSTamas Ban INFO: 20 b0 f3 82 09 12 97 d8 3a 37 7a 72 47 1b ec 32 521a5a5947aSTamas Ban INFO: 73 e9 92 32 e2 49 59 f6 5e 8b 4a 4a 46 d8 22 9a 522a5a5947aSTamas Ban INFO: da 04 60 01 6d 54 42 5f 46 57 5f 43 4f 4e 46 49 523a5a5947aSTamas Ban INFO: 47 00 02 58 20 41 39 f6 c2 10 84 53 c5 17 ae 9a 524a5a5947aSTamas Ban INFO: e5 be c1 20 7b cc 24 24 f3 9d 20 a8 fb c7 b3 10 525a5a5947aSTamas Ban INFO: e3 ee af 1b 05 a4 05 58 20 b0 f3 82 09 12 97 d8 526a5a5947aSTamas Ban INFO: 3a 37 7a 72 47 1b ec 32 73 e9 92 32 e2 49 59 f6 527a5a5947aSTamas Ban INFO: 5e 8b 4a 4a 46 d8 22 9a da 04 60 01 65 42 4c 5f 528a5a5947aSTamas Ban INFO: 32 00 02 58 20 5c 96 20 e1 e3 3b 0f 2c eb c1 8e 529a5a5947aSTamas Ban INFO: 1a 02 a6 65 86 dd 34 97 a7 4c 98 13 bf 74 14 45 530a5a5947aSTamas Ban INFO: 2d 30 28 05 c3 a4 05 58 20 b0 f3 82 09 12 97 d8 531a5a5947aSTamas Ban INFO: 3a 37 7a 72 47 1b ec 32 73 e9 92 32 e2 49 59 f6 532a5a5947aSTamas Ban INFO: 5e 8b 4a 4a 46 d8 22 9a da 04 60 01 6e 53 45 43 533a5a5947aSTamas Ban INFO: 55 52 45 5f 52 54 5f 45 4c 33 00 02 58 20 f6 fb 534a5a5947aSTamas Ban INFO: 62 99 a5 0c df db 02 0b 72 5b 1c 0b 63 6e 94 ee 535a5a5947aSTamas Ban INFO: 66 50 56 3a 29 9c cb 38 f0 ec 59 99 d4 2e a4 05 536a5a5947aSTamas Ban INFO: 58 20 b0 f3 82 09 12 97 d8 3a 37 7a 72 47 1b ec 537a5a5947aSTamas Ban INFO: 32 73 e9 92 32 e2 49 59 f6 5e 8b 4a 4a 46 d8 22 538a5a5947aSTamas Ban INFO: 9a da 04 60 01 6a 48 57 5f 43 4f 4e 46 49 47 00 539a5a5947aSTamas Ban INFO: 02 58 20 98 5d 87 21 84 06 33 9d c3 1f 91 f5 68 540a5a5947aSTamas Ban INFO: 8d a0 5a f0 d7 7e 20 51 ce 3b f2 a5 c3 05 2e 3c 541a5a5947aSTamas Ban INFO: 8b 52 31 19 01 09 78 1c 68 74 74 70 3a 2f 2f 61 542a5a5947aSTamas Ban INFO: 72 6d 2e 63 6f 6d 2f 43 43 41 2d 53 53 44 2f 31 543a5a5947aSTamas Ban INFO: 2e 30 2e 30 19 09 62 71 6e 6f 74 2d 68 61 73 68 544a5a5947aSTamas Ban INFO: 2d 65 78 74 65 6e 64 65 64 19 09 61 44 ef be ad 545a5a5947aSTamas Ban INFO: de 19 09 60 77 77 77 77 2e 74 72 75 73 74 65 64 546a5a5947aSTamas Ban INFO: 66 69 72 6d 77 61 72 65 2e 6f 72 67 58 60 29 4e 547a5a5947aSTamas Ban INFO: 4a d3 98 1e 3b 70 9f b6 66 ed 47 33 0e 99 f0 b1 548a5a5947aSTamas Ban INFO: c3 f2 bc b2 1d b0 ae 90 0c c4 82 ff a2 6f ae 45 549a5a5947aSTamas Ban INFO: f6 87 09 4a 09 21 77 ec 36 1c 53 b8 a7 9b 8e f7 550a5a5947aSTamas Ban INFO: 27 eb 7a 09 da 6f fb bf cb fd b3 e5 e9 36 91 b1 551a5a5947aSTamas Ban INFO: 92 13 c1 30 16 b4 5c 49 5e c0 c1 b9 01 5c 88 2c 552a5a5947aSTamas Ban INFO: f8 2f 3e a4 a2 6d e4 9d 31 6a 06 f7 a7 73 553a5a5947aSTamas Ban INFO: DELEGATED ATTEST TEST END 554a5a5947aSTamas Ban 555a5a5947aSTamas BanJSON format: 556a5a5947aSTamas Ban 557a5a5947aSTamas Ban.. code-block:: JSON 558a5a5947aSTamas Ban 559a5a5947aSTamas Ban { 560a5a5947aSTamas Ban "CCA_PLATFORM_CHALLENGE": "b'0000000000000000000000000000000000000000000000000000000000000000'", 561a5a5947aSTamas Ban "CCA_PLATFORM_INSTANCE_ID": "b'01CB8C79F7A00A6CCE1266F8644548420EC510BF84EE2218B98F1104C722319DFB'", 562a5a5947aSTamas Ban "CCA_PLATFORM_IMPLEMENTATION_ID": "b'AAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDD'", 563a5a5947aSTamas Ban "CCA_PLATFORM_LIFECYCLE": "secured_3000", 564a5a5947aSTamas Ban "CCA_PLATFORM_SW_COMPONENTS": [ 565a5a5947aSTamas Ban { 566a5a5947aSTamas Ban "SIGNER_ID": "b'BFE6D86F8826F4FF97FB96C4E6FBC4993E4619FC565DA26ADF34C329489ADC38'", 567a5a5947aSTamas Ban "SW_COMPONENT_VERSION": "1.6.0+0", 568a5a5947aSTamas Ban "SW_COMPONENT_TYPE": "RT_0", 569a5a5947aSTamas Ban "MEASUREMENT_VALUE": "b'9027F246AB31853646C4D7C660ED310D3CF014DEF06C240BDEB67A84FC3F5BB7'" 570a5a5947aSTamas Ban }, 571a5a5947aSTamas Ban { 572a5a5947aSTamas Ban "SIGNER_ID": "b'B360CAF5C98C6B942A4882FA9D4823EFB166A9EF6A6E4AA37C1919ED1FCCC049'", 573a5a5947aSTamas Ban "SW_COMPONENT_VERSION": "0.0.0+0", 574a5a5947aSTamas Ban "SW_COMPONENT_TYPE": "RT_1", 575a5a5947aSTamas Ban "MEASUREMENT_VALUE": "b'521315D49DB2CF54E49937444068F0707D7364AEF70814B0F782ADC617DBA391'" 576a5a5947aSTamas Ban }, 577a5a5947aSTamas Ban { 578a5a5947aSTamas Ban "SIGNER_ID": "b'BFE6D86F8826F4FF97FB96C4E6FBC4993E4619FC565DA26ADF34C329489ADC38'", 579a5a5947aSTamas Ban "SW_COMPONENT_VERSION": "1.5.0+0", 580a5a5947aSTamas Ban "SW_COMPONENT_TYPE": "RT_2", 581a5a5947aSTamas Ban "MEASUREMENT_VALUE": "b'8E5D647E6F6CC66FD44F54B606E5479ACC1BF37FCE873849C592D82F852E8542'" 582a5a5947aSTamas Ban }, 583a5a5947aSTamas Ban { 584a5a5947aSTamas Ban "SIGNER_ID": "b'BFE6D86F8826F4FF97FB96C4E6FBC4993E4619FC565DA26ADF34C329489ADC38'", 585a5a5947aSTamas Ban "SW_COMPONENT_VERSION": "1.5.0+0", 586a5a5947aSTamas Ban "SW_COMPONENT_TYPE": "", 587a5a5947aSTamas Ban "MEASUREMENT_VALUE": "b'B80165A7788BC659428D331085D1490ADC9EC3EEDF851BD2F073736A0C0711B8'" 588a5a5947aSTamas Ban }, 589a5a5947aSTamas Ban { 590a5a5947aSTamas Ban "SIGNER_ID": "b'b0f382091297d83a377a72471bec3273e99232e24959f65e8b4a4a46d8229ada'", 591a5a5947aSTamas Ban "SW_COMPONENT_VERSION": "", 592a5a5947aSTamas Ban "SW_COMPONENT_TYPE": "FW_CONFIG\u0000", 593a5a5947aSTamas Ban "MEASUREMENT_VALUE": "b'219EA01382E6D7975A1113A35F453968B1D9A3EA6AAB84233B8C06169820BAB9'" 594a5a5947aSTamas Ban }, 595a5a5947aSTamas Ban { 596a5a5947aSTamas Ban "SIGNER_ID": "b'b0f382091297d83a377a72471bec3273e99232e24959f65e8b4a4a46d8229ada'", 597a5a5947aSTamas Ban "SW_COMPONENT_VERSION": "", 598a5a5947aSTamas Ban "SW_COMPONENT_TYPE": "TB_FW_CONFIG\u0000", 599a5a5947aSTamas Ban "MEASUREMENT_VALUE": "b'4139F6C2108453C517AE9AE5BEC1207BCC2424F39D20A8FBC7B310E3EEAF1B05'" 600a5a5947aSTamas Ban }, 601a5a5947aSTamas Ban { 602a5a5947aSTamas Ban "SIGNER_ID": "b'b0f382091297d83a377a72471bec3273e99232e24959f65e8b4a4a46d8229ada'", 603a5a5947aSTamas Ban "SW_COMPONENT_VERSION": "", 604a5a5947aSTamas Ban "SW_COMPONENT_TYPE": "BL_2\u0000", 605a5a5947aSTamas Ban "MEASUREMENT_VALUE": "b'5C9620E1E33B0F2CEBC18E1A02A66586DD3497A74C9813BF7414452D302805C3'" 606a5a5947aSTamas Ban }, 607a5a5947aSTamas Ban { 608a5a5947aSTamas Ban "SIGNER_ID": "b'b0f382091297d83a377a72471bec3273e99232e24959f65e8b4a4a46d8229ada'", 609a5a5947aSTamas Ban "SW_COMPONENT_VERSION": "", 610a5a5947aSTamas Ban "SW_COMPONENT_TYPE": "SECURE_RT_EL3\u0000", 611a5a5947aSTamas Ban "MEASUREMENT_VALUE": "b'F6FB6299A50CDFDB020B725B1C0B636E94EE6650563A299CCB38F0EC5999D42E'" 612a5a5947aSTamas Ban }, 613a5a5947aSTamas Ban { 614a5a5947aSTamas Ban "SIGNER_ID": "b'b0f382091297d83a377a72471bec3273e99232e24959f65e8b4a4a46d8229ada'", 615a5a5947aSTamas Ban "SW_COMPONENT_VERSION": "", 616a5a5947aSTamas Ban "SW_COMPONENT_TYPE": "HW_CONFIG\u0000", 617a5a5947aSTamas Ban "MEASUREMENT_VALUE": "b'985D87218406339DC31F91F5688DA05AF0D77E2051CE3BF2A5C3052E3C8B5231'" 618a5a5947aSTamas Ban } 619a5a5947aSTamas Ban ], 620a5a5947aSTamas Ban "CCA_ATTESTATION_PROFILE": "http://arm.com/CCA-SSD/1.0.0", 621a5a5947aSTamas Ban "CCA_PLATFORM_HASH_ALGO_ID": "not-hash-extended", 622a5a5947aSTamas Ban "CCA_PLATFORM_CONFIG": "b'EFBEADDE'", 623a5a5947aSTamas Ban "CCA_PLATFORM_VERIFICATION_SERVICE": "www.trustedfirmware.org" 624a5a5947aSTamas Ban } 625a5a5947aSTamas Ban 626*624c9a0bSTamas BanRSE OTP Assets Management 627a5a5947aSTamas Ban------------------------- 628a5a5947aSTamas Ban 629*624c9a0bSTamas BanRSE provides access for AP to assets in OTP, which include keys for image 630a5a5947aSTamas Bansignature verification and non-volatile counters for anti-rollback protection. 631a5a5947aSTamas Ban 632a5a5947aSTamas BanNon-Volatile Counter API 633a5a5947aSTamas Ban^^^^^^^^^^^^^^^^^^^^^^^^ 634a5a5947aSTamas Ban 635*624c9a0bSTamas BanAP/RSE interface for retrieving and incrementing non-volatile counters API is 636a5a5947aSTamas Banas follows. 637a5a5947aSTamas Ban 638a5a5947aSTamas BanDefined here: 639a5a5947aSTamas Ban 640*624c9a0bSTamas Ban- ``include/lib/psa/rse_platform_api.h`` 641a5a5947aSTamas Ban 642a5a5947aSTamas Ban.. code-block:: c 643a5a5947aSTamas Ban 644*624c9a0bSTamas Ban psa_status_t rse_platform_nv_counter_increment(uint32_t counter_id) 645a5a5947aSTamas Ban 646*624c9a0bSTamas Ban psa_status_t rse_platform_nv_counter_read(uint32_t counter_id, 647a5a5947aSTamas Ban uint32_t size, uint8_t *val) 648a5a5947aSTamas Ban 649a5a5947aSTamas BanThrough this service, we can read/increment any of the 3 non-volatile 650a5a5947aSTamas Bancounters used on an Arm CCA platform: 651a5a5947aSTamas Ban 652a5a5947aSTamas Ban- ``Non-volatile counter for CCA firmware (BL2, BL31, RMM).`` 653a5a5947aSTamas Ban- ``Non-volatile counter for secure firmware.`` 654a5a5947aSTamas Ban- ``Non-volatile counter for non-secure firmware.`` 655a5a5947aSTamas Ban 656a5a5947aSTamas BanPublic Key API 657a5a5947aSTamas Ban^^^^^^^^^^^^^^ 658a5a5947aSTamas Ban 659*624c9a0bSTamas BanAP/RSE interface for reading the ROTPK is as follows. 660a5a5947aSTamas Ban 661a5a5947aSTamas BanDefined here: 662a5a5947aSTamas Ban 663*624c9a0bSTamas Ban- ``include/lib/psa/rse_platform_api.h`` 664a5a5947aSTamas Ban 665a5a5947aSTamas Ban.. code-block:: c 666a5a5947aSTamas Ban 667*624c9a0bSTamas Ban psa_status_t rse_platform_key_read(enum rse_key_id_builtin_t key, 668a5a5947aSTamas Ban uint8_t *data, size_t data_size, size_t *data_length) 669a5a5947aSTamas Ban 670a5a5947aSTamas BanThrough this service, we can read any of the 3 ROTPKs used on an 671a5a5947aSTamas BanArm CCA platform: 672a5a5947aSTamas Ban 673a5a5947aSTamas Ban- ``ROTPK for CCA firmware (BL2, BL31, RMM).`` 674a5a5947aSTamas Ban- ``ROTPK for secure firmware.`` 675a5a5947aSTamas Ban- ``ROTPK for non-secure firmware.`` 676a5a5947aSTamas Ban 677a5a5947aSTamas BanReferences 678a5a5947aSTamas Ban---------- 679a5a5947aSTamas Ban 680*624c9a0bSTamas Ban.. [1] https://tf-m-user-guide.trustedfirmware.org/platform/arm/rse/readme.html 681*624c9a0bSTamas Ban.. [2] https://tf-m-user-guide.trustedfirmware.org/platform/arm/rse/rse_comms.html 682a5a5947aSTamas Ban.. [3] https://git.trustedfirmware.org/TF-M/tf-m-extras.git/tree/partitions/measured_boot/measured_boot_integration_guide.rst 683a5a5947aSTamas Ban.. [4] https://git.trustedfirmware.org/TF-M/tf-m-extras.git/tree/partitions/delegated_attestation/delegated_attest_integration_guide.rst 684*624c9a0bSTamas Ban.. [5] https://tf-m-user-guide.trustedfirmware.org/platform/arm/rse/rse_key_management.html 685a5a5947aSTamas Ban.. [6] https://developer.arm.com/-/media/Files/pdf/PlatformSecurityArchitecture/Architect/DEN0063-PSA_Firmware_Framework-1.0.0-2.pdf?revision=2d1429fa-4b5b-461a-a60e-4ef3d8f7f4b4&hash=3BFD6F3E687F324672F18E5BE9F08EDC48087C93 686a5a5947aSTamas Ban.. [7] https://developer.arm.com/documentation/DEN0096/A_a/?lang=en 687a5a5947aSTamas Ban 688a5a5947aSTamas Ban-------------- 689a5a5947aSTamas Ban 690a5a5947aSTamas Ban*Copyright (c) 2023, Arm Limited. All rights reserved.* 691