|
| 1 | +--- |
| 2 | +title: Download and inspect the attestation token |
| 3 | +weight: 4 |
| 4 | + |
| 5 | +### FIXED, DO NOT MODIFY |
| 6 | +layout: learningpathall |
| 7 | +--- |
| 8 | + |
| 9 | +In this section, you will obtain an example CCA attestation token. |
| 10 | + |
| 11 | +## Install Go |
| 12 | + |
| 13 | +In order to run the tools used for attestation, start by installing the Go language on your system. First, you will remove any existing Go installation. After that, you obtain the install files and |
| 14 | + |
| 15 | +```bash |
| 16 | +rm -rf /usr/local/go |
| 17 | + |
| 18 | +wget https://go.dev/dl/go1.23.3.linux-$(dpkg --print-architecture).tar.gz |
| 19 | +tar -C /usr/local -xzf go1.23.3.linux-$(dpkg --print-architecture).tar.gz |
| 20 | +``` |
| 21 | + |
| 22 | +Export the installation path and add it to your $PATH environment variable. |
| 23 | + |
| 24 | +```bash |
| 25 | +export PATH=$PATH:/usr/local/go/bin |
| 26 | +``` |
| 27 | +Verify the installation by checking that the command outputs the installed version. |
| 28 | + |
| 29 | +```bash |
| 30 | +go version |
| 31 | +``` |
| 32 | + |
| 33 | +## Install Git |
| 34 | + |
| 35 | +Verify that `git` is installed using the command below. It should output the version available on your computer. |
| 36 | + |
| 37 | +```bash |
| 38 | +git --version |
| 39 | +``` |
| 40 | + |
| 41 | +## Install jq |
| 42 | +The jq utility, is a popular command-line tool that can be used to parse and manipulate JSON data. You can install it using your local package manager, for instance: |
| 43 | + |
| 44 | +```bash |
| 45 | +sudo apt install jq |
| 46 | +``` |
| 47 | + |
| 48 | +## Download the Example CCA Attestation Token |
| 49 | + |
| 50 | +Using your preferred web browser, navigate to the [token in the TrustedFirmware-M tools repository](https://github.com/TrustedFirmware-M/tf-m-tools/blob/main/iat-verifier/tests/data/cca_example_token.cbor) |
| 51 | + |
| 52 | +Use GitHub’s download button, located on the right of the upper toolbar, to download the token as a *raw* (binary) file. |
| 53 | + |
| 54 | + |
| 55 | + |
| 56 | +Place this file in the `$HOME` folder, while keeping the file name the same. The rest of this learning path will use the notation `$HOME/cca_example_token.cbor` as the file path. |
| 57 | + |
| 58 | +{{% notice Note %}} |
| 59 | +You will notice that the filename extension on the example token is `.cbor`, which also denotes the format of the data. CBOR is the Concise Binary Object Representation. You are likely to already be familiar with JSON (the JavaScript Object Notation). JSON provides a standard way to convey nested structures of key-value pairs. CBOR is conceptually the same as JSON. The difference is that CBOR is a binary format, rather than a text-based format like JSON. CBOR is designed for compactness and ease of machine-readability, but at the expense of human-readability. You can learn more about CBOR [here](https://cbor.io/). |
| 60 | +{{% /notice %}} |
| 61 | + |
| 62 | +## Build the EVCLI Tool |
| 63 | + |
| 64 | +Now that you have downloaded the example CCA attestation token, the next step is to look inside the token and learn about the data that it contains. Because the token is a binary file, you will need to use a tool to parse the file and display its contents. The tool that you will use is a command-line tool called `evcli` (which is short for the EVidence Command Line Interface – remember that attestation tokens are used to convey evidence about realms and the platforms on which they are hosted). |
| 65 | + |
| 66 | +The `evcli` tool is part of the Veraison open-source project, which was covered in the previous section. |
| 67 | + |
| 68 | +Clone the source code using git as follows: |
| 69 | + |
| 70 | +```bash |
| 71 | +cd $HOME |
| 72 | +git clone https://github.com/veraison/evcli.git |
| 73 | +``` |
| 74 | +Change the directory and build the tool: |
| 75 | + |
| 76 | +```bash |
| 77 | +cd evcli |
| 78 | +go build |
| 79 | +``` |
| 80 | + |
| 81 | +The tool is quite small, so this should not take long. Once it has built, you can progress to the next step. |
| 82 | + |
| 83 | +## Inspect the CCA Example Attestation Token |
| 84 | + |
| 85 | +Now that you have built the `evcli` command-line tool, you can use it to inspect the contents of the example CCA attestation token that you downloaded earlier. |
| 86 | + |
| 87 | +Run the following command: |
| 88 | + |
| 89 | +```bash |
| 90 | +./evcli cca print --token $HOME/cca_example_token.cbor |
| 91 | +``` |
| 92 | + |
| 93 | +The contents of the token are displayed as JSON. Check that the output matches the below. Some of the output has been removed for better readability. |
| 94 | + |
| 95 | +```output |
| 96 | +{ |
| 97 | + "cca-platform-token": { |
| 98 | + "cca-platform-profile": "tag:arm.com,2023:cca_platform#1.0.0", |
| 99 | + "cca-platform-challenge": "tZc8touqn8VVWHhrfsZ/aeQN9bpaqSHNDCf0BYegEeo=", |
| 100 | + "cca-platform-implementation-id": "f0VMRgIBAQAAAAAAAAAAAAMAPgABAAAAUFgAAAAAAAA=", |
| 101 | + "cca-platform-instance-id": "AQcGBQQDAgEADw4NDAsKCQgXFhUUExIREB8eHRwbGhkY", |
| 102 | + "cca-platform-config": "z8/Pzw==", |
| 103 | + "cca-platform-lifecycle": 12291, |
| 104 | + "cca-platform-sw-components": [ |
| 105 | + { |
| 106 | + "measurement-type": "RSE_BL1_2", |
| 107 | + "measurement-value": "micfKpFrC27mzsskJvCzIG7wdFeL5V2byU9vP+Orhqo=", |
| 108 | + "signer-id": "U3h5YwdTXfPsjYsVouLcVkFBnD0wYM/jIjjA+pc/eqM=", |
| 109 | + "measurement-description": "sha-256" |
| 110 | + }, |
| 111 | + (...) |
| 112 | + { |
| 113 | + "measurement-type": "SOC_FW_CONFIG", |
| 114 | + "measurement-value": "5sIejSYP5xiC3r2zOdJAKiynZIUpvCMD9IZJvOA4ABc=", |
| 115 | + "signer-id": "U3h5YwdTXfPsjYsVouLcVkFBnD0wYM/jIjjA+pc/eqM=", |
| 116 | + "measurement-description": "sha-256" |
| 117 | + } |
| 118 | + ], |
| 119 | + "cca-platform-service-indicator": "https://veraison.example/.well-known/veraison/verification", |
| 120 | + "cca-platform-hash-algo-id": "sha-256" |
| 121 | + }, |
| 122 | + "cca-realm-delegated-token": { |
| 123 | + "cca-realm-profile": "tag:arm.com,2023:realm#1.0.0" |
| 124 | + "cca-realm-challenge": "bobW2XzHE7xt1D285JGmtAMRwCeov4WjnaY+nORMEyqKEZ0pb65qaZnpvz5EcbDOASRdiJQkwx6JeTs7HWsVBA==", |
| 125 | + "cca-realm-personalization-value": "VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIDEzIGxhenkgZG9ncy5UaGUgcXVpY2sgYnJvd24gZm94IA==", |
| 126 | + "cca-realm-initial-measurement": "MRMUq3NiA1DPdYg0rlxl2ejC3H/r5ufZZUu+hk4wDUk=", |
| 127 | + "cca-realm-extensible-measurements": [ |
| 128 | + "JNWwopbMBcvYBoxQZ8W9Rzt3Ddpq4IL+O6MKvj+aarE=", |
| 129 | + "eI/AkL/GuO2QMVK6hBTnPa9bjHux55rVAqsGmbZZ7RY=", |
| 130 | + "2sRqWEFdw6ANenQYUgCOnK5k9S0DufdtdvSzZE/vxBY=", |
| 131 | + "MsavxiflVYXAMVU1nzMaDiJfaEDblH3Zbvq4G+JnGTk=" |
| 132 | + ], |
| 133 | + "cca-realm-hash-algo-id": "sha-256", |
| 134 | + "cca-realm-public-key": "BHb5iAkb5YXtQYAa7Pq4WFSMYwV+FrDmdhILvQ0vnCngVsXUGgEw65whUXiZ3CMUayjhsGK9PqSzFf0hnxy7Uoy250ykm+Fnc3NPYaHKYQMbK789kY8vlP/EIo5QkZVErg==", |
| 135 | + "cca-realm-public-key-hash-algo-id": "sha-256" |
| 136 | + } |
| 137 | +} |
| 138 | +``` |
| 139 | + |
| 140 | +It is not important to understand every detail of the attestation token right now, but here are some of the most important highlights: |
| 141 | + |
| 142 | +- The CCA attestation token is a variant of a more general-purpose attestation data format known as the Entity Attestation Token (EAT). The EAT specification has been established to create more alignment across the industry with respect to attestation data, so that common tools and libraries can be used to process it. |
| 143 | +- Specific variants of the EAT format are known as profiles, so this token is adopting the Arm CCA profile of the EAT specification. |
| 144 | +- The CCA attestation token is divided at the top level into two sub-tokens. These are known individually as the platform token and the realm token. |
| 145 | +- The platform token contains the evidence about the Arm CCA platform on which the realm is running, which includes details about the state of the hardware and firmware that compose the platform. You can think of the platform as being like a single server or self-contained computing device. A single platform could host many realms, which could be executing as virtual machines or containers. Therefore, many realms might produce the same platform token. |
| 146 | +- The realm token contains the evidence about the realm itself, which is running on the platform. It is the more dynamic part of the token. It includes information about the realm’s initial memory contents and boot state. |
| 147 | +- The top-level data items in each sub-token are known as claims. A claim is an individual evidence fragment that describes a specific property of the system. |
| 148 | +- The claims of the platform token are labelled with the prefix `cca-platform-*` |
| 149 | +- The claims of the realm token are labelled with the prefix `cca-realm-*` |
| 150 | +- Many of the claims take the form of _measurements_. A measurement is a hash (checksum) that is computed from one of the firmware or software components that are running within the realm or within the platform. Checking these measurements against known-good values is an essential step for evaluating the trustworthiness of the realm. Any mismatch could mean that the system is running some software or firmware that has been tampered with, or is at the wrong patch or version level. |
| 151 | + |
| 152 | +You might find it instructive to view the token in a formatting tool such as https://jsonviewer.stack.hu, where you can interactively expand and collapse different parts of the object tree to gain a better feel for the structure. Doing this may help you to digest the bullet points above. |
| 153 | + |
| 154 | +To test out the formatting tool, see if you can find the measurement of the Realm Management Monitor (RMM). The RMM is part of the firmware for a CCA platform. |
| 155 | + |
| 156 | +Next, you will see the steps involved in verifying and evaluating a CCA attestation token. |
0 commit comments