<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" consensus="true" docName="draft-ietf-ace-aif-07" indexInclude="true" ipr="trust200902" number="9237" prepTime="2022-08-31T13:48:30" scripts="Common,Latin" sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="4" tocInclude="true" xml:lang="en">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-ace-aif-07" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9237" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="ACE AIF">An Authorization Information Format (AIF) for Authentication and Authorization for Constrained Environments (ACE)</title>
    <seriesInfo name="RFC" value="9237" stream="IETF"/>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann">
      <organization showOnFrontPage="true">Universität Bremen TZI</organization>
      <address>
        <postal>
          <street>Postfach 330440</street>
          <city>Bremen</city>
          <code>D-28359</code>
          <country>Germany</country>
        </postal>
        <phone>+49-421-218-63921</phone>
        <email>cabo@tzi.org</email>
      </address>
    </author>
    <date month="08" year="2022"/>
    <area>sec</area>
    <workgroup>ACE</workgroup>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">Information about which entities are authorized to perform what
operations on which constituents of other entities is a crucial
component of producing an overall system that is secure.  Conveying
precise authorization information is especially critical in highly
automated systems with large numbers of entities, such as the
Internet of Things.</t>
      <t indent="0" pn="section-abstract-2">This specification provides a generic information model and format for
representing such authorization information, as well as two variants
of a specific instantiation of that format for use with Representational State Transfer (REST) resources
identified by URI path.</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This is an Internet Standards Track document.
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by
            the Internet Engineering Steering Group (IESG).  Further
            information on Internet Standards is available in Section 2 of 
            RFC 7841.
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc9237" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2022 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document. Code Components extracted from this
            document must include Revised BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Revised BSD License.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.1.2">
              <li pn="section-toc.1-1.1.2.1">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.1.1"><xref derivedContent="1.1" format="counter" sectionFormat="of" target="section-1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-terminology">Terminology</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-information-model">Information Model</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.2.2">
              <li pn="section-toc.1-1.2.2.1">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.2.2.1.1"><xref derivedContent="2.1" format="counter" sectionFormat="of" target="section-2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-rest-specific-model">REST-Specific Model</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.2">
                <t indent="0" pn="section-toc.1-1.2.2.2.1"><xref derivedContent="2.2" format="counter" sectionFormat="of" target="section-2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-limitations">Limitations</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.3">
                <t indent="0" pn="section-toc.1-1.2.2.3.1"><xref derivedContent="2.3" format="counter" sectionFormat="of" target="section-2.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-rest-specific-model-with-dy">REST-Specific Model with Dynamic Resource Creation</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-data-model">Data Model</xref></t>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-media-types">Media Types</xref></t>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2">
              <li pn="section-toc.1-1.5.2.1">
                <t indent="0" pn="section-toc.1-1.5.2.1.1"><xref derivedContent="5.1" format="counter" sectionFormat="of" target="section-5.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-media-types-2">Media Types</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2.1.2">
                  <li pn="section-toc.1-1.5.2.1.2.1">
                    <t indent="0" pn="section-toc.1-1.5.2.1.2.1.1"><xref derivedContent="5.1.1" format="counter" sectionFormat="of" target="section-5.1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-application-aifcbor">application/aif+cbor</xref></t>
                  </li>
                  <li pn="section-toc.1-1.5.2.1.2.2">
                    <t indent="0" pn="section-toc.1-1.5.2.1.2.2.1"><xref derivedContent="5.1.2" format="counter" sectionFormat="of" target="section-5.1.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-application-aifjson">application/aif+json</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.5.2.2">
                <t indent="0" pn="section-toc.1-1.5.2.2.1"><xref derivedContent="5.2" format="counter" sectionFormat="of" target="section-5.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-registries">Registries</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.3">
                <t indent="0" pn="section-toc.1-1.5.2.3.1"><xref derivedContent="5.3" format="counter" sectionFormat="of" target="section-5.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-content-format">Content-Format</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.7.2">
              <li pn="section-toc.1-1.7.2.1">
                <t indent="0" pn="section-toc.1-1.7.2.1.1"><xref derivedContent="7.1" format="counter" sectionFormat="of" target="section-7.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.2">
                <t indent="0" pn="section-toc.1-1.7.2.2.1"><xref derivedContent="7.2" format="counter" sectionFormat="of" target="section-7.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.a"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgements</xref></t>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-address">Author's Address</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" removeInRFC="false" toc="include" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">Constrained devices, as they are used in the Internet of Things, need
security in order to operate correctly and prevent misuse.
One important element of this security is that devices in the Internet
of Things need to be able to decide which operations requested of them
should be considered authorized, ascertain that the
authorization to request the operation does apply to the actual
requester as authenticated,
and ascertain that other devices they make
requests of are the ones they intended.</t>
      <t indent="0" pn="section-1-2">To transfer detailed authorization information from an authorization manager
(such as an ACE-OAuth authorization server <xref target="RFC9200" format="default" sectionFormat="of" derivedContent="RFC9200"/>) to a device, a
compact representation format is needed.
This document defines such a format -- the
Authorization Information Format (AIF).
AIF is defined both as a general structure that can be used for many
different applications and
as a specific instantiation tailored to REST resources and the permissions
on them, including some provision for dynamically created resources.</t>
      <section anchor="terminology" numbered="true" removeInRFC="false" toc="include" pn="section-1.1">
        <name slugifiedName="name-terminology">Terminology</name>
        <t indent="0" pn="section-1.1-1">This memo uses terms from the Constrained Application Protocol (CoAP) <xref target="RFC7252" format="default" sectionFormat="of" derivedContent="RFC7252"/> and the Internet Security Glossary <xref target="RFC4949" format="default" sectionFormat="of" derivedContent="RFC4949"/>; CoAP is used for
the explanatory examples as it is a good fit for constrained devices.</t>
        <t indent="0" pn="section-1.1-2">The shape of data is specified in Concise Data Definition Language (CDDL) <xref target="RFC8610" format="default" sectionFormat="of" derivedContent="RFC8610"/> <xref target="RFC9165" format="default" sectionFormat="of" derivedContent="RFC9165"/>.
Terminology for constrained devices is defined in <xref target="RFC7228" format="default" sectionFormat="of" derivedContent="RFC7228"/>.</t>
        <t indent="0" pn="section-1.1-3">The term "byte", abbreviated by "B", is used in its now customary
