< draft-ietf-teep-protocol-04.txt   draft-ietf-teep-protocol-05.txt >
TEEP H. Tschofenig TEEP H. Tschofenig
Internet-Draft Arm Ltd. Internet-Draft Arm Ltd.
Intended status: Standards Track M. Pei Intended status: Standards Track M. Pei
Expires: May 6, 2021 Broadcom Expires: August 26, 2021 Broadcom
D. Wheeler D. Wheeler
Intel Intel
D. Thaler D. Thaler
Microsoft Microsoft
A. Tsukamoto A. Tsukamoto
AIST AIST
November 2, 2020 February 22, 2021
Trusted Execution Environment Provisioning (TEEP) Protocol Trusted Execution Environment Provisioning (TEEP) Protocol
draft-ietf-teep-protocol-04 draft-ietf-teep-protocol-05
Abstract Abstract
This document specifies a protocol that installs, updates, and This document specifies a protocol that installs, updates, and
deletes Trusted Applications (TAs) in a device with a Trusted deletes Trusted Applications (TAs) in a device with a Trusted
Execution Environment (TEE). This specification defines an Execution Environment (TEE). This specification defines an
interoperable protocol for managing the lifecycle of TAs. interoperable protocol for managing the lifecycle of TAs.
The protocol name is pronounced teepee. This conjures an image of a The protocol name is pronounced teepee. This conjures an image of a
wedge-shaped protective covering for one's belongings, which sort of wedge-shaped protective covering for one's belongings, which sort of
skipping to change at page 1, line 44 skipping to change at page 1, line 44
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/. Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on May 6, 2021. This Internet-Draft will expire on August 26, 2021.
Copyright Notice Copyright Notice
Copyright (c) 2020 IETF Trust and the persons identified as the Copyright (c) 2021 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3
3. Message Overview . . . . . . . . . . . . . . . . . . . . . . 4 3. Message Overview . . . . . . . . . . . . . . . . . . . . . . 4
4. Detailed Messages Specification . . . . . . . . . . . . . . . 6 4. Detailed Messages Specification . . . . . . . . . . . . . . . 5
4.1. Creating and Validating TEEP Messages . . . . . . . . . . 6 4.1. Creating and Validating TEEP Messages . . . . . . . . . . 6
4.1.1. Creating a TEEP message . . . . . . . . . . . . . . . 6 4.1.1. Creating a TEEP message . . . . . . . . . . . . . . . 6
4.1.2. Validating a TEEP Message . . . . . . . . . . . . . . 6 4.1.2. Validating a TEEP Message . . . . . . . . . . . . . . 6
4.2. QueryRequest Message . . . . . . . . . . . . . . . . . . 7 4.2. QueryRequest Message . . . . . . . . . . . . . . . . . . 7
4.3. QueryResponse Message . . . . . . . . . . . . . . . . . . 9 4.3. QueryResponse Message . . . . . . . . . . . . . . . . . . 9
4.4. Install Message . . . . . . . . . . . . . . . . . . . . . 12 4.3.1. Evidence . . . . . . . . . . . . . . . . . . . . . . 12
4.5. Delete Message . . . . . . . . . . . . . . . . . . . . . 13 4.4. Update Message . . . . . . . . . . . . . . . . . . . . . 13
4.6. Success Message . . . . . . . . . . . . . . . . . . . . . 14 4.5. Success Message . . . . . . . . . . . . . . . . . . . . . 14
4.7. Error Message . . . . . . . . . . . . . . . . . . . . . . 14 4.6. Error Message . . . . . . . . . . . . . . . . . . . . . . 15
5. Mapping of TEEP Message Parameters to CBOR Labels . . . . . . 17 5. Mapping of TEEP Message Parameters to CBOR Labels . . . . . . 18
6. Ciphersuites . . . . . . . . . . . . . . . . . . . . . . . . 17 6. Behavior Specification . . . . . . . . . . . . . . . . . . . 19
7. Security Considerations . . . . . . . . . . . . . . . . . . . 18 6.1. TAM Behavior . . . . . . . . . . . . . . . . . . . . . . 19
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 20 6.2. TEEP Agent Behavior . . . . . . . . . . . . . . . . . . . 20
8.1. Media Type Registration . . . . . . . . . . . . . . . . . 20 7. Ciphersuites . . . . . . . . . . . . . . . . . . . . . . . . 21
8.2. Error Code Registry . . . . . . . . . . . . . . . . . . . 21 8. Security Considerations . . . . . . . . . . . . . . . . . . . 21
8.3. Ciphersuite Registry . . . . . . . . . . . . . . . . . . 21 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 23
8.4. CBOR Tag Registry . . . . . . . . . . . . . . . . . . . . 21 9.1. Media Type Registration . . . . . . . . . . . . . . . . . 23
9. References . . . . . . . . . . . . . . . . . . . . . . . . . 22 9.2. Ciphersuite Registry . . . . . . . . . . . . . . . . . . 24
9.1. Normative References . . . . . . . . . . . . . . . . . . 22 9.3. CBOR Tag Registry . . . . . . . . . . . . . . . . . . . . 24
9.2. Informative References . . . . . . . . . . . . . . . . . 23 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 25
A. Contributors . . . . . . . . . . . . . . . . . . . . . . . . . 24 10.1. Normative References . . . . . . . . . . . . . . . . . . 25
B. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 24 10.2. Informative References . . . . . . . . . . . . . . . . . 26
C. Complete CDDL . . . . . . . . . . . . . . . . . . . . . . . . 24 A. Contributors . . . . . . . . . . . . . . . . . . . . . . . . . 26
D. Examples of Diagnostic Notation and Binary Representation . . 27 B. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 27
D.1. Some assumptions in examples . . . . . . . . . . . . . . 27 C. Complete CDDL . . . . . . . . . . . . . . . . . . . . . . . . 27
D.2. QueryRequest Message . . . . . . . . . . . . . . . . . . 28 D. Examples of Diagnostic Notation and Binary Representation . . 30
D.2.1. CBOR Diagnostic Notation . . . . . . . . . . . . . . 28 D.1. Some assumptions in examples . . . . . . . . . . . . . . 30
D.2.2. CBOR Binary Representation . . . . . . . . . . . . . 28 D.2. QueryRequest Message . . . . . . . . . . . . . . . . . . 31
D.3. QueryResponse Message . . . . . . . . . . . . . . . . . . 29 D.2.1. CBOR Diagnostic Notation . . . . . . . . . . . . . . 31
D.3.1. CBOR Diagnostic Notation . . . . . . . . . . . . . . 29 D.2.2. CBOR Binary Representation . . . . . . . . . . . . . 31
D.3.2. CBOR Binary Representation . . . . . . . . . . . . . 29 D.3. Entity Attestation Token . . . . . . . . . . . . . . . . 31
D.4. Install Message . . . . . . . . . . . . . . . . . . . . . 29 D.3.1. CBOR Diagnostic Notation . . . . . . . . . . . . . . 32
D.4.1. CBOR Diagnostic Notation . . . . . . . . . . . . . . 29 D.4. QueryResponse Message . . . . . . . . . . . . . . . . . . 32
D.4.2. CBOR Binary Representation . . . . . . . . . . . . . 30 D.4.1. CBOR Diagnostic Notation . . . . . . . . . . . . . . 32
D.5. Success Message (for Install) . . . . . . . . . . . . . . 30 D.4.2. CBOR Binary Representation . . . . . . . . . . . . . 33
D.5.1. CBOR Diagnostic Notation . . . . . . . . . . . . . . 30 D.5. Update Message . . . . . . . . . . . . . . . . . . . . . 34
D.5.2. CBOR Binary Representation . . . . . . . . . . . . . 30 D.5.1. CBOR Diagnostic Notation . . . . . . . . . . . . . . 34
D.6. Error Message (for Install) . . . . . . . . . . . . . . . 30 D.5.2. CBOR Binary Representation . . . . . . . . . . . . . 35
D.6.1. CBOR Diagnostic Notation . . . . . . . . . . . . . . 30 D.6. Success Message . . . . . . . . . . . . . . . . . . . . . 35
D.6.2. CBOR binary Representation . . . . . . . . . . . . . 31 D.6.1. CBOR Diagnostic Notation . . . . . . . . . . . . . . 35
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 31 D.6.2. CBOR Binary Representation . . . . . . . . . . . . . 35
D.7. Error Message . . . . . . . . . . . . . . . . . . . . . . 35
D.7.1. CBOR Diagnostic Notation . . . . . . . . . . . . . . 35
D.7.2. CBOR binary Representation . . . . . . . . . . . . . 36
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 36
1. Introduction 1. Introduction
The Trusted Execution Environment (TEE) concept has been designed to The Trusted Execution Environment (TEE) concept has been designed to
separate a regular operating system, also referred as a Rich separate a regular operating system, also referred as a Rich
Execution Environment (REE), from security-sensitive applications. Execution Environment (REE), from security-sensitive applications.
In a TEE ecosystem, device vendors may use different operating In a TEE ecosystem, device vendors may use different operating
systems in the REE and may use different types of TEEs. When TA systems in the REE and may use different types of TEEs. When TA
Developers or Device Administrators use Trusted Application Managers Developers or Device Administrators use Trusted Application Managers
(TAMs) to install, update, and delete Trusted Applications (TAs) on a (TAMs) to install, update, and delete Trusted Applications (TAs) on a
skipping to change at page 4, line 12 skipping to change at page 4, line 16
treats each TA, any dependencies the TA has, and personalization data treats each TA, any dependencies the TA has, and personalization data
as separate components that are expressed in SUIT manifests, and a as separate components that are expressed in SUIT manifests, and a
SUIT manifest might contain or reference multiple binaries (see SUIT manifest might contain or reference multiple binaries (see
[I-D.ietf-suit-manifest] for more details). [I-D.ietf-suit-manifest] for more details).
As such, the term Trusted Component in this document refers to a set As such, the term Trusted Component in this document refers to a set
of binaries expressed in a SUIT manifest, to be installed in a TEE. of binaries expressed in a SUIT manifest, to be installed in a TEE.
Note that a Trusted Component may include one or more TAs and/or Note that a Trusted Component may include one or more TAs and/or
configuration data and keys needed by a TA to operate correctly. configuration data and keys needed by a TA to operate correctly.
Each Trusted Component is uniquely identified by a "component-id" Each Trusted Component is uniquely identified by a SUIT Component
byte string, such as a 16-byte UUID [RFC4122]. If Concise Software Identifier (see [I-D.ietf-suit-manifest] Section 8.7.2.2).
Identifiers [I-D.ietf-sacm-coswid] are used (e.g., in the suit-coswid
field of SUIT manifests), the component-id value is the CoSWID tag-id
value.
3. Message Overview 3. Message Overview
The TEEP protocol consists of messages exchanged between a TAM and a The TEEP protocol consists of messages exchanged between a TAM and a
TEEP Agent. The messages are encoded in CBOR and designed to provide TEEP Agent. The messages are encoded in CBOR and designed to provide
end-to-end security. TEEP protocol messages are signed by the end-to-end security. TEEP protocol messages are signed by the
endpoints, i.e., the TAM and the TEEP Agent, but Trusted Applications endpoints, i.e., the TAM and the TEEP Agent, but Trusted Applications
may also be encrypted and signed by a TA Developer or Device may also be encrypted and signed by a TA Developer or Device
Administrator. The TEEP protocol not only uses CBOR but also the Administrator. The TEEP protocol not only uses CBOR but also the
respective security wrapper, namely COSE [RFC8152]. Furthermore, for respective security wrapper, namely COSE [RFC8152]. Furthermore, for
software updates the SUIT manifest format [I-D.ietf-suit-manifest] is software updates the SUIT manifest format [I-D.ietf-suit-manifest] is
used, and for attestation the Entity Attestation Token (EAT) used, and for attestation the Entity Attestation Token (EAT)
[I-D.ietf-rats-eat] format is supported although other attestation [I-D.ietf-rats-eat] format is supported although other attestation
formats are also permitted. formats are also permitted.
This specification defines six messages. This specification defines five messages.
A TAM queries a device's current state with a QueryRequest message. A TAM queries a device's current state with a QueryRequest message.
A TEEP Agent will, after authenticating and authorizing the request, A TEEP Agent will, after authenticating and authorizing the request,
report attestation information, list all Trusted Components, and report attestation information, list all Trusted Components, and
provide information about supported algorithms and extensions in a provide information about supported algorithms and extensions in a
QueryResponse message. An error message is returned if the request QueryResponse message. An error message is returned if the request
could not be processed. A TAM will process the QueryResponse message could not be processed. A TAM will process the QueryResponse message
and determine whether to initiate subsequent message exchanges to and determine whether to initiate subsequent message exchanges to
install, update, or delete Trusted Applications. install, update, or delete Trusted Applications.
skipping to change at page 5, line 17 skipping to change at page 5, line 17
+------------+ +-------------+ +------------+ +-------------+
QueryRequest -------> QueryRequest ------->
QueryResponse QueryResponse
<------- or <------- or
Error Error
With the Install message a TAM can instruct a TEEP Agent to install a With the Update message a TAM can instruct a TEEP Agent to install
Trusted Component. The TEEP Agent will process the message, and/or delete one or more Trusted Components. The TEEP Agent will
determine whether the TAM is authorized and whether the Trusted process the message, determine whether the TAM is authorized and
Component has been signed by an authorized TA Signer. If the Install whether the Trusted Component has been signed by an authorized TA
message was processed successfully then a Success message is returned Signer. A Success message is returned when the operation has been
to the TAM, or an Error message otherwise. completed successfully, or an Error message otherwise.
+------------+ +-------------+
| TAM | |TEEP Agent |
+------------+ +-------------+
Install ---->
Success
<---- or
Error
With the Delete message a TAM can instruct a TEEP Agent to delete one
or multiple Trusted Components. A Success message is returned when
the operation has been completed successfully, or an Error message
otherwise.
+------------+ +-------------+ +------------+ +-------------+
| TAM | |TEEP Agent | | TAM | |TEEP Agent |
+------------+ +-------------+ +------------+ +-------------+
Delete ----> Update ---->
Success Success
<---- or <---- or
Error Error
4. Detailed Messages Specification 4. Detailed Messages Specification
TEEP messages are protected by the COSE_Sign1 structure. The TEEP TEEP messages are protected by the COSE_Sign1 structure. The TEEP
protocol messages are described in CDDL format [RFC8610] below. protocol messages are described in CDDL format [RFC8610] below.
{ {
teep-message => (query-request / teep-message => (query-request /
query-response / query-response /
install / update /
delete /
teep-success / teep-success /
teep-error ), teep-error ),
} }
4.1. Creating and Validating TEEP Messages 4.1. Creating and Validating TEEP Messages
4.1.1. Creating a TEEP message 4.1.1. Creating a TEEP message
To create a TEEP message, the following steps are performed. To create a TEEP message, the following steps are performed.
skipping to change at page 6, line 41 skipping to change at page 6, line 27
3. Create a COSE_Sign1 object using the TEEP message as the 3. Create a COSE_Sign1 object using the TEEP message as the
COSE_Sign1 Payload; all steps specified in [RFC8152] for creating COSE_Sign1 Payload; all steps specified in [RFC8152] for creating
a COSE_Sign1 object MUST be followed. a COSE_Sign1 object MUST be followed.
4. Prepend the COSE object with the TEEP CBOR tag to indicate that 4. Prepend the COSE object with the TEEP CBOR tag to indicate that
the CBOR-encoded message is indeed a TEEP message. the CBOR-encoded message is indeed a TEEP message.
4.1.2. Validating a TEEP Message 4.1.2. Validating a TEEP Message
When validating a TEEP message, the following steps are performed. When TEEP message is received (see the ProcessTeepMessage conceptual
If any of the listed steps fail, then the TEEP message MUST be API defined in [I-D.ietf-teep-architecture] section 6.2.1), the
rejected. following validation steps are performed. If any of the listed steps
fail, then the TEEP message MUST be rejected.
1. Verify that the received message is a valid CBOR object. 1. Verify that the received message is a valid CBOR object.
2. Remove the TEEP message CBOR tag and verify that one of the COSE 2. Remove the TEEP message CBOR tag and verify that one of the COSE
CBOR tags follows it. CBOR tags follows it.
3. Verify that the message contains a COSE_Sign1 structure. 3. Verify that the message contains a COSE_Sign1 structure.
4. Verify that the resulting COSE Header includes only parameters 4. Verify that the resulting COSE Header includes only parameters
and values whose syntax and semantics are both understood and and values whose syntax and semantics are both understood and
skipping to change at page 7, line 39 skipping to change at page 7, line 27
o Querying installed Trusted Components, and o Querying installed Trusted Components, and
o Listing supporting SUIT commands. o Listing supporting SUIT commands.
Like other TEEP messages, the QueryRequest message is signed, and the Like other TEEP messages, the QueryRequest message is signed, and the
relevant CDDL snippet is shown below. The complete CDDL structure is relevant CDDL snippet is shown below. The complete CDDL structure is
shown in [CDDL]. shown in [CDDL].
query-request = [ query-request = [
type: TEEP-TYPE-query-request, type: TEEP-TYPE-query-request,
token: uint,
options: { options: {
? token => bstr .size (8..64),
? supported-cipher-suites => [ + suite ], ? supported-cipher-suites => [ + suite ],
? challenge => bstr .size (8..64), ? challenge => bstr .size (8..64),
? versions => [ + version ], ? versions => [ + version ],
? ocsp-data => bstr, ? ocsp-data => bstr,
* $$query-request-extensions * $$query-request-extensions
* $$teep-option-extensions * $$teep-option-extensions
}, },
data-item-requested data-item-requested: data-item-requested
] ]
The message has the following fields: The message has the following fields:
type type
The value of (1) corresponds to a QueryRequest message sent from The value of (1) corresponds to a QueryRequest message sent from
the TAM to the TEEP Agent. the TAM to the TEEP Agent.
token token
The value in the token parameter is used to match responses to The value in the token parameter is used to match responses to
requests. This is particularly useful when a TAM issues multiple requests. This is particularly useful when a TAM issues multiple
concurrent requests to a TEEP Agent. concurrent requests to a TEEP Agent. The token is not needed when
the attestation bit is set in the data-item-requested value. The
size of the token is at least 8 bytes (64 bits) and maximum of 64
bytes, which is the same as in an EAT Nonce Claim (see
[I-D.ietf-rats-eat] Section 3.3). The first usage of a token
generated by a TAM MUST be randomly created. Subsequent token
values MUST be different for each request message to distinguish
the correct response from multiple requests. The token value MUST
NOT be used for other purposes, such as a TAM to identify the
devices and/or a device to identify TAMs or Trusted Components.
The TAM MUST expire the token value after receiving the first
responce from the device and ignore any subsequent messages that
have the same token value.
data-item-requested data-item-requested
The data-item-requested parameter indicates what information the The data-item-requested parameter indicates what information the
TAM requests from the TEEP Agent in the form of a bitmap. Each TAM requests from the TEEP Agent in the form of a bitmap. Each
value in the bitmap corresponds to an IANA registered information value in the bitmap corresponds to an IANA registered information
element. This specification defines the following initial set of element. This specification defines the following initial set of
information elements: information elements:
attestation (1) With this value the TAM requests the TEEP Agent attestation (1) With this value the TAM requests the TEEP Agent
to return attestation evidence (e.g., an EAT) in the response. to return attestation evidence (e.g., an EAT) in the response.
skipping to change at page 8, line 39 skipping to change at page 8, line 38
discover the capabilities of a TEEP Agent implementation. discover the capabilities of a TEEP Agent implementation.
suit-commands (8) With this value the TAM queries the TEEP Agent suit-commands (8) With this value the TAM queries the TEEP Agent
for supported commands offered by the SUIT manifest for supported commands offered by the SUIT manifest
implementation. implementation.
Further values may be added in the future via IANA registration. Further values may be added in the future via IANA registration.
supported-cipher-suites supported-cipher-suites
The supported-cipher-suites parameter lists the ciphersuite(s) The supported-cipher-suites parameter lists the ciphersuite(s)
supported by the TAM. Details about the ciphersuite encoding can supported by the TAM. If this parameter is not present, it is to
be found in Section 6. be treated the same as if it contained both ciphersuites defined
in this document. Details about the ciphersuite encoding can be
found in Section 7.
challenge challenge
The challenge field is an optional parameter used for ensuring the The challenge field is an optional parameter used for ensuring the
refreshness of the attestation evidence returned with a refreshness of the attestation evidence returned with a
QueryResponse message. When a challenge is provided in the QueryResponse message. When a challenge is provided in the
QueryRequest and an EAT is returned with the QueryResponse message QueryRequest and an EAT is returned with the QueryResponse message
then the challenge contained in this request MUST be copied into then the challenge contained in this request MUST be copied into
the nonce claim found in the EAT. If any format other than EAT is the nonce claim found in the EAT. If any format other than EAT is
used, it is up to that format to define the use of the challenge used, it is up to that format to define the use of the challenge
field. field.
skipping to change at page 10, line 7 skipping to change at page 10, line 7
The QueryResponse message is the successful response by the TEEP The QueryResponse message is the successful response by the TEEP
Agent after receiving a QueryRequest message. Agent after receiving a QueryRequest message.
Like other TEEP messages, the QueryResponse message is signed, and Like other TEEP messages, the QueryResponse message is signed, and
the relevant CDDL snippet is shown below. The complete CDDL the relevant CDDL snippet is shown below. The complete CDDL
structure is shown in [CDDL]. structure is shown in [CDDL].
query-response = [ query-response = [
type: TEEP-TYPE-query-response, type: TEEP-TYPE-query-response,
token: uint,
options: { options: {
? token => bstr .size (8..64),
? selected-cipher-suite => suite, ? selected-cipher-suite => suite,
? selected-version => version, ? selected-version => version,
? evidence-format => text, ? evidence-format => text,
? evidence => bstr, ? evidence => bstr,
? tc-list => [ + tc-info ], ? tc-list => [ + tc-info ],
? requested-ta-list => [ + requested-ta-info ], ? requested-tc-list => [ + requested-tc-info ],
? unneeded-ta-list => [ + bstr ], ? unneeded-tc-list => [ + SUIT_Component_Identifier ],
? ext-list => [ + ext-info ], ? ext-list => [ + ext-info ],
* $$query-response-extensions, * $$query-response-extensions,
* $$teep-option-extensions * $$teep-option-extensions
} }
] ]
tc-info = { tc-info = {
component-id: bstr, component-id => SUIT_Component_Identifier,
? tc-manifest-sequence-number: uint ? tc-manifest-sequence-number => .within uint .size 8
} }
requested-ta-info = { requested-tc-info = {
component-id: bstr, component-id => SUIT_Component_Identifier,
? tc-manifest-sequence-number: uint, ? tc-manifest-sequence-number => .within uint .size 8
? have-binary: bool ? have-binary => bool
} }
The QueryResponse message has the following fields: The QueryResponse message has the following fields:
type type
The value of (2) corresponds to a QueryResponse message sent from The value of (2) corresponds to a QueryResponse message sent from
the TEEP Agent to the TAM. the TEEP Agent to the TAM.
token token
The value in the token parameter is used to match responses to The value in the token parameter is used to match responses to
requests. The value MUST correspond to the value received with requests. The value MUST correspond to the value received with
the QueryRequest message. the QueryRequest message if one was present, and MUST be absent if
no token was present in the QueryRequest.
selected-cipher-suite selected-cipher-suite
The selected-cipher-suite parameter indicates the selected The selected-cipher-suite parameter indicates the selected
ciphersuite. Details about the ciphersuite encoding can be found ciphersuite. Details about the ciphersuite encoding can be found
in Section 6. in Section 7.
selected-version selected-version
The selected-version parameter indicates the TEEP protocol version The selected-version parameter indicates the TEEP protocol version
selected by the TEEP Agent. The absense of this parameter selected by the TEEP Agent. The absense of this parameter
indicates the same as if it was present with a value of 0. indicates the same as if it was present with a value of 0.
evidence-format evidence-format
The evidence-format parameter indicates the IANA Media Type of the The evidence-format parameter indicates the IANA Media Type of the
attestation evidence contained in the evidence parameter. It MUST attestation evidence contained in the evidence parameter. It MUST
be present if the evidence parameter is present and the format is be present if the evidence parameter is present and the format is
not an EAT. not an EAT.
evidence evidence
The evidence parameter contains the attestation evidence. This The evidence parameter contains the attestation evidence. This
parameter MUST be present if the QueryResponse is sent in response parameter MUST be present if the QueryResponse is sent in response
to a QueryRequest with the attestation bit set. If the evidence- to a QueryRequest with the attestation bit set. If the evidence-
format parameter is absent, the attestation evidence contained in format parameter is absent, the attestation evidence contained in
this parameter MUST be an Entity Attestation Token following the this parameter MUST be an Entity Attestation Token following the
encoding defined in [I-D.ietf-rats-eat]. encoding defined in [I-D.ietf-rats-eat]. See Section 4.3.1 for
further discussion.
tc-list tc-list
The tc-list parameter enumerates the Trusted Components installed The tc-list parameter enumerates the Trusted Components installed
on the device in the form of tc-info objects. on the device in the form of tc-info objects. This parameter MUST
be present if the QueryResponse is sent in response to a
QueryRequest with the trusted-components bit set.
requested-ta-list requested-tc-list
The requested-ta-list parameter enumerates the Trusted The requested-tc-list parameter enumerates the Trusted Components
Applications that are not currently installed in the TEE, but that are not currently installed in the TEE, but which are
which are requested to be installed, for example by an installer requested to be installed, for example by an installer of an
of an Untrusted Application that has a TA as a dependency. Untrusted Application that has a TA as a dependency, or by a
Requested TAs are expressed in the form of requested-ta-info Trusted Application that has another Trusted Component as a
objects. dependency. Requested Trusted Components are expressed in the
form of requested-tc-info objects. A TEEP Agent can get this
information from the UnrequestTA conceptual API defined in
[I-D.ietf-teep-architecture] section 6.2.1.
unneeded-ta-list unneeded-tc-list
The unneeded-ta-list parameter enumerates the Trusted Applications The unneeded-tc-list parameter enumerates the Trusted Components
that are currently installed in the TEE, but which are no longer that are currently installed in the TEE, but which are no longer
needed by any other application. The TAM can use this information needed by any other application. The TAM can use this information
in determining whether a TA can be deleted. Each unneeded TA is in determining whether a Trusted Component can be deleted. Each
expressed in the form of a component-id byte string. unneeded Trusted Component is identified by its SUIT Component
Identifier. A TEEP Agent can get this information from the
UnrequestTA conceptual API defined in [I-D.ietf-teep-architecture]
section 6.2.1.
ext-list ext-list
The ext-list parameter lists the supported extensions. This The ext-list parameter lists the supported extensions. This
document does not define any extensions. document does not define any extensions.
The tc-info object has the following fields: The tc-info object has the following fields:
component-id component-id
A unique identifier encoded as a CBOR bstr. A SUIT Component Identifier.
tc-manifest-sequence-number tc-manifest-sequence-number
The suit-manifest-sequence-number value from the SUIT manifest for The suit-manifest-sequence-number value from the SUIT manifest for
the Trusted Component, if a SUIT manifest was used. the Trusted Component, if a SUIT manifest was used.
The requested-ta-info message has the following fields: The requested-tc-info message has the following fields:
component-id component-id
A unique identifier encoded as a CBOR bstr. A SUIT Component Identifier.
tc-manifest-sequence-number tc-manifest-sequence-number
The minimum suit-manifest-sequence-number value from a SUIT The minimum suit-manifest-sequence-number value from a SUIT
manifest for the TA. If not present, indicates that any version manifest for the Trusted Component. If not present, indicates
will do. that any version will do.
have-binary have-binary
If present with a value of true, indicates that the TEEP agent If present with a value of true, indicates that the TEEP agent
already has the TA binary and only needs an Install message with a already has the Trusted Component binary and only needs an Update
SUIT manifest that authorizes installing it. If have-binary is message with a SUIT manifest that authorizes installing it. If
true, the tc-manifest-sequence-number field MUST be present. have-binary is true, the tc-manifest-sequence-number field MUST be
present.
4.4. Install Message 4.3.1. Evidence
The Install message is used by the TAM to install a Trusted Component Section 7.1 of [I-D.ietf-teep-architecture] lists information that
via the TEEP Agent. may be required in the evidence depend on the circumstance. When an
Entity Attestation Token is used, the following claims can be used to
meet those requirements:
Like other TEEP messages, the Install message is signed, and the +------------+---------------------+--------------------------------+
| Requiremen | Claim | Reference |
| t | | |
+------------+---------------------+--------------------------------+
| Device | device-identifier | [I-D.birkholz-rats-suit-claims |
| unique | | ] section 3.1.3 |
| identifier | | |
| Vendor of | vendor-identifier | [I-D.birkholz-rats-suit-claims |
| the device | | ] section 3.1.1 |
| Class of | class-identifier | [I-D.birkholz-rats-suit-claims |
| the device | | ] section 3.1.2 |
| TEE | chip-version-scheme | [I-D.ietf-rats-eat] section |
| hardware | | 3.7 |
| type | | |
| TEE | chip-version-scheme | [I-D.ietf-rats-eat] section |
| hardware | | 3.7 |
| version | | |
| TEE | component- | [I-D.birkholz-rats-suit-claims |
| firmware | identifier | ] section 3.1.4 |
| type | | |
| TEE | version | [I-D.birkholz-rats-suit-claims |
| firmware | | ] section 3.1.8 |
| version | | |
| Freshness | nonce | [I-D.ietf-rats-eat] section |
| proof | | 3.3 |
+------------+---------------------+--------------------------------+
4.4. Update Message
The Update message is used by the TAM to install and/or delete one or
more Trusted Components via the TEEP Agent.
Like other TEEP messages, the Update message is signed, and the
relevant CDDL snippet is shown below. The complete CDDL structure is relevant CDDL snippet is shown below. The complete CDDL structure is
shown in [CDDL]. shown in [CDDL].
install = [ update = [
type: TEEP-TYPE-install, type: TEEP-TYPE-update,
token: uint, options: {
option: { ? token => bstr .size (8..64),
? manifest-list => [ + SUIT_Envelope ], ? manifest-list => [ + bstr .cbor SUIT_Envelope ],
* $$install-extensions, * $$update-extensions,
* $$teep-option-extensions * $$teep-option-extensions
} }
] ]
The Install message has the following fields: The Update message has the following fields:
type type
The value of (3) corresponds to an Install message sent from the The value of (3) corresponds to an Update message sent from the
TAM to the TEEP Agent. In case of successful processing, a TAM to the TEEP Agent. In case of successful processing, a
Success message is returned by the TEEP Agent. In case of an Success message is returned by the TEEP Agent. In case of an
error, an Error message is returned. Note that the Install error, an Error message is returned. Note that the Update message
message is used for initial Trusted Component installation as well is used for initial Trusted Component installation as well as for
as for updates. updates and deletes.
token token
The value in the token field is used to match responses to The value in the token field is used to match responses to
requests. requests.
manifest-list manifest-list
The manifest-list field is used to convey one or multiple SUIT The manifest-list field is used to convey one or multiple SUIT
manifests. A manifest is a bundle of metadata about a TA, such as manifests to install. A manifest is a bundle of metadata about a
where to find the code, the devices to which it applies, and TA, such as where to find the code, the devices to which it
cryptographic information protecting the manifest. The manifest applies, and cryptographic information protecting the manifest.
may also convey personalization data. TA binaries and The manifest may also convey personalization data. TA binaries
personalization data can be signed and encrypted by the same TA and personalization data can be signed and encrypted by the same
Signer. Other combinations are, however, possible as well. For TA Signer. Other combinations are, however, possible as well.
example, it is also possible for the TAM to sign and encrypt the For example, it is also possible for the TAM to sign and encrypt
personalization data and to let the TA Developer sign and/or the personalization data and to let the TA Developer sign and/or
encrypt the TA binary. encrypt the TA binary.
4.5. Delete Message Note that an Update message carrying one or more SUIT manifests will
inherently involve multiple signatures, one by the TAM in the TEEP
The Delete message is used by the TAM to remove a Trusted Component message and one from a Trusted Component signer inside each manifest.
from the device. This is intentional as they are for different purposes.
Like other TEEP messages, the Delete message is signed, and the
relevant CDDL snippet is shown below. The complete CDDL structure is
shown in [CDDL].
delete = [
type: TEEP-TYPE-delete,
token: uint,
option: {
? tc-list => [ + bstr ],
* $$delete-extensions,
* $$teep-option-extensions
}
]
The Delete message has the following fields:
type
The value of (4) corresponds to a Delete message sent from the TAM
to the TEEP Agent. In case of successful processing, a Success
message is returned by the TEEP Agent. In case of an error, an
Error message is returned.
token The TAM is what authorizes apps to be installed, updated, and deleted
The value in the token parameter is used to match responses to on a given TEE and so the TEEP signature is checked by the TEEP Agent
requests. at protocol message processing time. (This same TEEP security
wrapper is also used on messages like QueryRequest so that Agents
only send potentially sensitive data such as evidence to trusted
TAMs.)
tc-list The Trusted Component signer on the other hand is what authorizes the
The tc-list parameter enumerates the Trusted Components to be Trusted Component to actually run, so the manifest signature could be
deleted, in the form of component-id byte strings. checked at install time or load (or run) time or both, and this
checking is done by the TEE independent of whether TEEP is used or
some other update mechanism. See section 5 of
[I-D.ietf-teep-architecture] for further discussion.
4.6. Success Message 4.5. Success Message
The TEEP protocol defines two implicit success messages and this The Success message is used by the TEEP Agent to return a success in
explicit Success message for the cases where the TEEP Agent cannot response to an Update message.
return another reply, such as for the Install and the Delete
messages.
Like other TEEP messages, the Success message is signed, and the Like other TEEP messages, the Success message is signed, and the
relevant CDDL snippet is shown below. The complete CDDL structure is relevant CDDL snippet is shown below. The complete CDDL structure is
shown in [CDDL]. shown in [CDDL].
teep-success = [ teep-success = [
type: TEEP-TYPE-teep-success, type: TEEP-TYPE-teep-success,
token: uint, options: {
option: { ? token => bstr .size (8..64),
? msg => text, ? msg => text .size (1..128),
? suit-reports => [ + suit-report ], ? suit-reports => [ + suit-report ],
* $$teep-success-extensions, * $$teep-success-extensions,
* $$teep-option-extensions * $$teep-option-extensions
} }
] ]
The Success message has the following fields: The Success message has the following fields:
type type
The value of (5) corresponds to corresponds to a Success message The value of (5) corresponds to corresponds to a Success message
sent from the TEEP Agent to the TAM. sent from the TEEP Agent to the TAM.
token token
The value in the token parameter is used to match responses to The value in the token parameter is used to match responses to
requests. requests. It MUST match the value of the token parameter in the
Update message the Success is in response to, if one was present.
If none was present, the token MUST be absent in the Success
message.
msg msg
The msg parameter contains optional diagnostics information The msg parameter contains optional diagnostics information
encoded in UTF-8 [RFC3629] returned by the TEEP Agent. encoded in UTF-8 [RFC3629] using Net-Unicode form [RFC5198] with
max 128 bytes returned by the TEEP Agent.
suit-reports suit-reports
If present, the suit-reports parameter contains a set of SUIT If present, the suit-reports parameter contains a set of SUIT
Reports as defined in Section 4 of [I-D.moran-suit-report]. Reports as defined in Section 4 of [I-D.moran-suit-report]. If
the suit-report-nonce field is present in the SUIT Report, is
value MUST match the value of the token parameter in the Update
message the Success message is in response to.
4.7. Error Message 4.6. Error Message
The Error message is used by the TEEP Agent to return an error. The Error message is used by the TEEP Agent to return an error in
response to an Update message.
Like other TEEP messages, the Error message is signed, and the Like other TEEP messages, the Error message is signed, and the
relevant CDDL snippet is shown below. The complete CDDL structure is relevant CDDL snippet is shown below. The complete CDDL structure is
shown in [CDDL]. shown in [CDDL].
teep-error = [ teep-error = [
type: TEEP-TYPE-teep-error, type: TEEP-TYPE-teep-error,
token: uint,
err-code: uint,
options: { options: {
? err-msg => text, ? token => bstr .size (8..64),
? err-msg => text .size (1..128),
? supported-cipher-suites => [ + suite ], ? supported-cipher-suites => [ + suite ],
? versions => [ + version ], ? versions => [ + version ],
? suit-reports => [ + suit-report ], ? suit-reports => [ + suit-report ],
* $$teep-error--extensions, * $$teep-error-extensions,
* $$teep-option-extensions * $$teep-option-extensions
} },
err-code: uint (0..23)
] ]
The Error message has the following fields: The Error message has the following fields:
type type
The value of (6) corresponds to an Error message sent from the The value of (6) corresponds to an Error message sent from the
TEEP Agent to the TAM. TEEP Agent to the TAM.
token token
The value in the token parameter is used to match responses to The value in the token parameter is used to match responses to
requests. requests. It MUST match the value of the token parameter in the
Update message the Success is in response to, if one was present.
err-code If none was present, the token MUST be absent in the Error
The err-code parameter contains one of the values listed in the
registry defined in Section 8.2 (with the initial set of error
codes listed below). Only selected values are applicable to each
message. message.
err-msg err-msg
The err-msg parameter is human-readable diagnostic text that MUST The err-msg parameter is human-readable diagnostic text that MUST
be encoded using UTF-8 [RFC3629] using Net-Unicode form [RFC5198]. be encoded using UTF-8 [RFC3629] using Net-Unicode form [RFC5198]
with max 128 bytes.
supported-cipher-suites supported-cipher-suites
The supported-cipher-suites parameter lists the ciphersuite(s) The supported-cipher-suites parameter lists the ciphersuite(s)
supported by the TEEP Agent. Details about the ciphersuite supported by the TEEP Agent. Details about the ciphersuite
encoding can be found in Section 6. This field is optional but encoding can be found in Section 7. This field is optional but
MUST be returned with the ERR_UNSUPPORTED_CRYPTO_ALG error MUST be returned with the ERR_UNSUPPORTED_CRYPTO_ALG error
message. message.
versions versions
The versions parameter enumerates the TEEP protocol version(s) The versions parameter enumerates the TEEP protocol version(s)
supported by the TEEP Agent. This otherwise optional parameter supported by the TEEP Agent. This otherwise optional parameter
MUST be returned with the ERR_UNSUPPORTED_MSG_VERSION error MUST be returned with the ERR_UNSUPPORTED_MSG_VERSION error
message. message.
suit-reports suit-reports
If present, the suit-reports parameter contains a set of SUIT If present, the suit-reports parameter contains a set of SUIT
Reports as defined in Section 4 of [I-D.moran-suit-report]. Reports as defined in Section 4 of [I-D.moran-suit-report]. If
the suit-report-nonce field is present in the SUIT Report, is
value MUST match the value of the token parameter in the Update
message the Error message is in response to.
err-code
The err-code parameter contains one of the error codes listed
below). Only selected values are applicable to each message.
This specification defines the following initial error messages: This specification defines the following initial error messages:
ERR_ILLEGAL_PARAMETER (1) ERR_PERMANENT_ERROR (1)
The TEEP request contained incorrect fields or fields that are The TEEP request contained incorrect fields or fields that are
inconsistent with other fields. inconsistent with other fields. For diagnosis purposes it is
RECOMMMENDED to identify the failure reason in the error message.
A TAM receiving this error might refuse to communicate further
with the TEEP Agent for some period of time until it has reason to
believe it is worth trying again, but it should take care not to
give up on communication when there is no attestation evidence
indicating that the error is genuine. In contrast,
ERR_TEMPORARY_ERROR is an indication that a more agressive retry
is warranted.
ERR_UNSUPPORTED_EXTENSION (2) ERR_UNSUPPORTED_EXTENSION (2)
The TEEP Agent does not support the request message or an The TEEP Agent does not support an extension included in the
extension it indicated. request message. For diagnosis purposes it is RECOMMMENDED to
identify the unsupported extension in the error message. A TAM
ERR_REQUEST_SIGNATURE_FAILED (3) receiving this error might retry the request without using
The TEEP Agent could not verify the signature of the request extensions.
message.
ERR_UNSUPPORTED_MSG_VERSION (4) ERR_UNSUPPORTED_MSG_VERSION (4)
The TEEP Agent does not support the TEEP protocol version The TEEP Agent does not support the TEEP protocol version
indicated in the request message. indicated in the request message. A TAM receiving this error
might retry the request using a different TEEP protocol version.
ERR_UNSUPPORTED_CRYPTO_ALG (5) ERR_UNSUPPORTED_CRYPTO_ALG (5)
The TEEP Agent does not support the cryptographic algorithm The TEEP Agent does not support the cryptographic algorithm
indicated in the request message. indicated in the request message. A TAM receiving this error
might retry the request using a different cryptographic algorithm.
ERR_BAD_CERTIFICATE (6) ERR_BAD_CERTIFICATE (6)
Processing of a certificate failed. For diagnosis purposes it is Processing of a certificate failed. For diagnosis purposes it is
RECOMMMENDED to include information about the failing certificate RECOMMMENDED to include information about the failing certificate
in the error message. in the error message. For example, the certificate was of an
unsupported type, or the certificate was revoked by its signer. A
ERR_UNSUPPORTED_CERTIFICATE (7) TAM receiving this error might attempt to use an alternate
A certificate was of an unsupported type. certificate.
ERR_CERTIFICATE_REVOKED (8)
A certificate was revoked by its signer.
ERR_CERTIFICATE_EXPIRED (9) ERR_CERTIFICATE_EXPIRED (9)
A certificate has expired or is not currently valid. A certificate has expired or is not currently valid. A TAM
receiving this error might attempt to renew its certificate before
ERR_INTERNAL_ERROR (10) using it again.
A miscellaneous internal error occurred while processing the
request message.
ERR_TC_NOT_FOUND (12) ERR_TEMPORARY_ERROR (10)
The target Trusted Component does not exist. This error may A miscellaneous temporary error, such as a memory allocation
happen when the TAM has stale information and tries to delete a failure, occurred while processing the request message. A TAM
Trusted Component that has already been deleted. receiving this error might retry the same request at a later point
in time.
ERR_MANIFEST_PROCESSING_FAILED (17) ERR_MANIFEST_PROCESSING_FAILED (17)
The TEEP Agent encountered one or more manifest processing The TEEP Agent encountered one or more manifest processing
failures. If the suit-reports parameter is present, it contains failures. If the suit-reports parameter is present, it contains
the failure details. the failure details. A TAM receiving this error might still
attempt to install or update other components that do not depend
on the failed manifest.
Additional error codes can be registered with IANA. New error codes should be added sparingly, not for every
implementation error. That is the intent of the err-msg field, which
can be used to provide details meaningful to humans. New error codes
should only be added if the TAM is expected to do something
behaviorally different upon receipt of the error message, rather than
just logging the event. Hence, each error code is responsible for
saying what the behavioral difference is expected to be.
5. Mapping of TEEP Message Parameters to CBOR Labels 5. Mapping of TEEP Message Parameters to CBOR Labels
In COSE, arrays and maps use strings, negative integers, and unsigned In COSE, arrays and maps use strings, negative integers, and unsigned
integers as their keys. Integers are used for compactness of integers as their keys. Integers are used for compactness of
encoding. Since the word "key" is mainly used in its other meaning, encoding. Since the word "key" is mainly used in its other meaning,
as a cryptographic key, this specification uses the term "label" for as a cryptographic key, this specification uses the term "label" for
this usage as a map key. this usage as a map key.
This specification uses the following mapping: This specification uses the following mapping:
skipping to change at page 17, line 44 skipping to change at page 19, line 27
| manifest-list | 10 | | manifest-list | 10 |
| msg | 11 | | msg | 11 |
| err-msg | 12 | | err-msg | 12 |
| evidence-format | 13 | | evidence-format | 13 |
| requested-tc-list | 14 | | requested-tc-list | 14 |
| unneeded-tc-list | 15 | | unneeded-tc-list | 15 |
| component-id | 16 | | component-id | 16 |
| tc-manifest-sequence-number | 17 | | tc-manifest-sequence-number | 17 |
| have-binary | 18 | | have-binary | 18 |
| suit-reports | 19 | | suit-reports | 19 |
| token | 20 |
+-----------------------------+-------+ +-----------------------------+-------+
6. Ciphersuites 6. Behavior Specification
Behavior is specified in terms of the conceptual APIs defined in
section 6.2.1 of [I-D.ietf-teep-architecture].
6.1. TAM Behavior
When the ProcessConnect API is invoked, the TAM sends a QueryRequest
message.
When the ProcessTeepMessage API is invoked, the TAM first does
validation as specified in Section 4.1.2, and drops the message if it
is not valid. Otherwise, it proceeds as follows.
If a QueryResponse message is received that contains evidence, the
evidence is passed to an attestation Verifier (see
[I-D.ietf-rats-architecture]) to determine whether the Agent is in a
trustworthy state. Based on the results of attestation, and the
lists of installed, requested, and unneeded Trusted Components
reported in the QueryResponse, the TAM determines, in any
implementation specific manner, which Trusted Components need to be
installed, updated, or deleted, if any. If any Trusted Components
need to be installed, updated, or deleted, the TAM sends an Update
message containing SUIT Manifests with command sequences to do the
relevant installs, updates, or deletes.
If a Success or Error message is received, the TAM also validates
that the nonce in any SUIT Report matches the token sent in the
Update message, and drops the message if it does not match.
Otherwise, the TAM handles the update in any implementation specific
way, such as updating any locally cached information about the state
of the TEEP Agent, or logging the results.
If an Error message is received, the TAM can handle it in any
implementation specific way, but Section 4.6 provides recommendations
for such handling.
6.2. TEEP Agent Behavior
When the RequestTA API is invoked, the TEEP Agent first checks
whether the requested TA is already installed. If it is already
installed, the TEEP Agent passes no data back to the caller.
Otherwise, if the TEEP Agent chooses to initiate the process of
requesting the indicated TA, it determines (in any implementation
specific way) the TAM URI based on any TAM URI provided by the
RequestTA caller and any local configuration, and passes back the TAM
URI to connect to.
When the RequestPolicyCheck API is invoked, the TEEP Agent decides
whether to initiate communication with any trusted TAMs (e.g., it
might choose to do so for a given TAM unless it detects that it has
already communicated with that TAM recently). If so, it passes back
a TAM URI to connect to. If the TEEP Agent has multiple TAMs it
needs to connect with, it just passes back one, with the expectation
that RequestPolicyCheck API will be invoked to retrieve each one
successively until there are no more and it can pass back no data at
that time. Thus, once a TAM URI is returned, the TEEP Agent can
remember that it has already initiated communication with that TAM.
When the ProcessError API is invoked, the TEEP Agent can handle it in
any implementation specific way, such as logging the error or using
the information in future choices of TAM URI.
When the ProcessTeepMessage API is invoked, the Agent first does
validation as specified in Section 4.1.2, and drops the message if it
is not valid. Otherwise, processing continues as follows based on
the type of message.
When a QueryRequest message is received, the Agent responds with a
QueryResponse message.
When an Update message is received, the Agent attempts to update the
Trusted Components specified in the SUIT manifests by following the
Update Procedure specified in [I-D.ietf-suit-manifest], and responds
with a Success message if all SUIT manifests were successfully
installed, or an Error message if any error was encountered.
7. Ciphersuites
A ciphersuite consists of an AEAD algorithm, an HMAC algorithm, and a A ciphersuite consists of an AEAD algorithm, an HMAC algorithm, and a
signature algorithm. Each ciphersuite is identified with an integer signature algorithm. Each ciphersuite is identified with an integer
value, which corresponds to an IANA registered ciphersuite (see value, which corresponds to an IANA registered ciphersuite (see
Section 8.3. This document specifies two ciphersuites. Section 9.2. This document specifies two ciphersuites.
+-------+------------------------------------------------+ +-------+------------------------------------------------+
| Value | Ciphersuite | | Value | Ciphersuite |
+-------+------------------------------------------------+ +-------+------------------------------------------------+
| 1 | AES-CCM-16-64-128, HMAC 256/256, X25519, EdDSA | | 1 | AES-CCM-16-64-128, HMAC 256/256, X25519, EdDSA |
| 2 | AES-CCM-16-64-128, HMAC 256/256, P-256, ES256 | | 2 | AES-CCM-16-64-128, HMAC 256/256, P-256, ES256 |
+-------+------------------------------------------------+ +-------+------------------------------------------------+
7. Security Considerations A TAM MUST support both ciphersuites. A TEEP Agent MUST support at
least one of the two but can choose which one. For example, a TEEP
Agent might choose ciphersuite 2 if it has hardware support for it.
8. Security Considerations
This section summarizes the security considerations discussed in this This section summarizes the security considerations discussed in this
specification: specification:
Cryptographic Algorithms Cryptographic Algorithms
TEEP protocol messages exchanged between the TAM and the TEEP TEEP protocol messages exchanged between the TAM and the TEEP
Agent are protected using COSE. This specification relies on the Agent are protected using COSE. This specification relies on the
cryptographic algorithms provided by COSE. Public key based cryptographic algorithms provided by COSE. Public key based
authentication is used by the TEEP Agent to authenticate the TAM authentication is used by the TEEP Agent to authenticate the TAM
and vice versa. and vice versa.
skipping to change at page 20, line 11 skipping to change at page 23, line 26
revoked certificate. OCSP stapling data includes signature revoked certificate. OCSP stapling data includes signature
generation time, allowing certificate validity dates to be generation time, allowing certificate validity dates to be
compared to the current time. compared to the current time.
Compromised Time Source Compromised Time Source
As discussed above, certificate validity checks rely on comparing As discussed above, certificate validity checks rely on comparing
validity dates to the current time, which relies on having a validity dates to the current time, which relies on having a
trusted source of time, such as [RFC8915]. A compromised time trusted source of time, such as [RFC8915]. A compromised time
source could thus be used to subvert such validity checks. source could thus be used to subvert such validity checks.
8. IANA Considerations 9. IANA Considerations
8.1. Media Type Registration 9.1. Media Type Registration
IANA is requested to assign a media type for application/teep+cbor. IANA is requested to assign a media type for application/teep+cbor.
Type name: application Type name: application
Subtype name: teep+cbor Subtype name: teep+cbor
Required parameters: none Required parameters: none
Optional parameters: none Optional parameters: none
skipping to change at page 21, line 4 skipping to change at page 24, line 19
Magic number(s): N/A Magic number(s): N/A
File extension(s): N/A File extension(s): N/A
Macintosh file type code(s): N/A Macintosh file type code(s): N/A
Person to contact for further information: teep@ietf.org Person to contact for further information: teep@ietf.org
Intended usage: COMMON Intended usage: COMMON
Restrictions on usage: none Restrictions on usage: none
Author: See the "Authors' Addresses" section of this document Author: See the "Authors' Addresses" section of this document
Change controller: IETF Change controller: IETF
8.2. Error Code Registry 9.2. Ciphersuite Registry
IANA is also requested to create a new registry for the error codes
defined in Section 4.
Registration requests are evaluated after a three-week review period
on the teep-reg-review@ietf.org mailing list, on the advice of one or
more Designated Experts [RFC8126]. However, to allow for the
allocation of values prior to publication, the Designated Experts may
approve registration once they are satisfied that such a
specification will be published.
Registration requests sent to the mailing list for review should use
an appropriate subject (e.g., "Request to register an error code:
example"). Registration requests that are undetermined for a period
longer than 21 days can be brought to the IESG's attention (using the
iesg@ietf.org mailing list) for resolution.
Criteria that should be applied by the Designated Experts includes
determining whether the proposed registration duplicates existing
functionality, whether it is likely to be of general applicability or
whether it is useful only for a single extension, and whether the
registration description is clear.
IANA must only accept registry updates from the Designated Experts
and should direct all requests for registration to the review mailing
list.
8.3. Ciphersuite Registry
IANA is also requested to create a new registry for ciphersuites, as IANA is also requested to create a new registry for ciphersuites, as
defined in Section 6. defined in Section 7.
8.4. CBOR Tag Registry 9.3. CBOR Tag Registry
IANA is requested to register a CBOR tag in the "CBOR Tags" registry IANA is requested to register a CBOR tag in the "CBOR Tags" registry
for use with TEEP messages. for use with TEEP messages.
The registry contents is: The registry contents is:
o CBOR Tag: TBD1 o CBOR Tag: TBD1
o Data Item: TEEP Message o Data Item: TEEP Message
o Semantics: TEEP Message, as defined in [[TBD: This RFC]] o Semantics: TEEP Message, as defined in [[TBD: This RFC]]
o Reference: [[TBD: This RFC]] o Reference: [[TBD: This RFC]]
o Point of Contact: TEEP working group (teep@ietf.org) o Point of Contact: TEEP working group (teep@ietf.org)
9. References 10. References
9.1. Normative References 10.1. Normative References
[I-D.ietf-rats-architecture]
Birkholz, H., Thaler, D., Richardson, M., Smith, N., and
W. Pan, "Remote Attestation Procedures Architecture",
draft-ietf-rats-architecture-08 (work in progress),
December 2020.
[I-D.ietf-rats-eat] [I-D.ietf-rats-eat]
Mandyam, G., Lundblade, L., Ballesteros, M., and J. Mandyam, G., Lundblade, L., Ballesteros, M., and J.
O'Donoghue, "The Entity Attestation Token (EAT)", draft- O'Donoghue, "The Entity Attestation Token (EAT)", draft-
ietf-rats-eat-04 (work in progress), August 2020. ietf-rats-eat-06 (work in progress), December 2020.
[I-D.ietf-suit-manifest] [I-D.ietf-suit-manifest]
Moran, B., Tschofenig, H., Birkholz, H., and K. Zandberg, Moran, B., Tschofenig, H., Birkholz, H., and K. Zandberg,
"A Concise Binary Object Representation (CBOR)-based "A Concise Binary Object Representation (CBOR)-based
Serialization Format for the Software Updates for Internet Serialization Format for the Software Updates for Internet
of Things (SUIT) Manifest", draft-ietf-suit-manifest-09 of Things (SUIT) Manifest", draft-ietf-suit-manifest-11
(work in progress), July 2020. (work in progress), December 2020.
[I-D.moran-suit-report] [I-D.moran-suit-report]
Moran, B., "Secure Reporting of Update Status", draft- Moran, B., "Secure Reporting of Update Status", draft-
moran-suit-report-00 (work in progress), October 2020. moran-suit-report-00 (work in progress), October 2020.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997, <https://www.rfc- DOI 10.17487/RFC2119, March 1997, <https://www.rfc-
editor.org/info/rfc2119>. editor.org/info/rfc2119>.
skipping to change at page 23, line 17 skipping to change at page 26, line 13
October 2013, <https://www.rfc-editor.org/info/rfc7049>. October 2013, <https://www.rfc-editor.org/info/rfc7049>.
[RFC8152] Schaad, J., "CBOR Object Signing and Encryption (COSE)", [RFC8152] Schaad, J., "CBOR Object Signing and Encryption (COSE)",
RFC 8152, DOI 10.17487/RFC8152, July 2017, RFC 8152, DOI 10.17487/RFC8152, July 2017,
<https://www.rfc-editor.org/info/rfc8152>. <https://www.rfc-editor.org/info/rfc8152>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/info/rfc8174>. May 2017, <https://www.rfc-editor.org/info/rfc8174>.
9.2. Informative References 10.2. Informative References
[I-D.ietf-sacm-coswid] [I-D.birkholz-rats-suit-claims]
Birkholz, H., Fitzgerald-McKay, J., Schmidt, C., and D. Birkholz, H. and B. Moran, "Trustworthiness Vectors for
Waltermire, "Concise Software Identification Tags", draft- the Software Updates of Internet of Things (SUIT) Workflow
ietf-sacm-coswid-15 (work in progress), May 2020. Model", draft-birkholz-rats-suit-claims-01 (work in
progress), January 2021.
[I-D.ietf-teep-architecture] [I-D.ietf-teep-architecture]
Pei, M., Tschofenig, H., Thaler, D., and D. Wheeler, Pei, M., Tschofenig, H., Thaler, D., and D. Wheeler,
"Trusted Execution Environment Provisioning (TEEP) "Trusted Execution Environment Provisioning (TEEP)
Architecture", draft-ietf-teep-architecture-12 (work in Architecture", draft-ietf-teep-architecture-13 (work in
progress), July 2020. progress), November 2020.
[RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally
Unique IDentifier (UUID) URN Namespace", RFC 4122,
DOI 10.17487/RFC4122, July 2005, <https://www.rfc-
editor.org/info/rfc4122>.
[RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for
Writing an IANA Considerations Section in RFCs", BCP 26, Writing an IANA Considerations Section in RFCs", BCP 26,
RFC 8126, DOI 10.17487/RFC8126, June 2017, RFC 8126, DOI 10.17487/RFC8126, June 2017,
<https://www.rfc-editor.org/info/rfc8126>. <https://www.rfc-editor.org/info/rfc8126>.
[RFC8610] Birkholz, H., Vigano, C., and C. Bormann, "Concise Data [RFC8610] Birkholz, H., Vigano, C., and C. Bormann, "Concise Data
Definition Language (CDDL): A Notational Convention to Definition Language (CDDL): A Notational Convention to
Express Concise Binary Object Representation (CBOR) and Express Concise Binary Object Representation (CBOR) and
JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610,
skipping to change at page 24, line 27 skipping to change at page 27, line 20
We would like to thank Kohei Isobe (TRASIO/SECOM), Kuniyasu Suzaki We would like to thank Kohei Isobe (TRASIO/SECOM), Kuniyasu Suzaki
(TRASIO/AIST), Tsukasa Oi (TRASIO), and Yuichi Takita (SECOM) for (TRASIO/AIST), Tsukasa Oi (TRASIO), and Yuichi Takita (SECOM) for
their valuable implementation feedback. their valuable implementation feedback.
We would also like to thank Carsten Bormann and Henk Birkholz for We would also like to thank Carsten Bormann and Henk Birkholz for
their help with the CDDL. their help with the CDDL.
C. Complete CDDL C. Complete CDDL
Valid TEEP messages MUST adhere to the following CDDL data Valid TEEP messages MUST adhere to the following CDDL data
definitions, except that "SUIT_Envelope" is specified in definitions, except that "SUIT_Envelope" and
"SUIT_Component_Identifier" are specified in
[I-D.ietf-suit-manifest]. [I-D.ietf-suit-manifest].
teep-message = $teep-message-type .within teep-message-framework teep-message = $teep-message-type .within teep-message-framework
SUIT_Envelope = any SUIT_Envelope = any
teep-message-framework = [ teep-message-framework = [
type: 0..23 / $teep-type-extension, type: uint (0..23) / $teep-type-extension,
token: uint,
options: { * teep-option }, options: { * teep-option },
* int; further integers, e.g. for data-item-requested * uint; further integers, e.g., for data-item-requested
] ]
teep-option = (uint => any) teep-option = (uint => any)
; messages defined below: ; messages defined below:
$teep-message-type /= query-request $teep-message-type /= query-request
$teep-message-type /= query-response $teep-message-type /= query-response
$teep-message-type /= install $teep-message-type /= update
$teep-message-type /= delete
$teep-message-type /= teep-success $teep-message-type /= teep-success
$teep-message-type /= teep-error $teep-message-type /= teep-error
; message type numbers ; message type numbers, uint (0..23)
TEEP-TYPE-query-request = 1 TEEP-TYPE-query-request = 1
TEEP-TYPE-query-response = 2 TEEP-TYPE-query-response = 2
TEEP-TYPE-install = 3 TEEP-TYPE-update = 3
TEEP-TYPE-delete = 4
TEEP-TYPE-teep-success = 5 TEEP-TYPE-teep-success = 5
TEEP-TYPE-teep-error = 6 TEEP-TYPE-teep-error = 6
version = uint .size 4 version = .within uint .size 4
ext-info = uint ext-info = .within uint .size 4
; data items as bitmaps ; data items as bitmaps
data-item-requested = $data-item-requested .within uint .size 8 data-item-requested = $data-item-requested .within uint .size 8
attestation = 1 attestation = 1
$data-item-requested /= attestation $data-item-requested /= attestation
trusted-components = 2 trusted-components = 2
$data-item-requested /= trusted-components $data-item-requested /= trusted-components
extensions = 4 extensions = 4
$data-item-requested /= extensions $data-item-requested /= extensions
suit-commands = 8 suit-commands = 8
$data-item-requested /= suit-commands $data-item-requested /= suit-commands
query-request = [ query-request = [
type: TEEP-TYPE-query-request, type: TEEP-TYPE-query-request,
token: uint,
options: { options: {
? token => bstr .size (8..64),
? supported-cipher-suites => [ + suite ], ? supported-cipher-suites => [ + suite ],
? challenge => bstr .size (8..64), ? challenge => bstr .size (8..64),
? versions => [ + version ], ? versions => [ + version ],
? ocsp-data => bstr, ? ocsp-data => bstr,
* $$query-request-extensions * $$query-request-extensions
* $$teep-option-extensions * $$teep-option-extensions
}, },
data-item-requested data-item-requested: data-item-requested
] ]
; ciphersuites as bitmaps ; ciphersuites
suite = $TEEP-suite .within uint .size 8 suite = $TEEP-suite .within uint .size 4
TEEP-AES-CCM-16-64-128-HMAC256--256-X25519-EdDSA = 1 TEEP-AES-CCM-16-64-128-HMAC256--256-X25519-EdDSA = 1
TEEP-AES-CCM-16-64-128-HMAC256--256-P-256-ES256 = 2 TEEP-AES-CCM-16-64-128-HMAC256--256-P-256-ES256 = 2
$TEEP-suite /= TEEP-AES-CCM-16-64-128-HMAC256--256-X25519-EdDSA $TEEP-suite /= TEEP-AES-CCM-16-64-128-HMAC256--256-X25519-EdDSA
$TEEP-suite /= TEEP-AES-CCM-16-64-128-HMAC256--256-P-256-ES256 $TEEP-suite /= TEEP-AES-CCM-16-64-128-HMAC256--256-P-256-ES256
query-response = [ query-response = [
type: TEEP-TYPE-query-response, type: TEEP-TYPE-query-response,
token: uint,
options: { options: {
? token => bstr .size (8..64),
? selected-cipher-suite => suite, ? selected-cipher-suite => suite,
? selected-version => version, ? selected-version => version,
? evidence-format => text, ? evidence-format => text,
? evidence => bstr, ? evidence => bstr,
? tc-list => [ + tc-info ], ? tc-list => [ + tc-info ],
? requested-tc-list => [ + requested-tc-info ], ? requested-tc-list => [ + requested-tc-info ],
? unneeded-tc-list => [ + bstr ], ? unneeded-tc-list => [ + SUIT_Component_Identifier ],
? ext-list => [ + ext-info ], ? ext-list => [ + ext-info ],
* $$query-response-extensions, * $$query-response-extensions,
* $$teep-option-extensions * $$teep-option-extensions
} }
] ]
tc-info = { tc-info = {
component-id: bstr, component-id => SUIT_Component_Identifier,
? tc-manifest-sequence-number: uint ? tc-manifest-sequence-number => .within uint .size 8
} }
requested-ta-info = { requested-tc-info = {
component-id: bstr, component-id => SUIT_Component_Identifier,
? tc-manifest-sequence-number: uint, ? tc-manifest-sequence-number => .within uint .size 8
? have-binary: bool ? have-binary => bool
} }
install = [ update = [
type: TEEP-TYPE-install, type: TEEP-TYPE-update,
token: uint, options: {
option: { ? token => bstr .size (8..64),
? manifest-list => [ + SUIT_Envelope ], ? unneeded-tc-list => [ + SUIT_Component_Identifier ],
* $$install-extensions, ? manifest-list => [ + bstr .cbor SUIT_Envelope ],
* $$teep-option-extensions * $$update-extensions,
}
]
delete = [
type: TEEP-TYPE-delete,
token: uint,
option: {
? tc-list => [ + bstr ],
* $$delete-extensions,
* $$teep-option-extensions * $$teep-option-extensions
} }
] ]
teep-success = [ teep-success = [
type: TEEP-TYPE-teep-success, type: TEEP-TYPE-teep-success,
token: uint, options: {
option: { ? token => bstr .size (8..64),
? msg => text, ? msg => text .size (1..128),
? suit-reports => [ + suit-report ], ? suit-reports => [ + suit-report ],
* $$teep-success-extensions, * $$teep-success-extensions,
* $$teep-option-extensions * $$teep-option-extensions
} }
] ]
teep-error = [ teep-error = [
type: TEEP-TYPE-teep-error, type: TEEP-TYPE-teep-error,
token: uint,
err-code: uint,
options: { options: {
? err-msg => text, ? token => bstr .size (8..64),
? err-msg => text .size (1..128),
? supported-cipher-suites => [ + suite ], ? supported-cipher-suites => [ + suite ],
? versions => [ + version ], ? versions => [ + version ],
? suit-reports => [ + suit-report ], ? suit-reports => [ + suit-report ],
* $$teep-error--extensions, * $$teep-error-extensions,
* $$teep-option-extensions * $$teep-option-extensions
} },
err-code: uint (0..23)
] ]
; The err-code parameter, uint (0..23)
ERR_PERMANENT_ERROR = 1
ERR_UNSUPPORTED_EXTENSION = 2
ERR_UNSUPPORTED_MSG_VERSION = 4
ERR_UNSUPPORTED_CRYPTO_ALG = 5
ERR_BAD_CERTIFICATE = 6
ERR_CERTIFICATE_EXPIRED = 9
ERR_TEMPORARY_ERROR = 10
ERR_MANIFEST_PROCESSING_FAILED = 17
; labels of mapkey for teep message parameters, uint (0..23)
supported-cipher-suites = 1 supported-cipher-suites = 1
challenge = 2 challenge = 2
versions = 3 versions = 3
ocsp-data = 4 ocsp-data = 4
selected-cipher-suite = 5 selected-cipher-suite = 5
selected-version = 6 selected-version = 6
evidence = 7 evidence = 7
tc-list = 8 tc-list = 8
ext-list = 9 ext-list = 9
manifest-list = 10 manifest-list = 10
msg = 11 msg = 11
err-msg = 12 err-msg = 12
evidence-format = 13 evidence-format = 13
requested-tc-list = 14 requested-tc-list = 14
unneeded-tc-list = 15 unneeded-tc-list = 15
component-id = 16 component-id = 16
tc-manifest-sequence-number = 17 tc-manifest-sequence-number = 17
have-binary = 18 have-binary = 18
suit-reports = 19 suit-reports = 19
token = 20
D. Examples of Diagnostic Notation and Binary Representation D. Examples of Diagnostic Notation and Binary Representation
D.1. Some assumptions in examples D.1. Some assumptions in examples
o OCSP stapling data = h'010203' o OCSP stapling data = h'010203'
o TEEP Device will have 2 TAs o TEEP Device will have 2 TAs with the following SUIT Component
* TA-ID: 0x0102030405060708090a0b0c0d0e0f, Identifiers:
0x1102030405060708090a0b0c0d0e0f
o SUIT manifest-list is set empty only for example purposes * [ 0x0102030405060708090a0b0c0d0e0f ]
o Not including Entity Attestation Token (EAT) parameters for * [ 0x1102030405060708090a0b0c0d0e0f ]
example purposes
o SUIT manifest-list is set empty only for example purposes
D.2. QueryRequest Message D.2. QueryRequest Message
D.2.1. CBOR Diagnostic Notation D.2.1. CBOR Diagnostic Notation
/ query-request = / / query-request = /
[ [
1, / type : TEEP-TYPE-query-request = 1 (fixed int) / 1, / type : TEEP-TYPE-query-request = 1 (uint (0..23)) /
2004318071, / token : 0x77777777 (uint), generated by TAM /
/ options : / / options : /
{ {
1 : [ 1 ] / supported-cipher-suites = 1 (mapkey) : / 20 : 0xa0a1a2a3a4a5a6a7,
/ TEEP-AES-CCM-16-64-128-HMAC256--256-X25519-EdDSA = / token = 20 (mapkey) :
[ 1 ] (array of uint .size 8) / h'a0a1a2a3a4a5a6a7' (bstr .size (8..64)),
3 : [ 0 ] / version = 3 (mapkey) : generated by TAM /
[ 0 ] (array of uint .size 4) / 1 : [ 1 ], / supported-cipher-suites = 1 (mapkey) :
4 : h'010203' / ocsp-data = 4 (mapkey) : 0x010203 (bstr) / TEEP-AES-CCM-16-64-128-HMAC256--256-X25519-EdDSA =
[ 1 ] (array of .within uint .size 4) /
3 : [ 0 ], / version = 3 (mapkey) :
[ 0 ] (array of .within uint .size 4) /
4 : h'010203' / ocsp-data = 4 (mapkey) : 0x010203 (bstr) /
}, },
2 / data-item-requested : trusted-components = 2 (uint) / 3 / data-item-requested :
] attestation | trusted-components = 3 (.within uint .size 8) /
]
D.2.2. CBOR Binary Representation D.2.2. CBOR Binary Representation
84 # array(4), 83 # array(3)
01 # unsigned(1) 01 # unsigned(1) uint (0..23)
1A 77777777 # unsigned(2004318071, 0x77777777) A4 # map(4)
A3 # map(3) 14 # unsigned(20) uint (0..23)
01 # unsigned(1) 48 # bytes(8) (8..64)
81 # array(1) A0A1A2A3A4A5A6A7
01 # unsigned(1) within .size 8 01 # unsigned(1) uint (0..23)
03 # unsigned(3) 81 # array(1)
81 # array(1) 01 # unsigned(1) within uint .size 4
00 # unsigned(0) within .size 4 03 # unsigned(3) uint (0..23)
04 # unsigned(4) 81 # array(1)
43 # bytes(3) 00 # unsigned(0) within uint .size 4
010203 # "\x01\x02\x03" 04 # unsigned(4) uint (0..23)
02 # unsigned(2) 43 # bytes(3)
010203 # "\x01\x02\x03"
D.3. QueryResponse Message 03 # unsigned(3) .within uint .size 8
D.3.1. CBOR Diagnostic Notation D.3. Entity Attestation Token
/ query-response = / This is shown below in CBOR diagnostic form. Only the payload signed
[ by COSE is shown.
2, / type : TEEP-TYPE-query-response = 2 (fixed int) /
2004318071, / token : 0x77777777 (uint), from TAM's QueryRequest
message /
/ options : /
{
5 : 1, / selected-cipher-suite = 5(mapkey) :/
/ TEEP-AES-CCM-16-64-128-HMAC256--256-X25519-EdDSA =
1 (uint .size 8) /
6 : 0, / selected-version = 6 (mapkey) : 0 (uint .size 4) /
8 : [ h'0102030405060708090a0b0c0d0e0f',
h'1102030405060708090a0b0c0d0e0f' ]
/ ta-list = 8 (mapkey) :
[ 0x0102030405060708090a0b0c0d0e0f,
0x1102030405060708090a0b0c0d0e0f ]
(array of bstr) /
}
]
D.3.2. CBOR Binary Representation D.3.1. CBOR Diagnostic Notation
83 # array(3) / eat-claim-set = /
02 # unsigned(2) {
1A 77777777 # unsigned(2004318071, 0x77777777) / issuer / 1: "joe",
A3 # map(3) / timestamp (iat) / 6: 1(1526542894)
05 # unsigned(5) / nonce / 10: h'948f8860d13a463e8e',
01 # unsigned(1) within .size 8 / secure-boot / 15: true,
06 # unsigned(6) / debug-status / 16: 3, / disabled-permanently /
00 # unsigned(0) within .size 4 / security-level / <TBD>: 3, / secure-restricted /
08 # unsigned(8) / device-identifier / <TBD>: h'e99600dd921649798b013e9752dcf0c5',
82 # array(2) / vendor-identifier / <TBD>: h'2b03879b33434a7ca682b8af84c19fd4',
4F # bytes(16) / class-identifier / <TBD>: h'9714a5796bd245a3a4ab4f977cb8487f',
0102030405060708090A0B0C0D0D0F / chip-version-scheme / <TBD35>: "MyTEE v1.0",
4F # bytes(16) / component-identifier / <TBD>: h'60822887d35e43d5b603d18bcaa3f08d',
1102030405060708090A0B0C0D0D0F / version / <TBD>: "v0.1"
}
D.4. Install Message D.4. QueryResponse Message
D.4.1. CBOR Diagnostic Notation D.4.1. CBOR Diagnostic Notation
/ install = / / query-response = /
[ [
3, / type : TEEP-TYPE-install = 3 (fixed int) / 2, / type : TEEP-TYPE-query-response = 2 (uint (0..23)) /
2004318072, / token : 0x777777778 (uint), generated by TAM / / options : /
/ options : / {
{ 20 : 0xa0a1a2a3a4a5a6a7,
10 : [ ] / manifest-list = 10 (mapkey) : / token = 20 (mapkey) :
[ ] (array of SUIT_Envelope(any)) / h'a0a1a2a3a4a5a6a7' (bstr .size (8..64)),
/ empty, example purpose only / given from TAM's QueryRequest message /
5 : 1, / selected-cipher-suite = 5 (mapkey) :
TEEP-AES-CCM-16-64-128-HMAC256--256-X25519-EdDSA =
1 (.within uint .size 4) /
6 : 0, / selected-version = 6 (mapkey) :
0 (.within uint .size 4) /
7 : ... / evidence = 7 (mapkey) :
Entity Attestation Token /
8 : [ / tc-list = 8 (mapkey) : (array of tc-info) /
{
16 : [ 0x0102030405060708090a0b0c0d0e0f ] / component-id =
16 (mapkey) : [ h'0102030405060708090a0b0c0d0e0f' ]
(SUIT_Component_Identifier = [* bstr]) /
},
{
16 : [ 0x1102030405060708090a0b0c0d0e0f ] / component-id =
16 (mapkey) : [ h'1102030405060708090a0b0c0d0e0f' ]
(SUIT_Component_Identifier = [* bstr]) /
}
]
} }
] ]
D.4.2. CBOR Binary Representation D.4.2. CBOR Binary Representation
82 # array(2)
02 # unsigned(2) uint (0..23)
A5 # map(5)
14 # unsigned(20) uint (0..23)
48 # bytes(8) (8..64)
A0A1A2A3A4A5A6A7
05 # unsigned(5) uint (0..23)
01 # unsigned(1) .within uint .size 4
06 # unsigned(6) uint (0..23)
00 # unsigned(0) .within uint .size 4
07 # unsigned(7) uint (0..23)
... # Entity Attestation Token
08 # unsigned(8) uint (0..23)
82 # array(2)
81 # array(1)
4F # bytes(15)
0102030405060708090A0B0C0D0E0F
81 # array(1)
4F # bytes(15)
1102030405060708090A0B0C0D0E0F
83 # array(3) D.5. Update Message
03 # unsigned(3)
1A 77777778 # unsigned(2004318072, 0x77777778)
A1 # map(1)
0A # unsigned(10)
80 # array(0)
D.5. Success Message (for Install)
D.5.1. CBOR Diagnostic Notation D.5.1. CBOR Diagnostic Notation
/ teep-success = / / update = /
[ [
5, / type : TEEP-TYPE-teep-success = 5 (fixed int) / 3, / type : TEEP-TYPE-update = 3 (uint (0..23)) /
2004318072, / token : 0x777777778 (uint), from Install message / / options : /
{
20 : 0xaba1a2a3a4a5a6a7,
/ token = 20 (mapkey) :
h'aba1a2a3a4a5a6a7' (bstr .size (8..64)),
generated by TAM /
15 : [ [ h'0102030405060708090a0b0c0d0e0f' ] ]
/ unneeded-tc-list = 15 (mapkey) :
[ [ h'0102030405060708090a0b0c0d0e0f' ] ]
(array of SUIT_Component_Identifier = [* bstr]) /
10 : [ ] / manifest-list = 10 (mapkey) :
[ ] (array of bstr wrapped SUIT_Envelope(any)) /
/ empty, example purpose only /
}
] ]
D.5.2. CBOR Binary Representation D.5.2. CBOR Binary Representation
83 # array(3) 82 # array(2)
05 # unsigned(5) 03 # unsigned(3) uint (0..23)
1A 77777778 # unsigned(2004318072, 0x77777778) A3 # map(3)
14 # unsigned(20) uint (0..23)
48 # bytes(8) (8..64)
ABA1A2A3A4A5A6A7
0F # unsigned(15) uint (0..23)
81 # array(1)
81 # array(1)
4F # bytes(15)
0102030405060708090A0B0C0D0E0F
0A # unsigned(10) uint (0..23)
80 # array(0)
D.6. Error Message (for Install) D.6. Success Message
D.6.1. CBOR Diagnostic Notation D.6.1. CBOR Diagnostic Notation
/ teep-error = /
/ teep-success = /
[ [
6, / type : TEEP-TYPE-teep-error = 6 (fixed int) / 5, / type : TEEP-TYPE-teep-success = 5 (uint (0..23)) /
2004318072, / token : 0x777777778 (uint), from Install message / / options : /
ERR_MANIFEST_PROCESSING_FAILED, {
/ err-code : ERR_MANIFEST_PROCESSING_FAILED = 17 (uint) / 20 : 0xaba1a2a3a4a5a6a7,
/ options : / / token = 20 (mapkey) :
{ h'aba1a2a3a4a5a6a7' (bstr .size (8..64)),
12 : "disk-full" / err-msg = 12 (mapkey) : given from TAM's Update message /
"disk-full" (UTF-8 string) / }
}
] ]
D.6.2. CBOR binary Representation D.6.2. CBOR Binary Representation
83 # array(3) 82 # array(2)
06 # unsigned(6) 05 # unsigned(5) uint (0..23)
1A 77777778 # unsigned(2004318072, 0x77777778) A1 # map(1)
11 # unsigned(17) 14 # unsigned(20) uint (0..23)
A1 # map(1) 48 # bytes(8) (8..64)
0B # unsigned(12) ABA1A2A3A4A5A6A7
69 # text(9)
6469736b2d66756c6c # "disk-full" D.7. Error Message
D.7.1. CBOR Diagnostic Notation
/ teep-error = /
[
6, / type : TEEP-TYPE-teep-error = 6 (uint (0..23)) /
/ options : /
{
20 : 0xaba1a2a3a4a5a6a7,
/ token = 20 (mapkey) :
h'aba1a2a3a4a5a6a7' (bstr .size (8..64)),
given from TAM's Update message /
12 : "disk-full" / err-msg = 12 (mapkey) :
"disk-full" (text .size (1..128)) /
},
17, / err-code : ERR_MANIFEST_PROCESSING_FAILED = 17 (uint (0..23)) /
]
D.7.2. CBOR binary Representation
83 # array(3)
06 # unsigned(6) uint (0..23)
A2 # map(2)
14 # unsigned(20) uint (0..23)
48 # bytes(8) (8..64)
ABA1A2A3A4A5A6A7
0C # unsigned(12) uint (0..23)
69 # text(9) (1..128)
6469736b2d66756c6c # "disk-full"
11 # unsigned(17) uint (0..23)
Authors' Addresses Authors' Addresses
Hannes Tschofenig Hannes Tschofenig
Arm Ltd. Arm Ltd.
Absam, Tirol 6067 Absam, Tirol 6067
Austria Austria
Email: hannes.tschofenig@arm.com Email: hannes.tschofenig@arm.com
 End of changes. 139 change blocks. 
437 lines changed or deleted 620 lines changed or added

This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/