<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.31 (Ruby 3.2.2) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>

<?rfc rfcedstyle="yes"?>
<?rfc tocindent="yes"?>
<?rfc strict="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc text-list-symbols="-o*+"?>
<?rfc docmapping="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-suit-report-10" category="info" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="Secure Reporting of Update Status">Secure Reporting of Update Status</title>

    <author initials="B." surname="Moran" fullname="Brendan Moran">
      <organization>Arm Limited</organization>
      <address>
        <email>brendan.moran.ietf@gmail.com</email>
      </address>
    </author>
    <author initials="H." surname="Birkholz" fullname="Henk Birkholz">
      <organization>Fraunhofer SIT</organization>
      <address>
        <email>henk.birkholz@sit.fraunhofer.de</email>
      </address>
    </author>

    <date year="2024" month="October" day="21"/>

    <area>Security</area>
    <workgroup>SUIT</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>The Software Update for the Internet of Things (SUIT) manifest provides
a way for many different update and boot
workflows to be described by a common format. However, this does not
provide a feedback mechanism for developers in the event that an update
or boot fails.</t>

<t>This specification describes a lightweight feedback mechanism that
allows a developer in possession of a manifest to reconstruct the
decisions made and actions performed by a manifest processor.</t>



    </abstract>



  </front>

  <middle>


<section anchor="introduction"><name>Introduction</name>

<t>A SUIT manifest processor can fail to install or boot an update for many
reasons. Frequently, the error codes generated by such systems fail to
provide developers with enough information to find root causes and
produce corrective actions, resulting in extra effort to reproduce
failures. Logging the results of each SUIT command can simplify this
process.</t>

<t>While it is possible to report the results of SUIT commands through
existing logging or attestation mechanisms, this comes with several
drawbacks:</t>

<t><list style="symbols">
  <t>data inflation, particularly when designed for text-based logging</t>
  <t>missing information elements</t>
  <t>missing support for multiple components</t>
</list></t>

<t>The CBOR objects defined in this document allow devices to:</t>

<t><list style="symbols">
  <t>report a trace of how an update was performed</t>
  <t>report expected vs. actual values for critical checks</t>
  <t>describe the installation of complex multi-component architectures</t>
  <t>describe the measured properties of a system</t>
  <t>report the exact reason for a parsing failure</t>
</list></t>

<t>This document provides a definition of a SUIT-specific logging container
that may be used in a variety of scenarios.</t>

</section>
<section anchor="terminology"><name>Conventions and Terminology</name>

<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

<t>Terms used in this specification include:</t>

<t><list style="symbols">
  <t>Boot: initialization of an executable image. Although this
specification refers to boot, any boot-specific operations described
are equally applicable to starting an executable in an OS context.</t>
</list></t>

</section>
<section anchor="the-suit-record"><name>The SUIT Record</name>

<t>If the developer can be assumed to have a copy of the
manifest, then they need little information to reconstruct what the
manifest processor has done. They simply need any data that influences
the control flow of the manifest. The manifest only supports the
following control flow primitives:</t>

<t><list style="symbols">
  <t>Set Component</t>
  <t>Set/Override Parameters</t>
  <t>Try-Each</t>
  <t>Run Sequence</t>
  <t>Conditions</t>
</list></t>

<t>Of these, only conditions change the behavior of the processor from the
default, and then only when the condition fails.</t>

<t>Then, to reconstruct the flow of a manifest, all a developer needs is
a list of metadata about failed conditions:</t>

<t><list style="symbols">
  <t>the current manifest</t>
  <t>the current section</t>
  <t>the offset into the current section</t>
  <t>the current component index</t>
  <t>the "reason" for failure</t>
</list></t>

<t>Most conditions compare a parameter to an actual value, so the "reason"
is typically simply the actual value.</t>

<t>Since it is possible that a non-condition command (directive) may fail in an
exceptional circumstance, this must be included as well. However, 
a failed directive will terminate processing of the manifest. To accommodate
for a failed command and for explicit "completion," an additional "result"
element is added as well. In the case of a command failure,
the failure reason is typically a numeric error code. However, these error
codes need to be standardised in order to be useful.</t>

<t>Reconstructing what a device has done in this way is compact,
however it requires some reconstruction effort. This is an issue that
can be solved by tooling.</t>

<figure><artwork><![CDATA[
SUIT_Record = [
    suit-record-manifest-id        : [* uint ],
    suit-record-manifest-section   : int,
    suit-record-section-offset     : uint,
    suit-record-component-index    : uint,
    suit-record-properties         : SUIT_Parameters,
    $$SUIT_Record_Extensions
]
]]></artwork></figure>

<t>suit-record-manifest-id is used to identify which manifest contains the
command that caused the record to be generated. The manifest id is a
list of integers that form a walk of the manifest tree, starting at the
root. An empty list indicates that the command was contained in the
root manifest. If the list is not empty, the command was contained in
one of the root manifest's dependencies, or nested even further below
that.</t>

<t>For example, suppose that the root manifest has 3 dependencies
and each of those dependencies has 2 dependencies of its own:</t>

<t><list style="symbols">
  <t>Root  <list style="symbols">
      <t>Dependency A      <list style="symbols">
          <t>Dependency A0</t>
          <t>Dependency A1</t>
        </list></t>
      <t>Dependency B      <list style="symbols">
          <t>Dependency B0</t>
          <t>Dependency B1</t>
        </list></t>
      <t>Dependency C      <list style="symbols">
          <t>Dependency C0</t>
          <t>Dependency C1</t>
        </list></t>
    </list></t>
