ACE Working Group G. Selander Internet-Draft J. Preuß Mattsson Intended status: Standards Track Ericsson Expires: 4 September 2025 M. Tiloca R. Höglund RISE 3 March 2025 Ephemeral Diffie-Hellman Over COSE (EDHOC) and Object Security for Constrained Environments (OSCORE) Profile for Authentication and Authorization for Constrained Environments (ACE) draft-ietf-ace-edhoc-oscore-profile-07 Abstract This document specifies a profile for the Authentication and Authorization for Constrained Environments (ACE) framework. It utilizes Ephemeral Diffie-Hellman Over COSE (EDHOC) for achieving mutual authentication between an ACE-OAuth client and resource server, and it binds an authentication credential of the client to an ACE-OAuth access token. EDHOC also establishes an Object Security for Constrained RESTful Environments (OSCORE) Security Context, which is used to secure communications between the client and resource server when accessing protected resources according to the authorization information indicated in the access token. This profile can be used to delegate management of authorization information from a resource-constrained server to a trusted host with less severe limitations regarding processing power and memory. About This Document This note is to be removed before publishing as an RFC. Status information for this document may be found at https://datatracker.ietf.org/doc/draft-ietf-ace-edhoc-oscore- profile/. Discussion of this document takes place on the Authentication and Authorization for Constrained Environments (ace) Working Group mailing list (mailto:ace@ietf.org), which is archived at https://mailarchive.ietf.org/arch/browse/ace/. Subscribe at https://www.ietf.org/mailman/listinfo/ace/. Source for this draft and an issue tracker can be found at https://github.com/ace-wg/ace-edhoc-oscore-profile. Selander, et al. Expires 4 September 2025 [Page 1] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 Status of This Memo This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at https://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." This Internet-Draft will expire on 4 September 2025. Copyright Notice Copyright (c) 2025 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/ license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License. Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 6 2. Protocol Overview . . . . . . . . . . . . . . . . . . . . . . 7 3. Client-AS Communication . . . . . . . . . . . . . . . . . . . 10 3.1. C-to-AS: POST to /token endpoint . . . . . . . . . . . . 11 3.2. Token Series . . . . . . . . . . . . . . . . . . . . . . 13 3.3. AS-to-C: Response . . . . . . . . . . . . . . . . . . . . 14 3.3.1. Access Token . . . . . . . . . . . . . . . . . . . . 16 3.3.2. Processing at C . . . . . . . . . . . . . . . . . . . 19 3.3.3. Update of Access Rights . . . . . . . . . . . . . . . 19 3.4. EDHOC_Information . . . . . . . . . . . . . . . . . . . . 20 4. Client-RS Communication . . . . . . . . . . . . . . . . . . . 28 4.1. EAD items for Access Token and Session Identifier . . . . 29 4.2. EDHOC Session . . . . . . . . . . . . . . . . . . . . . . 30 4.3. Forward Message Flow . . . . . . . . . . . . . . . . . . 32 Selander, et al. Expires 4 September 2025 [Page 2] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 4.3.1. EDHOC message_1 . . . . . . . . . . . . . . . . . . . 32 4.3.2. EDHOC message_2 . . . . . . . . . . . . . . . . . . . 32 4.3.3. EDHOC message_3 . . . . . . . . . . . . . . . . . . . 32 4.4. Reverse Message Flow . . . . . . . . . . . . . . . . . . 33 4.4.1. Trigger Message . . . . . . . . . . . . . . . . . . . 33 4.4.2. EDHOC message_1 . . . . . . . . . . . . . . . . . . . 34 4.4.3. EDHOC message_2 . . . . . . . . . . . . . . . . . . . 34 4.4.4. EDHOC message_3 . . . . . . . . . . . . . . . . . . . 34 4.4.5. EDHOC message_4 . . . . . . . . . . . . . . . . . . . 35 4.5. OSCORE Security Context . . . . . . . . . . . . . . . . . 35 4.6. Update of Access Rights . . . . . . . . . . . . . . . . . 36 4.6.1. C-to-RS: POST to /authz-info endpoint . . . . . . . . 37 4.6.2. RS-to-C: 2.01 (Created) . . . . . . . . . . . . . . . 38 4.7. Discarding the OSCORE Security Context . . . . . . . . . 38 4.8. Establishing a New OSCORE Security Context . . . . . . . 39 4.9. Access Rights Verification . . . . . . . . . . . . . . . 40 4.10. Access Token Invalidity . . . . . . . . . . . . . . . . . 40 4.11. Authentication Credential Invalidity . . . . . . . . . . 40 4.12. EDHOC Session Invalidity . . . . . . . . . . . . . . . . 41 4.13. Using AS Request Creation Hints . . . . . . . . . . . . . 41 5. Secure Communication with AS . . . . . . . . . . . . . . . . 42 6. CWT Confirmation Methods . . . . . . . . . . . . . . . . . . 42 6.1. Ordered Chain of X.509 Certificates . . . . . . . . . . . 42 6.2. Unordered Bag of X.509 Certificates . . . . . . . . . . . 43 6.3. Hash of an X.509 Certificate . . . . . . . . . . . . . . 43 6.4. URI Pointing to an Ordered Chain of X.509 Certificates . 43 6.5. Ordered Chain of C509 Certificates . . . . . . . . . . . 43 6.6. Unordered Bag of C509 Certificates . . . . . . . . . . . 43 6.7. Hash of a C509 Certificate . . . . . . . . . . . . . . . 43 6.8. URI Pointing to an Ordered Chain of C509 Certificates . . 43 6.9. CWT Containing a COSE_Key . . . . . . . . . . . . . . . . 44 6.10. CCS Containing a COSE_Key . . . . . . . . . . . . . . . . 44 7. JWT Confirmation Methods . . . . . . . . . . . . . . . . . . 44 7.1. Ordered Chain of X.509 Certificates . . . . . . . . . . . 44 7.2. Unordered Bag of X.509 Certificates . . . . . . . . . . . 44 7.3. Hash of an X.509 Certificate . . . . . . . . . . . . . . 44 7.4. URI Pointing to an Ordered Chain of X.509 Certificates . 45 7.5. Ordered Chain of C509 Certificates . . . . . . . . . . . 45 7.6. Unordered Bag of C509 Certificates . . . . . . . . . . . 45 7.7. Hash of a C09 Certificate . . . . . . . . . . . . . . . . 45 7.8. URI Pointing to an Ordered Chain of C509 Certificates . . 45 7.9. CWT Containing a COSE_Key . . . . . . . . . . . . . . . . 46 7.10. CCS Containing a COSE_Key . . . . . . . . . . . . . . . . 46 8. EDHOC Endpoint Identity Types . . . . . . . . . . . . . . . . 46 9. EDHOC Transports . . . . . . . . . . . . . . . . . . . . . . 46 10. EDHOC Trust Anchor Purposes . . . . . . . . . . . . . . . . . 47 11. EDHOC Trust Anchor Types . . . . . . . . . . . . . . . . . . 48 12. Security Considerations . . . . . . . . . . . . . . . . . . . 49 Selander, et al. Expires 4 September 2025 [Page 3] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 13. Privacy Considerations . . . . . . . . . . . . . . . . . . . 50 14. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 50 14.1. ACE Profiles Registry . . . . . . . . . . . . . . . . . 51 14.2. OAuth Parameters Registry . . . . . . . . . . . . . . . 51 14.3. OAuth Parameters CBOR Mappings Registry . . . . . . . . 51 14.4. JSON Web Token Claims Registry . . . . . . . . . . . . . 52 14.5. CBOR Web Token (CWT) Claims Registry . . . . . . . . . . 52 14.6. JWT Confirmation Methods Registry . . . . . . . . . . . 52 14.7. CWT Confirmation Methods Registry . . . . . . . . . . . 55 14.8. EDHOC External Authorization Data Registry . . . . . . . 58 14.9. EDHOC Information Registry . . . . . . . . . . . . . . . 59 14.10. EDHOC Endpoint Identity Types Registry . . . . . . . . . 60 14.11. EDHOC Transports Registry . . . . . . . . . . . . . . . 61 14.12. EDHOC Trust Anchor Purposes Registry . . . . . . . . . . 62 14.13. EDHOC Trust Anchor Types Registry . . . . . . . . . . . 63 14.14. Expert Review Instructions . . . . . . . . . . . . . . . 64 15. References . . . . . . . . . . . . . . . . . . . . . . . . . 65 15.1. Normative References . . . . . . . . . . . . . . . . . . 65 15.2. Informative References . . . . . . . . . . . . . . . . . 68 Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 70 A.1. Workflow without Optimizations . . . . . . . . . . . . . 71 A.2. Workflow with Optimizations . . . . . . . . . . . . . . . 75 Appendix B. Profile Requirements . . . . . . . . . . . . . . . . 77 Appendix C. CDDL Model . . . . . . . . . . . . . . . . . . . . . 78 Appendix D. Document Updates . . . . . . . . . . . . . . . . . . 80 D.1. Version -06 to -07 . . . . . . . . . . . . . . . . . . . 80 D.2. Version -05 to -06 . . . . . . . . . . . . . . . . . . . 81 D.3. Version -04 to -05 . . . . . . . . . . . . . . . . . . . 81 D.4. Version -03 to -04 . . . . . . . . . . . . . . . . . . . 81 D.5. Version -02 to -03 . . . . . . . . . . . . . . . . . . . 82 D.6. Version -01 to -02 . . . . . . . . . . . . . . . . . . . 82 D.7. Version -00 to -01 . . . . . . . . . . . . . . . . . . . 82 Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 83 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 83 1. Introduction This document defines the "coap_edhoc_oscore" profile of the ACE- OAuth framework [RFC9200]. This profile addresses a "zero-touch" constrained setting where authenticated and authorized operations can be performed with low overhead without endpoint specific configurations. Like in the "coap_oscore" profile [RFC9203], also in this profile a client (C) and a resource server (RS) use the Constrained Application Protocol (CoAP) [RFC7252] to communicate, and Object Security for Constrained RESTful Environments (OSCORE) [RFC8613] to protect their communications. However, this profile uses the Ephemeral Diffie- Selander, et al. Expires 4 September 2025 [Page 4] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 Hellman Over COSE (EDHOC) protocol [RFC9528] to establish the OSCORE Security Context. The processing of requests for specific protected resources is identical to what is defined in the "coap_oscore" profile. When using this profile, C accesses protected resources hosted at RS according to the authorization information specified in an access token, which is issued by a trusted authorization server (AS) and is bound to an authentication credential of C. This differs from the "coap_oscore" profile, where the access token is bound to a secret that is generated by AS and is used to derive the OSCORE Security Context. Whereas [RFC9200] recommends the use of CBOR Web Tokens (CWTs) [RFC8392] as access tokens, this profile requires it (see Section 3.3.1). Furthermore, this profile requires that, for messages exchanged between C and AS to request and provide an access token, the payload is encoded in CBOR [RFC8949] (see Section 3.1 and Section 3.3), which ACE requires if CoAP is used (see Section 5 of [RFC9200]) and recommends otherwise (see Section 3 of [RFC9200]). An authentication credential can be a raw public key, e.g., encoded as a CWT Claims Set (CCS) [RFC8392]; or a public key certificate, e.g., an X.509 certificate [RFC5280] or a CBOR-encoded C509 certificate [I-D.ietf-cose-cbor-encoded-cert]); or a different type of data structure containing the public key of the peer in question. The ACE framework establishes what those authentication credentials are, and may transport the actual authentication credentials by value or uniquely refer to them. If an authentication credential is pre- provisioned or can be obtained over less constrained links, then it suffices that ACE provides a unique reference such as a certificate hash (e.g., by using the COSE header parameter "x5t" [RFC9360]). This is in the same spirit as EDHOC, where the authentication credentials specified in the ID_CRED_x message fields can be transported by value or referred to (see Section 3.5.3 of [RFC9528]). In general, AS and RS are likely to have trusted access to each other's authentication credentials, since AS acts on behalf of RS as per the trust model of ACE. Also, AS needs to have some information about C, including the relevant authentication credential, in order to identify C when it requests an access token and to determine what access rights it can be granted. However, the authentication credential of C may potentially be conveyed (or uniquely referred to) within the request for an access token that C makes to AS. Selander, et al. Expires 4 September 2025 [Page 5] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 The establishment of an association between RS and AS in an ACE ecosystem is out of scope, but one solution is to build on the same primitives as used in this document, i.e., EDHOC for authentication and OSCORE for communication security, using for example [I-D.ietf-lake-authz] for onboarding RS with AS and [I-D.ietf-ace-coap-est-oscore] for establishing a trust anchor in RS. A similar procedure can also be applied between C and AS for registering a client and for the establishment of a trust anchor. 1.1. Terminology The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here. Certain security-related terms such as "authentication", "authorization", "confidentiality", "(data) integrity", "Message Authentication Code (MAC)", "Hash-based Message Authentication Code (HMAC)", and "verify" are taken from [RFC4949]. RESTful terminology follows HTTP [RFC9110]. Readers are expected to be familiar with the terms and concepts defined in CoAP [RFC7252], OSCORE [RFC8613], and EDHOC [RFC9528]. Readers are also expected to be familiar with the terms and concepts of the ACE framework described in [RFC9200] and in [RFC9201]. Terminology for entities in the architecture is defined in OAuth 2.0 [RFC6749], such as the client (C), the resource server (RS), and the authorization server (AS). It is assumed in this document that a given resource on a specific RS is associated with a unique AS. Note that the term "endpoint" is used here, as in [RFC9200], following its OAuth definition, which is to denote resources such as /token and /introspect at AS, and /authz-info at RS. The CoAP [RFC7252] definition, which is "An entity participating in the CoAP protocol", is not used in this document. The authorization information (authz-info) resource refers to the authorization information endpoint as specified in [RFC9200]. The term "claim" is used in this document with the same semantics as in [RFC9200], i.e., it denotes information carried in the access token or returned from introspection. Selander, et al. Expires 4 September 2025 [Page 6] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 Concise Binary Object Representation (CBOR) [RFC8949][RFC8742] and Concise Data Definition Language (CDDL) [RFC8610] are used in this document. CDDL predefined type names, especially bstr for CBOR byte strings and tstr for CBOR text strings, are used extensively in this document. Examples throughout this document are expressed in CBOR diagnostic notation as defined in Section 8 of [RFC8949] and Appendix G of [RFC8610]. Diagnostic notation comments are often used to provide a textual representation of the numeric parameter names and values. In the CBOR diagnostic notation used in this document, constructs of the form e'SOME_NAME' are replaced by the value assigned to SOME_NAME in the CDDL model shown in Figure 9 of Appendix C. For example, {e'session_id' : h'01', e'cipher_suites': 3} stands for {0 : h'01', 2 : 3}. Note to RFC Editor: Please delete the paragraph immediately preceding this note. Also, in the CBOR diagnostic notation used in this document, please replace the constructs of the form e'SOME_NAME' with the value assigned to SOME_NAME in the CDDL model shown in Figure 9 of Appendix C. Finally, please delete this note. 2. Protocol Overview This section gives an overview of how to use the ACE framework [RFC9200] together with the lightweight authenticated key exchange protocol EDHOC [RFC9528]. By doing so, the client (C) and the resource server (RS) generate an OSCORE Security Context [RFC8613] associated with authorization information, and use that Security Context to protect their communications. The parameters needed by C to negotiate the use of this profile with the authorization server (AS), as well as the OSCORE setup process, are described in detail in the following sections. RS maintains a collection of authentication credentials. These are associated with OSCORE Security Contexts and with authorization information for all clients that RS is communicating with. The authorization information is used to enforce policies for processing requests from those clients. The ACE framework describes how integrity protected authorization information propagates from AS to RS. This profile describes how C requests from AS an access token specifying authorization information for the resources that C wants to access at RS, by sending an access token request to the /token endpoint at AS (see Section 5.8 of [RFC9200]). Selander, et al. Expires 4 September 2025 [Page 7] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 If the request is granted, then AS can provide C with an access token when sending a response to C, or instead upload the access token directly to RS as per the alternative workflow defined in [I-D.ietf-ace-workflow-and-params]. The latter option is not detailed further in this document. After that, C and RS run the EDHOC protocol, with C using the authentication credential of RS obtained from AS. If C has obtained an access token from AS, then C specifies the access token within an External Authorization Data (EAD) field of an EDHOC message sent during the EDHOC session (see Section 3.8 of [RFC9528]). RS uses the authentication credential of C bound to and specified in the access token. How C and RS run EDHOC is detailed in Section 4.2. If C and RS successfully complete the EDHOC execution and the validation of each other's authentication credential, they are mutually authenticated and derive the OSCORE Security Context as per Appendix A.1 of [RFC9528]. Figure 1 outlines an example of the message flow. A more detailed description of the message flow is shown in Appendix A.1. From then on and as long as there is a valid access token, C effectively gains authorized and secure access to protected resources at RS using the established OSCORE Security Context. When RS receives a request from C protected with an OSCORE Security Context derived from an EDHOC session implementing this profile, then that OSCORE Security Context is used to retrieve the uniquely associated access token determining the access rights of C. The OSCORE Security Context is discarded when an access token (whether the same or a different one) is used to successfully derive a new OSCORE Security Context for C. Selander, et al. Expires 4 September 2025 [Page 8] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 C RS AS | | | | <==== Mutual authentication and secure channel ====> | | | | +-------- POST /token ------------------------------->| | | | |<--------------------------------- Access Token ------+ | + Access Information | | | | +------- POST /edhoc ------>| | | (EDHOC message_1) | | | | | |<------ 2.04 Changed -------+ | | (EDHOC message_2) | | | | | / Derivation of OSCORE | | Security Context / | | | | | +------- POST /edhoc ------>| | | (EDHOC message_3 with | | | access_token in EAD_3) | | | | | | / Derivation of OSCORE | | Security Context / | | | | +----- OSCORE Request ------>| | | | | |<---- OSCORE Response ------| | | | | Figure 1: Protocol Outline using the EDHOC Forward Message Flow. As long as the OSCORE Security Context and the access token are valid, C can contact AS to request an update of its access rights, by sending a similar request as described above to the /token endpoint. This request also includes a "session identifier" (see Section 3.4) provided by AS in the response to the initial access token request, which allows AS to retrieve the data that it previously shared with C. The session identifier is assigned by AS and used to identify a series of access tokens, called a "token series" (see Section 3.2). If C has obtained an access token from AS for updating its access rights belonging to the same token series, then C transfers the access token to RS using the /authz-info endpoint as specified in Section 5.10 of [RFC9200], where the exchanged CoAP messages are protected by the previously established OSCORE Security Context (see Section 4.6). If the access token is valid, RS replies to the request with a 2.01 (Created) response. Selander, et al. Expires 4 September 2025 [Page 9] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 Upon successful update of access rights, the new issued access token effectively becomes the latest in its token series also for RS, but the session identifier remains the same. When the latest access token of a token series becomes invalid (e.g., when it expires or gets revoked), that token series ends. Figure 2 outlines the message flow for updating access rights. C RS AS | | | | <==== Existing security context ====> | | | | +-------- POST /token ------------------------------->| | | | |<--------------------------------- Access Token ------+ | + Access Information | | | | +--- POST /authz-info ----->| | | (OSCORE protected with | | | access_token in payload) | | | | | | / Updated access rights / | | | | |<------ 2.04 Changed -------+ | | | | | | | +----- OSCORE Request ------>| | | | | |<---- OSCORE Response ------| | | | | Figure 2: Protocol Outline for Updating Access Rights. 3. Client-AS Communication The following subsections describe the details of the POST request and response to the /token endpoint between C and AS. In this exchange, C provides AS with its own authentication credential AUTH_CRED_C. Then, AS issues the access token as securely bound to AUTH_CRED_C, by including it or uniquely referring to it in the access token. Together with the access token, AS provides C with a set of parameters that enable C to run EDHOC with RS. In particular, these parameters include information about the authentication credential AUTH_CRED_RS of RS, which is transported by value or uniquely referred to. Selander, et al. Expires 4 September 2025 [Page 10] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 The request to the /token endpoint and the corresponding response can include EDHOC_Information, which is a CBOR map object containing information related to an EDHOC implementation (see Section 3.4). This object is transported in the "edhoc_info" parameter registered in Section 14.2 and Section 14.3. 3.1. C-to-AS: POST to /token endpoint The client-to-AS request is specified in Section 5.8.1 of [RFC9200]. The client MUST send this POST request to the /token endpoint over a secure channel that guarantees authentication, message integrity, and confidentiality (see Section 5). When using this profile, the payload of the POST request MUST be encoded in CBOR [RFC8949], i.e., the request has media-type "application/ace+cbor". In order to reduce the number of libraries that C has to support, it is RECOMMENDED that C and AS use CoAP as message transfer protocol, OSCORE as security protocol, and EDHOC to establish an OSCORE Security Context. AUTH_CRED_C is specified in the "req_cnf" parameter [RFC9201] of the POST request, either transported by value or uniquely referred to. For AUTH_CRED_C, its authentication credential type MUST be one of those supported by EDHOC, e.g., CBOR Web Tokens (CWTs) and CWT Claims Sets (CCSs) [RFC8392], X.509 certificates [RFC5280], and C509 certificates [I-D.ietf-cose-cbor-encoded-cert]. Consequently, the "req_cnf" parameter MUST specify a confirmation method suitable for the type of AUTH_CRED_C, e.g., "x5chain" or "x5t" when AUTH_CRED_C is an X.509 certificate transported by value or referred to, respectively. Note that EDHOC does not admit the use of naked COSE_Keys as authentication credentials. The closest admitted authentication credential type is a CCS containing a COSE_Key in a "cnf" claim and possibly other claims, which can be transported by value using the confirmation method "kccs". Therefore, the "req_cnf" parameter MUST NOT specify the confirmation method "COSE_Key" (CBOR abbreviation: 1). When receiving an Access Token request including the "req_cnf" parameter, AS checks whether it is already storing the authentication credential of C, namely AUTH_CRED_C, specified in "req_cnf" by value or reference. Selander, et al. Expires 4 September 2025 [Page 11] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 If this is not the case, AS retrieves AUTH_CRED_C, either using the "req_cnf" parameter or some other trusted source. After that, AS validates the actual AUTH_CRED_C. In case of successful validation, AS stores AUTH_CRED_C as a valid authentication credential. Otherwise, the Client-to-AS request MUST be declined with the error code "unsupported_pop_key" as defined in Section 5.8.3 of [RFC9200]. An example of client-to-AS request is shown in Figure 3. In this example, C specifies its own authentication credential by reference, as the hash of an X.509 certificate carried in the "x5t" field of the "req_cnf" parameter. Header: POST (Code=0.02) Uri-Host: "as.example.com" Uri-Path: "token" Content-Format: application/ace+cbor Payload: { / audience / 5 : "tempSensor4711", / scope / 9 : "read", / req_cnf / 4 : { e'x5t' : [-15, h'79F2A41B510C1F9B'] } } Figure 3: Example of C-to-AS POST /token request for an access token. If C wants to update its access rights without changing an existing OSCORE Security Context, it MUST specify an EDHOC_Information object in the "edhoc_info" parameter of its POST request to the /token endpoint. The EDHOC_Information object MUST include the "session_id" field. This POST request MUST NOT include the "req_cnf" parameter. An example of such a request is shown in Figure 4. The identifier "session_id" is assigned by AS as discussed in Section 3.2, and identifies an ongoing token series associated with the pair (AUTH_CRED_C, AUTH_CRED_RS). That is, previous access tokens in that series were issued by AS to C, as bound to AUTH_CRED_C and intended for RS as identified by AUTH_CRED_RS. Note that the same "session_id" value might identify multiple ongoing token series, e.g., if those are associated with the same client but different resource servers. In this case, AS can use the "session_id" value together with other information such as the targeted audience (see Section 5.8.1 of [RFC9200]) and the authenticated identity of C, in order to determine the exact token series to which the new requested access token has to be added. Selander, et al. Expires 4 September 2025 [Page 12] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 If the identifier specified in the "session_id" parameter of the POST request identifies multiple, ongoing token series of which C has an access token, then C MUST specify the "audience" parameter in the POST request. In particular, the value of the "audience" parameter MUST be the same value of the "audience" parameter in the POST request that C previously sent to AS, for requesting the first access token in the token series to which the new requested access token has to be added. AS MUST verify that the received "session_id" identifies a token series to which a still valid access token issued for C and RS belongs. If that is not the case, the Client-to-AS request MUST be declined with the error code "invalid_request" as defined in Section 5.8.3 of [RFC9200]. Header: POST (Code=0.02) Uri-Host: "as.example.com" Uri-Path: "token" Content-Format: application/ace+cbor Payload: { / audience / 5 : "tempSensor4711", / scope / 9 : "write", e'edhoc_info_param' : { e'session_id' : h'01' } } Figure 4: Example of C-to-AS POST /token request for updating access rights to an access token. 3.2. Token Series This document refers to "token series" as a series of access tokens that are sorted in chronological order of release and are characterized by the following properties: * Issued by the same AS. * Issued to the same C, and associated with the same authentication credential of C. * Issued for the same RS as identified by the same authentication credential. Selander, et al. Expires 4 September 2025 [Page 13] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 Upon a successful update of access rights (see Section 3.3.3), the new issued access token becomes the latest in its token series. When the latest access token of a token series becomes invalid (e.g., due to its expiration or revocation), the token series it belongs to ends. In this profile, a token series comprises access tokens that are used between a given pair (C, RS), are bound to the same authentication credential AUTH_CRED_C of C, and specify the same value in the "session_id" field of the EDHOC_Information object (see Section 3.4) in their "edhoc_info" claim. AS assigns the value of "session_id" when issuing the first access token of a new series. That "session_id" value remains fixed throughout the series lifetime. When assigning the "session_id" value, AS MUST ensure that it was not used in a previous series whose access tokens share both the following properties with the access tokens of the new series, irrespective of the used ACE profile: * issued to the same client C; and * issued for the same RS. In case the access token is issued for a group-audience (see Section 6.9 of [RFC9200]), what is defined above applies, with the difference that the token series is associated with all the RSs in the group-audience, as indicated by their respective AUTH_CRED_RS. 3.3. AS-to-C: Response After verifying the POST request to the /token endpoint and that C is authorized to access protected resources at RS, AS responds as defined in Section 5.8.2 of [RFC9200], with potential modifications as detailed below. When using this profile, consistent with what is specified in Section 3.1, the payload of the response from AS MUST be encoded in CBOR [RFC8949], i.e., the response has media-type "application/ ace+cbor". If the request from C was invalid or not authorized, AS returns an error response as described in Section 5.8.3 of [RFC9200]. AS can signal that the use of EDHOC and OSCORE as per this profile is REQUIRED for a specific access token, by including the "ace_profile" parameter with the value "coap_edhoc_oscore" in the access token Selander, et al. Expires 4 September 2025 [Page 14] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 response. This means that C MUST use EDHOC with RS and derive an OSCORE Security Context, as specified in Section 4.2. After that, C MUST use the established OSCORE Security Context to protect communications with RS, when accessing protected resources at RS according to the authorization information indicated in the access token. Usually, it is assumed that constrained devices will be pre- configured with the necessary profile, so that this kind of profile signaling can be omitted. According to this document, the AS provides the access token to C, by specifying it in the "access_token" parameter of the access token response. An alternative workflow where the access token is uploaded by AS directly to RS is described in [I-D.ietf-ace-workflow-and-params]. When issuing the first access token of a token series, AS MUST include the following data in the response to C. * The "edhoc_info" parameter conveying an EDHOC_Information object (see Section 3.4). The EDHOC_Information object MUST include the "session_id" field specifying the identifier of the token series which the issued access token belongs to. The EDHOC_Information object MAY include additional fields (see Section 3.4) to convey information about RS. This information is based on knowledge that AS has about RS, e.g., from a previous onboarding process, with particular reference to what RS supports as EDHOC peer. In case the access token is issued for a group-audience (see Section 6.9 of [RFC9200]), the information specified in the EDHOC_Information object refers to the group-audience as a whole. Therefore, it is appropriate for AS to define group-audiences comprising RSs that are all aligned in terms of supported EDHOC features and configurations. * A unique identification of the authentication credential of RS, AUTH_CRED_RS. This is specified in the "rs_cnf" parameter defined in [RFC9201]. AUTH_CRED_RS can be transported by value or referred to by means of an appropriate identifier. When issuing the first access token ever to a pair (C, RS) using a pair of corresponding authentication credentials (AUTH_CRED_C, AUTH_CRED_RS), it is expected that the response to C includes AUTH_CRED_RS by value. Selander, et al. Expires 4 September 2025 [Page 15] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 When later issuing further access tokens to the same pair (C, RS) using the same AUTH_CRED_RS, it is expected that the response to C includes AUTH_CRED_RS by reference. For AUTH_CRED_RS, its authentication credential type MUST be one of those supported by EDHOC. Consequently, the "rs_cnf" parameter MUST specify a confirmation method suitable for the type of AUTH_CRED_RS. That is, the same considerations about AUTH_CRED_C and the "req_cnf" parameter made in Section 3.1 hold for AUTH_CRED_RS and the "rs_cnf" parameter. When issuing an access token for dynamically updating access rights (i.e., the access token is not the first in its token series), the response from AS MUST NOT include the "edhoc_info" and "rs_cnf" parameters (see Section 3.3.3). Figure 5 shows an example of an AS response. The "rs_cnf" parameter specifies the authentication credential of RS, as an X.509 certificate transported by value in the "x5chain" field. The access token and the authentication credential of RS have been truncated for readability. Header: Created (Code=2.01) Content-Format: application/ace+cbor Payload: { / access_token / 1 : h'8343a1010aa2044c53...0f6a' / remainder of access token (CWT) omitted for brevity /, / ace_profile / 38 : e'coap_edhoc_oscore', / expires_in / 2 : 3600, / rs_cnf / 41 : { e'x5chain' : h'3081ee3081a1a00302...77bc' / remainder of the credential omitted for brevity / } e'edhoc_info_param' : { e'session_id' : h'01', e'methods' : [0, 1, 2, 3], e'cipher_suites' : 0 } } Figure 5: Example of AS-to-C Access Token response with EDHOC and OSCORE profile. 3.3.1. Access Token To avoid the complexity of different encodings, an access token of this profile SHALL be a CBOR Web Token (CWT) [RFC8392]. Selander, et al. Expires 4 September 2025 [Page 16] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 When issuing any access token of a token series, AS MUST include the following claims in the access token: * The "edhoc_info" claim defined in Section 14.5 and conveying an EDHOC_Information object (see Section 3.4). The EDHOC_Information object MUST include the "session_id" field specifying the identifier of the token series which the issued access token belongs to. The "session_id" value is the same one included in the EDHOC_Information object of the response to C from the /token endpoint (see Section 3.3), when providing C with the first access token in the series. * The "cnf" claim, specifying the authentication credential AUTH_CRED_C that C specified in its POST request to the /token endpoint, when requesting the first access token in the series which the issued access token belongs to (see Section 3.1). In the access token, AUTH_CRED_C can be transported by value or uniquely referred to by means of an appropriate identifier. Yet, consistent with the considerations about AUTH_CRED_C and the "req_cnf" parameter made in Section 3.1, the "cnf" claim of the access token MUST specify a confirmation method suitable for the type of AUTH_CRED_C. When issuing the first access token of a token series, the confirmation method used in the "cnf" claim MUST be the same one used in the "req_cnf" parameter of the corresponding POST request from C to the /token endpoint. When issuing the first access token ever to a pair (C, RS) using a pair of corresponding authentication credentials (AUTH_CRED_C, AUTH_CRED_RS), it is expected that AUTH_CRED_C is included by value in the "cnf" claim of the access token. When later issuing further access tokens to the same pair (C, RS) using the same AUTH_CRED_C, it is expected that AUTH_CRED_C is identified by reference in the "cnf" claim of the access token. When issuing the first access token of a token series, AS MAY include additional fields in the EDHOC_Information object (see Section 3.4) specified in the "edhoc_info" claim of the access token. Specifically, if the following fields of the EDHOC_Information object are specified in the response to C from the /token endpoint, they MUST be included with the same values in the EDHOC_Information object within the access token. Selander, et al. Expires 4 September 2025 [Page 17] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 * osc_ms_len: The size of the OSCORE Master Secret. If it is not included, the default value from Appendix A.1 of [RFC9528] is assumed. * osc_salt_len: The size of the OSCORE Master Salt. If it is not included, the default value from Appendix A.1 of [RFC9528] is assumed. * osc_version: The OSCORE version. If it is not included, the default value of 1 (see Section 5.4 of [RFC8613]) is assumed. The access token needs to be protected for various reasons. To prevent manipulation of the content, it needs to be integrity protected. Also, RS has to be able to verify that the access token is issued by a trusted AS, by achieving source authentication. Depending on the use case and deployment, the access token may need to be confidentiality protected, for example due to privacy reasons. AS protects the access token using a COSE method [RFC9052] as specified in [RFC8392]. Depending on the audience, there can be different ways to most appropriately ensure the confidentiality of an access token. For an audience comprising a single RS, the CWT Claims Set may be wrapped in COSE_Encrypt / COSE_Encrypt0. Instead, if the access token needs to be read by multiple RSs, then the CWT Claims Set may be wrapped in COSE_Sign / COSE_Sign1 and confidentiality protection is applied during transport, by including the access token in the EAD_3 field of EDHOC message_3 sent by C to RS, when using the EDHOC forward message flow (see Section 4.2). Figure 6 shows an example of CWT Claims Set, including the relevant EDHOC parameters in the "edhoc_info" claim. The "cnf" claim specifies the authentication credential of C, as an X.509 certificate transported by value in the "x5chain" field. The authentication credential of C has been truncated for readability. Selander, et al. Expires 4 September 2025 [Page 18] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 { / aud / 3 : "tempSensorInLivingRoom", / iat / 6 : 1563451500, / exp / 4 : 1563453000, / scope / 9 : "temperature_g firmware_p", / cnf / 8 : { e'x5chain' : h'3081ee3081a1a00302...77bc' / remainder of the credential omitted for brevity / } e'edhoc_info_claim' : { e'session_id' : h'01', e'methods' : [0, 1, 2, 3], e'cipher_suites' : 0 } } Figure 6: Example of CWT Claims Set with EDHOC parameters. 3.3.2. Processing at C When receiving an access token response including the "rs_cnf" parameter, C checks whether it is already storing the authentication credential of RS, namely AUTH_CRED_RS, specified in "rs_cnf" by value or reference. If this is not the case, C retrieves AUTH_CRED_RS, either using the "rs_cnf" parameter or some other trusted source. After that, C validates the actual AUTH_CRED_RS. In case of successful validation, C stores AUTH_CRED_RS as a valid authentication credential. Otherwise, C MUST delete the access token. 3.3.3. Update of Access Rights If C has a valid OSCORE Security Context associated with a valid access token, then C can send a request to AS for updating its access rights while preserving the same OSCORE Security Context. If the request is granted, then AS generates a new access token, where the EDHOC_Information object specified in the "edhoc_info" claim MUST include only the "session_id" field. The access token is provisioned to RS either via C as specified in this document, or directly as described in [I-D.ietf-ace-workflow-and-params]. In either case, the access token response from AS to C MUST NOT include the "edhoc_info" and "rs_cnf" parameters. As defined in Section 3.3.1, the "session_id" field is included in the EDHOC_Information object specified in the "edhoc_info" claim of the new access token. This allows RS to identify the old access Selander, et al. Expires 4 September 2025 [Page 19] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 token to supersede, as well as the OSCORE Security Context already shared between C and RS and to be associated with the new access token. 3.4. EDHOC_Information EDHOC_Information is an object including information that guides two peers towards executing the EDHOC protocol. In particular, the EDHOC_Information is defined to be serialized and transported between nodes, as specified by this document, but it can also be used by other specifications. In the "coap_edhoc_oscore" profile of the ACE-OAuth framework, which is specified in this document, the EDHOC_Information object MUST be encoded as CBOR. However, for easy applicability to other contexts, we define also the JSON encoding. The EDHOC_Information can be encoded either as a JSON object or as a CBOR map. The set of common fields that can appear in an EDHOC_Information can be found in the IANA "EDHOC Information" registry defined in Section 14.9 for extensibility. The initial set of parameters defined in this document is specified below. All parameters are optional. Table 1 provides a summary of the EDHOC_Information parameters defined in this section. +===============+=======+=======+================+==================+ | Name | CBOR | CBOR | Registry | Description | | | label | type | | | +===============+=======+=======+================+==================+ | session_id | 0 | bstr | | Identifier of | | | | | | a session | +---------------+-------+-------+----------------+------------------+ | methods | 1 | int | EDHOC Method | Set of | | | | or | Type registry | supported | | | | array | | EDHOC methods | +---------------+-------+-------+----------------+------------------+ | cipher_suites | 2 | int | EDHOC Cipher | Set of | | | | or | Suites | supported | | | | array | registry | EDHOC cipher | | | | | | suites | +---------------+-------+-------+----------------+------------------+ | message_4 | 3 | True | | Support for | | | | or | | EDHOC | | | | False | | message_4 | +---------------+-------+-------+----------------+------------------+ | comb_req | 4 | True | | Support for | Selander, et al. Expires 4 September 2025 [Page 20] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 | | | or | | the EDHOC + | | | | False | | OSCORE | | | | | | combined | | | | | | request | +---------------+-------+-------+----------------+------------------+ | uri_path | 5 | tstr | | URI-path of | | | | | | the EDHOC | | | | | | resource | +---------------+-------+-------+----------------+------------------+ | osc_ms_len | 6 | uint | | Length in | | | | | | bytes of the | | | | | | OSCORE Master | | | | | | Secret to | | | | | | derive | +---------------+-------+-------+----------------+------------------+ | osc_salt_len | 7 | uint | | Length in | | | | | | bytes of the | | | | | | OSCORE Master | | | | | | Salt to derive | +---------------+-------+-------+----------------+------------------+ | osc_version | 8 | uint | | OSCORE version | | | | | | number to use | +---------------+-------+-------+----------------+------------------+ | cred_types | 9 | int | EDHOC | Set of | | | | or | Authentication | supported | | | | array | Credential | types of | | | | | Types registry | authentication | | | | | | credentials | | | | | | for EDHOC | +---------------+-------+-------+----------------+------------------+ | id_cred_types | 10 | int | COSE Header | Set of | | | | or | Parameters | supported | | | | tstr | registry | types of | | | | or | | authentication | | | | array | | credential | | | | | | identifiers | | | | | | for EDHOC | +---------------+-------+-------+----------------+------------------+ | eads | 11 | uint | EDHOC External | Set of | | | | or | Authorization | supported | | | | array | Data registry | EDHOC External | | | | | | Authorization | | | | | | Data (EAD) | | | | | | items | +---------------+-------+-------+----------------+------------------+ | initiator | 12 | True | | Support for | | | | or | | the EDHOC | | | | False | | Initiator role | Selander, et al. Expires 4 September 2025 [Page 21] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 +---------------+-------+-------+----------------+------------------+ | responder | 13 | True | | Support for | | | | or | | the EDHOC | | | | False | | Responder role | +---------------+-------+-------+----------------+------------------+ | max_msgsize | 14 | uint | | Maximum size | | | | | | of EDHOC | | | | | | messages in | | | | | | bytes | +---------------+-------+-------+----------------+------------------+ | coap_ct | 15 | True | | Requested use | | | | of | | of the CoAP | | | | False | | Content-Format | | | | | | Option in CoAP | | | | | | messages whose | | | | | | payload | | | | | | includes | | | | | | exclusively an | | | | | | EDHOC message, | | | | | | possibly | | | | | | prepended by | | | | | | an EDHOC | | | | | | connection | | | | | | identifier | +---------------+-------+-------+----------------+------------------+ | ep_id_types | 16 | int | EDHOC Endpoint | Set of | | | | or | Identity Types | supported | | | | array | registry | types of | | | | | | endpoint | | | | | | identities for | | | | | | EDHOC | +---------------+-------+-------+----------------+------------------+ | transports | 17 | int | EDHOC | Set of | | | | or | Transports | supported | | | | array | registry | means for | | | | | | transporting | | | | | | EDHOC messages | +---------------+-------+-------+----------------+------------------+ | trust_anchors | 18 | map | EDHOC Trust | Set of | | | | | Anchor | supported | | | | | Purposes | trust anchors | | | | | registry and | | | | | | EDHOC Trust | | | | | | Anchor Types | | | | | | registry | | +---------------+-------+-------+----------------+------------------+ Table 1: EDHOC_Information Parameters Selander, et al. Expires 4 September 2025 [Page 22] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 * session_id: This parameter identifies a 'session' which the EDHOC information is associated with, but does not necessarily identify a specific EDHOC session. In this document, "session_id" identifies a token series. In JSON, the "session_id" value is a Base64 encoded byte string. In CBOR, the "session_id" type is a byte string, and has label 0. * methods: This parameter specifies a set of supported EDHOC methods (see Section 3.2 of [RFC9528]). If the set is composed of a single EDHOC method, this is encoded as an integer. Otherwise, the set is encoded as an array of integers, where each array element encodes one EDHOC method. In JSON, the "methods" value is an integer or an array of integers. In CBOR, the "methods" is an integer or an array of integers, and has label 1. * cipher_suites: This parameter specifies a set of supported EDHOC cipher suites (see Section 3.6 of [RFC9528]). If the set is composed of a single EDHOC cipher suite, this is encoded as an integer. Otherwise, the set is encoded as an array of integers, where each array element encodes one EDHOC cipher suite. In JSON, the "cipher_suites" value is an integer or an array of integers. In CBOR, the "cipher_suites" is an integer or an array of integers, and has label 2. * message_4: This parameter indicates whether the EDHOC message_4 (see Section 5.5 of [RFC9528]) is supported. In JSON, the "message_4" value is a boolean. In CBOR, "message_4" is the simple value "true" or "false", and has label 4. * comb_req: This parameter indicates whether the combined EDHOC + OSCORE request defined in [RFC9668]) is supported. In JSON, the "comb_req" value is a boolean. In CBOR, "comb_req" is the simple value "true" or "false", and has label 5. * uri_path: This parameter specifies the path component of the URI of the EDHOC resource where EDHOC messages have to be sent as requests. In JSON, the "uri_path" value is a string. In CBOR, "uri_path" is a text string, and has label 6. * osc_ms_len: This parameter specifies the size in bytes of the OSCORE Master Secret to derive after the EDHOC session, as per Appendix A.1 of [RFC9528]. In JSON, the "osc_ms_len" value is an integer. In CBOR, the "osc_ms_len" type is unsigned integer, and has label 7. Selander, et al. Expires 4 September 2025 [Page 23] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 * osc_salt_len: This parameter specifies the size in bytes of the OSCORE Master Salt to derive after the EDHOC session, as per Appendix A.1 of [RFC9528]. In JSON, the "osc_salt_len" value is an integer. In CBOR, the "osc_salt_len" type is unsigned integer, and has label 8. * osc_version: This parameter specifies the OSCORE Version number that the two EDHOC peers have to use when using OSCORE. For more information about this parameter, see Section 5.4 of [RFC8613]. In JSON, the "osc_version" value is an integer. In CBOR, the "osc_version" type is unsigned integer, and has label 9. * cred_types: This parameter specifies a set of supported types of authentication credentials for EDHOC (see Section 3.5.2 of [RFC9528]). If the set is composed of a single type of authentication credential, this is encoded as an integer. Otherwise, the set is encoded as an array of integers, where each array element encodes one type of authentication credential. In JSON, the "cred_types" value is an integer or an array of integers. In CBOR, "cred_types" is an integer or an array of integers, and has label 9. The integer values are taken from the "EDHOC Authentication Credential Types" registry defined in [RFC9668]. * id_cred_types: This parameter specifies a set of supported types of authentication credential identifiers for EDHOC (see Section 3.5.3 of [RFC9528]). If the set is composed of a single type of authentication credential identifier, this is encoded as an integer or a text string. Otherwise, the set is encoded as an array, where each array element encodes one type of authentication credential identifier, as an integer or a text string. In JSON, the "id_cred_types" value is an integer, or a text string, or an array of integers and text strings. In CBOR, "id_cred_types" is an integer or a text string, or an array of integers and text strings, and has label 10. The integer or text string values are taken from the 'Label' column of the "COSE Header Parameters" registry [COSE.Header.Parameters]. Selander, et al. Expires 4 September 2025 [Page 24] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 * eads: This parameter specifies a set of supported EDHOC External Authorization Data (EAD) items, identified by their ead_label (see Section 3.8 of [RFC9528]). If the set is composed of a single ead_label, this is encoded as an unsigned integer. Otherwise, the set is encoded as an array of unsigned integers, where each array element encodes one ead_label. In JSON, the "eads" value is an unsigned integer or an array of unsigned integers. In CBOR, "eads" is an unsigned integer or an array of unsigned integers, and has label 11. The unsigned integer values are taken from the 'Label' column of the "EDHOC External Authorization Data" registry defined in [RFC9528]. * initiator: This parameter specifies whether the EDHOC Initiator role is supported. In JSON, the "initiator" value is a boolean. In CBOR, "initiator" is the simple value "true" (0xf5) or "false" (0xf4), and has label 12. * responder: This parameter specifies whether the EDHOC Responder role is supported. In JSON, the "responder" value is a boolean. In CBOR, "responder" is the simple value "true" (0xf5) or "false" (0xf4), and has label 13. * max_msgsize: This parameter specifies the admitted maximum size of EDHOC messages in bytes. In JSON, the "max_msgsize" value is an unsigned integer. In CBOR, "max_msgsize" is an unsigned integer and has label 14. * coap_cf: This parameter specifies whether it is required that CoAP messages include the CoAP Content-Format Option with value 64 (application/edhoc+cbor-seq) or 65 (application/cid-edhoc+cbor- seq) as appropriate, when the message payload includes exclusively an EDHOC message possibly prepended by an EDHOC connection identifier (see Sections 3.4.1 and A.2 of [RFC9528]). In JSON, the "coap_cf" value is a boolean. In CBOR, "coap_cf" is the simple value true (0xf5) or false (0xf4), and has label 15. * ep_id_types: This parameter specifies a set of supported types of endpoint identities for EDHOC. If the set is composed of a single type of endpoint identity, this is encoded as an integer. Otherwise, the set is encoded as an array, where each array element encodes one type of endpoint identity as an integer. In JSON, the "ep_id_types" value is an integer or an array of integers. In CBOR, "ep_id_types" is an integer or an array of integers, and has label 16. The integer values are taken from the 'CBOR Label' column of the "EDHOC Endpoint Identity Types" registry defined in Section 14.10 of this document. Selander, et al. Expires 4 September 2025 [Page 25] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 * transports: This parameter specifies a set of supported means for transporting EDHOC messages. If the set is composed of a single means for transporting EDHOC messages, this is encoded as an integer. Otherwise, the set is encoded as an array, where each array element encodes one means for transporting EDHOC messages as an integer. In JSON, the "transports" value is an integer or an array of integers. In CBOR, "transports" is an integer or an array of integers, and has label 17. The integer values are taken from the 'Transport ID' column of the "EDHOC Transports" Registry defined in Section 14.11 of this document. * trust_anchors: This parameter specifies a collection of supported trust anchors for performing authentication. According to what is specified within the collection, these trust anchors are used for different purposes, e.g., for verifying authentication credentials of other EDHOC peers in EDHOC sessions. More in detail, the collection of trust anchors is composed of one or more sets. Each set includes one or more trust anchors to use for one specific purpose associated with that set. In particular, each set is composed of pairs, each of which specifies a trust anchor type and an identifier of a trust anchor of that type. If the set is composed of a single pair, this pair is specified as a single item. If the set is composed of multiple pairs, these pairs are specified as elements of an array. Trust anchor purposes are selected from the "EDHOC Trust Anchor Purposes" registry defined in Section 14.12 of this document. Trust anchor types are selected from the "EDHOC Trust Anchor Types" registry defined in Section 14.13 of this document. In JSON, the "trust_anchors" value is an object with one or more outer entries, each of which is associated with a trust anchor purpose. The following applies for each outer entry: - The outer entry's key specifies the associated trust anchor purpose taken from the 'Name' column' of the "EDHOC Trust Anchor Purposes" registry. - The outer entry's value is an object or an array of at least two objects. Each object includes one inner entry, specifying the pair for a trust anchor TA of type TYPE. The inner entry is formatted as follows: o The inner entry's key specifies the TA's type TYPE taken from the 'Name' column of the "EDHOC Trust Anchor Types" registry. Selander, et al. Expires 4 September 2025 [Page 26] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 o The inner entry's value is the identifier of TA, whose encoding depends on TYPE. Such an encoding is what results from applying the conversion in Section 6.1 of [RFC8949] to the CBOR encoding of the identifier of TA when "trust_anchors" is encoded in CBOR (see below). In CBOR, the "trust_anchors" value is a map and has label 18. The map includes one or more outer entries, each of which is associated with a trust anchor purpose. The following applies for each outer entry: - The outer entry's key specifies the associated trust anchor purpose encoded as a CBOR integer, with integer value taken from the 'CBOR label' column of the "EDHOC Trust Anchor Purposes" registry. - The outer entry's value is a map or an array of at least two maps. Each map includes one inner entry, specifying the pair for a trust anchor TA of type TYPE. The inner entry is formatted as follows: o The inner entry's key specifies the TA's type TYPE encoded as a CBOR integer, with integer value taken from the 'CBOR label' column of the "EDHOC Trust Anchor Types" registry. o The inner entry's value specifies the identifier of TA, whose encoding depends on TYPE and is specified by the 'Value type' column of the "EDHOC Trust Anchor Types" registry, for the registry entry that has TYPE as value of the 'Name' column. An example of JSON EDHOC_Information is given in Figure 7. "edhoc_info" : { "session_id" : b64'AQ==', "methods" : 1, "cipher_suites" : 0, "trust_anchors" : { "edhoc_cred" : [ { "c5u" : "coap://certs.c509.example" }, { "x5u" : "coap://certs.x509.example" } ] } } Figure 7: Example of JSON EDHOC_Information An example of CBOR EDHOC_Information is given in Figure 8. Selander, et al. Expires 4 September 2025 [Page 27] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 e'edhoc_info_param' : { e'session_id' : h'01', e'methods' : 1, e'cipher_suites' : 0, e'trust_anchors' : { e'edhoc_cred' : [ { e'c5t_ta_type' : [-15, h'81DC2F32CB87E163'] }, { e'c5u_ta_type' : "coap://certs.c509.example" }, { e'x5t_ta_type' : [-15, h'79F2A41B510C1F9B'] }, { e'x5u_ta_type' : "coap://certs.x509.example" } ] } } Figure 8: Example of CBOR EDHOC_Information The CDDL grammar describing the CBOR EDHOC_Information is: EDHOC_Information = { ? 0 => bstr, ; id ? 1 => int / array, ; methods ? 2 => int / array, ; cipher_suites ? 3 => true / false, ; message_4 ? 4 => true / false, ; comb_req ? 5 => tstr, ; uri_path ? 6 => uint, ; osc_ms_len ? 7 => uint, ; osc_salt_len ? 8 => uint, ; osc_version ? 9 => int / array, ; cred_types ? 10 => int / tstr / array, ; id_cred_types ? 11 => uint / array, ; eads ? 12 => true / false, ; initiator ? 13 => true / false, ; responder ? 14 => uint, ; max_msgsize ? 15 => true / false, ; coap_ct ? 16 => int / array, ; ep_id_types ? 17 => int / array, ; transports ? 18 => map, ; trust_anchors * int / tstr => any } 4. Client-RS Communication This section describes the exchange between C and RS, including the execution of the EDHOC protocol and the uploading of the access token from C to RS. The alternative workflow, where AS uploads the access token directly to RS, is described in [I-D.ietf-ace-workflow-and-params]. Selander, et al. Expires 4 September 2025 [Page 28] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 C and RS run the EDHOC protocol (see Section 4.2), and C uploads the access token in an EAD field (see Section 4.1) of an EDHOC message. Once successfully completed the EDHOC session, C and RS derive an OSCORE Security Context (see Section 4.5). After that, OSCORE is used for protecting communications when C accesses resources at RS, as per the access rights specified in the access token (see Section 4.9). Detailed examples are given in Appendix A. 4.1. EAD items for Access Token and Session Identifier This document defines EAD items (see Section 3.8 of [RFC9528]) for transporting an access token or a session identifier in EDHOC. * EAD_ACCESS_TOKEN = (ead_label, ead_value), where: - ead_label is the integer value TBD registered in Section 14.8. - ead_value is a CBOR byte string equal to the value of the "access_token" field of the access token response from AS (see Section 3.3). This EAD item is critical, i.e., it is used only with the negative value of its ead_label, indicating that the receiving RS must progress the protocol using the received access token, or else abort the EDHOC session (see Section 3.8 of [RFC9528]). A client or resource server supporting the profile of ACE defined in this document MUST support this EAD item. EAD_ACCESS_TOKEN is used only when uploading the first access token of a token series, but not for the update of access rights (see Section 4.6). Editor's note: Add example. * EAD_SESSION_ID = (ead_label, ead_value), where: - ead_label is the integer value TBD registered in Section 14.8. - ead_value is a CBOR byte string equal to the value of the "session_id" field within the EDHOC_Information object specified by AS in the "edhoc_info" parameter of the response from the /token endpoint, when issuing the first access token of a token series (see Section 3.3). Selander, et al. Expires 4 September 2025 [Page 29] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 This EAD item is critical, i.e., it is used only with the negative value of its ead_label, indicating that the receiving RS must progress the protocol using the access token associated with the identifier specified in "ead_value" and with the AUTH_CRED_C used in the EDHOC session, or else abort the EDHOC session (see Section 3.8 of [RFC9528]). A client or resource server supporting the profile of ACE defined in this document MUST support this EAD item. EAD_SESSION_ID is used only if the access token has been provisioned to RS and is valid, but there is a need to establish a (new) OSCORE Security Context between C and RS through EDHOC. Editor's note: Add example. 4.2. EDHOC Session In order to mutually authenticate and establish secure communication for authorized access according to the profile described in this document, C and RS run the EDHOC protocol augmented with an access token. During the EDHOC session, C specifies the access token to RS by value as conveyed in EAD item EAD_ACCESS_TOKEN, or by reference through a session identifier SESSION_ID conveyed in the EAD item EAD_SESSION_ID (see Section 4.1). As per Appendix A.2 of [RFC9528], EDHOC can be transferred over CoAP using either the forward or the reverse message flow, thus manifesting the two possible mappings between the ACE roles (client and resource server) and the EDHOC roles (Initiator and Responder), whereas the CoAP roles (client and server) remain the same. The choice of message flow and corresponding mapping depends on the deployment setting and in particular on which identity to protect the most, since EDHOC protects the identity of the Initiator against active attackers. In case the EDHOC forward message flow is used (see Section 4.3), C acts as EDHOC Initiator, and the access token MUST be specified by value or by reference in the EAD_3 field of EDHOC message_3. In case the EDHOC reverse message flow is used (see Section 4.4), C acts as EDHOC Responder, and the access token MUST be specified by value or by reference either in the EAD_2 field of EDHOC message_2 or in the EAD_4 field of EDHOC message_4. By doing so, the access token or the associated session identifier gets at least the same confidentiality protection by EDHOC as provided to the authentication credential used by C in the EDHOC session (see Section 9.1 of [RFC9528]). Selander, et al. Expires 4 September 2025 [Page 30] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 When RS processes the EAD item EAD_ACCESS_TOKEN or EAD_SESSION_ID, RS MUST verify that the authentication credential AUTH_CRED_C that C specifies in the ID_CRED_X field during the EDHOC session is the same authentication credential correlated with the EAD item. If such a verification fails, RS MUST abort the EDHOC session. Note that: * The ID_CRED_X field in question is the ID_CRED_I or ID_CRED_R field, when using the EDHOC forward or reverse message flow, respectively. * If the processed EAD item is EAD_ACCESS_TOKEN, then the authentication credential correlated with the EAD item is specified in the 'cnf' claim of the access token conveyed in the EAD item. * If the processed EAD item is EAD_SESSION_ID, then the authentication credential correlated with the EAD item is specified in the 'cnf' claim of an access token stored at the RS, which is associated with the authentication credential specified by ID_CRED_X and with the SESSION_ID conveyed in the EAD item. RS MUST have successfully validated the access token before completing the EDHOC session. If completed successfully, then the EDHOC session is associated with both the access token and the pair (SESSION_ID, AUTH_CRED_C). If the EAD item used in the EDHOC session is EAD_ACCESS_TOKEN, then SESSION_ID is specified by the "session_id" field, within the EDHOC_Information object specified by the "cnf" claim of the access token. Any previous EDHOC session associated with the same access token and with the same pair (SESSION_ID, AUTH_CRED_C) MUST be deleted. The OSCORE Security Context derived from that EDHOC session MUST also be deleted. Depending on the message flow used, the EDHOC messages will be carried either in CoAP POST requests or in CoAP 2.04 (Changed) responses, as detailed in Appendix A.2 of [RFC9528]. C MUST target the EDHOC resource at RS with the URI path specified in the "uri_path" field (if present) of the EDHOC_Information object within the access token response received from AS, through which C obtained the first access token of the token series (see Section 3.1). If the "uri_path" field is not present in that EDHOC_Information object, C assumes the target resource at RS to be the well-known EDHOC resource at the path /.well-known/edhoc. Selander, et al. Expires 4 September 2025 [Page 31] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 RS has to ensure that no requests can be performed on an EDHOC resource other than for running the EDHOC protocol. Specifically, it SHOULD NOT be possible to perform any other operation than POST on an EDHOC resource. 4.3. Forward Message Flow This section details the case where the EDHOC forward message flow is used (see Appendix A.2.1 of [RFC9528]), i.e., where C acts as the Initiator I and RS acts as the Responder R. Consistently with the EDHOC forward message flow, C sends EDHOC message_1 and EDHOC message_3 to an EDHOC resource at RS, as CoAP POST requests. RS sends EDHOC message_2 and (optionally) EDHOC message_4 as CoAP 2.04 (Changed) responses. 4.3.1. EDHOC message_1 The processing of EDHOC message_1 is specified in Section 5.2 of [RFC9528], with the following additions: * The EDHOC method MUST be one of the EDHOC methods specified in the "methods" field (if present) of the EDHOC_Information object within the access token response received from AS, through which C obtained the first access token of the token series (see Section 3.1) * The selected cipher suite MUST be an EDHOC cipher suite specified in the "cipher_suites" field (if present) of the EDHOC_Information object within the access token response received from AS, through which C obtained the first access token of the token series (see Section 3.1) 4.3.2. EDHOC message_2 The processing of EDHOC message_2 is specified in Section 5.3 of [RFC9528], with the following additions: * The authentication credential CRED_R specified by the message field ID_CRED_R is AUTH_CRED_RS. 4.3.3. EDHOC message_3 The processing of EDHOC message_3 is specified in Section 5.4 of [RFC9528], with the following additions: * The authentication credential CRED_I specified by the message field ID_CRED_I is AUTH_CRED_C. Selander, et al. Expires 4 September 2025 [Page 32] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 * Exactly one of the EAD items EAD_ACCESS_TOKEN or EAD_SESSION_ID MUST be included in the EAD_3 field. If this is not the case, RS MUST abort the EDHOC session. * If the EAD_3 field includes the EAD item EAD_ACCESS_TOKEN, then RS MUST ensure that the access token specified in the EAD item is valid. If the EAD_3 field includes the EAD item EAD_SESSION_ID, then RS MUST ensure that the access token associated with the session identifier SESSION_ID specified in the EAD item and with the AUTH_CRED_C used in the EDHOC session is valid. The validation follows the procedure specified in Section 4.6.2. If such validation fails, RS MUST reply to C with an EDHOC error message with ERR_CODE = 1 (see Section 6 of [RFC9528]) and it MUST abort the EDHOC session. Editor's note: Instead of ERR_CODE = 1, consider to use ERR_CODE = 3 "Access Denied" defined in draft-ietf-lake-authz 4.4. Reverse Message Flow This section details the case where the EDHOC reverse message flow is used (see Appendix A.2.2 of [RFC9528]), i.e., where C acts as the Responder R and RS acts as the Initiator I. Consistently with the EDHOC reverse message flow, C sends a trigger message, EDHOC message_2, and (optionally) EDHOC message_4 to RS as CoAP POST requests. RS sends EDHOC message_1 and EDHOC message_3 as CoAP 2.04 (Changed) responses. Exactly one of the EAD items EAD_ACCESS_TOKEN or EAD_SESSION_ID MUST be included in either the EAD_2 field of EDHOC message_2 or the EAD_4 field of EDHOC message_4. If this is not the case, RS MUST abort the EDHOC session. Specific instructions for the different messages are provided in the following subsections. 4.4.1. Trigger Message As specified in Appendix A.2.2 of [RFC9528], the trigger message is an empty POST request that C sends to the EDHOC resource at RS, as intended to trigger a response conveying EDHOC message_1. In case the access token is issued for a group-audience (see Section 6.9 of [RFC9200]), then C can perform an EDHOC "roll call", by sending the trigger message as a group request over IP multicast [I-D.ietf-core-groupcomm-bis]. For the sake of efficiency, it is Selander, et al. Expires 4 September 2025 [Page 33] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 expected that the group-audience is appropriately associated with a CoAP group and/or application group (see Section 2 of [I-D.ietf-core-groupcomm-bis]), so that only the RSs belonging to the group-audience receive the trigger message. After that, C can receive a different EDHOC message_1 from each of the targeted RSs and separately progresses the corresponding EDHOC sessions, by sending a different EDHOC message_2 to each RS that has replied with an EDHOC message_1. 4.4.2. EDHOC message_1 The processing of EDHOC message_1 is specified in Section 5.2 of [RFC9528]. 4.4.3. EDHOC message_2 The processing of EDHOC message_2 is specified in Section 5.3 of [RFC9528], with the following additions: * The authentication credential CRED_R specified by the message field ID_CRED_R is AUTH_CRED_C. * If the EAD_2 field includes the EAD item EAD_ACCESS_TOKEN, then RS MUST ensure that the access token specified in the EAD item is valid. If the EAD_2 field includes the EAD item EAD_SESSION_ID, then RS MUST ensure that the access token associated with the session identifier SESSION_ID specified in the EAD item and with the AUTH_CRED_C used in the EDHOC session is valid. The validation follows the procedure specified in Section 4.6.2. If such validation fails, RS MUST reply to C with an EDHOC error message with ERR_CODE = 1 (see Section 6 of [RFC9528]) and it MUST abort the EDHOC session. Editor's note: Instead of ERR_CODE = 1, consider to use ERR_CODE = 3 "Access Denied" defined in draft-ietf-lake-authz 4.4.4. EDHOC message_3 The processing of EDHOC message_3 is specified in Section 5.4 of [RFC9528], with the following additions: * The authentication credential CRED_I specified by the message field ID_CRED_I is AUTH_CRED_RS. Selander, et al. Expires 4 September 2025 [Page 34] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 4.4.5. EDHOC message_4 The processing of EDHOC message_4 is specified in Section 5.5 of [RFC9528], with the following additions: * If the EAD_4 field includes the EAD item EAD_ACCESS_TOKEN, then RS MUST ensure that the access token specified in the EAD item is valid. If the EAD_4 field includes the EAD item EAD_SESSION_ID, then RS MUST ensure that the access token associated with the session identifier SESSION_ID specified in the EAD item and with the AUTH_CRED_C used in the EDHOC session is valid. The validation follows the procedure specified in Section 4.6.2. If such validation fails, RS MUST reply to C with an EDHOC error message with ERR_CODE = 1 (see Section 6 of [RFC9528]) and it MUST abort the EDHOC session. Editor's note: Instead of ERR_CODE = 1, consider to use ERR_CODE = 3 "Access Denied" defined in draft-ietf-lake-authz 4.5. OSCORE Security Context Once successfully completed the EDHOC session, C and RS derive an OSCORE Security Context, as defined in Appendix A.1 of [RFC9528]. In addition, the following applies: * The length in bytes of the OSCORE Master Secret (i.e., the oscore_key_length parameter, see Appendix A.1 of [RFC9528]) MUST be the value specified in the "osc_ms_size" field (if present) within the EDHOC_Information object specified by: - The "edhoc_info" parameter of the access token response that C received from AS, through which C obtained the first access token of the token series (see Section 3.1). - The "edhoc_info" claim of the access token provisioned to RS (see Section 3.3.1). * The length in bytes of the OSCORE Master Salt (i.e., the oscore_salt_length parameter, see Appendix A.1 of [RFC9528]) MUST be the value specified in the "osc_salt_size" field (if present) within the EDHOC_Information object specified by: - The "edhoc_info" parameter of the access token response that C received from AS, through which C obtained the first access token of the token series (see Section 3.1). Selander, et al. Expires 4 September 2025 [Page 35] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 - The "edhoc_info" claim of the access token provisioned to RS (see Section 3.3.1). * C and RS MUST use the OSCORE version specified in the "osc_version" field (if present) within the EDHOC_Information object specified by: - The "edhoc_info" parameter of the access token response that C received from AS, through which C obtained the first access token of the token series (see Section 3.1). - The "edhoc_info" claim of the access token provisioned to RS (see Section 3.3.1). * RS associates the latest EDHOC session and the derived OSCORE Security Context with the stored access token, which is bound to the authentication credential AUTH_CRED_C used in the EDHOC session. The access token is also associated with the pair (SESSION_ID, AUTH_CRED_C), where SESSION_ID is the identifier of the token series to which the access token belongs. If supported by C, C MAY use the EDHOC + OSCORE combined request defined in [RFC9668], unless the EDHOC_Information object specified by the "edhoc_info" parameter of the access token response included the "comb_req" field encoding the CBOR simple value "false" (0xf4). In the combined request, both EDHOC message_3 and the first OSCORE- protected application request are combined together in a single OSCORE-protected CoAP request, thus saving one round trip. This requires C to derive the OSCORE Security Context with RS already after having successfully processed the received EDHOC message_2 and before sending EDHOC message_3. An example is provided in Appendix A.2. 4.6. Update of Access Rights If C has a valid OSCORE Security Context associated with a valid access token at RS, then C can request from AS an update of the access rights as described in Section 3.1. If the request is granted, then AS generates a new access token containing updated access rights for C (see Section 3.3.3), in the same token series of the current access token (see Section 3.2). According to this document, AS provides the new access token to C (see Section 3.3) for further uploading to RS. Alternatively, the new access token can be uploaded by AS directly to RS, as described in [I-D.ietf-ace-workflow-and-params]. Selander, et al. Expires 4 September 2025 [Page 36] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 If all validations are successful, C can access protected resources at RS according to the updated access rights, using the previously established OSCORE Security Context. The rest of this section describes the message exchange for the uploading of the new access token from C to RS. 4.6.1. C-to-RS: POST to /authz-info endpoint C can update its access rights by uploading the updated access token to RS using CoAP [RFC7252] and the Authorization Information endpoint as described in Section 5.10.1 of [RFC9200]. That is, C sends a POST request to the /authz-info endpoint at RS, with the request payload containing the access token without any CBOR wrapping. As per Section 5.10.1 of [RFC9200], the Content-Format of the POST request MUST be "application/cwt" to reflect the format of the transported access token. C MUST protect the POST request using the current OSCORE Security Context shared with RS. Upon receiving an access token from C, RS MUST follow the procedures defined in Section 5.10.1 of [RFC9200]. That is, RS MUST verify the validity of the access token. RS MAY make an introspection request (see Section 5.9.1 of [RFC9200]) to validate the access token at AS. RS MUST check the following conditions: * RS checks whether it stores an access token T_OLD, such that the "session_id" field of the EDHOC_Information object specified by the "cnf" claim matches the "session_id" field of the EDHOC_Information object specified by the "cnf" claim of the new access token T_NEW. * RS checks whether the OSCORE Security Context CTX used to protect the request matches the OSCORE Security Context associated with the stored access token T_OLD. If both the conditions above hold, RS MUST supersede the old access token T_OLD by replacing the corresponding authorization information with the one specified in the new access token T_NEW, and MUST associate T_NEW with the OSCORE Security Context CTX. Note that C and RS do not execute the EDHOC protocol, they do not establish a new OSCORE Security Context, and AUTH_CRED_C remains the same. Selander, et al. Expires 4 September 2025 [Page 37] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 4.6.2. RS-to-C: 2.01 (Created) If all validations are successful, RS stores the new access token in such a way that it is possible to retrieve it based on the pair (SESSION_ID, AUTH_CRED_C), where SESSION_ID is the identifier of the token series to which the access token belongs. Note that SESSION_ID is specified in the "session_id" field of the EDHOC_Information object, within the "cnf" claim of the access token. Then, RS MUST reply to the POST request by sending a 2.01 (Created) response with no payload. The response is protected with the same OSCORE Security Context used to protect the corresponding request. After that, C can access protected resources at RS according to the updated access rights, using the previously established OSCORE Security Context. Instead, if any validation fails, RS MUST respond with a 4.01 (Unauthorized) error response. RS MAY provide additional information in the payload of the error response, in order to clarify what went wrong. As specified in Section 5.10.1 of [RFC9200], when receiving a valid access token with updated authorization information from C (see Section 4.6.1), it is recommended that RS overwrites the previous access token. That is, only the latest authorization information in the access token received by RS is valid. This simplifies the process needed by RS to keep track of authorization information for a given client. 4.7. Discarding the OSCORE Security Context There are a number of cases where C or RS have to discard the OSCORE Security Context that they share, and may establish a new one (see Section 4.8). C MUST discard the current OSCORE Security Context shared with RS when any of the following occurs. * The OSCORE Sender Sequence Number space of C is exhausted. * The access token associated with the OSCORE Security Context becomes invalid, for example, due to expiration or revocation. Selander, et al. Expires 4 September 2025 [Page 38] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 * C receives a number of unprotected 4.01 (Unauthorized) responses to OSCORE-protected requests, which are sent to RS and protected using the same OSCORE Security Context. The exact number of such received responses needs to be specified by the application. This can happen, for example, due to lack of storage at RS, which then sends the "AS Request Creation Hints" message (see Section 5.3 of [RFC9200]). * The authentication credential of C (of RS) becomes invalid, e.g., due to expiration or revocation, and it was used as AUTH_CRED_C (AUTH_CRED_RS) in the EDHOC session to establish the OSCORE Security Context. RS MUST discard the current OSCORE Security Context shared with C when any of the following occurs: * The OSCORE Sender Sequence Number space of RS is exhausted. * The access token associated with the OSCORE Security Context becomes invalid, for example, due to expiration or revocation. * The authentication credential of C (of RS) becomes invalid (e.g., due to expiration or revocation), and it was used as AUTH_CRED_C (AUTH_CRED_RS) in the EDHOC session to establish the OSCORE Security Context. After a new access token is successfully uploaded to RS and a new OSCORE Security Context is established between C and RS, messages still in transit that were protected with the previous OSCORE Security Context might not be successfully verified by the recipient, since the old OSCORE Security Context might have been discarded. This means that messages sent shortly before C has uploaded the new access token to RS might not be successfully accepted by the recipient. Furthermore, implementations may want to cancel CoAP observations at RS, if registered before the new OSCORE Security Context has been established. Alternatively, applications need to implement a mechanism to ensure that, from then on, messages exchanged within those observations are going to be protected with the newly derived OSCORE Security Context. 4.8. Establishing a New OSCORE Security Context The procedure of provisioning a new access token to RS specified in this section applies to various cases when an OSCORE Security Context shared between C and RS has been deleted, for example as described in Section 4.7. Selander, et al. Expires 4 September 2025 [Page 39] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 Another exceptional case is when there is still a valid OSCORE Security Context but it needs to be updated, e.g., due to a policy limiting its use in terms of time or amount of processed data, or to the imminent exhaustion of the OSCORE Sender Sequence Number space. In this case, C and RS SHALL attempt to run the KUDOS key update protocol [I-D.ietf-core-oscore-key-update], which is a lightweight alternative independent of ACE and EDHOC that does not require the uploading of an access token. If KUDOS is not supported, then C and RS falls back to EDHOC as outlined above. In either case, C and RS establish a new OSCORE Security Context that replaces the old one and will be used for protecting their communications from then on. In particular, RS MUST associate the new OSCORE Security Context with the current (potentially re- uploaded) access token. Furthermore, the SESSION_ID identifying the token series to which the access token belongs to remains unchanged, even if C and RS have established a new EDHOC session. Unless C and RS re-run the EDHOC protocol, they preserve their OSCORE identifiers, i.e., their OSCORE Sender/Recipient IDs. 4.9. Access Rights Verification RS MUST follow the procedures defined in Section 5.10.2 of [RFC9200]. That is, if RS receives an OSCORE-protected request targeting a protected resource from C, then RS processes the request according to [RFC8613], when Version 1 of OSCORE is used. Future specifications may define new versions of OSCORE, which AS can indicate C and RS to use by means of the "osc_version" field of the EDHOC_Information object (see Section 3). If OSCORE verification succeeds and the target resource requires authorization, RS retrieves the authorization information using the access token associated with the OSCORE Security Context. Then, RS MUST verify that the authorization information covers the target resource and the action intended by C on it. 4.10. Access Token Invalidity When an access token becomes invalid (e.g., due to its expiration or revocation), RS MUST delete the access token and the associated OSCORE Security Context, and MUST notify C with an error response with code 4.01 (Unauthorized) for any long running request, as specified in Section 5.8.3 of [RFC9200]. 4.11. Authentication Credential Invalidity If an authentication credential AUTH_CRED_C of C is invalidated (e.g., it expires), then the following applies: Selander, et al. Expires 4 September 2025 [Page 40] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 * RS MUST delete all the stored access tokens that specify AUTH_CRED_C in the "cnf" claim. * C MUST delete every stored access token such that C obtained the first access token of the same series through the response to an access token request specifying AUTH_CRED_C, e.g., in the "req_cnf" parameter (see Section 3.1). * RS and C MUST abort and purge all the EDHOC sessions that used AUTH_CRED_C and successfully completed, as well as the OSCORE Security Context derived from those sessions (see Section 4.7). If an authentication credential AUTH_CRED_RS of RS is invalidated (e.g., it expires), then the following applies: * C MUST delete every stored access token such that C obtained the first access token of the same series through an access token response specifying AUTH_CRED_RS, e.g., in the 'rs_cnf' parameter (see Section 3.3). * C MUST delete every stored access token that C specified (by value or be reference) during an EDHOC session that used AUTH_CRED_RS and successfully completed. * RS and C MUST abort and purge all the EDHOC sessions that used AUTH_CRED_RS and successfully completed, as well as the OSCORE Security Context derived from those sessions (see Section 4.7). 4.12. EDHOC Session Invalidity If an EDHOC session is aborted and purged for other reasons than those in Section 4.11, then RS and C that established the session MUST delete the OSCORE Security Context derived from that session (see Section 4.7). 4.13. Using AS Request Creation Hints When replying to an unauthorized resource request message from a client, RS can send an unprotected AS Request Creation Hints message as a 4.01 (Unauthorized) error response (see Section 5.3 of [RFC9200]). The message payload can specify a number of parameters that help the sender client acquire a valid access token from AS. These parameters include "audience" and "scope". Selander, et al. Expires 4 September 2025 [Page 41] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 When using this profile and running EDHOC per its reverse message flow (see Section 4.4), RS acts as EDHOC Initiator. A compelling reason to do so is the wish to protect the identity of RS against active attackers, consistently with the EDHOC security properties. However, the identity protection achieved through EDHOC can be defeated if RS exposes information such as audience and scope, when specifying the corresponding parameters in an unprotected AS Request Creation Hints message. Therefore, if RS supports the EDHOC reverse message flow and sends an AS Request Creation Hints, the following applies: * The message payload MUST NOT include the "audience" parameter. * The message payload SHOULD NOT include the "scope" parameter, unless its value cannot contribute to expose the identity of RS. 5. Secure Communication with AS As specified in the ACE framework (see Sections 5.8 and 5.9 of [RFC9200]), the requesting entity (RS and/or C) and AS communicates via the /token or /introspect endpoint. When using this profile, the use of CoAP [RFC7252] and OSCORE [RFC8613] for this communication is RECOMMENDED. Other protocols fulfilling the security requirements defined in Section 5 of [RFC9200] (such as HTTP and DTLS [RFC9147] or TLS [RFC8446]) MAY be used instead. If OSCORE is used, the requesting entity and AS need to have an OSCORE Security Context in place. While this can be pre-installed, the requesting entity and AS can establish such an OSCORE Security Context, for example, by running the EDHOC protocol, as shown between C and AS by the examples in Appendix A.1 and Appendix A.2. This also applies for communication between RS and AS, for example to protect the upload of access tokens from AS directly to RS as described in [I-D.ietf-ace-workflow-and-params]. 6. CWT Confirmation Methods This document defines a number of new CWT confirmation methods, which are registered in Section 14.7. The semantics of each confirmation method is defined below. 6.1. Ordered Chain of X.509 Certificates The confirmation method "x5chain" specifies an ordered array of X.509 certificates [RFC5280]. The semantics of "x5chain" is like that of the "x5chain" COSE Header Parameter specified in [RFC9360]. Selander, et al. Expires 4 September 2025 [Page 42] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 6.2. Unordered Bag of X.509 Certificates The confirmation method "x5bag" specifies a bag of X.509 certificates [RFC5280]. The semantics of "x5bag" is like that of the "x5bag" COSE Header Parameter specified in [RFC9360]. 6.3. Hash of an X.509 Certificate The confirmation method "x5t" specifies the hash value of the end- entity X.509 certificate [RFC5280]. The semantics of "x5t" is like that of the "x5t" COSE Header Parameter specified in [RFC9360]. 6.4. URI Pointing to an Ordered Chain of X.509 Certificates The confirmation method "x5u" specifies the URI [RFC3986] of an ordered chain of X.509 certificates [RFC5280]. The semantics of "x5u" is like that of the "x5u" COSE Header Parameter specified in [RFC9360]. 6.5. Ordered Chain of C509 Certificates The confirmation method "c5c" specifies an ordered array of C509 certificates [I-D.ietf-cose-cbor-encoded-cert]. The semantics of "c5c" is like that of the "c5c" COSE Header Parameter specified in [I-D.ietf-cose-cbor-encoded-cert]. 6.6. Unordered Bag of C509 Certificates The confirmation method "c5b" specifies a bag of C509 certificates [I-D.ietf-cose-cbor-encoded-cert]. The semantics of "c5b" is like that of the "c5b" COSE Header Parameter specified in [I-D.ietf-cose-cbor-encoded-cert]. 6.7. Hash of a C509 Certificate The confirmation method "c5t" specifies the hash value of the end- entity C509 certificate [I-D.ietf-cose-cbor-encoded-cert]. The semantics of "c5t" is like that of the "c5t" COSE Header Parameter specified in [I-D.ietf-cose-cbor-encoded-cert]. 6.8. URI Pointing to an Ordered Chain of C509 Certificates The confirmation method "c5u" specifies the URI [RFC3986] of a COSE_C509 containing an ordered chain of C509 certificates [I-D.ietf-cose-cbor-encoded-cert]. COSE_C509 is defined in [I-D.ietf-cose-cbor-encoded-cert]. The semantics of "c5u" is like that of the "c5u" COSE Header Parameter specified in [I-D.ietf-cose-cbor-encoded-cert]. Selander, et al. Expires 4 September 2025 [Page 43] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 6.9. CWT Containing a COSE_Key The confirmation method "kcwt" specifies a CBOR Web Token (CWT) [RFC8392] containing a COSE_Key [RFC9053] in a 'cnf' claim and possibly other claims. The semantics of "kcwt" is like that of the "kcwt" COSE Header Parameter specified in [RFC9528]. 6.10. CCS Containing a COSE_Key The confirmation method "kccs" specifies a CWT Claims Set (CCS) [RFC8392] containing a COSE_Key [RFC9053] in a 'cnf' claim and possibly other claims. The semantics of "kccs" is like that of the "kccs" COSE Header Parameter specified in [RFC9528]. 7. JWT Confirmation Methods This document defines a number of new JWT confirmation methods, which are registered in Section 14.6. The semantics of each confirmation method is defined below. 7.1. Ordered Chain of X.509 Certificates The confirmation method "x5c" specifies an ordered array of X.509 certificates [RFC5280]. The semantics of "x5c" is like that of the "x5c" JSON Web Signature and Encryption Header Parameter specified in [RFC7515], with the following difference. The public key contained in the first certificate is the proof-of-possession key and does not have to correspond to a key used to digitally sign the JWS. 7.2. Unordered Bag of X.509 Certificates The confirmation method "x5b" specifies a bag of X.509 certificates [RFC5280]. The semantics of the "x5b" is like that of the "x5c" JWT confirmation method defined in Section 7.1, with the following differences. First, the set of certificates is unordered and may contain self-signed certificates. Second, the composition and processing of "x5b" are like for the "x5bag" COSE Header Parameter defined in [RFC9360]. 7.3. Hash of an X.509 Certificate The confirmation method "x5t" specifies the hash value of the end- entity X.509 certificate [RFC5280]. The semantics of "x5t" is like that of the "x5t" JSON Web Signature and Encryption Header Parameter specified in [RFC7515]. Selander, et al. Expires 4 September 2025 [Page 44] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 7.4. URI Pointing to an Ordered Chain of X.509 Certificates The confirmation method "x5u" specifies the URI [RFC3986] of an ordered chain of X.509 certificates [RFC5280]. The semantics of "x5u" is like that of the "x5u" COSE Header Parameter specified in [RFC9360], with the following difference. The public key contained in the first certificate is the proof-of-possession key and does not have to correspond to a key used to digitally sign the JWS. 7.5. Ordered Chain of C509 Certificates The confirmation method "c5c" specifies an ordered array of C509 certificates [I-D.ietf-cose-cbor-encoded-cert]. The semantics of "c5c" is like that of the "x5c" JWT confirmation method defined in Section 7.1, with the following difference. Each string in the JSON array is a base64-encoded (Section 4 of [RFC4648] - not base64url- encoded) C509 certificate. 7.6. Unordered Bag of C509 Certificates The confirmation method "c5b" specifies a bag of C509 certificates [I-D.ietf-cose-cbor-encoded-cert]. The semantics of "c5b" is like that of the "c5c" JWT confirmation method defined in Section 7.5, with the following differences. First, the set of certificates is unordered and may contain self-signed certificates. Second, the composition and processing of "c5b" is like for the "c5b" COSE Header Parameter defined in [I-D.ietf-cose-cbor-encoded-cert]. 7.7. Hash of a C09 Certificate The confirmation method "c5t" specifies the hash value of the end- entity C509 certificate [I-D.ietf-cose-cbor-encoded-cert]. The semantics of "c5t" is like that of the "x5t" JWT confirmation method defined in Section 7.3, with the following differences. First, the base64url-encoded SHA-1 thumbprint is computed over the C509 certificate. Second, the public key contained in the C509 certificate does not have to correspond to a key used to digitally sign the JWS. 7.8. URI Pointing to an Ordered Chain of C509 Certificates The confirmation method "c5u" specifies the URI [RFC3986] of COSE_C509 containing an ordered chain of C509 certificates [I-D.ietf-cose-cbor-encoded-cert]. COSE_C509 is defined in [I-D.ietf-cose-cbor-encoded-cert]. The semantics of "c5u" is like that of the "x5u" JWT confirmation method defined in Section 7.4, with the following differences. First, the URI refers to a resource for the C509 certificate chain. Second, the public key contained in Selander, et al. Expires 4 September 2025 [Page 45] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 one of the C509 certificates and acting as proof-of-possession key does not have to correspond to a key used to digitally sign the JWS. 7.9. CWT Containing a COSE_Key The confirmation method "kcwt" specifies a CBOR Web Token (CWT) [RFC8392] containing a COSE_Key [RFC9053] in a 'cnf' claim and possibly other claims. The format of "kcwt" is the base64url-encoded serialization of the CWT. 7.10. CCS Containing a COSE_Key The confirmation method "kccs" specifies a CWT Claims Set (CCS) [RFC8392] containing a COSE_Key [RFC9053] in a 'cnf' claim and possibly other claims. The format of "kcwt" is the base64url-encoded serialization of the CWT. 8. EDHOC Endpoint Identity Types This document defines the following identifier of type of endpoint identity for EDHOC. Note to RFC Editor: Please replace all occurrences of "[RFC-XXXX]" with the RFC number of this specification and delete this paragraph. +========+============+====================+=====================+ | Name | CBOR label | Description | Reference | +========+============+====================+=====================+ | EUI-64 | 0 | An EUI-64 identity | [RFC-XXXX][RFC4291] | +--------+------------+--------------------+---------------------+ Table 2: EDHOC Endpoint Identity Types 9. EDHOC Transports This document defines the following identifiers of means for transporting EDHOC messages. Selander, et al. Expires 4 September 2025 [Page 46] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 +===========+============+===================+====================+ | Transport | Name | Description | Reference | | ID | | | | +===========+============+===================+====================+ | 0 | CoAP over | EDHOC messages | [RFC7252], | | | UDP | are transported | Appendix A.2 of | | | | as payload of | [RFC9528] | | | | CoAP messages, in | | | | | turn transported | | | | | over UDP | | +-----------+------------+-------------------+--------------------+ | 1 | CoAP over | EDHOC messages | [RFC7252][RFC8323] | | | TCP | are transported | | | | | as payload of | | | | | CoAP messages, in | | | | | turn transported | | | | | over TCP | | +-----------+------------+-------------------+--------------------+ | 2 | CoAP over | EDHOC messages | [RFC7252][RFC8323] | | | WebSockets | are transported | | | | | as payload of | | | | | CoAP messages, in | | | | | turn transported | | | | | over WebSockets | | +-----------+------------+-------------------+--------------------+ Table 3: EDHOC Transports 10. EDHOC Trust Anchor Purposes This document defines the following EDHOC trust anchor purpose. Note to RFC Editor: Please replace all occurrences of "[RFC-XXXX]" with the RFC number of this specification and delete this paragraph. +============+=======+===================+=====================+ | Name | CBOR | Description | Reference | | | label | | | +============+=======+===================+=====================+ | edhoc_cred | 0 | Verifying | [RFC-XXXX][RFC9528] | | | | authentication | | | | | credentials of | | | | | other EDHOC peers | | | | | in EDHOC sessions | | +------------+-------+-------------------+---------------------+ Table 4: EDHOC Trust Anchor Purposes Selander, et al. Expires 4 September 2025 [Page 47] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 Trust anchors with purpose "edhoc_cred" are used for verifying authentication credentials of other EDHOC peers in an EDHOC session, and they typically are authentication credentials of Certificate Authorities (CAs). 11. EDHOC Trust Anchor Types This document defines the following EDHOC trust anchor types. Note to RFC Editor: Please replace all occurrences of "[RFC-XXXX]" with the RFC number of this specification and delete this paragraph. +======+=======+===============+=================+=================+ | Name | CBOR | Value type | Description | Reference | | | label | | | | +======+=======+===============+=================+=================+ | uuid | 0 | #6.37(bstr) | Binary CBOR- | [RFC- | | | | | encoded UUID | XXXX][RFC9562] | +------+-------+---------------+-----------------+-----------------+ | kid | 4 | bstr | Key identifier | [RFC- | | | | | | XXXX][RFC9052] | +------+-------+---------------+-----------------+-----------------+ | c5t | 22 | COSE_CertHash | Hash of a C509 | [RFC- | | | | | certificate | XXXX][draft- | | | | | | ietf-cose-cbor- | | | | | | encoded-cert] | +------+-------+---------------+-----------------+-----------------+ | c5u | 23 | uri | URI pointing to | [RFC- | | | | | a COSE_C509 | XXXX][draft- | | | | | containing a | ietf-cose-cbor- | | | | | ordered chain | encoded-cert] | | | | | of certificates | | +------+-------+---------------+-----------------+-----------------+ | x5t | 34 | COSE_CertHash | Hash of an | [RFC- | | | | | X.509 | XXXX][RFC9360] | | | | | certificate | | +------+-------+---------------+-----------------+-----------------+ | x5u | 35 | uri | URI pointing to | [RFC- | | | | | an X.509 | XXXX][RFC9360] | | | | | certificate | | +------+-------+---------------+-----------------+-----------------+ Table 5: EDHOC Trust Anchor Types Selander, et al. Expires 4 September 2025 [Page 48] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 12. Security Considerations This document specifies a profile for the Authentication and Authorization for Constrained Environments (ACE) framework [RFC9200]. Thus, the general security considerations from the ACE framework also apply to this profile. Furthermore, the security considerations from OSCORE [RFC8613] and from EDHOC [RFC9528] also apply to this specific use of the OSCORE and EDHOC protocols. As previously stated, once completed the EDHOC session, C and RS are mutually authenticated through their respective authentication credentials, whose retrieval has been facilitated by AS. Also, once completed the EDHOC session, C and RS have established a long-term secret key PRK_out enjoying forward secrecy. This is in turn used by C and RS to establish an OSCORE Security Context. Furthermore, RS achieves confirmation that C has PRK_out (proof-of- possession) when completing the EDHOC session. Instead, C achieves confirmation that RS has PRK_out (proof-of-possession) either when receiving the optional EDHOC message_4 from RS, or when successfully verifying a response from RS protected with the established OSCORE Security Context. OSCORE is designed to secure point-to-point communication, providing a secure binding between a request and the corresponding response(s). Thus, the basic OSCORE protocol is not intended for use in point-to- multipoint communication (e.g., enforced via multicast or a publish- subscribe model). Implementers of this profile should make sure that their use case of OSCORE corresponds to the expected one, in order to prevent weakening the security assurances provided by OSCORE. When using this profile, it is RECOMMENDED that RS stores only one access token per client. The use of multiple access tokens for a single client increases the strain on RS, since it must consider every access token associated with the client and calculate the actual permissions that client has. Also, access tokens indicating different or disjoint permissions from each other may lead RS to enforce wrong permissions. If one of the access tokens expires earlier than others, the resulting permissions may offer insufficient protection. Developers SHOULD avoid using multiple access tokens for a same client. Furthermore, RS MUST NOT store more than one access token per client per PoP-key (i.e., per client's authentication credential). Selander, et al. Expires 4 September 2025 [Page 49] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 13. Privacy Considerations This document specifies a profile for the Authentication and Authorization for Constrained Environments (ACE) framework [RFC9200]. Thus, the general privacy considerations from the ACE framework also apply to this profile. Furthermore, the privacy considerations from OSCORE [RFC8613] and from EDHOC [RFC9528] also apply to this specific use of the OSCORE and EDHOC protocols. An unprotected response to an unauthorized request may disclose information about RS and/or its existing relationship with C. It is advisable to include as little information as possible in an unencrypted response (see also Section 4.13). When an OSCORE Security Context already exists between C and RS, more detailed information may be included. The (encrypted) access token is never sent in an unprotected POST request to the /authz-info endpoint at RS. Thus, even if C uses the same single access token from multiple locations, the access token's value does not contribute to the risk of C being tracked. The identifiers used in OSCORE, i.e., the OSCORE Sender/Recipient IDs, are negotiated by C and RS during the EDHOC session. When using the EDHOC forward (reverse) message flow: * The EDHOC Connection Identifier C_I (C_R) of C is going to be the OSCORE Recipient ID of C, i.e., the OSCORE Sender ID of RS. * The EDHOC Connection Identifier C_R (C_I) of RS is going to be the OSCORE Recipient ID of RS, i.e., the OSCORE Sender ID of C. These OSCORE identifiers are privacy sensitive (see Section 12.8 of [RFC8613]). In particular, they could reveal information about C, or may be used for correlating different requests from C, e.g., across different networks that C has joined and left over time. This can be mitigated if C and RS dynamically update their OSCORE identifiers, e.g., by using the method defined in [I-D.ietf-core-oscore-id-update]. 14. IANA Considerations This document has the following actions for IANA. Note to RFC Editor: Please replace all occurrences of "[RFC-XXXX]" with the RFC number of this specification and delete this paragraph. Selander, et al. Expires 4 September 2025 [Page 50] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 14.1. ACE Profiles Registry IANA is asked to add the following entry to the "ACE Profiles" registry, following the procedure specified in [RFC9200]. * Name: coap_edhoc_oscore * Description: Profile for delegating client authentication and authorization in a constrained environment by establishing an OSCORE Security Context [RFC8613] between resource-constrained nodes, through the execution of the lightweight authenticated key exchange protocol EDHOC [RFC9528]. * CBOR Value: TBD (value between 1 and 23) * Reference: [RFC-XXXX] 14.2. OAuth Parameters Registry IANA is asked to add the following entry to the "OAuth Parameters" registry. * Name: edhoc_info * Parameter Usage Location: token request and token response * Change Controller: IETF * Reference: [RFC-XXXX] 14.3. OAuth Parameters CBOR Mappings Registry IANA is asked to add the following entry to the "OAuth Parameters CBOR Mappings" registry, following the procedure specified in [RFC9200]. * Name: edhoc_info * CBOR Key: TBD (value between 1 and 255) * Value Type: map * Reference: [RFC-XXXX] * Original Specification: [RFC-XXXX] Selander, et al. Expires 4 September 2025 [Page 51] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 14.4. JSON Web Token Claims Registry IANA is asked to add the following entries to the "JSON Web Token Claims" registry, following the procedure specified in [RFC7519]. * Claim Name: edhoc_info * Claim Description: Information for EDHOC session * Change Controller: IETF * Reference: [RFC-XXXX] 14.5. CBOR Web Token (CWT) Claims Registry IANA is asked to add the following entries to the "CBOR Web Token (CWT) Claims" registry, following the procedure specified in [RFC8392]. * Claim Name: edhoc_info * Claim Description: Information for EDHOC session * JWT Claim Name: edhoc_info * Claim Key: TBD (value between 1 and 255) * Claim Value Type: map * Change Controller: IETF * Reference: [RFC-XXXX] 14.6. JWT Confirmation Methods Registry IANA is asked to add the following entries to the "JWT Confirmation Methods" registry, following the procedure specified in [RFC7800]. * Confirmation Method Value: x5c * Confirmation Method Description: An ordered chain of X.509 certificates * Change Controller: IETF * Reference: Section 7.1 of [RFC-XXXX] Selander, et al. Expires 4 September 2025 [Page 52] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 * Confirmation Method Value: x5b * Confirmation Method Description: An unordered bag of X.509 certificates * Change Controller: IETF * Reference: Section 7.2 of [RFC-XXXX] * Confirmation Method Value: x5t * Confirmation Method Description: Hash of an X.509 certificate * Change Controller: IETF * Reference: Section 7.3 of [RFC-XXXX] * Confirmation Method Value: x5u * Confirmation Method Description: URI pointing to an ordered chain of X.509 certificates * Change Controller: IETF * Reference: Section 7.4 of [RFC-XXXX] * Confirmation Method Value: c5c * Confirmation Method Description: An ordered chain of C509 certificates * Change Controller: IETF * Reference: Section 7.5 of [RFC-XXXX] * Confirmation Method Value: c5b * Confirmation Method Description: An unordered bag of C509 certificates Selander, et al. Expires 4 September 2025 [Page 53] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 * Change Controller: IETF * Reference: Section 7.6 of [RFC-XXXX] * Confirmation Method Value: c5t * Confirmation Method Description: Hash of a C509 certificate * Change Controller: IETF * Reference: Section 7.7 of [RFC-XXXX] * Confirmation Method Value: c5u * Confirmation Method Description: URI pointing to a COSE_C509 containing an ordered chain of C509 certificates * Change Controller: IETF * Reference: Section 7.8 of [RFC-XXXX] * Confirmation Method Value: kcwt * Confirmation Method Description: A CBOR Web Token (CWT) containing a COSE_Key in a 'cnf' claim and possibly other claims * Change Controller: IETF * Reference: Section 7.9 of [RFC-XXXX] * Confirmation Method Value: kccs * Confirmation Method Description: A CWT Claims Set (CCS) containing a COSE_Key in a 'cnf' claim and possibly other claims * Change Controller: IETF * Reference: Section 7.10 of [RFC-XXXX] Selander, et al. Expires 4 September 2025 [Page 54] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 14.7. CWT Confirmation Methods Registry IANA is asked to add the following entries to the "CWT Confirmation Methods" registry, following the procedure specified in [RFC8747]. * Confirmation Method Name: x5chain * Confirmation Method Description: An ordered chain of X.509 certificates * JWT Confirmation Method Name: x5c * Confirmation Key: TBD (value between 24 and 255) * Confirmation Value Type: COSE_X509 * Change Controller: IETF * Reference: Section 6.1 of [RFC-XXXX] * Confirmation Method Name: x5bag * Confirmation Method Description: An unordered bag of X.509 certificates * JWT Confirmation Method Name: x5b * Confirmation Key: TBD (value between 24 and 255) * Confirmation Value Type: COSE_X509 * Change Controller: IETF * Reference: Section 6.2 of [RFC-XXXX] * Confirmation Method Name: x5t * Confirmation Method Description: Hash of an X.509 certificate * JWT Confirmation Method Name: x5t * Confirmation Key: TBD (value between 1 and 23) * Confirmation Value Type: COSE_CertHash Selander, et al. Expires 4 September 2025 [Page 55] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 * Change Controller: IETF * Reference: Section 6.3 of [RFC-XXXX] * Confirmation Method Name: x5u * Confirmation Method Description: URI pointing to an ordered chain of X.509 certificates * JWT Confirmation Method Name: x5u * Confirmation Key: TBD (value between 1 and 23) * Confirmation Value Type: uri * Change Controller: IETF * Reference: Section 6.4 of [RFC-XXXX] * Confirmation Method Name: c5c * Confirmation Method Description: An ordered chain of C509 certificates * JWT Confirmation Method Name: c5c * Confirmation Key: TBD (value between 24 and 255) * Confirmation Value Type: COSE_C509 * Change Controller: IETF * Reference: Section 6.5 of [RFC-XXXX] * Confirmation Method Name: c5b * Confirmation Method Description: An unordered bag of C509 certificates * JWT Confirmation Method Name: c5b * Confirmation Key: TBD (value between 24 and 255) Selander, et al. Expires 4 September 2025 [Page 56] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 * Confirmation Value Type: COSE_C509 * Change Controller: IETF * Reference: Section 6.6 of [RFC-XXXX] * Confirmation Method Name: c5t * Confirmation Method Description: Hash of a C509 certificate * JWT Confirmation Method Name: c5t * Confirmation Key: TBD (value between 1 and 23) * Confirmation Value Type: COSE_CertHash * Change Controller: IETF * Reference: Section 6.7 of [RFC-XXXX] * Confirmation Method Name: c5u * Confirmation Method Description: URI pointing to a COSE_C509 containing an ordered chain of C509 certificates * JWT Confirmation Method Name: c5u * Confirmation Key: TBD (value between 1 and 23) * Confirmation Value Type: uri * Change Controller: IETF * Reference: Section 6.8 of [RFC-XXXX] * Confirmation Method Name: kcwt * Confirmation Method Description: A CBOR Web Token (CWT) containing a COSE_Key in a 'cnf' claim and possibly other claims * JWT Confirmation Method Name: kcwt Selander, et al. Expires 4 September 2025 [Page 57] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 * Confirmation Key: TBD (value between 1 and 23) * Confirmation Value Type: COSE_Messages * Change Controller: IETF * Reference: Section 6.9 of [RFC-XXXX] * Confirmation Method Name: kccs * Confirmation Method Description: A CWT Claims Set (CCS) containing a COSE_Key in a 'cnf' claim and possibly other claims * JWT Confirmation Method Name: kccs * Confirmation Key: TBD (value between 1 and 23) * Confirmation Value Type: map / #6(map) * Change Controller: IETF * Reference: Section 6.10 of [RFC-XXXX] 14.8. EDHOC External Authorization Data Registry IANA is asked to add the following entries to the "EDHOC External Authorization Data" registry defined in Section 10.5 of [RFC9528]. * Name: ACE-OAuth Access Token * Label: TBD (value between 24 and 255) * Description: An Access Token as used in the ACE-OAuth framework [RFC9200] * Reference: [RFC-XXXX], Section 4.1 * Name: Session ID * Label: TBD (value between 1 and 23) * Description: The identifier of an EDHOC session * Reference: [RFC-XXXX], Section 4.1 Selander, et al. Expires 4 September 2025 [Page 58] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 14.9. EDHOC Information Registry IANA is requested to create a new "EDHOC Information" registry within the "Ephemeral Diffie-Hellman Over COSE (EDHOC)" registry group defined in [RFC9528]. The registration policy is either "Private Use", "Standards Action with Expert Review", "Specification Required" per Section 4.6 of [RFC8126], or "Expert Review" per Section 4.5 of [RFC8126]. "Expert Review" guidelines are provided in Section 14.14. All assignments according to "Standards Action with Expert Review" are made on a "Standards Action" basis per Section 4.9 of [RFC8126], with Expert Review additionally required per Section 4.5 of [RFC8126]. The procedure for early IANA allocation of Standards Track code points defined in [RFC7120] also applies. When such a procedure is used, review and approval by the designated expert are also required, in order for the WG chairs to determine that the conditions for early allocation are met (see step 2 in Section 3.1 of [RFC7120]). The columns of the registry are: * Name: A descriptive name that enables easier reference to this item. Because a core goal of this document is for the resulting representations to be compact, it is RECOMMENDED that the name be short. This name is case sensitive. Names may not match other registered names in a case-insensitive manner unless the Designated Experts determine that there is a compelling reason to allow an exception. The name is not used in the CBOR encoding. * CBOR label: The value to be used as CBOR abbreviation of the item. The value MUST be unique. The value can be a positive integer, a negative integer, or a string. Integer values between -256 and 255 and strings of length 1 are designated as "Standards Action with Expert Review". Integer values from -65536 to -257 and from 256 to 65535 and strings of maximum length 2 are designated as "Specification Required". Integer values greater than 65535 and strings of length greater than 2 are designated as "Expert Review". Integer values less than -65536 are marked as "Private Use". * CBOR type: The CBOR type of the item, or a pointer to the registry that defines its type, when that depends on another item. Selander, et al. Expires 4 September 2025 [Page 59] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 * Registry: The registry that values of the item may come from, if one exists. * Description: A brief description of this item. * Specification: A pointer to the public specification for the item, if one exists. This registry will be initially populated by the values in Table 1. In the "Specification" column, the value for all of these entries will be [RFC-XXXX] and [RFC9528]. 14.10. EDHOC Endpoint Identity Types Registry IANA is requested to create a new "EDHOC Endpoint Identity Types" registry within the "Ephemeral Diffie-Hellman Over COSE (EDHOC)" registry group defined in [RFC9528]. The registration policy is either "Private Use", "Standards Action with Expert Review", or "Specification Required" per Section 4.6 of [RFC8126]. "Expert Review" guidelines are provided in Section 14.14. All assignments according to "Standards Action with Expert Review" are made on a "Standards Action" basis per Section 4.9 of [RFC8126], with Expert Review additionally required per Section 4.5 of [RFC8126]. The procedure for early IANA allocation of Standards Track code points defined in [RFC7120] also applies. When such a procedure is used, IANA will ask the designated expert(s) to approve the early allocation before registration. In addition, WG chairs are encouraged to consult the expert(s) early during the process outlined in Section 3.1 of [RFC7120]. The columns of this registry are: * Name: This field contains the name of the EDHOC endpoint identity type. * CBOR label: The value to be used to identify this EDHOC endpoint identity type. These values MUST be unique. The value can be a positive integer or a negative integer. Different ranges of values use different registration policies [RFC8126]. Integer values from -24 to 23 are designated as "Standards Action with Expert Review". Integer values from -65536 to -25 and from 24 to 65535 are designated as "Specification Required". Integer values smaller than -65536 and greater than 65535 are marked as "Private Use". Selander, et al. Expires 4 September 2025 [Page 60] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 * Description: This field contains a short description of the EDHOC endpoint identity type. * Reference: This field contains a pointer to the public specification for the EDHOC endpoint identity type. This registry has been initially populated with the values in Table 2. 14.11. EDHOC Transports Registry IANA is requested to create a new "EDHOC Transports" registry within the "Ephemeral Diffie-Hellman Over COSE (EDHOC)" registry group defined in [RFC9528]. The registration policy is either "Private Use", "Standards Action with Expert Review", or "Specification Required" per Section 4.6 of [RFC8126]. "Expert Review" guidelines are provided in Section 14.14. All assignments according to "Standards Action with Expert Review" are made on a "Standards Action" basis per Section 4.9 of [RFC8126], with Expert Review additionally required per Section 4.5 of [RFC8126]. The procedure for early IANA allocation of Standards Track code points defined in [RFC7120] also applies. When such a procedure is used, IANA will ask the designated expert(s) to approve the early allocation before registration. In addition, WG chairs are encouraged to consult the expert(s) early during the process outlined in Section 3.1 of [RFC7120]. The columns of this registry are: * Transport ID: The value to be used to identify this means for transporting EDHOC messages. These values MUST be unique. The value can be a positive integer or a negative integer. Different ranges of values use different registration policies [RFC8126]. Integer values from -24 to 23 are designated as "Standards Action with Expert Review". Integer values from -65536 to -25 and from 24 to 65535 are designated as "Specification Required". Integer values smaller than -65536 and greater than 65535 are marked as "Private Use". * Name: This field contains the name of the means for transporting EDHOC messages. * Description: This field contains a short description of the means used for transporting EDHOC messages. Selander, et al. Expires 4 September 2025 [Page 61] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 * Reference: This field contains a pointer to the public specification for the means used for transporting EDHOC messages. This registry has been initially populated with the values in Table 3. 14.12. EDHOC Trust Anchor Purposes Registry IANA is requested to create a new "EDHOC Trust Anchor Purposes" registry within the "Ephemeral Diffie-Hellman Over COSE (EDHOC)" registry group defined in [RFC9528]. The registration policy is either "Private Use", "Standards Action with Expert Review", or "Specification Required" per Section 4.6 of [RFC8126]. "Expert Review" guidelines are provided in Section 14.14. All assignments according to "Standards Action with Expert Review" are made on a "Standards Action" basis per Section 4.9 of [RFC8126], with Expert Review additionally required per Section 4.5 of [RFC8126]. The procedure for early IANA allocation of Standards Track code points defined in [RFC7120] also applies. When such a procedure is used, IANA will ask the designated expert(s) to approve the early allocation before registration. In addition, WG chairs are encouraged to consult the expert(s) early during the process outlined in Section 3.1 of [RFC7120]. The columns of this registry are: * Name: This field contains the descriptive name of the trust anchor purpose, to enable easier reference to the item. These names MUST be unique. * CBOR label: This field contains the value used to identify the trust anchor purpose. These values MUST be unique. The value can be an unsigned integer or a negative integer. Different ranges of values use different registration policies: - Integer values from -24 to 23 are designated as "Standards Action with Expert Review". - Integer values from -65536 to -25 and from 24 to 65535 are designated as "Specification Required". - Integer values smaller than -65536 and greater than 65535 are marked as "Private Use". * Description: This field contains a short description of the trust anchor purpose. Selander, et al. Expires 4 September 2025 [Page 62] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 * Reference: This field contains a pointer to the public specification for the trust anchor purpose. This registry has been initially populated with the values in Section 10. 14.13. EDHOC Trust Anchor Types Registry IANA is requested to create a new "EDHOC Trust Anchor Types" registry within the "Ephemeral Diffie-Hellman Over COSE (EDHOC)" registry group defined in [RFC9528]. The registration policy is either "Private Use", "Standards Action with Expert Review", or "Specification Required" per Section 4.6 of [RFC8126]. "Expert Review" guidelines are provided in Section 14.14. All assignments according to "Standards Action with Expert Review" are made on a "Standards Action" basis per Section 4.9 of [RFC8126], with Expert Review additionally required per Section 4.5 of [RFC8126]. The procedure for early IANA allocation of Standards Track code points defined in [RFC7120] also applies. When such a procedure is used, IANA will ask the designated expert(s) to approve the early allocation before registration. In addition, WG chairs are encouraged to consult the expert(s) early during the process outlined in Section 3.1 of [RFC7120]. The columns of this registry are: * Name: This field contains the descriptive name of the type of trust anchor, to enable easier reference to the item. These names MUST be unique. * CBOR label: This field contains the value used to identify the type of trust anchor. These values MUST be unique. The value can be an unsigned integer or a negative integer. Different ranges of values use different registration policies: - Integer values from -24 to 23 are designated as "Standards Action with Expert Review". - Integer values from -65536 to -25 and from 24 to 65535 are designated as "Specification Required". - Integer values smaller than -65536 and greater than 65535 are marked as "Private Use". * Value type: This field contains the CBOR type for the value portion of the label. Selander, et al. Expires 4 September 2025 [Page 63] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 * Description: This field contains a short description of the type of trust anchor. * Reference: This field contains a pointer to the public specification for the type of trust anchor. This registry has been initially populated with the values in Table 5. 14.14. Expert Review Instructions "Standards Action with Expert Review", "Specification Required", and "Expert Review" are three of the registration policies defined for the IANA registries established in this document. This section gives some general guidelines for what the experts should be looking for, but they are being designated as experts for a reason so they should be given substantial latitude. Expert reviewers should take into consideration the following points: * Clarity and correctness of registrations. Experts are expected to check the clarity of purpose and use of the requested entries. Experts need to make sure that the object of registration is clearly defined in the corresponding specification. Entries that do not meet these objective of clarity and completeness must not be registered. * Point squatting should be discouraged. Reviewers are encouraged to get sufficient information for registration requests to ensure that the usage is not going to duplicate one that is already registered and that the point is likely to be used in deployments. The zones tagged as "Private Use" are intended for testing purposes and closed environments. Code points in other ranges should not be assigned for testing. * Specifications are required for the "Standards Action with Expert Review" range of point assignment. Specifications should exist for "Specification Required" ranges, but early assignment before a specification is available is considered to be permissible. When specifications are not provided, the description provided needs to have sufficient information to identify what the point is being used for. Selander, et al. Expires 4 September 2025 [Page 64] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 * Experts should take into account the expected usage of fields when approving point assignment. Documents published via Standards Action can also register points outside the Standards Action range. The length of the encoded value should be weighed against how many code points of that length are left, the size of device it will be used on, and the number of code points left that encode to that size. 15. References 15.1. Normative References [COSE.Header.Parameters] IANA, "COSE Header Parameters", . [I-D.ietf-cose-cbor-encoded-cert] Mattsson, J. P., Selander, G., Raza, S., Höglund, J., and M. Furuhed, "CBOR Encoded X.509 Certificates (C509 Certificates)", Work in Progress, Internet-Draft, draft- ietf-cose-cbor-encoded-cert-12, 8 January 2025, . [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, . [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform Resource Identifier (URI): Generic Syntax", STD 66, RFC 3986, DOI 10.17487/RFC3986, January 2005, . [RFC4291] Hinden, R. and S. Deering, "IP Version 6 Addressing Architecture", RFC 4291, DOI 10.17487/RFC4291, February 2006, . [RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006, . [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., Housley, R., and W. Polk, "Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008, . Selander, et al. Expires 4 September 2025 [Page 65] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 [RFC6749] Hardt, D., Ed., "The OAuth 2.0 Authorization Framework", RFC 6749, DOI 10.17487/RFC6749, October 2012, . [RFC7120] Cotton, M., "Early IANA Allocation of Standards Track Code Points", BCP 100, RFC 7120, DOI 10.17487/RFC7120, January 2014, . [RFC7252] Shelby, Z., Hartke, K., and C. Bormann, "The Constrained Application Protocol (CoAP)", RFC 7252, DOI 10.17487/RFC7252, June 2014, . [RFC7515] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Signature (JWS)", RFC 7515, DOI 10.17487/RFC7515, May 2015, . [RFC7519] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token (JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015, . [RFC7800] Jones, M., Bradley, J., and H. Tschofenig, "Proof-of- Possession Key Semantics for JSON Web Tokens (JWTs)", RFC 7800, DOI 10.17487/RFC7800, April 2016, . [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 8126, DOI 10.17487/RFC8126, June 2017, . [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, . [RFC8323] Bormann, C., Lemay, S., Tschofenig, H., Hartke, K., Silverajan, B., and B. Raymor, Ed., "CoAP (Constrained Application Protocol) over TCP, TLS, and WebSockets", RFC 8323, DOI 10.17487/RFC8323, February 2018, . [RFC8392] Jones, M., Wahlstroem, E., Erdtman, S., and H. Tschofenig, "CBOR Web Token (CWT)", RFC 8392, DOI 10.17487/RFC8392, May 2018, . Selander, et al. Expires 4 September 2025 [Page 66] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 [RFC8610] Birkholz, H., Vigano, C., and C. Bormann, "Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, June 2019, . [RFC8613] Selander, G., Mattsson, J., Palombini, F., and L. Seitz, "Object Security for Constrained RESTful Environments (OSCORE)", RFC 8613, DOI 10.17487/RFC8613, July 2019, . [RFC8742] Bormann, C., "Concise Binary Object Representation (CBOR) Sequences", RFC 8742, DOI 10.17487/RFC8742, February 2020, . [RFC8747] Jones, M., Seitz, L., Selander, G., Erdtman, S., and H. Tschofenig, "Proof-of-Possession Key Semantics for CBOR Web Tokens (CWTs)", RFC 8747, DOI 10.17487/RFC8747, March 2020, . [RFC8949] Bormann, C. and P. Hoffman, "Concise Binary Object Representation (CBOR)", STD 94, RFC 8949, DOI 10.17487/RFC8949, December 2020, . [RFC9052] Schaad, J., "CBOR Object Signing and Encryption (COSE): Structures and Process", STD 96, RFC 9052, DOI 10.17487/RFC9052, August 2022, . [RFC9053] Schaad, J., "CBOR Object Signing and Encryption (COSE): Initial Algorithms", RFC 9053, DOI 10.17487/RFC9053, August 2022, . [RFC9200] Seitz, L., Selander, G., Wahlstroem, E., Erdtman, S., and H. Tschofenig, "Authentication and Authorization for Constrained Environments Using the OAuth 2.0 Framework (ACE-OAuth)", RFC 9200, DOI 10.17487/RFC9200, August 2022, . [RFC9201] Seitz, L., "Additional OAuth Parameters for Authentication and Authorization for Constrained Environments (ACE)", RFC 9201, DOI 10.17487/RFC9201, August 2022, . [RFC9203] Palombini, F., Seitz, L., Selander, G., and M. Gunnarsson, "The Object Security for Constrained RESTful Environments (OSCORE) Profile of the Authentication and Authorization Selander, et al. Expires 4 September 2025 [Page 67] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 for Constrained Environments (ACE) Framework", RFC 9203, DOI 10.17487/RFC9203, August 2022, . [RFC9360] Schaad, J., "CBOR Object Signing and Encryption (COSE): Header Parameters for Carrying and Referencing X.509 Certificates", RFC 9360, DOI 10.17487/RFC9360, February 2023, . [RFC9528] Selander, G., Preuß Mattsson, J., and F. Palombini, "Ephemeral Diffie-Hellman Over COSE (EDHOC)", RFC 9528, DOI 10.17487/RFC9528, March 2024, . [RFC9562] Davis, K., Peabody, B., and P. Leach, "Universally Unique IDentifiers (UUIDs)", RFC 9562, DOI 10.17487/RFC9562, May 2024, . [RFC9668] Palombini, F., Tiloca, M., Höglund, R., Hristozov, S., and G. Selander, "Using Ephemeral Diffie-Hellman Over COSE (EDHOC) with the Constrained Application Protocol (CoAP) and Object Security for Constrained RESTful Environments (OSCORE)", RFC 9668, DOI 10.17487/RFC9668, November 2024, . 15.2. Informative References [I-D.ietf-ace-coap-est-oscore] Selander, G., Raza, S., Furuhed, M., Vučinić, M., and T. Claeys, "Protecting EST Payloads with OSCORE", Work in Progress, Internet-Draft, draft-ietf-ace-coap-est-oscore- 06, 21 October 2024, . [I-D.ietf-ace-workflow-and-params] Tiloca, M. and G. Selander, "Alternative Workflow and OAuth Parameters for the Authentication and Authorization for Constrained Environments (ACE) Framework", Work in Progress, Internet-Draft, draft-ietf-ace-workflow-and- params-03, 21 October 2024, . [I-D.ietf-core-groupcomm-bis] Dijk, E. and M. Tiloca, "Group Communication for the Constrained Application Protocol (CoAP)", Work in Progress, Internet-Draft, draft-ietf-core-groupcomm-bis- Selander, et al. Expires 4 September 2025 [Page 68] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 13, 24 February 2025, . [I-D.ietf-core-oscore-id-update] Höglund, R. and M. Tiloca, "Identifier Update for OSCORE", Work in Progress, Internet-Draft, draft-ietf-core-oscore- id-update-02, 8 January 2025, . [I-D.ietf-core-oscore-key-update] Höglund, R. and M. Tiloca, "Key Update for OSCORE (KUDOS)", Work in Progress, Internet-Draft, draft-ietf- core-oscore-key-update-09, 21 October 2024, . [I-D.ietf-lake-authz] Selander, G., Mattsson, J. P., Vučinić, M., Fedrecheski, G., and M. Richardson, "Lightweight Authorization using Ephemeral Diffie-Hellman Over COSE (ELA)", Work in Progress, Internet-Draft, draft-ietf-lake-authz-03, 21 October 2024, . [I-D.serafin-lake-ta-hint] Serafin, M. and G. Selander, "Trust Anchor Hints in Ephemeral Diffie-Hellman Over COSE (EDHOC)", Work in Progress, Internet-Draft, draft-serafin-lake-ta-hint-00, 21 October 2024, . [RFC4949] Shirey, R., "Internet Security Glossary, Version 2", FYI 36, RFC 4949, DOI 10.17487/RFC4949, August 2007, . [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, . [RFC9110] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, Ed., "HTTP Semantics", STD 97, RFC 9110, DOI 10.17487/RFC9110, June 2022, . Selander, et al. Expires 4 September 2025 [Page 69] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 [RFC9147] Rescorla, E., Tschofenig, H., and N. Modadugu, "The Datagram Transport Layer Security (DTLS) Protocol Version 1.3", RFC 9147, DOI 10.17487/RFC9147, April 2022, . Appendix A. Examples This appendix provides examples where this profile of ACE is used. In particular: * Appendix A.1 does not make use of use of any optimization. * Appendix A.2 makes use of the optimizations defined in [RFC9668], hence reducing the roundtrips of the interactions between C and RS. All these examples build on the following assumptions, as relying on expected early procedures performed at AS. These include the registration of resource servers by the respective resource owners as well as the registrations of clients authorized to request access tokens for those resource servers. * AS knows the authentication credential AUTH_CRED_C of C. * C knows the authentication credential AUTH_CRED_AS of AS. * AS knows the authentication credential AUTH_CRED_RS of RS. * RS knows the authentication credential AUTH_CRED_AS of AS. This is relevant in case AS and RS actually require a secure association (e.g., for RS to perform token introspection at AS, or for AS to upload an access token to RS on behalf of C as described in [I-D.ietf-ace-workflow-and-params]). As a result of the assumptions above, it is possible to limit the transport of AUTH_CRED_C and AUTH_CRED_RS by value only to the following two cases, and only when C requests an access token for RS for the first time when considering the pair (AUTH_CRED_C, AUTH_CRED_RS). * In the access token response from AS to C, where AUTH_CRED_RS is specified by the "rs_cnf" parameter. * In the access token, where AUTH_CRED_C is specified by the "cnf" claim. Selander, et al. Expires 4 September 2025 [Page 70] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 Note that, even under the circumstances mentioned above, AUTH_CRED_C might rather be identified by reference. This is possible if RS can effectively use such a reference from the access token to retrieve AUTH_CRED_C (e.g., from a trusted repository of authentication credentials reachable through a non-constrained link), and if AS is in turn aware of that. In any other case, it is otherwise possible to identify both AUTH_CRED_C and AUTH_CRED_RS by reference, when performing the ACE access control workflow as well as later on when C and RS run EDHOC. A.1. Workflow without Optimizations The example below shows a simple interaction between C and RS: C and RS run EDHOC wherein C uploads the access token to RS, and then accesses a protected resource at RS. C AS RS | | | | EDHOC message_1 to /edhoc | | M01 +--------------------------------->| | | | | | | | | EDHOC message_2 | | M02 |<---------------------------------+ | | ID_CRED_R identifies | | | CRED_R = AUTH_CRED_AS | | | by reference | | | | | | | | | EDHOC message_3 to /edhoc | | M03 +--------------------------------->| | | ID_CRED_I identifies | | | CRED_I = AUTH_CRED_C | | | by reference | | | | | | | | | Token request to /token | | | (OSCORE-protected message) | | M04 +--------------------------------->| | | "req_cnf" identifies | | | AUTH_CRED_C by reference | | | | | | | | | Token response | | | (OSCORE-protected message) | | M05 |<---------------------------------+ | | "rs_cnf" specifies | | Selander, et al. Expires 4 September 2025 [Page 71] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 | AUTH_CRED_RS by value | | | | | | "ace_profile" specifies the | | | ACE profile "coap_edhoc_oscore" | | | | | | "edhoc_info" specifies: | | | { | | | e'session_id' : h'01', | | | e'cipher_suites' : 2, | | | e'methods' : 3, | | | e'uri_path' : "/edhoc" | | | } | | | | | | In the access token: | | | - the "cnf" claim specifies | | | AUTH_CRED_C by value | | | - the "edhoc_info" claim | | | specifies the same as | | | "edhoc_info" above | | | | | Possibly after chain verification, C adds AUTH_CRED_RS to the set of its trusted peer authentication credentials, relying on AS as trusted provider | | | | | | | EDHOC message_1 to /edhoc | | | (no access control is enforced) | | M06 +---------------------------------------------------------------->| | | | | | | | EDHOC message_2 | | M07 |<----------------------------------------------------------------+ | ID_CRED_R identifies | | | CRED_R = AUTH_CRED_RS | | | by reference | | | | | | | | | EDHOC message_3 to /edhoc | | | (no access control is enforced) | | M08 +---------------------------------------------------------------->| | EAD_3 contains access token | | | ID_CRED_I identifies | | | CRED_I = AUTH_CRED_C | | | by reference | | | | | Selander, et al. Expires 4 September 2025 [Page 72] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 Possibly after chain verification, RS adds AUTH_CRED_C to the set of its trusted peer authentication credentials, relying on AS as trusted provider | | | | | | | Access to protected resource | | | (OSCORE-protected message) | | | (access control is enforced) | | M08 +---------------------------------------------------------------->| | | | | Response | | | (OSCORE-protected message) | | M10 |<----------------------------------------------------------------+ | | | Later on, the access token expires ... - C and RS delete their OSCORE Security Context and purge the EDHOC session used to derive it (unless the same session is also used for other reasons). - RS retains AUTH_CRED_C as still valid, and AS knows about it. - The Client retains AUTH_CRED_RS as still valid, and AS knows about it. | | | | | | Time passes ... | | | | | | C asks for a new access token; now all the authentication credentials can be identifies by reference The price to pay is on AS, about remembering that at least one access token has been issued for the pair (Client, RS) and considering the pair (AUTH_CRED_C, AUTH_CRED_RS) | | | | | | | Token request to /token | | | (OSCORE-protected message) | | M11 +--------------------------------->| | | "req_cnf" identifies | | | CRED_I = AUTH_CRED_C | | Selander, et al. Expires 4 September 2025 [Page 73] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 | by reference | | | | | | | | | Token response | | | (OSCORE-protected message) | | M12 |<---------------------------------+ | | "rs_cnf" identifies | | | AUTH_CRED_RS by reference | | | | | | "ace_profile" specifies the | | | ACE profile "coap_edhoc_oscore" | | | | | | "edhoc_info" specifies: | | | { | | | e'session_id' : h'05', | | | e'cipher_suites' : 2, | | | e'methods' : 3, | | | e'uri_path' : "/edhoc" | | | } | | | | | | In the access token: | | | - the "cnf" claim identifies | | | AUTH_CRED_C by reference | | | - the "edhoc_info" claim | | | specifies the same as | | | "edhoc_info" above | | | | | | | | | | | | EDHOC message_1 to /edhoc | | | (no access control is enforced) | | M13 +---------------------------------------------------------------->| | | | | | | | EDHOC message_2 | | | (no access control is enforced) | | M14 |<----------------------------------------------------------------+ | ID_CRED_R identifies | | | CRED_R = AUTH_CRED_RS | | | by reference | | | | | | | | | EDHOC message_3 to /edhoc | | | (no access control is enforced) | | M15 +---------------------------------------------------------------->| | EAD_3 contains access token | | | ID_CRED_I identifies | | | CRED_I = AUTH_CRED_C | | Selander, et al. Expires 4 September 2025 [Page 74] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 | by reference | | | | | | | | | Access to protected resource /r | | | (OSCORE-protected message) | | | (access control is enforced) | | M16 +---------------------------------------------------------------->| | | | | | | | Response | | | (OSCORE-protected message) | | M17 |<----------------------------------------------------------------+ | | | A.2. Workflow with Optimizations The example below builds on the example in Appendix A.1, while additionally using the EDHOC + OSCORE request defined in [RFC9668] when running EDHOC both with AS and with RS. This interaction between C and RS consists of only two roundtrips to upload the access token, run EDHOC, and access the protected resource at RS. C AS RS | | | | EDHOC message_1 to /edhoc | | M01 +----------------------------------->| | | | | | | | | EDHOC message_2 | | M02 |<-----------------------------------+ | | ID_CRED_R identifies | | | CRED_R = AUTH_CRED_AS | | | by reference | | | | | | | | | EDHOC + OSCORE request to /token | | M03 +----------------------------------->| | | - EDHOC message_3 | | | ID_CRED_I identifies | | | CRED_I = AUTH_CRED_C | | | by reference | | | --- --- --- | | | - OSCORE-protected part | | | Token request | | | "req_cnf" identifies | | | AUTH_CRED_C by reference | | Selander, et al. Expires 4 September 2025 [Page 75] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 | | | | | | | Token response | | | (OSCORE-protected message) | | M04 |<-----------------------------------+ | | "rs_cnf" specifies | | | AUTH_CRED_RS by value | | | | | | "ace_profile" specifies the | | | ACE profile "coap_edhoc_oscore" | | | | | | "edhoc_info" specifies: | | | { | | | e'session_id' : h'01', | | | e'cipher_suites' : 2, | | | e'methods' : 3, | | | e'uri_path' : "/edhoc" | | | } | | | | | | In the access token: | | | - the "cnf" claim specifies | | | AUTH_CRED_C by value | | | - the "edhoc_info" claim | | | specifies the same as | | | "edhoc_info" above | | | | | Possibly after chain verification, C adds AUTH_CRED_RS to the set of its trusted peer authentication credentials, relying on AS as trusted provider | | | | EDHOC message_1 to /edhoc | | | (no access control is enforced) | | M05 +---------------------------------------------------------------->| | | | Possibly after chain verification, RS adds AUTH_CRED_C to the set of its trusted peer authentication credentials, relying on AS as trusted provider | | | | | | | EDHOC message_2 | | M06 |<----------------------------------------------------------------+ | ID_CRED_R identifies | | | CRED_R = AUTH_CRED_RS | | | by reference | | Selander, et al. Expires 4 September 2025 [Page 76] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 | | | | | | | EDHOC + OSCORE request to /r | | M07 +---------------------------------------------------------------->| | - EDHOC message_3 | | | EAD_3 contains access token | | | ID_CRED_I identifies | | | CRED_I = AUTH_CRED_C | | | by reference | | | --- --- --- | | | - OSCORE-protected part | | | Application request to /r | | | | | After the EDHOC processing is completed, access control is enforced on the rebuilt OSCORE-protected request, like if it had been sent stand-alone | | | | | | | Response | | | (OSCORE-protected message) | | M08 |<----------------------------------------------------------------+ | | | Appendix B. Profile Requirements This section lists the specifications of this profile based on the requirements of the framework, as requested in Appendix C of [RFC9200]. * Optionally, define new methods for the client to discover the necessary permissions and AS for accessing a resource, different from the one proposed in [RFC9200]: Not specified * Optionally, specify new grant types: Not specified * Optionally, define the use of client certificates as client credential type: C can use authentication credentials of any type admitted by the EDHOC protocol, including public key certificates such as X.509 and C509 certificates. * Specify the communication protocol the client and RS must use: CoAP * Specify the security protocol the client and RS must use to protect their communication: OSCORE Selander, et al. Expires 4 September 2025 [Page 77] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 * Specify how the client and RS mutually authenticate: Explicitly, by successfully executing the EDHOC protocol, after which a common OSCORE Security Context is exported from the EDHOC session. As per the EDHOC authentication method used during the EDHOC session, authentication is provided by digital signatures, or by Message Authentication Codes (MACs) computed from an ephemeral-static ECDH shared secret. * Specify the proof-of-possession protocol(s) and how to select one, if several are available. Also specify which key types (e.g., symmetric/asymmetric) are supported by a specific proof-of- possession protocol: proof-of-possession is first achieved by RS when successfully processing EDHOC message_3 during the EDHOC session with C, through EDHOC algorithms and symmetric EDHOC session keys. Also, proof-of-possession is later achieved by C when receiving from RS: i) the optional EDHOC message_4 during the EDHOC session with RS, through EDHOC algorithms and symmetric EDHOC session keys; or ii) the first response protected with the OSCORE Security Context established after the EDHOC session with RS, through OSCORE algorithms and OSCORE symmetric keys derived from the completed EDHOC session. * Specify a unique ace_profile identifier: coap_edhoc_oscore * If introspection is supported, specify the communication and security protocol for introspection: HTTP/CoAP (+ TLS/DTLS/OSCORE) * Specify the communication and security protocol for interactions between client and AS: HTTP/CoAP (+ TLS/DTLS/OSCORE) * Specify if/how the authz-info endpoint is protected, including how error responses are protected: Not protected * Optionally, define methods of token transport other than the authz-info endpoint: C can upload the access token when executing EDHOC with RS, by including the access token in the EAD_3 field of EDHOC message_3 (see Section 4.2). Appendix C. CDDL Model This section is to be removed before publishing as an RFC. ; ACE Profiles coap_edhoc_oscore = 4 ; OAuth Parameters CBOR Mappings edhoc_info_param = 47 Selander, et al. Expires 4 September 2025 [Page 78] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 ; CBOR Web Token (CWT) Claims edhoc_info_claim = 41 ; CWT Confirmation Methods x5t = 6 x5u = 7 c5t = 8 c5u = 9 kcwt = 10 kccs = 11 x5chain = 24 x5bag = 25 c5c = 26 c5b = 27 ; EDHOC Information session_id = 0 methods = 1 cipher_suites = 2 message_4 = 3 comb_req = 4 uri_path = 5 osc_ms_len = 6 osc_salt_len = 7 osc_version = 8 cred_types = 9 id_cred_types = 10 eads = 11 initiator = 12 responder = 13 max_msgsize = 14 coap_ct = 15 ep_id_types = 16 transports = 17 trust_anchors = 18 ; EDHOC Trust Anchor Purposes edhoc_cred = 0 ; EDHOC Trust Anchor Types c5t_ta_type = 22 c5u_ta_type = 23 x5t_ta_type = 34 x5u_ta_type = 35 Figure 9: CDDL model Selander, et al. Expires 4 September 2025 [Page 79] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 Appendix D. Document Updates This section is to be removed before publishing as an RFC. D.1. Version -06 to -07 * Renamed id_ep_types as ep_id_types. * Revised rules for the AS to assign session ID values. * Added explicit validation of AUTH_CRED_C at AS. * "edhoc_info" only in AS-to-C response for first token in a series. * With a group-audience, "edhoc_info" refers to the whole audience. * Defined parameters for the EDHOC_Information object: - Parameters moved here from draft-ietf-lake-app-profiles. - New parameter "trust_anchors". * Access Token Request/Response messages must be encoded in CBOR. * Explicit statement on admitted confirmation methods. * First token in a series: the "cnf" claim uses the same confirmation method of the "req_cnf" request to /token. * Revised examples in CBOR diagnostic notation. * With a group-audience, the reverse message flow can use a roll call. * Matching authentication credentials from ID_CRED_X and EAD item. * Handling authentication credentials and EDHOC session that become invalid. * Limited use of ACE Request Creation Hints when supporting the EDHOC reverse message flow. * Changed CBOR abbreviations to not collide with existing codepoints. * Updates and fixes in the IANA considerations. * Updated references. Selander, et al. Expires 4 September 2025 [Page 80] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 * Clarifications and editorial improvements. D.2. Version -05 to -06 * The access token can be uploaded through EDHOC in EAD_3, EAD_2, or EAD_4. * Ruled out the upload of the access token to the /authz-info endpoint over an unprotected channel. * Defined an EDHOC EAD item for transporting a Session ID. * Provided more details and added example of dynamic update of access rights. * Defined in detail the use of the EDHOC reverse message flow. * Provided details on access token invalidity. * Revised examples with message exchanges. * Clarifications and editorial improvements. D.3. Version -04 to -05 * CBOR diagnostic notation uses placeholders from a CDDL model. * Only CWTs are supported as access tokens in this profile. * The alternative workflow of ACE is only mentioned as an example. * Clarified that both the EDHOC forward and reverse message flows are possible. * Consistent with the used EDHOC message flow, the access token can be in the EAD item of any EDHOC message. * Explicit registration policies for the new IANA registry. * Fixes in the IANA considerations. * Editorial fixes and improvements. D.4. Version -03 to -04 * Fixed column name and prefilling of the "EDHOC Information" registry. Selander, et al. Expires 4 September 2025 [Page 81] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 * Added EDHOC_Information Parameters originally in draft-tiloca- lake-app-profiles-00. * Removed the case of transporting access token in EAD_1 * Removed redundant normative text * Clarifications of association between access token, session_id, EDHOC session and OSCORE security context * Updated references. * Editorial fixes and improvements. D.5. Version -02 to -03 * Restructured presentation of content. * Simplified description of the use of EDHOC_Information. * Merged the concepts of EDHOC "session_id" and identifier of token series. * Enabled the transport of the access token also in EDHOC EAD_3. * Defined semantics of the newly defined CWT/JWT Confirmation Methods. * Clarifications and editorial improvements. D.6. Version -01 to -02 * Removed use of EDHOC_KeyUpdate. * The Security Context is updated either by KUDOS or a rerun of EDHOC. * The alternative workflow (AS token posting) is specified in separate draft. * Fixed and updated examples. * Editorial improvements. D.7. Version -00 to -01 * Fixed semantics of the ead_value for transporting an Access Token in the EAD_1 field. Selander, et al. Expires 4 September 2025 [Page 82] Internet-Draft EDHOC and OSCORE profile of ACE March 2025 * Error handling aligned with EDHOC. * Precise characterization of the EDHOC execution considered for EDHOC-KeyUpdate. * Fixed message exchange examples. * Added appendix with profile requirements. * Updated references. * Clarifications and editorial improvements. Acknowledgments The authors sincerely thank Christian Amsüss and Carsten Bormann for their comments and feedback. The parameter "trust_anchors" for specifying supported trust anchors builds on a proposal originally described in [I-D.serafin-lake-ta-hint]. This work was supported by the Sweden's Innovation Agency VINNOVA within the EUREKA CELTIC-NEXT project CYPRESS; and by the H2020 project SIFIS-Home (Grant agreement 952652). Authors' Addresses Göran Selander Ericsson Email: goran.selander@ericsson.com John Preuß Mattsson Ericsson Email: john.mattsson@ericsson.com Marco Tiloca RISE Email: marco.tiloca@ri.se Rikard Höglund RISE Email: rikard.hoglund@ri.se Selander, et al. Expires 4 September 2025 [Page 83]