| Chain of trust bindings |
| ======================= |
| |
| The device tree allows to describe the chain of trust with the help of |
| 'cot' node which contain 'manifests' and 'images' as sub-nodes. |
| 'manifests' and 'images' nodes contains number of sub-nodes (i.e. 'certificate' |
| and 'image' nodes) mentioning properties of the certificate and image respectively. |
| |
| Also, device tree describes 'non-volatile-counters' node which contains number of |
| sub-nodes mentioning properties of all non-volatile-counters used in the chain of trust. |
| |
| cot |
| ------------------------------------------------------------------ |
| This is root node which contains 'manifests' and 'images' as sub-nodes |
| |
| |
| Manifests and Certificate node bindings definition |
| ---------------------------------------------------------------- |
| |
| - Manifests node |
| Description: Container of certificate nodes. |
| |
| PROPERTIES |
| |
| - compatible: |
| Usage: required |
| |
| Value type: <string> |
| |
| Definition: must be "arm, cert-descs" |
| |
| - Certificate node |
| Description: |
| |
| Describes certificate properties which are used |
| during the authentication process. |
| |
| PROPERTIES |
| |
| - root-certificate |
| Usage: |
| |
| Required for the certificate with no parent. |
| In other words, certificates which are validated |
| using root of trust public key. |
| |
| Value type: <boolean> |
| |
| - image-id |
| Usage: Required for every certificate with unique id. |
| |
| Value type: <u32> |
| |
| - parent |
| Usage: |
| |
| It refers to their parent image, which typically contains |
| information to authenticate the certificate. |
| This property is required for all non-root certificates. |
| |
| This property is not required for root-certificates |
| as root-certificates are validated using root of trust |
| public key provided by platform. |
| |
| Value type: <phandle> |
| |
| - signing-key |
| Usage: |
| |
| For non-root certificates, this property is used to refer |
| public key node present in parent certificate node and it is |
| required property for all non-root certificates which are |
| authenticated using public-key present in parent certificate. |
| |
| This property is not required for all root-certificates. If |
| omitted, the root certificate will be validated using the |
| default platform ROTPK. If instead the root certificate needs |
| validating using a different ROTPK, the signing-key property |
| should provide a reference to the ROTPK node to use. |
| |
| Value type: <phandle> |
| |
| - antirollback-counter |
| Usage: |
| |
| This property is used by all certificates which are |
| protected against rollback attacks using a non-volatile |
| counter and it is an optional property. |
| |
| This property is used to refer one of the non-volatile |
| counter sub-node present in 'non-volatile counters' node. |
| |
| Value type: <phandle> |
| |
| |
| SUBNODES |
| - Description: |
| |
| Hash and public key information present in the certificate |
| are shown by these nodes. |
| |
| - public key node |
| Description: Provide public key information in the certificate. |
| |
| PROPERTIES |
| |
| - oid |
| Usage: |
| |
| This property provides the Object ID of public key |
| provided in the certificate which the help of which |
| public key information can be extracted. |
| |
| Value type: <string> |
| |
| - hash node |
| Description: Provide the hash information in the certificate. |
| |
| PROPERTIES |
| |
| - oid |
| Usage: |
| |
| This property provides the Object ID of hash provided in |
| the certificate which the help of which hash information |
| can be extracted. |
| |
| Value type: <string> |
| |
| Example: |
| |
| .. code:: c |
| |
| cot { |
| manifests { |
| compatible = "arm, cert-descs” |
| |
| trusted-key-cert: trusted-key-cert { |
| root-certificate; |
| image-id = <TRUSTED_KEY_CERT_ID>; |
| antirollback-counter = <&trusted_nv_ctr>; |
| |
| trusted-world-pk: trusted-world-pk { |
| oid = TRUSTED_WORLD_PK_OID; |
| }; |
| non-trusted-world-pk: non-trusted-world-pk { |
| oid = NON_TRUSTED_WORLD_PK_OID; |
| }; |
| }; |
| |
| scp_fw_key_cert: scp_fw_key_cert { |
| image-id = <SCP_FW_KEY_CERT_ID>; |
| parent = <&trusted-key-cert>; |
| signing-key = <&trusted_world_pk>; |
| antirollback-counter = <&trusted_nv_ctr>; |
| |
| scp_fw_content_pk: scp_fw_content_pk { |
| oid = SCP_FW_CONTENT_CERT_PK_OID; |
| }; |
| }; |
| . |
| . |
| . |
| |
| next-certificate { |
| |
| }; |
| }; |
| }; |
| |
| Images and Image node bindings definition |
| ----------------------------------------- |
| |
| - Images node |
| Description: Container of image nodes |
| |
| PROPERTIES |
| |
| - compatible: |
| Usage: required |
| |
| Value type: <string> |
| |
| Definition: must be "arm, img-descs" |
| |
| - Image node |
| Description: |
| |
| Describes image properties which will be used during |
| authentication process. |
| |
| PROPERTIES |
| |
| - image-id |
| Usage: Required for every image with unique id. |
| |
| Value type: <u32> |
| |
| - parent |
| Usage: |
| |
| Required for every image to provide a reference to |
| its parent image, which contains the necessary information |
| to authenticate it. |
| |
| Value type: <phandle> |
| |
| - hash |
| Usage: |
| |
| Required for all images which are validated using |
| hash method. This property is used to refer hash |
| node present in parent certificate node. |
| |
| Value type: <phandle> |
| |
| Note: |
| |
| Currently, all images are validated using 'hash' |
| method. In future, there may be multiple methods can |
| be used to validate the image. |
| |
| Example: |
| |
| .. code:: c |
| |
| cot { |
| images { |
| compatible = "arm, img-descs"; |
| |
| scp_bl2_image { |
| image-id = <SCP_BL2_IMAGE_ID>; |
| parent = <&scp_fw_content_cert>; |
| hash = <&scp_fw_hash>; |
| }; |
| |
| . |
| . |
| . |
| |
| next-img { |
| |
| }; |
| }; |
| }; |
| |
| non-volatile counter node binding definition |
| -------------------------------------------- |
| |
| - non-volatile counters node |
| Description: Contains properties for non-volatile counters. |
| |
| PROPERTIES |
| |
| - compatible: |
| Usage: required |
| |
| Value type: <string> |
| |
| Definition: must be "arm, non-volatile-counter" |
| |
| - #address-cells |
| Usage: required |
| |
| Value type: <u32> |
| |
| Definition: |
| |
| Must be set according to address size |
| of non-volatile counter register |
| |
| - #size-cells |
| Usage: required |
| |
| Value type: <u32> |
| |
| Definition: must be set to 0 |
| |
| SUBNODE |
| - counters node |
| Description: Contains various non-volatile counters present in the platform. |
| |
| PROPERTIES |
| - id |
| Usage: Required for every nv-counter with unique id. |
| |
| Value type: <u32> |
| |
| - reg |
| Usage: |
| |
| Register base address of non-volatile counter and it is required |
| property. |
| |
| Value type: <u32> |
| |
| - oid |
| Usage: |
| |
| This property provides the Object ID of non-volatile counter |
| provided in the certificate and it is required property. |
| |
| Value type: <string> |
| |
| Example: |
| Below is non-volatile counters example for ARM platform |
| |
| .. code:: c |
| |
| non_volatile_counters: non_volatile_counters { |
| compatible = "arm, non-volatile-counter"; |
| #address-cells = <1>; |
| #size-cells = <0>; |
| |
| trusted_nv_ctr: trusted_nv_ctr { |
| id = <TRUSTED_NV_CTR_ID>; |
| reg = <TFW_NVCTR_BASE>; |
| oid = TRUSTED_FW_NVCOUNTER_OID; |
| }; |
| |
| non_trusted_nv_ctr: non_trusted_nv_ctr { |
| id = <NON_TRUSTED_NV_CTR_ID>; |
| reg = <NTFW_CTR_BASE>; |
| oid = NON_TRUSTED_FW_NVCOUNTER_OID; |
| }; |
| }; |
| |
| rot_keys node binding definition |
| --------------------------------- |
| |
| - rot_keys node |
| Description: Contains root-of-trust keys for the root certificates. |
| |
| SUBNODES |
| - Description: |
| |
| Root of trust key information present in the root certificates |
| are shown by these nodes. |
| |
| - rot key node |
| Description: Provide ROT key information in the certificate. |
| |
| PROPERTIES |
| |
| - oid |
| Usage: |
| |
| This property provides the Object ID of ROT key provided |
| in the certificate. |
| |
| Value type: <string> |
| |
| Example: |
| Below is rot_keys example for CCA platform |
| |
| .. code:: c |
| |
| rot_keys { |
| swd_rot_pk: swd_rot_pk { |
| oid = SWD_ROT_PK_OID; |
| }; |
| |
| prot_pk: prot_pk { |
| oid = PROT_PK_OID; |
| }; |
| }; |
| |
| Future update to chain of trust binding |
| --------------------------------------- |
| |
| This binding document needs to be revisited to generalise some terminologies |
| which are currently specific to X.509 certificates for e.g. Object IDs. |
| |
| *Copyright (c) 2020-2024, Arm Limited. All rights reserved.* |