</list></t>

<t>A manifest-id of [1,0] would indicate that the current command was
contained within Dependency B0. Similarly, a manifest-id of [2,1]
would indicate Dependency C1</t>

<t>suit-record-manifest-section indicates which section of the manifest was
active. This is used in addition to an offset so that the developer can
index into severable sections in a predictable way. The value of this
element is the value of the key that identified the section in the
manifest.</t>

<t>suit-record-section-offset is the number of bytes into the current
section at which the current command is located.</t>

<t>suit-record-component-index is the index of the component that was
specified at the time that the report was generated. This field is
necessary due to the availability of set-current-component values of
True and a list of components. Both of these values cause the manifest
processor to loop over commands using a series of component-ids, so the
developer needs to know which was selected when the command executed.</t>

<t>suit-record-properties contains any measured properties that led to the
command failure.
For example, this could be the actual value of a SUIT_Digest or
class identifier. This is encoded in a SUIT_Parameters block as defined
in <xref target="I-D.ietf-suit-manifest"/>.</t>

</section>
<section anchor="suit-report"><name>The SUIT_Report</name>

<t>Some metadata is common to all records, such as the root manifest:
the manifest that is the entry-point for the manifest processor. This
metadata is aggregated with a list of SUIT_Records. The SUIT_Report
may also contain a list of any system properties that were measured
and reported, and a reason for a failure if one occured.</t>

<t>CDDL
~~~
SUIT_Report = {
  suit-reference              =&gt; SUIT_Reference,
  ? suit-report-nonce         =&gt; bstr,
  suit-report-records         =&gt; [ * SUIT_Record / system-property-claims ],
  suit-report-result          =&gt; true / {
    suit-report-result-code   =&gt; int,
    suit-report-result-record =&gt; SUIT_Record,
    suit-report-result-reason =&gt; SUIT_Report_Reasons,
  },
  ? suit-report-capability-report =&gt; SUIT_Capability_Report,
  $$SUIT_Report_Extensions
}
system-property-claims = {
  system-component-id =&gt; SUIT_Component_Identifier,
  + SUIT_Parameters,
}
~~~</t>

<t>The suit-reference provides a reference URI and digest for a suit
manifest. The uri <bcp14>SHOULD</bcp14> be the canonical URI that is provided in the
manifest. The digest is the digest of the manifest.</t>

<t>NOTE: The digest is used
in preference to other identifiers in the manifest because it allows
a manifest to be uniquely identified (collision resistance) whereas
other identifiers, such as the sequence number, can collide,
particularly in scenarios with multiple trusted signers.</t>

<t>The following CDDL describes a SUIT_Reference.</t>

<figure><sourcecode type="CDDL"><![CDATA[
SUIT_Reference = {
    suit-report-manifest-uri  : tstr,
    suit-report-manifest-digest : SUIT_Digest,
}
]]></sourcecode></figure>

<t>suit-report-manifest-digest provides a SUIT_Digest (as defined in
<xref target="I-D.ietf-suit-manifest"/>) that is the characteristic digest of the
Root manifest.</t>

<t>suit-report-manifest-uri provides the reference URI that was provided in
the root manifest.</t>

<t>suit-report-nonce provides a container for freshness or replay
protection information. This field <bcp14>MAY</bcp14> be omitted where the suit-report
is authenticated within a container that provides freshness already.
For example, attestation evidence typically contains a proof of
freshness.</t>

<section anchor="suit-record"><name>SUIT Record</name>

<t>suit-report-records is a list of 0 or more SUIT Records or 
system-property-claims. Because SUIT Records are only generated on failure,
in simple cases this can be an empty list. SUIT_Records and 
suit-system-property-claims are merged into a single list because this
reduces the overhead for a constrained node that generates this report.
The use of a single append-only log allows report generators to use simple
memory management. Because the system-property-claims are encoded as maps
and SUIT_Records are encoded as lists, a recipient need only filter the
CBOR Type-5 entries from suit-report-records to obtain all 
system-property-claims.</t>

<t>System properties can be extracted from suit-report-records by filtering
suit-report-records for maps. System Properties are a list of measured 
or asserted properties
of the system that creates the SUIT_Report. These properties are scoped by
component identifier. Because this list is expected to be constructed on
the fly by a constrained node, component identifiers may appear more than
once. A recipient may convert the result to a more conventional structure:</t>

<figure><sourcecode type="CDDL"><![CDATA[
SUIT_Record_System_Properties = {
  * component-id => {
    + SUIT_Parameters,
  }
}
]]></sourcecode></figure>

</section>
<section anchor="suit-report-result"><name>SUIT Report Result</name>

<t>suit-report-result provides a mechanism to show that the SUIT procedure
completed successfully (value is true) or why it failed (value is a map
of an error code and a SUIT_Record).</t>

<t>suit-report-result-reason gives a high-level explanation of the failure.
These reasons are intended for interoperable implementations. The reasons
are divided into a small number of groups:</t>

<t><list style="symbols">
  <t>suit-report-reason-cbor-parse: a parsing error was encountered by the
CBOR parser.</t>
  <t>suit-report-reason-cose-unsupported: an unusupported COSE structure or
header was encountered.</t>
  <t>suit-report-reason-alg-unsupported: an unsupported COSE algorithm was
encountered.</t>
  <t>suit-report-reason-unauthorised: Signature/MAC verification failed.</t>
  <t>suit-report-reason-command-unsupported: an unsupported command was
encountered.</t>
  <t>suit-report-reason-component-unsupported: The manifest declared a 
