| rfc9202.original.xml | rfc9202.xml | |||
|---|---|---|---|---|
| <?xml version='1.0' encoding='utf-8'?> | <?xml version="1.0" encoding="UTF-8"?> | |||
| <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> | ||||
| <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.4.7 --> | <!DOCTYPE rfc [ | |||
| <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | <!ENTITY nbsp " "> | |||
| <?rfc toc="yes"?> | <!ENTITY zwsp "​"> | |||
| <?rfc sortrefs="yes"?> | <!ENTITY nbhy "‑"> | |||
| <?rfc symrefs="yes"?> | <!ENTITY wj "⁠"> | |||
| <rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft | ]> | |||
| -ietf-ace-dtls-authorize-18" category="std" obsoletes="" updates="" submissionTy | ||||
| pe="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft | |||
| ="3"> | -ietf-ace-dtls-authorize-18" number="9202" obsoletes="" updates="" submissionTyp | |||
| e="IETF" category="std" consensus="true" xml:lang="en" tocInclude="true" sortRef | ||||
| s="true" symRefs="true" version="3"> | ||||
| <!-- xml2rfc v2v3 conversion 3.7.0 --> | <!-- xml2rfc v2v3 conversion 3.7.0 --> | |||
| <front> | <front> | |||
| <title abbrev="CoAP-DTLS">Datagram Transport Layer Security (DTLS) Profile f | <title abbrev="DTLS Profile for ACE">Datagram Transport Layer Security (DTLS | |||
| or Authentication and Authorization for Constrained Environments (ACE)</title> | ) Profile for Authentication and Authorization for Constrained Environments (ACE | |||
| <seriesInfo name="Internet-Draft" value="draft-ietf-ace-dtls-authorize-18"/> | )</title> | |||
| <seriesInfo name="RFC" value="9202"/> | ||||
| <author initials="S." surname="Gerdes" fullname="Stefanie Gerdes"> | <author initials="S." surname="Gerdes" fullname="Stefanie Gerdes"> | |||
| <organization>Universität Bremen TZI</organization> | <organization>Universität Bremen TZI</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>Postfach 330440</street> | <street>Postfach 330440</street> | |||
| <city>Bremen</city> | <city>Bremen</city> | |||
| <code>D-28359</code> | <code>D-28359</code> | |||
| <country>Germany</country> | <country>Germany</country> | |||
| </postal> | </postal> | |||
| <phone>+49-421-218-63906</phone> | <phone>+49-421-218-63906</phone> | |||
| skipping to change at line 70 ¶ | skipping to change at line 73 ¶ | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>Djäknegatan 31</street> | <street>Djäknegatan 31</street> | |||
| <city>Malmö</city> | <city>Malmö</city> | |||
| <code>211 35</code> | <code>211 35</code> | |||
| <country>Sweden</country> | <country>Sweden</country> | |||
| </postal> | </postal> | |||
| <email>ludwig.seitz@combitech.com</email> | <email>ludwig.seitz@combitech.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <date year="2021" month="June" day="04"/> | <date year="2022" month="August"/> | |||
| <area>Security</area> | <area>Security</area> | |||
| <workgroup>ACE Working Group</workgroup> | <workgroup>ACE</workgroup> | |||
| <keyword>Internet-Draft</keyword> | <keyword>Internet of Things (IoT)</keyword> | |||
| <keyword>Internet of Things</keyword> | ||||
| <keyword>IOT</keyword> | ||||
| <keyword>OAuth</keyword> | ||||
| <keyword>Access Token</keyword> | ||||
| <abstract> | <abstract> | |||
| <t>This specification defines a profile of the ACE framework that allows c | <t>This specification defines a profile of the Authentication and Authoriz | |||
| onstrained servers | ation for | |||
| to delegate client authentication and authorization. The protocol | Constrained Environments (ACE) framework that allows constrained | |||
| relies on DTLS version 1.2 for communication security between entities in a | servers to delegate client authentication and authorization. The protocol | |||
| constrained network using either raw public keys or pre-shared keys. A | relies on DTLS version 1.2 or later for communication security between ent | |||
| resource-constrained server can use this protocol to delegate | ities in a | |||
| management of authorization information to a trusted host with less | constrained network using either raw public keys or pre-shared keys. A | |||
| severe limitations regarding processing power and memory.</t> | resource-constrained server can use this protocol to delegate | |||
| management of authorization information to a trusted host with less-severe | ||||
| limitations regarding processing power and memory.</t> | ||||
| </abstract> | </abstract> | |||
| </front> | </front> | |||
| <middle> | <middle> | |||
| <section anchor="introduction" numbered="true" toc="default"> | <section anchor="introduction" numbered="true" toc="default"> | |||
| <name>Introduction</name> | <name>Introduction</name> | |||
| <t>This specification defines a profile of the ACE framework | <t>This specification defines a profile of the ACE framework | |||
| <xref target="I-D.ietf-ace-oauth-authz" format="default"/>. In this profile, a | <xref target="RFC9200" format="default"/>. In this profile, a client (C) and a | |||
| client and a | resource server (RS) use the Constrained Application Protocol (CoAP) <xref targe | |||
| resource server use CoAP <xref target="RFC7252" format="default"/> over DTLS ver | t="RFC7252" format="default"/> over DTLS version 1.2 <xref target="RFC6347" form | |||
| sion 1.2 <xref target="RFC6347" format="default"/> | at="default"/> | |||
| to communicate. This specification | to communicate. This specification | |||
| uses DTLS 1.2 terminology, but later versions such as DTLS 1.3 can be | uses DTLS 1.2 terminology, but later versions such as DTLS 1.3 <xref target="RFC | |||
| used instead. The client obtains an access token, bound to a key | 9147"/> can be | |||
| (the proof-of-possession key), from an authorization server to prove | used instead. The client obtains an access token bound to a key | |||
| (the proof-of-possession (PoP) key) from an authorization server (AS) to prove | ||||
| its authorization to access protected resources hosted by the resource | its authorization to access protected resources hosted by the resource | |||
| server. Also, the client and the resource server are provided by the | server. Also, the client and the resource server are provided by the | |||
| authorization server with the necessary keying material to establish a | authorization server with the necessary keying material to establish a | |||
| DTLS session. The communication between client and authorization | DTLS session. The communication between the client and authorization | |||
| server may also be secured with DTLS. This specification supports | server may also be secured with DTLS. This specification supports | |||
| DTLS with Raw Public Keys (RPK) <xref target="RFC7250" format="default"/> and wi | DTLS with raw public keys (RPKs) <xref target="RFC7250" format="default"/> and w | |||
| th Pre-Shared Keys | ith pre-shared keys | |||
| (PSK) <xref target="RFC4279" format="default"/>. How token introspection <xref t | (PSKs) <xref target="RFC4279" format="default"/>. How token introspection <xref | |||
| arget="RFC7662" format="default"/> is performed | target="RFC7662" format="default"/> is performed | |||
| between RS and AS is out of scope for this specification.</t> | between the RS and AS is out of scope for this specification.</t> | |||
| <t>The ACE framework requires that client and server mutually | ||||
| <t>The ACE framework requires that the client and server mutually | ||||
| authenticate each other before any application data is exchanged. | authenticate each other before any application data is exchanged. | |||
| DTLS enables mutual authentication if both client and server prove | DTLS enables mutual authentication if both the client and server prove | |||
| their ability to use certain keying material in the DTLS handshake. | their ability to use certain keying material in the DTLS handshake. | |||
| The authorization server assists in this process on the server side by | The authorization server assists in this process on the server side by | |||
| incorporating keying material (or information about keying material) | incorporating keying material (or information about keying material) | |||
| into the access token, which is considered a "proof of possession" | into the access token, which is considered a proof-of-possession | |||
| token.</t> | token.</t> | |||
| <t>In the RPK mode, the client proves that it can use the RPK bound to | <t>In the RPK mode, the client proves that it can use the RPK bound to | |||
| the token and the server shows that it can use a certain RPK.</t> | the token and the server shows that it can use a certain RPK.</t> | |||
| <t>The resource server needs access to the token in order to complete | <t>The resource server needs access to the token in order to complete | |||
| this exchange. For the RPK mode, the client must upload the access | this exchange. For the RPK mode, the client must upload the access | |||
| token to the resource server before initiating the handshake, as | token to the resource server before initiating the handshake, as | |||
| described in Section 5.10.1 of the ACE framework | described in <xref target="RFC9200" sectionFormat="of" section="5.10.1"> the ACE | |||
| <xref target="I-D.ietf-ace-oauth-authz" format="default"/>.</t> | framework</xref>.</t> | |||
| <t>In the PSK mode, client and server show with the DTLS handshake that | ||||
| <t>In the PSK mode, the client and server show with the DTLS handshake tha | ||||
| t | ||||
| they can use the keying material that is bound to the access token. | they can use the keying material that is bound to the access token. | |||
| To transfer the access token from the client to the resource server, | To transfer the access token from the client to the resource server, | |||
| the <tt>psk_identity</tt> parameter in the DTLS PSK handshake may be used | the <tt>psk_identity</tt> parameter in the DTLS PSK handshake may be used | |||
| instead of uploading the token prior to the handshake.</t> | instead of uploading the token prior to the handshake.</t> | |||
| <t>As recommended in Section 5.8 of <xref target="I-D.ietf-ace-oauth-authz | <t>As recommended in <xref target="RFC9200" sectionFormat="of" section="5. | |||
| " format="default"/>, this | 8"/>, this | |||
| specification uses CBOR web tokens to convey claims within an access | specification uses Concise Binary Object Representation (CBOR) web tokens to con | |||
| vey claims within an access | ||||
| token issued by the server. While other formats could be used as well, | token issued by the server. While other formats could be used as well, | |||
| those are out of scope for this document.</t> | those are out of scope for this document.</t> | |||
| <section anchor="terminology" numbered="true" toc="default"> | <section anchor="terminology" numbered="true" toc="default"> | |||
| <name>Terminology</name> | <name>Terminology</name> | |||
| <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | 14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", | |||
| "OPTIONAL" in this document are to be interpreted as described in BCP | "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14 | |||
| 14 <xref target="RFC2119" format="default"/> <xref target="RFC8174" format="defa | >", "<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and | |||
| ult"/> when, and only when, they appear in all | "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as described in | |||
| BCP 14 <xref target="RFC2119" format="default"/> <xref target="RFC8174" fo | ||||
| rmat="default"/> when, and only when, they appear in all | ||||
| capitals, as shown here.</t> | capitals, as shown here.</t> | |||
| <t>Readers are expected to be familiar with the terms and concepts | <t>Readers are expected to be familiar with the terms and concepts | |||
| described in <xref target="I-D.ietf-ace-oauth-authz" format="default"/> and in < | described in <xref target="RFC9200" format="default"/> and <xref target="RFC9201 | |||
| xref target="I-D.ietf-ace-oauth-params" format="default"/>.</t> | " format="default"/>.</t> | |||
| <t>The authorization information (authz-info) resource refers to the aut | <t>The authorization information (authz-info) resource refers to the aut | |||
| horization information endpoint as specified in <xref target="I-D.ietf-ace-oauth | horization information endpoint, as specified in <xref target="RFC9200" format=" | |||
| -authz" format="default"/>. | default"/>. | |||
| The term <tt>claim</tt> is used in this document with the same semantics | The term <tt>claim</tt> is used in this document with the same semantics | |||
| as in <xref target="I-D.ietf-ace-oauth-authz" format="default"/>, i.e., it denot es information carried | as in <xref target="RFC9200" format="default"/>, i.e., it denotes information ca rried | |||
| in the access token or returned from introspection.</t> | in the access token or returned from introspection.</t> | |||
| <t>Throughout this document, examples for CBOR data items are expressed | ||||
| in | ||||
| CBOR extended diagnostic notation as defined in | ||||
| <xref section="8" sectionFormat="of" target="RFC8949"/> and | ||||
| <xref section="G" sectionFormat="of" target="RFC8610"/> | ||||
| ("diagnostic notation"), unless noted otherwise. | ||||
| We often use diagnostic notation comments to provide | ||||
| a textual representation of the numeric parameter names and values. | ||||
| </t> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="overview" numbered="true" toc="default"> | <section anchor="overview" numbered="true" toc="default"> | |||
| <name>Protocol Overview</name> | <name>Protocol Overview</name> | |||
| <t>The CoAP-DTLS profile for ACE specifies the transfer of authentication | <t>The CoAP-DTLS profile for ACE specifies the transfer of authentication | |||
| information and, if necessary, authorization information between the | information and, if necessary, authorization information between the | |||
| client (C) and the resource server (RS) during setup of a DTLS session | client (C) and the resource server (RS) during setup of a DTLS session | |||
| for CoAP messaging. It also specifies how the client can use CoAP over | for CoAP messaging. It also specifies how the client can use CoAP over | |||
| DTLS to retrieve an access token from the authorization server (AS) | DTLS to retrieve an access token from the authorization server (AS) | |||
| for a protected resource hosted on the resource server. As specified | for a protected resource hosted on the resource server. As specified | |||
| in Section 6.7 of <xref target="I-D.ietf-ace-oauth-authz" format="default"/>, us e of DTLS for one or | in <xref target="RFC9200" sectionFormat="of" section="6.7"/>, use of DTLS for on e or | |||
| both of these interactions is completely independent.</t> | both of these interactions is completely independent.</t> | |||
| <t>This profile requires the client to retrieve an access token for | <t>This profile requires the client to retrieve an access token for the | |||
| protected resource(s) it wants to access on the resource server as | protected resource(s) it wants to access on the resource server, as | |||
| specified in <xref target="I-D.ietf-ace-oauth-authz" format="default"/>. <xref t | specified in <xref target="RFC9200" format="default"/>. <xref target="at-retriev | |||
| arget="at-retrieval" format="default"/> shows the | al" format="default"/> shows the | |||
| typical message flow in this scenario (messages in square brackets are | typical message flow in this scenario (messages in square brackets are | |||
| optional):</t> | optional):</t> | |||
| <figure anchor="at-retrieval"> | <figure anchor="at-retrieval"> | |||
| <name>Retrieving an Access Token</name> | <name>Retrieving an Access Token</name> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| C RS AS | C RS AS | |||
| | [---- Resource Request ------>]| | | | [---- Resource Request ------>]| | | |||
| | | | | | | | | |||
| | [<-AS Request Creation Hints-] | | | | [<-AS Request Creation Hints-] | | | |||
| | | | | | | | | |||
| | ------- Token Request ----------------------------> | | | ------- Token Request ----------------------------> | | |||
| | | | | | | | | |||
| | <---------------------------- Access Token --------- | | | <---------------------------- Access Token --------- | | |||
| | + Access Information | | | + Access Information | | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure> | </figure> | |||
| <t>To determine the authorization server in charge of a resource hosted | <t>To determine the authorization server in charge of a resource hosted | |||
| at the resource server, the client can send an initial Unauthorized | at the resource server, the client can send an initial Unauthorized | |||
| Resource Request message to the resource server. The resource server | Resource Request message to the resource server. The resource server | |||
| then denies the request and sends an AS Request Creation Hints message | then denies the request and sends an AS Request Creation Hints message | |||
| containing the address of its authorization server back to the client | containing the address of its authorization server back to the client, | |||
| as specified in Section 5.3 of <xref target="I-D.ietf-ace-oauth-authz" format="d | as specified in <xref target="RFC9200" sectionFormat="of" section ="5.3"/>.</t> | |||
| efault"/>.</t> | ||||
| <t>Once the client knows the authorization server's address, it can send | <t>Once the client knows the authorization server's address, it can send | |||
| an access token request to the token endpoint at the authorization | an access token request to the token endpoint at the authorization | |||
| server as specified in <xref target="I-D.ietf-ace-oauth-authz" format="default"/ | server, as specified in <xref target="RFC9200" format="default"/>. As the access | |||
| >. As the access | token request and the response may contain confidential data, | |||
| token request as well as the response may contain confidential data, | ||||
| the communication between the client and the authorization server must | the communication between the client and the authorization server must | |||
| be confidentiality-protected and ensure authenticity. The client is | be confidentiality protected and ensure authenticity. The client is | |||
| expected to have been registered at the authorization server as | expected to have been registered at the authorization server, as | |||
| outlined in Section 4 of <xref target="I-D.ietf-ace-oauth-authz" format="default | outlined in <xref target="RFC9200" sectionFormat="of" section="4"/>.</t> | |||
| "/>.</t> | ||||
| <t>The access token returned by the authorization server can then be used | <t>The access token returned by the authorization server can then be used | |||
| by the client to establish a new DTLS session with the resource | by the client to establish a new DTLS session with the resource | |||
| server. When the client intends to use an asymmetric proof-of-possession key in the | server. When the client intends to use an asymmetric proof-of-possession key in the | |||
| DTLS handshake with the resource server, the client MUST upload the | DTLS handshake with the resource server, the client <bcp14>MUST</bcp14> upload t | |||
| access token to the authz-info resource, i.e. the authz-info endpoint, | he | |||
| access token to the authz-info resource, i.e., the authz-info endpoint, | ||||
| on the resource server before | on the resource server before | |||
| starting the DTLS handshake, as described in Section 5.10.1 of | starting the DTLS handshake, as described in | |||
| <xref target="I-D.ietf-ace-oauth-authz" format="default"/>. In case the client u | <xref target="RFC9200" sectionFormat="of" section="5.10.1"/>. In case the client | |||
| ses a symmetric proof-of-possession | uses a symmetric proof-of-possession | |||
| key in the DTLS handshake, the procedure as above MAY be used, or alternatively, | key in the DTLS handshake, the procedure above <bcp14>MAY</bcp14> be used, or al | |||
| the access token MAY instead be transferred in the | ternatively | |||
| the access token <bcp14>MAY</bcp14> instead be transferred in the | ||||
| DTLS ClientKeyExchange message (see <xref target="psk-dtls-channel" format="defa ult"/>). | DTLS ClientKeyExchange message (see <xref target="psk-dtls-channel" format="defa ult"/>). | |||
| In any case, DTLS MUST be used in a mode that provides replay | In any case, DTLS <bcp14>MUST</bcp14> be used in a mode that provides replay | |||
| protection.</t> | protection.</t> | |||
| <t><xref target="protocol-overview" format="default"/> depicts the common protocol flow for the DTLS | <t><xref target="protocol-overview" format="default"/> depicts the common protocol flow for the DTLS | |||
| profile after the client has retrieved the access token from the | profile after the client has retrieved the access token from the | |||
| authorization server, AS.</t> | authorization server (AS).</t> | |||
| <figure anchor="protocol-overview"> | <figure anchor="protocol-overview"> | |||
| <name>Protocol overview</name> | <name>Protocol Overview</name> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| C RS AS | C RS AS | |||
| | [--- Access Token ------>] | | | | [--- Access Token ------>] | | | |||
| | | | | | | | | |||
| | <== DTLS channel setup ==> | | | | <== DTLS channel setup ==> | | | |||
| | | | | | | | | |||
| | == Authorized Request ===> | | | | == Authorized Request ===> | | | |||
| | | | | | | | | |||
| | <=== Protected Resource == | | | | <=== Protected Resource == | | | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure> | </figure> | |||
| </section> | </section> | |||
| <section anchor="protocol-flow" numbered="true" toc="default"> | <section anchor="protocol-flow" numbered="true" toc="default"> | |||
| <name>Protocol Flow</name> | <name>Protocol Flow</name> | |||
| <t>The following sections specify how CoAP is used to interchange | <t>The following sections specify how CoAP is used to interchange | |||
| access-related data between the resource server, the client and the | access-related data between the resource server, the client, and the | |||
| authorization server so that the authorization server can provide the | authorization server so that the authorization server can provide the | |||
| client and the resource server with sufficient information to | client and the resource server with sufficient information to | |||
| establish a secure channel, and convey authorization information | establish a secure channel and convey authorization information | |||
| specific for this communication relationship to the resource server.</t> | specific for this communication relationship to the resource server.</t> | |||
| <t><xref target="C-AS-comm" format="default"/> describes how the communica | <t><xref target="C-AS-comm" format="default"/> describes how the communica | |||
| tion between the client (C) and | tion between | |||
| the authorization server (AS) must be secured. | the client (C) and the authorization server (AS) must be secured. | |||
| Depending on the used CoAP security mode (see also | Depending on the CoAP security mode used (see also | |||
| Section 9 of <xref target="RFC7252" format="default"/>, | <xref target="RFC7252" sectionFormat="of" section="9"/>), | |||
| the Client-to-AS request, AS-to-Client response and DTLS session | the client-to-AS request, AS-to-client response, and DTLS session | |||
| establishment carry slightly different information. <xref target="rpk-mode" form | establishment carry slightly different information. <xref target="rpk-mode | |||
| at="default"/> | " | |||
| addresses the use of raw public keys while <xref target="psk-mode" format="defau | format="default"/> addresses the use of raw public keys, while <xref targe | |||
| lt"/> defines how | t="psk-mode" | |||
| pre-shared keys are used in this profile.</t> | format="default"/> defines how pre-shared keys are used in this profile.</ | |||
| t> | ||||
| <section anchor="C-AS-comm" numbered="true" toc="default"> | <section anchor="C-AS-comm" numbered="true" toc="default"> | |||
| <name>Communication Between the Client and the Authorization Server</nam e> | <name>Communication between the Client and the Authorization Server</nam e> | |||
| <t>To retrieve an access token for the resource that the client wants to | <t>To retrieve an access token for the resource that the client wants to | |||
| access, the client requests an access token from the authorization | access, the client requests an access token from the authorization | |||
| server. Before the client can request the access token, the client and | server. Before the client can request the access token, the client and | |||
| the authorization server MUST establish | the authorization server <bcp14>MUST</bcp14> establish | |||
| a secure communication channel. This profile assumes that the keying | a secure communication channel. This profile assumes that the keying | |||
| material to secure this communication channel has securely been obtained | material to secure this communication channel has securely been obtained | |||
| either by manual configuration or in an automated provisioning process. | either by manual configuration or in an automated provisioning process. | |||
| The following requirements in alignment with Section 6.5 of | The following requirements, in alignment with <xref target="RFC9200" | |||
| <xref target="I-D.ietf-ace-oauth-authz" format="default"/> therefore must be met | sectionFormat="of" section="6.5"/>, therefore must be met:</t> | |||
| :</t> | ||||
| <ul spacing="normal"> | <ul spacing="normal"> | |||
| <li>The client MUST securely have obtained keying material to communic | <li>The client <bcp14>MUST</bcp14> securely have obtained keying mater | |||
| ate | ial to | |||
| with the authorization server.</li> | communicate with the authorization server.</li> | |||
| <li>Furthermore, the client MUST verify that the authorization server | <li>Furthermore, the client <bcp14>MUST</bcp14> verify that the author | |||
| is | ization | |||
| authorized to provide access tokens (including authorization | server is authorized to provide access tokens (including authorization | |||
| information) about the resource server to the client, and that | information) about the resource server to the client and that | |||
| this authorization information about the authorization server is still valid.</l | this authorization information about the authorization server is still | |||
| i> | valid.</li> | |||
| <li>Also, the authorization server MUST securely have obtained keying | <li>Also, the authorization server <bcp14>MUST</bcp14> securely have o | |||
| material for the client, and obtained authorization rules approved | btained keying | |||
| by the resource owner (RO) concerning the client and the resource | material for the client and obtained authorization rules approved | |||
| server that relate to this keying material.</li> | by the resource owner (RO) concerning the client and the resource | |||
| server that relate to this keying material.</li> | ||||
| </ul> | </ul> | |||
| <t>The client and the authorization server MUST use their respective | <t>The client and the authorization server <bcp14>MUST</bcp14> use their | |||
| keying material for all exchanged messages. How the security | respective | |||
| association between the client and the authorization server is | keying material for all exchanged messages. How the security | |||
| bootstrapped is not part of this document. The client and the | association between the client and the authorization server is | |||
| authorization server must ensure the confidentiality, integrity and | bootstrapped is not part of this document. The client and the | |||
| authenticity of all exchanged messages within the ACE protocol.</t> | authorization server must ensure the confidentiality, integrity, and | |||
| authenticity of all exchanged messages within the ACE protocol.</t> | ||||
| <t><xref target="as-commsec" format="default"/> specifies how communicat ion with the authorization server is secured.</t> | <t><xref target="as-commsec" format="default"/> specifies how communicat ion with the authorization server is secured.</t> | |||
| </section> | </section> | |||
| <section anchor="rpk-mode" numbered="true" toc="default"> | <section anchor="rpk-mode" numbered="true" toc="default"> | |||
| <name>Raw Public Key Mode</name> | <name>Raw Public Key Mode</name> | |||
| <t>When the client uses raw public key authentication, the procedure is as | <t>When the client uses raw public key authentication, the procedure is as | |||
| described in the following.</t> | described in the following.</t> | |||
| <section anchor="access-token-retrieval-from-the-authorization-server" n umbered="true" toc="default"> | <section anchor="access-token-retrieval-from-the-authorization-server" n umbered="true" toc="default"> | |||
| <name>Access Token Retrieval from the Authorization Server</name> | <name>Access Token Retrieval from the Authorization Server</name> | |||
| <t>After the client and the authorization server mutually authenticate d each other and validated each | <t>After the client and the authorization server mutually authenticate d each other and validated each | |||
| other's authorization, the client sends a token request to the authorization ser ver's token endpoint. | other's authorization, the client sends a token request to the authorization ser ver's token endpoint. | |||
| The client MUST add a <tt>req_cnf</tt> object carrying either its raw public key | The client <bcp14>MUST</bcp14> add a <tt>req_cnf</tt> object carrying either its raw public key | |||
| or a unique identifier for a public key that it has previously made | or a unique identifier for a public key that it has previously made | |||
| known to the authorization server. It is RECOMMENDED that | known to the authorization server. It is <bcp14>RECOMMENDED</bcp14> that | |||
| the client uses DTLS with the same keying material to secure the | the client uses DTLS with the same keying material to secure the | |||
| communication with the authorization server, proving possession of the key | communication with the authorization server, proving possession of the key | |||
| as part of the token request. Other mechanisms for proving possession of | as part of the token request. Other mechanisms for proving possession of | |||
| the key may be defined in the future.</t> | the key may be defined in the future.</t> | |||
| <t>An example access token request from the client to the authorizatio n | <t>An example access token request from the client to the authorizatio n | |||
| server is depicted in <xref target="rpk-authorization-message-example" format="d efault"/>.</t> | server is depicted in <xref target="rpk-authorization-message-example" format="d efault"/>.</t> | |||
| <figure anchor="rpk-authorization-message-example"> | <figure anchor="rpk-authorization-message-example"> | |||
| <name>Access Token Request Example for RPK Mode</name> | <name>Access Token Request Example for RPK Mode</name> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | <sourcecode type="cbor-diag"><![CDATA[ | |||
| POST coaps://as.example.com/token | POST coaps://as.example.com/token | |||
| Content-Format: application/ace+cbor | Content-Format: application/ace+cbor | |||
| Payload: | Payload: | |||
| { | { | |||
| grant_type : client_credentials, | / grant_type / 33 : / client_credentials / 2, | |||
| audience : "tempSensor4711", | / audience / 5 : "tempSensor4711", | |||
| req_cnf : { | / req_cnf / 4 : { | |||
| COSE_Key : { | / COSE_Key / 1 : { | |||
| kty : EC2, | / kty / 1 : / EC2 / 2, | |||
| crv : P-256, | / crv / -1 : / P-256 / 1, | |||
| x : h'e866c35f4c3c81bb96a1...', | / x / -2 : h'e866c35f4c3c81bb96a1/.../', | |||
| y : h'2e25556be097c8778a20...' | / y / -3 : h'2e25556be097c8778a20/.../' | |||
| } | } | |||
| } | } | |||
| } | } | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure> | </figure> | |||
| <t>The example shows an access token request for the resource identifi ed | <t>The example shows an access token request for the resource identifi ed | |||
| by the string "tempSensor4711" on the authorization server | by the string "tempSensor4711" on the authorization server | |||
| using a raw public key.</t> | using a raw public key.</t> | |||
| <t>The authorization server MUST check if the client that it communica tes | <t>The authorization server <bcp14>MUST</bcp14> check if the client th at it communicates | |||
| with is associated with the RPK in the <tt>req_cnf</tt> parameter before | with is associated with the RPK in the <tt>req_cnf</tt> parameter before | |||
| issuing an access token to it. If the authorization server determines | issuing an access token to it. If the authorization server determines | |||
| that the request is to be authorized according to the respective | that the request is to be authorized according to the respective | |||
| authorization rules, it generates an access token response for the | authorization rules, it generates an access token response for the | |||
| client. The access token MUST be bound to the RPK of the client by | client. The access token <bcp14>MUST</bcp14> be bound to the RPK of the client b y | |||
| means of the <tt>cnf</tt> claim.</t> | means of the <tt>cnf</tt> claim.</t> | |||
| <t>The response MUST contain an <tt>ace_profile</tt> parameter if | <t>The response <bcp14>MUST</bcp14> contain an <tt>ace_profile</tt> pa | |||
| the<tt>ace_profile</tt> parameter in the request is empty, and MAY contain | rameter if | |||
| this parameter otherwise (see Section 5.8.2 of | the <tt>ace_profile</tt> parameter in the request is empty and <bcp14>M | |||
| <xref target="I-D.ietf-ace-oauth-authz" format="default"/>). This parameter is s | AY</bcp14> | |||
| et to <tt>coap_dtls</tt> to | contain this parameter otherwise (see | |||
| indicate that this profile MUST be used for communication between the | <xref target="RFC9200" sectionFormat="of" section="5.8.2"/>). This para | |||
| client and the resource server. The response | meter is set | |||
| also contains an access token with information for the resource server | to <tt>coap_dtls</tt> to | |||
| about the client's public key. The authorization server MUST return in | indicate that this profile <bcp14>MUST</bcp14> be used for communicatio | |||
| its response the parameter <tt>rs_cnf</tt> unless it is certain that the | n between the | |||
| client already knows the public key of the resource server. The | client and the resource server. The response | |||
| authorization server MUST ascertain that the RPK specified in <tt>rs_cnf</tt> | also contains an access token with information for the resource server | |||
| belongs to the resource server that the client wants to communicate | about the client's public key. The authorization server <bcp14>MUST</bc | |||
| with. The authorization server MUST protect the integrity of the | p14> return | |||
| access token such that the resource server can detect unauthorized | in its response the parameter <tt>rs_cnf</tt> unless it is certain that | |||
| changes. If the access token contains confidential data, the | the | |||
| authorization server MUST also protect the confidentiality of the | client already knows the public key of the resource server. The | |||
| access token.</t> | authorization server <bcp14>MUST</bcp14> ascertain that the RPK specifi | |||
| <t>The client MUST ascertain that the access token response belongs to | ed in | |||
| a certain | <tt>rs_cnf</tt> belongs to the resource server that the client wants to | |||
| previously sent access token request, as the request may specify the | communicate | |||
| resource server with which the client wants to communicate.</t> | with. The authorization server <bcp14>MUST</bcp14> protect the integrit | |||
| y of the | ||||
| access token such that the resource server can detect unauthorized | ||||
| changes. If the access token contains confidential data, the | ||||
| authorization server <bcp14>MUST</bcp14> also protect the confidentiali | ||||
| ty of the | ||||
| access token.</t> | ||||
| <t>The client <bcp14>MUST</bcp14> ascertain that the access token resp | ||||
| onse belongs | ||||
| to a certain, previously sent access token request, as the request may | ||||
| specify the | ||||
| resource server with which the client wants to communicate.</t> | ||||
| <t>An example access token response from the authorization server to t he client | <t>An example access token response from the authorization server to t he client | |||
| is depicted in <xref target="rpk-authorization-response-example" format="default | is depicted in <xref target="rpk-authorization-response-example" | |||
| "/>. Here, the | format="default"/>. Here, the | |||
| contents of the <tt>access_token</tt> claim have been truncated to improve | contents of the <tt>access_token</tt> claim have been truncated to impr | |||
| readability. The response comprises access information for the client | ove | |||
| that contains the server's public key in the <tt>rs_cnf</tt> parameter. | readability. For the client, the response comprises Access Information | |||
| Caching proxies process the Max-Age option in the CoAP response which | that contains the server's public key in the <tt>rs_cnf</tt> parameter. | |||
| has a default value of 60 seconds (Section 5.6.1 of <xref target="RFC7252" forma | Caching proxies process the Max-Age option in the CoAP response, which | |||
| t="default"/>). | has a default value of 60 seconds (<xref target="RFC7252" sectionFormat | |||
| The authorization server SHOULD | ="of" | |||
| adjust the Max-Age option such that it does not exceed the | section="5.6.1"/>). | |||
| <tt>expires_in</tt> parameter to avoid stale responses.</t> | The authorization server <bcp14>SHOULD</bcp14> | |||
| adjust the Max-Age option such that it does not exceed the | ||||
| <tt>expires_in</tt> parameter to avoid stale responses.</t> | ||||
| <figure anchor="rpk-authorization-response-example"> | <figure anchor="rpk-authorization-response-example"> | |||
| <name>Access Token Response Example for RPK Mode</name> | <name>Access Token Response Example for RPK Mode</name> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | <sourcecode type="cbor-diag"><![CDATA[ | |||
| 2.01 Created | 2.01 Created | |||
| Content-Format: application/ace+cbor | Content-Format: application/ace+cbor | |||
| Max-Age: 3560 | Max-Age: 3560 | |||
| Payload: | Payload: | |||
| { | { | |||
| access_token : b64'SlAV32hkKG... | / access_token / 1 : b64'SlAV32hk'/... | |||
| (remainder of CWT omitted for brevity; | (remainder of CWT omitted for brevity; | |||
| CWT contains the client's RPK in the cnf claim)', | CWT contains the client's RPK in the cnf claim)/, | |||
| expires_in : 3600, | / expires_in / 2 : 3600, | |||
| rs_cnf : { | / rs_cnf / 41 : { | |||
| COSE_Key : { | / COSE_Key / 1 : { | |||
| kty : EC2, | / kty / 1 : / EC2 / 2, | |||
| crv : P-256, | / crv / -1 : / P-256 / 1, | |||
| x : h'd7cc072de2205bdc1537...', | / x / -2 : h'd7cc072de2205bdc1537/.../', | |||
| y : h'f95e1d4b851a2cc80fff...' | / y / -3 : h'f95e1d4b851a2cc80fff/.../' | |||
| } | } | |||
| } | } | |||
| } | } | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure> | </figure> | |||
| </section> | </section> | |||
| <section anchor="rpk-dtls-channel" numbered="true" toc="default"> | <section anchor="rpk-dtls-channel" numbered="true" toc="default"> | |||
| <name>DTLS Channel Setup Between Client and Resource Server</name> | <name>DTLS Channel Setup between the Client and Resource Server</name> | |||
| <t>Before the client initiates the DTLS handshake with the resource | <t>Before the client initiates the DTLS handshake with the resource | |||
| server, the client MUST send a <tt>POST</tt> request containing the obtained | server, the client <bcp14>MUST</bcp14> send a <tt>POST</tt> request containing t he obtained | |||
| access token to the authz-info resource hosted by the resource | access token to the authz-info resource hosted by the resource | |||
| server. After the client receives a confirmation that the resource | server. After the client receives a confirmation that the resource | |||
| server has accepted the access token, it proceeds to establish a | server has accepted the access token, it proceeds to establish a | |||
| new DTLS channel with the resource server. The client MUST use its | new DTLS channel with the resource server. The client <bcp14>MUST</bcp14> use i ts | |||
| correct public key in the DTLS handshake. If the authorization server | correct public key in the DTLS handshake. If the authorization server | |||
| has specified a <tt>cnf</tt> field in the access token response, the client | has specified a <tt>cnf</tt> field in the access token response, the client | |||
| MUST use this key. Otherwise, the client MUST use the public key that | <bcp14>MUST</bcp14> use this key. Otherwise, the client <bcp14>MUST</bcp14> use the public key that | |||
| it specified in the <tt>req_cnf</tt> of the access token request. The client | it specified in the <tt>req_cnf</tt> of the access token request. The client | |||
| MUST specify this public key in the SubjectPublicKeyInfo structure of | <bcp14>MUST</bcp14> specify this public key in the SubjectPublicKeyInfo structur | |||
| the DTLS handshake as described in <xref target="RFC7250" format="default"/>.</t | e of | |||
| > | the DTLS handshake, as described in <xref target="RFC7250" format="default"/>.</ | |||
| t> | ||||
| <t>If the client does not have the keying material belonging to the | <t>If the client does not have the keying material belonging to the | |||
| public key, the client MAY try to send an access token request to the | public key, the client <bcp14>MAY</bcp14> try to send an access token request to | |||
| AS where it specifies its public key in the <tt>req_cnf</tt> parameter. If | the | |||
| AS, where the client specifies its public key in the <tt>req_cnf</tt> parameter. | ||||
| If | ||||
| the AS still specifies a public key in the response that the client | the AS still specifies a public key in the response that the client | |||
| does not have, the client SHOULD re-register with the authorization | does not have, the client <bcp14>SHOULD</bcp14> re-register with the authorizati on | |||
| server to establish a new client public key. This process is out of | server to establish a new client public key. This process is out of | |||
| scope for this document.</t> | scope for this document.</t> | |||
| <t>To be consistent with <xref target="RFC7252" format="default"/>, wh ich allows for shortened MAC tags | <t>To be consistent with <xref target="RFC7252" format="default"/>, wh ich allows for shortened Message Authentication Code (MAC) tags | |||
| in constrained environments, | in constrained environments, | |||
| an implementation that supports the RPK mode of this profile MUST at | an implementation that supports the RPK mode of this profile <bcp14>MUST</bcp14> at | |||
| least support the cipher suite | least support the cipher suite | |||
| TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 <xref target="RFC7251" format="default"/>. | TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 <xref target="RFC7251" format="default"/>. | |||
| As discussed in <xref target="RFC7748" format="default"/>, new ECC | As discussed in <xref target="RFC7748" format="default"/>, new Elliptic Curve Cr yptography (ECC) | |||
| curves have been defined recently that are considered superior to | curves have been defined recently that are considered superior to | |||
| the so-called NIST curves. Implementations of this profile therefore | the so-called NIST curves. Implementations of this profile <bcp14>MUST</bcp14> | |||
| MUST implement support for curve25519 (cf. <xref target="RFC8032" format="defa | therefore | |||
| ult"/>, <xref target="RFC8422" format="default"/>) | implement support for curve25519 (cf. <xref target="RFC8032" format="defa | |||
| as this curve said to be efficient and less dangerous | ult"/>, <xref target="RFC8422" format="default"/>), | |||
| regarding implementation errors than the secp256r1 curve mandated in | as this curve is said to be efficient and less dangerous, | |||
| regarding implementation errors, than the secp256r1 curve mandated in | ||||
| <xref target="RFC7252" format="default"/>.</t> | <xref target="RFC7252" format="default"/>.</t> | |||
| <t>The resource server MUST check if the access token is still valid, if | <t>The resource server <bcp14>MUST</bcp14> check if the access token i s still valid, if | |||
| the resource server is the intended destination (i.e., the audience) | the resource server is the intended destination (i.e., the audience) | |||
| of the token, and if the token was issued by an authorized | of the token, and if the token was issued by an authorized | |||
| authorization server (see also section 5.10.1.1 of | authorization server (see also | |||
| <xref target="I-D.ietf-ace-oauth-authz" format="default"/>). | <xref target="RFC9200" sectionFormat="of" section="5.10.1.1"/>). | |||
| The access token is constructed by the | The access token is constructed by the | |||
| authorization server such that the resource server can associate the | authorization server such that the resource server can associate the | |||
| access token with the Client's public key. The <tt>cnf</tt> claim MUST | access token with the client's public key. The <tt>cnf</tt> claim <bcp14>MUST</ bcp14> | |||
| contain either the client's RPK or, if the key is already known by the | contain either the client's RPK or, if the key is already known by the | |||
| resource server (e.g., from previous communication), a reference to | resource server (e.g., from previous communication), a reference to | |||
| this key. If the authorization server has no certain knowledge that | this key. If the authorization server has no certain knowledge that | |||
| the Client's key is already known to the resource server, the Client's | the client's key is already known to the resource server, the client's | |||
| public key MUST be included in the access token's <tt>cnf</tt> parameter. If | public key <bcp14>MUST</bcp14> be included in the access token's <tt>cnf</tt> pa | |||
| rameter. If | ||||
| CBOR web tokens <xref target="RFC8392" format="default"/> are used (as recommend ed in | CBOR web tokens <xref target="RFC8392" format="default"/> are used (as recommend ed in | |||
| <xref target="I-D.ietf-ace-oauth-authz" format="default"/>), keys MUST be encode | <xref target="RFC9200" format="default"/>), keys <bcp14>MUST</bcp14> be encoded | |||
| d as specified in | as specified in | |||
| <xref target="RFC8747" format="default"/>. A resource server MUST have the capac | <xref target="RFC8747" format="default"/>. A resource server <bcp14>MUST</bcp14> | |||
| ity to store one | have the capacity to store one | |||
| access token for every proof-of-possession key of every authorized client.</t> | access token for every proof-of-possession key of every authorized client.</t> | |||
| <t>The raw public key used in the DTLS handshake with the client MUST | <t>The raw public key used in the DTLS handshake with the client <bcp1 4>MUST</bcp14> | |||
| belong to the resource server. If the resource server has several raw | belong to the resource server. If the resource server has several raw | |||
| public keys, it needs to determine which key to use. The authorization | public keys, it needs to determine which key to use. The authorization | |||
| server can help with this decision by including a <tt>cnf</tt> parameter in | server can help with this decision by including a <tt>cnf</tt> parameter in | |||
| the access token that is associated with this communication. In this | the access token that is associated with this communication. In this | |||
| case, the resource server MUST use the information from the <tt>cnf</tt> | case, the resource server <bcp14>MUST</bcp14> use the information from the <tt>c nf</tt> | |||
| field to select the proper keying material.</t> | field to select the proper keying material.</t> | |||
| <t>Thus, the handshake only finishes if the client and the resource | <t>Thus, the handshake only finishes if the client and the resource | |||
| server are able to use their respective keying material.</t> | server are able to use their respective keying material.</t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="psk-mode" numbered="true" toc="default"> | <section anchor="psk-mode" numbered="true" toc="default"> | |||
| <name>PreSharedKey Mode</name> | <name>Pre-shared Key Mode</name> | |||
| <t>When the client uses pre-shared key authentication, the procedure is | <t>When the client uses pre-shared key authentication, the procedure is | |||
| as described in the following.</t> | as described in the following.</t> | |||
| <section anchor="access-token-retrieval-from-the-authorization-server-1" numbered="true" toc="default"> | <section anchor="access-token-retrieval-from-the-authorization-server-1" numbered="true" toc="default"> | |||
| <name>Access Token Retrieval from the Authorization Server</name> | <name>Access Token Retrieval from the Authorization Server</name> | |||
| <t>To retrieve an access token for the resource that the client wants to | <t>To retrieve an access token for the resource that the client wants to | |||
| access, the client MAY include a <tt>cnf</tt> object carrying an identifier | access, the client <bcp14>MAY</bcp14> include a <tt>req_cnf</tt> object carrying an identifier | |||
| for a symmetric key in its access token request to the authorization | for a symmetric key in its access token request to the authorization | |||
| server. This identifier can be used by the authorization server to | server. This identifier can be used by the authorization server to | |||
| determine the shared secret to construct the proof-of-possession | determine the shared secret to construct the proof-of-possession | |||
| token. The authorization server MUST check if the identifier refers | token. The authorization server <bcp14>MUST</bcp14> check if the identifier ref ers | |||
| to a symmetric key that was previously generated by the authorization | to a symmetric key that was previously generated by the authorization | |||
| server as a shared secret for the communication between this client | server as a shared secret for the communication between this client | |||
| and the resource server. If no such symmetric key was found, the | and the resource server. If no such symmetric key was found, the | |||
| authorization server MUST generate a new symmetric key that is | authorization server <bcp14>MUST</bcp14> generate a new symmetric key that is | |||
| returned in its response to the client.</t> | returned in its response to the client.</t> | |||
| <t>The authorization server MUST determine the authorization rules for | <t>The authorization server <bcp14>MUST</bcp14> determine the authoriz | |||
| the client it communicates with as defined by the resource owner and | ation rules | |||
| generate the access token accordingly. If the authorization server | for the client it communicates with, as defined by the resource owner, | |||
| authorizes the client, it returns an AS-to-Client response. If the | and | |||
| <tt>ace_profile</tt> parameter is present, it is set to <tt>coap_dtls</tt>. The | generate the access token accordingly. If the authorization server | |||
| authorization server MUST ascertain that the access token is generated | authorizes the client, it returns an AS-to-client response. If the | |||
| for the resource server that the client wants to communicate | <tt>ace_profile</tt> parameter is present, it is set to <tt>coap_dtls</ | |||
| with. Also, the authorization server MUST protect the integrity of the | tt>. The | |||
| access token to ensure that the resource server can detect | authorization server <bcp14>MUST</bcp14> ascertain that the access toke | |||
| unauthorized changes. If the token contains confidential data such as | n is | |||
| the symmetric key, the confidentiality of the token MUST also be | generated for the resource server that the client wants to communicate | |||
| protected. Depending on the requested token type and algorithm in the | with. Also, the authorization server <bcp14>MUST</bcp14> protect the in | |||
| access token request, the authorization server adds access Information | tegrity of | |||
| to the response that provides the client with sufficient information | the access token to ensure that the resource server can detect | |||
| to setup a DTLS channel with the resource server. The authorization | unauthorized changes. If the token contains confidential data, such as | |||
| server adds a <tt>cnf</tt> parameter to the access information carrying a | the symmetric key, the confidentiality of the token <bcp14>MUST</bcp14> | |||
| <tt>COSE_Key</tt> object that informs the client about the shared secret that | also be | |||
| is to be used between the client and the resource server. To convey | protected. Depending on the requested token type and algorithm in the | |||
| the same secret to the resource server, the authorization server | access token request, the authorization server adds Access Information | |||
| can include it directly in the access token by means of the <tt>cnf</tt> | to the response that provides the client with sufficient information | |||
| claim or provide sufficient information to enable the resource | to set up a DTLS channel with the resource server. The authorization | |||
| server to derive the shared secret from the access token. As an | server adds a <tt>cnf</tt> parameter to the Access Information carrying | |||
| alternative, the resource server MAY use token introspection to | a | |||
| retrieve the keying material for this access token directly from the | <tt>COSE_Key</tt> object that informs the client about the shared secre | |||
| authorization server.</t> | t that | |||
| is to be used between the client and the resource server. To convey | ||||
| the same secret to the resource server, the authorization server | ||||
| can include it directly in the access token by means of the <tt>cnf</tt | ||||
| > | ||||
| claim or provide sufficient information to enable the resource | ||||
| server to derive the shared secret from the access token. As an | ||||
| alternative, the resource server <bcp14>MAY</bcp14> use token introspec | ||||
| tion to | ||||
| retrieve the keying material for this access token directly from the | ||||
| authorization server.</t> | ||||
| <t>An example access token request for an access token with a symmetri c | <t>An example access token request for an access token with a symmetri c | |||
| proof-of-possession key is illustrated in <xref target="at-request" format="defa ult"/>.</t> | proof-of-possession key is illustrated in <xref target="at-request" format="defa ult"/>.</t> | |||
| <figure anchor="at-request"> | <figure anchor="at-request"> | |||
| <name>Example Access Token Request, (implicit) symmetric PoP-key</na | <name>Example Access Token Request, (Implicit) Symmetric PoP Key</na | |||
| me> | me> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | <sourcecode type="cbor-diag"><![CDATA[ | |||
| POST coaps://as.example.com/token | POST coaps://as.example.com/token | |||
| Content-Format: application/ace+cbor | Content-Format: application/ace+cbor | |||
| Payload: | Payload: | |||
| { | { | |||
| audience : "smokeSensor1807", | / audience / 5 : "smokeSensor1807" | |||
| } | } | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure> | </figure> | |||
| <t>A corresponding example access token response is illustrated in | <t>A corresponding example access token response is illustrated in | |||
| <xref target="at-response" format="default"/>. In this example, the authorizati on server returns a | <xref target="at-response" format="default"/>. In this example, the authorizati on server returns a | |||
| 2.01 response containing a new access token (truncated to improve | 2.01 response containing a new access token (truncated to improve | |||
| readability) and information for the client, including the symmetric | readability) and information for the client, including the symmetric | |||
| key in the cnf claim. The information is transferred as a CBOR data | key in the <tt>cnf</tt> claim. The information is transferred as a CBOR data | |||
| structure as specified in <xref target="I-D.ietf-ace-oauth-authz" format="defaul | structure as specified in <xref target="RFC9200" format="default"/>.</t> | |||
| t"/>.</t> | ||||
| <!-- msg1 --> | ||||
| <figure anchor="at-response"> | <figure anchor="at-response"> | |||
| <name>Example Access Token Response, symmetric PoP-key</name> | <name>Example Access Token Response, Symmetric PoP Key</name> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | <sourcecode type="cbor-diag"><![CDATA[ | |||
| 2.01 Created | 2.01 Created | |||
| Content-Format: application/ace+cbor | Content-Format: application/ace+cbor | |||
| Max-Age: 85800 | Max-Age: 85800 | |||
| Payload: | Payload: | |||
| { | { | |||
| access_token : h'd08343a10... | / access_token / 1 : h'd08343a1/... | |||
| (remainder of CWT omitted for brevity) | (remainder of CWT omitted for brevity)/', | |||
| token_type : PoP, | / token_type / 34 : / PoP / 2, | |||
| expires_in : 86400, | / expires_in / 2 : 86400, | |||
| profile : coap_dtls, | / ace_profile / 38 : / coap_dtls / 1, | |||
| cnf : { | / cnf / 8 : { | |||
| COSE_Key : { | / COSE_Key / 1 : { | |||
| kty : symmetric, | / kty / 1 : / symmetric / 4, | |||
| kid : h'3d027833fc6267ce', | / kid / 2 : h'3d027833fc6267ce', | |||
| k : h'73657373696f6e6b6579' | / k / -1 : h'73657373696f6e6b6579' | |||
| } | } | |||
| } | } | |||
| } | } | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure> | </figure> | |||
| <t>The access token also comprises a <tt>cnf</tt> claim. This claim us ually | <t>The access token also comprises a <tt>cnf</tt> claim. This claim us ually | |||
| contains a <tt>COSE_Key</tt> object <xref target="RFC8152" format="default"/> th at carries either the symmetric key | contains a <tt>COSE_Key</tt> object <xref target="RFC8152" format="default"/> th at carries either the symmetric key | |||
| itself or a key identifier that can be used by the resource server to | itself or a key identifier that can be used by the resource server to | |||
| determine the secret key it shares with the client. If the access | determine the secret key it shares with the client. If the access | |||
| token carries a symmetric key, the access token MUST be encrypted | token carries a symmetric key, the access token <bcp14>MUST</bcp14> be encrypted | |||
| using a <tt>COSE_Encrypt0</tt> structure (see section 7.1 of <xref target="RFC83 | using a <tt>COSE_Encrypt0</tt> structure (see <xref target="RFC8392" sectionForm | |||
| 92" format="default"/>). The | at="of" section="7.1"/>). The | |||
| authorization server MUST use | authorization server <bcp14>MUST</bcp14> use | |||
| the keying material shared with the resource server to encrypt the | the keying material shared with the resource server to encrypt the | |||
| token.</t> | token.</t> | |||
| <t>The <tt>cnf</tt> structure in the access token is provided in <xref target="kdf-cnf" format="default"/>.</t> | <t>The <tt>cnf</tt> structure in the access token is provided in <xref target="kdf-cnf" format="default"/>.</t> | |||
| <figure anchor="kdf-cnf"> | <figure anchor="kdf-cnf"> | |||
| <name>Access Token without Keying Material</name> | <name>Access Token without Keying Material</name> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | <sourcecode type="cbor-diag"><![CDATA[ | |||
| cnf : { | / cnf / 8 : { | |||
| COSE_Key : { | / COSE_Key / 1 : { | |||
| kty : symmetric, | / kty / 1 : / symmetric / 4, | |||
| kid : h'3d027833fc6267ce' | / kid / 2 : h'3d027833fc6267ce' | |||
| } | } | |||
| } | } | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure> | </figure> | |||
| <t>A response that declines any operation on the requested resource is | <t>A response that declines any operation on the requested resource is | |||
| constructed according to Section 5.2 of <xref target="RFC6749" format="default"/ | constructed according to <xref target="RFC6749" sectionFormat="of" section="5.2" | |||
| >, | /> | |||
| (cf. Section 5.8.3. of <xref target="I-D.ietf-ace-oauth-authz" format="default"/ | (cf. <xref target="RFC9200" sectionFormat="of" section="5.8.3"/>). <xref ta | |||
| >). <xref target="token-reject" format="default"/> | rget="token-reject" format="default"/> | |||
| shows an example for a request that has been rejected due to invalid | shows an example for a request that has been rejected due to invalid | |||
| request parameters.</t> | request parameters.</t> | |||
| <figure anchor="token-reject"> | <figure anchor="token-reject"> | |||
| <name>Example Access Token Response With Reject</name> | <name>Example Access Token Response with Reject</name> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | <sourcecode type="cbor-diag"><![CDATA[ | |||
| 4.00 Bad Request | 4.00 Bad Request | |||
| Content-Format: application/ace+cbor | Content-Format: application/ace+cbor | |||
| Payload: | Payload: | |||
| { | { | |||
| error : invalid_request | / error / 30 : / invalid_request / 1 | |||
| } | } | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure> | </figure> | |||
| <t>The method for how the resource server determines the symmetric key | <t>The method for how the resource server determines the symmetric key | |||
| from an access token containing only a key identifier is | from an access token containing only a key identifier is | |||
| application-specific; the remainder of this section provides one | application specific; the remainder of this section provides one | |||
| example.</t> | example.</t> | |||
| <t>The authorization server and the resource server are assumed to sha re | <t>The authorization server and the resource server are assumed to sha re | |||
| a key derivation key used to derive the symmetric key shared with the | a key derivation key used to derive the symmetric key shared with the | |||
| client from the key identifier in the access token. The key | client from the key identifier in the access token. The key | |||
| derivation key may be derived from some other secret key shared | derivation key may be derived from some other secret key shared | |||
| between the authorization server and the resource server. This key | between the authorization server and the resource server. This key | |||
| needs to be securely stored and processed in the same way as the key | needs to be securely stored and processed in the same way as the key | |||
| used to protect the communication between the authorization server and | used to protect the communication between the authorization server and | |||
| the resource server.</t> | the resource server.</t> | |||
| <t>Knowledge of the symmetric key shared with the client must not reve al | <t>Knowledge of the symmetric key shared with the client must not reve al | |||
| any information about the key derivation key or other secret keys | any information about the key derivation key or other secret keys | |||
| shared between the authorization server and resource server.</t> | shared between the authorization server and resource server.</t> | |||
| <t>In order to generate a new symmetric key to be used by client and | <t>In order to generate a new symmetric key to be used by the client a nd | |||
| resource server, the authorization server generates a new key | resource server, the authorization server generates a new key | |||
| identifier which MUST be unique among all key identifiers used by the | identifier that <bcp14>MUST</bcp14> be unique among all key identifiers used by the | |||
| authorization server for this resource server. The authorization server then use s the key | authorization server for this resource server. The authorization server then use s the key | |||
| derivation key shared with the resource server to derive the symmetric | derivation key shared with the resource server to derive the symmetric | |||
| key as specified below. Instead of providing the keying material in | key, as specified below. Instead of providing the keying material in | |||
| the access token, the authorization server includes the key identifier | the access token, the authorization server includes the key identifier | |||
| in the <tt>kid</tt> parameter, see <xref target="kdf-cnf" format="default"/>. Th is key identifier enables | in the <tt>kid</tt> parameter (see <xref target="kdf-cnf" format="default"/>). T his key identifier enables | |||
| the resource server to calculate the symmetric key used for the | the resource server to calculate the symmetric key used for the | |||
| communication with the client using the key derivation key and a KDF | communication with the client using the key derivation key and a key derivation | |||
| to be defined by the application, for example HKDF-SHA-256. The key | function (KDF) | |||
| identifier picked by the authorization server MUST be unique for | to be defined by the application, for example, HKDF-SHA-256. The key | |||
| identifier picked by the authorization server <bcp14>MUST</bcp14> be unique for | ||||
| each access token where a unique symmetric key is required.</t> | each access token where a unique symmetric key is required.</t> | |||
| <t>In this example, HKDF consists of the composition of the HKDF-Extra ct | <t>In this example, the HMAC-based key derivation function (HKDF) cons ists of the composition of the HKDF-Extract | |||
| and HKDF-Expand steps <xref target="RFC5869" format="default"/>. The symmetric k ey is derived from the | and HKDF-Expand steps <xref target="RFC5869" format="default"/>. The symmetric k ey is derived from the | |||
| key identifier, the key derivation key and other data:</t> | key identifier, the key derivation key, and other data:</t> | |||
| <t>OKM = HKDF(salt, IKM, info, L),</t> | <t indent="3">OKM = HKDF(salt, IKM, info, L),</t> | |||
| <t>where:</t> | <t>where:</t> | |||
| <ul spacing="normal"> | <ul spacing="normal"> | |||
| <li>OKM, the output keying material, is the derived symmetric key</l i> | <li>OKM, the output keying material, is the derived symmetric key</l i> | |||
| <li>salt is the empty byte string</li> | <li>salt is the empty byte string</li> | |||
| <li>IKM, the input keying material, is the key derivation key as def | <li>IKM, the input keying material, is the key derivation key, as de | |||
| ined above</li> | fined | |||
| <li>info is the serialization of a CBOR array consisting of (<xref t | above</li> | |||
| arget="RFC8610" format="default"/>):</li> | <li><t>info is the serialization of a CBOR array consisting of <xref | |||
| </ul> | target="RFC8610" format="default"/>:</t> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | <sourcecode type="cddl"><![CDATA[ | |||
| info = [ | info = [ | |||
| type : tstr, | type : tstr, | |||
| L : uint, | L : uint, | |||
| access_token: bytes | access_token : bytes | |||
| ] | ] | |||
| ]]></artwork> | ]]></sourcecode> | |||
| <t>where:</t> | <t>where:</t> | |||
| <ul spacing="normal"> | <ul> | |||
| <li>type is set to the constant text string "ACE-CoAP-DTLS-key-deriv | <li>type is set to the constant text string "ACE-CoAP-DTLS-key-deriv | |||
| ation",</li> | ation"</li> | |||
| <li>L is the size of the symmetric key in bytes,</li> | <li>L is the size of the symmetric key in bytes</li> | |||
| <li>access_token is the content of the <tt>access_token</tt> field a | <li>access_token is the content of the <tt>access_token</tt> field, | |||
| s | as | |||
| transferred from the authorization server to the resource server.</li> | transferred from the authorization server to the resource server.</li | |||
| > | ||||
| </ul></li> | ||||
| </ul> | </ul> | |||
| <t>All CBOR data types are encoded in CBOR using preferred serializati on | <t>All CBOR data types are encoded in CBOR using preferred serializati on | |||
| and deterministic encoding as specified in Section 4 of <xref target="RFC8949" f | and deterministic encoding, as specified in <xref target="RFC8949" | |||
| ormat="default"/>. | sectionFormat="of" section="4"/>. | |||
| This implies in particular that the <tt>type</tt> and <tt>L</tt> components use | In particular, this implies that the <tt>type</tt> and <tt>L</tt> compo | |||
| the | nents use the | |||
| minimum length encoding. The content of the <tt>access_token</tt> field is | minimum length encoding. The content of the <tt>access_token</tt> field | |||
| treated as opaque data for the purpose of key derivation.</t> | is | |||
| <t>Use of a unique (per resource server) <tt>kid</tt> and the use of a | treated as opaque data for the purpose of key derivation.</t> | |||
| key | <t>Use of a unique (per-resource-server) <tt>kid</tt> and the use of a | |||
| derivation IKM that MUST be unique per authorization server/resource server | key | |||
| pair as specified above will ensure that the derived key is not shared | derivation IKM that <bcp14>MUST</bcp14> be unique | |||
| across multiple clients. However, to provide variation | per AS/RS pair, as specified above, will ensure that | |||
| in the derived key across different tokens used by the same client, it | the derived key is not shared across multiple clients. However, to pro | |||
| is additionally RECOMMENDED to include the "iat" claim and either the | vide | |||
| "exp" or "exi" claims in the access token.</t> | variation in the derived key across different tokens used by the same c | |||
| lient, it | ||||
| is additionally <bcp14>RECOMMENDED</bcp14> to include the <tt>iat</tt> | ||||
| claim and either the | ||||
| <tt>exp</tt> or <tt>exi</tt> claims in the access token.</t> | ||||
| </section> | </section> | |||
| <section anchor="psk-dtls-channel" numbered="true" toc="default"> | <section anchor="psk-dtls-channel" numbered="true" toc="default"> | |||
| <name>DTLS Channel Setup Between Client and Resource Server</name> | <name>DTLS Channel Setup between the Client and Resource Server</name> | |||
| <t>When a client receives an access token response from an authorizati on | <t>When a client receives an access token response from an authorizati on | |||
| server, the client MUST check if the access token response is bound to | server, the client <bcp14>MUST</bcp14> check if the access token response is bou | |||
| a certain previously sent access token request, as the request may | nd to | |||
| a certain, previously sent access token request, as the request may | ||||
| specify the resource server with which the client wants to | specify the resource server with which the client wants to | |||
| communicate.</t> | communicate.</t> | |||
| <t>The client checks if the payload of the access token response conta ins | <t>The client checks if the payload of the access token response conta ins | |||
| an <tt>access_token</tt> parameter and a <tt>cnf</tt> parameter. With this | an <tt>access_token</tt> parameter and a <tt>cnf</tt> parameter. With t | |||
| information the client can initiate the establishment of a new DTLS | his | |||
| channel with a resource server. To use DTLS with pre-shared keys, the | information, the client can initiate the establishment of a new DTLS | |||
| client follows the PSK key exchange algorithm specified in Section 2 | channel with a resource server. To use DTLS with pre-shared keys, the | |||
| of <xref target="RFC4279" format="default"/> using the key conveyed in the <tt>c | client follows the PSK key exchange algorithm specified in <xref target | |||
| nf</tt> parameter of the AS | ="RFC4279" | |||
| response as PSK when constructing the premaster secret. To be | sectionFormat="of" section="2"/>, using the key conveyed in the <tt>cnf | |||
| consistent with the recommendations in <xref target="RFC7252" format="default"/> | </tt> | |||
| , a client in the PSK | parameter of the AS response as a PSK when constructing the premaster s | |||
| mode MUST support the cipher suite TLS_PSK_WITH_AES_128_CCM_8 | ecret. To be | |||
| <xref target="RFC6655" format="default"/>.</t> | consistent with the recommendations in <xref target="RFC7252" format="d | |||
| efault"/>, a | ||||
| client in the PSK mode <bcp14>MUST</bcp14> support the cipher suite | ||||
| TLS_PSK_WITH_AES_128_CCM_8 <xref target="RFC6655" format="default"/>.</ | ||||
| t> | ||||
| <t>In PreSharedKey mode, the knowledge of the shared secret by the cli ent | <t>In PreSharedKey mode, the knowledge of the shared secret by the cli ent | |||
| and the resource server is used for mutual authentication between both | and the resource server is used for mutual authentication between both | |||
| peers. Therefore, the resource server must be able to determine the | peers. Therefore, the resource server must be able to determine the | |||
| shared secret from the access token. Following the general ACE | shared secret from the access token. Following the general ACE | |||
| authorization framework, the client can upload the access token to the | authorization framework, the client can upload the access token to the | |||
| resource server's authz-info resource before starting the DTLS | resource server's authz-info resource before starting the DTLS | |||
| handshake. The client then needs to indicate during the DTLS | handshake. The client then needs to indicate during the DTLS | |||
| handshake which previously uploaded access token it intends to use. | handshake which previously uploaded access token it intends to use. | |||
| To do so, it MUST create a <tt>COSE_Key</tt> structure with the <tt>kid</tt> tha | To do so, it <bcp14>MUST</bcp14> create a <tt>COSE_Key</tt> structure w | |||
| t | ith the | |||
| was conveyed in the <tt>rs_cnf</tt> claim in the token response from the | <tt>kid</tt> that was conveyed in the <tt>rs_cnf</tt> claim in the toke | |||
| authorization server and the key type <tt>symmetric</tt>. This structure | n response | |||
| then is included as the only element in the <tt>cnf</tt> structure whose CBOR se | from the authorization server and the key type <tt>symmetric</tt>. Thi | |||
| rialization is | s structure | |||
| used as value for <tt>psk_identity</tt> as shown in <xref target="psk_identity-c | then is included as the only element in the <tt>cnf</tt> structure whos | |||
| nf" format="default"/>.</t> | e CBOR | |||
| serialization is used as value for <tt>psk_identity</tt>, as shown in < | ||||
| xref | ||||
| target="psk_identity-cnf" format="default"/>.</t> | ||||
| <figure anchor="psk_identity-cnf"> | <figure anchor="psk_identity-cnf"> | |||
| <name>Access token containing a single kid parameter</name> | <name>Access Token Containing a Single <tt>kid</tt> Parameter</name> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | <sourcecode type="cbor-diag"><![CDATA[ | |||
| { cnf : { | { / cnf / 8 : { | |||
| COSE_Key : { | / COSE_Key / 1 : { | |||
| kty: symmetric, | / kty / 1 : / symmetric / 4, | |||
| kid : h'3d027833fc6267ce' | / kid / 2 : h'3d027833fc6267ce' | |||
| } | } | |||
| } | } | |||
| } | } | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure> | </figure> | |||
| <t>The actual CBOR serialization for the data structure from | <t>The actual CBOR serialization for the data structure from | |||
| <xref target="psk_identity-cnf" format="default"/> as sequence of bytes in hexad | <xref target="psk_identity-cnf" format="default"/> as a sequence of byt | |||
| ecimal notation will | es in | |||
| be:</t> | hexadecimal notation will be:</t> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | <sourcecode type=""><![CDATA[ | |||
| A1 08 A1 01 A2 01 04 02 48 3D 02 78 33 FC 62 67 CE | A1 08 A1 01 A2 01 04 02 48 3D 02 78 33 FC 62 67 CE | |||
| ]]></artwork> | ]]></sourcecode> | |||
| <t>As an alternative to the access token upload, the client can provid e | <t>As an alternative to the access token upload, the client can provid e | |||
| the most recent access token in the <tt>psk_identity</tt> field of the | the most recent access token in the <tt>psk_identity</tt> field of the | |||
| ClientKeyExchange message. To do so, the client MUST treat the | ClientKeyExchange message. To do so, the client <bcp14>MUST</bcp14> treat the | |||
| contents of the <tt>access_token</tt> field from the AS-to-Client response as | contents of the <tt>access_token</tt> field from the AS-to-client response as | |||
| opaque data as specified in Section 4.2 of <xref target="RFC7925" format="defaul | opaque data, as specified in <xref target="RFC7925" sectionFormat="of" section=" | |||
| t"/> and not perform | 4.2"/>, and not perform | |||
| any re-coding. This allows the resource server to retrieve the shared | any recoding. This allows the resource server to retrieve the shared | |||
| secret directly from the <tt>cnf</tt> claim of the access token.</t> | secret directly from the <tt>cnf</tt> claim of the access token.</t> | |||
| <t>DTLS 1.3 <xref target="RFC9147"/> does not use the ClientKeyExchange message; | ||||
| for DTLS 1.3, | ||||
| the access token is placed in the <tt>identity</tt> field of a <tt>PSKIdentit | ||||
| y</tt> | ||||
| within the <tt>PreSharedKeyExtension</tt> of the <tt>ClientHello</tt>.</t> | ||||
| <t>If a resource server receives a ClientKeyExchange message that | <t>If a resource server receives a ClientKeyExchange message that | |||
| contains a <tt>psk_identity</tt> with a length greater than zero, it MUST | contains a <tt>psk_identity</tt> with a length greater than zero, it <bcp14>MUST | |||
| parse the contents of the <tt>psk_identity</tt> field as CBOR data structure | </bcp14> | |||
| parse the contents of the <tt>psk_identity</tt> field as a CBOR data structure | ||||
| and process the contents as following:</t> | and process the contents as following:</t> | |||
| <ul spacing="normal"> | <ul spacing="normal"> | |||
| <li>If the data contains a <tt>cnf</tt> field with a <tt>COSE_Key</t t> structure with | <li>If the data contains a <tt>cnf</tt> field with a <tt>COSE_Key</t t> structure with | |||
| a <tt>kid</tt>, the resource server continues the DTLS handshake with the | a <tt>kid</tt>, the resource server continues the DTLS handshake with the | |||
| associated key that corresponds to this kid.</li> | associated key that corresponds to this kid.</li> | |||
| <li>If the data comprises additional CWT information, this informati on | <li>If the data comprises additional CWT information, this informati on | |||
| must be stored as an access token for this DTLS association before | must be stored as an access token for this DTLS association before | |||
| continuing with the DTLS handshake.</li> | continuing with the DTLS handshake.</li> | |||
| </ul> | </ul> | |||
| <t>If the contents of the <tt>psk_identity</tt> do not yield sufficien t | <t>If the contents of the <tt>psk_identity</tt> do not yield sufficien t | |||
| information to select a valid access token for the requesting client, | information to select a valid access token for the requesting client, | |||
| the resource server aborts the DTLS handshake with an | the resource server aborts the DTLS handshake with an | |||
| <tt>illegal_parameter</tt> alert.</t> | <tt>illegal_parameter</tt> alert.</t> | |||
| <t>When the resource server receives an access token, it MUST check if | <t>When the resource server receives an access token, it <bcp14>MUST</ bcp14> check if | |||
| the access token is still valid, if the resource server is the | the access token is still valid, if the resource server is the | |||
| intended destination (i.e., the audience of the token), and if the | intended destination (i.e., the audience of the token), and if the | |||
| token was issued by an authorized authorization server. This | token was issued by an authorized authorization server. This | |||
| specification implements access tokens as proof-of-possession tokens. | specification implements access tokens as proof-of-possession tokens. | |||
| Therefore, the access token is bound to a symmetric PoP key | Therefore, the access token is bound to a symmetric PoP key | |||
| that is used as shared secret between the client and the resource | that is used as a shared secret between the client and the resource | |||
| server. A resource server MUST have the capacity to store one | server. A resource server <bcp14>MUST</bcp14> have the capacity to store one | |||
| access token for every proof-of-possession key of every authorized client. | access token for every proof-of-possession key of every authorized client. | |||
| The resource server may use token introspection <xref target="RFC7662" format="d efault"/> on | The resource server may use token introspection <xref target="RFC7662" format="d efault"/> on | |||
| the access token to retrieve more information about the specific | the access token to retrieve more information about the specific | |||
| token. The use of introspection is out of scope for this | token. The use of introspection is out of scope for this | |||
| specification.</t> | specification.</t> | |||
| <t>While the client can retrieve the shared secret from the contents o f | <t>While the client can retrieve the shared secret from the contents o f | |||
| the <tt>cnf</tt> parameter in the AS-to-Client response, the resource server | the <tt>cnf</tt> parameter in the AS-to-client response, the resource server | |||
| uses the information contained in the <tt>cnf</tt> claim of the access token | uses the information contained in the <tt>cnf</tt> claim of the access token | |||
| to determine the actual secret when no explicit <tt>kid</tt> was provided in | to determine the actual secret when no explicit <tt>kid</tt> was provided in | |||
| the <tt>psk_identity</tt> field. If key derivation is used, the <tt>cnf</tt> cla im | the <tt>psk_identity</tt> field. If key derivation is used, the <tt>cnf</tt> cla im | |||
| MUST contain a <tt>kid</tt> parameter to be used by the server as the IKM for | <bcp14>MUST</bcp14> contain a <tt>kid</tt> parameter to be used by the server as | |||
| key derivation as described above.</t> | the IKM for | |||
| key derivation, as described above.</t> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="resource-access" numbered="true" toc="default"> | <section anchor="resource-access" numbered="true" toc="default"> | |||
| <name>Resource Access</name> | <name>Resource Access</name> | |||
| <t>Once a DTLS channel has been established as described in <xref target | <t>Once a DTLS channel has been established as described in either Secti | |||
| ="rpk-mode" format="default"/> | ons <xref target="rpk-mode" format="counter"/> | |||
| or <xref target="psk-mode" format="default"/>, respectively, the client is autho | or <xref target="psk-mode" format="counter"/>, respectively, the client is autho | |||
| rized to access | rized to access | |||
| resources covered by the access token it has uploaded to the | resources covered by the access token it has uploaded to the | |||
| authz-info resource hosted by the resource server.</t> | authz-info resource that is hosted by the resource server.</t> | |||
| <t>With the successful establishment of the DTLS channel, the client and | <t>With the successful establishment of the DTLS channel, the client and | |||
| the resource server have proven that they can use their respective | the resource server have proven that they can use their respective | |||
| keying material. An access token that is bound to the client's keying | keying material. An access token that is bound to the client's keying | |||
| material is associated with the channel. According to Section 5.10.1 of | material is associated with the channel. According to | |||
| <xref target="I-D.ietf-ace-oauth-authz" format="default"/>, there should be only | <xref target="RFC9200" sectionFormat="of" section="5.10.1"/>, there should be on | |||
| one access token | ly one access token | |||
| for each client. New access tokens issued by the authorization server | for each client. New access tokens issued by the authorization server | |||
| SHOULD replace previously issued access tokens for the | <bcp14>SHOULD</bcp14> replace previously issued access tokens for the | |||
| respective client. The resource server therefore needs a common | respective client. The resource server therefore needs a common | |||
| understanding with the authorization server how access tokens are | understanding with the authorization server about how access tokens are | |||
| ordered. The authorization server may, e.g., specify a <tt>cti</tt> claim for | ordered. The authorization server may, e.g., specify a <tt>cti</tt> claim for | |||
| the access token (see Section 5.9.4 of <xref target="I-D.ietf-ace-oauth-authz" f ormat="default"/>) to | the access token (see <xref target="RFC9200" sectionFormat="of" section="5.9.2"/ >) to | |||
| employ a strict order.</t> | employ a strict order.</t> | |||
| <t>Any request that the resource server receives on a DTLS channel that | <t>Any request that the resource server receives on a DTLS channel that | |||
| is tied to an access token via its keying material | is tied to an access token via its keying material | |||
| MUST be checked against the authorization rules that can be determined | <bcp14>MUST</bcp14> be checked against the authorization rules that can be deter mined | |||
| with the access token. The resource server | with the access token. The resource server | |||
| MUST check for every request if the access token is still valid. | <bcp14>MUST</bcp14> check for every request if the access token is still valid. | |||
| If the token has expired, the resource server MUST remove it. | If the token has expired, the resource server <bcp14>MUST</bcp14> remove it. | |||
| Incoming CoAP requests that are not authorized with respect | Incoming CoAP requests that are not authorized with respect | |||
| to any access token that is associated with the client MUST be | to any access token that is associated with the client <bcp14>MUST</bcp14> be | |||
| rejected by the resource server with 4.01 response. The response | rejected by the resource server with a 4.01 response. The response | |||
| SHOULD include AS Request Creation Hints as described in | <bcp14>SHOULD</bcp14> include AS Request Creation Hints, as described in | |||
| Section 5.2 of <xref target="I-D.ietf-ace-oauth-authz" format="default"/>.</t> | <xref target="RFC9200" sectionFormat="of" section="5.2"/>.</t> | |||
| <t>The resource server MUST NOT accept an incoming CoAP request as | <t>The resource server <bcp14>MUST NOT</bcp14> accept an incoming CoAP r | |||
| equest as | ||||
| authorized if any of the following fails:</t> | authorized if any of the following fails:</t> | |||
| <ol spacing="normal" type="1"><li>The message was received on a secure c | <ol spacing="normal" type="1"> | |||
| hannel that has been | <li>The message was received on a secure channel that has been | |||
| established using the procedure defined in this document.</li> | established using the procedure defined in this document.</li> | |||
| <li>The authorization information tied to the sending client is valid. </li> | <li>The authorization information tied to the sending client is valid. </li> | |||
| <li>The request is destined for the resource server.</li> | <li>The request is destined for the resource server.</li> | |||
| <li>The resource URI specified in the request is covered by the | <li>The resource URI specified in the request is covered by the | |||
| authorization information.</li> | authorization information.</li> | |||
| <li>The request method is an authorized action on the resource with | <li>The request method is an authorized action on the resource with | |||
| respect to the authorization information.</li> | respect to the authorization information.</li> | |||
| </ol> | </ol> | |||
| <t>Incoming CoAP requests received on a secure DTLS channel that are not | <t>Incoming CoAP requests received on a secure DTLS channel that are not | |||
| thus authorized MUST be | thus authorized <bcp14>MUST</bcp14> be | |||
| rejected according to Section 5.10.1.1 of <xref target="I-D.ietf-ace-oauth-authz | rejected according to <xref target="RFC9200" | |||
| " format="default"/></t> | sectionFormat="of" section="5.10.2"/>:</t> | |||
| <ol spacing="normal" type="1"><li>with response code 4.03 (Forbidden) wh | <ol spacing="normal" type="1"> | |||
| en the resource URI specified | <li>with response code 4.03 (Forbidden) when the resource URI specified | |||
| in the request is not covered by the authorization information, and</li> | in the request is not covered by the authorization information and</li> | |||
| <li>with response code 4.05 (Method Not Allowed) when the resource URI | <li>with response code 4.05 (Method Not Allowed) when the resource URI | |||
| specified in the request covered by the authorization information but | specified in the request is covered by the authorization information bu | |||
| not the requested action.</li> | t | |||
| not the requested action.</li> | ||||
| </ol> | </ol> | |||
| <t>The client MUST ascertain that its keying material is still valid | <t>The client <bcp14>MUST</bcp14> ascertain that its keying material is still valid | |||
| before sending a request or processing a response. If the client | before sending a request or processing a response. If the client | |||
| recently has updated the access token (see <xref target="update" format="default "/>), it must be | recently has updated the access token (see <xref target="update" format="default "/>), it must be | |||
| prepared that its request is still handled according to the previous | prepared that its request is still handled according to the previous | |||
| authorization rules as there is no strict ordering between access | authorization rules, as there is no strict ordering between access | |||
| token uploads and resource access messages. See also | token uploads and resource access messages. See also | |||
| <xref target="multiple-access-tokens" format="default"/> for a discussion of acc ess token | <xref target="multiple-access-tokens" format="default"/> for a discussion of acc ess token | |||
| processing.</t> | processing.</t> | |||
| <t>If the client gets an error response | <t>If the client gets an error response | |||
| containing AS Request Creation Hints (cf. Section 5.3 of <xref target="I-D.ietf | containing AS Request Creation Hints (cf. <xref target="RFC9200" sectionFor | |||
| -ace-oauth-authz" format="default"/> | mat="of" section="5.3"/>) | |||
| as response to its requests, it SHOULD request a new access token from | as a response to its requests, it <bcp14>SHOULD</bcp14> request a new access tok | |||
| en from | ||||
| the authorization server in order to continue communication with the | the authorization server in order to continue communication with the | |||
| resource server.</t> | resource server.</t> | |||
| <t>Unauthorized requests that have been received over a DTLS session | <t>Unauthorized requests that have been received over a DTLS session | |||
| SHOULD be treated as non-fatal by the resource server, i.e., the DTLS | <bcp14>SHOULD</bcp14> be treated as nonfatal by the resource server, i.e., the D | |||
| session SHOULD be kept alive until the associated access token has | TLS | |||
| session <bcp14>SHOULD</bcp14> be kept alive until the associated access token ha | ||||
| s | ||||
| expired.</t> | expired.</t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="update" numbered="true" toc="default"> | <section anchor="update" numbered="true" toc="default"> | |||
| <name>Dynamic Update of Authorization Information</name> | <name>Dynamic Update of Authorization Information</name> | |||
| <t>Resource servers must only use a new access token to update the | <t>Resource servers must only use a new access token to update the | |||
| authorization information for a DTLS session if the keying material | authorization information for a DTLS session if the keying material | |||
| that is bound to the token is the same that was used in the DTLS | that is bound to the token is the same that was used in the DTLS | |||
| handshake. By associating the access tokens with the identifier of an | handshake. By associating the access tokens with the identifier of an | |||
| existing DTLS session, the authorization information can be updated | existing DTLS session, the authorization information can be updated | |||
| without changing the cryptographic keys for the DTLS communication | without changing the cryptographic keys for the DTLS communication | |||
| between the client and the resource server, i.e. an existing session | between the client and the resource server, i.e., an existing session | |||
| can be used with updated permissions.</t> | can be used with updated permissions.</t> | |||
| <t>The client can therefore update the authorization information stored at the | <t>The client can therefore update the authorization information stored at the | |||
| resource server at any time without changing an established DTLS | resource server at any time without changing an established DTLS | |||
| session. To do so, the client requests a | session. To do so, the client requests a | |||
| new access token from the authorization server | new access token from the authorization server | |||
| for the intended action on the respective resource | for the intended action on the respective resource | |||
| and uploads this access token to the authz-info resource on the | and uploads this access token to the authz-info resource on the | |||
| resource server.</t> | resource server.</t> | |||
| <t><xref target="update-overview" format="default"/> depicts the message f low where the client requests | <t><xref target="update-overview" format="default"/> depicts the message f low where the client requests | |||
| a new access token after a security association between the client and | a new access token after a security association between the client and | |||
| the resource server has been established using this protocol. If the | the resource server has been established using this protocol. If the | |||
| client wants to update the authorization information, the token | client wants to update the authorization information, the token | |||
| request MUST specify the key identifier of the proof-of-possession key | request <bcp14>MUST</bcp14> specify the key identifier of the proof-of-possessio n key | |||
| used for the existing DTLS channel between the client and the resource | used for the existing DTLS channel between the client and the resource | |||
| server in the <tt>kid</tt> parameter of the Client-to-AS request. The | server in the <tt>kid</tt> parameter of the client-to-AS request. The | |||
| authorization server MUST verify that the specified <tt>kid</tt> denotes a | authorization server <bcp14>MUST</bcp14> verify that the specified <tt>kid</tt> | |||
| denotes a | ||||
| valid verifier for a proof-of-possession token that has previously | valid verifier for a proof-of-possession token that has previously | |||
| been issued to the requesting client. Otherwise, the Client-to-AS | been issued to the requesting client. Otherwise, the client-to-AS | |||
| request MUST be declined with the error code <tt>unsupported_pop_key</tt> as | request <bcp14>MUST</bcp14> be declined with the error code <tt>unsupported_pop_ | |||
| defined in Section 5.8.3 of <xref target="I-D.ietf-ace-oauth-authz" format="defa | key</tt>, as | |||
| ult"/>.</t> | defined in <xref target="RFC9200" sectionFormat="of" section="5.8.3"/>.</t> | |||
| <t>When the authorization server issues a new access token to update | <t>When the authorization server issues a new access token to update | |||
| existing authorization information, it MUST include the specified <tt>kid</tt> | existing authorization information, it <bcp14>MUST</bcp14> include the specified | |||
| parameter in this access token. A resource server MUST replace the | <tt>kid</tt> | |||
| parameter in this access token. A resource server <bcp14>MUST</bcp14> replace th | ||||
| e | ||||
| authorization information of any existing DTLS session that is identified | authorization information of any existing DTLS session that is identified | |||
| by this key identifier with the updated authorization information.</t> | by this key identifier with the updated authorization information.</t> | |||
| <figure anchor="update-overview"> | <figure anchor="update-overview"> | |||
| <name>Overview of Dynamic Update Operation</name> | <name>Overview of Dynamic Update Operation</name> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| C RS AS | C RS AS | |||
| | <===== DTLS channel =====> | | | | <===== DTLS channel =====> | | | |||
| | + Access Token | | | | + Access Token | | | |||
| | | | | | | | | |||
| | --- Token Request ----------------------------> | | | --- Token Request ----------------------------> | | |||
| skipping to change at line 827 ¶ | skipping to change at line 854 ¶ | |||
| | | | | | | | | |||
| | <---------------------------- New Access Token - | | | <---------------------------- New Access Token - | | |||
| | + Access Information | | | + Access Information | | |||
| | | | | | | | | |||
| | --- Update /authz-info --> | | | | --- Update /authz-info --> | | | |||
| | New Access Token | | | | New Access Token | | | |||
| | | | | | | | | |||
| | == Authorized Request ===> | | | | == Authorized Request ===> | | | |||
| | | | | | | | | |||
| | <=== Protected Resource == | | | | <=== Protected Resource == | | | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure> | </figure> | |||
| </section> | </section> | |||
| <section anchor="teardown" numbered="true" toc="default"> | <section anchor="teardown" numbered="true" toc="default"> | |||
| <name>Token Expiration</name> | <name>Token Expiration</name> | |||
| <t>The resource server MUST delete access tokens that are no longer | <t>The resource server <bcp14>MUST</bcp14> delete access tokens that are n | |||
| valid. DTLS associations that have been setup in accordance with | o longer | |||
| this profile are always tied to specific tokens (which may be | valid. DTLS associations that have been set up in accordance with | |||
| exchanged with a dynamic update as described in Section 4). As tokens | this profile are always tied to specific tokens (which may be | |||
| may become invalid at any time (e.g., because they have expired), the | exchanged with a dynamic update, as described in <xref target="update" | |||
| association may become useless at some point. A resource server therefore | format="default"/>). As tokens | |||
| MUST terminate existing DTLS association after the last access token | may become invalid at any time (e.g., because they have expired), the | |||
| associated with this association has expired.</t> | association may become useless at some point. A resource server therefore | |||
| <t>As specified in Section 5.10.3 of <xref target="I-D.ietf-ace-oauth-auth | <bcp14>MUST</bcp14> terminate existing DTLS association after the last acc | |||
| z" format="default"/>, | ess token | |||
| the resource server MUST notify the client with an error response with | associated with this association has expired.</t> | |||
| code 4.01 (Unauthorized) for any long running request before | <t>As specified in <xref target="RFC9200" sectionFormat="of" section="5.10 | |||
| .3"/>, | ||||
| the resource server <bcp14>MUST</bcp14> notify the client with an error response | ||||
| with | ||||
| code 4.01 (Unauthorized) for any long-running request before | ||||
| terminating the association.</t> | terminating the association.</t> | |||
| </section> | </section> | |||
| <section anchor="as-commsec" numbered="true" toc="default"> | <section anchor="as-commsec" numbered="true" toc="default"> | |||
| <name>Secure Communication with an Authorization Server</name> | <name>Secure Communication with an Authorization Server</name> | |||
| <t>As specified in the ACE framework (Sections 5.8 and 5.9 of | <t>As specified in the ACE framework (Sections <xref target="RFC9200" sect | |||
| <xref target="I-D.ietf-ace-oauth-authz" format="default"/>), the requesting enti | ion="5.8" sectionFormat="bare"/> and <xref target="RFC9200" section="5.9" sectio | |||
| ty (the resource | nFormat="bare"/> of | |||
| <xref target="RFC9200" format="default"/>), the requesting entity (the resource | ||||
| server and/or the client) and the authorization server communicate via | server and/or the client) and the authorization server communicate via | |||
| the token endpoint or introspection endpoint. The use of CoAP and | the token endpoint or introspection endpoint. The use of CoAP and | |||
| DTLS for this communication is RECOMMENDED in this profile. Other | DTLS for this communication is <bcp14>RECOMMENDED</bcp14> in this profile. Other | |||
| protocols fulfilling the security requirements defined in Section 5 | protocols fulfilling the security requirements defined in <xref target="RFC9200" | |||
| of <xref target="I-D.ietf-ace-oauth-authz" format="default"/> MAY be used instea | sectionFormat="of" section="5"/> <bcp14>MAY</bcp14> be used instead.</t> | |||
| d.</t> | ||||
| <t>How credentials (e.g., PSK, RPK, X.509 cert) for using DTLS with the | <t>How credentials (e.g., PSK, RPK, X.509 cert) for using DTLS with the | |||
| authorization server are established is out of scope for this profile.</t> | authorization server are established is out of scope for this profile.</t> | |||
| <t>If other means of securing the communication with the authorization | <t>If other means of securing the communication with the authorization | |||
| server are used, the communication security requirements from Section | server are used, the communication security requirements from <xref target="RFC9 | |||
| 6.2 of <xref target="I-D.ietf-ace-oauth-authz" format="default"/> remain applica | 200" sectionFormat="of" section="6.2"/> remain applicable.</t> | |||
| ble.</t> | ||||
| </section> | </section> | |||
| <section anchor="security-considerations" numbered="true" toc="default"> | <section anchor="security-considerations" numbered="true" toc="default"> | |||
| <name>Security Considerations</name> | <name>Security Considerations</name> | |||
| <t>This document specifies a profile for the Authentication and | <t>This document specifies a profile for the Authentication and | |||
| Authorization for Constrained Environments (ACE) framework | Authorization for Constrained Environments (ACE) framework | |||
| <xref target="I-D.ietf-ace-oauth-authz" format="default"/>. As it follows this f | <xref target="RFC9200" format="default"/>. As it follows this framework's genera | |||
| ramework's general | l | |||
| approach, the general security considerations from Section | approach, the general security considerations from <xref target="RFC9200" sectio | |||
| 6 of <xref target="I-D.ietf-ace-oauth-authz" format="default"/> also apply to th | nFormat="of" section="6"/> also apply to this profile.</t> | |||
| is profile.</t> | ||||
| <t>The authorization server must ascertain that the keying material for | <t>The authorization server must ascertain that the keying material for | |||
| the client that it provides to the resource server actually is | the client that it provides to the resource server actually is | |||
| associated with this client. Malicious clients may hand over access | associated with this client. Malicious clients may hand over access | |||
| tokens containing their own access permissions to other entities. This | tokens containing their own access permissions to other entities. This | |||
| problem cannot be completely eliminated. Nevertheless, in RPK mode it | problem cannot be completely eliminated. Nevertheless, in RPK mode, it | |||
| should not be possible for clients to request access tokens for | should not be possible for clients to request access tokens for | |||
| arbitrary public keys: if the client can cause the authorization | arbitrary public keys; if the client can cause the authorization | |||
| server to issue a token for a public key without proving possession of | server to issue a token for a public key without proving possession of | |||
| the corresponding private key, this allows for identity misbinding | the corresponding private key, this allows for identity misbinding | |||
| attacks where the issued token is usable by an entity other than the | attacks, where the issued token is usable by an entity other than the | |||
| intended one. The authorization server therefore at some point needs | intended one. At some point, the authorization server therefore needs | |||
| to validate that the client can actually use the private key | to validate that the client can actually use the private key | |||
| corresponding to the client's public key.</t> | corresponding to the client's public key.</t> | |||
| <t>When using pre-shared keys provisioned by the authorization server, | <t>When using pre-shared keys provisioned by the authorization server, | |||
| the security level depends on the randomness of PSK, and the security | the security level depends on the randomness of PSKs and the security | |||
| of the TLS cipher suite and key exchange algorithm. As this | of the TLS cipher suite and key exchange algorithm. As this | |||
| specification targets at constrained environments, message payloads | specification targets constrained environments, message payloads | |||
| exchanged between the client and the resource server are expected to | exchanged between the client and the resource server are expected to | |||
| be small and rare. CoAP <xref target="RFC7252" format="default"/> mandates the implementation of | be small and rare. CoAP <xref target="RFC7252" format="default"/> mandates the implementation of | |||
| cipher suites with abbreviated, 8-byte tags for message integrity | cipher suites with abbreviated, 8-byte tags for message integrity | |||
| protection. For consistency, this profile requires implementation of | protection. For consistency, this profile requires implementation of | |||
| the same cipher suites. For application scenarios where the cost of | the same cipher suites. For application scenarios where the cost of | |||
| full-width authentication tags is low compared to the overall amount | full-width authentication tags is low compared to the overall amount | |||
| of data being transmitted, the use of cipher suites with 16-byte | of data being transmitted, the use of cipher suites with 16-byte | |||
| integrity protection tags is preferred.</t> | integrity protection tags is preferred.</t> | |||
| <t>The PSK mode of this profile offers a distribution mechanism to convey | <t>The PSK mode of this profile offers a distribution mechanism to convey | |||
| authorization tokens together with a shared secret to a client and a | authorization tokens together with a shared secret to a client and a | |||
| server. As this specification aims at constrained devices and uses | server. As this specification aims at constrained devices and uses | |||
| CoAP <xref target="RFC7252" format="default"/> as transfer protocol, at least th | CoAP <xref target="RFC7252" format="default"/> as the transfer protocol, a | |||
| e cipher suite | t least the | |||
| TLS_PSK_WITH_AES_128_CCM_8 <xref target="RFC6655" format="default"/> should be s | cipher suite TLS_PSK_WITH_AES_128_CCM_8 <xref target="RFC6655" format="def | |||
| upported. The | ault"/> | |||
| access tokens and the corresponding shared secrets generated by the | should be supported. The | |||
| authorization server are expected to be sufficiently short-lived to | access tokens and the corresponding shared secrets generated by the | |||
| provide similar forward-secrecy properties to using ephemeral | authorization server are expected to be sufficiently short-lived to | |||
| Diffie-Hellman (DHE) key exchange mechanisms. For longer-lived access | provide similar forward-secrecy properties to using ephemeral | |||
| tokens, DHE cipher suites should be used, i.e., cipher suites of the | Diffie-Hellman (DHE) key exchange mechanisms. For longer-lived access | |||
| form TLS_DHE_PSK_*.</t> | tokens, DHE cipher suites should be used, i.e., cipher suites of the | |||
| <t>Constrained devices that use DTLS <xref target="RFC6347" format="defaul | form TLS_DHE_PSK_* or TLS_ECDHE_PSK_*.</t> | |||
| t"/> are inherently | <t>Constrained devices that use DTLS <xref target="RFC6347" format="defaul | |||
| vulnerable to Denial of Service (DoS) attacks as the handshake | t"/> <xref target="RFC9147"/> are inherently | |||
| vulnerable to Denial of Service (DoS) attacks, as the handshake | ||||
| protocol requires creation of internal state within the device. This | protocol requires creation of internal state within the device. This | |||
| is specifically of concern where an adversary is able to intercept the | is specifically of concern where an adversary is able to intercept the | |||
| initial cookie exchange and interject forged messages with a valid | initial cookie exchange and interject forged messages with a valid | |||
| cookie to continue with the handshake. A similar issue exists with the | cookie to continue with the handshake. A similar issue exists with the | |||
| unprotected authorization information endpoint when the resource | unprotected authorization information endpoint when the resource | |||
| server needs to keep valid access tokens for a long time. Adversaries | server needs to keep valid access tokens for a long time. Adversaries | |||
| could fill up the constrained resource server's internal storage for a | could fill up the constrained resource server's internal storage for a | |||
| very long time with interjected or otherwise retrieved valid access | very long time with intercepted or otherwise retrieved valid access | |||
| tokens. To mitigate against this, the resource server should set a | tokens. To mitigate against this, the resource server should set a | |||
| time boundary until an access token that has not been used until then | time boundary until an access token that has not been used until then | |||
| will be deleted.</t> | will be deleted.</t> | |||
| <t>The protection of access tokens that are stored in the authorization | <t>The protection of access tokens that are stored in the authorization | |||
| information endpoint depends on the keying material that is used between | information endpoint depends on the keying material that is used between | |||
| the authorization server and the resource server: The resource server | the authorization server and the resource server; the resource server | |||
| must ensure that it processes only access tokens that are (encrypted | must ensure that it processes only access tokens that are integrity protected (a | |||
| and) integrity-protected by an authorization server that is authorized | nd encrypted) by an authorization server that is authorized | |||
| to provide access tokens for the resource server.</t> | to provide access tokens for the resource server.</t> | |||
| <section anchor="reuse-of-existing-sessions" numbered="true" toc="default" > | <section anchor="reuse-of-existing-sessions" numbered="true" toc="default" > | |||
| <name>Reuse of Existing Sessions</name> | <name>Reuse of Existing Sessions</name> | |||
| <t>To avoid the overhead of a repeated DTLS handshake, <xref target="RFC | <t>To avoid the overhead of a repeated DTLS handshake, <xref target="RFC | |||
| 7925" format="default"/> | 7925" format="default"/> recommends | |||
| recommends session resumption <xref target="RFC8446" format="default"/> to reuse | session resumption <xref target="RFC8446" format="default"/> to reuse session st | |||
| session state from | ate from | |||
| an earlier DTLS association and thus requires client side | an earlier DTLS association and thus requires client-side | |||
| implementation. In this specification, the DTLS session is subject to | implementation. In this specification, the DTLS session is subject to | |||
| the authorization rules denoted by the access token that was used for | the authorization rules denoted by the access token that was used for | |||
| the initial setup of the DTLS association. Enabling session resumption | the initial setup of the DTLS association. Enabling session resumption | |||
| would require the server to transfer the authorization information | would require the server to transfer the authorization information | |||
| with the session state in an encrypted SessionTicket to the | with the session state in an encrypted SessionTicket to the | |||
| client. Assuming that the server uses long-lived keying material, this | client. Assuming that the server uses long-lived keying material, this | |||
| could open up attacks due to the lack of forward secrecy. Moreover, | could open up attacks due to the lack of forward secrecy. Moreover, | |||
| using this mechanism, a client can resume a DTLS session without | using this mechanism, a client can resume a DTLS session without | |||
| proving the possession of the PoP key again. Therefore, session | proving the possession of the PoP key again. Therefore, session | |||
| resumption should be used only in combination with reasonably | resumption should be used only in combination with reasonably | |||
| short-lived PoP keys.</t> | short-lived PoP keys.</t> | |||
| <t>Since renegotiation of DTLS associations is prone to attacks as well, | <t>Since renegotiation of DTLS associations is prone to attacks as well, | |||
| <xref target="RFC7925" format="default"/> requires clients to decline any renego | <xref target="RFC7925" format="default"/> requires that clients decline any | |||
| tiation attempt. A | renegotiation attempt. A server that wants to initiate rekeying therefore | |||
| server that wants to initiate re-keying therefore SHOULD periodically | <bcp14>SHOULD</bcp14> periodically force a full handshake.</t> | |||
| force a full handshake.</t> | ||||
| </section> | </section> | |||
| <section anchor="multiple-access-tokens" numbered="true" toc="default"> | <section anchor="multiple-access-tokens" numbered="true" toc="default"> | |||
| <name>Multiple Access Tokens</name> | <name>Multiple Access Tokens</name> | |||
| <t>Developers SHOULD avoid using multiple access tokens for a | <t>Implementers <bcp14>SHOULD</bcp14> avoid using multiple access tokens | |||
| client (see also section 5.10.1 of <xref target="I-D.ietf-ace-oauth-authz" forma | for a | |||
| t="default"/>).</t> | client (see also <xref target="RFC9200" sectionFormat="of" section="5.10.1"/>).< | |||
| /t> | ||||
| <t>Even when a single access token per client is used, an attacker could | <t>Even when a single access token per client is used, an attacker could | |||
| compromise the dynamic update mechanism for existing DTLS connections | compromise the dynamic update mechanism for existing DTLS connections | |||
| by delaying or reordering packets destined for the authz-info | by delaying or reordering packets destined for the authz-info | |||
| endpoint. Thus, the order in which operations occur at the resource | endpoint. Thus, the order in which operations occur at the resource | |||
| server (and thus which authorization info is used to process a given | server (and thus which authorization info is used to process a given | |||
| client request) cannot be guaranteed. Especially in the presence of | client request) cannot be guaranteed. Especially in the presence of | |||
| later-issued access tokens that reduce the client's permissions from | later-issued access tokens that reduce the client's permissions from | |||
| the initial access token, it is impossible to guarantee that the | the initial access token, it is impossible to guarantee that the | |||
| reduction in authorization will take effect prior to the expiration of | reduction in authorization will take effect prior to the expiration of | |||
| the original token.</t> | the original token.</t> | |||
| </section> | </section> | |||
| <section anchor="out-of-band-configuration" numbered="true" toc="default"> | <section anchor="out-of-band-configuration" numbered="true" toc="default"> | |||
| <name>Out-of-Band Configuration</name> | <name>Out-of-Band Configuration</name> | |||
| <t>To communicate securely, the authorization server, the client and the | <t>To communicate securely, the authorization server, the client, and th e | |||
| resource server require certain information that must be exchanged | resource server require certain information that must be exchanged | |||
| outside the protocol flow described in this document. The | outside the protocol flow described in this document. The | |||
| authorization server must have obtained authorization information | authorization server must have obtained authorization information | |||
| concerning the client and the resource server that is approved by the | concerning the client and the resource server that is approved by the | |||
| resource owner as well as corresponding keying material. The resource | resource owner, as well as corresponding keying material. The resource | |||
| server must have received authorization information approved by the | server must have received authorization information approved by the | |||
| resource owner concerning its authorization managers and the | resource owner concerning its authorization managers and the | |||
| respective keying material. The client must have obtained | respective keying material. The client must have obtained | |||
| authorization information concerning the authorization server approved | authorization information concerning the authorization server approved | |||
| by its owner as well as the corresponding keying material. Also, the | by its owner, as well as the corresponding keying material. Also, the | |||
| client's owner must have approved of the client's communication with | client's owner must have approved of the client's communication with | |||
| the resource server. The client and the authorization server must have | the resource server. The client and the authorization server must have | |||
| obtained a common understanding how this resource server is identified | obtained a common understanding about how this resource server is identified | |||
| to ensure that the client obtains access token and keying material for | to ensure that the client obtains access tokens and keying material for | |||
| the correct resource server. If the client is provided with a raw | the correct resource server. If the client is provided with a raw | |||
| public key for the resource server, it must be ascertained to which | public key for the resource server, it must be ascertained to which | |||
| resource server (which identifier and authorization information) the | resource server (which identifier and authorization information) the | |||
| key is associated. All authorization information and keying material | key is associated. All authorization information and keying material | |||
| must be kept up to date.</t> | must be kept up to date.</t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="privacy-considerations" numbered="true" toc="default"> | <section anchor="privacy-considerations" numbered="true" toc="default"> | |||
| <name>Privacy Considerations</name> | <name>Privacy Considerations</name> | |||
| <t>This privacy considerations from Section | <t>This privacy considerations from <xref target="RFC9200" sectionFormat=" | |||
| 7 of the <xref target="I-D.ietf-ace-oauth-authz" format="default"/> apply also t | of" section="7"/> apply also to this profile.</t> | |||
| o this profile.</t> | ||||
| <t>An unprotected response to an unauthorized request may disclose | <t>An unprotected response to an unauthorized request may disclose | |||
| information about the resource server and/or its existing relationship | information about the resource server and/or its existing relationship | |||
| with the client. It is advisable to include as little information as | with the client. It is advisable to include as little information as | |||
| possible in an unencrypted response. When a DTLS session between an authenticate d | possible in an unencrypted response. When a DTLS session between an authenticate d | |||
| client and the resource server already exists, more detailed | client and the resource server already exists, more detailed | |||
| information MAY be included with an error response to provide the | information <bcp14>MAY</bcp14> be included with an error response to provide the | |||
| client with sufficient information to react on that particular error.</t> | client with sufficient information to react on that particular error.</t> | |||
| <t>Also, unprotected requests to the resource server may reveal | <t>Also, unprotected requests to the resource server may reveal | |||
| information about the client, e.g., which resources the client | information about the client, e.g., which resources the client | |||
| attempts to request or the data that the client wants to provide to | attempts to request or the data that the client wants to provide to | |||
| the resource server. The client SHOULD NOT send confidential data in | the resource server. The client <bcp14>SHOULD NOT</bcp14> send confidential data in | |||
| an unprotected request.</t> | an unprotected request.</t> | |||
| <t>Note that some information might still leak after DTLS session is | <t>Note that some information might still leak after the DTLS session is | |||
| established, due to observable message sizes, the source, and the | established, due to observable message sizes, the source, and the | |||
| destination addresses.</t> | destination addresses.</t> | |||
| </section> | </section> | |||
| <section anchor="iana-considerations" numbered="true" toc="default"> | <section anchor="iana-considerations" numbered="true" toc="default"> | |||
| <name>IANA Considerations</name> | <name>IANA Considerations</name> | |||
| <t>The following registrations are done for the ACE OAuth Profile | <t>The following registration has been made in the "ACE Profiles" | |||
| Registry following the procedure specified in | registry, following the procedure specified in | |||
| <xref target="I-D.ietf-ace-oauth-authz" format="default"/>.</t> | <xref target="RFC9200" format="default"/>.</t> | |||
| <t>Note to RFC Editor: Please replace all occurrences of "[RFC-XXXX]" with | <dl newline="false" spacing="compact"> | |||
| the RFC number of this specification and delete this paragraph.</t> | <dt>Name:</dt> | |||
| <t>Profile name: coap_dtls</t> | <dd>coap_dtls</dd> | |||
| <t>Profile Description: Profile for delegating client authentication and | <dt>Description:</dt> | |||
| authorization in a constrained environment by establishing a Datagram | <dd>Profile for delegating client Authentication and | |||
| Transport Layer Security (DTLS) channel between resource-constrained | Authorization for Constrained Environments by establishing a Datagram | |||
| nodes.</t> | Transport Layer Security (DTLS) channel between resource-constrained | |||
| <t>Profile ID: TBD (suggested: 1)</t> | nodes.</dd> | |||
| <t>Change Controller: IESG</t> | <dt>CBOR Value:</dt> | |||
| <t>Reference: [RFC-XXXX]</t> | <dd>1</dd> | |||
| </section> | <dt>Reference:</dt> | |||
| <section anchor="acknowledgments" numbered="true" toc="default"> | <dd>RFC 9202</dd> | |||
| <name>Acknowledgments</name> | </dl> | |||
| <t>Special thanks to Jim Schaad for his contributions and reviews of this | ||||
| document and to Ben Kaduk for his thorough reviews of this | ||||
| document. Thanks also to Paul Kyzivat for his review. The authors also | ||||
| would like to thank Marco Tiloca for his contributions.</t> | ||||
| <t>Ludwig Seitz worked on this document as part of the CelticNext | ||||
| projects CyberWI, and CRITISEC with funding from Vinnova.</t> | ||||
| </section> | </section> | |||
| </middle> | </middle> | |||
| <back> | <back> | |||
| <references> | <references> | |||
| <name>References</name> | <name>References</name> | |||
| <references> | <references> | |||
| <name>Normative References</name> | <name>Normative References</name> | |||
| <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2 | ||||
| 119"> | ||||
| <front> | ||||
| <title>Key words for use in RFCs to Indicate Requirement Levels</tit | ||||
| le> | ||||
| <author fullname="S. Bradner" initials="S." surname="Bradner"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="March" year="1997"/> | ||||
| <abstract> | ||||
| <t>In many standards track documents several words are used to sig | ||||
| nify the requirements in the specification. These words are often capitalized. | ||||
| This document defines these words as they should be interpreted in IETF document | ||||
| s. 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" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 174"> | ||||
| <front> | ||||
| <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</ti | ||||
| tle> | ||||
| <author fullname="B. Leiba" initials="B." surname="Leiba"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="May" year="2017"/> | ||||
| <abstract> | ||||
| <t>RFC 2119 specifies common key words that may be used in protoco | ||||
| l specifications. This document aims to reduce the ambiguity by clarifying tha | ||||
| t 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="RFC4279" target="https://www.rfc-editor.org/info/rfc4 | ||||
| 279"> | ||||
| <front> | ||||
| <title>Pre-Shared Key Ciphersuites for Transport Layer Security (TLS | ||||
| )</title> | ||||
| <author fullname="P. Eronen" initials="P." role="editor" surname="Er | ||||
| onen"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="H. Tschofenig" initials="H." role="editor" surname | ||||
| ="Tschofenig"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="December" year="2005"/> | ||||
| <abstract> | ||||
| <t>This document specifies three sets of new ciphersuites for the | ||||
| Transport Layer Security (TLS) protocol to support authentication based on pre-s | ||||
| hared keys (PSKs). These pre-shared keys are symmetric keys, shared in advance | ||||
| among the communicating parties. The first set of ciphersuites uses only symmet | ||||
| ric key operations for authentication. The second set uses a Diffie-Hellman exch | ||||
| ange authenticated with a pre-shared key, and the third set combines public key | ||||
| authentication of the server with pre-shared key authentication of the client. | ||||
| [STANDARDS-TRACK]</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="4279"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC4279"/> | ||||
| </reference> | ||||
| <reference anchor="RFC6347" target="https://www.rfc-editor.org/info/rfc6 | ||||
| 347"> | ||||
| <front> | ||||
| <title>Datagram Transport Layer Security Version 1.2</title> | ||||
| <author fullname="E. Rescorla" initials="E." surname="Rescorla"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="N. Modadugu" initials="N." surname="Modadugu"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="January" year="2012"/> | ||||
| <abstract> | ||||
| <t>This document specifies version 1.2 of the Datagram Transport L | ||||
| ayer Security (DTLS) protocol. The DTLS protocol provides communications privac | ||||
| y for datagram protocols. The protocol allows client/server applications to com | ||||
| municate in a way that is designed to prevent eavesdropping, tampering, or messa | ||||
| ge forgery. The DTLS protocol is based on the Transport Layer Security (TLS) pr | ||||
| otocol and provides equivalent security guarantees. Datagram semantics of the u | ||||
| nderlying transport are preserved by the DTLS protocol. This document updates D | ||||
| TLS 1.0 to work with TLS version 1.2. [STANDARDS-TRACK]</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="6347"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC6347"/> | ||||
| </reference> | ||||
| <reference anchor="RFC6749" target="https://www.rfc-editor.org/info/rfc6 | ||||
| 749"> | ||||
| <front> | ||||
| <title>The OAuth 2.0 Authorization Framework</title> | ||||
| <author fullname="D. Hardt" initials="D." role="editor" surname="Har | ||||
| dt"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="October" year="2012"/> | ||||
| <abstract> | ||||
| <t>The OAuth 2.0 authorization framework enables a third-party app | ||||
| lication to obtain limited access to an HTTP service, either on behalf of a reso | ||||
| urce owner by orchestrating an approval interaction between the resource owner a | ||||
| nd the HTTP service, or by allowing the third-party application to obtain access | ||||
| on its own behalf. This specification replaces and obsoletes the OAuth 1.0 pro | ||||
| tocol described in RFC 5849. [STANDARDS-TRACK]</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="6749"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC6749"/> | ||||
| </reference> | ||||
| <reference anchor="RFC7250" target="https://www.rfc-editor.org/info/rfc7 | ||||
| 250"> | ||||
| <front> | ||||
| <title>Using Raw Public Keys in Transport Layer Security (TLS) and D | ||||
| atagram Transport Layer Security (DTLS)</title> | ||||
| <author fullname="P. Wouters" initials="P." role="editor" surname="W | ||||
| outers"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="H. Tschofenig" initials="H." role="editor" surname | ||||
| ="Tschofenig"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="J. Gilmore" initials="J." surname="Gilmore"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="S. Weiler" initials="S." surname="Weiler"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="T. Kivinen" initials="T." surname="Kivinen"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="June" year="2014"/> | ||||
| <abstract> | ||||
| <t>This document specifies a new certificate type and two TLS exte | ||||
| nsions for exchanging raw public keys in Transport Layer Security (TLS) and Data | ||||
| gram Transport Layer Security (DTLS). The new certificate type allows raw publi | ||||
| c keys to be used for authentication.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="7250"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC7250"/> | ||||
| </reference> | ||||
| <reference anchor="RFC7251" target="https://www.rfc-editor.org/info/rfc7 | ||||
| 251"> | ||||
| <front> | ||||
| <title>AES-CCM Elliptic Curve Cryptography (ECC) Cipher Suites for T | ||||
| LS</title> | ||||
| <author fullname="D. McGrew" initials="D." surname="McGrew"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="D. Bailey" initials="D." surname="Bailey"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="M. Campagna" initials="M." surname="Campagna"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="R. Dugal" initials="R." surname="Dugal"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="June" year="2014"/> | ||||
| <abstract> | ||||
| <t>This memo describes the use of the Advanced Encryption Standard | ||||
| (AES) in the Counter and CBC-MAC Mode (CCM) of operation within Transport Layer | ||||
| Security (TLS) to provide confidentiality and data-origin authentication. The | ||||
| AES-CCM algorithm is amenable to compact implementations, making it suitable for | ||||
| constrained environments, while at the same time providing a high level of secu | ||||
| rity. The cipher suites defined in this document use Elliptic Curve Cryptograph | ||||
| y (ECC) and are advantageous in networks with limited bandwidth.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="7251"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC7251"/> | ||||
| </reference> | ||||
| <reference anchor="RFC7252" target="https://www.rfc-editor.org/info/rfc7 | ||||
| 252"> | ||||
| <front> | ||||
| <title>The Constrained Application Protocol (CoAP)</title> | ||||
| <author fullname="Z. Shelby" initials="Z." surname="Shelby"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="K. Hartke" initials="K." surname="Hartke"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="C. Bormann" initials="C." surname="Bormann"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="June" year="2014"/> | ||||
| <abstract> | ||||
| <t>The Constrained Application Protocol (CoAP) is a specialized we | ||||
| b transfer protocol for use with constrained nodes and constrained (e.g., low-po | ||||
| wer, lossy) networks. The nodes often have 8-bit microcontrollers with small am | ||||
| ounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wir | ||||
| eless 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>CoAP provides a request/response interaction model between appl | ||||
| ication endpoints, supports built-in discovery of services and resources, and in | ||||
| cludes key concepts of the Web such as URIs and Internet media types. CoAP is d | ||||
| esigned to easily interface with HTTP for integration with the Web while meeting | ||||
| specialized requirements such as multicast support, very low overhead, and simp | ||||
| licity for constrained environments.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="7252"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC7252"/> | ||||
| </reference> | ||||
| <reference anchor="RFC7925" target="https://www.rfc-editor.org/info/rfc7 | ||||
| 925"> | ||||
| <front> | ||||
| <title>Transport Layer Security (TLS) / Datagram Transport Layer Sec | ||||
| urity (DTLS) Profiles for the Internet of Things</title> | ||||
| <author fullname="H. Tschofenig" initials="H." role="editor" surname | ||||
| ="Tschofenig"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="T. Fossati" initials="T." surname="Fossati"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="July" year="2016"/> | ||||
| <abstract> | ||||
| <t>A common design pattern in Internet of Things (IoT) deployments | ||||
| is the use of a constrained device that collects data via sensors or controls a | ||||
| ctuators for use in home automation, industrial control systems, smart cities, a | ||||
| nd other IoT deployments.</t> | ||||
| <t>This document defines a Transport Layer Security (TLS) and Data | ||||
| gram Transport Layer Security (DTLS) 1.2 profile that offers communications secu | ||||
| rity for this data exchange thereby preventing eavesdropping, tampering, and mes | ||||
| sage forgery. The lack of communication security is a common vulnerability in I | ||||
| oT products that can easily be solved by using these well-researched and widely | ||||
| deployed Internet security protocols.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="7925"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC7925"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8152" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 152"> | ||||
| <front> | ||||
| <title>CBOR Object Signing and Encryption (COSE)</title> | ||||
| <author fullname="J. Schaad" initials="J." surname="Schaad"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="July" year="2017"/> | ||||
| <abstract> | ||||
| <t>Concise Binary Object Representation (CBOR) is a data format de | ||||
| signed for small code size and small message size. There is a need for the abil | ||||
| ity to have basic security services defined for this data format. This document | ||||
| defines the CBOR Object Signing and Encryption (COSE) protocol. This specificat | ||||
| ion 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> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8152"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8152"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8392" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 392"> | ||||
| <front> | ||||
| <title>CBOR Web Token (CWT)</title> | ||||
| <author fullname="M. Jones" initials="M." surname="Jones"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="S. Erdtman" initials="S." surname="Erdtman"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="May" year="2018"/> | ||||
| <abstract> | ||||
| <t>CBOR Web Token (CWT) is a compact means of representing claims | ||||
| to be transferred between two parties. The claims in a CWT are encoded in the C | ||||
| oncise Binary Object Representation (CBOR), and CBOR Object Signing and Encrypti | ||||
| on (COSE) is used for added application-layer security protection. A claim is a | ||||
| piece of information asserted about a subject and is represented as a name/valu | ||||
| e pair consisting of a claim name and a claim value. CWT is derived from JSON W | ||||
| eb Token (JWT) but uses CBOR rather than JSON.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8392"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8392"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8422" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 422"> | ||||
| <front> | ||||
| <title>Elliptic Curve Cryptography (ECC) Cipher Suites for Transport | ||||
| Layer Security (TLS) Versions 1.2 and Earlier</title> | ||||
| <author fullname="Y. Nir" initials="Y." surname="Nir"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="S. Josefsson" initials="S." surname="Josefsson"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="M. Pegourie-Gonnard" initials="M." surname="Pegour | ||||
| ie-Gonnard"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="August" year="2018"/> | ||||
| <abstract> | ||||
| <t>This document describes key exchange algorithms based on Ellipt | ||||
| ic Curve Cryptography (ECC) for the Transport Layer Security (TLS) protocol. In | ||||
| particular, it specifies the use of Ephemeral Elliptic Curve Diffie-Hellman (EC | ||||
| DHE) key agreement in a TLS handshake and the use of the Elliptic Curve Digital | ||||
| Signature Algorithm (ECDSA) and Edwards-curve Digital Signature Algorithm (EdDSA | ||||
| ) as authentication mechanisms.</t> | ||||
| <t>This document obsoletes RFC 4492.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8422"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8422"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8747" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 747"> | ||||
| <front> | ||||
| <title>Proof-of-Possession Key Semantics for CBOR Web Tokens (CWTs)< | ||||
| /title> | ||||
| <author fullname="M. Jones" initials="M." surname="Jones"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="L. Seitz" initials="L." surname="Seitz"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="G. Selander" initials="G." surname="Selander"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="S. Erdtman" initials="S." surname="Erdtman"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="March" year="2020"/> | ||||
| <abstract> | ||||
| <t>This specification describes how to declare in a CBOR Web Token | ||||
| (CWT) (which is defined by RFC 8392) that the presenter of the CWT possesses a | ||||
| particular proof-of-possession key. Being able to prove possession of a key is a | ||||
| lso sometimes described as being the holder-of-key. This specification provides | ||||
| equivalent functionality to "Proof-of-Possession Key Semantics for JSON Web Toke | ||||
| ns (JWTs)" (RFC 7800) but using Concise Binary Object Representation (CBOR) and | ||||
| CWTs rather than JavaScript Object Notation (JSON) and JSON Web Tokens (JWTs).</ | ||||
| t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8747"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8747"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 949"> | ||||
| <front> | ||||
| <title>Concise Binary Object Representation (CBOR)</title> | ||||
| <author fullname="C. Bormann" initials="C." surname="Bormann"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="P. Hoffman" initials="P." surname="Hoffman"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="December" year="2020"/> | ||||
| <abstract> | ||||
| <t>The Concise Binary Object Representation (CBOR) is a data forma | ||||
| t whose design goals include the possibility of extremely small code size, fairl | ||||
| y small message size, and extensibility without the need for version negotiation | ||||
| . These design goals make it different from earlier binary serializations such a | ||||
| s ASN.1 and MessagePack.</t> | ||||
| <t>This document obsoletes RFC 7049, providing editorial improveme | ||||
| nts, new details, and errata fixes while keeping full compatibility with the int | ||||
| erchange 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="I-D.ietf-ace-oauth-authz" target="https://www.ietf.or | ||||
| g/archive/id/draft-ietf-ace-oauth-authz-41.txt"> | ||||
| <front> | ||||
| <title>Authentication and Authorization for Constrained Environments | ||||
| (ACE) using the OAuth 2.0 Framework (ACE-OAuth)</title> | ||||
| <author fullname="Ludwig Seitz"> | ||||
| <organization>Combitech</organization> | ||||
| </author> | ||||
| <author fullname="Goeran Selander"> | ||||
| <organization>Ericsson</organization> | ||||
| </author> | ||||
| <author fullname="Erik Wahlstroem"> | ||||
| </author> | ||||
| <author fullname="Samuel Erdtman"> | ||||
| <organization>Spotify AB</organization> | ||||
| </author> | ||||
| <author fullname="Hannes Tschofenig"> | ||||
| <organization>Arm Ltd.</organization> | ||||
| </author> | ||||
| <date day="6" month="May" year="2021"/> | ||||
| <abstract> | ||||
| <t> This specification defines a framework for authentication an | ||||
| d | ||||
| authorization in Internet of Things (IoT) environments called ACE- | ||||
| OAuth. The framework is based on a set of building blocks including | ||||
| OAuth 2.0 and the Constrained Application Protocol (CoAP), thus | ||||
| transforming a well-known and widely used authorization solution into | ||||
| a form suitable for IoT devices. Existing specifications are used | ||||
| where possible, but extensions are added and profiles are defined to | ||||
| better serve the IoT use cases. | ||||
| </t> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119. | |||
| </abstract> | xml"/> | |||
| </front> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174. | |||
| <seriesInfo name="Internet-Draft" value="draft-ietf-ace-oauth-authz-41 | xml"/> | |||
| "/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4279. | |||
| </reference> | xml"/> | |||
| <reference anchor="I-D.ietf-ace-oauth-params" target="https://www.ietf.o | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6347. | |||
| rg/archive/id/draft-ietf-ace-oauth-params-15.txt"> | xml"/> | |||
| <front> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6749. | |||
| <title>Additional OAuth Parameters for Authorization in Constrained | xml"/> | |||
| Environments (ACE)</title> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7250. | |||
| <author fullname="Ludwig Seitz"> | xml"/> | |||
| <organization>Combitech</organization> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7251. | |||
| </author> | xml"/> | |||
| <date day="6" month="May" year="2021"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7252. | |||
| <abstract> | xml"/> | |||
| <t> This specification defines new parameters and encodings for | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7925. | |||
| the OAuth | xml"/> | |||
| 2.0 token and introspection endpoints when used with the framework | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8152. | |||
| for authentication and authorization for constrained environments | xml"/> | |||
| (ACE). These are used to express the proof-of-possession key the | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8392. | |||
| client wishes to use, the proof-of-possession key that the | xml"/> | |||
| Authorization Server has selected, and the key the Resource Server | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8422. | |||
| uses to authenticate to the client. | xml"/> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8747. | ||||
| xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8949. | ||||
| xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9147. | ||||
| xml"/> | ||||
| <reference anchor='RFC9200' target='https://www.rfc-editor.org/info/rfc9200'> | ||||
| <front> | ||||
| <title>Authentication and Authorization for Constrained Environments (ACE) Using | ||||
| the OAuth 2.0 Framework (ACE-OAuth)</title> | ||||
| <author initials='L' surname='Seitz' fullname='Ludwig Seitz'> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials='G' surname='Selander' fullname='Göran Selander'> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials='E' surname='Wahlstroem' fullname='Erik Wahlstroem'> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials='S' surname='Erdtman' fullname='Samuel Erdtman'> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials='H' surname='Tschofenig' fullname='Hannes Tschofenig'> | ||||
| <organization /> | ||||
| </author> | ||||
| <date year='2022' month='August'/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="9200"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC9200"/> | ||||
| </reference> | ||||
| <reference anchor='RFC9201' target='https://www.rfc-editor.org/info/rfc9201'> | ||||
| <front> | ||||
| <title>Additional OAuth Parameters for Authentication and Authorization for Cons | ||||
| trained Environments (ACE)</title> | ||||
| <author initials='L' surname='Seitz' fullname='Ludwig Seitz'> | ||||
| <organization /> | ||||
| </author> | ||||
| <date year='2022' month='August'/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="9201"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC9201"/> | ||||
| </reference> | ||||
| </t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="Internet-Draft" value="draft-ietf-ace-oauth-params-1 | ||||
| 5"/> | ||||
| </reference> | ||||
| </references> | </references> | |||
| <references> | <references> | |||
| <name>Informative References</name> | <name>Informative References</name> | |||
| <reference anchor="RFC5869" target="https://www.rfc-editor.org/info/rfc5 | ||||
| 869"> | ||||
| <front> | ||||
| <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)< | ||||
| /title> | ||||
| <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="P. Eronen" initials="P." surname="Eronen"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="May" year="2010"/> | ||||
| <abstract> | ||||
| <t>This document specifies a simple Hashed Message Authentication | ||||
| Code (HMAC)-based key derivation function (HKDF), which can be used as a buildin | ||||
| g block in various protocols and applications. The key derivation function (KDF | ||||
| ) is intended to support a wide range of applications and requirements, and is c | ||||
| onservative in its use of cryptographic hash functions. This document is not an | ||||
| Internet Standards Track specification; it is published for informational pur | ||||
| poses.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="5869"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC5869"/> | ||||
| </reference> | ||||
| <reference anchor="RFC6655" target="https://www.rfc-editor.org/info/rfc6 | ||||
| 655"> | ||||
| <front> | ||||
| <title>AES-CCM Cipher Suites for Transport Layer Security (TLS)</tit | ||||
| le> | ||||
| <author fullname="D. McGrew" initials="D." surname="McGrew"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="D. Bailey" initials="D." surname="Bailey"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="July" year="2012"/> | ||||
| <abstract> | ||||
| <t>This memo describes the use of the Advanced Encryption Standard | ||||
| (AES) in the Counter with Cipher Block Chaining - Message Authentication Code ( | ||||
| CBC-MAC) Mode (CCM) of operation within Transport Layer Security (TLS) and Datag | ||||
| ram TLS (DTLS) to provide confidentiality and data origin authentication. The A | ||||
| ES-CCM algorithm is amenable to compact implementations, making it suitable for | ||||
| constrained environments. [STANDARDS-TRACK]</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="6655"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC6655"/> | ||||
| </reference> | ||||
| <reference anchor="RFC7662" target="https://www.rfc-editor.org/info/rfc7 | ||||
| 662"> | ||||
| <front> | ||||
| <title>OAuth 2.0 Token Introspection</title> | ||||
| <author fullname="J. Richer" initials="J." role="editor" surname="Ri | ||||
| cher"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="October" year="2015"/> | ||||
| <abstract> | ||||
| <t>This specification defines a method for a protected resource to | ||||
| query an OAuth 2.0 authorization server to determine the active state of an OAu | ||||
| th 2.0 token and to determine meta-information about this token. OAuth 2.0 deplo | ||||
| yments can use this method to convey information about the authorization context | ||||
| of the token from the authorization server to the protected resource.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="7662"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC7662"/> | ||||
| </reference> | ||||
| <reference anchor="RFC7748" target="https://www.rfc-editor.org/info/rfc7 | ||||
| 748"> | ||||
| <front> | ||||
| <title>Elliptic Curves for Security</title> | ||||
| <author fullname="A. Langley" initials="A." surname="Langley"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="M. Hamburg" initials="M." surname="Hamburg"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="S. Turner" initials="S." surname="Turner"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="January" year="2016"/> | ||||
| <abstract> | ||||
| <t>This memo specifies two elliptic curves over prime fields that | ||||
| offer a high level of practical security in cryptographic applications, includin | ||||
| g Transport Layer Security (TLS). These curves are intended to operate at the ~ | ||||
| 128-bit and ~224-bit security level, respectively, and are generated determinist | ||||
| ically based on a list of required properties.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="7748"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC7748"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8032" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 032"> | ||||
| <front> | ||||
| <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title> | ||||
| <author fullname="S. Josefsson" initials="S." surname="Josefsson"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="January" year="2017"/> | ||||
| <abstract> | ||||
| <t>This document describes elliptic curve signature scheme Edwards | ||||
| -curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with | ||||
| recommended parameters for the edwards25519 and edwards448 curves. An example i | ||||
| mplementation and test vectors are provided.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8032"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8032"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 446"> | ||||
| <front> | ||||
| <title>The Transport Layer Security (TLS) Protocol Version 1.3</titl | ||||
| e> | ||||
| <author fullname="E. Rescorla" initials="E." surname="Rescorla"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="August" year="2018"/> | ||||
| <abstract> | ||||
| <t>This document specifies version 1.3 of the Transport Layer Secu | ||||
| rity (TLS) protocol. TLS allows client/server applications to communicate over | ||||
| the Internet in a way that is designed to prevent eavesdropping, tampering, and | ||||
| message forgery.</t> | ||||
| <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 50 | ||||
| 77, 5246, and 6961. This document also specifies new requirements for TLS 1.2 i | ||||
| mplementations.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8446"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8446"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8610" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 610"> | ||||
| <front> | ||||
| <title>Concise Data Definition Language (CDDL): A Notational Convent | ||||
| ion to Express Concise Binary Object Representation (CBOR) and JSON Data Structu | ||||
| res</title> | ||||
| <author fullname="H. Birkholz" initials="H." surname="Birkholz"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="C. Vigano" initials="C." surname="Vigano"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="C. Bormann" initials="C." surname="Bormann"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="June" year="2019"/> | ||||
| <abstract> | ||||
| <t>This document proposes a notational convention to express Conci | ||||
| se Binary Object Representation (CBOR) data structures (RFC 7049). Its main goa | ||||
| l is to provide an easy and unambiguous way to express structures for protocol m | ||||
| essages and data formats that use CBOR or JSON.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8610"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8610"/> | ||||
| </reference> | ||||
| </references> | ||||
| </references> | ||||
| <!-- LocalWords: Datagram CoAP CoRE DTLS introducer URI | ||||
| --> | ||||
| <!-- LocalWords: namespace Verifier JSON timestamp timestamps PSK | ||||
| --> | ||||
| <!-- LocalWords: decrypt UTC decrypted whitespace preshared HMAC | ||||
| <!-- Local Variables: --> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5869. | |||
| <!-- coding: utf-8 --> | xml"/> | |||
| <!-- ispell-local-dictionary: "american" --> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6655. | |||
| <!-- End: --> | xml"/> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7662. | ||||
| xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7748. | ||||
| xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8032. | ||||
| xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8446. | ||||
| xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8610. | ||||
| xml"/> | ||||
| </references> | ||||
| </references> | ||||
| <section anchor="acknowledgments" numbered="false" toc="default"> | ||||
| <name>Acknowledgments</name> | ||||
| <t>Special thanks to <contact fullname="Jim Schaad"/> for his contribution | ||||
| s and reviews of this | ||||
| document and to <contact fullname="Ben Kaduk"/> for his thorough reviews of this | ||||
| document. Thanks also to <contact fullname="Paul Kyzivat"/> for his review. The | ||||
| authors also | ||||
| would like to thank <contact fullname="Marco Tiloca"/> for his contributions.</t | ||||
| > | ||||
| <t><contact fullname="Ludwig Seitz"/> worked on this document as part of t | ||||
| he CelticNext | ||||
| projects CyberWI and CRITISEC with funding from Vinnova.</t> | ||||
| </section> | ||||
| </back> | </back> | |||
| <!-- ##markdown-source: | ||||
| H4sIACg8umAAA9V963bcxpng/3qKWvmcNZl0t3knxYl9QlO0pZFkaUU6nl3H | ||||
| R0Q3QBIhGugB0KLbivZp5hnmBfJi+93qBhS66Tg5M6uTEze7gbp89d1vNR6P | ||||
| 1axK8/L2VC/bm/GJUm3eFtmpfpa0yW2dzPVVnZTNoqpb/SpZZbW+zGbLOm9X | ||||
| euvZ1avLbf22rm7yItM3Va3Plu1dVrb5LGnzqtRJmdJXVZ3/wt/gQ+dV2bR1 | ||||
| kpdZqi/KD3ldlXN4qdFbZ+cX2yqZTuvswyk8dvZ2jFOotJqVyRzWlNbJTTvO | ||||
| M1hoMsvGaVs040TGz8a7JwrmzW6renWqmzZVKl/Up7qtl027t7PzdGdPJXWW | ||||
| nNodqIeqvr+tq+XiVMPU+gf4EyChv8Wv1H22gt/TU/2ibLO6zNrxM5xeqaaF | ||||
| fb1PiqqEJa2yRi3yU/1jW81GugEw1dlNA59Wc/zwk1K8wFOlx0rDv7xsYAUT | ||||
| /W1Wp/AufsWbu2yzm6TMM/+XqoZz+b7MP2R1k7d/+49Wf11nACx99X9e0AMA | ||||
| yCxrT/Xbqmlvktmd3t/fOTjYod9msMVTeYG/qFI82PHeyf7hU/lmWbYILphz | ||||
| npQr+nJxRzv7/cHT8cHe7nhv92R8tP9054h+zOZJXpzqW1rjH9tf8gmsMdjb | ||||
| m4n+OqtvYbjS292bIrkJv4f3YLuMF/9tNnngb3Iqy41u8xy2WdWdXZ4nddPC | ||||
| yv1f/hud4d6uv71ZMq2iW/t2AiRSAJJntbe3b//2n8AJwl9obxd1PmsaIO6z | ||||
| rwMUqeDxSSOP/zGTpyazah7M9gpny9tfvKleLdOH/Nb7muY5r+bTvM1mdwHU | ||||
| nv3lb/9xX2a3wK5Kvb/rQe11Usz/9p8e1PZ2d/X+YQi0y4csFdDKuguaHBYO | ||||
| k/9xZuakZasSz7WFowRy1u++OYcRn8rHk93jA/l4sHdsvj3aPzg2H48PzLfH | ||||
| e4c77uOu+7hnPj7dO7Tj2m9P4ATNx4M9+/HYTnHyFKbQs2mFp/Ni/GxiWWWF | ||||
| XIh45S+n8d8WCTD75hSYZnnT2eXhyZHdz9GhWdjx0ZFd7vHBiVnCzr5b48GR | ||||
| +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 | ||||
| reUT9/BFmfKI/w+Mw5TJz8gAAA== | ||||
| </rfc> | </rfc> | |||
| End of changes. 171 change blocks. | ||||
| 1477 lines changed or deleted | 703 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||