sense as a synonym for "octet".</t>
        <t indent="0" pn="section-1.1-4">
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" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> when, and only when, they appear in all capitals, as shown
here.
        </t>
      </section>
    </section>
    <section anchor="information-model" numbered="true" removeInRFC="false" toc="include" pn="section-2">
      <name slugifiedName="name-information-model">Information Model</name>
      <t indent="0" pn="section-2-1">Authorizations are generally expressed through some data structures
that are cryptographically secured (or transmitted in a secure way).
This section discusses the information model underlying the payload of
that data (as opposed to the cryptographic armor around it).</t>
      <t indent="0" pn="section-2-2">The semantics of the authorization information defined in this
document are that of an <em>allow-list</em>:
everything is denied until it is explicitly allowed.</t>
      <t indent="0" pn="section-2-3">For the purposes of this specification, the underlying access control model
will be that of an access matrix, which gives a set of permissions for
each possible combination of a subject and an object.
We are focusing the AIF data item on a single row in the access matrix
(such a row has often been called a "capability list") without
concern to the subject for which the data item is issued.
As a consequence, AIF <bcp14>MUST</bcp14> be used in a way that the subject of the
authorizations is unambiguously identified (e.g., as part of the armor
around it).</t>
      <t indent="0" pn="section-2-4">The generic model of such a capability list is a list of pairs of
object identifiers (of type <tt>Toid</tt>) and the permissions (of type <tt>Tperm</tt>) that the subject has on the
object(s) identified.</t>
      <figure anchor="genaif" align="left" suppress-title="false" pn="figure-1">
        <name slugifiedName="name-definition-of-generic-aif">Definition of Generic AIF</name>
        <sourcecode type="cddl" markers="false" pn="section-2-5.1">
AIF-Generic&lt;Toid, Tperm&gt; = [* [Toid, Tperm]]
</sourcecode>
      </figure>
      <t indent="0" pn="section-2-6">In a specific data model (such as the one specified in
this document), the object identifier (<tt>Toid</tt>) will often be
a text string, and the set of permissions (<tt>Tperm</tt>) will be represented
by a bit set, which in turn is represented as a number (see <xref target="data-model" format="default" sectionFormat="of" derivedContent="Section 3"/>).</t>
      <figure anchor="specaif" align="left" suppress-title="false" pn="figure-2">
        <name slugifiedName="name-commonly-used-shape-of-a-sp">Commonly Used Shape of a Specific AIF</name>
        <sourcecode type="cddl" markers="false" pn="section-2-7.1">