component/prefix that does not exist.</t>
  <t>suit-report-reason-component-unauthorised: The manifest declared a 
component that is not accessible by the signer.</t>
  <t>suit-report-reason-parameter-unsupported: The manifest used a
parameter that does not exist.</t>
  <t>suit-report-severing-unsupported: The manifest uses severable fields
but the Manifest Processor doesn't support them.</t>
  <t>suit-report-reason-condition-failed: A condition failed with soft-
failure off.</t>
  <t>suit-report-reason-operation-failed: A command failed (e.g., 
download/copy/swap/write)</t>
</list></t>

<t>The suit-report-result-code reports an internal error code that is
provided for debugging reasons. This code is not intended for 
interoperability.</t>

<t>The suit-report-result-record indicates the exact point in the manifest
or manifest dependency tree where the error occured.</t>

<t>suit-report-capability-report provides a mechanism to report the capabilities of the Manifest Processor. The SUIT_Capability_Report is described in <xref target="capabilities"/>. The capability report is optional to include in the SUIT_Report, according to an application-specific policy. While the SUIT_Capability_Report is not expected to be very large, applications should ensure that they only report capabilities when necessary in order to conserve bandwidth. A capability report is not necessary except when:</t>

<t><list style="numbers">
  <t>A client explicitly requests the capability report, or</t>
  <t>A manifest attempts to use a capability that the Manifest Processor does not implement.</t>
</list></t>

</section>
</section>
<section anchor="attestation"><name>Attestation</name>

<t>This document describes how a well-informed verifier can infer the trustworthiness of a remote device. Remote attestation is done by using the SUIT_Manifest_Envelope along with the SUIT_Report to reconstruct the state of the device at boot time. By embedding data used for remote attestation in the SUIT_Report, a remote device can use an append-only log to collect both measurements and debug/failure information into the same document. This document can then be conveyed to a verifier as a part of the attestation evidence. A remote attestation format to convey attestation evidence, such as an Entity Attestation Token (EAT, see <xref target="I-D.ietf-rats-eat"/>), that contains a SUIT_Report <bcp14>MUST</bcp14> also include an integrity measurement of the Manifest Processor &amp; Report Generator.</t>

