Internet-Draft | Lightweight Authorization for EDHOC | April 2023 |
Selander, et al. | Expires 23 October 2023 | [Page] |
This document describes a procedure for augmenting the lightweight authenticated Diffie-Hellman key exchange protocol EDHOC with third party assisted authorization, targeting constrained IoT deployments (RFC 7228).¶
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 23 October 2023.¶
Copyright (c) 2023 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.¶
For constrained IoT deployments [RFC7228] the overhead and processing contributed by security protocols may be significant which motivates the specification of lightweight protocols that are optimizing, in particular, message overhead (see [I-D.ietf-lake-reqs]). This document describes a procedure for augmenting the lightweight authenticated Diffie-Hellman key exchange EDHOC [I-D.ietf-lake-edhoc] with third party-assisted authorization.¶
The procedure involves a device, a domain authenticator, and an authorization server. The device and authenticator perform mutual authentication and authorization, assisted by the authorization server which provides relevant authorization information to the device (a “voucher”) and to the authenticator.¶
The protocol assumes that authentication between device and authenticator is performed with EDHOC, and defines the integration of a lightweight authorization procedure using the External Authorization Data (EAD) field defined in EDHOC.¶
In this document we consider the target interaction for which authorization is needed to be “enrollment”, for example joining a network for the first time (e.g., [RFC9031]), but it can be applied to authorize other target interactions.¶
The protocol enables a low message count by performing authorization and enrollment in parallel with authentication, instead of in sequence which is common for network access. It further reuses protocol elements from EDHOC leading to reduced message sizes on constrained links.¶
This protocol is applicable to a wide variety of settings, and can be mapped to different authorization architectures.¶
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.¶
Readers are expected to have an understanding of CBOR [RFC8949] and EDHOC [I-D.ietf-lake-edhoc]. Appendix C.1 of [I-D.ietf-lake-edhoc] contains some basic info about CBOR.¶
The (potentially constrained) device (U) wants to enroll into a domain over a constrained link. The device authenticates and enforces authorization of the (non-constrained) domain authenticator (V) with the help of a voucher, and makes the enrollment request. The domain authenticator, in turn, authenticates the device and authorizes its enrollment. Authentication between device and domain authenticator is made with the lightweight authenticated Diffie-Hellman key exchange protocol EDHOC [I-D.ietf-lake-edhoc]. The procedure is assisted by a (non-constrained) authorization server (W) located in a non-constrained network behind the domain authenticator providing information to the device and to the domain authenticator as part of the protocol.¶
The objective of this document is to specify such a protocol which is lightweight over the constrained link by reusing elements of EDHOC. See illustration in Figure 1.¶
U takes the role as EDHOC Initiator with authentication credential CRED_I. CRED_I may for example be an X.509 certificate or a CBOR Web Token (CWT, [RFC8392]). For identification to W, U is provisioned with an identifier ID_U, from which W shall be able to retrieve CRED_I. ID_U is for example a reference to the device authentication credential, or an identifier from a separate name space.¶
U is also provisioned with information about W:¶
V takes the role as EDHOC Responder with authentication credential CRED_R. CRED_R is a CWT Claims Set (CCS, [RFC8392]) containing the public authentication key of V, PK_V, see Section 4.4.2.1¶
V needs to establish secure communication with W based on information in LOC_W. The communication between V and W is assumed to be mutually authenticated and protected; authentication credentials and communication security is out of scope, except for as specified below in this section.¶
V may in principle use different credentials for authenticating to U and to W (CRED_R is used for the former). However, V MUST prove possession of private key of PK_V to W, since W is asserting (by means of a voucher sent to U) that this credential belongs to V.¶
In this version of the draft is assumed that V authenticates to W with the public key PK_V using some authentication protocol providing proof of possession of the private key, for example TLS 1.3 [RFC8446]. A future version of this draft may specify explicit proof of possession of the private key of PK_V in VREQ, e.g., by including a signature of the contents of the voucher request made with the private key corresponding to PK_V.¶
Three security sessions are going on in parallel:¶
Figure 2 provides an overview of the message flow detailed in this section, for more details see Section 3.1 of [I-D.ietf-lake-edhoc].¶
The protocol illustrated in Figure 2 reuses several components of EDHOC:¶
SUITES_I, the cipher suites relevant to U, which includes the selected cipher suite - here denoted SS, also defines the algorithms used between U and W. In particular SS contains information about (see Section 3.6 of [I-D.ietf-lake-edhoc]):¶
The protocol also reuses the Extract and Expand key derivation from EDHOC (Section 4 of [I-D.ietf-lake-edhoc]).¶
The intermediate pseudo-random key PRK is derived using Extract():¶
The shared secret is derived using Expand() which is defined in terms of the EDHOC hash algorithm of the selected cipher suite, see Section 4.2. of [I-D.ietf-lake-edhoc]:¶
info = ( label : int, context : bstr, length : uint, )¶
The protocol between U and W is carried out via V with certain data protected between the endpoints using the equivalent of a hybrid public key encryption scheme such as [RFC9180]. U uses the public DH key of the W, G_W, together with the private DH key corresponding to ephemeral key G_X in EDHOC message_1, and vice versa for W. The endpoints calculate a shared secret G_XW (see Section 4.2), which is used to derive secret keys to protect data between U and W, as detailed in this section.¶
The data exchanged between U and W is carried between U and V in message_1 and message_2 (Section 4.4), and between V and W in the Voucher Request/Response (Section 4.5).¶
The external authorization data EAD_1 contains an EAD item with ead_label = TBD1 and ead_value = Voucher_Info, which is a CBOR byte string:¶
Voucher_Info = bstr .cbor Voucher_Info_Seq¶
Voucher_Info_Seq = ( LOC_W: tstr, ENC_ID: bstr )¶
where¶
ENC_ID is ‘ciphertext’ of COSE_Encrypt0 (Section 5.2-5.3 of [RFC9052]) computed from the following:¶
plaintext = ( ID_U: bstr, )¶
external_aad = ( SS: int, )¶
where¶
The derivation of K_1 = Expand(PRK, info, length) uses the following input to the info struct (Section 4.2):¶
The derivation of IV_1 = Expand(PRK, info, length) uses the following input to the info struct (Section 4.2):¶
The voucher is an assertion for U that W has performed the relevant verifications and that U is authorized to continue the protocol with V. The voucher is essentially a message authentication code which binds the authentication credential of V to message_1 of EDHOC, integrity protected with the shared secret context between U and W.¶
The external authorization data EAD_2 contains an EAD item with ead_label = TBD1 and ead_value = Voucher, which is a CBOR byte string:¶
Voucher = bstr .cbor Expand(PRK, info, length)¶
calculated with the following input to the info struct (Section 4.2):¶
where context is a CBOR bstr wrapping of the following CBOR sequence:¶
voucher_input = ( H(message_1): bstr, CRED_R: bstr, )¶
where¶
This section describes the processing in U and V, which execute the EDHOC protocol using their respective authentication credentials, see Figure 2. Normal EDHOC processing is omitted here.¶
U composes EDHOC message_1 using authentication method, identifiers, etc. according to an agreed application profile, see Section 3.9 of [I-D.ietf-lake-edhoc]. The selected cipher suite, in this document denoted SS, applies also to the interaction with W as detailed in Section 4.2, in particular, to the key agreement algorithm which is used with the static public DH key G_W of W. As part of the normal EDHOC processing, U generates the ephemeral public key G_X which is reused in the interaction with W, see Section 4.3.¶
The device sends EDHOC message_1 with EAD item (-TBD1, Voucher_Info) included in EAD_1, where Voucher_Info is specified in Section 4.3. The negative sign indicates that the EAD item is critical, see Section 3.8 in [I-D.ietf-lake-edhoc].¶
V receives EDHOC message_1 from U and processes it as specified in Section 5.2.3 of [I-D.ietf-lake-edhoc], with the additional step of processing the EAD item in EAD_1. Since the EAD item is critical, if V does not recognize it or it contains information that V cannot process, then V MUST discontinue EDHOC, see Section 3.8 in [I-D.ietf-lake-edhoc]. Otherwise, the ead_label = TBD1, triggers the voucher request to W as described in Section 4.5. The exchange between V and W needs to be completed successfully for the EDHOC exchange to be continued.¶
V receives the voucher response from W as described in Section 4.5.¶
V sends EDHOC message_2 to U with the critical EAD item (-TBD1, Voucher) included in EAD_2, where the Voucher is specified in Section 4.3.¶
CRED_R is a CWT Claims Set (CCS, [RFC8392]) containing the public authentication key of the authenticator PK_V encoded as a COSE_Key in the ‘cnf’ claim, see Section 3.5.2 of [I-D.ietf-lake-edhoc].¶
ID_CRED_R contains the CCS with ‘kccs’ as COSE header_map, see Section 9.6 of [I-D.ietf-lake-edhoc]. The Signature_or_MAC_2 field calculated using the private key corresponding to PK_V is either a signature or a MAC depending on EDHOC method.¶
U receives EDHOC message_2 from V and processes it as specified in Section 5.3.2 of [I-D.ietf-lake-edhoc], with the additional step of processing the EAD item in EAD_2.¶
If U does not recognize the EAD item or the EAD item contains information that U cannot process, then U MUST discontinue EDHOC, see Section 3.8 in [I-D.ietf-lake-edhoc]. Otherwise U MUST verify the Voucher by performing the same calculation as in Section 4.3.2 using H(message_1) and CRED_R received in ID_CRED_R of message_2. If the voucher calculated in this way is not identical to what was received in message_2, then U MUST discontinue the protocol.¶
If all verifications are passed, then U sends EDHOC message_3.¶
The Signature_or_MAC_3 field calculated using the private key corresponding to PK_U is either a signature or a MAC depending on EDHOC method.¶
EAD_3 MAY contain a certificate enrollment request, see e.g., CSR specified in [I-D.ietf-cose-cbor-encoded-cert], or other request which the device is now authorized to make.¶
EDHOC message_3 may be combined with an OSCORE request, see [I-D.ietf-core-oscore-edhoc].¶
V performs the normal EDHOC verifications of message_3. V may retrieve CRED_I from W, after V learnt ID_CRED_I from U.¶
V and W are assumed to be able to authenticate and set up a secure connection, out of scope for this specification, for example TLS 1.3 authenticated with certificates. V is assumed to authenticate with the public key PK_V, see Section 3.2.¶
This secure connection protects the Voucher Request/Response Protocol (see protocol between V and W in Figure 2).¶
The hash of EDHOC message_1, H(message_1), acts as session identifier of the Voucher Request/Response protocol, and binds together instances of the two protocols (U<->V and V<->W).¶
Unless already in place, V and W establish a secure connection. V uses H(message_1) as a session identifier associated to this connection with W. If the same value of H(message_1) is already used for a connection with this or other W, the protocol SHALL be discontinued.¶
V sends the voucher request to W. The Voucher Request SHALL be a CBOR array as defined below:¶
Voucher_Request = [ H(message_1): bstr, SS: int, G_X: bstr, ENC_ID: bstr, ? PoP_V: bstr, ]¶
where the parameters are defined in Section 4.3, except:¶
Editor’s note: Define PoP_V (include G_X, ENC_ID in the calculation for binding to this EDHOC session). One case to study is when V authenticates to U with static DH and to W with signature.¶
W receives the voucher request, verifies and decrypts ENC_ID, and associates the session identifier H(message_1) to ID_U. If H(message_1) is not unique among session identifiers associated to this identity, the protocol SHALL be discontinued.¶
W uses the identity of the device, ID_U, to look up and verify the associated authorization policies for U. This is out of scope for the specification.¶
W retrieves the public key of V, PK_V, used to authenticate the secure connection with V, and constructs the CCS (see Section 4.4.2.1) and the Voucher (see Section 4.3.2).¶
Editor’s note: Make sure the CCS is defined to allow W to generate it uniquely from PK_V.¶
W generates the voucher response and sends it to V over the secure connection. The Voucher_Response SHALL be a CBOR array as defined below:¶
Voucher_Response = [ H(message_1): bstr, Voucher: bstr ]¶
where¶
V receives the voucher response from W over the secure connection. If the received session identifier does not match the session identifier H(message_1) associated to the secure connection, the protocol SHALL be discontinued.¶
The interaction between V and W is enabled through a RESTful interface exposed by W. V SHOULD access the resources exposed by W through the protocol indicated by the scheme in LOC_W URI. In case the scheme indicates “https”, V SHOULD perform a TLS handshake with W and use HTTP. In case the scheme indicates “coaps”, V SHOULD perform a DTLS handshake with W and access the same resources using CoAP. In both cases, V MUST perform client authentication to authenticate to W, using a certificate containing the PK_V public key.¶
W MUST support the use of the path-prefix “/.well-known/”, as defined in [RFC8615], and the registered name “lake-authz”. A valid URI thus begins with “https://www.example.com/.well-known/lake-authz”. Each operation specified in the following is indicated by a path-suffix.¶
To request a voucher, V MUST issue an HTTP request:¶
In case of successful processing at W, W MUST issue a 200 OK response with payload containing the serialized Voucher Response object, as specified in Section 4.5.2.¶
V requests the public key certificate of U from W through the “/certrequest” path-suffix. To request U’s authentication credential, V MUST issue an HTTP request:¶
In case of a successful lookup of the authentication credential at W, W MUST issue 200 OK response with payload containing the serialized CRED_I.¶
This specification builds on and reuses many of the security constructions of EDHOC, e.g., shared secret calculation and key derivation. The security considerations of EDHOC [I-D.ietf-lake-edhoc] apply with modifications discussed here.¶
EDHOC provides identity protection of the Initiator, here the device. The encryption of the device identity in the first message should consider potential information leaking from the length of the identifier ID_U, either by making all identifiers having the same length or the use of a padding scheme.¶
Although W learns about the identity of U after receiving VREQ, this information must not be disclosed to V, until U has revealed its identity to V with ID_CRED_I in message_3. W may be used for lookup of CRED_I from ID_CRED_I, or this credential lookup function may be separate from the authorization function of W. The trust model used here is that U decides to which V it reveals its identity. In an alternative trust model where U trusts W to decide to which V it reveal’s U’s identity, CRED_I could be sent in Voucher Response.¶
As noted Section 8.2 of [I-D.ietf-lake-edhoc] an ephemeral key may be used to calculate several ECDH shared secrets. In this specification the ephemeral key G_X is also used to calculate G_XW, the shared secret with the authorization server.¶
The private ephemeral key is thus used in the device for calculations of key material relating to both the authenticator and the authorization server. There are different options for where to implement these calculations, one option is as an addition to EDHOC, i.e., to extend the EDHOC API in the device with input of public key of W (G_W) and identifier of U (ID_U), and produce the encryption of ID_U which is included in Voucher_Info in EAD_1.¶
IANA has registered the following entry in the “EDHOC External Authorization Data” registry under the group name “Ephemeral Diffie- Hellman Over COSE (EDHOC)”. The ead_label = TBD_1 corresponds to the ead_value Voucher_Info in EAD_1, and Voucher in EAD_2 with processing specified in Section 4.4.1 and Section 4.4.2, respectively, of this document.¶
Label | Value Type | Description |
---|---|---|
TBD1 | bstr | Voucher related information |
IANA has registered the following entry in “The Well-Known URI Registry”, using the template from [RFC8615]:¶
This document allocates a well-known name under the .arpa name space according to the rules given in [RFC3172] and [RFC6761]. The name “lake-authz.arpa” is requested. No subdomains are expected, and addition of any such subdomains requires the publication of an IETF Standards Track RFC. No A, AAAA, or PTR record is requested.¶
This section outlines how the protocol is used for network enrollment and parameter provisioning. An IEEE 802.15.4 network is used as an example of how a new device (U) can be enrolled into the domain managed by the domain authenticator (V).¶
When a device first boots, it needs to discover the network it attempts to join. The network discovery procedure is defined by the link-layer technology in use. In case of Time-slotted Channel Hopping (TSCH) networks, a mode of [IEEE802.15.4], the device scans the radio channels for Enhanced Beacon (EB) frames, a procedure known as passive scan. EBs carry the information about the network, and particularly the network identifier. Based on the EB, the network identifier, the information pre-configured into the device, the device makes the decision on whether it should join the network advertised by the received EB frame. This process is described in Section 4.1. of [RFC9031]. In case of other, non-TSCH modes of IEEE 802.15.4 it is possible to use the active scan procedure and send solicitation frames. These solicitation frames trigger the nearest network coordinator to respond by emitting a beacon frame. The network coordinator emitting beacons may be multiple link-layer hops away from the domain authenticator (V), in which case it plays the role of a Join Proxy (see [RFC9031]). Join Proxy does not participate in the protocol and acts as a transparent router between the device and the domain authenticator. For simplicity, Figure 3 illustrates the case when the device and the domain authenticator are a single hop away and can communicate directly.¶
Once the device has discovered the network it wants to join, it constructs the EDHOC message_1, as described in Section 4.4. The device SHALL map the message to a CoAP request:¶
The domain authenticator receives message_1 and processes it as described in Section 4.4. The message triggers the exchange with the authorization server, as described in Section 4.5. If the exchange between V and W completes successfully, the domain authenticator prepares EDHOC message_2, as described in Section 4.4. The authenticator SHALL map the message to a CoAP response:¶
The device receives EDHOC message_2 and processes it as described in Section 4.4}. Upon successful processing of message_2, the device prepares flight 3, which is an OSCORE-protected CoJP request containing an EDHOC message_3, as described in [I-D.ietf-core-oscore-edhoc]. EDHOC message_3 is prepared as described in Section 4.4. The OSCORE-protected payload is the CoJP Join Request object specified in Section 8.4.1. of [RFC9031]. OSCORE protection leverages the OSCORE Security Context derived from the EDHOC exchange, as specified in Appendix A of [I-D.ietf-lake-edhoc]. To that end, [I-D.ietf-core-oscore-edhoc] specifies that the Sender ID of the client (device) must be set to the connection identifier selected by the domain authenticator, C_R. OSCORE includes the Sender ID as the kid in the OSCORE option. The network identifier in the CoJP Join Request object is set to the network identifier obtained from the network discovery phase. In case of IEEE 802.15.4 networks, this is the PAN ID.¶
The device SHALL map the message to a CoAP request:¶
Note that the OSCORE Sender IDs are derived from the connection identifiers of the EDHOC exchange. This is in contrast with [RFC9031] where ID Context of the OSCORE Security Context is set to the device identifier (pledge identifier). Since the device identity is exchanged during the EDHOC handshake, and the certificate of the device is communicated to the authenticator as part of the Voucher Response message, there is no need to transport the device identity in OSCORE messages. The authenticator playing the role of the [RFC9031] JRC obtains the device identity from the execution of the authorization protocol.¶