AIF-Specific = AIF-Generic&lt;tstr, uint&gt;
</sourcecode>
      </figure>
      <section anchor="rest-model" numbered="true" removeInRFC="false" toc="include" pn="section-2.1">
        <name slugifiedName="name-rest-specific-model">REST-Specific Model</name>
        <t indent="0" pn="section-2.1-1">In the specific instantiation of the REST resources and the
      permissions on them, we use the URI of a resource on a CoAP server for
      the object identifier (<tt>Toid</tt>).  More specifically, since the
      parts of the URI that identify the server ("authority" in <xref target="RFC3986" format="default" sectionFormat="of" derivedContent="RFC3986"/>) are authenticated during REST resource access (<xref section="4.2.2" sectionFormat="of" target="RFC9110" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9110#section-4.2.2" derivedContent="RFC9110"/> and <xref section="6.2" sectionFormat="of" target="RFC7252" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7252#section-6.2" derivedContent="RFC7252"/>), they naturally
      fall into the realm handled by the cryptographic armor; we therefore
      focus on the "path" ("path-abempty") and "query" parts of the URI
      (<em>URI-local-part</em> in this specification, as expressed by the
      Uri-Path and Uri-Query options in CoAP).
As a consequence, AIF <bcp14>MUST</bcp14> be used in a way that it is clear
who is the target (enforcement point) of these authorizations
(note that there may be more than one target that the same
authorization applies to, e.g., in a situation with homogeneous
devices).</t>
        <t indent="0" pn="section-2.1-2">For the permissions (<tt>Tperm</tt>), we use a simple permissions model that
lists the subset of the REST (CoAP or HTTP) methods permitted.
This model is summarized in <xref target="im-example" format="default" sectionFormat="of" derivedContent="Table 1"/>.</t>
        <table anchor="im-example" align="center" pn="table-1">
          <name slugifiedName="name-an-authorization-instance-i">An Authorization Instance in the REST-Specific AIF Information Model</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">URI-local-part</th>
              <th align="left" colspan="1" rowspan="1">Permission Set</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">/s/temp</td>
              <td align="left" colspan="1" rowspan="1">GET</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">/a/led</td>
              <td align="left" colspan="1" rowspan="1">PUT, GET</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">/dtls</td>
              <td align="left" colspan="1" rowspan="1">POST</td>
            </tr>
          </tbody>
        </table>
        <t indent="0" pn="section-2.1-4">In this example, a device offers a temperature sensor <tt>/s/temp</tt> for
read-only access, a LED actuator <tt>/a/led</tt> for read/write, and a
<tt>/dtls</tt> resource for POST access.</t>
        <t indent="0" pn="section-2.1-5">As shown in the data model (<xref target="data-model" format="default" sectionFormat="of" derivedContent="Section 3"/>), the representations
of REST methods provided are limited to those that have a CoAP method
number assigned; an extension to the model may be necessary to represent
permissions for exotic HTTP methods.</t>
      </section>
      <section anchor="limitations" numbered="true" removeInRFC="false" toc="include" pn="section-2.2">
        <name slugifiedName="name-limitations">Limitations</name>
        <t indent="0" pn="section-2.2-1">This simple information model only allows granting permissions for
statically identifiable objects, e.g., URIs for the REST-specific
instantiation.  One might be tempted to extend the model towards URI
templates <xref target="RFC6570" format="default" sectionFormat="of" derivedContent="RFC6570"/> (for instance, to open up an
authorization for many parameter values as in
 <tt>/s/temp{?any*}</tt>).
However, that requires some considerations of
the ease and unambiguity of matching a given URI against a set of
templates in an AIF data item.</t>
        <t indent="0" pn="section-2.2-2">This simple information model also does not allow expressing
conditionalized access based on state outside the identification of
objects (e.g., "opening a door is allowed if it is not locked").</t>
        <t indent="0" pn="section-2.2-3">Finally, the model does not provide any special access for a set of
resources that are specific to a subject, e.g., that the subject
created itself by previous operations (PUT, POST, or PATCH/iPATCH <xref target="RFC8132" format="default" sectionFormat="of" derivedContent="RFC8132"/>) or that were
specifically created for the subject by others.</t>
      </section>
      <section anchor="ext-rest-model" numbered="true" removeInRFC="false" toc="include" pn="section-2.3">
        <name slugifiedName="name-rest-specific-model-with-dy">REST-Specific Model with Dynamic Resource Creation</name>
        <t indent="0" pn="section-2.3-1">The <em>REST-specific model with dynamic resource creation</em> addresses
        the need to provide defined access to dynamic resources that were
        created by the subject itself, specifically, a resource that is made
        known to the subject by providing Location-* options in a CoAP
        response or using the Location header field in HTTP <xref target="RFC9110" format="default" sectionFormat="of" derivedContent="RFC9110"/> (the Location-indicating mechanisms).  (The concept
        is somewhat comparable to "Access Control List (ACL) inheritance" in
        the Network File System version 4 (NFSv4) protocol <xref target="RFC8881" format="default" sectionFormat="of" derivedContent="RFC8881"/>, except that it does not use a containment
        relationship but rather the fact that the dynamic resource was created
        from a resource to which the subject had access.)  In other words, it
        addresses an important subset of the third limitation mentioned in
        <xref target="limitations" format="default" sectionFormat="of" derivedContent="Section 2.2"/>.</t>
        <table anchor="im-example-dynamic" align="center" pn="table-2">
          <name slugifiedName="name-an-authorization-instance-in">An Authorization Instance in the REST-Specific AIF Information Model with Dynamic Resource Creation</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">URI-local-part</th>
              <th align="left" colspan="1" rowspan="1">Permission Set</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">/a/make-coffee</td>
              <td align="left" colspan="1" rowspan="1">POST, Dynamic-GET, Dynamic-DELETE</td>
            </tr>
          </tbody>
        </table>
        <t indent="0" pn="section-2.3-3">For a method X, the presence of a Dynamic-X permission means that the subject
holds permission to exercise the method X on resources that have been
returned in a 2.01 (201 Created) response by a Location-indicating mechanism to a request that the
subject made to the resource listed.
In the example shown in <xref target="im-example-dynamic" format="default" sectionFormat="of" derivedContent="Table 2"/>, POST operations on
<tt>/a/make-coffee</tt> might return the location of a resource dynamically
created on the coffee machine that allows GET to find
out about the status of, and DELETE to cancel, the coffee-making
operation.</t>
        <t indent="0" pn="section-2.3-4">Since the use of the extension defined in this section can be detected
by the mentioning of the Dynamic-X permissions, there is no need for
another explicit switch between the basic and the model extended by
dynamic resource creation; the
extended model is always presumed once a Dynamic-X permission is present.</t>
      </section>
    </section>
    <section anchor="data-model" numbered="true" removeInRFC="false" toc="include" pn="section-3">
      <name slugifiedName="name-data-model">Data Model</name>
      <t indent="0" pn="section-3-1">Different data model specializations can be defined for the generic
information model given above.</t>
      <t indent="0" pn="section-3-2">In this section, we will give the data model for simple REST
authorization as per Sections <xref target="rest-model" format="counter" sectionFormat="of" derivedContent="2.1"/> and <xref target="ext-rest-model" format="counter" sectionFormat="of" derivedContent="2.3"/>.
As discussed, in this case the object identifier is specialized as a text string
giving a relative URI (URI-local-part as the absolute path on the server
serving as the enforcement point).
The permission set is specialized to a single number <em>REST-method-set</em> by the following steps:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-3-3">
        <li pn="section-3-3.1">The entries in the table that specify the same URI-local-part are merged
into a single entry that specifies the union of the permission sets.</li>
        <li pn="section-3-3.2">The (non-dynamic) methods in the permission sets are converted into
their CoAP method numbers, minus 1.</li>
        <li pn="section-3-3.3">Dynamic-X permissions are converted into what the number would
have been for X, plus a Dynamic-Offset that has been chosen as 32 (e.g., 35 is
the number for Dynamic-DELETE as the number for DELETE is 3).
</li>
        <li pn="section-3-3.4">The set of numbers is converted into a single number REST-method-set by taking two to the
power of each (decremented) method number and computing the inclusive OR of the
binary representations of all the power values.</li>
      </ul>
      <t indent="0" pn="section-3-4">This data model could be interchanged in the JSON
<xref target="RFC8259" format="default" sectionFormat="of" derivedContent="RFC8259"/> representation given in <xref target="dm-json" format="default" sectionFormat="of" derivedContent="Figure 3"/>.</t>
      <figure anchor="dm-json" align="left" suppress-title="false" pn="figure-3">
        <name slugifiedName="name-an-authorization-instance-e">An Authorization Instance Encoded in JSON (40 Bytes)</name>
        <sourcecode type="json" markers="false" pn="section-3-5.1">
[["/s/temp",1],["/a/led",5],["/dtls",2]]
</sourcecode>
      </figure>
      <t indent="0" pn="section-3-6">In <xref target="aif-cddl" format="default" sectionFormat="of" derivedContent="Figure 4"/>, a straightforward specification of the data model
(including both the methods from <xref target="RFC7252" format="default" sectionFormat="of" derivedContent="RFC7252"/> and the new ones from
<xref target="RFC8132" format="default" sectionFormat="of" derivedContent="RFC8132"/>, identified by the method code minus 1) is shown in CDDL
<xref target="RFC8610" format="default" sectionFormat="of" derivedContent="RFC8610"/> <xref target="RFC9165" format="default" sectionFormat="of" derivedContent="RFC9165"/>:</t>
      <figure anchor="aif-cddl" align="left" suppress-title="false" pn="figure-4">
        <name slugifiedName="name-aif-in-cddl">AIF in CDDL</name>
        <sourcecode type="cddl" markers="false" pn="section-3-7.1">
AIF-REST = AIF-Generic&lt;local-path, REST-method-set&gt;
local-path = tstr   ; URI relative to enforcement point
REST-method-set = uint .bits methods
methods = &amp;(
  GET: 0
  POST: 1
  PUT: 2
  DELETE: 3
  FETCH: 4
  PATCH: 5
  iPATCH: 6
  Dynamic-GET: 32; 0 .plus Dynamic-Offset
  Dynamic-POST: 33; 1 .plus Dynamic-Offset
  Dynamic-PUT: 34; 2 .plus Dynamic-Offset
  Dynamic-DELETE: 35; 3 .plus Dynamic-Offset
  Dynamic-FETCH: 36; 4 .plus Dynamic-Offset
  Dynamic-PATCH: 37; 5 .plus Dynamic-Offset
  Dynamic-iPATCH: 38; 6 .plus Dynamic-Offset
)
Dynamic-Offset = 32
</sourcecode>
      </figure>
      <t indent="0" pn="section-3-8">For the information shown in <xref target="im-example" format="default" sectionFormat="of" derivedContent="Table 1"/> and <xref target="dm-json" format="default" sectionFormat="of" derivedContent="Figure 3"/>, a
representation in Concise Binary Object Representation (CBOR) <xref target="RFC8949" format="default" sectionFormat="of" derivedContent="RFC8949"/> is given in <xref target="dm-cbor" format="default" sectionFormat="of" derivedContent="Figure 5"/>; again,
several optimizations and improvements are possible.</t>
      <figure anchor="dm-cbor" align="left" suppress-title="false" pn="figure-5">
        <name slugifiedName="name-an-authorization-instance-en">An Authorization Instance Encoded in CBOR (28 Bytes)</name>
        <artwork align="left" pn="section-3-9.1">
83                        # array(3)
   82                     # array(2)
      67                  # text(7)
         2f732f74656d70   # "/s/temp"
      01                  # unsigned(1)
   82                     # array(2)
      66                  # text(6)
         2f612f6c6564     # "/a/led"
      05                  # unsigned(5)
   82                     # array(2)
      65                  # text(5)
         2f64746c73       # "/dtls"
      02                  # unsigned(2)
</artwork>
      </figure>
      <t indent="0" pn="section-3-10">Note that having chosen 32 as Dynamic-Offset means that all future CoAP
methods that are registered can be represented both as themselves
and in the Dynamic-X variant, but that only the dynamic forms of methods 1
to 21 are typically usable in a JSON form <xref target="RFC7493" format="default" sectionFormat="of" derivedContent="RFC7493"/>.</t>
    </section>
    <section anchor="media-types" numbered="true" removeInRFC="false" toc="include" pn="section-4">
      <name slugifiedName="name-media-types">Media Types</name>
      <t indent="0" pn="section-4-1">This specification defines media types for the generic information
model, expressed in JSON (application/aif+json) or in CBOR (application/aif+cbor).  These media types have
parameters for specifying <tt>Toid</tt> and <tt>Tperm</tt>; default values are the
values "URI-local-part" for <tt>Toid</tt> and "REST-method-set" for <tt>Tperm</tt>, as
per <xref target="data-model" format="default" sectionFormat="of" derivedContent="Section 3"/> of the present specification.</t>
      <t indent="0" pn="section-4-2">A specification that wants to use generic AIF with different <tt>Toid</tt>
and/or <tt>Tperm</tt> is expected to request these as media type parameters
(<xref target="registries" format="default" sectionFormat="of" derivedContent="Section 5.2"/>) and register a corresponding Content-Format (<xref target="content-format" format="default" sectionFormat="of" derivedContent="Section 5.3"/>).</t>
    </section>
    <section anchor="iana-considerations" numbered="true" removeInRFC="false" toc="include" pn="section-5">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <section anchor="media-types-1" numbered="true" removeInRFC="false" toc="include" pn="section-5.1">
        <name slugifiedName="name-media-types-2">Media Types</name>
        <t indent="0" pn="section-5.1-1">IANA has added the following media types to the "Media Types" registry. The registration entries are in the following subsections.</t>
        <table align="left" pn="table-3">
          <name slugifiedName="name-new-media-types">New Media Types</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Name</th>
              <th align="left" colspan="1" rowspan="1">Template</th>
              <th align="left" colspan="1" rowspan="1">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">aif+cbor</td>
              <td align="left" colspan="1" rowspan="1">application/aif+cbor</td>
              <td align="left" colspan="1" rowspan="1">RFC 9237, <xref target="media-types" format="default" sectionFormat="of" derivedContent="Section 4"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">aif+json</td>
              <td align="left" colspan="1" rowspan="1">application/aif+json</td>
              <td align="left" colspan="1" rowspan="1">RFC 9237, <xref target="media-types" format="default" sectionFormat="of" derivedContent="Section 4"/></td>
            </tr>
          </tbody>
        </table>
        <section anchor="media-type-template1" numbered="true" removeInRFC="false" toc="include" pn="section-5.1.1">
          <name slugifiedName="name-application-aifcbor">application/aif+cbor</name>
          <dl spacing="normal" indent="3" newline="false" pn="section-5.1.1-1">
            <dt pn="section-5.1.1-1.1">Type name:</dt>
            <dd pn="section-5.1.1-1.2">
              <t indent="0" pn="section-5.1.1-1.2.1">application</t>
            </dd>
            <dt pn="section-5.1.1-1.3">Subtype name:</dt>
            <dd pn="section-5.1.1-1.4">
              <t indent="0" pn="section-5.1.1-1.4.1">aif+cbor</t>
            </dd>
            <dt pn="section-5.1.1-1.5">Required parameters:</dt>
            <dd pn="section-5.1.1-1.6">
              <t indent="0" pn="section-5.1.1-1.6.1">N/A</t>
            </dd>
            <dt pn="section-5.1.1-1.7">Optional parameters:</dt>
            <dd pn="section-5.1.1-1.8">
              <t indent="0" pn="section-5.1.1-1.8.1"><br/></t>
              <dl newline="true" spacing="normal" indent="3" pn="section-5.1.1-1.8.2">
                <dt pn="section-5.1.1-1.8.2.1">
                <tt>Toid</tt>:</dt>
                <dd pn="section-5.1.1-1.8.2.2">the identifier for the object for which permissions are
supplied.
A value from the "Sub-Parameter Registry for application/aif+cbor and application/aif+json" subregistry for <tt>Toid</tt>.
Default value: "URI-local-part" (RFC 9237).</dd>
                <dt pn="section-5.1.1-1.8.2.3">
                <tt>Tperm</tt>:</dt>
                <dd pn="section-5.1.1-1.8.2.4">the data type of a permission set for the object
identified via a <tt>Toid</tt>.
A value from the "Sub-Parameter Registry for application/aif+cbor and application/aif+json" subregistry for <tt>Tperm</tt>.
Default value: "REST-method-set" (RFC 9237).</dd>
              </dl>
            </dd>
            <dt pn="section-5.1.1-1.9">Encoding considerations:</dt>
            <dd pn="section-5.1.1-1.10">
              <t indent="0" pn="section-5.1.1-1.10.1">binary (CBOR)</t>
            </dd>
            <dt pn="section-5.1.1-1.11">Security considerations:</dt>
            <dd pn="section-5.1.1-1.12">
              <t indent="0" pn="section-5.1.1-1.12.1"><xref target="seccons" format="default" sectionFormat="of" derivedContent="Section 6"/> of RFC 9237</t>
            </dd>
            <dt pn="section-5.1.1-1.13">Interoperability considerations:</dt>
            <dd pn="section-5.1.1-1.14">
              <t indent="0" pn="section-5.1.1-1.14.1">N/A</t>
            </dd>
            <dt pn="section-5.1.1-1.15">Published specification:</dt>
            <dd pn="section-5.1.1-1.16">
              <t indent="0" pn="section-5.1.1-1.16.1"><xref target="media-types" format="default" sectionFormat="of" derivedContent="Section 4"/> of RFC 9237</t>
            </dd>
            <dt pn="section-5.1.1-1.17">Applications that use this media type:</dt>
            <dd pn="section-5.1.1-1.18">
              <t indent="0" pn="section-5.1.1-1.18.1">Applications that need to convey structured authorization data for
identified resources, conveying sets of permissions.</t>
            </dd>
            <dt pn="section-5.1.1-1.19">Fragment identifier considerations:</dt>
            <dd pn="section-5.1.1-1.20">
              <t indent="0" pn="section-5.1.1-1.20.1">The syntax and semantics of fragment identifiers is as specified for
"application/cbor".  (At publication of RFC 9237, there is no
fragment identification syntax defined for "application/cbor".)</t>
            </dd>
            <dt pn="section-5.1.1-1.21">Person &amp; email address to contact for further information:</dt>
            <dd pn="section-5.1.1-1.22">
              <t indent="0" pn="section-5.1.1-1.22.1">ACE WG mailing list (ace@ietf.org)
or IETF Applications and Real-Time Area (art@ietf.org)</t>
            </dd>
            <dt pn="section-5.1.1-1.23">Intended usage:</dt>
            <dd pn="section-5.1.1-1.24">
              <t indent="0" pn="section-5.1.1-1.24.1">COMMON</t>
            </dd>
            <dt pn="section-5.1.1-1.25">Restrictions on usage:</dt>
            <dd pn="section-5.1.1-1.26">
              <t indent="0" pn="section-5.1.1-1.26.1">N/A</t>
            </dd>
            <dt pn="section-5.1.1-1.27">Author/Change controller:</dt>
            <dd pn="section-5.1.1-1.28">
              <t indent="0" pn="section-5.1.1-1.28.1">IETF</t>
            </dd>
            <dt pn="section-5.1.1-1.29">Provisional registration:</dt>
            <dd pn="section-5.1.1-1.30">
              <t indent="0" pn="section-5.1.1-1.30.1">no</t>
            </dd>
          </dl>
        </section>
        <section anchor="media-type-template2" numbered="true" removeInRFC="false" toc="include" pn="section-5.1.2">
          <name slugifiedName="name-application-aifjson">application/aif+json</name>
          <dl spacing="normal" indent="3" newline="false" pn="section-5.1.2-1">
            <dt pn="section-5.1.2-1.1">Type name:</dt>
            <dd pn="section-5.1.2-1.2">
              <t indent="0" pn="section-5.1.2-1.2.1">application</t>
            </dd>
            <dt pn="section-5.1.2-1.3">Subtype name:</dt>
            <dd pn="section-5.1.2-1.4">
              <t indent="0" pn="section-5.1.2-1.4.1">aif+json</t>
            </dd>
            <dt pn="section-5.1.2-1.5">Required parameters:</dt>
            <dd pn="section-5.1.2-1.6">
              <t indent="0" pn="section-5.1.2-1.6.1">N/A</t>
            </dd>
            <dt pn="section-5.1.2-1.7">Optional parameters:</dt>
            <dd pn="section-5.1.2-1.8">
              <t indent="0" pn="section-5.1.2-1.8.1"><br/></t>
              <dl newline="true" spacing="normal" indent="3" pn="section-5.1.2-1.8.2">
                <dt pn="section-5.1.2-1.8.2.1">
                <tt>Toid</tt>:</dt>
                <dd pn="section-5.1.2-1.8.2.2">the identifier for the object for which permissions are
supplied.
A value from the media-type parameter subregistry for <tt>Toid</tt>.
Default value: "URI-local-part" (RFC 9237).</dd>
                <dt pn="section-5.1.2-1.8.2.3">
                <tt>Tperm</tt>:</dt>
                <dd pn="section-5.1.2-1.8.2.4">the data type of a permission set for the object
identified via a <tt>Toid</tt>.
A value from the media-type parameter subregistry for <tt>Tperm</tt>.
Default value: "REST-method-set" (RFC 9237).</dd>
              </dl>
            </dd>
            <dt pn="section-5.1.2-1.9">Encoding considerations:</dt>
            <dd pn="section-5.1.2-1.10">
              <t indent="0" pn="section-5.1.2-1.10.1">binary (JSON is UTF-8-encoded text)</t>
            </dd>
            <dt pn="section-5.1.2-1.11">Security considerations:</dt>
            <dd pn="section-5.1.2-1.12">
              <t indent="0" pn="section-5.1.2-1.12.1"><xref target="seccons" format="default" sectionFormat="of" derivedContent="Section 6"/> of RFC 9237</t>
            </dd>
            <dt pn="section-5.1.2-1.13">Interoperability considerations:</dt>
            <dd pn="section-5.1.2-1.14">
              <t indent="0" pn="section-5.1.2-1.14.1">N/A</t>
            </dd>
            <dt pn="section-5.1.2-1.15">Published specification:</dt>
            <dd pn="section-5.1.2-1.16">
              <t indent="0" pn="section-5.1.2-1.16.1"><xref target="media-types" format="default" sectionFormat="of" derivedContent="Section 4"/> of RFC 9237</t>
            </dd>
            <dt pn="section-5.1.2-1.17">Applications that use this media type:</dt>
            <dd pn="section-5.1.2-1.18">
              <t indent="0" pn="section-5.1.2-1.18.1">Applications that need to convey structured authorization data for
identified resources, conveying sets of permissions.</t>
            </dd>
            <dt pn="section-5.1.2-1.19">Fragment identifier considerations:</dt>
            <dd pn="section-5.1.2-1.20">
              <t indent="0" pn="section-5.1.2-1.20.1">The syntax and semantics of fragment identifiers is as specified for
"application/json".  (At publication of RFC 9237, there is no
fragment identification syntax defined for "application/json".)</t>
            </dd>
            <dt pn="section-5.1.2-1.21">Person &amp; email address to contact for further information:</dt>
            <dd pn="section-5.1.2-1.22">
              <t indent="0" pn="section-5.1.2-1.22.1">ACE WG mailing list (ace@ietf.org)
or IETF Applications and Real-Time Area (art@ietf.org)</t>
            </dd>
            <dt pn="section-5.1.2-1.23">Intended usage:</dt>
            <dd pn="section-5.1.2-1.24">
              <t indent="0" pn="section-5.1.2-1.24.1">COMMON</t>
            </dd>
            <dt pn="section-5.1.2-1.25">Restrictions on usage:</dt>
            <dd pn="section-5.1.2-1.26">
              <t indent="0" pn="section-5.1.2-1.26.1">N/A</t>
            </dd>
            <dt pn="section-5.1.2-1.27">Author/Change controller:</dt>
            <dd pn="section-5.1.2-1.28">
              <t indent="0" pn="section-5.1.2-1.28.1">IETF</t>
            </dd>
            <dt pn="section-5.1.2-1.29">Provisional registration:</dt>
            <dd pn="section-5.1.2-1.30">
              <t indent="0" pn="section-5.1.2-1.30.1">no</t>
            </dd>
          </dl>
        </section>
      </section>
      <section anchor="registries" numbered="true" removeInRFC="false" toc="include" pn="section-5.2">
        <name slugifiedName="name-registries">Registries</name>
        <t indent="0" pn="section-5.2-1">For the media types application/aif+cbor and application/aif+json,
IANA has created a subregistry within
<xref target="IANA.media-type-sub-parameters" format="default" sectionFormat="of" derivedContent="IANA.media-type-sub-parameters"/> for the media-type parameters
<tt>Toid</tt> and <tt>Tperm</tt>, populated with the following:</t>
        <table align="left" pn="table-4">
          <name slugifiedName="name-new-media-type-parameters">New Media Type Parameters</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Parameter</th>
              <th align="left" colspan="1" rowspan="1">name</th>
              <th align="left" colspan="1" rowspan="1">Description/Specification</th>
              <th align="left" colspan="1" rowspan="1">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">Toid</td>
              <td align="left" colspan="1" rowspan="1">URI-local-part</td>
              <td align="left" colspan="1" rowspan="1">local-part of URI</td>
              <td align="left" colspan="1" rowspan="1">RFC 9237</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">Tperm</td>
              <td align="left" colspan="1" rowspan="1">REST-method-set</td>
              <td align="left" colspan="1" rowspan="1">set of REST methods represented</td>
              <td align="left" colspan="1" rowspan="1">RFC 9237</td>
            </tr>
          </tbody>
        </table>
        <t indent="0" pn="section-5.2-3">The registration policy is Specification Required <xref target="RFC8126" format="default" sectionFormat="of" derivedContent="RFC8126"/>.
The designated expert will engage with the submitter to ascertain whether the
requirements of this document are addressed:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5.2-4">
          <li pn="section-5.2-4.1">The specifications for <tt>Toid</tt> and <tt>Tperm</tt> need to realize the
general ideas of unambiguous object identifiers and permission lists
in the context where the AIF data item is intended to be used, and
their structure needs to be usable with the intended media types
(application/aif+cbor and application/aif+json) as identified in the
specification.</li>
          <li pn="section-5.2-4.2">The parameter names need to conform to <xref section="4.3" sectionFormat="of" target="RFC6838" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6838#section-4.3" derivedContent="RFC6838"/>, but preferably they are in <xref target="KebabCase" format="default" sectionFormat="of" derivedContent="KebabCase"/> so they can be easily
 translated into names used in APIs with popular programming
languages.</li>
        </ul>
        <t indent="0" pn="section-5.2-5">The designated experts will develop further criteria and guidelines as
needed.</t>
      </section>
      <section anchor="content-format" numbered="true" removeInRFC="false" toc="include" pn="section-5.3">
        <name slugifiedName="name-content-format">Content-Format</name>
        <t indent="0" pn="section-5.3-1">IANA has registered Content-Format numbers in the "CoAP
Content-Formats" subregistry, within the "Constrained RESTful
Environments (CoRE) Parameters" registry <xref target="IANA.core-parameters" format="default" sectionFormat="of" derivedContent="IANA.core-parameters"/>, as
follows:</t>
        <table align="left" pn="table-5">
          <name slugifiedName="name-new-content-formats">New Content-Formats</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Media Type</th>
              <th align="left" colspan="1" rowspan="1">Encoding</th>
              <th align="left" colspan="1" rowspan="1">ID</th>
              <th align="left" colspan="1" rowspan="1">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">application/aif+cbor</td>
              <td align="left" colspan="1" rowspan="1">-</td>
              <td align="left" colspan="1" rowspan="1">290</td>
              <td align="left" colspan="1" rowspan="1">RFC 9237</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">application/aif+json</td>
              <td align="left" colspan="1" rowspan="1">-</td>
              <td align="left" colspan="1" rowspan="1">291</td>
              <td align="left" colspan="1" rowspan="1">RFC 9237</td>
            </tr>
          </tbody>
        </table>
        <t indent="0" pn="section-5.3-3">Note that applications that register <tt>Toid</tt> and <tt>Tperm</tt> values are
encouraged to also register Content-Formats for the relevant
combinations.</t>
      </section>
    </section>
    <section anchor="seccons" numbered="true" removeInRFC="false" toc="include" pn="section-6">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-6-1">The security considerations of <xref target="RFC7252" format="default" sectionFormat="of" derivedContent="RFC7252"/> apply when
      AIF is used with CoAP; <xref section="11.1" sectionFormat="of" target="RFC7252" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7252#section-11.1" derivedContent="RFC7252"/> specifically applies if complex formats such as URIs
      are used for <tt>Toid</tt> or <tt>Tperm</tt>.  Some wider issues are
      discussed in <xref target="RFC8576" format="default" sectionFormat="of" derivedContent="RFC8576"/>.</t>
      <t indent="0" pn="section-6-2">When applying these formats, the referencing specification needs to be
careful to ensure:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-6-3">
        <li pn="section-6-3.1">that the cryptographic armor employed around this format
fulfills the referencing specification's security objectives and that the armor or some
additional information included in it with the AIF data item
(1) unambiguously identifies the subject to which the authorizations
shall apply and (2) provides any context information needed to derive the
identity of the object to which authorization is being granted
from the object identifiers (such as, for
the data models defined in the present specification, the scheme and
authority information that is used to construct the full URI), and</li>
        <li pn="section-6-3.2">that the types used for <tt>Toid</tt> and <tt>Tperm</tt> provide the
appropriate granularity and precision so that application requirements on the
precision of the authorization information are fulfilled and that
all parties have the same understanding of each <tt>Toid</tt>/<tt>Tperm</tt> pair in
terms of specified objects (resources) and operations on those.</li>
      </ul>
      <t indent="0" pn="section-6-4">For the data formats, the security considerations of <xref target="RFC8259" format="default" sectionFormat="of" derivedContent="RFC8259"/> and
<xref target="RFC8949" format="default" sectionFormat="of" derivedContent="RFC8949"/> apply.</t>
      <t indent="0" pn="section-6-5">A plain implementation of AIF might implement just the basic REST
model as per <xref target="rest-model" format="default" sectionFormat="of" derivedContent="Section 2.1"/>.  If it receives authorizations that
include permissions that use the REST-specific model with dynamic
resource creation (<xref target="ext-rest-model" format="default" sectionFormat="of" derivedContent="Section 2.3"/>), it needs to either
reject the AIF data item entirely or act only on the
permissions that it does understand.
In other words, the semantics underlying an allow-list as discussed
above need to hold here as well.</t>
      <t indent="0" pn="section-6-6">An implementation of the REST-specific model with dynamic resource
creation (<xref target="ext-rest-model" format="default" sectionFormat="of" derivedContent="Section 2.3"/>) needs to carefully keep track of the
dynamically created objects and the subjects to which the Dynamic-X
permissions apply -- both on the server side to enforce the permissions
and on the client side to know which permissions are available.</t>
    </section>
  </middle>
  <back>
    <references pn="section-7">
      <name slugifiedName="name-references">References</name>
      <references pn="section-7.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="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 indent="0">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="RFC3986" target="https://www.rfc-editor.org/info/rfc3986" quoteTitle="true" derivedAnchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t indent="0">A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource.  This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet.  The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier.  This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC6838" target="https://www.rfc-editor.org/info/rfc6838" quoteTitle="true" derivedAnchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
            <abstract>
              <t indent="0">This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols.  This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
        <reference anchor="RFC7252" target="https://www.rfc-editor.org/info/rfc7252" quoteTitle="true" derivedAnchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t indent="0">The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t indent="0">CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126" quoteTitle="true" derivedAnchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t indent="0">Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t indent="0">To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t indent="0">This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="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 indent="0">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>
        <reference anchor="RFC8610" target="https://www.rfc-editor.org/info/rfc8610" quoteTitle="true" derivedAnchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t indent="0">This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049).  Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC9110" target="https://www.rfc-editor.org/info/rfc9110" quoteTitle="true" derivedAnchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t indent="0">The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t indent="0">This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC9165" target="https://www.rfc-editor.org/info/rfc9165" quoteTitle="true" derivedAnchor="RFC9165">
          <front>
            <title>Additional Control Operators for the Concise Data Definition Language (CDDL)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="December" year="2021"/>
            <abstract>
              <t indent="0">The Concise Data Definition Language (CDDL), standardized in RFC 8610, provides "control operators" as its main language extension point.</t>
              <t indent="0">The present document defines a number of control operators that were not yet ready at the time RFC 8610 was completed: , , and for the construction of constants; / for including ABNF (RFC 5234 and RFC 7405) in CDDL specifications; and for indicating the use of a non-basic feature in an instance.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9165"/>
          <seriesInfo name="DOI" value="10.17487/RFC9165"/>
        </reference>
      </references>
      <references pn="section-7.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="IANA.core-parameters" target="https://www.iana.org/assignments/core-parameters" quoteTitle="true" derivedAnchor="IANA.core-parameters">
          <front>
            <title>Constrained RESTful Environments (CoRE) Parameters</title>
            <author>
              <organization showOnFrontPage="true">IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="IANA.media-type-sub-parameters" target="https://www.iana.org/assignments/media-type-sub-parameters" quoteTitle="true" derivedAnchor="IANA.media-type-sub-parameters">
          <front>
            <title>MIME Media Type Sub-Parameter Registries</title>
            <author>
              <organization showOnFrontPage="true">IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="KebabCase" target="http://wiki.c2.com/?KebabCase" quoteTitle="true" derivedAnchor="KebabCase">
          <front>
            <title>Kebab Case</title>
            <author>
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2014" month="August" day="29"/>
          </front>
        </reference>
        <reference anchor="RFC4949" target="https://www.rfc-editor.org/info/rfc4949" quoteTitle="true" derivedAnchor="RFC4949">
          <front>
            <title>Internet Security Glossary, Version 2</title>
            <author fullname="R. Shirey" initials="R." surname="Shirey"/>
            <date month="August" year="2007"/>
            <abstract>
              <t indent="0">This Glossary provides definitions, abbreviations, and explanations of terminology for information system security.  The 334 pages of entries offer recommendations to improve the comprehensibility of written material that is generated in the Internet Standards Process (RFC 2026).  The recommendations follow the principles that such writing should (a) use the same term or definition whenever the same concept is mentioned; (b) use terms in their plainest, dictionary sense; (c) use terms that are already well-established in open publications; and (d) avoid terms that either favor a particular vendor or favor a particular technology or mechanism over other, competing techniques that already exist or could be developed.  This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="FYI" value="36"/>
          <seriesInfo name="RFC" value="4949"/>
          <seriesInfo name="DOI" value="10.17487/RFC4949"/>
        </reference>
        <reference anchor="RFC6570" target="https://www.rfc-editor.org/info/rfc6570" quoteTitle="true" derivedAnchor="RFC6570">
          <front>
            <title>URI Template</title>
            <author fullname="J. Gregorio" initials="J." surname="Gregorio"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="M. Hadley" initials="M." surname="Hadley"/>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="D. Orchard" initials="D." surname="Orchard"/>
            <date month="March" year="2012"/>
            <abstract>
              <t indent="0">A URI Template is a compact sequence of characters for describing a range of Uniform Resource Identifiers through variable expansion.  This specification defines the URI Template syntax and the process for expanding a URI Template into a URI reference, along with guidelines for the use of URI Templates on the Internet. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6570"/>
          <seriesInfo name="DOI" value="10.17487/RFC6570"/>
        </reference>
        <reference anchor="RFC7228" target="https://www.rfc-editor.org/info/rfc7228" quoteTitle="true" derivedAnchor="RFC7228">
          <front>
            <title>Terminology for Constrained-Node Networks</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="M. Ersue" initials="M." surname="Ersue"/>
            <author fullname="A. Keranen" initials="A." surname="Keranen"/>
            <date month="May" year="2014"/>
            <abstract>
              <t indent="0">The Internet Protocol Suite is increasingly used on small devices with severe constraints on power, memory, and processing resources, creating constrained-node networks.  This document provides a number of basic terms that have been useful in the standardization work for constrained-node networks.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7228"/>
          <seriesInfo name="DOI" value="10.17487/RFC7228"/>
        </reference>
        <reference anchor="RFC7493" target="https://www.rfc-editor.org/info/rfc7493" quoteTitle="true" derivedAnchor="RFC7493">
          <front>
            <title>The I-JSON Message Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="March" year="2015"/>
            <abstract>
              <t indent="0">I-JSON (short for "Internet JSON") is a restricted profile of JSON designed to maximize interoperability and increase confidence that software can process it successfully with predictable results.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7493"/>
          <seriesInfo name="DOI" value="10.17487/RFC7493"/>
        </reference>
        <reference anchor="RFC8132" target="https://www.rfc-editor.org/info/rfc8132" quoteTitle="true" derivedAnchor="RFC8132">
          <front>
            <title>PATCH and FETCH Methods for the Constrained Application Protocol (CoAP)</title>
            <author fullname="P. van der Stok" initials="P." surname="van der Stok"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="A. Sehgal" initials="A." surname="Sehgal"/>
            <date month="April" year="2017"/>
            <abstract>
              <t indent="0">The methods defined in RFC 7252 for the Constrained Application Protocol (CoAP) only allow access to a complete resource, not to parts of a resource. In case of resources with larger or complex data, or in situations where resource continuity is required, replacing or requesting the whole resource is undesirable. Several applications using CoAP need to access parts of the resources.</t>
              <t indent="0">This specification defines the new CoAP methods, FETCH, PATCH, and iPATCH, which are used to access and update parts of a resource.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8132"/>
          <seriesInfo name="DOI" value="10.17487/RFC8132"/>
        </reference>
        <reference anchor="RFC8259" target="https://www.rfc-editor.org/info/rfc8259" quoteTitle="true" derivedAnchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t indent="0">JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t indent="0">This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC8576" target="https://www.rfc-editor.org/info/rfc8576" quoteTitle="true" derivedAnchor="RFC8576">
          <front>
            <title>Internet of Things (IoT) Security: State of the Art and Challenges</title>
            <author fullname="O. Garcia-Morchon" initials="O." surname="Garcia-Morchon"/>
            <author fullname="S. Kumar" initials="S." surname="Kumar"/>
            <author fullname="M. Sethi" initials="M." surname="Sethi"/>
            <date month="April" year="2019"/>
            <abstract>
              <t indent="0">The Internet of Things (IoT) concept refers to the usage of standard Internet protocols to allow for human-to-thing and thing-to-thing communication. The security needs for IoT systems are well recognized, and many standardization steps to provide security have been taken -- for example, the specification of the Constrained Application Protocol (CoAP) secured with Datagram Transport Layer Security (DTLS). However, security challenges still exist, not only because there are some use cases that lack a suitable solution, but also because many IoT devices and systems have been designed and deployed with very limited security capabilities. In this document, we first discuss the various stages in the lifecycle of a thing. Next, we document the security threats to a thing and the challenges that one might face to protect against these threats. Lastly, we discuss the next steps needed to facilitate the deployment of secure IoT systems. This document can be used by implementers and authors of IoT specifications as a reference for details about security considerations while documenting their specific security challenges, threat models, and mitigations.</t>
              <t indent="0">This document is a product of the IRTF Thing-to-Thing Research Group (T2TRG).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8576"/>
          <seriesInfo name="DOI" value="10.17487/RFC8576"/>
        </reference>
        <reference anchor="RFC8881" target="https://www.rfc-editor.org/info/rfc8881" quoteTitle="true" derivedAnchor="RFC8881">
          <front>
            <title>Network File System (NFS) Version 4 Minor Version 1 Protocol</title>
            <author fullname="D. Noveck" initials="D." role="editor" surname="Noveck"/>
            <author fullname="C. Lever" initials="C." surname="Lever"/>
            <date month="August" year="2020"/>
            <abstract>
              <t indent="0">This document describes the Network File System (NFS) version 4 minor version 1, including features retained from the base protocol (NFS version 4 minor version 0, which is specified in RFC 7530) and protocol extensions made subsequently. The later minor version has no dependencies on NFS version 4 minor version 0, and is considered a separate protocol.</t>
              <t indent="0">This document obsoletes RFC 5661. It substantially revises the treatment of features relating to multi-server namespace, superseding the description of those features appearing in RFC 5661.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8881"/>
          <seriesInfo name="DOI" value="10.17487/RFC8881"/>
        </reference>
        <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/rfc8949" quoteTitle="true" derivedAnchor="RFC8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t indent="0">The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t indent="0">This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="RFC9200" target="https://www.rfc-editor.org/info/rfc9200" quoteTitle="true" derivedAnchor="RFC9200">
          <front>
            <title>Authentication and Authorization for Constrained Environments Using the OAuth 2.0 Framework (ACE-OAuth)</title>
            <author initials="L" surname="Seitz" fullname="Ludwig Seitz">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="G" surname="Selander" fullname="Goeran Selander">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="E" surname="Wahlstroem" fullname="Erik Wahlstroem">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S" surname="Erdtman" fullname="Samuel Erdtman">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="H" surname="Tschofenig" fullname="Hannes Tschofenig">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2022" month="August"/>
          </front>
          <seriesInfo name="RFC" value="9200"/>
          <seriesInfo name="DOI" value="10.17487/RFC9200"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgements" removeInRFC="false" toc="include" pn="section-appendix.a">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t indent="0" pn="section-appendix.a-1"><contact fullname="Jim Schaad"/>,
<contact fullname="Francesca Palombini"/>,
<contact fullname="Olaf Bergmann"/>,
<contact fullname="Marco Tiloca"/>,
and
<contact fullname="Christian Amsüss"/>
provided comments that shaped the
direction of this document.
<contact fullname="Alexey Melnikov"/> pointed out that there were gaps in the media
type specifications, and <contact fullname="Loganaden Velvindron"/> provided a shepherd
review with further comments.
Many thanks also to the IESG reviewers, who provided several small
but significant observations.
<contact fullname="Benjamin Kaduk"/> provided an extensive review as Responsible Area
Director and indeed is responsible for much improvement in the document.</t>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.b">
      <name slugifiedName="name-authors-address">Author's Address</name>
      <author initials="C." surname="Bormann" fullname="Carsten Bormann">
        <organization showOnFrontPage="true">Universität Bremen TZI</organization>
        <address>
          <postal>
            <street>Postfach 330440</street>
            <city>Bremen</city>
            <code>D-28359</code>
            <country>Germany</country>
          </postal>
          <phone>+49-421-218-63921</phone>
          <email>cabo@tzi.org</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