<t>When a Concise Reference Integrity Manifest (CoRIM, see <xref target="I-D.birkholz-rats-corim"/> is delivered in a SUIT_Manifest_Envelope, this codifies the delivery of verification information to the verifier:</t>

<t><list style="symbols">
  <t>The Firmware Distributor:
  <list style="symbols">
      <t>sends the SUIT_Manifest_Envelope to the Verifier without payload or text, but with CoRIM</t>
      <t>sends the SUIT_Manifest_Envelope to the recipient without CoRIM, or text, but with payload</t>
    </list></t>
  <t>The Recipient:
  <list style="symbols">
      <t>Installs the firmware as described in the SUIT_Manifest and generates a SUIT_report, which is encapsulated in an EAT by the installer and sent to the Firmware Distributor.</t>
      <t>Boots the firmware as described in the SUIT_Manifest and creates a SUIT_report, which is encapsulated in an EAT by the installer and sent to the Firmware Distributor.</t>
    </list></t>
  <t>The Firmware Distributor sends both reports to the verifier (separately or together)</t>
  <t>The Verifier:
  <list style="symbols">
      <t>Reconstructs the state of the device using the manifest</t>
      <t>Compares this state to the CoRIM</t>
      <t>Returns an Attestation Report to the Firmware Distributor</t>
    </list></t>
</list></t>

<t>This approach simplifies the design of the bootloader since it is able to use an append-only log. It allows a verifier to validate this report against a signed CoRIM that is provided by the firmware author, which simplifies the delivery chain of verification information to the verifier.</t>

<t>This information is not intended as Attestation Evidence and while an Attestation Report <bcp14>MAY</bcp14> provide this information for conveying error codes and/or failure reports, it <bcp14>SHOULD</bcp14> be translated into general-purpose claims for use by the Relying Party.</t>

</section>
<section anchor="capabilities"><name>Capability Reporting</name>

<t>Because SUIT is extensible, a manifest author must know what capabilities a device has available. To enable this, a capability report is a set of lists that define which commands, parameters, algorithms, and component IDs are supported by a manifest processor.</t>

<t>The CDDL for a SUIT_Capability_Report follows:</t>

<figure><sourcecode type="CDDL"><![CDATA[
SUIT_Capability_Report = {
  suit-component-capabilities        => [+ SUIT_Component_Capability ]
  suit-command-capabilities          => [+ int],
  suit-parameters-capabilities       => [+ int],
  suit-crypt-algo-capabilities       => [+ int],
  ? suit-envelope-capabilities       => [+ int],
  ? suit-manifest-capabilities       => [+ int],
  ? suit-common-capabilities         => [+ int],
  ? suit-text-capabilities           => [+ int],
  ? suit-text-component-capabilities => [+ int],
  ? suit-dependency-capabilities     => [+ int],
  * [+int]                           => [+ int],
  $$SUIT_Capability_Report_Extensions
}

SUIT_Component_Capability = [*bstr,?true]
]]></sourcecode></figure>

<t>A SUIT_Component_Capability is similar to a SUIT_Component_ID, with one difference: it may optionally be terminated by a CBOR 'true' which acts as a wild-card match for any component with a prefix matching the SUIT_Component_Capability leading up to the 'true.' This feature is for use with filesystem storage, key value stores, or any other arbitrary-component-id storage systems.</t>

<t>When reporting capabilities, it is <bcp14>OPTIONAL</bcp14> to report capabilities that are declared mandatory by the SUIT Manifest <xref target="I-D.ietf-suit-manifest"/>. Capabilities defined by extensions <bcp14>MUST</bcp14> be reported.</t>

<t>Additional capability reporting can be added as follows: if a manifest element does not exist in this map, it can be added by specifying the CBOR path to the manifest element in an array and using this as the key. For example SUIT_Dependencies, as described in <xref target="I-D.ietf-suit-trust-domains"/> could have an extension added, which was key 3 in the SUIT_Dependencies map. This capability would be reported as: [3, 3, 1] =&gt; [3], where the key consists of the key for SUIT_Manifest (3), the key for SUIT_Common (3), and the key for SUIT_Dependencies (1). Then the value indicates that this manifest processor supports the extension (3).</t>

</section>
<section anchor="eat"><name>EAT Claim</name>

<t>The SUIT_Report is a form of measurement done by the SUIT Manifest Processor as it attempts to invoke a manifest or install a manifest. As a result, the SUIT_Report can be captured in an EAT measurements type.
The Verifier <bcp14>MAY</bcp14> convert a SUIT_Report into a more consumable version of the EAT claim by, for example, constructing a measres claim that contains the digest of a component, the vendor ID &amp; class ID of a component, etc.</t>

</section>
<section anchor="container"><name>SUIT_Report container</name>

<t>The SUIT_Report <bcp14>MUST</bcp14> be carried in a container or transport that ensures authenticity. The SUIT_Report <bcp14>MUST</bcp14> be transported using one of the following options:</t>

<t><list style="symbols">
  <t>As an element of an existing document that ensures authenticity, such as in a measurements claim in an EAT.</t>
  <t>As the payload of a message delivered over secure transport, such as a CoAP or LwM2M message.</t>
  <t>Contained within a secure container that conforms to the current recommendations of <xref target="I-D.ietf-suit-mti"/>.</t>
</list></t>

<t>In this case, the SUIT_Report is carried as sole payload of a COSE_Encrypt0 or COSE_Sign1 as shown in the CDDL snippet below.</t>

<figure><sourcecode type="CDDL"><![CDATA[
SUIT_Report_Protected /= SUIT_Report_COSE_Sign1 .and SUIT_COSE_Profiles
SUIT_Report_Protected /= SUIT_Report_COSE_Sign1_Tagged .and SUIT_COSE_Profiles
SUIT_Report_Protected /= SUIT_Report_COSE_MAC0 .and SUIT_COSE_Profiles
SUIT_Report_Protected /= SUIT_Report_COSE_MAC0_Tagged .and SUIT_COSE_Profiles

SUIT_Report_COSE_Sign1_Tagged = #6.18(SUIT_Report_COSE_Sign1)
SUIT_Report_COSE_Sign1 = [
    protected : bstr,
    unprotected : {* int => any},
    payload : bstr .cbor SUIT_Report_Unprotected,
    signature : bstr
]
SUIT_Report_COSE_MAC0_Tagged = #6.17(SUIT_Report_COSE_MAC0)
SUIT_Report_COSE_MAC0 = [
    protected : bstr,
    unprotected : {* int => any},
    payload : bstr .cbor SUIT_Report_Unprotected,
    tag : bstr
]
SUIT_Report_Unprotected = SUIT_Report / SUIT_Report_COSE_Encrypt0
SUIT_Report_COSE_Encrypt0 = COSE_Encrypt0
]]></sourcecode></figure>

<t>Note that SUIT_Report_COSE_Sign1 and SUIT_Report_COSE_MAC0 <bcp14>MUST</bcp14> be combined with a SUIT_COSE_Profile from <xref target="I-D.ietf-suit-mti"/> using the CDDL .and directive. The SUIT_Report_COSE_Encrypt0 carries a ciphertext payload that <bcp14>MUST</bcp14> contain just the ciphertext obtained by encrypting the following CDDL:</t>

<figure><sourcecode type="CDDL"><![CDATA[
SUIT_Report_plaintext = bstr .cbor SUIT_Report
]]></sourcecode></figure>

<t>SUIT_COSE_Profiles define only AES-CTR encryption due to its suitability for firmware distribution. Because AES-CTR is not authenticated, SUIT_Report_Protected defines authenticated containers with an encrypted payload.</t>

</section>
<section anchor="iana"><name>IANA Considerations</name>

<t>IANA is requested to allocate a CBOR tag and a coap content-type each for the SUIT_Report, SUIT_Reference, and SUIT_Capability_Report CBOR data structures.</t>

<t>IANA is also requested to add the following registries to the SUIT category:</t>

<t><list style="symbols">
  <t>SUIT Report Elements</t>
  <t>SUIT Record Elements</t>
  <t>SUIT Report Reasons</t>
  <t>SUIT Capability Report Elements</t>
</list></t>

<section anchor="suit-report-elements"><name>SUIT Report Elements</name>

<t>IANA is requested to create a new registry for SUIT Report Elements.</t>

<texttable>
      <ttcol align='left'>Label</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>2</c>
      <c>Nonce</c>
      <c><xref target="suit-report"/></c>
      <c>3</c>
      <c>Records</c>
      <c><xref target="suit-report"/></c>
      <c>4</c>
      <c>Result</c>
      <c><xref target="suit-report"/></c>
      <c>5</c>
      <c>Result Code</c>
      <c><xref target="suit-report"/></c>
      <c>6</c>
      <c>Result Record</c>
      <c><xref target="suit-report"/></c>
      <c>7</c>
      <c>Result Reason</c>
      <c><xref target="suit-report"/></c>
      <c>8</c>
      <c>Capability Report</c>
      <c><xref target="suit-report"/></c>
      <c>99</c>
      <c>Reference</c>
      <c><xref target="suit-report"/></c>
</texttable>

</section>
<section anchor="suit-record-elements"><name>SUIT Record Elements</name>

<t>IANA is requested to create a new registry for SUIT Record Elements.</t>

<texttable>
      <ttcol align='left'>Label</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>0</c>
      <c>Manifest ID</c>
      <c><xref target="suit-record"/></c>
      <c>1</c>
      <c>Manifest Section</c>
      <c><xref target="suit-record"/></c>
      <c>2</c>
      <c>Section Offset</c>
      <c><xref target="suit-record"/></c>
      <c>3</c>
      <c>Component Index</c>
      <c><xref target="suit-record"/></c>
      <c>4</c>
      <c>Dependency Index</c>
      <c><xref target="suit-record"/></c>
      <c>5</c>
      <c>Record Properties</c>
      <c><xref target="suit-record"/></c>
</texttable>

</section>
<section anchor="suit-report-reasons"><name>SUIT Report Reasons</name>

<t>IANA is requested to create a new registry for SUIT Report Reasons.</t>

<texttable>
      <ttcol align='left'>Label</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>0</c>
      <c>Result OK</c>
      <c><xref target="suit-report-result"/></c>
      <c>1</c>
      <c>CBOR Parse Failure</c>
      <c><xref target="suit-report-result"/></c>
      <c>2</c>
      <c>Unsupported COSE Structure or Header</c>
      <c><xref target="suit-report-result"/></c>
      <c>3</c>
      <c>Unsupported COSE Algorithm</c>
      <c><xref target="suit-report-result"/></c>
      <c>4</c>
      <c>Signature / MAC verification failed</c>
      <c><xref target="suit-report-result"/></c>
      <c>5</c>
      <c>Unsupported SUIT Command</c>
      <c><xref target="suit-report-result"/></c>
      <c>6</c>
      <c>Unsupported SUIT Component</c>
      <c><xref target="suit-report-result"/></c>
      <c>7</c>
      <c>Unauthorized SUIT Component</c>
      <c><xref target="suit-report-result"/></c>
      <c>8</c>
      <c>Unsupported SUIT Parameter</c>
      <c><xref target="suit-report-result"/></c>
      <c>9</c>
      <c>Severing Unsupported</c>
      <c><xref target="suit-report-result"/></c>
      <c>10</c>
      <c>Condition Failed</c>
      <c><xref target="suit-report-result"/></c>
      <c>11</c>
      <c>Operation Failed</c>
      <c><xref target="suit-report-result"/></c>
</texttable>

</section>
<section anchor="suit-capability-report-elements"><name> SUIT Capability Report Elements</name>

<t>IANA is requested to create a new registry for SUIT Capability Report Elements.</t>

<texttable>
      <ttcol align='left'>Label</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>1</c>
      <c>Components</c>
      <c><xref target="capabilities"/></c>
      <c>2</c>
      <c>Commands</c>
      <c><xref target="capabilities"/></c>
      <c>3</c>
      <c>Parameters</c>
      <c><xref target="capabilities"/></c>
      <c>4</c>
      <c>Cryptographic Algorithms</c>
      <c><xref target="capabilities"/></c>
      <c>5</c>
      <c>Envelope Elements</c>
      <c><xref target="capabilities"/></c>
      <c>6</c>
      <c>Manifest Elements</c>
      <c><xref target="capabilities"/></c>
      <c>7</c>
      <c>Common Elements</c>
      <c><xref target="capabilities"/></c>
      <c>8</c>
      <c>Text Elements</c>
      <c><xref target="capabilities"/></c>
      <c>9</c>
      <c>Component Text Elements</c>
      <c><xref target="capabilities"/></c>
</texttable>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>There are two aspects to the security considerations for SUIT reports:
authenticity and confidentiality. SUIT reports must have guaranteed
authenticity for them to be useful. Several options are available to
ensure the authenticity of a SUIT report. The report <bcp14>MAY</bcp14> be bundled
as the payload of a cryptographic container as described in <xref target="container"/>.
communicated over a secure transport. It may also be communicated as
part of an existing authenticated protocol, such as within an EAT 
token. Ideally, the SUIT_Report <bcp14>SHOULD</bcp14> be communicated as part of an
attestation flow, such as within an EAT token, since this proves the
authenticity of the environment (hardware, software, or both) in which
the SUIT_Report was generated.</t>

<t>The SUIT_Report <bcp14>MAY</bcp14> require confidentiality as well. A SUIT_Report
could potentially reveal confidential information about the kinds of
device that a particular user has. It could also reveal confidential
information about intellectual property contained in a device. Where
these concerns are relevant, the SUIT_Report <bcp14>MUST</bcp14> be encrypted, for 
example using a COSE_Encrypt as described in <xref target="container"/>, or by using
secure transport. When reporting failures, particularly in the
cryptographic primitives, there is a risk that over-reporting can
provide an attacker with better visibility. Therefore, SUIT_Reports
<bcp14>SHOULD</bcp14> be encrypted wherever possible.</t>

<t>There are also operational considerations that intersect with these
security considerations. In situations where the SUIT report is
encrypted as an element of a message within another protocol, care must
be taken to ensure that this does not leak information and that the
principle of least privilege is respected. For example, in an EAT-based
attestation workflow, the Verifier often will not need the full SUIT
Report. Similarly, the Relying Party may also not need the SUIT_Report.
In this case, the SUIT_Report <bcp14>MUST</bcp14> be encrypted even if the EAT token
that contains it is also encrypted.</t>

<t>In contrast, however, there are scenarios where the EAT Verifier
consumes the SUIT report and translates it into one or more other
EAT claims. For example, a SUIT report that shows a particular digest
was matched using an suit-condition-image can be translated into a
EAT measres (Measurement Results) claim. In this scenario, the Verifier
must have access to the full SUIT_Report.</t>

</section>
<section anchor="acknowledgements"><name>Acknowledgements</name>

<t>The authors would like to thank Dave Thaler for his feedback.</t>

</section>


  </middle>

  <back>


    <references title='Normative References'>




<reference anchor='I-D.ietf-suit-manifest'>
   <front>
      <title>A Concise Binary Object Representation (CBOR)-based Serialization Format for the Software Updates for Internet of Things (SUIT) Manifest</title>
      <author fullname='Brendan Moran' initials='B.' surname='Moran'>
         <organization>Arm Limited</organization>
      </author>
      <author fullname='Hannes Tschofenig' initials='H.' surname='Tschofenig'>
         </author>
      <author fullname='Henk Birkholz' initials='H.' surname='Birkholz'>
         <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname='Koen Zandberg' initials='K.' surname='Zandberg'>
         <organization>Inria</organization>
      </author>
      <author fullname='Øyvind Rønningstad' initials='O.' surname='Rønningstad'>
         <organization>Nordic Semiconductor</organization>
      </author>
      <date day='21' month='October' year='2024'/>
      <abstract>
	 <t>   This specification describes the format of a manifest.  A manifest is
   a bundle of metadata about code/data obtained by a recipient (chiefly
   the firmware for an IoT device), where to find the code/data, the
   devices to which it applies, and cryptographic information protecting
   the manifest.  Software updates and Trusted Invocation both tend to
   use sequences of common operations, so the manifest encodes those
   sequences of operations, rather than declaring the metadata.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-suit-manifest-28'/>
   
</reference>

<reference anchor='RFC9052'>
  <front>
    <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
    <author fullname='J. Schaad' initials='J.' surname='Schaad'/>
    <date month='August' year='2022'/>
    <abstract>
      <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
      <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
    </abstract>
  </front>
  <seriesInfo name='STD' value='96'/>
  <seriesInfo name='RFC' value='9052'/>
  <seriesInfo name='DOI' value='10.17487/RFC9052'/>
</reference>


<reference anchor='I-D.ietf-suit-mti'>
   <front>
      <title>Mandatory-to-Implement Algorithms for Authors and Recipients of Software Update for the Internet of Things manifests</title>
      <author fullname='Brendan Moran' initials='B.' surname='Moran'>
         <organization>Arm Limited</organization>
      </author>
      <author fullname='Øyvind Rønningstad' initials='O.' surname='Rønningstad'>
         <organization>Nordic Semiconductor</organization>
      </author>
      <author fullname='Akira Tsukamoto' initials='A.' surname='Tsukamoto'>
         <organization>ALAXALA Networks Corp.</organization>
      </author>
      <date day='21' month='October' year='2024'/>
      <abstract>
	 <t>   This document specifies algorithm profiles for SUIT manifest parsers
   and authors to ensure better interoperability.  These profiles apply
   specifically to a constrained node software update use case.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-suit-mti-07'/>
   
</reference>

<reference anchor='RFC2119'>
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname='S. Bradner' initials='S.' surname='Bradner'/>
    <date month='March' year='1997'/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name='BCP' value='14'/>
  <seriesInfo name='RFC' value='2119'/>
  <seriesInfo name='DOI' value='10.17487/RFC2119'/>
</reference>

<reference anchor='RFC8174'>
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname='B. Leiba' initials='B.' surname='Leiba'/>
    <date month='May' year='2017'/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name='BCP' value='14'/>
  <seriesInfo name='RFC' value='8174'/>
  <seriesInfo name='DOI' value='10.17487/RFC8174'/>
</reference>




    </references>

    <references title='Informative References'>




<reference anchor='I-D.ietf-rats-eat'>
   <front>
      <title>The Entity Attestation Token (EAT)</title>
      <author fullname='Laurence Lundblade' initials='L.' surname='Lundblade'>
         <organization>Security Theory LLC</organization>
      </author>
      <author fullname='Giridhar Mandyam' initials='G.' surname='Mandyam'>
         <organization>Mediatek USA</organization>
      </author>
      <author fullname='Jeremy O&#x27;Donoghue' initials='J.' surname='O&#x27;Donoghue'>
         <organization>Qualcomm Technologies Inc.</organization>
      </author>
      <author fullname='Carl Wallace' initials='C.' surname='Wallace'>
         <organization>Red Hound Software, Inc.</organization>
      </author>
      <date day='6' month='September' year='2024'/>
      <abstract>
	 <t>   An Entity Attestation Token (EAT) provides an attested claims set
   that describes state and characteristics of an entity, a device like
   a smartphone, IoT device, network equipment or such.  This claims set
   is used by a relying party, server or service to determine the type
   and degree of trust placed in the entity.

   An EAT is either a CBOR Web Token (CWT) or JSON Web Token (JWT) with
   attestation-oriented claims.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-rats-eat-31'/>
   
</reference>


<reference anchor='I-D.birkholz-rats-corim'>
   <front>
      <title>Concise Reference Integrity Manifest</title>
      <author fullname='Henk Birkholz' initials='H.' surname='Birkholz'>
         <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname='Thomas Fossati' initials='T.' surname='Fossati'>
         <organization>arm</organization>
      </author>
      <author fullname='Yogesh Deshpande' initials='Y.' surname='Deshpande'>
         <organization>arm</organization>
      </author>
      <author fullname='Ned Smith' initials='N.' surname='Smith'>
         <organization>Intel</organization>
      </author>
      <author fullname='Wei Pan' initials='W.' surname='Pan'>
         <organization>Huawei Technologies</organization>
      </author>
      <date day='11' month='July' year='2022'/>
      <abstract>
	 <t>   Remote Attestation Procedures (RATS) enable Relying Parties to assess
   the trustworthiness of a remote Attester and therefore to decide
   whether to engage in secure interactions with it.  Evidence about
   trustworthiness can be rather complex and it is deemed unrealistic
   that every Relying Party is capable of the appraisal of Evidence.
   Therefore that burden is typically offloaded to a Verifier.  In order
   to conduct Evidence appraisal, a Verifier requires not only fresh
   Evidence from an Attester, but also trusted Endorsements and
   Reference Values from Endorsers and Reference Value Providers, such
   as manufacturers, distributors, or device owners.  This document
   specifies Concise Reference Integrity Manifests (CoRIM) that
   represent Endorsements and Reference Values in CBOR format.
   Composite devices or systems are represented by a collection of
   Concise Module Identifiers (CoMID) and Concise Software Identifiers
   (CoSWID) bundled in a CoRIM document.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-birkholz-rats-corim-03'/>
   
</reference>


<reference anchor='I-D.ietf-suit-trust-domains'>
   <front>
      <title>SUIT Manifest Extensions for Multiple Trust Domains</title>
      <author fullname='Brendan Moran' initials='B.' surname='Moran'>
         <organization>Arm Limited</organization>
      </author>
      <author fullname='Ken Takayama' initials='K.' surname='Takayama'>
         <organization>SECOM CO., LTD.</organization>
      </author>
      <date day='21' month='October' year='2024'/>
      <abstract>
	 <t>   This specification describes extensions to the SUIT Manifest format
   for use in deployments with multiple trust domains.  A device has
   more than one trust domain when it enables delegation of different
   rights to mutually distrusting entities for use for different
   purposes or Components in the context of firmware or software update.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-suit-trust-domains-08'/>
   
</reference>




    </references>


<section anchor="full-cddl"><name>Full CDDL</name>
<t>In order to create a valid SUIT Report document the structure of the corresponding CBOR message <bcp14>MUST</bcp14> adhere to the following CDDL data definition.</t>

<t>To be valid, the following CDDL <bcp14>MUST</bcp14> have the COSE CDDL appended to it. The COSE CDDL can be obtained by following the directions in <xref section="1.4" sectionFormat="comma" target="RFC9052"/>. It must also have the CDDL from <xref target="I-D.ietf-suit-mti"/> appended to it.</t>

<figure><sourcecode type="CDDL"><![CDATA[
SUIT_Report_Protected /= SUIT_Report_COSE_Sign1 .and SUIT_COSE_Profiles
SUIT_Report_Protected /= SUIT_Report_COSE_Sign1_Tagged .and SUIT_COSE_Profiles
SUIT_Report_Protected /= SUIT_Report_COSE_MAC0 .and SUIT_COSE_Profiles
SUIT_Report_Protected /= SUIT_Report_COSE_MAC0_Tagged .and SUIT_COSE_Profiles

SUIT_Report_COSE_Sign1_Tagged = #6.18(SUIT_Report_COSE_Sign1)
SUIT_Report_COSE_Sign1 = [
    protected : bstr,
    unprotected : {* int => any},
    payload : bstr .cbor SUIT_Report_Unprotected,
    signature : bstr
]
SUIT_Report_COSE_MAC0_Tagged = #6.17(SUIT_Report_COSE_MAC0)
SUIT_Report_COSE_MAC0 = [
    protected : bstr,
    unprotected : {* int => any},
    payload : bstr .cbor SUIT_Report_Unprotected,
    tag : bstr
]
SUIT_Report_Unprotected = SUIT_Report / SUIT_Report_COSE_Encrypt0
SUIT_Report_COSE_Encrypt0 = COSE_Encrypt0

SUIT_Report = {
  suit-reference              => SUIT_Reference,
  ? suit-report-nonce         => bstr,
  suit-report-records         => [ * SUIT_Record / system-property-claims ],
  suit-report-result          => true / {
    suit-report-result-code   => int,
    suit-report-result-record => SUIT_Record,
    suit-report-result-reason => SUIT_Report_Reasons,
  },
  ? suit-report-capability-report => SUIT_Capability_Report,
  $$SUIT_Report_Extensions
}

SUIT_Reference = [
    suit-report-manifest-uri : tstr,
    suit-report-manifest-digest : SUIT_Digest
]

SUIT_Record = [
    suit-record-manifest-id        : [* uint ],
    suit-record-manifest-section   : int,
    suit-record-section-offset     : uint,
    suit-record-component-index    : uint,
    suit-record-properties         : {*$$SUIT_Parameters},
    $$SUIT_Record_Extensions
]

system-property-claims = {
  system-component-id => SUIT_Component_Identifier,
  + $$SUIT_Parameters,
}

SUIT_Capability_Report = {
  suit-component-capabilities        => [+ SUIT_Component_Capability ]
  suit-command-capabilities          => [+ int],
  suit-parameters-capabilities       => [+ int],
  suit-crypt-algo-capabilities       => [+ int],
  ? suit-envelope-capabilities       => [+ int],
  ? suit-manifest-capabilities       => [+ int],
  ? suit-common-capabilities         => [+ int],
  ? suit-text-capabilities           => [+ int],
  ? suit-text-component-capabilities => [+ int],
  ? suit-dependency-capabilities     => [+ int],
  * [+int]                           => [+ int],
  $$SUIT_Capability_Report_Extensions
}

SUIT_Component_Capability = [*bstr,?true]

suit-report-nonce = 2
suit-report-records = 3
suit-report-result = 4
suit-report-result-code = 5
suit-report-result-record = 6
suit-report-result-reason = 7
suit-report-capability-report = 8
suit-reference = 99

suit-system-properties = 13
system-component-id = 0

suit-record-manifest-id = 0
suit-record-manifest-section = 1
suit-record-section-offset = 2
suit-record-component-index = 3
suit-record-dependency-index = 4
suit-record-properties = 5

SUIT_Report_Reasons /= suit-report-reason-ok
SUIT_Report_Reasons /= suit-report-reason-cbor-parse
SUIT_Report_Reasons /= suit-report-reason-cose-unsupported
SUIT_Report_Reasons /= suit-report-reason-alg-unsupported
SUIT_Report_Reasons /= suit-report-reason-unauthorised
SUIT_Report_Reasons /= suit-report-reason-command-unsupported
SUIT_Report_Reasons /= suit-report-reason-component-unsupported
SUIT_Report_Reasons /= suit-report-reason-component-unauthorised
SUIT_Report_Reasons /= suit-report-reason-parameter-unsupported
SUIT_Report_Reasons /= suit-report-severing-unsupported
SUIT_Report_Reasons /= suit-report-reason-condition-failed
SUIT_Report_Reasons /= suit-report-reason-operation-failed

suit-report-reason-ok = 0
suit-report-reason-cbor-parse = 1
suit-report-reason-cose-unsupported = 2
suit-report-reason-alg-unsupported = 3
suit-report-reason-unauthorised = 4
suit-report-reason-command-unsupported = 5
suit-report-reason-component-unsupported = 6
suit-report-reason-component-unauthorised = 7
suit-report-reason-parameter-unsupported = 8
suit-report-severing-unsupported = 9
suit-report-reason-condition-failed = 10
suit-report-reason-operation-failed = 11

suit-component-capabilities        = 1
suit-command-capabilities          = 2
suit-parameters-capabilities       = 3
suit-crypt-algo-capabilities       = 4
suit-envelope-capabilities         = 5
suit-manifest-capabilities         = 6
suit-common-capabilities           = 7
suit-text-capabilities             = 8
suit-text-component-capabilities   = 9
suit-dependency-capabilities       = 10
  
]]></sourcecode></figure>

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA+086XLbyJn/8RS9dipjOyRt2XNZtU4iS/KOau2xV5aTStku
VxNokohAgAOAkjkazbPkWfJk+119ASBlT7LZrdqZymREoI+vv/tCj8fjpM3b
wuyr1yZd10admlVVt3k5V9VMvVllujXqdavbdZPo6bQ2F58yMqvSUi9h0azW
s3acm3Y2btZ5O65pznjvQZLC8HlVb/ZVXs6qJMlX9b5q63XTPnzw4PGDh4mu
jZa98naTXFb1+byu1it49ubkLDk3G3iU7auTsjV1adrxEe6VJE2ry+yDLqoS
9t+YJlnl+4lS9Sw1WdNuCnmqVFulwZ95mZmytQ8agLI2s8b93iyjn22dp25w
Wi2XMNe9zcsiL/025mM7LvKmHcMi06qAYePq3u/gDWBpqVcrwCCP1et2UdUA
7Bhe0j95CaOfTtSLqtalfciYfVqbMtNl/Kqq57rMf9RtXpX76qBequf5Mm9N
ZgeYpc6LfTXlyZMlTp4gef44xzcTOApsr6L9v5uop3l9vqiKH2MQvjPlee9V
DMKzWq/LRTUztXoNRIuhWMD8yVTm/7HJ28nMDZ9kBngCOKNewlIXBkl4Mj4i
WMe1bpux0UCA44MzeWHX4ZdpVefLfXVYnZ68CGcSExKXjbMKoIDzJUk5uAkN
XcJZZqZp8c3ps8PHD756uA/0bkx/ZAtsliTj8VjpKfCHToEXzxYgEtWsvQRm
tiICR1ItPLd8i9JztgAmaNQd5Oy7ym6qVnV1kWfIGepSb2gmvNuoLJ8BioDl
1JrXBI5X06pqSUpmRXXZAEurqVEwOa3zqYHXG6WJU6tSMVYn6rvq0lyYegTw
5A2wo2lUCYvItjB+Zkw21em5Wpp0AVA1SwIig1lFtTJ1AxxCh4EHAE270C3A
IlAlMBKBUjOgdjNBbMAuzcqk+SxPiUEcfA1sVuTzRXtp8P+HNsbFE13Q4bQH
ASFYVU1jmgYXBGRqj0BAQm3SqgR6rFOEzyQZbI8jGxiVMeaAVPQAVkPMWGSF
ZEhh+aqeMH2XeZYVwJ63kYZ1la1pfpIckGYamKdSQApiAQECnmvhGMpix+HL
0TcBzdcAQBMQH/PDGjBbbEaM5rrG1SpAm5qb0gCvM7TNOl2Akmpas2zsTo6O
Abku83ahTFmt5wvlpAvQBnDNQAOqGiFK9bpBipQZLgHHM7BlDYhEGbHYGgFm
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

-->

</rfc>

