draft-ietf-lake-edhoc-08.txt | draft-ietf-lake-edhoc-09.txt | |||
---|---|---|---|---|
Network Working Group G. Selander | Network Working Group G. Selander | |||
Internet-Draft J. Mattsson | Internet-Draft J. Preuß Mattsson | |||
Intended status: Standards Track F. Palombini | Intended status: Standards Track F. Palombini | |||
Expires: January 13, 2022 Ericsson AB | Expires: 24 February 2022 Ericsson | |||
July 12, 2021 | 23 August 2021 | |||
Ephemeral Diffie-Hellman Over COSE (EDHOC) | Ephemeral Diffie-Hellman Over COSE (EDHOC) | |||
draft-ietf-lake-edhoc-08 | draft-ietf-lake-edhoc-09 | |||
Abstract | Abstract | |||
This document specifies Ephemeral Diffie-Hellman Over COSE (EDHOC), a | This document specifies Ephemeral Diffie-Hellman Over COSE (EDHOC), a | |||
very compact and lightweight authenticated Diffie-Hellman key | very compact and lightweight authenticated Diffie-Hellman key | |||
exchange with ephemeral keys. EDHOC provides mutual authentication, | exchange with ephemeral keys. EDHOC provides mutual authentication, | |||
perfect forward secrecy, and identity protection. EDHOC is intended | forward secrecy, and identity protection. EDHOC is intended for | |||
for usage in constrained scenarios and a main use case is to | usage in constrained scenarios and a main use case is to establish an | |||
establish an OSCORE security context. By reusing COSE for | OSCORE security context. By reusing COSE for cryptography, CBOR for | |||
cryptography, CBOR for encoding, and CoAP for transport, the | encoding, and CoAP for transport, the additional code size can be | |||
additional code size can be kept very low. | kept very low. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on January 13, 2022. | This Internet-Draft will expire on 24 February 2022. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2021 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
(https://trustee.ietf.org/license-info) in effect on the date of | license-info) in effect on the date of publication of this document. | |||
publication of this document. Please review these documents | Please review these documents carefully, as they describe your rights | |||
carefully, as they describe your rights and restrictions with respect | and restrictions with respect to this document. Code Components | |||
to this document. Code Components extracted from this document must | extracted from this document must include Simplified BSD License text | |||
include Simplified BSD License text as described in Section 4.e of | as described in Section 4.e of the Trust Legal Provisions and are | |||
the Trust Legal Provisions and are provided without warranty as | provided without warranty as described in the Simplified BSD License. | |||
described in the Simplified BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
1.1. Motivation . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.1. Motivation . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
1.2. Use of EDHOC . . . . . . . . . . . . . . . . . . . . . . 4 | 1.2. Use of EDHOC . . . . . . . . . . . . . . . . . . . . . . 5 | |||
1.3. Message Size Examples . . . . . . . . . . . . . . . . . . 5 | 1.3. Message Size Examples . . . . . . . . . . . . . . . . . . 5 | |||
1.4. Document Structure . . . . . . . . . . . . . . . . . . . 6 | 1.4. Document Structure . . . . . . . . . . . . . . . . . . . 6 | |||
1.5. Terminology and Requirements Language . . . . . . . . . . 6 | 1.5. Terminology and Requirements Language . . . . . . . . . . 6 | |||
2. EDHOC Outline . . . . . . . . . . . . . . . . . . . . . . . . 6 | 2. EDHOC Outline . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
3. Protocol Elements . . . . . . . . . . . . . . . . . . . . . . 8 | 3. Protocol Elements . . . . . . . . . . . . . . . . . . . . . . 9 | |||
3.1. General . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 3.1. General . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
3.2. Method . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 3.2. Method . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
3.3. Connection Identifiers . . . . . . . . . . . . . . . . . 9 | 3.3. Connection Identifiers . . . . . . . . . . . . . . . . . 10 | |||
3.4. Transport . . . . . . . . . . . . . . . . . . . . . . . . 11 | 3.4. Transport . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
3.5. Authentication Parameters . . . . . . . . . . . . . . . . 11 | 3.5. Authentication Parameters . . . . . . . . . . . . . . . . 12 | |||
3.6. Cipher Suites . . . . . . . . . . . . . . . . . . . . . . 16 | 3.6. Cipher Suites . . . . . . . . . . . . . . . . . . . . . . 18 | |||
3.7. Ephemeral Public Keys . . . . . . . . . . . . . . . . . . 18 | 3.7. Ephemeral Public Keys . . . . . . . . . . . . . . . . . . 20 | |||
3.8. External Authorization Data . . . . . . . . . . . . . . . 18 | 3.8. External Authorization Data (EAD) . . . . . . . . . . . . 20 | |||
3.9. Applicability Statement . . . . . . . . . . . . . . . . . 19 | 3.9. Applicability Statement . . . . . . . . . . . . . . . . . 21 | |||
4. Key Derivation . . . . . . . . . . . . . . . . . . . . . . . 21 | 4. Key Derivation . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
4.1. EDHOC-Exporter Interface . . . . . . . . . . . . . . . . 23 | 4.1. Extract . . . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
5. Message Formatting and Processing . . . . . . . . . . . . . . 24 | 4.2. Expand . . . . . . . . . . . . . . . . . . . . . . . . . 24 | |||
5.1. Message Processing Outline . . . . . . . . . . . . . . . 24 | 4.3. EDHOC-Exporter . . . . . . . . . . . . . . . . . . . . . 26 | |||
5.2. EDHOC Message 1 . . . . . . . . . . . . . . . . . . . . . 25 | 4.4. EDHOC-KeyUpdate . . . . . . . . . . . . . . . . . . . . . 27 | |||
5.3. EDHOC Message 2 . . . . . . . . . . . . . . . . . . . . . 27 | 5. Message Formatting and Processing . . . . . . . . . . . . . . 27 | |||
5.4. EDHOC Message 3 . . . . . . . . . . . . . . . . . . . . . 30 | 5.1. Message Processing Outline . . . . . . . . . . . . . . . 27 | |||
5.5. EDHOC Message 4 . . . . . . . . . . . . . . . . . . . . . 33 | 5.2. EDHOC Message 1 . . . . . . . . . . . . . . . . . . . . . 28 | |||
6. Error Handling . . . . . . . . . . . . . . . . . . . . . . . 35 | 5.3. EDHOC Message 2 . . . . . . . . . . . . . . . . . . . . . 30 | |||
6.1. Success . . . . . . . . . . . . . . . . . . . . . . . . . 36 | 5.4. EDHOC Message 3 . . . . . . . . . . . . . . . . . . . . . 32 | |||
6.2. Unspecified . . . . . . . . . . . . . . . . . . . . . . . 36 | 5.5. EDHOC Message 4 . . . . . . . . . . . . . . . . . . . . . 36 | |||
6.3. Wrong Selected Cipher Suite . . . . . . . . . . . . . . . 36 | 6. Error Handling . . . . . . . . . . . . . . . . . . . . . . . 37 | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 38 | 6.1. Success . . . . . . . . . . . . . . . . . . . . . . . . . 39 | |||
7.1. Security Properties . . . . . . . . . . . . . . . . . . . 38 | 6.2. Unspecified . . . . . . . . . . . . . . . . . . . . . . . 39 | |||
7.2. Cryptographic Considerations . . . . . . . . . . . . . . 40 | 6.3. Wrong Selected Cipher Suite . . . . . . . . . . . . . . . 39 | |||
7.3. Cipher Suites and Cryptographic Algorithms . . . . . . . 41 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 41 | |||
7.4. Unprotected Data . . . . . . . . . . . . . . . . . . . . 42 | 7.1. Security Properties . . . . . . . . . . . . . . . . . . . 41 | |||
7.5. Denial-of-Service . . . . . . . . . . . . . . . . . . . . 42 | 7.2. Cryptographic Considerations . . . . . . . . . . . . . . 44 | |||
7.6. Implementation Considerations . . . . . . . . . . . . . . 43 | 7.3. Cipher Suites and Cryptographic Algorithms . . . . . . . 45 | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 44 | 7.4. Unprotected Data . . . . . . . . . . . . . . . . . . . . 45 | |||
8.1. EDHOC Exporter Label . . . . . . . . . . . . . . . . . . 44 | 7.5. Denial-of-Service . . . . . . . . . . . . . . . . . . . . 46 | |||
8.2. EDHOC Cipher Suites Registry . . . . . . . . . . . . . . 45 | 7.6. Implementation Considerations . . . . . . . . . . . . . . 46 | |||
8.3. EDHOC Method Type Registry . . . . . . . . . . . . . . . 47 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 48 | |||
8.4. EDHOC Error Codes Registry . . . . . . . . . . . . . . . 47 | 8.1. EDHOC Exporter Label . . . . . . . . . . . . . . . . . . 48 | |||
8.5. COSE Header Parameters Registry . . . . . . . . . . . . . 47 | 8.2. EDHOC Cipher Suites Registry . . . . . . . . . . . . . . 48 | |||
8.6. COSE Header Parameters Registry . . . . . . . . . . . . . 47 | 8.3. EDHOC Method Type Registry . . . . . . . . . . . . . . . 50 | |||
8.7. COSE Key Common Parameters Registry . . . . . . . . . . . 48 | 8.4. EDHOC Error Codes Registry . . . . . . . . . . . . . . . 50 | |||
8.8. The Well-Known URI Registry . . . . . . . . . . . . . . . 48 | 8.5. COSE Header Parameters Registry . . . . . . . . . . . . . 50 | |||
8.9. Media Types Registry . . . . . . . . . . . . . . . . . . 48 | 8.6. COSE Header Parameters Registry . . . . . . . . . . . . . 51 | |||
8.10. CoAP Content-Formats Registry . . . . . . . . . . . . . . 49 | 8.7. COSE Key Common Parameters Registry . . . . . . . . . . . 51 | |||
8.11. EDHOC External Authorization Data . . . . . . . . . . . . 49 | 8.8. The Well-Known URI Registry . . . . . . . . . . . . . . . 51 | |||
8.12. Expert Review Instructions . . . . . . . . . . . . . . . 50 | 8.9. Media Types Registry . . . . . . . . . . . . . . . . . . 52 | |||
9. References . . . . . . . . . . . . . . . . . . . . . . . . . 50 | 8.10. CoAP Content-Formats Registry . . . . . . . . . . . . . . 53 | |||
9.1. Normative References . . . . . . . . . . . . . . . . . . 50 | 8.11. EDHOC External Authorization Data . . . . . . . . . . . . 53 | |||
9.2. Informative References . . . . . . . . . . . . . . . . . 53 | 8.12. Expert Review Instructions . . . . . . . . . . . . . . . 53 | |||
Appendix A. Use with OSCORE and Transfer over CoAP . . . . . . . 55 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 54 | |||
A.1. Selecting EDHOC Connection Identifier . . . . . . . . . . 55 | 9.1. Normative References . . . . . . . . . . . . . . . . . . 54 | |||
A.2. Deriving the OSCORE Security Context . . . . . . . . . . 56 | 9.2. Informative References . . . . . . . . . . . . . . . . . 56 | |||
A.3. Transferring EDHOC over CoAP . . . . . . . . . . . . . . 57 | Appendix A. Use with OSCORE and Transfer over CoAP . . . . . . . 59 | |||
Appendix B. Compact Representation . . . . . . . . . . . . . . . 60 | A.1. Selecting EDHOC Connection Identifier . . . . . . . . . . 59 | |||
Appendix C. Use of CBOR, CDDL and COSE in EDHOC . . . . . . . . 60 | A.2. Deriving the OSCORE Security Context . . . . . . . . . . 60 | |||
C.1. CBOR and CDDL . . . . . . . . . . . . . . . . . . . . . . 60 | A.3. Transferring EDHOC over CoAP . . . . . . . . . . . . . . 61 | |||
C.2. CDDL Definitions . . . . . . . . . . . . . . . . . . . . 61 | Appendix B. Compact Representation . . . . . . . . . . . . . . . 64 | |||
C.3. COSE . . . . . . . . . . . . . . . . . . . . . . . . . . 62 | Appendix C. Use of CBOR, CDDL and COSE in EDHOC . . . . . . . . 65 | |||
Appendix D. Test Vectors . . . . . . . . . . . . . . . . . . . . 63 | C.1. CBOR and CDDL . . . . . . . . . . . . . . . . . . . . . . 65 | |||
D.1. Test Vectors for EDHOC Authenticated with Signature Keys | C.2. CDDL Definitions . . . . . . . . . . . . . . . . . . . . 66 | |||
(x5t) . . . . . . . . . . . . . . . . . . . . . . . . . . 63 | C.3. COSE . . . . . . . . . . . . . . . . . . . . . . . . . . 68 | |||
D.2. Test Vectors for EDHOC Authenticated with Static Diffie- | Appendix D. Test Vectors . . . . . . . . . . . . . . . . . . . . 68 | |||
Hellman Keys . . . . . . . . . . . . . . . . . . . . . . 81 | Appendix E. Applicability Template . . . . . . . . . . . . . . . 68 | |||
Appendix E. Applicability Template . . . . . . . . . . . . . . . 96 | Appendix F. EDHOC Message Deduplication . . . . . . . . . . . . 69 | |||
Appendix F. EDHOC Message Deduplication . . . . . . . . . . . . 96 | Appendix G. Transports Not Natively Providing Correlation . . . 70 | |||
Appendix G. Transports Not Natively Providing Correlation . . . 97 | Appendix H. Change Log . . . . . . . . . . . . . . . . . . . . . 70 | |||
Appendix H. Change Log . . . . . . . . . . . . . . . . . . . . . 98 | Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 75 | |||
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 101 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 75 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 101 | ||||
1. Introduction | 1. Introduction | |||
1.1. Motivation | 1.1. Motivation | |||
Many Internet of Things (IoT) deployments require technologies which | Many Internet of Things (IoT) deployments require technologies which | |||
are highly performant in constrained environments [RFC7228]. IoT | are highly performant in constrained environments [RFC7228]. IoT | |||
devices may be constrained in various ways, including memory, | devices may be constrained in various ways, including memory, | |||
storage, processing capacity, and power. The connectivity for these | storage, processing capacity, and power. The connectivity for these | |||
settings may also exhibit constraints such as unreliable and lossy | settings may also exhibit constraints such as unreliable and lossy | |||
skipping to change at page 4, line 34 ¶ | skipping to change at page 4, line 34 ¶ | |||
protocols such as COSE and OSCORE, the two endpoints may run an | protocols such as COSE and OSCORE, the two endpoints may run an | |||
authenticated Diffie-Hellman key exchange protocol, from which shared | authenticated Diffie-Hellman key exchange protocol, from which shared | |||
secret key material can be derived. Such a key exchange protocol | secret key material can be derived. Such a key exchange protocol | |||
should also be lightweight; to prevent bad performance in case of | should also be lightweight; to prevent bad performance in case of | |||
repeated use, e.g., due to device rebooting or frequent rekeying for | repeated use, e.g., due to device rebooting or frequent rekeying for | |||
security reasons; or to avoid latencies in a network formation | security reasons; or to avoid latencies in a network formation | |||
setting with many devices authenticating at the same time. | setting with many devices authenticating at the same time. | |||
This document specifies Ephemeral Diffie-Hellman Over COSE (EDHOC), a | This document specifies Ephemeral Diffie-Hellman Over COSE (EDHOC), a | |||
lightweight authenticated key exchange protocol providing good | lightweight authenticated key exchange protocol providing good | |||
security properties including perfect forward secrecy, identity | security properties including forward secrecy, identity protection, | |||
protection, and cipher suite negotiation. Authentication can be | and cipher suite negotiation. Authentication can be based on raw | |||
based on raw public keys (RPK) or public key certificates, and | public keys (RPK) or public key certificates and requires the | |||
requires the application to provide input on how to verify that | application to provide input on how to verify that endpoints are | |||
endpoints are trusted. This specification focuses on referencing | trusted. This specification focuses on referencing instead of | |||
instead of transporting credentials to reduce message overhead. | transporting credentials to reduce message overhead. EDHOC does | |||
currently not support pre-shared key (PSK) authentication as | ||||
authentication with static Diffie-Hellman public keys by reference | ||||
produces equally small message sizes but with much simpler key | ||||
distribution. | ||||
EDHOC makes use of known protocol constructions, such as SIGMA | EDHOC makes use of known protocol constructions, such as SIGMA | |||
[SIGMA] and Extract-and-Expand [RFC5869]. COSE also provides crypto | [SIGMA] and Extract-and-Expand [RFC5869]. COSE also provides crypto | |||
agility and enables the use of future algorithms targeting IoT. | agility and enables the use of future algorithms targeting IoT. | |||
1.2. Use of EDHOC | 1.2. Use of EDHOC | |||
EDHOC is designed for highly constrained settings making it | EDHOC is designed for highly constrained settings making it | |||
especially suitable for low-power wide area networks [RFC8376] such | especially suitable for low-power wide area networks [RFC8376] such | |||
as Cellular IoT, 6TiSCH, and LoRaWAN. A main objective for EDHOC is | as Cellular IoT, 6TiSCH, and LoRaWAN. A main objective for EDHOC is | |||
to be a lightweight authenticated key exchange for OSCORE, i.e. to | to be a lightweight authenticated key exchange for OSCORE, i.e., to | |||
provide authentication and session key establishment for IoT use | provide authentication and session key establishment for IoT use | |||
cases such as those built on CoAP [RFC7252]. CoAP is a specialized | cases such as those built on CoAP [RFC7252]. CoAP is a specialized | |||
web transfer protocol for use with constrained nodes and networks, | web transfer protocol for use with constrained nodes and networks, | |||
providing a request/response interaction model between application | providing a request/response interaction model between application | |||
endpoints. As such, EDHOC is targeting a large variety of use cases | endpoints. As such, EDHOC is targeting a large variety of use cases | |||
involving 'things' with embedded microcontrollers, sensors, and | involving 'things' with embedded microcontrollers, sensors, and | |||
actuators. | actuators. | |||
A typical setting is when one of the endpoints is constrained or in a | A typical setting is when one of the endpoints is constrained or in a | |||
constrained network, and the other endpoint is a node on the Internet | constrained network, and the other endpoint is a node on the Internet | |||
(such as a mobile phone) or at the edge of the constrained network | (such as a mobile phone) or at the edge of the constrained network | |||
(such as a gateway). Thing-to-thing interactions over constrained | (such as a gateway). Thing-to-thing interactions over constrained | |||
networks are also relevant since both endpoints would then benefit | networks are also relevant since both endpoints would then benefit | |||
from the lightweight properties of the protocol. EDHOC could e.g. be | from the lightweight properties of the protocol. EDHOC could e.g., | |||
run when a device connects for the first time, or to establish fresh | be run when a device connects for the first time, or to establish | |||
keys which are not revealed by a later compromise of the long-term | fresh keys which are not revealed by a later compromise of the long- | |||
keys. Further security properties are described in Section 7.1. | term keys. Further security properties are described in Section 7.1. | |||
EDHOC enables the reuse of the same lightweight primitives as OSCORE: | EDHOC enables the reuse of the same lightweight primitives as OSCORE: | |||
CBOR for encoding, COSE for cryptography, and CoAP for transport. By | CBOR for encoding, COSE for cryptography, and CoAP for transport. By | |||
reusing existing libraries the additional code size can be kept very | reusing existing libraries, the additional code size can be kept very | |||
low. Note that, while CBOR and COSE primitives are built into the | low. Note that, while CBOR and COSE primitives are built into the | |||
protocol messages, EDHOC is not bound to a particular transport. | protocol messages, EDHOC is not bound to a particular transport. | |||
However, it is recommended to transfer EDHOC messages in CoAP | Transfer of EDHOC messages in CoAP payloads is detailed in | |||
payloads as is detailed in Appendix A.3. | Appendix A.3. | |||
1.3. Message Size Examples | 1.3. Message Size Examples | |||
Compared to the DTLS 1.3 handshake [I-D.ietf-tls-dtls13] with ECDHE | Compared to the DTLS 1.3 handshake [I-D.ietf-tls-dtls13] with ECDHE | |||
and connection ID, the number of bytes in EDHOC + CoAP can be less | and connection ID, the number of bytes in EDHOC + CoAP can be less | |||
than 1/6 when RPK authentication is used, see | than 1/6 when RPK authentication is used, see | |||
[I-D.ietf-lwig-security-protocol-comparison]. Figure 1 shows two | [I-D.ietf-lwig-security-protocol-comparison]. Figure 1 shows two | |||
examples of message sizes for EDHOC with different kinds of | examples of message sizes for EDHOC with different kinds of | |||
authentication keys and different COSE header parameters for | authentication keys and different COSE header parameters for | |||
identification: static Diffie-Hellman keys identified by 'kid' | identification: static Diffie-Hellman keys identified by 'kid' | |||
[I-D.ietf-cose-rfc8152bis-struct], and X.509 signature certificates | [I-D.ietf-cose-rfc8152bis-struct], and X.509 signature certificates | |||
identified by a hash value using 'x5t' [I-D.ietf-cose-x509]. | identified by a hash value using 'x5t' [I-D.ietf-cose-x509]. | |||
================================= | ================================= | |||
kid x5t | kid x5t | |||
--------------------------------- | --------------------------------- | |||
message_1 37 37 | message_1 37 37 | |||
message_2 45 116 | message_2 45 116 | |||
message_3 20 91 | message_3 19 90 | |||
--------------------------------- | --------------------------------- | |||
Total 103 245 | Total 101 243 | |||
================================= | ================================= | |||
Figure 1: Example of message sizes in bytes. | Figure 1: Example of message sizes in bytes. | |||
1.4. Document Structure | 1.4. Document Structure | |||
The remainder of the document is organized as follows: Section 2 | The remainder of the document is organized as follows: Section 2 | |||
outlines EDHOC authenticated with digital signatures, Section 3 | outlines EDHOC authenticated with digital signatures, Section 3 | |||
describes the protocol elements of EDHOC, including message flow, and | describes the protocol elements of EDHOC, including formatting of the | |||
formatting of the ephemeral public keys, Section 4 describes the key | ephemeral public keys, Section 4 specifies the key derivation, | |||
derivation, Section 5 specifies EDHOC with authentication based on | Section 5 specifies message processing for EDHOC authenticated with | |||
signature keys or static Diffie-Hellman keys, Section 6 specifies the | signature keys or static Diffie-Hellman keys, Section 6 describes the | |||
EDHOC error message, and Appendix A describes how EDHOC can be | error messages, and Appendix A shows how to transfer EDHOC with CoAP | |||
transferred in CoAP and used to establish an OSCORE security context. | and establish an OSCORE security context. | |||
1.5. Terminology and Requirements Language | 1.5. Terminology and Requirements Language | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
Readers are expected to be familiar with the terms and concepts | Readers are expected to be familiar with the terms and concepts | |||
described in CBOR [RFC8949], CBOR Sequences [RFC8742], COSE | described in CBOR [RFC8949], CBOR Sequences [RFC8742], COSE | |||
structures and process [I-D.ietf-cose-rfc8152bis-struct], COSE | structures and process [I-D.ietf-cose-rfc8152bis-struct], COSE | |||
algorithms [I-D.ietf-cose-rfc8152bis-algs], and CDDL [RFC8610]. The | algorithms [I-D.ietf-cose-rfc8152bis-algs], and CDDL [RFC8610]. The | |||
Concise Data Definition Language (CDDL) is used to express CBOR data | Concise Data Definition Language (CDDL) is used to express CBOR data | |||
structures [RFC8949]. Examples of CBOR and CDDL are provided in | structures [RFC8949]. Examples of CBOR and CDDL are provided in | |||
Appendix C.1. When referring to CBOR, this specification always | Appendix C.1. When referring to CBOR, this specification always | |||
refer to Deterministically Encoded CBOR as specified in Sections | refers to Deterministically Encoded CBOR as specified in Sections | |||
4.2.1 and 4.2.2 of [RFC8949]. | 4.2.1 and 4.2.2 of [RFC8949]. | |||
The single output from authenticated encryption (including the | The single output from authenticated encryption (including the | |||
authentication tag) is called 'ciphertext', following [RFC5116]. | authentication tag) is called "ciphertext", following [RFC5116]. | |||
We use the term Unprotected CWT Claims Set (UCCS) just as in | ||||
[I-D.ietf-rats-uccs] to denote a CBOR Web Token [RFC8392] without | ||||
wrapping it into a COSE object, i.e., a CBOR map consisting of | ||||
claims. | ||||
Editor's note: If [I-D.ietf-rats-uccs] completes before this draft, | ||||
make it a normative reference. | ||||
2. EDHOC Outline | 2. EDHOC Outline | |||
EDHOC specifies different authentication methods of the Diffie- | EDHOC specifies different authentication methods of the Diffie- | |||
Hellman key exchange: digital signatures and static Diffie-Hellman | Hellman key exchange: digital signatures and static Diffie-Hellman | |||
keys. This section outlines the digital signature based method. | keys. This section outlines the digital signature-based method. | |||
Further details of protocol elements and other authentication methods | Further details of protocol elements and other authentication methods | |||
are provided in the remainder of this document. | are provided in the remainder of this document. | |||
SIGMA (SIGn-and-MAc) is a family of theoretical protocols with a | SIGMA (SIGn-and-MAc) is a family of theoretical protocols with a | |||
large number of variants [SIGMA]. Like IKEv2 [RFC7296] and (D)TLS | large number of variants [SIGMA]. Like IKEv2 [RFC7296] and (D)TLS | |||
1.3 [RFC8446], EDHOC authenticated with digital signatures is built | 1.3 [RFC8446], EDHOC authenticated with digital signatures is built | |||
on a variant of the SIGMA protocol which provides identity protection | on a variant of the SIGMA protocol which provides identity protection | |||
of the initiator (SIGMA-I), and like IKEv2 [RFC7296], EDHOC | of the initiator (SIGMA-I), and like IKEv2 [RFC7296], EDHOC | |||
implements the SIGMA-I variant as MAC-then-Sign. The SIGMA-I | implements the SIGMA-I variant as MAC-then-Sign. The SIGMA-I | |||
protocol using an authenticated encryption algorithm is shown in | protocol using an authenticated encryption algorithm is shown in | |||
Figure 2. | Figure 2. | |||
Initiator Responder | Initiator Responder | |||
| G_X | | | G_X | | |||
+-------------------------------------------------------->| | +-------------------------------------------------------->| | |||
| | | | | | |||
| G_Y, AEAD( K_2; ID_CRED_R, Sig(R; CRED_R, G_X, G_Y) ) | | | G_Y, AEAD( K_2; ID_CRED_R, Sig(R; CRED_R, G_X, G_Y) ) | | |||
|<--------------------------------------------------------+ | |<--------------------------------------------------------+ | |||
| | | | | | |||
| AEAD( K_3; ID_CRED_I, Sig(I; CRED_I, G_Y, G_X) ) | | | AEAD( K_3; ID_CRED_I, Sig(I; CRED_I, G_Y, G_X) ) | | |||
+-------------------------------------------------------->| | +-------------------------------------------------------->| | |||
| | | | | | |||
Figure 2: Authenticated encryption variant of the SIGMA-I protocol. | Figure 2: Authenticated encryption variant of the SIGMA-I protocol. | |||
The parties exchanging messages are called Initiator (I) and | The parties exchanging messages are called Initiator (I) and | |||
Responder (R). They exchange ephemeral public keys, compute a shared | Responder (R). They exchange ephemeral public keys, compute a shared | |||
secret, and derive symmetric application keys used to protect | secret, and derive symmetric application keys used to protect | |||
application data. | application data. | |||
o G_X and G_Y are the ECDH ephemeral public keys of I and R, | * G_X and G_Y are the ECDH ephemeral public keys of I and R, | |||
respectively. | respectively. | |||
o CRED_I and CRED_R are the credentials containing the public | * CRED_I and CRED_R are the credentials containing the public | |||
authentication keys of I and R, respectively. | authentication keys of I and R, respectively. | |||
o ID_CRED_I and ID_CRED_R are credential identifiers enabling the | * ID_CRED_I and ID_CRED_R are credential identifiers enabling the | |||
recipient party to retrieve the credential of I and R, | recipient party to retrieve the credential of I and R, | |||
respectively. | respectively. | |||
o Sig(I; . ) and Sig(R; . ) denote signatures made with the private | * Sig(I; . ) and Sig(R; . ) denote signatures made with the private | |||
authentication key of I and R, respectively. | authentication key of I and R, respectively. | |||
o AEAD(K; . ) denotes authenticated encryption with additional data | * AEAD(K; . ) denotes authenticated encryption with additional data | |||
using a key K derived from the shared secret. | using a key K derived from the shared secret. | |||
In order to create a "full-fledged" protocol some additional protocol | In order to create a "full-fledged" protocol some additional protocol | |||
elements are needed. EDHOC adds: | elements are needed. EDHOC adds: | |||
o Transcript hashes (hashes of message data) TH_2, TH_3, TH_4 used | * Transcript hashes (hashes of message data) TH_2, TH_3, TH_4 used | |||
for key derivation and as additional authenticated data. | for key derivation and as additional authenticated data. | |||
o Computationally independent keys derived from the ECDH shared | * Computationally independent keys derived from the ECDH shared | |||
secret and used for authenticated encryption of different | secret and used for authenticated encryption of different | |||
messages. | messages. | |||
o An optional fourth message giving explicit key confirmation to I | * An optional fourth message giving explicit key confirmation to I | |||
in deployments where no protected application data is sent from R | in deployments where no protected application data is sent from R | |||
to I. | to I. | |||
o A key material exporter and a key update function enabling | * A key material exporter and a key update function enabling forward | |||
frequent forward secrecy. | secrecy. | |||
o Verification of a common preferred cipher suite: | * Verification of a common preferred cipher suite: | |||
* The Initiator lists supported cipher suites in order of | - The Initiator lists supported cipher suites in order of | |||
preference | preference | |||
* The Responder verifies that the selected cipher suite is the | - The Responder verifies that the selected cipher suite is the | |||
first supported cipher suite (or else rejects and states | first supported cipher suite (or else rejects and states | |||
supported cipher suites). | supported cipher suites). | |||
o Method types and error handling. | * Method types and error handling. | |||
o Selection of connection identifiers C_I and C_R which may be used | * Selection of connection identifiers C_I and C_R which may be used | |||
to identify established keys or protocol state. | to identify established keys or protocol state. | |||
o Transport of external authorization data. | * Transport of external authorization data. | |||
EDHOC is designed to encrypt and integrity protect as much | EDHOC is designed to encrypt and integrity protect as much | |||
information as possible, and all symmetric keys are derived using as | information as possible, and all symmetric keys are derived using as | |||
much previous information as possible. EDHOC is furthermore designed | much previous information as possible. EDHOC is furthermore designed | |||
to be as compact and lightweight as possible, in terms of message | to be as compact and lightweight as possible, in terms of message | |||
sizes, processing, and the ability to reuse already existing CBOR, | sizes, processing, and the ability to reuse already existing CBOR, | |||
COSE, and CoAP libraries. | COSE, and CoAP libraries. | |||
To simplify for implementors, the use of CBOR and COSE in EDHOC is | To simplify for implementors, the use of CBOR and COSE in EDHOC is | |||
summarized in Appendix C and test vectors including CBOR diagnostic | summarized in Appendix C and test vectors including CBOR diagnostic | |||
notation are given in Appendix D. | notation are given in Appendix D. | |||
3. Protocol Elements | 3. Protocol Elements | |||
3.1. General | 3.1. General | |||
An EDHOC message flow consists of three mandatory messages | The EDHOC protocol consists of three mandatory messages (message_1, | |||
(message_1, message_2, message_3) between Initiator and Responder, an | message_2, message_3) between Initiator and Responder, an optional | |||
optional fourth message (message_4), plus an EDHOC error message. | fourth message (message_4), plus an error message. EDHOC messages | |||
EDHOC messages are CBOR Sequences [RFC8742], see Figure 3. The | are CBOR Sequences [RFC8742], see Figure 3. The protocol elements in | |||
protocol elements in the figure are introduced in the following | the figure are introduced in the following sections. Message | |||
sections. Message formatting and processing is specified in | formatting and processing is specified in Section 5 and Section 6. | |||
Section 5 and Section 6. An implementation may support only | An implementation may support only Initiator or only Responder. | |||
Initiator or only Responder. | ||||
Application data is protected using the agreed application algorithms | Application data is protected using the agreed application algorithms | |||
(AEAD, hash) in the selected cipher suite (see Section 3.6) and the | (AEAD, hash) in the selected cipher suite (see Section 3.6) and the | |||
application can make use of the established connection identifiers | application can make use of the established connection identifiers | |||
C_I and C_R (see Section 3.3). EDHOC may be used with the media type | C_I and C_R (see Section 3.3). EDHOC may be used with the media type | |||
application/edhoc defined in Section 8. | application/edhoc defined in Section 8. | |||
The Initiator can derive symmetric application keys after creating | The Initiator can derive symmetric application keys after creating | |||
EDHOC message_3, see Section 4.1. Application protected data can | EDHOC message_3, see Section 4.3. Protected application data can | |||
therefore be sent in parallel or together with EDHOC message_3. | therefore be sent in parallel or together with EDHOC message_3. | |||
Initiator Responder | Initiator Responder | |||
| METHOD, SUITES_I, G_X, C_I, EAD_1 | | | METHOD, SUITES_I, G_X, C_I, EAD_1 | | |||
+------------------------------------------------------------------>| | +------------------------------------------------------------------>| | |||
| message_1 | | | message_1 | | |||
| | | | | | |||
| G_Y, C_R, Enc(ID_CRED_R, Signature_or_MAC_2, EAD_2) | | | G_Y, Enc(ID_CRED_R, Signature_or_MAC_2, EAD_2), C_R | | |||
|<------------------------------------------------------------------+ | |<------------------------------------------------------------------+ | |||
| message_2 | | | message_2 | | |||
| | | | | | |||
| AEAD(K_3ae; ID_CRED_I, Signature_or_MAC_3, EAD_3) | | | AEAD(K_3ae; ID_CRED_I, Signature_or_MAC_3, EAD_3) | | |||
+------------------------------------------------------------------>| | +------------------------------------------------------------------>| | |||
| message_3 | | | message_3 | | |||
Figure 3: EDHOC Message Flow | Figure 3: EDHOC Message Flow | |||
3.2. Method | 3.2. Method | |||
The data item METHOD in message_1 (see Section 5.2.1), is an integer | The data item METHOD in message_1 (see Section 5.2.1), is an integer | |||
specifying the authentication method. EDHOC supports authentication | specifying the authentication method. EDHOC supports authentication | |||
with signature or static Diffie-Hellman keys, as defined in the four | with signature or static Diffie-Hellman keys, as defined in the four | |||
authentication methods: 0, 1, 2, and 3, see Figure 4. (Method 0 | authentication methods: 0, 1, 2, and 3, see Figure 4. (Method 0 | |||
corresponds to the case outlined in Section 2 where both Initiator | corresponds to the case outlined in Section 2 where both Initiator | |||
and Responder authenticate with signature keys.) | and Responder authenticate with signature keys.) | |||
skipping to change at page 9, line 46 ¶ | skipping to change at page 10, line 27 ¶ | |||
+-------+-------------------+-------------------+-------------------+ | +-------+-------------------+-------------------+-------------------+ | |||
| Value | Initiator | Responder | Reference | | | Value | Initiator | Responder | Reference | | |||
+-------+-------------------+-------------------+-------------------+ | +-------+-------------------+-------------------+-------------------+ | |||
| 0 | Signature Key | Signature Key | [[this document]] | | | 0 | Signature Key | Signature Key | [[this document]] | | |||
| 1 | Signature Key | Static DH Key | [[this document]] | | | 1 | Signature Key | Static DH Key | [[this document]] | | |||
| 2 | Static DH Key | Signature Key | [[this document]] | | | 2 | Static DH Key | Signature Key | [[this document]] | | |||
| 3 | Static DH Key | Static DH Key | [[this document]] | | | 3 | Static DH Key | Static DH Key | [[this document]] | | |||
+-------+-------------------+-------------------+-------------------+ | +-------+-------------------+-------------------+-------------------+ | |||
Figure 4: Method Types | Figure 4: Method Types | |||
3.3. Connection Identifiers | 3.3. Connection Identifiers | |||
EDHOC includes the selection of connection identifiers (C_I, C_R) | EDHOC includes the selection of connection identifiers (C_I, C_R) | |||
identifying a connection for which keys are agreed. Connection | identifying a connection for which keys are agreed. Connection | |||
identifiers may be used in the ongoing EDHOC protocol (see | identifiers may be used in the ongoing EDHOC protocol (see | |||
Section 3.3.2) or in a subsequent application protocol, e.g., OSCORE | Section 3.3.2) or in a subsequent application protocol, e.g., OSCORE | |||
(see Section 3.3.3). The connection identifiers do not have any | (see Section 3.3.3). The connection identifiers do not have any | |||
cryptographic purpose in EDHOC. | cryptographic purpose in EDHOC. | |||
Connection identifiers in EDHOC are byte strings or integers, encoded | Connection identifiers in EDHOC are byte strings or integers, encoded | |||
in CBOR. One byte connection identifiers (the integers -24 to 23 and | in CBOR. One byte connection identifiers (the integers -24 to 23 and | |||
the empty bytestring h'') are realistic in many scenarios as most | the empty byte string h'') are realistic in many scenarios as most | |||
constrained devices only have a few connections. | constrained devices only have a few connections. | |||
3.3.1. Selection of Connection Identifiers | 3.3.1. Selection of Connection Identifiers | |||
C_I and C_R are chosen by I and R, respectively. The Initiator | C_I and C_R are chosen by I and R, respectively. The Initiator | |||
selects C_I and sends it in message_1 for the Responder to use as a | selects C_I and sends it in message_1 for the Responder to use as a | |||
reference to the connection in communications with the Initiator. | reference to the connection in communications with the Initiator. | |||
The Responder selects C_R and sends in message_2 for the Initiator to | The Responder selects C_R and sends in message_2 for the Initiator to | |||
use as a reference to the connection in communications with the | use as a reference to the connection in communications with the | |||
Responder. | Responder. | |||
If connection identifiers are used by an application protocol for | If connection identifiers are used by an application protocol for | |||
which EDHOC establishes keys then the selected connection identifiers | which EDHOC establishes keys then the selected connection identifiers | |||
SHALL adhere to the requirements for that protocol, see Section 3.3.3 | SHALL adhere to the requirements for that protocol, see Section 3.3.3 | |||
for an example. | for an example. | |||
3.3.2. Use of Connection Identifiers in EDHOC | 3.3.2. Use of Connection Identifiers with EDHOC | |||
Connection identifiers may be used to correlate EDHOC messages and | Connection identifiers may be used to correlate EDHOC messages and | |||
facilitate the retrieval of protocol state during EDHOC protocol | facilitate the retrieval of protocol state during EDHOC protocol | |||
execution. EDHOC transports that do not inherently provide | execution. EDHOC transports that do not inherently provide | |||
correlation across all messages of an exchange can send connection | correlation across all messages of an exchange can send connection | |||
identifiers along with EDHOC messages to gain that required | identifiers along with EDHOC messages to gain that required | |||
capability, see Section 3.4. For an example when CoAP is used as | capability, see Section 3.4. For an example of using connection | |||
transport, see Appendix A.3. | identifiers when CoAP is used as transport, see Appendix A.3. | |||
3.3.3. Use of Connection Identifiers in OSCORE | 3.3.3. Use of Connection Identifiers with OSCORE | |||
For OSCORE, the choice of a connection identifier results in the | For OSCORE, the choice of a connection identifier results in the | |||
endpoint selecting its Recipient ID, see Section 3.1 of [RFC8613]), | endpoint selecting its Recipient ID, see Section 3.1 of [RFC8613], | |||
for which certain uniqueness requirements apply, see Section 3.3 of | for which certain uniqueness requirements apply, see Section 3.3 of | |||
[RFC8613]). Therefore the Initiator and the Responder MUST NOT | [RFC8613]. Therefore, the Initiator and the Responder MUST NOT | |||
select connection identifiers such that it results in same OSCORE | select connection identifiers such that it results in same OSCORE | |||
Recipient ID. Since the Recipient ID is a byte string and a EDHOC | Recipient ID. Since the Recipient ID is a byte string and a EDHOC | |||
connection identifier is either a CBOR byte string or a CBOR integer, | connection identifier is either a CBOR byte string or a CBOR integer, | |||
care must be taken when selecting the connection identifiers and | care must be taken when selecting the connection identifiers and | |||
converting them to Recipient IDs. A mapping from EDHOC connection | converting them to Recipient IDs. A mapping from EDHOC connection | |||
identifier to OSCORE Recipient ID is specified in Appendix A.1. | identifier to OSCORE Recipient ID is specified in Appendix A.1. | |||
3.4. Transport | 3.4. Transport | |||
Cryptographically, EDHOC does not put requirements on the lower | Cryptographically, EDHOC does not put requirements on the lower | |||
layers. EDHOC is not bound to a particular transport layer, and can | layers. EDHOC is not bound to a particular transport layer and can | |||
even be used in environments without IP. The transport is | even be used in environments without IP. The transport is | |||
responsible, where necessary, to handle: | responsible, where necessary, to handle: | |||
o message loss, | * message loss, | |||
o message reordering, | * message reordering, | |||
o message duplication, | * message duplication, | |||
o fragmentation, | * fragmentation, | |||
o demultiplex EDHOC messages from other types of messages, and | * demultiplex EDHOC messages from other types of messages, and | |||
o denial of service protection. | * denial-of-service protection. | |||
Besides these common transport oriented properties, EDHOC transport | Besides these common transport-oriented properties, EDHOC transport | |||
additionally needs to support the correlation between EDHOC messages, | additionally needs to support the correlation between EDHOC messages, | |||
including an indication of a message being message_1. The | including an indication of a message being message_1. The | |||
correlation may reuse existing mechanisms in the transport protocol. | correlation may reuse existing mechanisms in the transport protocol. | |||
For example, the CoAP Token may be used to correlate EDHOC messages | For example, the CoAP Token may be used to correlate EDHOC messages | |||
in a CoAP response and an associated CoAP request. In the absense of | in a CoAP response and an associated CoAP request. In the absence of | |||
correlation between a message received and a message previously sent | correlation between a message received and a message previously sent | |||
inherent to the transport, the EDHOC connection identifiers may be | inherent to the transport, the EDHOC connection identifiers may be | |||
added, e.g. by prepending the appropriate connection identifier (when | added, e.g., by prepending the appropriate connection identifier | |||
available from the EDHOC protocol) to the EDHOC message. Transport | (when available from the EDHOC protocol) to the EDHOC message. | |||
of EDHOC in CoAP payloads is described in Appendix A.3, which also | Transport of EDHOC in CoAP payloads is described in Appendix A.3, | |||
shows how to use connection identifiers and message_1 indication with | which also shows how to use connection identifiers and message_1 | |||
CoAP. | indication with CoAP. | |||
The Initiator and the Responder need to have agreed on a transport to | The Initiator and the Responder need to have agreed on a transport to | |||
be used for EDHOC, see Section 3.9. | be used for EDHOC, see Section 3.9. | |||
3.5. Authentication Parameters | 3.5. Authentication Parameters | |||
EDHOC enables public-key based authentication and supports various | ||||
settings for how the other endpoint's public key is transported, | ||||
identified, and trusted. | ||||
The authentication key (i.e., the public key) appears in different | ||||
functions: | ||||
1. as part of the authentication credential CRED_x included in the | ||||
integrity calculation | ||||
2. for verification of the Signature_or_MAC field in message_2 and | ||||
message_3 (see Section 5.3.2 and Section 5.4.2) | ||||
3. in the key derivation (in case of a static Diffie-Hellman key, | ||||
see Section 4). | ||||
The choice of authentication key has an impact on the message size | ||||
(see Section 3.5.1), and even more so the choice of authentication | ||||
credential (see Section 3.5.2) in case it is transported within the | ||||
protocol (see Section 3.5.4). EDHOC supports authentication | ||||
credentials for which COSE header parameters are defined, including: | ||||
* X.509 v3 certificate [RFC5280] | ||||
* C509 certificate [I-D.ietf-cose-cbor-encoded-cert] | ||||
* CBOR Web Token (CWT, [RFC8392]) | ||||
* Unprotected CWT Claims Set (UCCS, see Section 1.5) | ||||
For CWT and UCCS, the authentication key is represented with a 'cnf' | ||||
claim [RFC8747] containing a COSE_Key | ||||
[I-D.ietf-cose-rfc8152bis-struct]. UCCS can be seen as a generic | ||||
representation of a raw public key, see Section 3.5.2 for an example. | ||||
COSE_Key is omitted from the list above because of limitations to | ||||
represent the identity (see Section 3.5.3) and because it can easily | ||||
be embedded in a UCCS. | ||||
Identical authentication credentials need to be established in both | ||||
endpoints to accomplish item 1 above (see Section 3.5.2) but for many | ||||
settings it is not necessary to transport the authentication | ||||
credential over constrained links. It may, for example, be pre- | ||||
provisioned or acquired out-of-band over less constrained links. | ||||
ID_CRED_x coincides with the authentication credential CRED_x in case | ||||
it is transported, or else contains a reference to the authentication | ||||
credential to facilitate its retrieval (see Section 3.5.4). | ||||
The choice of authentication credential also depends on the trust | ||||
model. For example, a certificate or CWT may rely on a trusted third | ||||
party, whereas a UCCS may be used when trust in the public key can be | ||||
achieved by other means, or in the case of trust-on-first-use. A | ||||
UCCS as authentication credential provides essentially the same | ||||
trustworthiness as a self-signed certificate or CWT but has smaller | ||||
size. | ||||
More details are provided in the following subsections. | ||||
3.5.1. Authentication Keys | 3.5.1. Authentication Keys | |||
The authentication key MUST be a signature key or static Diffie- | The authentication key MUST be a signature key or static Diffie- | |||
Hellman key. The Initiator and the Responder MAY use different types | Hellman key. The Initiator and the Responder MAY use different types | |||
of authentication keys, e.g. one uses a signature key and the other | of authentication keys, e.g., one uses a signature key and the other | |||
uses a static Diffie-Hellman key. When using a signature key, the | uses a static Diffie-Hellman key. When using a signature key, the | |||
authentication is provided by a signature. When using a static | authentication is provided by a signature. When using a static | |||
Diffie-Hellman key the authentication is provided by a Message | Diffie-Hellman key the authentication is provided by a Message | |||
Authentication Code (MAC) computed from an ephemeral-static ECDH | Authentication Code (MAC) computed from an ephemeral-static ECDH | |||
shared secret which enables significant reductions in message sizes. | shared secret which enables significant reductions in message sizes. | |||
When using static Diffie-Hellman keys the Initiator's and Responder's | ||||
private authentication keys are called I and R, respectively, and the | ||||
public authentication keys are called G_I and G_R, respectively. | ||||
The MAC is implemented with an AEAD algorithm. When using static | The authentication key algorithm needs to be specified with enough | |||
Diffie-Hellman keys the Initiator's and Responder's private | ||||
authentication keys are called I and R, respectively, and the public | ||||
authentication keys are called G_I and G_R, respectively. The | ||||
authentication key algorithm needs to specified with enough | ||||
parameters to make it completely determined. Note that for most | parameters to make it completely determined. Note that for most | |||
signature algorithms, the signature is determined by the signature | signature algorithms, the signature is determined jointly by the | |||
algorithm and the authentication key algorithm together. For | signature algorithm and the authentication key algorithm. For | |||
example, the curve used in the signature is typically determined by | example, the curve used in the signature is typically determined by | |||
the authentication key parameters. | the authentication key parameters. | |||
o Only the Responder SHALL have access to the Responder's private | * Only the Responder SHALL have access to the Responder's private | |||
authentication key. | authentication key. | |||
o Only the Initiator SHALL have access to the Initiator's private | * Only the Initiator SHALL have access to the Initiator's private | |||
authentication key. | authentication key. | |||
3.5.2. Identities | 3.5.2. Authentication Credentials | |||
EDHOC assumes the existence of mechanisms (certification authority, | ||||
trusted third party, manual distribution, etc.) for specifying and | ||||
distributing authentication keys and identities. Policies are set | ||||
based on the identity of the other party, and parties typically only | ||||
allow connections from a specific identity or a small restricted set | ||||
of identities. For example, in the case of a device connecting to a | ||||
network, the network may only allow connections from devices which | ||||
authenticate with certificates having a particular range of serial | ||||
numbers in the subject field and signed by a particular CA. On the | ||||
other side, the device may only be allowed to connect to a network | ||||
which authenticates with a particular public key (information of | ||||
which may be provisioned, e.g., out of band or in the external | ||||
authorization data, see Section 3.8). | ||||
The EDHOC implementation must be able to receive and enforce | ||||
information from the application about what is the intended endpoint, | ||||
and in particular whether it is a specific identity or a set of | ||||
identities. | ||||
o When a Public Key Infrastructure (PKI) is used, the trust anchor | ||||
is a Certification Authority (CA) certificate, and the identity is | ||||
the subject whose unique name (e.g. a domain name, NAI, or EUI) is | ||||
included in the endpoint's certificate. Before running EDHOC each | ||||
party needs at least one CA public key certificate, or just the | ||||
public key, and a specific identity or set of identities it is | ||||
allowed to communicate with. Only validated public-key | ||||
certificates with an allowed subject name, as specified by the | ||||
application, are to be accepted. EDHOC provides proof that the | ||||
other party possesses the private authentication key corresponding | ||||
to the public authentication key in its certificate. The | ||||
certification path provides proof that the subject of the | ||||
certificate owns the public key in the certificate. | ||||
o When public keys are used but not with a PKI (RPK, self-signed | ||||
certificate), the trust anchor is the public authentication key of | ||||
the other party. In this case, the identity is typically directly | ||||
associated to the public authentication key of the other party. | ||||
For example, the name of the subject may be a canonical | ||||
representation of the public key. Alternatively, if identities | ||||
can be expressed in the form of unique subject names assigned to | ||||
public keys, then a binding to identity can be achieved by | ||||
including both public key and associated subject name in the | ||||
protocol message computation: CRED_I or CRED_R may be a self- | ||||
signed certificate or COSE_Key containing the public | ||||
authentication key and the subject name, see Section 3.5.3. | ||||
Before running EDHOC, each endpoint needs a specific public | ||||
authentication key/unique associated subject name, or a set of | ||||
public authentication keys/unique associated subject names, which | ||||
it is allowed to communicate with. EDHOC provides proof that the | ||||
other party possesses the private authentication key corresponding | ||||
to the public authentication key. | ||||
3.5.3. Authentication Credentials | ||||
The authentication credentials, CRED_I and CRED_R, contain the public | The authentication credentials, CRED_I and CRED_R, contain the public | |||
authentication key of the Initiator and the Responder, respectively. | authentication key of the Initiator and the Responder, respectively. | |||
The Initiator and the Responder MAY use different types of | The Initiator and the Responder MAY use different types of | |||
credentials, e.g. one uses an RPK and the other uses a public key | credentials, e.g., one uses an UCCS and the other uses an X.509 | |||
certificate. | certificate. | |||
The credentials CRED_I and CRED_R are signed or MAC:ed (depending on | The credentials CRED_I and CRED_R are MACed by the Initiator and the | |||
method) by the Initiator and the Responder, respectively, see | Responder, respectively, see Section 5.4.2 and Section 5.3.2, and | |||
Section 5.4 and Section 5.3. | thus included in the message integrity calculation. | |||
When the credential is a certificate, CRED_x is an end-entity | ||||
certificate (i.e. not the certificate chain) encoded as a CBOR bstr. | ||||
In X.509 certificates, signature keys typically have key usage | ||||
"digitalSignature" and Diffie-Hellman keys typically have key usage | ||||
"keyAgreement". | ||||
To prevent misbinding attacks in systems where an attacker can | To prevent misbinding attacks in systems where an attacker can | |||
register public keys without proving knowledge of the private key, | register public keys without proving knowledge of the private key, | |||
SIGMA [SIGMA] enforces a MAC to be calculated over the "Identity", | SIGMA [SIGMA] enforces a MAC to be calculated over the "identity". | |||
which in case of a X.509 certificate would be the 'subject' and | EDHOC follows SIGMA by calculating a MAC over the whole credential, | |||
'subjectAltName' fields. EDHOC follows SIGMA by calculating a MAC | which in case of a X.509 or C509 certificate includes the "subject" | |||
over the whole certificate. While the SIGMA paper only focuses on | and "subjectAltName" fields, and in the case of CWT or UCCS includes | |||
the identity, the same principle is true for any information such as | the "sub" claim, see Section 3.5.3. While the SIGMA paper only | |||
policies connected to the public key. | focuses on the identity, the same principle is true for any | |||
information such as policies connected to the public key. | ||||
When the credential is a COSE_Key, CRED_x is a CBOR map only | When the credential is a certificate, CRED_x is an end-entity | |||
containing specific fields from the COSE_Key identifying the public | certificate (i.e., not the certificate chain). In X.509 and C509 | |||
key, and optionally the "Identity". CRED_x needs to be defined such | certificates, signature keys typically have key usage | |||
that it is identical when generated by Initiator or Responder. The | "digitalSignature" and Diffie-Hellman public keys typically have key | |||
parameters SHALL be encoded in bytewise lexicographic order of their | usage "keyAgreement". | |||
deterministic encodings as specified in Section 4.2.1 of [RFC8949]. | ||||
If the parties have agreed on an identity besides the public key, the | In case of elliptic curve based credential the claims set for CWT or | |||
identity is included in the CBOR map with the label "subject name", | UCCS includes: | |||
otherwise the subject name is the empty text string. The public key | ||||
parameters depend on key type. | ||||
o For COSE_Keys of type OKP the CBOR map SHALL, except for subject | * the 'cnf' claim with value COSE_Key, see [RFC8747], where the | |||
name, only include the parameters 1 (kty), -1 (crv), and -2 | public key parameters depend on key type: | |||
(x-coordinate). | ||||
o For COSE_Keys of type EC2 the CBOR map SHALL, except for subject | - for OKP the CBOR map typically includes the parameters 1 (kty), | |||
name, only include the parameters 1 (kty), -1 (crv), -2 | -1 (crv), and -2 (x-coordinate) | |||
(x-coordinate), and -3 (y-coordinate). | ||||
An example of CRED_x when the RPK contains an X25519 static Diffie- | - for EC2 the CBOR map typically includes the parameters 1 (kty), | |||
Hellman key and the parties have agreed on an EUI-64 identity is | -1 (crv), -2 (x-coordinate), and -3 (y-coordinate) | |||
shown below: | ||||
CRED_x = { | * the 'sub' (subject) claim containing the "identity", if the | |||
1: 1, | parties have agreed on an identity besides the public key. | |||
-1: 4, | ||||
-2: h'b1a3e89460e88d3a8d54211dc95f0b90 | CRED_x needs to be defined such that it is identical when generated | |||
3ff205eb71912d6db8f4af980d2db83a', | by Initiator or Responder, see Section 3.9. The parameters SHALL be | |||
"subject name" : "42-50-31-FF-EF-37-32-39" | encoded in bytewise lexicographic order of their deterministic | |||
encodings as specified in Section 4.2.1 of [RFC8949]. | ||||
An example of CRED_x being a UCCS in bytewise lexicographic order | ||||
containing an X25519 static Diffie-Hellman key and where the parties | ||||
have agreed on an EUI-64 identity is shown below: | ||||
{ /UCCS/ | ||||
2 : "42-50-31-FF-EF-37-32-39", /sub/ | ||||
8 : { /cnf/ | ||||
1 : { /COSE_Key/ | ||||
1 : 1, /kty/ | ||||
-1 : 4, /crv/ | ||||
-2 : h'b1a3e89460e88d3a8d54211dc95f0b90 /x/ | ||||
3ff205eb71912d6db8f4af980d2db83a' | ||||
} | ||||
} | ||||
} | } | |||
3.5.3. Identities | ||||
EDHOC assumes the existence of mechanisms (certification authority, | ||||
trusted third party, pre-provisioning, etc.) for specifying and | ||||
distributing authentication keys and identities. Policies are | ||||
typically set based on the identity of the other party, and parties | ||||
typically only allow connections from a specific identity or a small | ||||
restricted set of identities. For example, in the case of a device | ||||
connecting to a network, the network may only allow connections from | ||||
devices which authenticate with certificates having a particular | ||||
range of serial numbers in the subject field and signed by a | ||||
particular CA. On the other side, the device may only be allowed to | ||||
connect to a network which authenticates with a particular public key | ||||
(information of which may be provisioned, e.g., out of band or in the | ||||
external authorization data, see Section 3.8). | ||||
The EDHOC implementation or the application must enforce information | ||||
about the intended endpoint, and in particular whether it is a | ||||
specific identity or a set of identities. Either EDHOC passes | ||||
information about identity to the application for a decision, or | ||||
EDHOC needs to have access to relevant information and makes the | ||||
decision on its own. | ||||
* When a Public Key Infrastructure (PKI) is used with certificates, | ||||
the trust anchor is a Certification Authority (CA) certificate, | ||||
and the identity is the subject whose unique name (e.g. a domain | ||||
name, NAI, or EUI) is included in the endpoint's certificate. | ||||
Before running EDHOC each party needs at least one CA public key | ||||
certificate, or just the public key, and a specific identity or | ||||
set of identities it is allowed to communicate with. Only | ||||
validated public-key certificates with an allowed subject name, as | ||||
specified by the application, are to be accepted. EDHOC provides | ||||
proof that the other party possesses the private authentication | ||||
key corresponding to the public authentication key in its | ||||
certificate. The certification path provides proof that the | ||||
subject of the certificate owns the public key in the certificate. | ||||
* Similarly, when a PKI is used with CWTs, each party needs to have | ||||
a trusted third party self-signed CWT, or just the UCCS/raw public | ||||
key, to verify the CWTs, and a specific identity or set of | ||||
identities in the 'sub'(subject) claim of the CWT to determine if | ||||
it is allowed to communicate with. | ||||
* When public keys are used but not with a PKI (UCCS, self-signed | ||||
certificate/CWT), the trust anchor is the authentication key of | ||||
the other party. In this case, the identity is typically directly | ||||
associated to the authentication key of the other party. For | ||||
example, the name of the subject may be a canonical representation | ||||
of the public key. Alternatively, if identities can be expressed | ||||
in the form of unique subject names assigned to public keys, then | ||||
a binding to identity can be achieved by including both public key | ||||
and associated subject name in the protocol message computation: | ||||
CRED_I or CRED_R may be a self-signed certificate/CWT or UCCS | ||||
containing the authentication key and the subject name, see | ||||
Section 3.5.2. Before running EDHOC, each endpoint needs a | ||||
specific authentication key/unique associated subject name, or a | ||||
set of public authentication keys/unique associated subject names, | ||||
which it is allowed to communicate with. EDHOC provides proof | ||||
that the other party possesses the private authentication key | ||||
corresponding to the public authentication key. | ||||
3.5.4. Identification of Credentials | 3.5.4. Identification of Credentials | |||
ID_CRED_I and ID_CRED_R are used to identify and optionally transport | ID_CRED_I and ID_CRED_R are used to identify and optionally transport | |||
the public authentication keys of the Initiator and the Responder, | the public authentication keys of the Initiator and the Responder, | |||
respectively. ID_CRED_I and ID_CRED_R do not have any cryptographic | respectively. ID_CRED_I and ID_CRED_R do not have any cryptographic | |||
purpose in EDHOC. | purpose in EDHOC. | |||
o ID_CRED_R is intended to facilitate for the Initiator to retrieve | * ID_CRED_R is intended to facilitate for the Initiator to retrieve | |||
the Responder's public authentication key. | the Responder's public authentication key. | |||
o ID_CRED_I is intended to facilitate for the Responder to retrieve | * ID_CRED_I is intended to facilitate for the Responder to retrieve | |||
the Initiator's public authentication key. | the Initiator's public authentication key. | |||
The identifiers ID_CRED_I and ID_CRED_R are COSE header_maps, i.e. | The identifiers ID_CRED_I and ID_CRED_R are registered in the "COSE | |||
CBOR maps containing Common COSE Header Parameters, see Section 3.1 | Header Parameters" IANA registry. As such, ID_CRED_I and ID_CRED_R | |||
of [I-D.ietf-cose-rfc8152bis-struct]). In the following we give some | typically also provide information about the format of authentication | |||
examples of COSE header_maps. | credential, CRED_I and CRED_R, respectively. ID_CRED_I and ID_CRED_R | |||
MAY be of different types. | ||||
Raw public keys are most optimally stored as COSE_Key objects and | Public key certificates can be identified in different ways. COSE | |||
identified with a 'kid2' parameter (see Section 8.6 and Section 8.7): | header parameters for identifying X.509 or C509 certificates are | |||
defined in [I-D.ietf-cose-x509] and | ||||
[I-D.ietf-cose-cbor-encoded-cert], for example: | ||||
o ID_CRED_x = { 4 : kid_x }, where kid_x : bstr / int, for x = I or | * by a hash value with the 'x5t' or 'c5t' parameters, respectively: | |||
R. | ||||
Note that the integers -24 to 23 and the empty bytestring h'' are | - ID_CRED_x = { 34 : COSE_CertHash }, for x = I or R, | |||
encoded as one byte. | ||||
Public key certificates can be identified in different ways. Header | - ID_CRED_x = { TBD3 : COSE_CertHash }, for x = I or R; | |||
parameters for identifying C509 certificates and X.509 certificates | ||||
are defined in [I-D.ietf-cose-cbor-encoded-cert] and | ||||
[I-D.ietf-cose-x509], for example: | ||||
o by a hash value with the 'c5t' or 'x5t' parameters; | * or by a URI with the 'x5u' or 'c5u' parameters, respectively: | |||
* ID_CRED_x = { 34 : COSE_CertHash }, for x = I or R, | - ID_CRED_x = { 35 : uri }, for x = I or R, | |||
* ID_CRED_x = { TDB3 : COSE_CertHash }, for x = I or R, | - ID_CRED_x = { TBD4 : uri }, for x = I or R. | |||
o by a URI with the 'c5u' or 'x5u' parameters; | ID_CRED_x MAY contain the actual credential used for authentication, | |||
CRED_x. For example, a certificate chain can be transported in | ||||
ID_CRED_x with COSE header parameter c5c or x5chain, defined in | ||||
[I-D.ietf-cose-cbor-encoded-cert] and [I-D.ietf-cose-x509]. | ||||
* ID_CRED_x = { 35 : uri }, for x = I or R, | Credentials of type CWT and UCCS are transported with the COSE header | |||
parameter registered in Section 8.5: | ||||
* ID_CRED_x = { TBD4 : uri }, for x = I or R, | * ID_CRED_x = { TBD1 : CWT }, for x = I or R, | |||
o ID_CRED_x MAY contain the actual credential used for | * ID_CRED_x = { TBD1 : UCCS }, for x = I or R. | |||
authentication, CRED_x. For example, a certificate chain can be | ||||
transported in ID_CRED_x with COSE header parameter c5c or | ||||
x5chain, defined in [I-D.ietf-cose-cbor-encoded-cert] and | ||||
[I-D.ietf-cose-x509]. | ||||
It is RECOMMENDED that ID_CRED_x uniquely identify the public | It is RECOMMENDED that ID_CRED_x uniquely identify the public | |||
authentication key as the recipient may otherwise have to try several | authentication key as the recipient may otherwise have to try several | |||
keys. ID_CRED_I and ID_CRED_R are transported in the 'ciphertext', | keys. ID_CRED_I and ID_CRED_R are transported in the 'ciphertext', | |||
see Section 5.4 and Section 5.3. | see Section 5.4.2 and Section 5.3.2. | |||
When ID_CRED_x does not contain the actual credential it may be very | When ID_CRED_x does not contain the actual credential, it may be very | |||
short. One byte credential identifiers are realistic in many | short, e.g., if the endpoints have agreed to use a key identifier | |||
scenarios as most constrained devices only have a few keys. In cases | parameter 'kid': | |||
where a node only has one key, the identifier may even be the empty | ||||
byte string. | * ID_CRED_x = { 4 : key_id_x }, where key_id_x : kid, for x = I or | |||
R. | ||||
Note that 'kid' is extended to support int values to allow more one- | ||||
byte identifiers (see Section 8.6 and Section 8.7) which may be | ||||
useful in many scenarios since constrained devices only have a few | ||||
keys. | ||||
3.6. Cipher Suites | 3.6. Cipher Suites | |||
An EDHOC cipher suite consists of an ordered set of algorithms from | An EDHOC cipher suite consists of an ordered set of algorithms from | |||
the "COSE Algorithms" and "COSE Elliptic Curves" registries. | the "COSE Algorithms" and "COSE Elliptic Curves" registries as well | |||
Algorithms need to be specified with enough parameters to make them | as the EDHOC MAC length. Algorithms need to be specified with enough | |||
completely determined. Currently, none of the algorithms require | parameters to make them completely determined. Currently, none of | |||
parameters. EDHOC is only specified for use with key exchange | the algorithms require parameters. EDHOC is only specified for use | |||
algorithms of type ECDH curves. Use with other types of key exchange | with key exchange algorithms of type ECDH curves. Use with other | |||
algorithms would likely require a specification updating EDHOC. Note | types of key exchange algorithms would likely require a specification | |||
that for most signature algorithms, the signature is determined by | updating EDHOC. Note that for most signature algorithms, the | |||
the signature algorithm and the authentication key algorithm | signature is determined by the signature algorithm and the | |||
together, see Section 3.5.1. | authentication key algorithm together, see Section 3.5.1. | |||
o EDHOC AEAD algorithm | * EDHOC AEAD algorithm | |||
o EDHOC hash algorithm | * EDHOC hash algorithm | |||
o EDHOC key exchange algorithm (ECDH curve) | * EDHOC MAC length in bytes (Static DH) | |||
o EDHOC signature algorithm | * EDHOC key exchange algorithm (ECDH curve) | |||
o Application AEAD algorithm | * EDHOC signature algorithm | |||
o Application hash algorithm | * Application AEAD algorithm | |||
* Application hash algorithm | ||||
Each cipher suite is identified with a pre-defined int label. | Each cipher suite is identified with a pre-defined int label. | |||
EDHOC can be used with all algorithms and curves defined for COSE. | EDHOC can be used with all algorithms and curves defined for COSE. | |||
Implementation can either use one of the pre-defined cipher suites | Implementation can either use one of the pre-defined cipher suites | |||
(Section 8.2) or use any combination of COSE algorithms and | (Section 8.2) or use any combination of COSE algorithms and | |||
parameters to define their own private cipher suite. Private cipher | parameters to define their own private cipher suite. Private cipher | |||
suites can be identified with any of the four values -24, -23, -22, | suites can be identified with any of the four values -24, -23, -22, | |||
-21. | -21. | |||
The following CCM cipher suites are for constrained IoT where message | The following CCM cipher suites are for constrained IoT where message | |||
overhead is a very important factor. Cipher suites 1 and 3 use a | overhead is a very important factor. Cipher suites 1 and 3 use a | |||
larger tag length (128-bit) in the EDHOC AEAD algorithm than the | larger tag length (128-bit) in the EDHOC AEAD algorithm than the | |||
Application AEAD algorithm (64-bit): | Application AEAD algorithm (64-bit): | |||
0. ( 10, -16, 4, -8, 10, -16 ) | 0. ( 10, -16, 8, 4, -8, 10, -16 ) | |||
(AES-CCM-16-64-128, SHA-256, X25519, EdDSA, | (AES-CCM-16-64-128, SHA-256, 8, X25519, EdDSA, | |||
AES-CCM-16-64-128, SHA-256) | AES-CCM-16-64-128, SHA-256) | |||
1. ( 30, -16, 4, -8, 10, -16 ) | 1. ( 30, -16, 16, 4, -8, 10, -16 ) | |||
(AES-CCM-16-128-128, SHA-256, X25519, EdDSA, | (AES-CCM-16-128-128, SHA-256, 16, X25519, EdDSA, | |||
AES-CCM-16-64-128, SHA-256) | AES-CCM-16-64-128, SHA-256) | |||
2. ( 10, -16, 1, -7, 10, -16 ) | 2. ( 10, -16, 8, 1, -7, 10, -16 ) | |||
(AES-CCM-16-64-128, SHA-256, P-256, ES256, | (AES-CCM-16-64-128, SHA-256, 8, P-256, ES256, | |||
AES-CCM-16-64-128, SHA-256) | AES-CCM-16-64-128, SHA-256) | |||
3. ( 30, -16, 1, -7, 10, -16 ) | 3. ( 30, -16, 16, 1, -7, 10, -16 ) | |||
(AES-CCM-16-128-128, SHA-256, P-256, ES256, | (AES-CCM-16-128-128, SHA-256, 16, P-256, ES256, | |||
AES-CCM-16-64-128, SHA-256) | AES-CCM-16-64-128, SHA-256) | |||
The following ChaCha20 cipher suites are for less constrained | The following ChaCha20 cipher suites are for less constrained | |||
applications and only use 128-bit tag lengths. | applications and only use 128-bit tag lengths. | |||
4. ( 24, -16, 4, -8, 24, -16 ) | 4. ( 24, -16, 16, 4, -8, 24, -16 ) | |||
(ChaCha20/Poly1305, SHA-256, X25519, EdDSA, | (ChaCha20/Poly1305, SHA-256, 16, X25519, EdDSA, | |||
ChaCha20/Poly1305, SHA-256) | ChaCha20/Poly1305, SHA-256) | |||
5. ( 24, -16, 1, -7, 24, -16 ) | 5. ( 24, -16, 16, 1, -7, 24, -16 ) | |||
(ChaCha20/Poly1305, SHA-256, P-256, ES256, | (ChaCha20/Poly1305, SHA-256, 16, P-256, ES256, | |||
ChaCha20/Poly1305, SHA-256) | ChaCha20/Poly1305, SHA-256) | |||
The following GCM cipher suite is for general non-constrained | The following GCM cipher suite is for general non-constrained | |||
applications. It uses high performance algorithms that are widely | applications. It uses high performance algorithms that are widely | |||
supported: | supported: | |||
6. ( 1, -16, 4, -7, 1, -16 ) | 6. ( 1, -16, 16, 4, -7, 1, -16 ) | |||
(A128GCM, SHA-256, X25519, ES256, | (A128GCM, SHA-256, 16, X25519, ES256, | |||
A128GCM, SHA-256) | A128GCM, SHA-256) | |||
The following two cipher suites are for high security application | The following two cipher suites are for high security application | |||
such as government use and financial applications. The two cipher | such as government use and financial applications. The two cipher | |||
suites do not share any algorithms. The first of the two cipher | suites do not share any algorithms. The first of the two cipher | |||
suites is compatible with the CNSA suite [CNSA]. | suites is compatible with the CNSA suite [CNSA]. | |||
24. ( 3, -43, 2, -35, 3, -43 ) | 24. ( 3, -43, 16, 2, -35, 3, -43 ) | |||
(A256GCM, SHA-384, P-384, ES384, | (A256GCM, SHA-384, 16, P-384, ES384, | |||
A256GCM, SHA-384) | A256GCM, SHA-384) | |||
25. ( 24, -45, 5, -8, 24, -45 ) | 25. ( 24, -45, 16, 5, -8, 24, -45 ) | |||
(ChaCha20/Poly1305, SHAKE256, X448, EdDSA, | (ChaCha20/Poly1305, SHAKE256, 16, X448, EdDSA, | |||
ChaCha20/Poly1305, SHAKE256) | ChaCha20/Poly1305, SHAKE256) | |||
The different methods use the same cipher suites, but some algorithms | The different methods use the same cipher suites, but some algorithms | |||
are not used in some methods. The EDHOC signature algorithm is not | are not used in some methods. The EDHOC signature algorithm is not | |||
used in methods without signature authentication. | used in methods without signature authentication. | |||
The Initiator needs to have a list of cipher suites it supports in | The Initiator needs to have a list of cipher suites it supports in | |||
order of preference. The Responder needs to have a list of cipher | order of preference. The Responder needs to have a list of cipher | |||
suites it supports. SUITES_I is a CBOR array containing cipher | suites it supports. SUITES_I is a CBOR array containing cipher | |||
suites that the Initiator supports. SUITES_I is formatted and | suites that the Initiator supports. SUITES_I is formatted and | |||
skipping to change at page 18, line 30 ¶ | skipping to change at page 20, line 30 ¶ | |||
see Appendix B. In COSE compact representation is achieved by | see Appendix B. In COSE compact representation is achieved by | |||
formatting the ECDH ephemeral public keys as COSE_Keys of type EC2 or | formatting the ECDH ephemeral public keys as COSE_Keys of type EC2 or | |||
OKP according to Sections 7.1 and 7.2 of | OKP according to Sections 7.1 and 7.2 of | |||
[I-D.ietf-cose-rfc8152bis-algs], but only including the 'x' parameter | [I-D.ietf-cose-rfc8152bis-algs], but only including the 'x' parameter | |||
in G_X and G_Y. For Elliptic Curve Keys of type EC2, compact | in G_X and G_Y. For Elliptic Curve Keys of type EC2, compact | |||
representation MAY be used also in the COSE_Key. If the COSE | representation MAY be used also in the COSE_Key. If the COSE | |||
implementation requires an 'y' parameter, the value y = false SHALL | implementation requires an 'y' parameter, the value y = false SHALL | |||
be used. COSE always use compact output for Elliptic Curve Keys of | be used. COSE always use compact output for Elliptic Curve Keys of | |||
type EC2. | type EC2. | |||
3.8. External Authorization Data | 3.8. External Authorization Data (EAD) | |||
In order to reduce round trips and number of messages or to simplify | In order to reduce round trips and number of messages or to simplify | |||
processing, external security applications may be integrated into | processing, external security applications may be integrated into | |||
EDHOC by transporting authorization related data together with the | EDHOC by transporting authorization related data in the messages. | |||
messages. One example is the transport third-party identity and | One example is third-party identity and authorization information | |||
authorization information protected out of scope of EDHOC | protected out of scope of EDHOC [I-D.selander-ace-ake-authz]. | |||
[I-D.selander-ace-ake-authz]. Another example is the embedding of a | Another example is a certificate enrolment request or the resulting | |||
certificate enrolment request or a newly issued certificate. | issued certificate. | |||
EDHOC allows opaque external authorization data (EAD) to be sent in | EDHOC allows opaque external authorization data (EAD) to be sent in | |||
the EDHOC messages. External authorization data sent in message_1 | the EDHOC messages. External authorization data sent in message_1 | |||
(EAD_1) or message_2 (EAD_2) must be considered unprotected by EDHOC, | (EAD_1) or message_2 (EAD_2) must be considered unprotected by EDHOC, | |||
see Section 7.4. External authorization data sent in message_3 | see Section 7.4. External authorization data sent in message_3 | |||
(EAD_3) or message_4 (EAD_4) is protected between Initiator and | (EAD_3) or message_4 (EAD_4) is protected between Initiator and | |||
Responder. | Responder. | |||
External authorization data is a CBOR sequence (see Appendix C.1) as | External authorization data is a CBOR sequence (see Appendix C.1) | |||
defined below: | consisting of one or more (type, ext_authz_data) pairs as defined | |||
below: | ||||
EAD = ( | ead = 1* ( | |||
type : int, | type : int, | |||
1* ext_authz_data : any, | ext_authz_data : any, | |||
) | ) | |||
where type is an int and is followed by one or more ext_authz_data | where ext_authz_data is authorization related data defined in a | |||
depending on type as defined in a separate specification. | separate specification and its type is an int. Different types of | |||
ext_authz_data are registered in Section 8.11. | ||||
The EAD fields of EDHOC are not intended for generic application | The EAD fields of EDHOC are not intended for generic application | |||
data. Since data carried in EAD_1 and EAD_2 fields may not be | data. Since data carried in EAD_1 and EAD_2 fields may not be | |||
protected, special considerations need to be made such that a) it | protected, special considerations need to be made such that it does | |||
does not violate security, privacy etc. requirements of the service | not violate security and privacy requirements of the service which | |||
which uses this data, and b) it does not violate the security | uses this data. Moreover, the content in an EAD field may impact the | |||
properties of EDHOC. Security applications making use of the EAD | security properties provided by EDHOC. Security applications making | |||
fields must perform the necessary security analysis. | use of the EAD fields must perform the necessary security analysis. | |||
3.9. Applicability Statement | 3.9. Applicability Statement | |||
EDHOC requires certain parameters to be agreed upon between Initiator | EDHOC requires certain parameters to be agreed upon between Initiator | |||
and Responder. Some parameters can be agreed through the protocol | and Responder. Some parameters can be agreed through the protocol | |||
execution (specifically cipher suite negotiation, see Section 3.6) | execution (specifically cipher suite negotiation, see Section 3.6) | |||
but other parameters may need to be known out-of-band (e.g., which | but other parameters may need to be known out-of-band (e.g., which | |||
authentication method is used, see Section 3.2). | authentication method is used, see Section 3.2). | |||
The purpose of the applicability statement is describe the intended | The purpose of the applicability statement is to describe the | |||
use of EDHOC to allow for the relevant processing and verifications | intended use of EDHOC to allow for the relevant processing and | |||
to be made, including things like: | verifications to be made, including things like: | |||
1. How the endpoint detects that an EDHOC message is received. This | 1. How the endpoint detects that an EDHOC message is received. This | |||
includes how EDHOC messages are transported, for example in the | includes how EDHOC messages are transported, for example in the | |||
payload of a CoAP message with a certain Uri-Path or Content- | payload of a CoAP message with a certain Uri-Path or Content- | |||
Format; see Appendix A.3. * The method of transporting EDHOC | Format; see Appendix A.3. | |||
messages may also describe data carried along with the messages | ||||
that are needed for the transport to satisfy the requirements of | * The method of transporting EDHOC messages may also describe | |||
Section 3.4, e.g., connection identifiers used with certain | data carried along with the messages that are needed for the | |||
messages, see Appendix A.3. | transport to satisfy the requirements of Section 3.4, e.g., | |||
connection identifiers used with certain messages, see | ||||
Appendix A.3. | ||||
2. Authentication method (METHOD; see Section 3.2). | 2. Authentication method (METHOD; see Section 3.2). | |||
3. Profile for authentication credentials (CRED_I, CRED_R; see | 3. Profile for authentication credentials (CRED_I, CRED_R; see | |||
Section 3.5.3), e.g., profile for certificate or COSE_key, | Section 3.5.2), e.g., profile for certificate or UCCS, including | |||
including supported authentication key algorithms (subject public | supported authentication key algorithms (subject public key | |||
key algorithm in X.509 certificate). | algorithm in X.509 or C509 certificate). | |||
4. Type used to identify authentication credentials (ID_CRED_I, | 4. Type used to identify authentication credentials (ID_CRED_I, | |||
ID_CRED_R; see Section 3.5.4). | ID_CRED_R; see Section 3.5.4). | |||
5. Use and type of external authorization data (EAD_1, EAD_2, EAD_3, | 5. Use and type of external authorization data (EAD_1, EAD_2, EAD_3, | |||
EAD_4; see Section 3.8). | EAD_4; see Section 3.8). | |||
6. Identifier used as identity of endpoint; see Section 3.5.2. | 6. Identifier used as identity of endpoint; see Section 3.5.3. | |||
7. If message_4 shall be sent/expected, and if not, how to ensure a | 7. If message_4 shall be sent/expected, and if not, how to ensure a | |||
protected application message is sent from the Responder to the | protected application message is sent from the Responder to the | |||
Initiator; see Section 5.5. | Initiator; see Section 5.5. | |||
The applicability statement may also contain information about | The applicability statement may also contain information about | |||
supported cipher suites. The procedure for selecting and verifying | supported cipher suites. The procedure for selecting and verifying | |||
cipher suite is still performed as specified by the protocol, but it | cipher suite is still performed as specified by the protocol, but it | |||
may become simplified by this knowledge. | may become simplified by this knowledge. | |||
skipping to change at page 20, line 31 ¶ | skipping to change at page 22, line 34 ¶ | |||
For some parameters, like METHOD, ID_CRED_x, type of EAD, the | For some parameters, like METHOD, ID_CRED_x, type of EAD, the | |||
receiver is able to verify compliance with applicability statement, | receiver is able to verify compliance with applicability statement, | |||
and if it needs to fail because of incompliance, to infer the reason | and if it needs to fail because of incompliance, to infer the reason | |||
why the protocol failed. | why the protocol failed. | |||
For other parameters, like CRED_x in the case that it is not | For other parameters, like CRED_x in the case that it is not | |||
transported, it may not be possible to verify that incompliance with | transported, it may not be possible to verify that incompliance with | |||
applicability statement was the reason for failure: Integrity | applicability statement was the reason for failure: Integrity | |||
verification in message_2 or message_3 may fail not only because of | verification in message_2 or message_3 may fail not only because of | |||
wrong authentication credential. For example, in case the Initiator | wrong authentication credential. For example, in case the Initiator | |||
uses public key certificate by reference (i.e. not transported within | uses public key certificate by reference (i.e., not transported | |||
the protocol) then both endpoints need to use an identical data | within the protocol) then both endpoints need to use an identical | |||
structure as CRED_I or else the integrity verification will fail. | data structure as CRED_I or else the integrity verification will | |||
fail. | ||||
Note that it is not necessary for the endpoints to specify a single | Note that it is not necessary for the endpoints to specify a single | |||
transport for the EDHOC messages. For example, a mix of CoAP and | transport for the EDHOC messages. For example, a mix of CoAP and | |||
HTTP may be used along the path, and this may still allow correlation | HTTP may be used along the path, and this may still allow correlation | |||
between messages. | between messages. | |||
The applicability statement may be dependent on the identity of the | The applicability statement may be dependent on the identity of the | |||
other endpoint, but this applies only to the later phases of the | other endpoint, or other information carried in an EDHOC message, but | |||
protocol when identities are known. (Initiator does not know | it then applies only to the later phases of the protocol when such | |||
identity of Responder before having verified message_2, and Responder | information is known. (The Initiator does not know identity of | |||
does not know identity of Initiator before having verified | Responder before having verified message_2, and the Responder does | |||
message_3.) | not know identity of the Initiator before having verified message_3.) | |||
Other conditions may be part of the applicability statement, such as | Other conditions may be part of the applicability statement, such as | |||
target application or use (if there is more than one application/use) | target application or use (if there is more than one application/use) | |||
to the extent that EDHOC can distinguish between them. In case | to the extent that EDHOC can distinguish between them. In case | |||
multiple applicability statements are used, the receiver needs to be | multiple applicability statements are used, the receiver needs to be | |||
able to determine which is applicable for a given session, for | able to determine which is applicable for a given session, for | |||
example based on URI or external authorization data type. | example based on URI or external authorization data type. | |||
4. Key Derivation | 4. Key Derivation | |||
EDHOC uses Extract-and-Expand [RFC5869] with the EDHOC hash algorithm | EDHOC uses Extract-and-Expand [RFC5869] with the EDHOC hash algorithm | |||
in the selected cipher suite to derive keys used in EDHOC and in the | in the selected cipher suite to derive keys used in EDHOC and in the | |||
application. Extract is used to derive fixed-length uniformly | application. Extract is used to derive fixed-length uniformly | |||
pseudorandom keys (PRK) from ECDH shared secrets. Expand is used to | pseudorandom keys (PRK) from ECDH shared secrets. Expand is used to | |||
derive additional output keying material (OKM) from the PRKs. The | derive additional output keying material (OKM) from the PRKs. | |||
PRKs are derived using Extract. | ||||
This section defines Extract, Expand and other key derivation | ||||
functions based on these: Expand is used to define EDHOC-KDF and in | ||||
turn EDHOC-Exporter, whereas Extract is used to define EDHOC- | ||||
KeyUpdate. | ||||
4.1. Extract | ||||
The pseudorandom keys (PRKs) are derived using Extract. | ||||
PRK = Extract( salt, IKM ) | PRK = Extract( salt, IKM ) | |||
If the EDHOC hash algorithm is SHA-2, then Extract( salt, IKM ) = | where the input keying material (IKM) and salt are defined for each | |||
HKDF-Extract( salt, IKM ) [RFC5869]. If the EDHOC hash algorithm is | PRK below. | |||
SHAKE128, then Extract( salt, IKM ) = KMAC128( salt, IKM, 256, "" ). | ||||
If the EDHOC hash algorithm is SHAKE256, then Extract( salt, IKM ) = | ||||
KMAC256( salt, IKM, 512, "" ). | ||||
PRK_2e is used to derive a keystream to encrypt message_2. PRK_3e2m | The definition of Extract depends on the EDHOC hash algorithm of the | |||
is used to derive keys and IVs to produce a MAC in message_2 and to | selected cipher suite: | |||
encrypt message_3. PRK_4x3m is used to derive keys and IVs to | ||||
produce a MAC in message_3 and to derive application specific data. | ||||
PRK_2e is derived with the following input: | * if the EDHOC hash algorithm is SHA-2, then Extract( salt, IKM ) = | |||
HKDF-Extract( salt, IKM ) [RFC5869] | ||||
o The salt SHALL be the empty byte string. Note that [RFC5869] | * if the EDHOC hash algorithm is SHAKE128, then Extract( salt, IKM ) | |||
= KMAC128( salt, IKM, 256, "" ) | ||||
* if the EDHOC hash algorithm is SHAKE256, then Extract( salt, IKM ) | ||||
= KMAC256( salt, IKM, 512, "" ) | ||||
4.1.1. PRK_2e | ||||
PRK_2e is used to derive a keystream to encrypt message_2. PRK_2e is | ||||
derived with the following input: | ||||
* The salt SHALL be the empty byte string. Note that [RFC5869] | ||||
specifies that if the salt is not provided, it is set to a string | specifies that if the salt is not provided, it is set to a string | |||
of zeros (see Section 2.2 of [RFC5869]). For implementation | of zeros (see Section 2.2 of [RFC5869]). For implementation | |||
purposes, not providing the salt is the same as setting the salt | purposes, not providing the salt is the same as setting the salt | |||
to the empty byte string. | to the empty byte string. | |||
o The input keying material (IKM) SHALL be the ECDH shared secret | * The IKM SHALL be the ECDH shared secret G_XY (calculated from G_X | |||
G_XY (calculated from G_X and Y or G_Y and X) as defined in | and Y or G_Y and X) as defined in Section 6.3.1 of | |||
Section 6.3.1 of [I-D.ietf-cose-rfc8152bis-algs]. | [I-D.ietf-cose-rfc8152bis-algs]. | |||
Example: Assuming the use of curve25519, the ECDH shared secret G_XY | ||||
is the output of the X25519 function [RFC7748]: | ||||
G_XY = X25519( Y, G_X ) = X25519( X, G_Y ) | ||||
Example: Assuming the use of SHA-256 the extract phase of HKDF | Example: Assuming the use of SHA-256 the extract phase of HKDF | |||
produces PRK_2e as follows: | produces PRK_2e as follows: | |||
PRK_2e = HMAC-SHA-256( salt, G_XY ) | PRK_2e = HMAC-SHA-256( salt, G_XY ) | |||
where salt = 0x (the empty byte string). | where salt = 0x (the empty byte string). | |||
The pseudorandom keys PRK_3e2m and PRK_4x3m are defined as follow: | 4.1.2. PRK_3e2m | |||
o If the Responder authenticates with a static Diffie-Hellman key, | PRK_3e2m is used to produce a MAC in message_2 and to encrypt | |||
then PRK_3e2m = Extract( PRK_2e, G_RX ), where G_RX is the ECDH | message_3. PRK_3e2m is derived as follows: | |||
shared secret calculated from G_R and X, or G_X and R, else | ||||
PRK_3e2m = PRK_2e. | ||||
o If the Initiator authenticates with a static Diffie-Hellman key, | If the Responder authenticates with a static Diffie-Hellman key, then | |||
then PRK_4x3m = Extract( PRK_3e2m, G_IY ), where G_IY is the ECDH | PRK_3e2m = Extract( PRK_2e, G_RX ), where G_RX is the ECDH shared | |||
shared secret calculated from G_I and Y, or G_Y and I, else | secret calculated from G_R and X, or G_X and R, else PRK_3e2m = | |||
PRK_4x3m = PRK_3e2m. | PRK_2e. | |||
Example: Assuming the use of curve25519, the ECDH shared secrets | 4.1.3. PRK_4x3m | |||
G_XY, G_RX, and G_IY are the outputs of the X25519 function | ||||
[RFC7748]: | ||||
G_XY = X25519( Y, G_X ) = X25519( X, G_Y ) | PRK_4x3m is used to produce a MAC in message_3, to encrypt message_4, | |||
and to derive application specific data. PRK_4x3m is derived as | ||||
follows: | ||||
The keys and IVs used in EDHOC are derived from PRKs using Expand | If the Initiator authenticates with a static Diffie-Hellman key, then | |||
[RFC5869] where the EDHOC-KDF is instantiated with the EDHOC AEAD | PRK_4x3m = Extract( PRK_3e2m, G_IY ), where G_IY is the ECDH shared | |||
algorithm in the selected cipher suite. | secret calculated from G_I and Y, or G_Y and I, else PRK_4x3m = | |||
PRK_3e2m. | ||||
OKM = EDHOC-KDF( PRK, transcript_hash, label, length ) | 4.2. Expand | |||
The keys, IVs and MACs used in EDHOC are derived from the PRKs using | ||||
Expand, and instantiated with the EDHOC AEAD algorithm in the | ||||
selected cipher suite. | ||||
OKM = EDHOC-KDF( PRK, transcript_hash, label, context, length ) | ||||
= Expand( PRK, info, length ) | = Expand( PRK, info, length ) | |||
where info is the CBOR encoding of | where info is the CBOR encoding of | |||
info = [ | info = [ | |||
edhoc_aead_id : int / tstr, | edhoc_aead_id : int / tstr, | |||
transcript_hash : bstr, | transcript_hash : bstr, | |||
label : tstr, | label : tstr, | |||
length : uint | * context : any, | |||
length : uint, | ||||
] | ] | |||
where | where | |||
o edhoc_aead_id is an int or tstr containing the algorithm | * edhoc_aead_id is an int or tstr containing the algorithm | |||
identifier of the EDHOC AEAD algorithm in the selected cipher | identifier of the EDHOC AEAD algorithm in the selected cipher | |||
suite encoded as defined in [I-D.ietf-cose-rfc8152bis-algs]. Note | suite encoded as defined in [I-D.ietf-cose-rfc8152bis-algs]. Note | |||
that a single fixed edhoc_aead_id is used in all invocations of | that a single fixed edhoc_aead_id is used in all invocations of | |||
EDHOC-KDF, including the derivation of KEYSTREAM_2 and invocations | EDHOC-KDF, including the derivation of KEYSTREAM_2 and invocations | |||
of the EDHOC-Exporter. | of the EDHOC-Exporter (see Section 4.3). | |||
o transcript_hash is a bstr set to one of the transcript hashes | * transcript_hash is a bstr set to one of the transcript hashes | |||
TH_2, TH_3, or TH_4 as defined in Sections 5.3.1, 5.4.1, and 4.1. | TH_2, TH_3, or TH_4 as defined in Sections 5.3.1, 5.4.1, and 4.3. | |||
o label is a tstr set to the name of the derived key or IV, i.e. | * label is a tstr set to the name of the derived key, IV or MAC; | |||
"K_2m", "IV_2m", "KEYSTREAM_2", "K_3m", "IV_3m", "K_3ae", or | i.e., "KEYSTREAM_2", "MAC_2", "K_3ae", "IV_3ae", or "MAC_3". | |||
"IV_3ae". | ||||
o length is the length of output keying material (OKM) in bytes | * context is a CBOR sequence, i.e., zero or more encoded CBOR data | |||
items | ||||
If the EDHOC hash algorithm is SHA-2, then Expand( PRK, info, length | * length is the length of output keying material (OKM) in bytes | |||
) = HKDF-Expand( PRK, info, length ) [RFC5869]. If the EDHOC hash | ||||
algorithm is SHAKE128, then Expand( PRK, info, length ) = KMAC128( | ||||
PRK, info, L, "" ). If the EDHOC hash algorithm is SHAKE256, then | ||||
Expand( PRK, info, length ) = KMAC256( PRK, info, L, "" ). | ||||
KEYSTREAM_2 are derived using the transcript hash TH_2 and the | The definition of Expand depends on the EDHOC hash algorithm of the | |||
pseudorandom key PRK_2e. K_2m and IV_2m are derived using the | selected cipher suite: | |||
transcript hash TH_2 and the pseudorandom key PRK_3e2m. K_3ae and | ||||
IV_3ae are derived using the transcript hash TH_3 and the | ||||
pseudorandom key PRK_3e2m. K_3m and IV_3m are derived using the | ||||
transcript hash TH_3 and the pseudorandom key PRK_4x3m. IVs are only | ||||
used if the EDHOC AEAD algorithm uses IVs. | ||||
4.1. EDHOC-Exporter Interface | * if the EDHOC hash algorithm is SHA-2, then Expand( PRK, info, | |||
length ) = HKDF-Expand( PRK, info, length ) [RFC5869] | ||||
* if the EDHOC hash algorithm is SHAKE128, then Expand( PRK, info, | ||||
length ) = KMAC128( PRK, info, L, "" ) | ||||
* if the EDHOC hash algorithm is SHAKE256, then Expand( PRK, info, | ||||
length ) = KMAC256( PRK, info, L, "" ) | ||||
where L = 8*length, the output length in bits. | ||||
The keys, IVs and MACs are derived as follows: | ||||
* KEYSTREAM_2 is derived using the transcript hash TH_2 and the | ||||
pseudorandom key PRK_2e. | ||||
* MAC_2 is derived using the transcript hash TH_2 and the | ||||
pseudorandom key PRK_3e2m. | ||||
* K_3ae and IV_3ae are derived using the transcript hash TH_3 and | ||||
the pseudorandom key PRK_3e2m. IVs are only used if the EDHOC | ||||
AEAD algorithm uses IVs. | ||||
* MAC_3 is derived using the transcript hash TH_3 and the | ||||
pseudorandom key PRK_4x3m. | ||||
KEYSTREAM_2, K_3ae, and IV_3ae do not use a context. MAC_2 and MAC_3 | ||||
use context as defined in Section 5.3.2 and Section 5.4.2, | ||||
respectively. | ||||
4.3. EDHOC-Exporter | ||||
Application keys and other application specific data can be derived | Application keys and other application specific data can be derived | |||
using the EDHOC-Exporter interface defined as: | using the EDHOC-Exporter interface defined as: | |||
EDHOC-Exporter(label, context, length) | EDHOC-Exporter(label, context, length) | |||
= EDHOC-KDF(PRK_4x3m, TH_4, label_context, length) | = EDHOC-KDF(PRK_4x3m, TH_4, label, context, length) | |||
label_context is a CBOR sequence: | ||||
label_context = ( | ||||
label : tstr, | ||||
context : bstr, | ||||
) | ||||
where label is a registered tstr from the EDHOC Exporter Label | where label is a registered tstr from the EDHOC Exporter Label | |||
registry (Section 8.1), context is a bstr defined by the application, | registry (Section 8.1), context is a CBOR sequence defined by the | |||
and length is a uint defined by the application. The (label, | application, and length is a uint defined by the application. The | |||
context) pair must be unique, i.e. a (label, context) MUST NOT be | (label, context) pair must be unique, i.e., a (label, context) MUST | |||
used for two different purposes. However an application can re- | NOT be used for two different purposes. However an application can | |||
derive the same key several times as long as it is done in a secure | re-derive the same key several times as long as it is done in a | |||
way. For example, in most encryption algorithms the same (key, | secure way. For example, in most encryption algorithms the same | |||
nonce) pair must not be reused. | (key, nonce) pair must not be reused. The context can for example be | |||
the empty (zero-length) sequence or a single CBOR byte string. | ||||
The transcript hash TH_4 is a CBOR encoded bstr and the input to the | The transcript hash TH_4 is a CBOR encoded bstr and the input to the | |||
hash function is a CBOR Sequence. | hash function is a CBOR Sequence. | |||
TH_4 = H( TH_3, CIPHERTEXT_3 ) | TH_4 = H( TH_3, CIPHERTEXT_3 ) | |||
where H() is the hash function in the selected cipher suite. | where H() is the hash function in the selected cipher suite. | |||
Examples of use of the EDHOC-Exporter are given in Section 5.5.2 and | Examples of use of the EDHOC-Exporter are given in Section 5.5.2 and | |||
Appendix A. | Appendix A. | |||
4.4. EDHOC-KeyUpdate | ||||
To provide forward secrecy in an even more efficient way than re- | To provide forward secrecy in an even more efficient way than re- | |||
running EDHOC, EDHOC provides the function EDHOC-KeyUpdate. When | running EDHOC, EDHOC provides the function EDHOC-KeyUpdate. When | |||
EDHOC-KeyUpdate is called the old PRK_4x3m is deleted and the new | EDHOC-KeyUpdate is called the old PRK_4x3m is deleted and the new | |||
PRK_4x3m is calculated as a "hash" of the old key using the Extract | PRK_4x3m is calculated as a "hash" of the old key using the Extract | |||
function as illustrated by the following pseudocode: | function as illustrated by the following pseudocode: | |||
EDHOC-KeyUpdate( nonce ): | EDHOC-KeyUpdate( nonce ): | |||
PRK_4x3m = Extract( nonce, PRK_4x3m ) | PRK_4x3m = Extract( nonce, PRK_4x3m ) | |||
The EDHOC-KeyUpdate takes a nonce as input to guarantee that there | ||||
are no short cycles. The Initiator and the Responder need to agree | ||||
on the nonce, which can e.g., be a counter or a random number. While | ||||
the KeyUpdate method provides forward secrecy it does not give as | ||||
strong security properties as re-running EDHOC, see Section 7. | ||||
5. Message Formatting and Processing | 5. Message Formatting and Processing | |||
This section specifies formatting of the messages and processing | This section specifies formatting of the messages and processing | |||
steps. Error messages are specified in Section 6. | steps. Error messages are specified in Section 6. | |||
An EDHOC message is encoded as a sequence of CBOR data (CBOR | An EDHOC message is encoded as a sequence of CBOR data (CBOR | |||
Sequence, [RFC8742]). Additional optimizations are made to reduce | Sequence, [RFC8742]). Additional optimizations are made to reduce | |||
message overhead. | message overhead. | |||
While EDHOC uses the COSE_Key, COSE_Sign1, and COSE_Encrypt0 | While EDHOC uses the COSE_Key, COSE_Sign1, and COSE_Encrypt0 | |||
structures, only a subset of the parameters is included in the EDHOC | structures, only a subset of the parameters is included in the EDHOC | |||
messages. The unprotected COSE header in COSE_Sign1, and | messages, see Appendix C.3. The unprotected COSE header in | |||
COSE_Encrypt0 (not included in the EDHOC message) MAY contain | COSE_Sign1, and COSE_Encrypt0 (not included in the EDHOC message) MAY | |||
parameters (e.g. 'alg'). | contain parameters (e.g., 'alg'). | |||
5.1. Message Processing Outline | 5.1. Message Processing Outline | |||
This section outlines the message processing of EDHOC. | This section outlines the message processing of EDHOC. | |||
For each session, the endpoints are assumed to keep an associated | For each session, the endpoints are assumed to keep an associated | |||
protocol state containing identifiers, keys, etc. used for subsequent | protocol state containing identifiers, keys, etc. used for subsequent | |||
processing of protocol related data. The protocol state is assumed | processing of protocol related data. The protocol state is assumed | |||
to be associated to an applicability statement (Section 3.9) which | to be associated to an applicability statement (Section 3.9) which | |||
provides the context for how messages are transported, identified and | provides the context for how messages are transported, identified, | |||
processed. | and processed. | |||
EDHOC messages SHALL be processed according to the current protocol | EDHOC messages SHALL be processed according to the current protocol | |||
state. The following steps are expected to be performed at reception | state. The following steps are expected to be performed at reception | |||
of an EDHOC message: | of an EDHOC message: | |||
1. Detect that an EDHOC message has been received, for example by | 1. Detect that an EDHOC message has been received, for example by | |||
means of port number, URI, or media type (Section 3.9). | means of port number, URI, or media type (Section 3.9). | |||
2. Retrieve the protocol state according to the message correlation | 2. Retrieve the protocol state according to the message correlation | |||
provided by the transport, see Section 3.4. If there is no | provided by the transport, see Section 3.4. If there is no | |||
protocol state, in the case of message_1, a new protocol state is | protocol state, in the case of message_1, a new protocol state is | |||
created. The Responder endpoint needs to make use of available | created. The Responder endpoint needs to make use of available | |||
Denial-of-Service mitigation (Section 7.5). | Denial-of-Service mitigation (Section 7.5). | |||
3. If the message received is an error message then process | 3. If the message received is an error message, then process | |||
according to Section 6, else process as the expected next message | according to Section 6, else process as the expected next message | |||
according to the protocol state. | according to the protocol state. | |||
If the processing fails, then the protocol is discontinued, an error | If the processing fails for some reason then, typically, an error | |||
message sent, and the protocol state erased. Further details are | message is sent, the protocol is discontinued, and the protocol state | |||
provided in the following subsections. | erased. Further details are provided in the following subsections | |||
and in Section 6. | ||||
Different instances of the same message MUST NOT be processed in one | Different instances of the same message MUST NOT be processed in one | |||
session. Note that processing will fail if the same message appears | session. Note that processing will fail if the same message appears | |||
a second time for EDHOC processing because the state of the protocol | a second time for EDHOC processing because the state of the protocol | |||
has moved on and now expects something else. This assumes that | has moved on and now expects something else. This assumes that | |||
message duplication due to re-transmissions is handled by the | message duplication due to re-transmissions is handled by the | |||
transport protocol, see Section 3.4. The case when the transport | transport protocol, see Section 3.4. The case when the transport | |||
does not support message deduplication is addressed in Appendix F. | does not support message deduplication is addressed in Appendix F. | |||
5.2. EDHOC Message 1 | 5.2. EDHOC Message 1 | |||
skipping to change at page 25, line 29 ¶ | skipping to change at page 28, line 43 ¶ | |||
5.2.1. Formatting of Message 1 | 5.2.1. Formatting of Message 1 | |||
message_1 SHALL be a CBOR Sequence (see Appendix C.1) as defined | message_1 SHALL be a CBOR Sequence (see Appendix C.1) as defined | |||
below | below | |||
message_1 = ( | message_1 = ( | |||
METHOD : int, | METHOD : int, | |||
SUITES_I : [ selected : suite, supported : 2* suite ] / suite, | SUITES_I : [ selected : suite, supported : 2* suite ] / suite, | |||
G_X : bstr, | G_X : bstr, | |||
C_I : bstr / int, | C_I : bstr / int, | |||
? EAD ; EAD_1 | ? EAD_1 : ead, | |||
) | ) | |||
suite = int | suite = int | |||
where: | where: | |||
o METHOD = 0, 1, 2, or 3 (see Figure 4). | * METHOD = 0, 1, 2, or 3 (see Figure 4). | |||
o SUITES_I - cipher suites which the Initiator supports in order of | * SUITES_I - cipher suites which the Initiator supports in order of | |||
(decreasing) preference. The list of supported cipher suites can | (decreasing) preference. The list of supported cipher suites can | |||
be truncated at the end, as is detailed in the processing steps | be truncated at the end, as is detailed in the processing steps | |||
below and Section 6.3. One of the supported cipher suites is | below and Section 6.3. One of the supported cipher suites is | |||
selected. The selected suite is the first suite in the SUITES_I | selected. The selected suite is the first suite in the SUITES_I | |||
CBOR array. If a single supported cipher suite is conveyed then | CBOR array. If a single supported cipher suite is conveyed, then | |||
that cipher suite is selected and SUITES_I is encoded as an int | that cipher suite is selected and SUITES_I is encoded as an int | |||
instead of an array. | instead of an array. | |||
o G_X - the ephemeral public key of the Initiator | * G_X - the ephemeral public key of the Initiator | |||
o C_I - variable length connection identifier | * C_I - variable length connection identifier | |||
o EAD_1 - unprotected external authorization data, see Section 3.8. | * EAD_1 - unprotected external authorization data, see Section 3.8. | |||
5.2.2. Initiator Processing of Message 1 | 5.2.2. Initiator Processing of Message 1 | |||
The Initiator SHALL compose message_1 as follows: | The Initiator SHALL compose message_1 as follows: | |||
o The supported cipher suites and the order of preference MUST NOT | * The supported cipher suites and the order of preference MUST NOT | |||
be changed based on previous error messages. However, the list | be changed based on previous error messages. However, the list | |||
SUITES_I sent to the Responder MAY be truncated such that cipher | SUITES_I sent to the Responder MAY be truncated such that cipher | |||
suites which are the least preferred are omitted. The amount of | suites which are the least preferred are omitted. The amount of | |||
truncation MAY be changed between sessions, e.g. based on previous | truncation MAY be changed between sessions, e.g., based on | |||
error messages (see next bullet), but all cipher suites which are | previous error messages (see next bullet), but all cipher suites | |||
more preferred than the least preferred cipher suite in the list | which are more preferred than the least preferred cipher suite in | |||
MUST be included in the list. | the list MUST be included in the list. | |||
o The Initiator MUST select its most preferred cipher suite, | * The Initiator MUST select its most preferred cipher suite, | |||
conditioned on what it can assume to be supported by the | conditioned on what it can assume to be supported by the | |||
Responder. If the Initiator previously received from the | Responder. If the Initiator previously received from the | |||
Responder an error message with error code 2 (see Section 6.3) | Responder an error message with error code 2 (see Section 6.3) | |||
indicating cipher suites supported by the Responder which also are | indicating cipher suites supported by the Responder which also are | |||
supported by the Initiator, then the Initiator SHOULD select the | supported by the Initiator, then the Initiator SHOULD select the | |||
most preferred cipher suite of those (note that error messages are | most preferred cipher suite of those (note that error messages are | |||
not authenticated and may be forged). | not authenticated and may be forged). | |||
o Generate an ephemeral ECDH key pair using the curve in the | * Generate an ephemeral ECDH key pair using the curve in the | |||
selected cipher suite and format it as a COSE_Key. Let G_X be the | selected cipher suite and format it as a COSE_Key. Let G_X be the | |||
'x' parameter of the COSE_Key. | 'x' parameter of the COSE_Key. | |||
o Choose a connection identifier C_I and store it for the length of | * Choose a connection identifier C_I and store it for the length of | |||
the protocol. | the protocol. | |||
o Encode message_1 as a sequence of CBOR encoded data items as | * Encode message_1 as a sequence of CBOR encoded data items as | |||
specified in Section 5.2.1 | specified in Section 5.2.1 | |||
5.2.3. Responder Processing of Message 1 | 5.2.3. Responder Processing of Message 1 | |||
The Responder SHALL process message_1 as follows: | The Responder SHALL process message_1 as follows: | |||
o Decode message_1 (see Appendix C.1). | * Decode message_1 (see Appendix C.1). | |||
o Verify that the selected cipher suite is supported and that no | * Verify that the selected cipher suite is supported and that no | |||
prior cipher suite in SUITES_I is supported. | prior cipher suite in SUITES_I is supported. | |||
o Pass EAD_1 to the security application. | * Pass EAD_1 to the security application. | |||
If any processing step fails, the Responder SHOULD send an EDHOC | If any processing step fails, the Responder SHOULD send an EDHOC | |||
error message back, formatted as defined in Section 6, and the | error message back, formatted as defined in Section 6, and the | |||
session MUST be discontinued. Sending error messages is essential | session MUST be discontinued. Sending error messages is essential | |||
for debugging but MAY e.g. be skipped due to denial of service | for debugging but MAY e.g., be skipped due to denial-of-service | |||
reasons, see Section 7. | reasons, see Section 7. | |||
5.3. EDHOC Message 2 | 5.3. EDHOC Message 2 | |||
5.3.1. Formatting of Message 2 | 5.3.1. Formatting of Message 2 | |||
message_2 and data_2 SHALL be CBOR Sequences (see Appendix C.1) as | message_2 SHALL be a CBOR Sequence (see Appendix C.1) as defined | |||
defined below | below | |||
message_2 = ( | message_2 = ( | |||
data_2, | G_Y_CIPHERTEXT_2 : bstr, | |||
CIPHERTEXT_2 : bstr, | ||||
) | ||||
data_2 = ( | ||||
G_Y : bstr, | ||||
C_R : bstr / int, | C_R : bstr / int, | |||
) | ) | |||
where: | where: | |||
o G_Y - the ephemeral public key of the Responder | * G_Y_CIPHERTEXT_2 - the concatenation of G_Y, the ephemeral public | |||
key of the Responder, and CIPHERTEXT_2 | ||||
o C_R - variable length connection identifier | * C_R - variable length connection identifier | |||
5.3.2. Responder Processing of Message 2 | 5.3.2. Responder Processing of Message 2 | |||
The Responder SHALL compose message_2 as follows: | The Responder SHALL compose message_2 as follows: | |||
o Generate an ephemeral ECDH key pair using the curve in the | * Generate an ephemeral ECDH key pair using the curve in the | |||
selected cipher suite and format it as a COSE_Key. Let G_Y be the | selected cipher suite and format it as a COSE_Key. Let G_Y be the | |||
'x' parameter of the COSE_Key. | 'x' parameter of the COSE_Key. | |||
o Choose a connection identifier C_R and store it for the length of | * Choose a connection identifier C_R and store it for the length of | |||
the protocol. | the protocol. | |||
o Compute the transcript hash TH_2 = H( H(message_1), data_2 ) where | * Compute the transcript hash TH_2 = H( H(message_1), G_Y, C_R ) | |||
H() is the hash function in the selected cipher suite. The | where H() is the hash function in the selected cipher suite. The | |||
transcript hash TH_2 is a CBOR encoded bstr and the input to the | transcript hash TH_2 is a CBOR encoded bstr and the input to the | |||
hash function is a CBOR Sequence. Note that H(message_1) can be | hash function is a CBOR Sequence. Note that H(message_1) can be | |||
computed and cached already in the processing of message_1. | computed and cached already in the processing of message_1. | |||
o Compute an inner COSE_Encrypt0 as defined in Section 5.3 of | * Compute MAC_2 = EDHOC-KDF( PRK_3e2m, TH_2, "MAC_2", ( ID_CRED_R, | |||
[I-D.ietf-cose-rfc8152bis-struct], with the EDHOC AEAD algorithm | CRED_R, ? EAD_2 ), mac_length ). If the Responder authenticates | |||
in the selected cipher suite, K_2m, IV_2m, and the following | with a static Diffie-Hellman key (method equals 1 or 3), then | |||
parameters: | mac_length is the EDHOC MAC length given by the cipher suite. If | |||
the Responder authenticates with a signature key (method equals 0 | ||||
* protected = << ID_CRED_R >> | or 2), then mac_length is equal to the output size of the EDHOC | |||
+ ID_CRED_R - identifier to facilitate retrieval of CRED_R, | hash algorithm given by the cipher suite. | |||
see Section 3.5.4 | ||||
* external_aad = << TH_2, CRED_R, ? EAD_2 >> | ||||
+ CRED_R - bstr containing the credential of the Responder, | ||||
see Section 3.5.4 | ||||
+ EAD_2 = unprotected external authorization data, see | ||||
Section 3.8 | ||||
* plaintext = h'' | ||||
COSE constructs the input to the AEAD [RFC5116] as follows: | ||||
* Key K = EDHOC-KDF( PRK_3e2m, TH_2, "K_2m", length ) | ||||
* Nonce N = EDHOC-KDF( PRK_3e2m, TH_2, "IV_2m", length ) | ||||
* Plaintext P = 0x (the empty string) | ||||
* Associated data A = | - ID_CRED_R - identifier to facilitate retrieval of CRED_R, see | |||
Section 3.5.4 | ||||
[ "Encrypt0", << ID_CRED_R >>, << TH_2, CRED_R, ? EAD_2 >> ] | - CRED_R - CBOR item containing the credential of the Responder, | |||
see Section 3.5.4 | ||||
MAC_2 is the 'ciphertext' of the inner COSE_Encrypt0. | - EAD_2 = unprotected external authorization data, see | |||
Section 3.8 | ||||
o If the Responder authenticates with a static Diffie-Hellman key | * If the Responder authenticates with a static Diffie-Hellman key | |||
(method equals 1 or 3), then Signature_or_MAC_2 is MAC_2. If the | (method equals 1 or 3), then Signature_or_MAC_2 is MAC_2. If the | |||
Responder authenticates with a signature key (method equals 0 or | Responder authenticates with a signature key (method equals 0 or | |||
2), then Signature_or_MAC_2 is the 'signature' of a COSE_Sign1 | 2), then Signature_or_MAC_2 is the 'signature' of a COSE_Sign1 | |||
object as defined in Section 4.4 of | object as defined in Section 4.4 of | |||
[I-D.ietf-cose-rfc8152bis-struct] using the signature algorithm in | [I-D.ietf-cose-rfc8152bis-struct] using the signature algorithm in | |||
the selected cipher suite, the private authentication key of the | the selected cipher suite, the private authentication key of the | |||
Responder, and the following parameters: | Responder, and the following parameters: | |||
* protected = << ID_CRED_R >> | - protected = << ID_CRED_R >> | |||
* external_aad = << TH_2, CRED_R, ? EAD_2 >> | - external_aad = << TH_2, CRED_R, ? EAD_2 >> | |||
* payload = MAC_2 | - payload = MAC_2 | |||
COSE constructs the input to the Signature Algorithm as: | COSE constructs the input to the Signature Algorithm as: | |||
* The key is the private authentication key of the Responder. | - The key is the private authentication key of the Responder. | |||
* The message M to be signed = | - The message M to be signed = | |||
[ "Signature1", << ID_CRED_R >>, << TH_2, CRED_R, ? EAD_2 >>, | [ "Signature1", << ID_CRED_R >>, << TH_2, CRED_R, ? EAD_2 >>, | |||
MAC_2 ] | MAC_2 ] | |||
o CIPHERTEXT_2 is encrypted by using the Expand function as a binary | * CIPHERTEXT_2 is encrypted by using the Expand function as a binary | |||
additive stream cipher. | additive stream cipher. | |||
* plaintext = ( ID_CRED_R / bstr / int, Signature_or_MAC_2, ? | - plaintext = ( ID_CRED_R / bstr / int, Signature_or_MAC_2, ? | |||
EAD_2 ) | EAD_2 ) | |||
+ Note that if ID_CRED_R contains a single 'kid2' parameter, | o Note that if ID_CRED_R contains a single 'kid' parameter, | |||
i.e., ID_CRED_R = { 4 : kid_R }, only the byte string or | i.e., ID_CRED_R = { 4 : kid_R }, only the byte string or | |||
integer kid_R is conveyed in the plaintext encoded as a bstr | integer kid_R is conveyed in the plaintext encoded as a bstr | |||
/ int. | or int. | |||
* CIPHERTEXT_2 = plaintext XOR KEYSTREAM_2 | - CIPHERTEXT_2 = plaintext XOR KEYSTREAM_2 | |||
o Encode message_2 as a sequence of CBOR encoded data items as | * Encode message_2 as a sequence of CBOR encoded data items as | |||
specified in Section 5.3.1. | specified in Section 5.3.1. | |||
5.3.3. Initiator Processing of Message 2 | 5.3.3. Initiator Processing of Message 2 | |||
The Initiator SHALL process message_2 as follows: | The Initiator SHALL process message_2 as follows: | |||
o Decode message_2 (see Appendix C.1). | * Decode message_2 (see Appendix C.1). | |||
o Retrieve the protocol state using the message correlation provided | * Retrieve the protocol state using the message correlation provided | |||
by the transport (e.g., the CoAP Token and the 5-tuple as a | by the transport (e.g., the CoAP Token and the 5-tuple as a | |||
client, or the prepended C_I as a server). | client, or the prepended C_I as a server). | |||
o Decrypt CIPHERTEXT_2, see Section 5.3.2. | * Decrypt CIPHERTEXT_2, see Section 5.3.2. | |||
o Pass EAD_2 to the security application. | * Pass EAD_2 to the security application. | |||
o Verify that the identity of the Responder is an allowed identity | * Verify that the identity of the Responder is an allowed identity | |||
for this connection, see Section 3.5. | for this connection, see Section 3.5. | |||
o Verify Signature_or_MAC_2 using the algorithm in the selected | * Verify Signature_or_MAC_2 using the algorithm in the selected | |||
cipher suite. The verification process depends on the method, see | cipher suite. The verification process depends on the method, see | |||
Section 5.3.2. | Section 5.3.2. | |||
If any processing step fails, the Initiator SHOULD send an EDHOC | If any processing step fails, the Initiator SHOULD send an EDHOC | |||
error message back, formatted as defined in Section 6. Sending error | error message back, formatted as defined in Section 6. Sending error | |||
messages is essential for debugging but MAY e.g.be skipped if a | messages is essential for debugging but MAY e.g., be skipped if a | |||
session cannot be found or due to denial of service reasons, see | session cannot be found or due to denial-of-service reasons, see | |||
Section 7. If an error message is sent, the session MUST be | Section 7. If an error message is sent, the session MUST be | |||
discontinued. | discontinued. | |||
5.4. EDHOC Message 3 | 5.4. EDHOC Message 3 | |||
5.4.1. Formatting of Message 3 | 5.4.1. Formatting of Message 3 | |||
message_3 SHALL be a CBOR Sequence (see Appendix C.1) as defined | message_3 SHALL be a CBOR Sequence (see Appendix C.1) as defined | |||
below | below | |||
message_3 = ( | message_3 = ( | |||
CIPHERTEXT_3 : bstr, | CIPHERTEXT_3 : bstr, | |||
) | ) | |||
5.4.2. Initiator Processing of Message 3 | 5.4.2. Initiator Processing of Message 3 | |||
skipping to change at page 30, line 20 ¶ | skipping to change at page 33, line 17 ¶ | |||
below | below | |||
message_3 = ( | message_3 = ( | |||
CIPHERTEXT_3 : bstr, | CIPHERTEXT_3 : bstr, | |||
) | ) | |||
5.4.2. Initiator Processing of Message 3 | 5.4.2. Initiator Processing of Message 3 | |||
The Initiator SHALL compose message_3 as follows: | The Initiator SHALL compose message_3 as follows: | |||
o Compute the transcript hash TH_3 = H(TH_2, CIPHERTEXT_2) where H() | * Compute the transcript hash TH_3 = H(TH_2, CIPHERTEXT_2) where H() | |||
is the hash function in the selected cipher suite. The transcript | is the hash function in the selected cipher suite. The transcript | |||
hash TH_3 is a CBOR encoded bstr and the input to the hash | hash TH_3 is a CBOR encoded bstr and the input to the hash | |||
function is a CBOR Sequence. Note that H(TH_2, CIPHERTEXT_2) can | function is a CBOR Sequence. Note that H(TH_2, CIPHERTEXT_2) can | |||
be computed and cached already in the processing of message_2. | be computed and cached already in the processing of message_2. | |||
o Compute an inner COSE_Encrypt0 as defined in Section 5.3 of | * Compute MAC_3 = EDHOC-KDF( PRK_4x3m, TH_3, "MAC_3", ( ID_CRED_I, | |||
[I-D.ietf-cose-rfc8152bis-struct], with the EDHOC AEAD algorithm | CRED_I, ? EAD_3 ), mac_length ). If the Initiator authenticates | |||
in the selected cipher suite, K_3m, IV_3m, and the following | with a static Diffie-Hellman key (method equals 2 or 3), then | |||
parameters: | mac_length is the EDHOC MAC length given by the cipher suite. If | |||
the Initiator authenticates with a signature key (method equals 0 | ||||
* protected = << ID_CRED_I >> | or 1), then mac_length is equal to the output size of the EDHOC | |||
hash algorithm given by the cipher suite. | ||||
+ ID_CRED_I - identifier to facilitate retrieval of CRED_I, | ||||
see Section 3.5.4 | ||||
* external_aad = << TH_3, CRED_I, ? EAD_3 >> | ||||
+ CRED_I - bstr containing the credential of the Initiator, | ||||
see Section 3.5.4. | ||||
+ EAD_3 = protected external authorization data, see | ||||
Section 3.8 | ||||
* plaintext = h'' | ||||
COSE constructs the input to the AEAD [RFC5116] as follows: | ||||
* Key K = EDHOC-KDF( PRK_4x3m, TH_3, "K_3m", length ) | ||||
* Nonce N = EDHOC-KDF( PRK_4x3m, TH_3, "IV_3m", length ) | ||||
* Plaintext P = 0x (the empty string) | - ID_CRED_I - identifier to facilitate retrieval of CRED_I, see | |||
* Associated data A = | Section 3.5.4 | |||
[ "Encrypt0", << ID_CRED_I >>, << TH_3, CRED_I, ? EAD_3 >> ] | - CRED_I - CBOR item containing the credential of the Initiator, | |||
see Section 3.5.4 | ||||
MAC_3 is the 'ciphertext' of the inner COSE_Encrypt0. | - EAD_3 = protected external authorization data, see Section 3.8 | |||
o If the Initiator authenticates with a static Diffie-Hellman key | * If the Initiator authenticates with a static Diffie-Hellman key | |||
(method equals 2 or 3), then Signature_or_MAC_3 is MAC_3. If the | (method equals 2 or 3), then Signature_or_MAC_3 is MAC_3. If the | |||
Initiator authenticates with a signature key (method equals 0 or | Initiator authenticates with a signature key (method equals 0 or | |||
1), then Signature_or_MAC_3 is the 'signature' of a COSE_Sign1 | 1), then Signature_or_MAC_3 is the 'signature' of a COSE_Sign1 | |||
object as defined in Section 4.4 of | object as defined in Section 4.4 of | |||
[I-D.ietf-cose-rfc8152bis-struct] using the signature algorithm in | [I-D.ietf-cose-rfc8152bis-struct] using the signature algorithm in | |||
the selected cipher suite, the private authentication key of the | the selected cipher suite, the private authentication key of the | |||
Initiator, and the following parameters: | Initiator, and the following parameters: | |||
* protected = << ID_CRED_I >> | - protected = << ID_CRED_I >> | |||
* external_aad = << TH_3, CRED_I, ? EAD_3 >> | ||||
* payload = MAC_3 | - external_aad = << TH_3, CRED_I, ? EAD_3 >> | |||
- payload = MAC_3 | ||||
COSE constructs the input to the Signature Algorithm as: | COSE constructs the input to the Signature Algorithm as: | |||
* The key is the private authentication key of the Initiator. | - The key is the private authentication key of the Initiator. | |||
* The message M to be signed = | - The message M to be signed = | |||
[ "Signature1", << ID_CRED_I >>, << TH_3, CRED_I, ? EAD_3 >>, | [ "Signature1", << ID_CRED_I >>, << TH_3, CRED_I, ? EAD_3 >>, | |||
MAC_3 ] | MAC_3 ] | |||
o Compute an outer COSE_Encrypt0 as defined in Section 5.3 of | * Compute an outer COSE_Encrypt0 as defined in Section 5.3 of | |||
[I-D.ietf-cose-rfc8152bis-struct], with the EDHOC AEAD algorithm | [I-D.ietf-cose-rfc8152bis-struct], with the EDHOC AEAD algorithm | |||
in the selected cipher suite, K_3ae, IV_3ae, and the following | in the selected cipher suite, K_3ae, IV_3ae, and the following | |||
parameters. The protected header SHALL be empty. | parameters. The protected header SHALL be empty. | |||
* external_aad = TH_3 | - external_aad = TH_3 | |||
* plaintext = ( ID_CRED_I / bstr / int, Signature_or_MAC_3, ? | - plaintext = ( ID_CRED_I / bstr / int, Signature_or_MAC_3, ? | |||
EAD_3 ) | EAD_3 ) | |||
+ Note that if ID_CRED_I contains a single 'kid2' parameter, | o Note that if ID_CRED_I contains a single 'kid' parameter, | |||
i.e., ID_CRED_I = { 4 : kid_I }, only the byte string or | i.e., ID_CRED_I = { 4 : kid_I }, only the byte string or | |||
integer kid_I is conveyed in the plaintext encoded as a bstr | integer kid_I is conveyed in the plaintext encoded as a bstr | |||
or int. | or int. | |||
COSE constructs the input to the AEAD [RFC5116] as follows: | COSE constructs the input to the AEAD [RFC5116] as follows: | |||
* Key K = EDHOC-KDF( PRK_3e2m, TH_3, "K_3ae", length ) | - Key K = EDHOC-KDF( PRK_3e2m, TH_3, "K_3ae", length ) | |||
* Nonce N = EDHOC-KDF( PRK_3e2m, TH_3, "IV_3ae", length ) | ||||
* Plaintext P = ( ID_CRED_I / bstr / int, Signature_or_MAC_3, ? | - Nonce N = EDHOC-KDF( PRK_3e2m, TH_3, "IV_3ae", length ) | |||
- Plaintext P = ( ID_CRED_I / bstr / int, Signature_or_MAC_3, ? | ||||
EAD_3 ) | EAD_3 ) | |||
* Associated data A = [ "Encrypt0", h'', TH_3 ] | - Associated data A = [ "Encrypt0", h'', TH_3 ] | |||
CIPHERTEXT_3 is the 'ciphertext' of the outer COSE_Encrypt0. | CIPHERTEXT_3 is the 'ciphertext' of the outer COSE_Encrypt0. | |||
o Encode message_3 as a sequence of CBOR encoded data items as | * Encode message_3 as a sequence of CBOR encoded data items as | |||
specified in Section 5.4.1. | specified in Section 5.4.1. | |||
Pass the connection identifiers (C_I, C_R) and the application | Pass the connection identifiers (C_I, C_R) and the application | |||
algorithms in the selected cipher suite to the application. The | algorithms in the selected cipher suite to the application. The | |||
application can now derive application keys using the EDHOC-Exporter | application can now derive application keys using the EDHOC-Exporter | |||
interface. | interface, see Section 4.3. | |||
After sending message_3, the Initiator is assured that no other party | After sending message_3, the Initiator is assured that no other party | |||
than the Responder can compute the key PRK_4x3m (implicit key | than the Responder can compute the key PRK_4x3m (implicit key | |||
authentication). The Initiator can securely derive application keys | authentication). The Initiator can securely derive application keys | |||
and send protected application data. However, the Initiator does not | and send protected application data. However, the Initiator does not | |||
know that the Responder has actually computed the key PRK_4x3m and | know that the Responder has actually computed the key PRK_4x3m and | |||
therefore the Initiator SHOULD NOT permanently store the keying | therefore the Initiator SHOULD NOT permanently store the keying | |||
material PRK_4x3m and TH_4, or derived application keys, until the | material PRK_4x3m and TH_4, or derived application keys, until the | |||
Initiator is assured that the Responder has actually computed the key | Initiator is assured that the Responder has actually computed the key | |||
PRK_4x3m (explicit key confirmation). This is similar to waiting for | PRK_4x3m (explicit key confirmation). This is similar to waiting for | |||
acknowledgement (ACK) in a transport protocol. Explicit key | acknowledgement (ACK) in a transport protocol. Explicit key | |||
confirmation is e.g. assured when the Initiator has verified an | confirmation is e.g., assured when the Initiator has verified an | |||
OSCORE message or message_4 from the Responder. | OSCORE message or message_4 from the Responder. | |||
5.4.3. Responder Processing of Message 3 | 5.4.3. Responder Processing of Message 3 | |||
The Responder SHALL process message_3 as follows: | The Responder SHALL process message_3 as follows: | |||
o Decode message_3 (see Appendix C.1). | * Decode message_3 (see Appendix C.1). | |||
o Retrieve the protocol state using the message correlation provided | * Retrieve the protocol state using the message correlation provided | |||
by the transport (e.g., the CoAP Token and the 5-tuple as a | by the transport (e.g., the CoAP Token and the 5-tuple as a | |||
client, or the prepended C_R as a server). | client, or the prepended C_R as a server). | |||
o Decrypt and verify the outer COSE_Encrypt0 as defined in | * Decrypt and verify the outer COSE_Encrypt0 as defined in | |||
Section 5.3 of [I-D.ietf-cose-rfc8152bis-struct], with the EDHOC | Section 5.3 of [I-D.ietf-cose-rfc8152bis-struct], with the EDHOC | |||
AEAD algorithm in the selected cipher suite, K_3ae, and IV_3ae. | AEAD algorithm in the selected cipher suite, K_3ae, and IV_3ae. | |||
o Pass EAD_3 to the security application. | * Pass EAD_3 to the security application. | |||
o Verify that the identity of the Initiator is an allowed identity | * Verify that the identity of the Initiator is an allowed identity | |||
for this connection, see Section 3.5. | for this connection, see Section 3.5. | |||
o Verify Signature_or_MAC_3 using the algorithm in the selected | * Verify Signature_or_MAC_3 using the algorithm in the selected | |||
cipher suite. The verification process depends on the method, see | cipher suite. The verification process depends on the method, see | |||
Section 5.4.2. | Section 5.4.2. | |||
o Pass the connection identifiers (C_I, C_R), and the application | * Pass the connection identifiers (C_I, C_R), and the application | |||
algorithms in the selected cipher suite to the security | algorithms in the selected cipher suite to the security | |||
application. The application can now derive application keys | application. The application can now derive application keys | |||
using the EDHOC-Exporter interface. | using the EDHOC-Exporter interface. | |||
If any processing step fails, the Responder SHOULD send an EDHOC | If any processing step fails, the Responder SHOULD send an EDHOC | |||
error message back, formatted as defined in Section 6. Sending error | error message back, formatted as defined in Section 6. Sending error | |||
messages is essential for debugging but MAY e.g.be skipped if a | messages is essential for debugging but MAY e.g., be skipped if a | |||
session cannot be found or due to denial of service reasons, see | session cannot be found or due to denial-of-service reasons, see | |||
Section 7. If an error message is sent, the session MUST be | Section 7. If an error message is sent, the session MUST be | |||
discontinued. | discontinued. | |||
After verifying message_3, the Responder is assured that the | After verifying message_3, the Responder is assured that the | |||
Initiator has calculated the key PRK_4x3m (explicit key confirmation) | Initiator has calculated the key PRK_4x3m (explicit key confirmation) | |||
and that no other party than the Responder can compute the key. The | and that no other party than the Responder can compute the key. The | |||
Responder can securely send protected application data and store the | Responder can securely send protected application data and store the | |||
keying material PRK_4x3m and TH_4. | keying material PRK_4x3m and TH_4. | |||
5.5. EDHOC Message 4 | 5.5. EDHOC Message 4 | |||
skipping to change at page 34, line 9 ¶ | skipping to change at page 36, line 42 ¶ | |||
below | below | |||
message_4 = ( | message_4 = ( | |||
CIPHERTEXT_4 : bstr, | CIPHERTEXT_4 : bstr, | |||
) | ) | |||
5.5.2. Responder Processing of Message 4 | 5.5.2. Responder Processing of Message 4 | |||
The Responder SHALL compose message_4 as follows: | The Responder SHALL compose message_4 as follows: | |||
o Compute a COSE_Encrypt0 as defined in Section 5.3 of | * Compute a COSE_Encrypt0 as defined in Section 5.3 of | |||
[I-D.ietf-cose-rfc8152bis-struct], with the EDHOC AEAD algorithm | [I-D.ietf-cose-rfc8152bis-struct], with the EDHOC AEAD algorithm | |||
in the selected cipher suite, and the following parameters. The | in the selected cipher suite, and the following parameters. The | |||
protected header SHALL be empty. | protected header SHALL be empty. | |||
* protected = h'' | - protected = h'' | |||
* external_aad = TH_4 | ||||
* plaintext = ( ? EAD_4 ) | - external_aad = TH_4 | |||
- plaintext = ( ? EAD_4 ) | ||||
where EAD_4 is protected external authorization data, see | where EAD_4 is protected external authorization data, see | |||
Section 3.8. COSE constructs the input to the AEAD [RFC5116] as | Section 3.8. COSE constructs the input to the AEAD [RFC5116] as | |||
follows: | follows: | |||
* Key K = EDHOC-Exporter( "EDHOC_message_4_Key", h'', length ) | - Key K = EDHOC-Exporter( "EDHOC_message_4_Key", , length ) | |||
* Nonce N = EDHOC-Exporter( "EDHOC_message_4_Nonce", h'', length | - Nonce N = EDHOC-Exporter( "EDHOC_message_4_Nonce", , length ) | |||
) | ||||
* Plaintext P = ( ? EAD_4 ) | - Plaintext P = ( ? EAD_4 ) | |||
* Associated data A = [ "Encrypt0", h'', TH_4 ] | - Associated data A = [ "Encrypt0", h'', TH_4 ] | |||
CIPHERTEXT_4 is the 'ciphertext' of the COSE_Encrypt0. | CIPHERTEXT_4 is the ciphertext of the COSE_Encrypt0. | |||
o Encode message_4 as a sequence of CBOR encoded data items as | * Encode message_4 as a sequence of CBOR encoded data items as | |||
specified in Section 5.5.1. | specified in Section 5.5.1. | |||
5.5.3. Initiator Processing of Message 4 | 5.5.3. Initiator Processing of Message 4 | |||
The Initiator SHALL process message_4 as follows: | The Initiator SHALL process message_4 as follows: | |||
o Decode message_4 (see Appendix C.1). | * Decode message_4 (see Appendix C.1). | |||
o Retrieve the protocol state using the message correlation provided | * Retrieve the protocol state using the message correlation provided | |||
by the transport (e.g., the CoAP Token and the 5-tuple as a | by the transport (e.g., the CoAP Token and the 5-tuple as a | |||
client, or the prepended C_I as a server). | client, or the prepended C_I as a server). | |||
o Decrypt and verify the outer COSE_Encrypt0 as defined in | * Decrypt and verify the outer COSE_Encrypt0 as defined in | |||
Section 5.3 of [I-D.ietf-cose-rfc8152bis-struct], with the EDHOC | Section 5.3 of [I-D.ietf-cose-rfc8152bis-struct], with the EDHOC | |||
AEAD algorithm in the selected cipher suite, and the parameters | AEAD algorithm in the selected cipher suite, and the parameters | |||
defined in Section 5.5.2. | defined in Section 5.5.2. | |||
o Pass EAD_4 to the security application. | * Pass EAD_4 to the security application. | |||
If any verification step fails the Initiator MUST send an EDHOC error | If any processing step fails, the Responder SHOULD send an EDHOC | |||
message back, formatted as defined in Section 6, and the session MUST | error message back, formatted as defined in Section 6. Sending error | |||
be discontinued. | messages is essential for debugging but MAY e.g., be skipped if a | |||
session cannot be found or due to denial-of-service reasons, see | ||||
Section 7. If an error message is sent, the session MUST be | ||||
discontinued. | ||||
6. Error Handling | 6. Error Handling | |||
This section defines the format for error messages. | This section defines the format for error messages. | |||
An EDHOC error message can be sent by either endpoint as a reply to | An EDHOC error message can be sent by either endpoint as a reply to | |||
any non-error EDHOC message. How errors at the EDHOC layer are | any non-error EDHOC message. How errors at the EDHOC layer are | |||
transported depends on lower layers, which need to enable error | transported depends on lower layers, which need to enable error | |||
messages to be sent and processed as intended. | messages to be sent and processed as intended. | |||
skipping to change at page 35, line 32 ¶ | skipping to change at page 38, line 22 ¶ | |||
error message as an indication that the other party likely has | error message as an indication that the other party likely has | |||
discontinued the protocol. But as the error message is not | discontinued the protocol. But as the error message is not | |||
authenticated, a received error message might also have been sent by | authenticated, a received error message might also have been sent by | |||
an attacker and the receiver MAY therefore try to continue the | an attacker and the receiver MAY therefore try to continue the | |||
protocol. | protocol. | |||
error SHALL be a CBOR Sequence (see Appendix C.1) as defined below | error SHALL be a CBOR Sequence (see Appendix C.1) as defined below | |||
error = ( | error = ( | |||
ERR_CODE : int, | ERR_CODE : int, | |||
ERR_INFO : any | ERR_INFO : any, | |||
) | ) | |||
Figure 5: EDHOC Error Message | Figure 5: EDHOC Error Message | |||
where: | where: | |||
o ERR_CODE - error code encoded as an integer. The value 0 is used | * ERR_CODE - error code encoded as an integer. The value 0 is used | |||
for success, all other values (negative or positive) indicate | for success, all other values (negative or positive) indicate | |||
errors. | errors. | |||
o ERR_INFO - error information. Content and encoding depend on | * ERR_INFO - error information. Content and encoding depend on | |||
error code. | error code. | |||
The remainder of this section specifies the currently defined error | The remainder of this section specifies the currently defined error | |||
codes, see Figure 6. Error codes 1 and 2 MUST be supported. | codes, see Figure 6. Error codes 1 and 2 MUST be supported. | |||
Additional error codes and corresponding error information may be | Additional error codes and corresponding error information may be | |||
specified. | specified. | |||
+----------+---------------+----------------------------------------+ | +----------+---------------+----------------------------------------+ | |||
| ERR_CODE | ERR_INFO Type | Description | | | ERR_CODE | ERR_INFO Type | Description | | |||
+==========+===============+========================================+ | +==========+===============+========================================+ | |||
skipping to change at page 36, line 20 ¶ | skipping to change at page 39, line 8 ¶ | |||
| 1 | tstr | Unspecified | | | 1 | tstr | Unspecified | | |||
+----------+---------------+----------------------------------------+ | +----------+---------------+----------------------------------------+ | |||
| 2 | SUITES_R | Wrong selected cipher suite | | | 2 | SUITES_R | Wrong selected cipher suite | | |||
+----------+---------------+----------------------------------------+ | +----------+---------------+----------------------------------------+ | |||
Figure 6: Error Codes and Error Information | Figure 6: Error Codes and Error Information | |||
6.1. Success | 6.1. Success | |||
Error code 0 MAY be used internally in an application to indicate | Error code 0 MAY be used internally in an application to indicate | |||
success, e.g. in log files. ERR_INFO can contain any type of CBOR | success, e.g., in log files. ERR_INFO can contain any type of CBOR | |||
item. Error code 0 MUST NOT be used as part of the EDHOC message | item. Error code 0 MUST NOT be used as part of the EDHOC message | |||
exchange flow. | exchange flow. | |||
6.2. Unspecified | 6.2. Unspecified | |||
Error code 1 is used for errors that do not have a specific error | Error code 1 is used for errors that do not have a specific error | |||
code defined. ERR_INFO MUST be a text string containing a human- | code defined. ERR_INFO MUST be a text string containing a human- | |||
readable diagnostic message written in English. The diagnostic text | readable diagnostic message written in English. The diagnostic text | |||
message is mainly intended for software engineers that during | message is mainly intended for software engineers that during | |||
debugging need to interpret it in the context of the EDHOC | debugging need to interpret it in the context of the EDHOC | |||
skipping to change at page 37, line 43 ¶ | skipping to change at page 40, line 29 ¶ | |||
| message_1 | | | message_1 | | |||
| | | | | | |||
| DIAG_MSG, SUITES_R = 6 | | | DIAG_MSG, SUITES_R = 6 | | |||
|<------------------------------------------------------------------+ | |<------------------------------------------------------------------+ | |||
| error | | | error | | |||
| | | | | | |||
| METHOD, SUITES_I = [6, 5, 6], G_X, C_I, EAD_1 | | | METHOD, SUITES_I = [6, 5, 6], G_X, C_I, EAD_1 | | |||
+------------------------------------------------------------------>| | +------------------------------------------------------------------>| | |||
| message_1 | | | message_1 | | |||
Figure 7: Example of Responder supporting suite 6 but not suite 5. | Figure 7: Example of Responder supporting suite 6 but not suite 5. | |||
In the second example (Figure 8), the Responder supports cipher | In the second example (Figure 8), the Responder supports cipher | |||
suites 8 and 9 but not the more preferred (by the Initiator) cipher | suites 8 and 9 but not the more preferred (by the Initiator) cipher | |||
suites 5, 6 or 7. To illustrate the negotiation mechanics we let the | suites 5, 6 or 7. To illustrate the negotiation mechanics we let the | |||
Initiator first make a guess that the Responder supports suite 6 but | Initiator first make a guess that the Responder supports suite 6 but | |||
not suite 5. Since the Responder supports neither 5 nor 6, it | not suite 5. Since the Responder supports neither 5 nor 6, it | |||
responds with an error and SUITES_R, after which the Initiator | responds with an error and SUITES_R, after which the Initiator | |||
selects its most preferred supported suite. The order of cipher | selects its most preferred supported suite. The order of cipher | |||
suites in SUITES_R does not matter. (If the Responder had supported | suites in SUITES_R does not matter. (If the Responder had supported | |||
suite 5, it would include it in SUITES_R of the response, and it | suite 5, it would include it in SUITES_R of the response, and it | |||
skipping to change at page 38, line 21 ¶ | skipping to change at page 41, line 17 ¶ | |||
| message_1 | | | message_1 | | |||
| | | | | | |||
| DIAG_MSG, SUITES_R = [9, 8] | | | DIAG_MSG, SUITES_R = [9, 8] | | |||
|<------------------------------------------------------------------+ | |<------------------------------------------------------------------+ | |||
| error | | | error | | |||
| | | | | | |||
| METHOD, SUITES_I = [8, 5, 6, 7, 8], G_X, C_I, EAD_1 | | | METHOD, SUITES_I = [8, 5, 6, 7, 8], G_X, C_I, EAD_1 | | |||
+------------------------------------------------------------------>| | +------------------------------------------------------------------>| | |||
| message_1 | | | message_1 | | |||
Figure 8: Example of Responder supporting suites 8 and 9 but not 5, 6 | Figure 8: Example of Responder supporting suites 8 and 9 but not | |||
or 7. | 5, 6 or 7. | |||
Note that the Initiator's list of supported cipher suites and order | Note that the Initiator's list of supported cipher suites and order | |||
of preference is fixed (see Section 5.2.1 and Section 5.2.2). | of preference is fixed (see Section 5.2.1 and Section 5.2.2). | |||
Furthermore, the Responder shall only accept message_1 if the | Furthermore, the Responder shall only accept message_1 if the | |||
selected cipher suite is the first cipher suite in SUITES_I that the | selected cipher suite is the first cipher suite in SUITES_I that the | |||
Responder supports (see Section 5.2.3). Following this procedure | Responder supports (see Section 5.2.3). Following this procedure | |||
ensures that the selected cipher suite is the most preferred (by the | ensures that the selected cipher suite is the most preferred (by the | |||
Initiator) cipher suite supported by both parties. | Initiator) cipher suite supported by both parties. | |||
If the selected cipher suite is not the first cipher suite which the | If the selected cipher suite is not the first cipher suite which the | |||
Responder supports in SUITES_I received in message_1, then Responder | Responder supports in SUITES_I received in message_1, then Responder | |||
MUST discontinue the protocol, see Section 5.2.3. If SUITES_I in | MUST discontinue the protocol, see Section 5.2.3. If SUITES_I in | |||
message_1 is manipulated then the integrity verification of message_2 | message_1 is manipulated, then the integrity verification of | |||
containing the transcript hash TH_2 will fail and the Initiator will | message_2 containing the transcript hash TH_2 will fail and the | |||
discontinue the protocol. | Initiator will discontinue the protocol. | |||
7. Security Considerations | 7. Security Considerations | |||
7.1. Security Properties | 7.1. Security Properties | |||
EDHOC inherits its security properties from the theoretical SIGMA-I | EDHOC inherits its security properties from the theoretical SIGMA-I | |||
protocol [SIGMA]. Using the terminology from [SIGMA], EDHOC provides | protocol [SIGMA]. Using the terminology from [SIGMA], EDHOC provides | |||
perfect forward secrecy, mutual authentication with aliveness, | forward secrecy, mutual authentication with aliveness, consistency, | |||
consistency, and peer awareness. As described in [SIGMA], peer | and peer awareness. As described in [SIGMA], peer awareness is | |||
awareness is provided to the Responder, but not to the Initiator. | provided to the Responder, but not to the Initiator. | |||
EDHOC protects the credential identifier of the Initiator against | EDHOC protects the credential identifier of the Initiator against | |||
active attacks and the credential identifier of the Responder against | active attacks and the credential identifier of the Responder against | |||
passive attacks. The roles should be assigned to protect the most | passive attacks. The roles should be assigned to protect the most | |||
sensitive identity/identifier, typically that which is not possible | sensitive identity/identifier, typically that which is not possible | |||
to infer from routing information in the lower layers. | to infer from routing information in the lower layers. | |||
Compared to [SIGMA], EDHOC adds an explicit method type and expands | Compared to [SIGMA], EDHOC adds an explicit method type and expands | |||
the message authentication coverage to additional elements such as | the message authentication coverage to additional elements such as | |||
algorithms, external authorization data, and previous messages. This | algorithms, external authorization data, and previous messages. This | |||
protects against an attacker replaying messages or injecting messages | protects against an attacker replaying messages or injecting messages | |||
from another session. | from another session. | |||
EDHOC also adds selection of connection identifiers and downgrade | EDHOC also adds selection of connection identifiers and downgrade | |||
protected negotiation of cryptographic parameters, i.e. an attacker | protected negotiation of cryptographic parameters, i.e., an attacker | |||
cannot affect the negotiated parameters. A single session of EDHOC | cannot affect the negotiated parameters. A single session of EDHOC | |||
does not include negotiation of cipher suites, but it enables the | does not include negotiation of cipher suites, but it enables the | |||
Responder to verify that the selected cipher suite is the most | Responder to verify that the selected cipher suite is the most | |||
preferred cipher suite by the Initiator which is supported by both | preferred cipher suite by the Initiator which is supported by both | |||
the Initiator and the Responder. | the Initiator and the Responder. | |||
As required by [RFC7258], IETF protocols need to mitigate pervasive | As required by [RFC7258], IETF protocols need to mitigate pervasive | |||
monitoring when possible. One way to mitigate pervasive monitoring | monitoring when possible. EDHOC therefore only supports methods with | |||
is to use a key exchange that provides perfect forward secrecy. | ephemeral Diffie-Hellman and provides a KeyUpdate function for | |||
EDHOC therefore only supports methods with perfect forward secrecy. | lightweight application protocol rekeying with forward secrecy, in | |||
the sense that compromise of the private authentication keys does not | ||||
compromise past session keys, and compromise of a session key does | ||||
not compromise past session keys. | ||||
While the KeyUpdate method can be used to meet cryptographic limits | ||||
and provide partial protection against key leakage, it provides | ||||
significantly weaker security properties than re-running EDHOC with | ||||
ephemeral Diffie-Hellman. Even with frequent use of KeyUpdate, | ||||
compromise of one session key compromises all future session keys, | ||||
and an attacker therefore only needs to perform static key | ||||
exfiltration [RFC7624]. Frequently re-running EDHOC with ephemeral | ||||
Diffie-Hellman forces attackers to perform dynamic key exfiltration | ||||
instead of static key exfiltration [RFC7624]. In the dynamic case, | ||||
the attacker must have continuous interactions with the collaborator, | ||||
which is more complicated and has a higher risk profile than the | ||||
static case. | ||||
To limit the effect of breaches, it is important to limit the use of | To limit the effect of breaches, it is important to limit the use of | |||
symmetrical group keys for bootstrapping. EDHOC therefore strives to | symmetrical group keys for bootstrapping. EDHOC therefore strives to | |||
make the additional cost of using raw public keys and self-signed | make the additional cost of using raw public keys and self-signed | |||
certificates as small as possible. Raw public keys and self-signed | certificates as small as possible. Raw public keys and self-signed | |||
certificates are not a replacement for a public key infrastructure, | certificates are not a replacement for a public key infrastructure | |||
but SHOULD be used instead of symmetrical group keys for | but SHOULD be used instead of symmetrical group keys for | |||
bootstrapping. | bootstrapping. | |||
Compromise of the long-term keys (private signature or static DH | Compromise of the long-term keys (private signature or static DH | |||
keys) does not compromise the security of completed EDHOC exchanges. | keys) does not compromise the security of completed EDHOC exchanges. | |||
Compromising the private authentication keys of one party lets an | Compromising the private authentication keys of one party lets an | |||
active attacker impersonate that compromised party in EDHOC exchanges | active attacker impersonate that compromised party in EDHOC exchanges | |||
with other parties, but does not let the attacker impersonate other | with other parties but does not let the attacker impersonate other | |||
parties in EDHOC exchanges with the compromised party. Compromise of | parties in EDHOC exchanges with the compromised party. Compromise of | |||
the long-term keys does not enable a passive attacker to compromise | the long-term keys does not enable a passive attacker to compromise | |||
future session keys. Compromise of the HDKF input parameters (ECDH | future session keys. Compromise of the HDKF input parameters (ECDH | |||
shared secret) leads to compromise of all session keys derived from | shared secret) leads to compromise of all session keys derived from | |||
that compromised shared secret. Compromise of one session key does | that compromised shared secret. Compromise of one session key does | |||
not compromise other session keys. Compromise of PRK_4x3m leads to | not compromise other session keys. Compromise of PRK_4x3m leads to | |||
compromise of all exported keying material derived after the last | compromise of all exported keying material derived after the last | |||
invocation of the EDHOC-KeyUpdate function. | invocation of the EDHOC-KeyUpdate function. | |||
EDHOC provides a minimum of 64-bit security against online brute | EDHOC provides a minimum of 64-bit security against online brute | |||
skipping to change at page 40, line 15 ¶ | skipping to change at page 43, line 28 ¶ | |||
which is infeasible in constrained IoT radio technologies. | which is infeasible in constrained IoT radio technologies. | |||
After sending message_3, the Initiator is assured that no other party | After sending message_3, the Initiator is assured that no other party | |||
than the Responder can compute the key PRK_4x3m (implicit key | than the Responder can compute the key PRK_4x3m (implicit key | |||
authentication). The Initiator does however not know that the | authentication). The Initiator does however not know that the | |||
Responder has actually computed the key PRK_4x3m. While the | Responder has actually computed the key PRK_4x3m. While the | |||
Initiator can securely send protected application data, the Initiator | Initiator can securely send protected application data, the Initiator | |||
SHOULD NOT permanently store the keying material PRK_4x3m and TH_4 | SHOULD NOT permanently store the keying material PRK_4x3m and TH_4 | |||
until the Initiator is assured that the Responder has actually | until the Initiator is assured that the Responder has actually | |||
computed the key PRK_4x3m (explicit key confirmation). Explicit key | computed the key PRK_4x3m (explicit key confirmation). Explicit key | |||
confirmation is e.g. assured when the Initiator has verified an | confirmation is e.g., assured when the Initiator has verified an | |||
OSCORE message or message_4 from the Responder. After verifying | OSCORE message or message_4 from the Responder. After verifying | |||
message_3, the Responder is assured that the Initiator has calculated | message_3, the Responder is assured that the Initiator has calculated | |||
the key PRK_4x3m (explicit key confirmation) and that no other party | the key PRK_4x3m (explicit key confirmation) and that no other party | |||
than the Responder can compute the key. The Responder can securely | than the Responder can compute the key. The Responder can securely | |||
send protected application data and store the keying material | send protected application data and store the keying material | |||
PRK_4x3m and TH_4. | PRK_4x3m and TH_4. | |||
Key compromise impersonation (KCI): In EDHOC authenticated with | Key compromise impersonation (KCI): In EDHOC authenticated with | |||
signature keys, EDHOC provides KCI protection against an attacker | signature keys, EDHOC provides KCI protection against an attacker | |||
having access to the long term key or the ephemeral secret key. With | having access to the long-term key or the ephemeral secret key. With | |||
static Diffie-Hellman key authentication, KCI protection would be | static Diffie-Hellman key authentication, KCI protection would be | |||
provided against an attacker having access to the long-term Diffie- | provided against an attacker having access to the long-term Diffie- | |||
Hellman key, but not to an attacker having access to the ephemeral | Hellman key, but not to an attacker having access to the ephemeral | |||
secret key. Note that the term KCI has typically been used for | secret key. Note that the term KCI has typically been used for | |||
compromise of long-term keys, and that an attacker with access to the | compromise of long-term keys, and that an attacker with access to the | |||
ephemeral secret key can only attack that specific protocol run. | ephemeral secret key can only attack that specific protocol run. | |||
Repudiation: In EDHOC authenticated with signature keys, the | Repudiation: In EDHOC authenticated with signature keys, the | |||
Initiator could theoretically prove that the Responder performed a | Initiator could theoretically prove that the Responder performed a | |||
run of the protocol by presenting the private ephemeral key, and vice | run of the protocol by presenting the private ephemeral key, and vice | |||
skipping to change at page 40, line 47 ¶ | skipping to change at page 44, line 19 ¶ | |||
protocol requirements. With static Diffie-Hellman key | protocol requirements. With static Diffie-Hellman key | |||
authentication, both parties can always deny having participated in | authentication, both parties can always deny having participated in | |||
the protocol. | the protocol. | |||
Two earlier versions of EDHOC have been formally analyzed [Norrman20] | Two earlier versions of EDHOC have been formally analyzed [Norrman20] | |||
[Bruni18] and the specification has been updated based on the | [Bruni18] and the specification has been updated based on the | |||
analysis. | analysis. | |||
7.2. Cryptographic Considerations | 7.2. Cryptographic Considerations | |||
The security of the SIGMA protocol requires the MAC to be bound to | The SIGMA protocol requires that the encryption of message_3 provides | |||
the identity of the signer. Hence the message authenticating | confidentiality against active attackers and EDHOC message_4 relies | |||
functionality of the authenticated encryption in EDHOC is critical: | on the use of authenticated encryption. Hence the message | |||
authenticated encryption MUST NOT be replaced by plain encryption | authenticating functionality of the authenticated encryption in EDHOC | |||
only, even if authentication is provided at another level or through | is critical: authenticated encryption MUST NOT be replaced by plain | |||
a different mechanism. EDHOC implements SIGMA-I using a MAC-then- | encryption only, even if authentication is provided at another level | |||
Sign approach. | or through a different mechanism. | |||
To reduce message overhead EDHOC does not use explicit nonces and | To reduce message overhead EDHOC does not use explicit nonces and | |||
instead rely on the ephemeral public keys to provide randomness to | instead rely on the ephemeral public keys to provide randomness to | |||
each session. A good amount of randomness is important for the key | each session. A good amount of randomness is important for the key | |||
generation, to provide liveness, and to protect against interleaving | generation, to provide liveness, and to protect against interleaving | |||
attacks. For this reason, the ephemeral keys MUST NOT be reused, and | attacks. For this reason, the ephemeral keys MUST NOT be reused, and | |||
both parties SHALL generate fresh random ephemeral key pairs. | both parties SHALL generate fresh random ephemeral key pairs. | |||
As discussed the [SIGMA], the encryption of message_2 does only need | As discussed, the [SIGMA], the encryption of message_2 does only need | |||
to protect against passive attacker as active attackers can always | to protect against passive attacker as active attackers can always | |||
get the Responders identity by sending their own message_1. EDHOC | get the Responders identity by sending their own message_1. EDHOC | |||
uses the Expand function (typically HKDF-Expand) as a binary additive | uses the Expand function (typically HKDF-Expand) as a binary additive | |||
stream cipher. HKDF-Expand provides better confidentiality than AES- | stream cipher. HKDF-Expand provides better confidentiality than AES- | |||
CTR but is not often used as it is slow on long messages, and most | CTR but is not often used as it is slow on long messages, and most | |||
applications require both IND-CCA confidentiality as well as | applications require both IND-CCA confidentiality as well as | |||
integrity protection. For the encryption of message_2, any speed | integrity protection. For the encryption of message_2, any speed | |||
difference is negligible, IND-CCA does not increase security, and | difference is negligible, IND-CCA does not increase security, and | |||
integrity is provided by the inner MAC (and signature depending on | integrity is provided by the inner MAC (and signature depending on | |||
method). | method). | |||
The data rates in many IoT deployments are very limited. Given that | ||||
the application keys are protected as well as the long-term | ||||
authentication keys they can often be used for years or even decades | ||||
before the cryptographic limits are reached. If the application keys | ||||
established through EDHOC need to be renewed, the communicating | ||||
parties can derive application keys with other labels or run EDHOC | ||||
again. | ||||
Requirement for how to securely generate, validate, and process the | Requirement for how to securely generate, validate, and process the | |||
ephermeral public keys depend on the elliptic curve. For X25519 and | ephemeral public keys depend on the elliptic curve. For X25519 and | |||
X448, the requirements are defined in [RFC7748]. For secp256r1, | X448, the requirements are defined in [RFC7748]. For secp256r1, | |||
secp384r1, and secp521r1, the requirements are defined in Section 5 | secp384r1, and secp521r1, the requirements are defined in Section 5 | |||
of [SP-800-56A]. For secp256r1, secp384r1, and secp521r1, at least | of [SP-800-56A]. For secp256r1, secp384r1, and secp521r1, at least | |||
partial public-key validation MUST be done. | partial public-key validation MUST be done. | |||
7.3. Cipher Suites and Cryptographic Algorithms | 7.3. Cipher Suites and Cryptographic Algorithms | |||
For many constrained IoT devices it is problematic to support more | For many constrained IoT devices it is problematic to support more | |||
than one cipher suite. Existing devices can be expected to support | than one cipher suite. Existing devices can be expected to support | |||
either ECDSA or EdDSA. To enable as much interoperability as we can | either ECDSA or EdDSA. To enable as much interoperability as we can | |||
skipping to change at page 42, line 47 ¶ | skipping to change at page 46, line 19 ¶ | |||
attacker may cause the Responder to allocate state, perform | attacker may cause the Responder to allocate state, perform | |||
cryptographic operations, and amplify messages. To mitigate such | cryptographic operations, and amplify messages. To mitigate such | |||
attacks, an implementation SHOULD rely on lower layer mechanisms such | attacks, an implementation SHOULD rely on lower layer mechanisms such | |||
as the Echo option in CoAP [I-D.ietf-core-echo-request-tag] that | as the Echo option in CoAP [I-D.ietf-core-echo-request-tag] that | |||
forces the initiator to demonstrate reachability at its apparent | forces the initiator to demonstrate reachability at its apparent | |||
network address. | network address. | |||
An attacker can also send faked message_2, message_3, message_4, or | An attacker can also send faked message_2, message_3, message_4, or | |||
error in an attempt to trick the receiving party to send an error | error in an attempt to trick the receiving party to send an error | |||
message and discontinue the session. EDHOC implementations MAY | message and discontinue the session. EDHOC implementations MAY | |||
evaluate if a received message is likely to have be forged by and | evaluate if a received message is likely to have been forged by and | |||
attacker and ignore it without sending an error message or | attacker and ignore it without sending an error message or | |||
discontinuing the session. | discontinuing the session. | |||
7.6. Implementation Considerations | 7.6. Implementation Considerations | |||
The availability of a secure random number generator is essential for | The availability of a secure random number generator is essential for | |||
the security of EDHOC. If no true random number generator is | the security of EDHOC. If no true random number generator is | |||
available, a truly random seed MUST be provided from an external | available, a truly random seed MUST be provided from an external | |||
source and used with a cryptographically secure pseudorandom number | source and used with a cryptographically secure pseudorandom number | |||
generator. As each pseudorandom number must only be used once, an | generator. As each pseudorandom number must only be used once, an | |||
implementation need to get a new truly random seed after reboot, or | implementation needs to get a new truly random seed after reboot, or | |||
continuously store state in nonvolatile memory, see ([RFC8613], | continuously store state in nonvolatile memory, see ([RFC8613], | |||
Appendix B.1.1) for issues and solution approaches for writing to | Appendix B.1.1) for issues and solution approaches for writing to | |||
nonvolatile memory. Intentionally or unintentionally weak or | nonvolatile memory. Intentionally or unintentionally weak or | |||
predictable pseudorandom number generators can be abused or exploited | predictable pseudorandom number generators can be abused or exploited | |||
for malicious purposes. [RFC8937] describes a way for security | for malicious purposes. [RFC8937] describes a way for security | |||
protocol implementations to augment their (pseudo)random number | protocol implementations to augment their (pseudo)random number | |||
generators using a long-term private keys and a deterministic | generators using a long-term private key and a deterministic | |||
signature function. This improves randomness from broken or | signature function. This improves randomness from broken or | |||
otherwise subverted random number generators. The same idea can be | otherwise subverted random number generators. The same idea can be | |||
used with other secrets and functions such as a Diffie-Hellman | used with other secrets and functions such as a Diffie-Hellman | |||
function or a symmetric secret and a PRF like HMAC or KMAC. It is | function or a symmetric secret and a PRF like HMAC or KMAC. It is | |||
RECOMMENDED to not trust a single source of randomness and to not put | RECOMMENDED to not trust a single source of randomness and to not put | |||
unaugmented random numbers on the wire. | unaugmented random numbers on the wire. | |||
If ECDSA is supported, "deterministic ECDSA" as specified in | If ECDSA is supported, "deterministic ECDSA" as specified in | |||
[RFC6979] MAY be used. Pure deterministic elliptic-curve signatures | [RFC6979] MAY be used. Pure deterministic elliptic-curve signatures | |||
such as deterministic ECDSA and EdDSA have gained popularity over | such as deterministic ECDSA and EdDSA have gained popularity over | |||
randomized ECDSA as their security do not depend on a source of high- | randomized ECDSA as their security do not depend on a source of high- | |||
quality randomness. Recent research has however found that | quality randomness. Recent research has however found that | |||
implementations of these signature algorithms may be vulnerable to | implementations of these signature algorithms may be vulnerable to | |||
certain side-channel and fault injection attacks due to their | certain side-channel and fault injection attacks due to their | |||
determinism. See e.g. Section 1 of | determinism. See e.g., Section 1 of | |||
[I-D.mattsson-cfrg-det-sigs-with-noise] for a list of attack papers. | [I-D.mattsson-cfrg-det-sigs-with-noise] for a list of attack papers. | |||
As suggested in Section 6.1.2 of [I-D.ietf-cose-rfc8152bis-algs] this | As suggested in Section 6.1.2 of [I-D.ietf-cose-rfc8152bis-algs] this | |||
can be addressed by combining randomness and determinism. | can be addressed by combining randomness and determinism. | |||
All private keys, symmetric keys, and IVs MUST be secret. | All private keys, symmetric keys, and IVs MUST be secret. | |||
Implementations should provide countermeasures to side-channel | Implementations should provide countermeasures to side-channel | |||
attacks such as timing attacks. Intermediate computed values such as | attacks such as timing attacks. Intermediate computed values such as | |||
ephemeral ECDH keys and ECDH shared secrets MUST be deleted after key | ephemeral ECDH keys and ECDH shared secrets MUST be deleted after key | |||
derivation is completed. | derivation is completed. | |||
The Initiator and the Responder are responsible for verifying the | The Initiator and the Responder are responsible for verifying the | |||
integrity of certificates. The selection of trusted CAs should be | integrity of certificates. The selection of trusted CAs should be | |||
done very carefully and certificate revocation should be supported. | done very carefully and certificate revocation should be supported. | |||
The private authentication keys MUST be kept secret. | The private authentication keys MUST be kept secret. | |||
The Initiator and the Responder are allowed to select the connection | The Initiator and the Responder are allowed to select the connection | |||
identifiers C_I and C_R, respectively, for the other party to use in | identifiers C_I and C_R, respectively, for the other party to use in | |||
the ongoing EDHOC protocol as well as in a subsequent application | the ongoing EDHOC protocol as well as in a subsequent application | |||
protocol (e.g. OSCORE [RFC8613]). The choice of connection | protocol (e.g., OSCORE [RFC8613]). The choice of connection | |||
identifier is not security critical in EDHOC but intended to simplify | identifier is not security critical in EDHOC but intended to simplify | |||
the retrieval of the right security context in combination with using | the retrieval of the right security context in combination with using | |||
short identifiers. If the wrong connection identifier of the other | short identifiers. If the wrong connection identifier of the other | |||
party is used in a protocol message it will result in the receiving | party is used in a protocol message it will result in the receiving | |||
party not being able to retrieve a security context (which will | party not being able to retrieve a security context (which will | |||
terminate the protocol) or retrieve the wrong security context (which | terminate the protocol) or retrieve the wrong security context (which | |||
also terminates the protocol as the message cannot be verified). | also terminates the protocol as the message cannot be verified). | |||
If two nodes unintentionally initiate two simultaneous EDHOC message | If two nodes unintentionally initiate two simultaneous EDHOC message | |||
exchanges with each other even if they only want to complete a single | exchanges with each other even if they only want to complete a single | |||
skipping to change at page 44, line 26 ¶ | skipping to change at page 47, line 45 ¶ | |||
lexicographically smallest G_X. If the two G_X values are equal, the | lexicographically smallest G_X. If the two G_X values are equal, the | |||
received message_1 MUST be discarded to mitigate reflection attacks. | received message_1 MUST be discarded to mitigate reflection attacks. | |||
Note that in the case of two simultaneous EDHOC exchanges where the | Note that in the case of two simultaneous EDHOC exchanges where the | |||
nodes only complete one and where the nodes have different preferred | nodes only complete one and where the nodes have different preferred | |||
cipher suites, an attacker can affect which of the two nodes' | cipher suites, an attacker can affect which of the two nodes' | |||
preferred cipher suites will be used by blocking the other exchange. | preferred cipher suites will be used by blocking the other exchange. | |||
If supported by the device, it is RECOMMENDED that at least the long- | If supported by the device, it is RECOMMENDED that at least the long- | |||
term private keys are stored in a Trusted Execution Environment (TEE) | term private keys are stored in a Trusted Execution Environment (TEE) | |||
and that sensitive operations using these keys are performed inside | and that sensitive operations using these keys are performed inside | |||
the TEE. To achieve even higher security it is RECOMMENDED that in | the TEE. To achieve even higher security, it is RECOMMENDED that in | |||
additional operations such as ephemeral key generation, all | additional operations such as ephemeral key generation, all | |||
computations of shared secrets, and storage of the pseudorandom keys | computations of shared secrets, and storage of the pseudorandom keys | |||
(PRK) can be done inside the TEE. The use of a TEE enforces that | (PRK) can be done inside the TEE. The use of a TEE enforces that | |||
code within that environment cannot be tampered with, and that any | code within that environment cannot be tampered with, and that any | |||
data used by such code cannot be read or tampered with by code | data used by such code cannot be read or tampered with by code | |||
outside that environment. Note that non-EDHOC code inside the TEE | outside that environment. Note that non-EDHOC code inside the TEE | |||
might still be able to read EDHOC data and tamper with EDHOC code, to | might still be able to read EDHOC data and tamper with EDHOC code, to | |||
protect against such attacks EDHOC needs to be in its own zone. To | protect against such attacks EDHOC needs to be in its own zone. To | |||
provide better protection against some forms of physical attacks, | provide better protection against some forms of physical attacks, | |||
sensitive EDHOC data should be stored inside the SoC or encrypted and | sensitive EDHOC data should be stored inside the SoC or encrypted and | |||
integrity protected when sent on a data bus (e.g. between the CPU and | integrity protected when sent on a data bus (e.g., between the CPU | |||
RAM or Flash). Secure boot can be used to increase the security of | and RAM or Flash). Secure boot can be used to increase the security | |||
code and data in the Rich Execution Environment (REE) by validating | of code and data in the Rich Execution Environment (REE) by | |||
the REE image. | validating the REE image. | |||
8. IANA Considerations | 8. IANA Considerations | |||
8.1. EDHOC Exporter Label | 8.1. EDHOC Exporter Label | |||
IANA has created a new registry titled "EDHOC Exporter Label" under | IANA has created a new registry titled "EDHOC Exporter Label" under | |||
the new heading "EDHOC". The registration procedure is "Expert | the new heading "EDHOC". The registration procedure is "Expert | |||
Review". The columns of the registry are Label, Description, and | Review". The columns of the registry are Label, Description, and | |||
Reference. All columns are text strings. The initial contents of | Reference. All columns are text strings. The initial contents of | |||
the registry are: | the registry are: | |||
skipping to change at page 47, line 16 ¶ | skipping to change at page 50, line 34 ¶ | |||
Desc: ChaCha20/Poly1305, SHAKE256, X448, EdDSA, | Desc: ChaCha20/Poly1305, SHAKE256, X448, EdDSA, | |||
ChaCha20/Poly1305, SHAKE256 | ChaCha20/Poly1305, SHAKE256 | |||
Reference: [[this document]] | Reference: [[this document]] | |||
8.3. EDHOC Method Type Registry | 8.3. EDHOC Method Type Registry | |||
IANA has created a new registry entitled "EDHOC Method Type" under | IANA has created a new registry entitled "EDHOC Method Type" under | |||
the new heading "EDHOC". The registration procedure is "Expert | the new heading "EDHOC". The registration procedure is "Expert | |||
Review". The columns of the registry are Value, Description, and | Review". The columns of the registry are Value, Description, and | |||
Reference, where Value is an integer and the other columns are text | Reference, where Value is an integer and the other columns are text | |||
strings. The initial contents of the registry is shown in Figure 4. | strings. The initial contents of the registry are shown in Figure 4. | |||
8.4. EDHOC Error Codes Registry | 8.4. EDHOC Error Codes Registry | |||
IANA has created a new registry entitled "EDHOC Error Codes" under | IANA has created a new registry entitled "EDHOC Error Codes" under | |||
the new heading "EDHOC". The registration procedure is | the new heading "EDHOC". The registration procedure is | |||
"Specification Required". The columns of the registry are ERR_CODE, | "Specification Required". The columns of the registry are ERR_CODE, | |||
ERR_INFO Type and Description, where ERR_CODE is an integer, ERR_INFO | ERR_INFO Type and Description, where ERR_CODE is an integer, ERR_INFO | |||
is a CDDL defined type, and Description is a text string. The | is a CDDL defined type, and Description is a text string. The | |||
initial contents of the registry is shown in Figure 6. | initial contents of the registry are shown in Figure 6. | |||
8.5. COSE Header Parameters Registry | 8.5. COSE Header Parameters Registry | |||
This document registers the following entries in the "COSE Header | This document registers the following entries in the "COSE Header | |||
Parameters" registry under the "CBOR Object Signing and Encryption | Parameters" registry under the "CBOR Object Signing and Encryption | |||
(COSE)" heading. The value of the 'cwt' header parameter is a CWT | (COSE)" heading. The value of the 'cwt' header parameter is a CWT | |||
[RFC8392] or an unprotected CWT Claims Set [I-D.ietf-rats-uccs]. | [RFC8392] or an Unprotected CWT Claims Set, see Section 1.5. | |||
+-----------+-------+----------------+------------------------------+ | +-----------+-------+----------------+------------------------------+ | |||
| Name | Label | Value Type | Description | | | Name | Label | Value Type | Description | | |||
+===========+=======+================+==============================+ | +===========+=======+================+==============================+ | |||
| cwt | TBD1 | COSE_Messages | A CBOR Web Token (CWT) or an | | | cwt | TBD1 | COSE_Messages | A CBOR Web Token (CWT) or an | | |||
| | | / map | unprotected CWT Claims Set | | | | | / map | Unprotected CWT Claims Set | | |||
+-----------+-------+----------------+------------------------------+ | +-----------+-------+----------------+------------------------------+ | |||
8.6. COSE Header Parameters Registry | 8.6. COSE Header Parameters Registry | |||
IANA has added the COSE header parameter 'kid2' to the COSE Header | IANA has extended the Value Type of the COSE Header Parameter 'kid' | |||
Parameters registry. The kid2 parameter may point to a COSE key | to also allow the Value Type int. The resulting Value Type is bstr / | |||
common parameter 'kid' or 'kid2'. The kid2 parameter can be used to | int. The 'kid' parameter can be used to identify a key stored in a | |||
identify a key stored in a "raw" COSE_Key, in a CWT, or in a | UCCS, in a CWT, or in a public key certificate. (The Value Registry | |||
certificate. The Value Reference for this item is empty and omitted | for this item is empty and omitted from the table below.) | |||
from the table below. | ||||
+------+-------+------------+----------------+-------------------+ | +------+-------+------------+----------------+-------------------+ | |||
| Name | Label | Value Type | Description | Reference | | | Name | Label | Value Type | Description | Reference | | |||
+------+-------+------------+----------------+-------------------+ | +------+-------+------------+----------------+-------------------+ | |||
| kid2 | TBD | bstr / int | Key identifier | [[This document]] | | | kid | 4 | bstr / int | Key identifier | [RFC9052] | | |||
| | | | | [[This document]] | | ||||
+------+-------+------------+----------------+-------------------+ | +------+-------+------------+----------------+-------------------+ | |||
8.7. COSE Key Common Parameters Registry | 8.7. COSE Key Common Parameters Registry | |||
IANA has added the COSE key common parameter 'kid2' to the COSE Key | IANA has extended the Value Type of the COSE Key Common Parameter | |||
Common Parameters registry. The Value Reference for this item is | 'kid' to the COSE Key Value Type int. The resulting Value Type is | |||
empty and omitted from the table below. | bstr / int. (The Value Registry for this item is empty and omitted | |||
from the table below.) | ||||
+------+-------+------------+----------------+-------------------+ | +------+-------+------------+----------------+-------------------+ | |||
| Name | Label | Value Type | Description | Reference | | | Name | Label | Value Type | Description | Reference | | |||
+------+-------+------------+----------------+-------------------+ | +------+-------+------------+----------------+-------------------+ | |||
| kid2 | TBD | bstr / int | Key identifi- | [[This document]] | | | kid | 2 | bstr / int | Key identifi- | [RFC9052] | | |||
| | | | cation value - | | | | | | | cation value - | [[This document]] | | |||
| | | | match to kid2 | | | | | | | match to kid | | | |||
| | | | in message | | | | | | | in message | | | |||
+------+-------+------------+----------------+-------------------+ | +------+-------+------------+----------------+-------------------+ | |||
8.8. The Well-Known URI Registry | 8.8. The Well-Known URI Registry | |||
IANA has added the well-known URI 'edhoc' to the Well-Known URIs | IANA has added the well-known URI "edhoc" to the Well-Known URIs | |||
registry. | registry. | |||
o URI suffix: edhoc | * URI suffix: edhoc | |||
o Change controller: IETF | ||||
o Specification document(s): [[this document]] | * Change controller: IETF | |||
o Related information: None | * Specification document(s): [[this document]] | |||
* Related information: None | ||||
8.9. Media Types Registry | 8.9. Media Types Registry | |||
IANA has added the media type 'application/edhoc' to the Media Types | IANA has added the media type "application/edhoc" to the Media Types | |||
registry. | registry. | |||
o Type name: application | * Type name: application | |||
o Subtype name: edhoc | * Subtype name: edhoc | |||
o Required parameters: N/A | * Required parameters: N/A | |||
o Optional parameters: N/A | * Optional parameters: N/A | |||
o Encoding considerations: binary | * Encoding considerations: binary | |||
o Security considerations: See Section 7 of this document. | ||||
o Interoperability considerations: N/A | * Security considerations: See Section 7 of this document. | |||
o Published specification: [[this document]] (this document) | * Interoperability considerations: N/A | |||
o Applications that use this media type: To be identified | * Published specification: [[this document]] (this document) | |||
o Fragment identifier considerations: N/A | * Applications that use this media type: To be identified | |||
o Additional information: | * Fragment identifier considerations: N/A | |||
* Magic number(s): N/A | * Additional information: | |||
* File extension(s): N/A | - Magic number(s): N/A | |||
* Macintosh file type code(s): N/A | - File extension(s): N/A | |||
o Person & email address to contact for further information: See | - Macintosh file type code(s): N/A | |||
* Person & email address to contact for further information: See | ||||
"Authors' Addresses" section. | "Authors' Addresses" section. | |||
o Intended usage: COMMON | * Intended usage: COMMON | |||
o Restrictions on usage: N/A | * Restrictions on usage: N/A | |||
o Author: See "Authors' Addresses" section. | * Author: See "Authors' Addresses" section. | |||
o Change Controller: IESG | * Change Controller: IESG | |||
8.10. CoAP Content-Formats Registry | 8.10. CoAP Content-Formats Registry | |||
IANA has added the media type 'application/edhoc' to the CoAP | IANA has added the media type "application/edhoc" to the CoAP | |||
Content-Formats registry. | Content-Formats registry. | |||
o Media Type: application/edhoc | * Media Type: application/edhoc | |||
o Encoding: | * Encoding: | |||
o ID: TBD42 | * ID: TBD42 | |||
o Reference: [[this document]] | * Reference: [[this document]] | |||
8.11. EDHOC External Authorization Data | 8.11. EDHOC External Authorization Data | |||
IANA has created a new registry entitled "EDHOC External | IANA has created a new registry entitled "EDHOC External | |||
Authorization Data" under the new heading "EDHOC". The registration | Authorization Data" under the new heading "EDHOC". The registration | |||
procedure is "Expert Review". The columns of the registry are Value, | procedure is "Expert Review". The columns of the registry are Value, | |||
Description, and Reference, where Value is an integer and the other | Description, and Reference, where Value is an integer and the other | |||
columns are text strings. | columns are text strings. | |||
8.12. Expert Review Instructions | 8.12. Expert Review Instructions | |||
The IANA Registries established in this document is defined as | The IANA Registries established in this document is defined as | |||
"Expert Review". This section gives some general guidelines for what | "Expert Review". This section gives some general guidelines for what | |||
the experts should be looking for, but they are being designated as | the experts should be looking for, but they are being designated as | |||
experts for a reason so they should be given substantial latitude. | experts for a reason so they should be given substantial latitude. | |||
Expert reviewers should take into consideration the following points: | Expert reviewers should take into consideration the following points: | |||
o Clarity and correctness of registrations. Experts are expected to | * Clarity and correctness of registrations. Experts are expected to | |||
check the clarity of purpose and use of the requested entries. | check the clarity of purpose and use of the requested entries. | |||
Expert needs to make sure the values of algorithms are taken from | Expert needs to make sure the values of algorithms are taken from | |||
the right registry, when that's required. Expert should consider | the right registry, when that is required. Expert should consider | |||
requesting an opinion on the correctness of registered parameters | requesting an opinion on the correctness of registered parameters | |||
from relevant IETF working groups. Encodings that do not meet | from relevant IETF working groups. Encodings that do not meet | |||
these objective of clarity and completeness should not be | these objective of clarity and completeness should not be | |||
registered. | registered. | |||
o Experts should take into account the expected usage of fields when | * Experts should take into account the expected usage of fields when | |||
approving point assignment. The length of the encoded value | approving point assignment. The length of the encoded value | |||
should be weighed against how many code points of that length are | 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 | left, the size of device it will be used on, and the number of | |||
code points left that encode to that size. | code points left that encode to that size. | |||
o Specifications are recommended. When specifications are not | * Specifications are recommended. When specifications are not | |||
provided, the description provided needs to have sufficient | provided, the description provided needs to have sufficient | |||
information to verify the points above. | information to verify the points above. | |||
9. References | 9. References | |||
9.1. Normative References | 9.1. Normative References | |||
[I-D.ietf-core-echo-request-tag] | [I-D.ietf-core-echo-request-tag] | |||
Amsuess, C., Mattsson, J. P., and G. Selander, "CoAP: | Amsüss, C., Mattsson, J. P., and G. Selander, "CoAP: Echo, | |||
Echo, Request-Tag, and Token Processing", draft-ietf-core- | Request-Tag, and Token Processing", Work in Progress, | |||
echo-request-tag-12 (work in progress), February 2021. | Internet-Draft, draft-ietf-core-echo-request-tag-13, 12 | |||
July 2021, <https://www.ietf.org/archive/id/draft-ietf- | ||||
core-echo-request-tag-13.txt>. | ||||
[I-D.ietf-cose-rfc8152bis-algs] | [I-D.ietf-cose-rfc8152bis-algs] | |||
Schaad, J., "CBOR Object Signing and Encryption (COSE): | Schaad, J., "CBOR Object Signing and Encryption (COSE): | |||
Initial Algorithms", draft-ietf-cose-rfc8152bis-algs-12 | Initial Algorithms", Work in Progress, Internet-Draft, | |||
(work in progress), September 2020. | draft-ietf-cose-rfc8152bis-algs-12, 24 September 2020, | |||
<https://www.ietf.org/archive/id/draft-ietf-cose- | ||||
rfc8152bis-algs-12.txt>. | ||||
[I-D.ietf-cose-rfc8152bis-struct] | [I-D.ietf-cose-rfc8152bis-struct] | |||
Schaad, J., "CBOR Object Signing and Encryption (COSE): | Schaad, J., "CBOR Object Signing and Encryption (COSE): | |||
Structures and Process", draft-ietf-cose-rfc8152bis- | Structures and Process", Work in Progress, Internet-Draft, | |||
struct-15 (work in progress), February 2021. | draft-ietf-cose-rfc8152bis-struct-15, 1 February 2021, | |||
<https://www.ietf.org/archive/id/draft-ietf-cose- | ||||
rfc8152bis-struct-15.txt>. | ||||
[I-D.ietf-cose-x509] | [I-D.ietf-cose-x509] | |||
Schaad, J., "CBOR Object Signing and Encryption (COSE): | Schaad, J., "CBOR Object Signing and Encryption (COSE): | |||
Header parameters for carrying and referencing X.509 | Header parameters for carrying and referencing X.509 | |||
certificates", draft-ietf-cose-x509-08 (work in progress), | certificates", Work in Progress, Internet-Draft, draft- | |||
December 2020. | ietf-cose-x509-08, 14 December 2020, | |||
<https://www.ietf.org/internet-drafts/draft-ietf-cose- | ||||
[I-D.ietf-lake-reqs] | x509-08.txt>. | |||
Vucinic, M., Selander, G., Mattsson, J. P., and D. Garcia- | ||||
Carrillo, "Requirements for a Lightweight AKE for OSCORE", | ||||
draft-ietf-lake-reqs-04 (work in progress), June 2020. | ||||
[I-D.ietf-rats-uccs] | ||||
Birkholz, H., O'Donoghue, J., Cam-Winget, N., and C. | ||||
Bormann, "A CBOR Tag for Unprotected CWT Claims Sets", | ||||
draft-ietf-rats-uccs-00 (work in progress), May 2021. | ||||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC5116] McGrew, D., "An Interface and Algorithms for Authenticated | [RFC5116] McGrew, D., "An Interface and Algorithms for Authenticated | |||
Encryption", RFC 5116, DOI 10.17487/RFC5116, January 2008, | Encryption", RFC 5116, DOI 10.17487/RFC5116, January 2008, | |||
<https://www.rfc-editor.org/info/rfc5116>. | <https://www.rfc-editor.org/info/rfc5116>. | |||
[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, | ||||
<https://www.rfc-editor.org/info/rfc5280>. | ||||
[RFC5869] Krawczyk, H. and P. Eronen, "HMAC-based Extract-and-Expand | [RFC5869] Krawczyk, H. and P. Eronen, "HMAC-based Extract-and-Expand | |||
Key Derivation Function (HKDF)", RFC 5869, | Key Derivation Function (HKDF)", RFC 5869, | |||
DOI 10.17487/RFC5869, May 2010, | DOI 10.17487/RFC5869, May 2010, | |||
<https://www.rfc-editor.org/info/rfc5869>. | <https://www.rfc-editor.org/info/rfc5869>. | |||
[RFC6090] McGrew, D., Igoe, K., and M. Salter, "Fundamental Elliptic | [RFC6090] McGrew, D., Igoe, K., and M. Salter, "Fundamental Elliptic | |||
Curve Cryptography Algorithms", RFC 6090, | Curve Cryptography Algorithms", RFC 6090, | |||
DOI 10.17487/RFC6090, February 2011, | DOI 10.17487/RFC6090, February 2011, | |||
<https://www.rfc-editor.org/info/rfc6090>. | <https://www.rfc-editor.org/info/rfc6090>. | |||
[RFC6979] Pornin, T., "Deterministic Usage of the Digital Signature | [RFC6979] Pornin, T., "Deterministic Usage of the Digital Signature | |||
Algorithm (DSA) and Elliptic Curve Digital Signature | Algorithm (DSA) and Elliptic Curve Digital Signature | |||
Algorithm (ECDSA)", RFC 6979, DOI 10.17487/RFC6979, August | Algorithm (ECDSA)", RFC 6979, DOI 10.17487/RFC6979, August | |||
2013, <https://www.rfc-editor.org/info/rfc6979>. | 2013, <https://www.rfc-editor.org/info/rfc6979>. | |||
[RFC7252] Shelby, Z., Hartke, K., and C. Bormann, "The Constrained | [RFC7252] Shelby, Z., Hartke, K., and C. Bormann, "The Constrained | |||
Application Protocol (CoAP)", RFC 7252, | Application Protocol (CoAP)", RFC 7252, | |||
DOI 10.17487/RFC7252, June 2014, | DOI 10.17487/RFC7252, June 2014, | |||
<https://www.rfc-editor.org/info/rfc7252>. | <https://www.rfc-editor.org/info/rfc7252>. | |||
[RFC7624] Barnes, R., Schneier, B., Jennings, C., Hardie, T., | ||||
Trammell, B., Huitema, C., and D. Borkmann, | ||||
"Confidentiality in the Face of Pervasive Surveillance: A | ||||
Threat Model and Problem Statement", RFC 7624, | ||||
DOI 10.17487/RFC7624, August 2015, | ||||
<https://www.rfc-editor.org/info/rfc7624>. | ||||
[RFC7748] Langley, A., Hamburg, M., and S. Turner, "Elliptic Curves | [RFC7748] Langley, A., Hamburg, M., and S. Turner, "Elliptic Curves | |||
for Security", RFC 7748, DOI 10.17487/RFC7748, January | for Security", RFC 7748, DOI 10.17487/RFC7748, January | |||
2016, <https://www.rfc-editor.org/info/rfc7748>. | 2016, <https://www.rfc-editor.org/info/rfc7748>. | |||
[RFC7959] Bormann, C. and Z. Shelby, Ed., "Block-Wise Transfers in | [RFC7959] Bormann, C. and Z. Shelby, Ed., "Block-Wise Transfers in | |||
the Constrained Application Protocol (CoAP)", RFC 7959, | the Constrained Application Protocol (CoAP)", RFC 7959, | |||
DOI 10.17487/RFC7959, August 2016, | DOI 10.17487/RFC7959, August 2016, | |||
<https://www.rfc-editor.org/info/rfc7959>. | <https://www.rfc-editor.org/info/rfc7959>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
skipping to change at page 52, line 43 ¶ | skipping to change at page 56, line 17 ¶ | |||
Express Concise Binary Object Representation (CBOR) and | Express Concise Binary Object Representation (CBOR) and | |||
JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, | JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, | |||
June 2019, <https://www.rfc-editor.org/info/rfc8610>. | June 2019, <https://www.rfc-editor.org/info/rfc8610>. | |||
[RFC8613] Selander, G., Mattsson, J., Palombini, F., and L. Seitz, | [RFC8613] Selander, G., Mattsson, J., Palombini, F., and L. Seitz, | |||
"Object Security for Constrained RESTful Environments | "Object Security for Constrained RESTful Environments | |||
(OSCORE)", RFC 8613, DOI 10.17487/RFC8613, July 2019, | (OSCORE)", RFC 8613, DOI 10.17487/RFC8613, July 2019, | |||
<https://www.rfc-editor.org/info/rfc8613>. | <https://www.rfc-editor.org/info/rfc8613>. | |||
[RFC8724] Minaburo, A., Toutain, L., Gomez, C., Barthel, D., and JC. | [RFC8724] Minaburo, A., Toutain, L., Gomez, C., Barthel, D., and JC. | |||
Zuniga, "SCHC: Generic Framework for Static Context Header | Zúñiga, "SCHC: Generic Framework for Static Context Header | |||
Compression and Fragmentation", RFC 8724, | Compression and Fragmentation", RFC 8724, | |||
DOI 10.17487/RFC8724, April 2020, | DOI 10.17487/RFC8724, April 2020, | |||
<https://www.rfc-editor.org/info/rfc8724>. | <https://www.rfc-editor.org/info/rfc8724>. | |||
[RFC8742] Bormann, C., "Concise Binary Object Representation (CBOR) | [RFC8742] Bormann, C., "Concise Binary Object Representation (CBOR) | |||
Sequences", RFC 8742, DOI 10.17487/RFC8742, February 2020, | Sequences", RFC 8742, DOI 10.17487/RFC8742, February 2020, | |||
<https://www.rfc-editor.org/info/rfc8742>. | <https://www.rfc-editor.org/info/rfc8742>. | |||
[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, <https://www.rfc-editor.org/info/rfc8747>. | ||||
[RFC8949] Bormann, C. and P. Hoffman, "Concise Binary Object | [RFC8949] Bormann, C. and P. Hoffman, "Concise Binary Object | |||
Representation (CBOR)", STD 94, RFC 8949, | Representation (CBOR)", STD 94, RFC 8949, | |||
DOI 10.17487/RFC8949, December 2020, | DOI 10.17487/RFC8949, December 2020, | |||
<https://www.rfc-editor.org/info/rfc8949>. | <https://www.rfc-editor.org/info/rfc8949>. | |||
9.2. Informative References | 9.2. Informative References | |||
[Bruni18] Bruni, A., Sahl Joergensen, T., Groenbech Petersen, T., | [Bruni18] Bruni, A., Sahl Jørgensen, T., Grønbech Petersen, T., and | |||
and C. Schuermann, "Formal Verification of Ephemeral | C. Schürmann, "Formal Verification of Ephemeral Diffie- | |||
Diffie-Hellman Over COSE (EDHOC)", November 2018, | Hellman Over COSE (EDHOC)", November 2018, | |||
<https://www.springerprofessional.de/en/formal- | <https://www.springerprofessional.de/en/formal- | |||
verification-of-ephemeral-diffie-hellman-over-cose- | verification-of-ephemeral-diffie-hellman-over-cose- | |||
edhoc/16284348>. | edhoc/16284348>. | |||
[CborMe] Bormann, C., "CBOR Playground", May 2018, | [CborMe] Bormann, C., "CBOR Playground", May 2018, | |||
<http://cbor.me/>. | <http://cbor.me/>. | |||
[CNSA] (Placeholder), ., "Commercial National Security Algorithm | [CNSA] (Placeholder), ., "Commercial National Security Algorithm | |||
Suite", August 2015, | Suite", August 2015, | |||
<https://apps.nsa.gov/iaarchive/programs/iad-initiatives/ | <https://apps.nsa.gov/iaarchive/programs/iad-initiatives/ | |||
cnsa-suite.cfm>. | cnsa-suite.cfm>. | |||
[I-D.ietf-core-oscore-edhoc] | [I-D.ietf-core-oscore-edhoc] | |||
Palombini, F., Tiloca, M., Hoeglund, R., Hristozov, S., | Palombini, F., Tiloca, M., Hoeglund, R., Hristozov, S., | |||
and G. Selander, "Combining EDHOC and OSCORE", draft-ietf- | and G. Selander, "Combining EDHOC and OSCORE", Work in | |||
core-oscore-edhoc-00 (work in progress), April 2021. | Progress, Internet-Draft, draft-ietf-core-oscore-edhoc-01, | |||
12 July 2021, <https://www.ietf.org/archive/id/draft-ietf- | ||||
core-oscore-edhoc-01.txt>. | ||||
[I-D.ietf-core-resource-directory] | [I-D.ietf-core-resource-directory] | |||
Amsuess, C., Shelby, Z., Koster, M., Bormann, C., and P. | Amsüss, C., Shelby, Z., Koster, M., Bormann, C., and P. V. | |||
V. D. Stok, "CoRE Resource Directory", draft-ietf-core- | D. Stok, "CoRE Resource Directory", Work in Progress, | |||
resource-directory-28 (work in progress), March 2021. | Internet-Draft, draft-ietf-core-resource-directory-28, 7 | |||
March 2021, <https://www.ietf.org/archive/id/draft-ietf- | ||||
core-resource-directory-28.txt>. | ||||
[I-D.ietf-cose-cbor-encoded-cert] | [I-D.ietf-cose-cbor-encoded-cert] | |||
Raza, S., Hoeglund, J., Selander, G., Mattsson, J. P., and | Mattsson, J. P., Selander, G., Raza, S., Höglund, J., and | |||
M. Furuhed, "CBOR Encoded X.509 Certificates (C509 | M. Furuhed, "CBOR Encoded X.509 Certificates (C509 | |||
Certificates)", draft-ietf-cose-cbor-encoded-cert-00 (work | Certificates)", Work in Progress, Internet-Draft, draft- | |||
in progress), April 2021. | ietf-cose-cbor-encoded-cert-02, 12 July 2021, | |||
<https://www.ietf.org/archive/id/draft-ietf-cose-cbor- | ||||
encoded-cert-02.txt>. | ||||
[I-D.ietf-lake-reqs] | ||||
Vucinic, M., Selander, G., Mattsson, J. P., and D. Garcia- | ||||
Carrillo, "Requirements for a Lightweight AKE for OSCORE", | ||||
Work in Progress, Internet-Draft, draft-ietf-lake-reqs-04, | ||||
8 June 2020, <https://www.ietf.org/archive/id/draft-ietf- | ||||
lake-reqs-04.txt>. | ||||
[I-D.ietf-lwig-security-protocol-comparison] | [I-D.ietf-lwig-security-protocol-comparison] | |||
Mattsson, J. P., Palombini, F., and M. Vucinic, | Mattsson, J. P., Palombini, F., and M. Vucinic, | |||
"Comparison of CoAP Security Protocols", draft-ietf-lwig- | "Comparison of CoAP Security Protocols", Work in Progress, | |||
security-protocol-comparison-05 (work in progress), | Internet-Draft, draft-ietf-lwig-security-protocol- | |||
November 2020. | comparison-05, 2 November 2020, | |||
<https://www.ietf.org/archive/id/draft-ietf-lwig-security- | ||||
protocol-comparison-05.txt>. | ||||
[I-D.ietf-rats-uccs] | ||||
Birkholz, H., O'Donoghue, J., Cam-Winget, N., and C. | ||||
Bormann, "A CBOR Tag for Unprotected CWT Claims Sets", | ||||
Work in Progress, Internet-Draft, draft-ietf-rats-uccs-01, | ||||
12 July 2021, <https://www.ietf.org/archive/id/draft-ietf- | ||||
rats-uccs-01.txt>. | ||||
[I-D.ietf-tls-dtls13] | [I-D.ietf-tls-dtls13] | |||
Rescorla, E., Tschofenig, H., and N. Modadugu, "The | Rescorla, E., Tschofenig, H., and N. Modadugu, "The | |||
Datagram Transport Layer Security (DTLS) Protocol Version | Datagram Transport Layer Security (DTLS) Protocol Version | |||
1.3", draft-ietf-tls-dtls13-43 (work in progress), April | 1.3", Work in Progress, Internet-Draft, draft-ietf-tls- | |||
2021. | dtls13-43, 30 April 2021, <https://www.ietf.org/internet- | |||
drafts/draft-ietf-tls-dtls13-43.txt>. | ||||
[I-D.mattsson-cfrg-det-sigs-with-noise] | [I-D.mattsson-cfrg-det-sigs-with-noise] | |||
Mattsson, J. P., Thormarker, E., and S. Ruohomaa, | Mattsson, J. P., Thormarker, E., and S. Ruohomaa, | |||
"Deterministic ECDSA and EdDSA Signatures with Additional | "Deterministic ECDSA and EdDSA Signatures with Additional | |||
Randomness", draft-mattsson-cfrg-det-sigs-with-noise-02 | Randomness", Work in Progress, Internet-Draft, draft- | |||
(work in progress), March 2020. | mattsson-cfrg-det-sigs-with-noise-02, 11 March 2020, | |||
<https://www.ietf.org/archive/id/draft-mattsson-cfrg-det- | ||||
sigs-with-noise-02.txt>. | ||||
[I-D.selander-ace-ake-authz] | [I-D.selander-ace-ake-authz] | |||
Selander, G., Mattsson, J. P., Vucinic, M., Richardson, | Selander, G., Mattsson, J. P., Vucinic, M., Richardson, | |||
M., and A. Schellenbaum, "Lightweight Authorization for | M., and A. Schellenbaum, "Lightweight Authorization for | |||
Authenticated Key Exchange.", draft-selander-ace-ake- | Authenticated Key Exchange.", Work in Progress, Internet- | |||
authz-02 (work in progress), November 2020. | Draft, draft-selander-ace-ake-authz-03, 4 May 2021, | |||
<https://www.ietf.org/archive/id/draft-selander-ace-ake- | ||||
authz-03.txt>. | ||||
[Norrman20] | [Norrman20] | |||
Norrman, K., Sundararajan, V., and A. Bruni, "Formal | Norrman, K., Sundararajan, V., and A. Bruni, "Formal | |||
Analysis of EDHOC Key Establishment for Constrained IoT | Analysis of EDHOC Key Establishment for Constrained IoT | |||
Devices", September 2020, | Devices", September 2020, | |||
<https://arxiv.org/abs/2007.11427>. | <https://arxiv.org/abs/2007.11427>. | |||
[RFC7228] Bormann, C., Ersue, M., and A. Keranen, "Terminology for | [RFC7228] Bormann, C., Ersue, M., and A. Keranen, "Terminology for | |||
Constrained-Node Networks", RFC 7228, | Constrained-Node Networks", RFC 7228, | |||
DOI 10.17487/RFC7228, May 2014, | DOI 10.17487/RFC7228, May 2014, | |||
skipping to change at page 55, line 22 ¶ | skipping to change at page 59, line 27 ¶ | |||
[SP-800-56A] | [SP-800-56A] | |||
Barker, E., Chen, L., Roginsky, A., Vassilev, A., and R. | Barker, E., Chen, L., Roginsky, A., Vassilev, A., and R. | |||
Davis, "Recommendation for Pair-Wise Key-Establishment | Davis, "Recommendation for Pair-Wise Key-Establishment | |||
Schemes Using Discrete Logarithm Cryptography", | Schemes Using Discrete Logarithm Cryptography", | |||
NIST Special Publication 800-56A Revision 3, April 2018, | NIST Special Publication 800-56A Revision 3, April 2018, | |||
<https://doi.org/10.6028/NIST.SP.800-56Ar3>. | <https://doi.org/10.6028/NIST.SP.800-56Ar3>. | |||
Appendix A. Use with OSCORE and Transfer over CoAP | Appendix A. Use with OSCORE and Transfer over CoAP | |||
This sppendix describes how to select EDHOC connection identifiers | This appendix describes how to select EDHOC connection identifiers | |||
and derive an OSCORE security context when OSCORE is used with EDHOC, | and derive an OSCORE security context when OSCORE is used with EDHOC, | |||
and how to transfer EDHOC messages over CoAP. | and how to transfer EDHOC messages over CoAP. | |||
A.1. Selecting EDHOC Connection Identifier | A.1. Selecting EDHOC Connection Identifier | |||
This section specifies a rule for converting from EDHOC connection | This section specifies a rule for converting from EDHOC connection | |||
identifier to OSCORE Sender/Recipient ID. (An identifier is Sender | identifier to OSCORE Sender/Recipient ID. (An identifier is Sender | |||
ID or Recipient ID depending on from which endpoint is the point of | ID or Recipient ID depending on from which endpoint is the point of | |||
view, see Section 3.1 of [RFC8613].) | view, see Section 3.1 of [RFC8613].) | |||
o If the EDHOC connection identifier is numeric, i.e. encoded as a | * If the EDHOC connection identifier is numeric, i.e., encoded as a | |||
CBOR integer on the wire, it is converted to a (naturally byte- | CBOR integer on the wire, it is converted to a (naturally byte- | |||
string shaped) OSCORE Sender/Recipient ID equal to its CBOR | string shaped) OSCORE Sender/Recipient ID equal to its CBOR | |||
encoded form. | encoded form. | |||
For example, a numeric C_R equal to 10 (0x0A in CBOR encoding) is | For example, a numeric C_R equal to 10 (0x0A in CBOR encoding) is | |||
converted to a (typically client) Sender ID equal to 0x0A, while a | converted to a (typically client) Sender ID equal to 0x0A, while a | |||
numeric C_I equal to -12 (0x2B in CBOR encoding) is converted to a | numeric C_I equal to -12 (0x2B in CBOR encoding) is converted to a | |||
(typically client) Sender ID equal to 0x2B. | (typically client) Sender ID equal to 0x2B. | |||
o If the EDHOC connection identifier is byte-valued, hence encoded | * If the EDHOC connection identifier is byte-valued, hence encoded | |||
as a CBOR byte string on the wire, it is converted to an OSCORE | as a CBOR byte string on the wire, it is converted to an OSCORE | |||
Sender/Recipient ID equal to the byte string. | Sender/Recipient ID equal to the byte string. | |||
For example, a byte-string valued C_R equal to 0xFF (0x41FF in CBOR | For example, a byte-string valued C_R equal to 0xFF (0x41FF in CBOR | |||
encoding) is converted to a (typically client) Sender ID equal to | encoding) is converted to a (typically client) Sender ID equal to | |||
0xFF. | 0xFF. | |||
Two EDHOC connection identifiers are called "equivalent" if and only | Two EDHOC connection identifiers are called "equivalent" if and only | |||
if, by applying the conversion above, they both result in the same | if, by applying the conversion above, they both result in the same | |||
OSCORE Sender/Recipient ID. For example, the two EDHOC connection | OSCORE Sender/Recipient ID. For example, the two EDHOC connection | |||
skipping to change at page 56, line 26 ¶ | skipping to change at page 60, line 33 ¶ | |||
A.2. Deriving the OSCORE Security Context | A.2. Deriving the OSCORE Security Context | |||
This section specifies how to use EDHOC output to derive the OSCORE | This section specifies how to use EDHOC output to derive the OSCORE | |||
security context. | security context. | |||
After successful processing of EDHOC message_3, Client and Server | After successful processing of EDHOC message_3, Client and Server | |||
derive Security Context parameters for OSCORE as follows (see | derive Security Context parameters for OSCORE as follows (see | |||
Section 3.2 of [RFC8613]): | Section 3.2 of [RFC8613]): | |||
o The Master Secret and Master Salt are derived by using the EDHOC- | * The Master Secret and Master Salt are derived by using the EDHOC- | |||
Exporter interface, see Section 4.1. | Exporter interface, see Section 4.3. | |||
The EDHOC Exporter Labels for deriving the OSCORE Master Secret and | The EDHOC Exporter Labels for deriving the OSCORE Master Secret and | |||
the OSCORE Master Salt, are "OSCORE Master Secret" and "OSCORE Master | the OSCORE Master Salt, are "OSCORE Master Secret" and "OSCORE Master | |||
Salt", respectively. | Salt", respectively. | |||
The context parameter is h'' (0x40), the empty CBOR byte string. | The context parameter is h'' (0x40), the empty CBOR byte string. | |||
By default, key_length is the key length (in bytes) of the | By default, key_length is the key length (in bytes) of the | |||
application AEAD Algorithm of the selected cipher suite for the EDHOC | application AEAD Algorithm of the selected cipher suite for the EDHOC | |||
session. Also by default, salt_length has value 8. The Initiator | session. Also by default, salt_length has value 8. The Initiator | |||
and Responder MAY agree out-of-band on a longer key_length than the | and Responder MAY agree out-of-band on a longer key_length than the | |||
default and on a different salt_length. | default and on a different salt_length. | |||
Master Secret = EDHOC-Exporter( "OSCORE Master Secret", h'', key_length ) | Master Secret = EDHOC-Exporter( "OSCORE Master Secret", , key_length ) | |||
Master Salt = EDHOC-Exporter( "OSCORE Master Salt", h'', salt_length ) | Master Salt = EDHOC-Exporter( "OSCORE Master Salt", , salt_length ) | |||
o The AEAD Algorithm is the application AEAD algorithm of the | * The AEAD Algorithm is the application AEAD algorithm of the | |||
selected cipher suite for the EDHOC session. | selected cipher suite for the EDHOC session. | |||
o The HKDF Algorithm is the one based on the application hash | * The HKDF Algorithm is the one based on the application hash | |||
algorithm of the selected cipher suite for the EDHOC session. For | algorithm of the selected cipher suite for the EDHOC session. For | |||
example, if SHA-256 is the application hash algorithm of the | example, if SHA-256 is the application hash algorithm of the | |||
selected ciphersuite, HKDF SHA-256 is used as HKDF Algorithm in | selected ciphersuite, HKDF SHA-256 is used as HKDF Algorithm in | |||
the OSCORE Security Context. | the OSCORE Security Context. | |||
o In case the Client is Initiator and the Server is Responder, the | * In case the Client is Initiator and the Server is Responder, the | |||
Client's OSCORE Sender ID and the Server's OSCORE Sender ID are | Client's OSCORE Sender ID and the Server's OSCORE Sender ID are | |||
determined from the EDHOC connection identifiers C_R and C_I for | determined from the EDHOC connection identifiers C_R and C_I for | |||
the EDHOC session, respectively, by applying the conversion in | the EDHOC session, respectively, by applying the conversion in | |||
Appendix A.1. The reverse applies in case the Client is the | Appendix A.1. The reverse applies in case the Client is the | |||
Responder and the Server is the Initiator. | Responder and the Server is the Initiator. | |||
Client and Server use the parameters above to establish an OSCORE | Client and Server use the parameters above to establish an OSCORE | |||
Security Context, as per Section 3.2.1 of [RFC8613]. | Security Context, as per Section 3.2.1 of [RFC8613]. | |||
From then on, Client and Server retrieve the OSCORE protocol state | From then on, Client and Server retrieve the OSCORE protocol state | |||
using the Recipient ID, and optionally other transport information | using the Recipient ID, and optionally other transport information | |||
such as the 5-tuple. | such as the 5-tuple. | |||
A.3. Transferring EDHOC over CoAP | A.3. Transferring EDHOC over CoAP | |||
This section specifies one instance for how EDHOC can be transferred | This section specifies one instance for how EDHOC can be transferred | |||
as an exchange of CoAP [RFC7252] messages. CoAP is a reliable | as an exchange of CoAP [RFC7252] messages. CoAP is a reliable | |||
transport that can preserve packet ordering and handle message | transport that can preserve packet ordering and handle message | |||
duplication. CoAP can also perform fragmentation and protect against | duplication. CoAP can also perform fragmentation and protect against | |||
denial of service attacks. According to this specification, EDHOC | denial-of-service attacks. According to this specification, EDHOC | |||
messages are carried in Confirmable messages, which is beneficial | messages are carried in Confirmable messages, which is beneficial | |||
especially if fragmentation is used. | especially if fragmentation is used. | |||
By default, the CoAP client is the Initiator and the CoAP server is | By default, the CoAP client is the Initiator and the CoAP server is | |||
the Responder, but the roles SHOULD be chosen to protect the most | the Responder, but the roles SHOULD be chosen to protect the most | |||
sensitive identity, see Section 7. According to this specification, | sensitive identity, see Section 7. According to this specification, | |||
EDHOC is transferred in POST requests and 2.04 (Changed) responses to | EDHOC is transferred in POST requests and 2.04 (Changed) responses to | |||
the Uri-Path: "/.well-known/edhoc". An application may define its | the Uri-Path: "/.well-known/edhoc". An application may define its | |||
own path that can be discovered, e.g., using resource directory | own path that can be discovered, e.g., using resource directory | |||
[I-D.ietf-core-resource-directory]. | [I-D.ietf-core-resource-directory]. | |||
skipping to change at page 58, line 6 ¶ | skipping to change at page 62, line 12 ¶ | |||
if EDHOC message_4 is used, it is sent from the server to the client | if EDHOC message_4 is used, it is sent from the server to the client | |||
in the payload of a 2.04 (Changed) response analogously to message_2. | in the payload of a 2.04 (Changed) response analogously to message_2. | |||
In order to correlate a message received from a client to a message | In order to correlate a message received from a client to a message | |||
previously sent by the server, messages sent by the client are | previously sent by the server, messages sent by the client are | |||
prepended with the CBOR serialization of the connection identifier | prepended with the CBOR serialization of the connection identifier | |||
which the server has chosen. This applies independently of if the | which the server has chosen. This applies independently of if the | |||
CoAP server is Responder or Initiator. For the default case when the | CoAP server is Responder or Initiator. For the default case when the | |||
server is Responder, the prepended connection identifier is C_R, and | server is Responder, the prepended connection identifier is C_R, and | |||
C_I if the server is Initiator. If message_1 is sent to the server, | C_I if the server is Initiator. If message_1 is sent to the server, | |||
the CBOR simple value "null" (0xf6) is sent in its place (given that | the CBOR simple value "true" (0xf5) is sent in its place (given that | |||
the server has not selected C_R yet). | the server has not selected C_R yet). | |||
These identifiers are encoded in CBOR and thus self-delimiting. They | These identifiers are encoded in CBOR and thus self-delimiting. They | |||
are sent in front of the actual EDHOC message, and only the part of | are sent in front of the actual EDHOC message, and only the part of | |||
the body following the identifier is used for EDHOC processing. | the body following the identifier is used for EDHOC processing. | |||
Consequently, the application/edhoc media type does not apply to | Consequently, the application/edhoc media type does not apply to | |||
these messages; their media type is unnamed. | these messages; their media type is unnamed. | |||
An example of a successful EDHOC exchange using CoAP is shown in | An example of a successful EDHOC exchange using CoAP is shown in | |||
Figure 9. In this case the CoAP Token enables correlation on the | Figure 9. In this case the CoAP Token enables correlation on the | |||
Initiator side, and the prepended C_R enables correlation on the | Initiator side, and the prepended C_R enables correlation on the | |||
Responder (server) side. | Responder (server) side. | |||
Client Server | Client Server | |||
| | | | | | |||
+--------->| Header: POST (Code=0.02) | +--------->| Header: POST (Code=0.02) | |||
| POST | Uri-Path: "/.well-known/edhoc" | | POST | Uri-Path: "/.well-known/edhoc" | |||
| | Payload: null, EDHOC message_1 | | | Payload: true, EDHOC message_1 | |||
| | | | | | |||
|<---------+ Header: 2.04 Changed | |<---------+ Header: 2.04 Changed | |||
| 2.04 | Content-Format: application/edhoc | | 2.04 | Content-Format: application/edhoc | |||
| | Payload: EDHOC message_2 | | | Payload: EDHOC message_2 | |||
| | | | | | |||
+--------->| Header: POST (Code=0.02) | +--------->| Header: POST (Code=0.02) | |||
| POST | Uri-Path: "/.well-known/edhoc" | | POST | Uri-Path: "/.well-known/edhoc" | |||
| | Payload: C_R, EDHOC message_3 | | | Payload: C_R, EDHOC message_3 | |||
| | | | | | |||
|<---------+ Header: 2.04 Changed | |<---------+ Header: 2.04 Changed | |||
| 2.04 | | | 2.04 | | |||
| | | | | | |||
Figure 9: Transferring EDHOC in CoAP when the Initiator is CoAP | Figure 9: Transferring EDHOC in CoAP when the Initiator is CoAP | |||
Client | Client | |||
The exchange in Figure 9 protects the client identity against active | The exchange in Figure 9 protects the client identity against active | |||
attackers and the server identity against passive attackers. | attackers and the server identity against passive attackers. | |||
An alternative exchange that protects the server identity against | An alternative exchange that protects the server identity against | |||
active attackers and the client identity against passive attackers is | active attackers and the client identity against passive attackers is | |||
shown in Figure 10. In this case the CoAP Token enables the | shown in Figure 10. In this case the CoAP Token enables the | |||
Responder to correlate message_2 and message_3, and the prepended C_I | Responder to correlate message_2 and message_3, and the prepended C_I | |||
enables correlation on the Initiator (server) side. If EDHOC | enables correlation on the Initiator (server) side. If EDHOC | |||
message_4 is used, C_I is prepended, and it is transported with CoAP | message_4 is used, C_I is prepended, and it is transported with CoAP | |||
skipping to change at page 59, line 23 ¶ | skipping to change at page 63, line 31 ¶ | |||
| | | | | | |||
+--------->| Header: POST (Code=0.02) | +--------->| Header: POST (Code=0.02) | |||
| POST | Uri-Path: "/.well-known/edhoc" | | POST | Uri-Path: "/.well-known/edhoc" | |||
| | Payload: C_I, EDHOC message_2 | | | Payload: C_I, EDHOC message_2 | |||
| | | | | | |||
|<---------+ Header: 2.04 Changed | |<---------+ Header: 2.04 Changed | |||
| 2.04 | Content-Format: application/edhoc | | 2.04 | Content-Format: application/edhoc | |||
| | Payload: EDHOC message_3 | | | Payload: EDHOC message_3 | |||
| | | | | | |||
Figure 10: Transferring EDHOC in CoAP when the Initiator is CoAP | Figure 10: Transferring EDHOC in CoAP when the Initiator is CoAP | |||
Server | Server | |||
To protect against denial-of-service attacks, the CoAP server MAY | To protect against denial-of-service attacks, the CoAP server MAY | |||
respond to the first POST request with a 4.01 (Unauthorized) | respond to the first POST request with a 4.01 (Unauthorized) | |||
containing an Echo option [I-D.ietf-core-echo-request-tag]. This | containing an Echo option [I-D.ietf-core-echo-request-tag]. This | |||
forces the initiator to demonstrate its reachability at its apparent | forces the initiator to demonstrate its reachability at its apparent | |||
network address. If message fragmentation is needed, the EDHOC | network address. If message fragmentation is needed, the EDHOC | |||
messages may be fragmented using the CoAP Block-Wise Transfer | messages may be fragmented using the CoAP Block-Wise Transfer | |||
mechanism [RFC7959]. EDHOC does not restrict how error messages are | mechanism [RFC7959]. | |||
transported with CoAP, as long as the appropriate error message can | ||||
to be transported in response to a message that failed (see | EDHOC does not restrict how error messages are transported with CoAP, | |||
Section 6). | as long as the appropriate error message can to be transported in | |||
response to a message that failed (see Section 6). EDHOC error | ||||
messages transported with CoAP are carried in the payload. | ||||
A.3.1. Transferring EDHOC and OSCORE over CoAP | A.3.1. Transferring EDHOC and OSCORE over CoAP | |||
When using EDHOC over CoAP for establishing an OSCORE Security | ||||
Context, EDHOC error messages sent as CoAP responses MUST be sent in | ||||
the payload of error responses, i.e., they MUST specify a CoAP error | ||||
response code. In particular, it is RECOMMENDED that such error | ||||
responses have response code either 4.00 (Bad Request) in case of | ||||
client error (e.g., due to a malformed EDHOC message), or 5.00 | ||||
(Internal Server Error) in case of server error (e.g., due to failure | ||||
in deriving EDHOC key material). The Content-Format of the error | ||||
response MUST be set to application/edhoc. | ||||
A method for combining EDHOC and OSCORE protocols in two round-trips | A method for combining EDHOC and OSCORE protocols in two round-trips | |||
is specified in [I-D.ietf-core-oscore-edhoc]. | is specified in [I-D.ietf-core-oscore-edhoc]. | |||
When using EDHOC over CoAP for establishing an OSCORE Security | ||||
Context, EDHOC error messages sent as CoAP responses MUST be error | ||||
responses, i.e., they MUST specify a CoAP error response code. In | ||||
particular, it is RECOMMENDED that such error responses have response | ||||
code either 4.00 (Bad Request) in case of client error (e.g., due to | ||||
a malformed EDHOC message), or 5.00 (Internal Server Error) in case | ||||
of server error (e.g., due to failure in deriving EDHOC key | ||||
material). | ||||
Appendix B. Compact Representation | Appendix B. Compact Representation | |||
As described in Section 4.2 of [RFC6090] the x-coordinate of an | As described in Section 4.2 of [RFC6090] the x-coordinate of an | |||
elliptic curve public key is a suitable representative for the entire | elliptic curve public key is a suitable representative for the entire | |||
point whenever scalar multiplication is used as a one-way function. | point whenever scalar multiplication is used as a one-way function. | |||
One example is ECDH with compact output, where only the x-coordinate | One example is ECDH with compact output, where only the x-coordinate | |||
of the computed value is used as the shared secret. | of the computed value is used as the shared secret. | |||
This section defines a format for compact representation based on the | This section defines a format for compact representation based on the | |||
Elliptic-Curve-Point-to-Octet-String Conversion defined in | Elliptic-Curve-Point-to-Octet-String Conversion defined in | |||
skipping to change at page 60, line 31 ¶ | skipping to change at page 64, line 46 ¶ | |||
(log2 q) / 8 ) octets using the conversion routine specified in | (log2 q) / 8 ) octets using the conversion routine specified in | |||
Section 2.3.5 of [SECG]. | Section 2.3.5 of [SECG]. | |||
2. Output M = X | 2. Output M = X | |||
The encoding of the point at infinity is not supported. Compact | The encoding of the point at infinity is not supported. Compact | |||
representation does not change any requirements on validation. If a | representation does not change any requirements on validation. If a | |||
y-coordinate is required for validation or compatibily with APIs the | y-coordinate is required for validation or compatibily with APIs the | |||
value ~yp SHALL be set to zero. For such use, the compact | value ~yp SHALL be set to zero. For such use, the compact | |||
representation can be transformed into the SECG point compressed | representation can be transformed into the SECG point compressed | |||
format by prepending it with the single byte 0x02 (i.e. M = 0x02 || | format by prepending it with the single byte 0x02 (i.e., M = 0x02 || | |||
X). | X). | |||
Using compact representation have some security benefits. An | Using compact representation have some security benefits. An | |||
implementation does not need to check that the point is not the point | implementation does not need to check that the point is not the point | |||
at infinity (the identity element). Similarly, as not even the sign | at infinity (the identity element). Similarly, as not even the sign | |||
of the y-coordinate is encoded, compact representation trivially | of the y-coordinate is encoded, compact representation trivially | |||
avoids so called "benign malleability" attacks where an attacker | avoids so called "benign malleability" attacks where an attacker | |||
changes the sign, see [SECG]. | changes the sign, see [SECG]. | |||
Appendix C. Use of CBOR, CDDL and COSE in EDHOC | Appendix C. Use of CBOR, CDDL and COSE in EDHOC | |||
This Appendix is intended to simplify for implementors not familiar | This Appendix is intended to simplify for implementors not familiar | |||
with CBOR [RFC8949], CDDL [RFC8610], COSE | with CBOR [RFC8949], CDDL [RFC8610], COSE | |||
[I-D.ietf-cose-rfc8152bis-struct], and HKDF [RFC5869]. | [I-D.ietf-cose-rfc8152bis-struct], and HKDF [RFC5869]. | |||
C.1. CBOR and CDDL | C.1. CBOR and CDDL | |||
The Concise Binary Object Representation (CBOR) [RFC8949] is a data | The Concise Binary Object Representation (CBOR) [RFC8949] is a data | |||
format designed for small code size and small message size. CBOR | format designed for small code size and small message size. CBOR | |||
builds on the JSON data model but extends it by e.g. encoding binary | builds on the JSON data model but extends it by e.g., encoding binary | |||
data directly without base64 conversion. In addition to the binary | data directly without base64 conversion. In addition to the binary | |||
CBOR encoding, CBOR also has a diagnostic notation that is readable | CBOR encoding, CBOR also has a diagnostic notation that is readable | |||
and editable by humans. The Concise Data Definition Language (CDDL) | and editable by humans. The Concise Data Definition Language (CDDL) | |||
[RFC8610] provides a way to express structures for protocol messages | [RFC8610] provides a way to express structures for protocol messages | |||
and APIs that use CBOR. [RFC8610] also extends the diagnostic | and APIs that use CBOR. [RFC8610] also extends the diagnostic | |||
notation. | notation. | |||
CBOR data items are encoded to or decoded from byte strings using a | CBOR data items are encoded to or decoded from byte strings using a | |||
type-length-value encoding scheme, where the three highest order bits | type-length-value encoding scheme, where the three highest order bits | |||
of the initial byte contain information about the major type. CBOR | of the initial byte contain information about the major type. CBOR | |||
supports several different types of data items, in addition to | supports several different types of data items, in addition to | |||
integers (int, uint), simple values (e.g. null), byte strings (bstr), | integers (int, uint), simple values, byte strings (bstr), and text | |||
and text strings (tstr), CBOR also supports arrays [] of data items, | strings (tstr), CBOR also supports arrays [] of data items, maps {} | |||
maps {} of pairs of data items, and sequences [RFC8742] of data | of pairs of data items, and sequences [RFC8742] of data items. Some | |||
items. Some examples are given below. For a complete specification | examples are given below. | |||
and more examples, see [RFC8949] and [RFC8610]. We recommend | ||||
implementors to get used to CBOR by using the CBOR playground | For a complete specification and more examples, see [RFC8949] and | |||
[CborMe]. | [RFC8610]. We recommend implementors to get used to CBOR by using | |||
the CBOR playground [CborMe]. | ||||
Diagnostic Encoded Type | Diagnostic Encoded Type | |||
------------------------------------------------------------------ | ------------------------------------------------------------------ | |||
1 0x01 unsigned integer | 1 0x01 unsigned integer | |||
24 0x1818 unsigned integer | 24 0x1818 unsigned integer | |||
-24 0x37 negative integer | -24 0x37 negative integer | |||
-25 0x3818 negative integer | -25 0x3818 negative integer | |||
null 0xf6 simple value | true 0xf5 simple value | |||
h'12cd' 0x4212cd byte string | h'12cd' 0x4212cd byte string | |||
'12cd' 0x4431326364 byte string | '12cd' 0x4431326364 byte string | |||
"12cd" 0x6431326364 text string | "12cd" 0x6431326364 text string | |||
{ 4 : h'cd' } 0xa10441cd map | { 4 : h'cd' } 0xa10441cd map | |||
<< 1, 2, null >> 0x430102f6 byte string | << 1, 2, true >> 0x430102f5 byte string | |||
[ 1, 2, null ] 0x830102f6 array | [ 1, 2, true ] 0x830102f5 array | |||
( 1, 2, null ) 0x0102f6 sequence | ( 1, 2, true ) 0x0102f5 sequence | |||
1, 2, null 0x0102f6 sequence | 1, 2, true 0x0102f5 sequence | |||
------------------------------------------------------------------ | ------------------------------------------------------------------ | |||
C.2. CDDL Definitions | C.2. CDDL Definitions | |||
This sections compiles the CDDL definitions for ease of reference. | This sections compiles the CDDL definitions for ease of reference. | |||
suite = int | suite = int | |||
SUITES_R : [ supported : 2* suite ] / suite | ead = 1* ( | |||
type : int, | ||||
ext_authz_data : any, | ||||
) | ||||
message_1 = ( | message_1 = ( | |||
METHOD : int, | METHOD : int, | |||
SUITES_I : [ selected : suite, supported : 2* suite ] / suite, | SUITES_I : [ selected : suite, supported : 2* suite ] / suite, | |||
G_X : bstr, | G_X : bstr, | |||
C_I : bstr / int, | C_I : bstr / int, | |||
? EAD ; EAD_1 | ? EAD_1 : ead, | |||
) | ) | |||
message_2 = ( | message_2 = ( | |||
data_2, | G_Y_CIPHERTEXT_2 : bstr, | |||
CIPHERTEXT_2 : bstr, | ||||
) | ||||
data_2 = ( | ||||
G_Y : bstr, | ||||
C_R : bstr / int, | C_R : bstr / int, | |||
) | ) | |||
message_3 = ( | message_3 = ( | |||
CIPHERTEXT_3 : bstr, | CIPHERTEXT_3 : bstr, | |||
) | ) | |||
message_4 = ( | message_4 = ( | |||
CIPHERTEXT_4 : bstr, | CIPHERTEXT_4 : bstr, | |||
) | ) | |||
SUITES_R : [ supported : 2* suite ] / suite | ||||
error = ( | error = ( | |||
ERR_CODE : int, | ERR_CODE : int, | |||
ERR_INFO : any | ERR_INFO : any, | |||
) | ) | |||
info = [ | info = [ | |||
edhoc_aead_id : int / tstr, | edhoc_aead_id : int / tstr, | |||
transcript_hash : bstr, | transcript_hash : bstr, | |||
label : tstr, | label : tstr, | |||
length : uint | * context : any, | |||
length : uint, | ||||
] | ] | |||
C.3. COSE | C.3. COSE | |||
CBOR Object Signing and Encryption (COSE) | CBOR Object Signing and Encryption (COSE) | |||
[I-D.ietf-cose-rfc8152bis-struct] describes how to create and process | [I-D.ietf-cose-rfc8152bis-struct] describes how to create and process | |||
signatures, message authentication codes, and encryption using CBOR. | signatures, message authentication codes, and encryption using CBOR. | |||
COSE builds on JOSE, but is adapted to allow more efficient | COSE builds on JOSE, but is adapted to allow more efficient | |||
processing in constrained devices. EDHOC makes use of COSE_Key, | processing in constrained devices. EDHOC makes use of COSE_Key, | |||
COSE_Encrypt0, and COSE_Sign1 objects. | COSE_Encrypt0, and COSE_Sign1 objects in the message processing: | |||
Appendix D. Test Vectors | ||||
NOTE 0. These test vectors are compatible with versions -05 and -06 | ||||
of the specification. | ||||
This appendix provides detailed test vectors to ease implementation | ||||
and ensure interoperability. In addition to hexadecimal, all CBOR | ||||
data items and sequences are given in CBOR diagnostic notation. The | ||||
test vectors use the default mapping to CoAP where the Initiator acts | ||||
as CoAP client (this means that corr = 1). | ||||
A more extensive test vector suite covering more combinations of | ||||
authentication method used between Initiator and Responder and | ||||
related code to generate them can be found at https://github.com/ | ||||
lake-wg/edhoc/tree/master/test-vectors-05. | ||||
NOTE 1. In the previous and current test vectors the same name is | ||||
used for certain byte strings and their CBOR bstr encodings. For | ||||
example the transcript hash TH_2 is used to denote both the output of | ||||
the hash function and the input into the key derivation function, | ||||
whereas the latter is a CBOR bstr encoding of the former. Some | ||||
attempts are made to clarify that in this Appendix (e.g. using "CBOR | ||||
encoded"/"CBOR unencoded"). | ||||
NOTE 2. If not clear from the context, remember that CBOR sequences | ||||
and CBOR arrays assume CBOR encoded data items as elements. | ||||
D.1. Test Vectors for EDHOC Authenticated with Signature Keys (x5t) | ||||
EDHOC with signature authentication and X.509 certificates is used. | ||||
In this test vector, the hash value 'x5t' is used to identify the | ||||
certificate. The optional C_1 in message_1 is omitted. No external | ||||
authorization data is sent in the message exchange. | ||||
method (Signature Authentication) | ||||
0 | ||||
CoAP is used as transport and the Initiator acts as CoAP client: | ||||
corr (the Initiator can correlate message_1 and message_2) | ||||
1 | ||||
From there, METHOD_CORR has the following value: | ||||
METHOD_CORR (4 * method + corr) (int) | ||||
1 | ||||
The Initiator indicates only one cipher suite in the (potentially | ||||
truncated) list of cipher suites. | ||||
Supported Cipher Suites (1 byte) | ||||
00 | ||||
The Initiator selected the indicated cipher suite. | ||||
Selected Cipher Suite (int) | ||||
0 | ||||
Cipher suite 0 is supported by both the Initiator and the Responder, | ||||
see Section 3.6. | ||||
D.1.1. Message_1 | ||||
The Initiator generates its ephemeral key pair. | ||||
X (Initiator's ephemeral private key) (32 bytes) | ||||
8f 78 1a 09 53 72 f8 5b 6d 9f 61 09 ae 42 26 11 73 4d 7d bf a0 06 9a 2d | ||||
f2 93 5b b2 e0 53 bf 35 | ||||
G_X (Initiator's ephemeral public key, CBOR unencoded) (32 bytes) | ||||
89 8f f7 9a 02 06 7a 16 ea 1e cc b9 0f a5 22 46 f5 aa 4d d6 ec 07 6b ba | ||||
02 59 d9 04 b7 ec 8b 0c | ||||
The Initiator chooses a connection identifier C_I: | ||||
Connection identifier chosen by Initiator (1 byte) | ||||
09 | ||||
Note that since C_I is a byte string in the interval h'00' to h'2f', | ||||
it is encoded as the corresponding integer subtracted by 24. Thus | ||||
0x09 = 09, 9 - 24 = -15, and -15 in CBOR encoding is equal to 0x2e. | ||||
C_I (1 byte) | ||||
2e | ||||
Since no external authorization data is sent: | ||||
EAD_1 (0 bytes) | ||||
The list of supported cipher suites needs to contain the selected | ||||
cipher suite. The initiator truncates the list of supported cipher | ||||
suites to one cipher suite only. In this case there is only one | ||||
supported cipher suite indicated, 00. | ||||
Because one single selected cipher suite is conveyed, it is encoded | ||||
as an int instead of an array: | ||||
SUITES_I (int) | ||||
0 | ||||
message_1 is constructed as the CBOR Sequence of the data items above | ||||
encoded as CBOR. In CBOR diagnostic notation: | ||||
message_1 = | ||||
( | ||||
1, | ||||
0, | ||||
h'898FF79A02067A16EA1ECCB90FA52246F5AA4DD6EC076BBA0259D904B7EC8B0C', | ||||
-15 | ||||
) | ||||
Which as a CBOR encoded data item is: | ||||
message_1 (CBOR Sequence) (37 bytes) | ||||
01 00 58 20 89 8f f7 9a 02 06 7a 16 ea 1e cc b9 0f a5 22 46 f5 aa 4d d6 | ||||
ec 07 6b ba 02 59 d9 04 b7 ec 8b 0c 2e | ||||
D.1.2. Message_2 | ||||
Since METHOD_CORR mod 4 equals 1, C_I is omitted from data_2. | ||||
The Responder generates the following ephemeral key pair. | ||||
Y (Responder's ephemeral private key) (32 bytes) | ||||
fd 8c d8 77 c9 ea 38 6e 6a f3 4f f7 e6 06 c4 b6 4c a8 31 c8 ba 33 13 4f | ||||
d4 cd 71 67 ca ba ec da | ||||
G_Y (Responder's ephemeral public key, CBOR unencoded) (32 bytes) | ||||
71 a3 d5 99 c2 1d a1 89 02 a1 ae a8 10 b2 b6 38 2c cd 8d 5f 9b f0 19 52 | ||||
81 75 4c 5e bc af 30 1e | ||||
From G_X and Y or from G_Y and X the ECDH shared secret is computed: | ||||
G_XY (ECDH shared secret) (32 bytes) | ||||
2b b7 fa 6e 13 5b c3 35 d0 22 d6 34 cb fb 14 b3 f5 82 f3 e2 e3 af b2 b3 | ||||
15 04 91 49 5c 61 78 2b | ||||
The key and nonce for calculating the 'ciphertext' are calculated as | ||||
follows, as specified in Section 4. | ||||
HKDF SHA-256 is the HKDF used (as defined by cipher suite 0). | ||||
PRK_2e = HMAC-SHA-256(salt, G_XY) | ||||
Salt is the empty byte string. | ||||
salt (0 bytes) | ||||
From there, PRK_2e is computed: | ||||
PRK_2e (32 bytes) | ||||
ec 62 92 a0 67 f1 37 fc 7f 59 62 9d 22 6f bf c4 e0 68 89 49 f6 62 a9 7f | ||||
d8 2f be b7 99 71 39 4a | ||||
The Responder's sign/verify key pair is the following: | ||||
SK_R (Responder's private authentication key) (32 bytes) | ||||
df 69 27 4d 71 32 96 e2 46 30 63 65 37 2b 46 83 ce d5 38 1b fc ad cd 44 | ||||
0a 24 c3 91 d2 fe db 94 | ||||
PK_R (Responder's public authentication key) (32 bytes) | ||||
db d9 dc 8c d0 3f b7 c3 91 35 11 46 2b b2 38 16 47 7c 6b d8 d6 6e f5 a1 | ||||
a0 70 ac 85 4e d7 3f d2 | ||||
Since neither the Initiator nor the Responder authenticates with a | ||||
static Diffie-Hellman key, PRK_3e2m = PRK_2e | ||||
PRK_3e2m (32 bytes) | ||||
ec 62 92 a0 67 f1 37 fc 7f 59 62 9d 22 6f bf c4 e0 68 89 49 f6 62 a9 7f | ||||
d8 2f be b7 99 71 39 4a | ||||
The Responder chooses a connection identifier C_R. | ||||
Connection identifier chosen by Responder (1 byte) | ||||
00 | ||||
Note that since C_R is a byte string in the interval h'00' to h'2f', | ||||
it is encoded as the corresponding integer subtracted by 24. Thus | ||||
0x00 = 0, 0 - 24 = -24, and -24 in CBOR encoding is equal to 0x37. | ||||
C_R (1 byte) | ||||
37 | ||||
Data_2 is constructed as the CBOR Sequence of G_Y and C_R, encoded as | ||||
CBOR byte strings. The CBOR diagnostic notation is: | ||||
data_2 = | ||||
( | ||||
h'71a3d599c21da18902a1aea810b2b6382ccd8d5f9bf0195281754c5ebcaf301e', | ||||
-24 | ||||
) | ||||
Which as a CBOR encoded data item is: | ||||
data_2 (CBOR Sequence) (35 bytes) | ||||
58 20 71 a3 d5 99 c2 1d a1 89 02 a1 ae a8 10 b2 b6 38 2c cd 8d 5f 9b f0 | ||||
19 52 81 75 4c 5e bc af 30 1e 37 | ||||
From data_2 and message_1, compute the input to the transcript hash | ||||
TH_2 = H( H(message_1), data_2 ), as a CBOR Sequence of these 2 data | ||||
items. | ||||
Input to calculate TH_2 (CBOR Sequence) (72 bytes) | ||||
01 00 58 20 89 8f f7 9a 02 06 7a 16 ea 1e cc b9 0f a5 22 46 f5 aa 4d d6 | ||||
ec 07 6b ba 02 59 d9 04 b7 ec 8b 0c 2e 58 20 71 a3 d5 99 c2 1d a1 89 02 | ||||
a1 ae a8 10 b2 b6 38 2c cd 8d 5f 9b f0 19 52 81 75 4c 5e bc af 30 1e 37 | ||||
And from there, compute the transcript hash TH_2 = SHA-256( | ||||
H(message_1), data_2 ) | ||||
TH_2 (CBOR unencoded) (32 bytes) | ||||
86 4e 32 b3 6a 7b 5f 21 f1 9e 99 f0 c6 6d 91 1e 0a ce 99 72 d3 76 d2 c2 | ||||
c1 53 c1 7f 8e 96 29 ff | ||||
The Responder's subject name is the empty string: | ||||
Responder's subject name (text string) | ||||
"" | ||||
In this version of the test vectors CRED_R is not a DER encoded X.509 | ||||
certificate, but a string of random bytes. | ||||
CRED_R (CBOR unencoded) (100 bytes) | ||||
c7 88 37 00 16 b8 96 5b db 20 74 bf f8 2e 5a 20 e0 9b ec 21 f8 40 6e 86 | ||||
44 2b 87 ec 3f f2 45 b7 0a 47 62 4d c9 cd c6 82 4b 2a 4c 52 e9 5e c9 d6 | ||||
b0 53 4b 71 c2 b4 9e 4b f9 03 15 00 ce e6 86 99 79 c2 97 bb 5a 8b 38 1e | ||||
98 db 71 41 08 41 5e 5c 50 db 78 97 4c 27 15 79 b0 16 33 a3 ef 62 71 be | ||||
5c 22 5e b2 | ||||
CRED_R is defined to be the CBOR bstr containing the credential of | ||||
the Responder. | ||||
CRED_R (102 bytes) | ||||
58 64 c7 88 37 00 16 b8 96 5b db 20 74 bf f8 2e 5a 20 e0 9b ec 21 f8 40 | ||||
6e 86 44 2b 87 ec 3f f2 45 b7 0a 47 62 4d c9 cd c6 82 4b 2a 4c 52 e9 5e | ||||
c9 d6 b0 53 4b 71 c2 b4 9e 4b f9 03 15 00 ce e6 86 99 79 c2 97 bb 5a 8b | ||||
38 1e 98 db 71 41 08 41 5e 5c 50 db 78 97 4c 27 15 79 b0 16 33 a3 ef 62 | ||||
71 be 5c 22 5e b2 | ||||
And because certificates are identified by a hash value with the | ||||
'x5t' parameter, ID_CRED_R is the following: | ||||
ID_CRED_R = { 34 : COSE_CertHash }. In this example, the hash | ||||
algorithm used is SHA-2 256-bit with hash truncated to 64-bits (value | ||||
-15). The hash value is calculated over the CBOR unencoded CRED_R. | ||||
The CBOR diagnostic notation is: | ||||
ID_CRED_R = | ||||
{ | ||||
34: [-15, h'6844078A53F312F5'] | ||||
} | ||||
which when encoded as a CBOR map becomes: | ||||
ID_CRED_R (14 bytes) | ||||
a1 18 22 82 2e 48 68 44 07 8a 53 f3 12 f5 | ||||
Since no external authorization data is sent: | ||||
EAD_2 (0 bytes) | ||||
The plaintext is defined as the empty string: | ||||
P_2m (0 bytes) | ||||
The Enc_structure is defined as follows: [ "Encrypt0", | ||||
<< ID_CRED_R >>, << TH_2, CRED_R >> ], indicating that ID_CRED_R is | ||||
encoded as a CBOR byte string, and that the concatenation of the CBOR | ||||
byte strings TH_2 and CRED_R is wrapped as a CBOR bstr. The CBOR | ||||
diagnostic notation is the following: | ||||
A_2m = | ||||
[ | ||||
"Encrypt0", | ||||
h'A11822822E486844078A53F312F5', | ||||
h'5820864E32B36A7B5F21F19E99F0C66D911E0ACE9972D376D2C2C153C17F8E9629FF | ||||
5864C788370016B8965BDB2074BFF82E5A20E09BEC21F8406E86442B87EC3FF245B70A | ||||
47624DC9CDC6824B2A4C52E95EC9D6B0534B71C2B49E4BF9031500CEE6869979C297BB | ||||
5A8B381E98DB714108415E5C50DB78974C271579B01633A3EF6271BE5C225EB2' | ||||
] | ||||
Which encodes to the following byte string to be used as Additional | ||||
Authenticated Data: | ||||
A_2m (CBOR-encoded) (163 bytes) | ||||
83 68 45 6e 63 72 79 70 74 30 4e a1 18 22 82 2e 48 68 44 07 8a 53 f3 12 | ||||
f5 58 88 58 20 86 4e 32 b3 6a 7b 5f 21 f1 9e 99 f0 c6 6d 91 1e 0a ce 99 | ||||
72 d3 76 d2 c2 c1 53 c1 7f 8e 96 29 ff 58 64 c7 88 37 00 16 b8 96 5b db | ||||
20 74 bf f8 2e 5a 20 e0 9b ec 21 f8 40 6e 86 44 2b 87 ec 3f f2 45 b7 0a | ||||
47 62 4d c9 cd c6 82 4b 2a 4c 52 e9 5e c9 d6 b0 53 4b 71 c2 b4 9e 4b f9 | ||||
03 15 00 ce e6 86 99 79 c2 97 bb 5a 8b 38 1e 98 db 71 41 08 41 5e 5c 50 | ||||
db 78 97 4c 27 15 79 b0 16 33 a3 ef 62 71 be 5c 22 5e b2 | ||||
info for K_2m is defined as follows in CBOR diagnostic notation: | ||||
info for K_2m = | ||||
[ | ||||
10, | ||||
h'864E32B36A7B5F21F19E99F0C66D911E0ACE9972D376D2C2C153C17F8E9629FF', | ||||
"K_2m", | ||||
16 | ||||
] | ||||
Which as a CBOR encoded data item is: | ||||
info for K_2m (CBOR-encoded) (42 bytes) | ||||
84 0a 58 20 86 4e 32 b3 6a 7b 5f 21 f1 9e 99 f0 c6 6d 91 1e 0a ce 99 72 | ||||
d3 76 d2 c2 c1 53 c1 7f 8e 96 29 ff 64 4b 5f 32 6d 10 | ||||
From these parameters, K_2m is computed. Key K_2m is the output of | ||||
HKDF-Expand(PRK_3e2m, info, L), where L is the length of K_2m, so 16 | ||||
bytes. | ||||
K_2m (16 bytes) | ||||
80 cc a7 49 ab 58 f5 69 ca 35 da ee 05 be d1 94 | ||||
info for IV_2m is defined as follows, in CBOR diagnostic notation (10 | ||||
is the COSE algorithm no. of the AEAD algorithm in the selected | ||||
cipher suite 0): | ||||
info for IV_2m = | ||||
[ | ||||
10, | ||||
h'864E32B36A7B5F21F19E99F0C66D911E0ACE9972D376D2C2C153C17F8E9629FF', | ||||
"IV_2m", | ||||
13 | ||||
] | ||||
Which as a CBOR encoded data item is: | ||||
info for IV_2m (CBOR-encoded) (43 bytes) | ||||
84 0a 58 20 86 4e 32 b3 6a 7b 5f 21 f1 9e 99 f0 c6 6d 91 1e 0a ce 99 72 | ||||
d3 76 d2 c2 c1 53 c1 7f 8e 96 29 ff 65 49 56 5f 32 6d 0d | ||||
From these parameters, IV_2m is computed. IV_2m is the output of | ||||
HKDF-Expand(PRK_3e2m, info, L), where L is the length of IV_2m, so 13 | ||||
bytes. | ||||
IV_2m (13 bytes) | ||||
c8 1e 1a 95 cc 93 b3 36 69 6e d5 02 55 | ||||
Finally, COSE_Encrypt0 is computed from the parameters above. | ||||
o protected header = CBOR-encoded ID_CRED_R | ||||
o external_aad = A_2m | ||||
o empty plaintext = P_2m | ||||
MAC_2 (CBOR unencoded) (8 bytes) | ||||
fa bb a4 7e 56 71 a1 82 | ||||
To compute the Signature_or_MAC_2, the key is the private | ||||
authentication key of the Responder and the message M_2 to be signed | ||||
= [ "Signature1", << ID_CRED_R >>, << TH_2, CRED_R, ? EAD_2 >>, MAC_2 | ||||
]. ID_CRED_R is encoded as a CBOR byte string, the concatenation of | ||||
the CBOR byte strings TH_2 and CRED_R is wrapped as a CBOR bstr, and | ||||
MAC_2 is encoded as a CBOR bstr. | ||||
M_2 = | ||||
[ | ||||
"Signature1", | ||||
h'A11822822E486844078A53F312F5', | ||||
h'5820864E32B36A7B5F21F19E99F0C66D911E0ACE9972D376D2C2C153C17F8E9629F | ||||
F5864C788370016B8965BDB2074BFF82E5A20E09BEC21F8406E86442B87EC3FF245B7 | ||||
0A47624DC9CDC6824B2A4C52E95EC9D6B0534B71C2B49E4BF9031500CEE6869979C29 | ||||
7BB5A8B381E98DB714108415E5C50DB78974C271579B01633A3EF6271BE5C225EB2', | ||||
h'FABBA47E5671A182' | ||||
] | ||||
Which as a CBOR encoded data item is: | ||||
M_2 (174 bytes) | ||||
84 6a 53 69 67 6e 61 74 75 72 65 31 4e a1 18 22 82 2e 48 68 44 07 8a 53 | ||||
f3 12 f5 58 88 58 20 86 4e 32 b3 6a 7b 5f 21 f1 9e 99 f0 c6 6d 91 1e 0a | ||||
ce 99 72 d3 76 d2 c2 c1 53 c1 7f 8e 96 29 ff 58 64 c7 88 37 00 16 b8 96 | ||||
5b db 20 74 bf f8 2e 5a 20 e0 9b ec 21 f8 40 6e 86 44 2b 87 ec 3f f2 45 | ||||
b7 0a 47 62 4d c9 cd c6 82 4b 2a 4c 52 e9 5e c9 d6 b0 53 4b 71 c2 b4 9e | ||||
4b f9 03 15 00 ce e6 86 99 79 c2 97 bb 5a 8b 38 1e 98 db 71 41 08 41 5e | ||||
5c 50 db 78 97 4c 27 15 79 b0 16 33 a3 ef 62 71 be 5c 22 5e b2 48 fa bb | ||||
a4 7e 56 71 a1 82 | ||||
Since the method = 0, Signature_or_MAC_2 is a signature. The | ||||
algorithm with selected cipher suite 0 is Ed25519 and the output is | ||||
64 bytes. | ||||
Signature_or_MAC_2 (CBOR unencoded) (64 bytes) | ||||
1f 17 00 6a 98 48 c9 77 cb bd ca a7 57 b6 fd 46 82 c8 17 39 e1 5c 99 37 | ||||
c2 1c f5 e9 a0 e6 03 9f 54 fd 2a 6c 3a 11 18 f2 b9 d8 eb cd 48 23 48 b9 | ||||
9c 3e d7 ed 1b d9 80 6c 93 c8 90 68 e8 36 b4 0f | ||||
CIPHERTEXT_2 is the ciphertext resulting from XOR between plaintext | ||||
and KEYSTREAM_2 which is derived from TH_2 and the pseudorandom key | ||||
PRK_2e. | ||||
o plaintext = CBOR Sequence of the items ID_CRED_R and | ||||
Signature_or_MAC_2 encoded as CBOR byte strings, in this order | ||||
(EAD_2 is empty). | ||||
The plaintext is the following: | ||||
P_2e (CBOR Sequence) (80 bytes) | ||||
a1 18 22 82 2e 48 68 44 07 8a 53 f3 12 f5 58 40 1f 17 00 6a 98 48 c9 77 | ||||
cb bd ca a7 57 b6 fd 46 82 c8 17 39 e1 5c 99 37 c2 1c f5 e9 a0 e6 03 9f | ||||
54 fd 2a 6c 3a 11 18 f2 b9 d8 eb cd 48 23 48 b9 9c 3e d7 ed 1b d9 80 6c | ||||
93 c8 90 68 e8 36 b4 0f | ||||
KEYSTREAM_2 = HKDF-Expand( PRK_2e, info, length ), where length is | ||||
the length of the plaintext, so 80. | ||||
info for KEYSTREAM_2 = | ||||
[ | ||||
10, | ||||
h'864E32B36A7B5F21F19E99F0C66D911E0ACE9972D376D2C2C153C17F8E9629FF', | ||||
"KEYSTREAM_2", | ||||
80 | ||||
] | ||||
Which as a CBOR encoded data item is: | ||||
info for KEYSTREAM_2 (CBOR-encoded) (50 bytes) | ||||
84 0a 58 20 86 4e 32 b3 6a 7b 5f 21 f1 9e 99 f0 c6 6d 91 1e 0a ce 99 72 | ||||
d3 76 d2 c2 c1 53 c1 7f 8e 96 29 ff 6b 4b 45 59 53 54 52 45 41 4d 5f 32 | ||||
18 50 | ||||
From there, KEYSTREAM_2 is computed: | ||||
KEYSTREAM_2 (80 bytes) | ||||
ae ea 8e af 50 cf c6 70 09 da e8 2d 8d 85 b0 e7 60 91 bf 0f 07 0b 79 53 | ||||
6c 83 23 dc 3d 9d 61 13 10 35 94 63 f4 4b 12 4b ea b3 a1 9d 09 93 82 d7 | ||||
30 80 17 f4 92 62 06 e4 f5 44 9b 9f c9 24 bc b6 bd 78 ec 45 0a 66 83 fb | ||||
8a 2f 5f 92 4f c4 40 4f | ||||
Using the parameters above, the ciphertext CIPHERTEXT_2 can be | ||||
computed: | ||||
CIPHERTEXT_2 (CBOR unencoded) (80 bytes) | ||||
0f f2 ac 2d 7e 87 ae 34 0e 50 bb de 9f 70 e8 a7 7f 86 bf 65 9f 43 b0 24 | ||||
a7 3e e9 7b 6a 2b 9c 55 92 fd 83 5a 15 17 8b 7c 28 af 54 74 a9 75 81 48 | ||||
64 7d 3d 98 a8 73 1e 16 4c 9c 70 52 81 07 f4 0f 21 46 3b a8 11 bf 03 97 | ||||
19 e7 cf fa a7 f2 f4 40 | ||||
message_2 is the CBOR Sequence of data_2 and CIPHERTEXT_2, in this | ||||
order: | ||||
message_2 = | ||||
( | ||||
data_2, | ||||
h'0FF2AC2D7E87AE340E50BBDE9F70E8A77F86BF659F43B024A73EE97B6A2B9C5592FD | ||||
835A15178B7C28AF5474A9758148647D3D98A8731E164C9C70528107F40F21463BA811 | ||||
BF039719E7CFFAA7F2F440' | ||||
) | ||||
Which as a CBOR encoded data item is: | ||||
message_2 (CBOR Sequence) (117 bytes) | ||||
58 20 71 a3 d5 99 c2 1d a1 89 02 a1 ae a8 10 b2 b6 38 2c cd 8d 5f 9b f0 | ||||
19 52 81 75 4c 5e bc af 30 1e 37 58 50 0f f2 ac 2d 7e 87 ae 34 0e 50 bb | ||||
de 9f 70 e8 a7 7f 86 bf 65 9f 43 b0 24 a7 3e e9 7b 6a 2b 9c 55 92 fd 83 | ||||
5a 15 17 8b 7c 28 af 54 74 a9 75 81 48 64 7d 3d 98 a8 73 1e 16 4c 9c 70 | ||||
52 81 07 f4 0f 21 46 3b a8 11 bf 03 97 19 e7 cf fa a7 f2 f4 40 | ||||
D.1.3. Message_3 | ||||
Since corr equals 1, C_R is not omitted from data_3. | ||||
The Initiator's sign/verify key pair is the following: | ||||
SK_I (Initiator's private authentication key) (32 bytes) | ||||
2f fc e7 a0 b2 b8 25 d3 97 d0 cb 54 f7 46 e3 da 3f 27 59 6e e0 6b 53 71 | ||||
48 1d c0 e0 12 bc 34 d7 | ||||
PK_I (Responder's public authentication key) (32 bytes) | ||||
38 e5 d5 45 63 c2 b6 a4 ba 26 f3 01 5f 61 bb 70 6e 5c 2e fd b5 56 d2 e1 | ||||
69 0b 97 fc 3c 6d e1 49 | ||||
HKDF SHA-256 is the HKDF used (as defined by cipher suite 0). | ||||
PRK_4x3m = HMAC-SHA-256 (PRK_3e2m, G_IY) | ||||
PRK_4x3m (32 bytes) | ||||
ec 62 92 a0 67 f1 37 fc 7f 59 62 9d 22 6f bf c4 e0 68 89 49 f6 62 a9 7f | ||||
d8 2f be b7 99 71 39 4a | ||||
data 3 is equal to C_R. | ||||
data_3 (CBOR Sequence) (1 byte) | ||||
37 | ||||
From data_3, CIPHERTEXT_2, and TH_2, compute the input to the | ||||
transcript hash TH_3 = H( H(TH_2 , CIPHERTEXT_2), data_3), as a CBOR | ||||
Sequence of 2 data items. | ||||
Input to calculate TH_3 (CBOR Sequence) (117 bytes) | ||||
58 20 86 4e 32 b3 6a 7b 5f 21 f1 9e 99 f0 c6 6d 91 1e 0a ce 99 72 d3 76 | ||||
d2 c2 c1 53 c1 7f 8e 96 29 ff 58 50 0f f2 ac 2d 7e 87 ae 34 0e 50 bb de | ||||
9f 70 e8 a7 7f 86 bf 65 9f 43 b0 24 a7 3e e9 7b 6a 2b 9c 55 92 fd 83 5a | ||||
15 17 8b 7c 28 af 54 74 a9 75 81 48 64 7d 3d 98 a8 73 1e 16 4c 9c 70 52 | ||||
81 07 f4 0f 21 46 3b a8 11 bf 03 97 19 e7 cf fa a7 f2 f4 40 37 | ||||
And from there, compute the transcript hash TH_3 = SHA-256( H(TH_2 , | ||||
CIPHERTEXT_2), data_3) | ||||
TH_3 (CBOR unencoded) (32 bytes) | ||||
f2 4d 18 ca fc e3 74 d4 e3 73 63 29 c1 52 ab 3a ea 9c 7c 0f 65 0c 30 70 | ||||
b6 f5 1e 68 e2 ae bb 60 | ||||
The Initiator's subject name is the empty string: | ||||
Initiator's subject name (text string) | ||||
"" | ||||
In this version of the test vectors CRED_I is not a DER encoded X.509 | ||||
certificate, but a string of random bytes. | ||||
CRED_I (CBOR unencoded) (101 bytes) | ||||
54 13 20 4c 3e bc 34 28 a6 cf 57 e2 4c 9d ef 59 65 17 70 44 9b ce 7e c6 | ||||
56 1e 52 43 3a a5 5e 71 f1 fa 34 b2 2a 9c a4 a1 e1 29 24 ea e1 d1 76 60 | ||||
88 09 84 49 cb 84 8f fc 79 5f 88 af c4 9c be 8a fd d1 ba 00 9f 21 67 5e | ||||
8f 6c 77 a4 a2 c3 01 95 60 1f 6f 0a 08 52 97 8b d4 3d 28 20 7d 44 48 65 | ||||
02 ff 7b dd a6 | ||||
CRED_I is defined to be the CBOR bstr containing the credential of | ||||
the Initiator. | ||||
CRED_I (103 bytes) | ||||
58 65 54 13 20 4c 3e bc 34 28 a6 cf 57 e2 4c 9d ef 59 65 17 70 44 9b ce | ||||
7e c6 56 1e 52 43 3a a5 5e 71 f1 fa 34 b2 2a 9c a4 a1 e1 29 24 ea e1 d1 | ||||
76 60 88 09 84 49 cb 84 8f fc 79 5f 88 af c4 9c be 8a fd d1 ba 00 9f 21 | ||||
67 5e 8f 6c 77 a4 a2 c3 01 95 60 1f 6f 0a 08 52 97 8b d4 3d 28 20 7d 44 | ||||
48 65 02 ff 7b dd a6 | ||||
And because certificates are identified by a hash value with the | ||||
'x5t' parameter, ID_CRED_I is the following: | ||||
ID_CRED_I = { 34 : COSE_CertHash }. In this example, the hash | ||||
algorithm used is SHA-2 256-bit with hash truncated to 64-bits (value | ||||
-15). The hash value is calculated over the CBOR unencoded CRED_I. | ||||
ID_CRED_I = | ||||
{ | ||||
34: [-15, h'705D5845F36FC6A6'] | ||||
} | ||||
which when encoded as a CBOR map becomes: | ||||
ID_CRED_I (14 bytes) | ||||
a1 18 22 82 2e 48 70 5d 58 45 f3 6f c6 a6 | ||||
Since no external authorization data is exchanged: | ||||
EAD_3 (0 bytes) | ||||
The plaintext of the COSE_Encrypt is the empty string: | ||||
P_3m (0 bytes) | ||||
The associated data is the following: [ "Encrypt0", << ID_CRED_I >>, | ||||
<< TH_3, CRED_I, ? EAD_3 >> ]. | ||||
A_3m (CBOR-encoded) (164 bytes) | ||||
83 68 45 6e 63 72 79 70 74 30 4e a1 18 22 82 2e 48 70 5d 58 45 f3 6f c6 | ||||
a6 58 89 58 20 f2 4d 18 ca fc e3 74 d4 e3 73 63 29 c1 52 ab 3a ea 9c 7c | ||||
0f 65 0c 30 70 b6 f5 1e 68 e2 ae bb 60 58 65 54 13 20 4c 3e bc 34 28 a6 | ||||
cf 57 e2 4c 9d ef 59 65 17 70 44 9b ce 7e c6 56 1e 52 43 3a a5 5e 71 f1 | ||||
fa 34 b2 2a 9c a4 a1 e1 29 24 ea e1 d1 76 60 88 09 84 49 cb 84 8f fc 79 | ||||
5f 88 af c4 9c be 8a fd d1 ba 00 9f 21 67 5e 8f 6c 77 a4 a2 c3 01 95 60 | ||||
1f 6f 0a 08 52 97 8b d4 3d 28 20 7d 44 48 65 02 ff 7b dd a6 | ||||
Info for K_3m is computed as follows: | ||||
info for K_3m = | ||||
[ | ||||
10, | ||||
h'F24D18CAFCE374D4E3736329C152AB3AEA9C7C0F650C3070B6F51E68E2AEBB60', | ||||
"K_3m", | ||||
16 | ||||
] | ||||
Which as a CBOR encoded data item is: | ||||
info for K_3m (CBOR-encoded) (42 bytes) | ||||
84 0a 58 20 f2 4d 18 ca fc e3 74 d4 e3 73 63 29 c1 52 ab 3a ea 9c 7c 0f | ||||
65 0c 30 70 b6 f5 1e 68 e2 ae bb 60 64 4b 5f 33 6d 10 | ||||
From these parameters, K_3m is computed. Key K_3m is the output of | ||||
HKDF-Expand(PRK_4x3m, info, L), where L is the length of K_2m, so 16 | ||||
bytes. | ||||
K_3m (16 bytes) | ||||
83 a9 c3 88 02 91 2e 7f 8f 0d 2b 84 14 d1 e5 2c | ||||
Nonce IV_3m is the output of HKDF-Expand(PRK_4x3m, info, L), where L | ||||
= 13 bytes. | ||||
Info for IV_3m is defined as follows: | ||||
info for IV_3m = | ||||
[ | ||||
10, | ||||
h'F24D18CAFCE374D4E3736329C152AB3AEA9C7C0F650C3070B6F51E68E2AEBB60', | ||||
"IV_3m", | ||||
13 | ||||
] | ||||
Which as a CBOR encoded data item is: | ||||
info for IV_3m (CBOR-encoded) (43 bytes) | ||||
84 0a 58 20 f2 4d 18 ca fc e3 74 d4 e3 73 63 29 c1 52 ab 3a ea 9c 7c 0f | ||||
65 0c 30 70 b6 f5 1e 68 e2 ae bb 60 65 49 56 5f 33 6d 0d | ||||
From these parameters, IV_3m is computed: | ||||
IV_3m (13 bytes) | ||||
9c 83 9c 0e e8 36 42 50 5a 8e 1c 9f b2 | ||||
MAC_3 is the 'ciphertext' of the COSE_Encrypt0: | ||||
MAC_3 (CBOR unencoded) (8 bytes) | ||||
2f a1 e3 9e ae 7d 5f 8d | ||||
Since the method = 0, Signature_or_MAC_3 is a signature. The | ||||
algorithm with selected cipher suite 0 is Ed25519. | ||||
o The message M_3 to be signed = [ "Signature1", << ID_CRED_I >>, | ||||
<< TH_3, CRED_I >>, MAC_3 ], i.e. ID_CRED_I encoded as CBOR bstr, | ||||
the concatenation of the CBOR byte strings TH_3 and CRED_I wrapped | ||||
as a CBOR bstr, and MAC_3 encoded as a CBOR bstr. | ||||
o The signing key is the private authentication key of the | ||||
Initiator. | ||||
M_3 = | ||||
[ | ||||
"Signature1", | ||||
h'A11822822E48705D5845F36FC6A6', | ||||
h'5820F24D18CAFCE374D4E3736329C152AB3AEA9C7C0F650C3070B6F51E68E2AEBB6 | ||||
058655413204C3EBC3428A6CF57E24C9DEF59651770449BCE7EC6561E52433AA55E71 | ||||
F1FA34B22A9CA4A1E12924EAE1D1766088098449CB848FFC795F88AFC49CBE8AFDD1B | ||||
A009F21675E8F6C77A4A2C30195601F6F0A0852978BD43D28207D44486502FF7BDD | ||||
A6', | ||||
h'2FA1E39EAE7D5F8D'] | ||||
Which as a CBOR encoded data item is: | ||||
M_3 (175 bytes) | ||||
84 6a 53 69 67 6e 61 74 75 72 65 31 4e a1 18 22 82 2e 48 70 5d 58 45 f3 | ||||
6f c6 a6 58 89 58 20 f2 4d 18 ca fc e3 74 d4 e3 73 63 29 c1 52 ab 3a ea | ||||
9c 7c 0f 65 0c 30 70 b6 f5 1e 68 e2 ae bb 60 58 65 54 13 20 4c 3e bc 34 | ||||
28 a6 cf 57 e2 4c 9d ef 59 65 17 70 44 9b ce 7e c6 56 1e 52 43 3a a5 5e | ||||
71 f1 fa 34 b2 2a 9c a4 a1 e1 29 24 ea e1 d1 76 60 88 09 84 49 cb 84 8f | ||||
fc 79 5f 88 af c4 9c be 8a fd d1 ba 00 9f 21 67 5e 8f 6c 77 a4 a2 c3 01 | ||||
95 60 1f 6f 0a 08 52 97 8b d4 3d 28 20 7d 44 48 65 02 ff 7b dd a6 48 2f | ||||
a1 e3 9e ae 7d 5f 8d | ||||
From there, the 64 byte signature can be computed: | ||||
Signature_or_MAC_3 (CBOR unencoded) (64 bytes) | ||||
ab 9f 7b bd eb c4 eb f8 a3 d3 04 17 9b cc a3 9d 9c 8a 76 73 65 76 fb 3c | ||||
32 d2 fa c7 e2 59 34 e5 33 dc c7 02 2e 4d 68 61 c8 f5 fe cb e9 2d 17 4e | ||||
b2 be af 0a 59 a4 15 84 37 2f 43 2e 6b f4 7b 04 | ||||
Finally, the outer COSE_Encrypt0 is computed. | ||||
The plaintext is the CBOR Sequence of the items ID_CRED_I and the | ||||
CBOR encoded Signature_or_MAC_3, in this order (EAD_3 is empty). | ||||
P_3ae (CBOR Sequence) (80 bytes) | ||||
a1 18 22 82 2e 48 70 5d 58 45 f3 6f c6 a6 58 40 ab 9f 7b bd eb c4 eb f8 | ||||
a3 d3 04 17 9b cc a3 9d 9c 8a 76 73 65 76 fb 3c 32 d2 fa c7 e2 59 34 e5 | ||||
33 dc c7 02 2e 4d 68 61 c8 f5 fe cb e9 2d 17 4e b2 be af 0a 59 a4 15 84 | ||||
37 2f 43 2e 6b f4 7b 04 | ||||
The Associated data A is the following: Associated data A = [ | ||||
"Encrypt0", h'', TH_3 ] | ||||
A_3ae (CBOR-encoded) (45 bytes) | ||||
83 68 45 6e 63 72 79 70 74 30 40 58 20 f2 4d 18 ca fc e3 74 d4 e3 73 63 | ||||
29 c1 52 ab 3a ea 9c 7c 0f 65 0c 30 70 b6 f5 1e 68 e2 ae bb 60 | ||||
Key K_3ae is the output of HKDF-Expand(PRK_3e2m, info, L). | ||||
info is defined as follows: | ||||
info for K_3ae = | ||||
[ | ||||
10, | ||||
h'F24D18CAFCE374D4E3736329C152AB3AEA9C7C0F650C3070B6F51E68E2AEBB60', | ||||
"K_3ae", | ||||
16 | ||||
] | ||||
Which as a CBOR encoded data item is: | ||||
info for K_3ae (CBOR-encoded) (43 bytes) | ||||
84 0a 58 20 f2 4d 18 ca fc e3 74 d4 e3 73 63 29 c1 52 ab 3a ea 9c 7c 0f | ||||
65 0c 30 70 b6 f5 1e 68 e2 ae bb 60 65 4b 5f 33 61 65 10 | ||||
L is the length of K_3ae, so 16 bytes. | ||||
From these parameters, K_3ae is computed: | ||||
K_3ae (16 bytes) | ||||
b8 79 9f e3 d1 50 4f d8 eb 22 c4 72 62 cd bb 05 | ||||
Nonce IV_3ae is the output of HKDF-Expand(PRK_3e2m, info, L). | ||||
info is defined as follows: | ||||
info for IV_3ae = | ||||
[ | ||||
10, | ||||
h'F24D18CAFCE374D4E3736329C152AB3AEA9C7C0F650C3070B6F51E68E2AEBB60', | ||||
"IV_3ae", | ||||
13 | ||||
] | ||||
Which as a CBOR encoded data item is: | ||||
info for IV_3ae (CBOR-encoded) (44 bytes) | ||||
84 0a 58 20 f2 4d 18 ca fc e3 74 d4 e3 73 63 29 c1 52 ab 3a ea 9c 7c 0f | ||||
65 0c 30 70 b6 f5 1e 68 e2 ae bb 60 66 49 56 5f 33 61 65 0d | ||||
L is the length of IV_3ae, so 13 bytes. | ||||
From these parameters, IV_3ae is computed: | ||||
IV_3ae (13 bytes) | ||||
74 c7 de 41 b8 4a 5b b7 19 0a 85 98 dc | ||||
Using the parameters above, the 'ciphertext' CIPHERTEXT_3 can be | ||||
computed: | ||||
CIPHERTEXT_3 (CBOR unencoded) (88 bytes) | ||||
f5 f6 de bd 82 14 05 1c d5 83 c8 40 96 c4 80 1d eb f3 5b 15 36 3d d1 6e | ||||
bd 85 30 df dc fb 34 fc d2 eb 6c ad 1d ac 66 a4 79 fb 38 de aa f1 d3 0a | ||||
7e 68 17 a2 2a b0 4f 3d 5b 1e 97 2a 0d 13 ea 86 c6 6b 60 51 4c 96 57 ea | ||||
89 c5 7b 04 01 ed c5 aa 8b bc ab 81 3c c5 d6 e7 | ||||
From the parameter above, message_3 is computed, as the CBOR Sequence | ||||
of the following CBOR encoded data items: (C_R, CIPHERTEXT_3). | ||||
message_3 = | ||||
( | ||||
-24, | ||||
h'F5F6DEBD8214051CD583C84096C4801DEBF35B15363DD16EBD8530DFDCFB34FCD2EB | ||||
6CAD1DAC66A479FB38DEAAF1D30A7E6817A22AB04F3D5B1E972A0D13EA86C66B60514C | ||||
9657EA89C57B0401EDC5AA8BBCAB813CC5D6E7' | ||||
) | ||||
Which encodes to the following byte string: | ||||
message_3 (CBOR Sequence) (91 bytes) | ||||
37 58 58 f5 f6 de bd 82 14 05 1c d5 83 c8 40 96 c4 80 1d eb f3 5b 15 36 | ||||
3d d1 6e bd 85 30 df dc fb 34 fc d2 eb 6c ad 1d ac 66 a4 79 fb 38 de aa | ||||
f1 d3 0a 7e 68 17 a2 2a b0 4f 3d 5b 1e 97 2a 0d 13 ea 86 c6 6b 60 51 4c | ||||
96 57 ea 89 c5 7b 04 01 ed c5 aa 8b bc ab 81 3c c5 d6 e7 | ||||
D.1.4. OSCORE Security Context Derivation | ||||
From here, the Initiator and the Responder can derive an OSCORE | ||||
Security Context, using the EDHOC-Exporter interface. | ||||
From TH_3 and CIPHERTEXT_3, compute the input to the transcript hash | ||||
TH_4 = H( TH_3, CIPHERTEXT_3 ), as a CBOR Sequence of these 2 data | ||||
items. | ||||
Input to calculate TH_4 (CBOR Sequence) (124 bytes) | ||||
58 20 f2 4d 18 ca fc e3 74 d4 e3 73 63 29 c1 52 ab 3a ea 9c 7c 0f 65 0c | ||||
30 70 b6 f5 1e 68 e2 ae bb 60 58 58 f5 f6 de bd 82 14 05 1c d5 83 c8 40 | ||||
96 c4 80 1d eb f3 5b 15 36 3d d1 6e bd 85 30 df dc fb 34 fc d2 eb 6c ad | ||||
1d ac 66 a4 79 fb 38 de aa f1 d3 0a 7e 68 17 a2 2a b0 4f 3d 5b 1e 97 2a | ||||
0d 13 ea 86 c6 6b 60 51 4c 96 57 ea 89 c5 7b 04 01 ed c5 aa 8b bc ab 81 | ||||
3c c5 d6 e7 | ||||
And from there, compute the transcript hash TH_4 = SHA-256(TH_3 , | ||||
CIPHERTEXT_4) | ||||
TH_4 (CBOR unencoded) (32 bytes) | ||||
3b 69 a6 7f ec 7e 73 6c c1 a9 52 6c da 00 02 d4 09 f5 b9 ea 0a 2b e9 60 | ||||
51 a6 e3 0d 93 05 fd 51 | ||||
The Master Secret and Master Salt are derived as follows: | ||||
Master Secret = EDHOC-Exporter( "OSCORE Master Secret", 16 ) = EDHOC- | ||||
KDF(PRK_4x3m, TH_4, "OSCORE Master Secret", 16) = HKDF-Expand( | ||||
PRK_4x3m, info_ms, 16 ) | ||||
Master Salt = EDHOC-Exporter( "OSCORE Master Salt", 8 ) = EDHOC- | ||||
KDF(PRK_4x3m, TH_4, "OSCORE Master Salt", 8) = HKDF-Expand( PRK_4x3m, | ||||
info_salt, 8 ) | ||||
info_ms for OSCORE Master Secret is defined as follows: | ||||
info_ms = [ | ||||
10, | ||||
h'3B69A67FEC7E736CC1A9526CDA0002D409F5B9EA0A2BE96051A6E30D9305FD51', | ||||
"OSCORE Master Secret", | ||||
16 | ||||
] | ||||
Which as a CBOR encoded data item is: | ||||
info_ms for OSCORE Master Secret (CBOR-encoded) (58 bytes) | ||||
84 0a 58 20 3b 69 a6 7f ec 7e 73 6c c1 a9 52 6c da 00 02 d4 09 f5 b9 ea | ||||
0a 2b e9 60 51 a6 e3 0d 93 05 fd 51 74 4f 53 43 4f 52 45 20 4d 61 73 74 | ||||
65 72 20 53 65 63 72 65 74 10 | ||||
info_salt for OSCORE Master Salt is defined as follows: | ||||
info_salt = [ | ||||
10, | ||||
h'3B69A67FEC7E736CC1A9526CDA0002D409F5B9EA0A2BE96051A6E30D9305FD51', | ||||
"OSCORE Master Salt", | ||||
8 | ||||
] | ||||
Which as a CBOR encoded data item is: | ||||
info for OSCORE Master Salt (CBOR-encoded) (56 Bytes) | ||||
84 0a 58 20 3b 69 a6 7f ec 7e 73 6c c1 a9 52 6c da 00 02 d4 09 f5 b9 ea | ||||
0a 2b e9 60 51 a6 e3 0d 93 05 fd 51 72 4f 53 43 4f 52 45 20 4d 61 73 74 | ||||
65 72 20 53 61 6c 74 08 | ||||
From these parameters, OSCORE Master Secret and OSCORE Master Salt | ||||
are computed: | ||||
OSCORE Master Secret (16 bytes) | ||||
96 aa 88 ce 86 5e ba 1f fa f3 89 64 13 2c c4 42 | ||||
OSCORE Master Salt (8 bytes) | ||||
5e c3 ee 41 7c fb ba e9 | ||||
The client's OSCORE Sender ID is C_R and the server's OSCORE Sender | ||||
ID is C_I. | ||||
Client's OSCORE Sender ID (1 byte) | ||||
00 | ||||
Server's OSCORE Sender ID (1 byte) | ||||
09 | ||||
The AEAD Algorithm and the hash algorithm are the application AEAD | ||||
and hash algorithms in the selected cipher suite. | ||||
OSCORE AEAD Algorithm (int) | ||||
10 | ||||
OSCORE Hash Algorithm (int) | ||||
-16 | ||||
D.2. Test Vectors for EDHOC Authenticated with Static Diffie-Hellman | ||||
Keys | ||||
EDHOC with static Diffie-Hellman keys and raw public keys is used. | ||||
In this test vector, a key identifier is used to identify the raw | ||||
public key. The optional C_1 in message_1 is omitted. No external | ||||
authorization data is sent in the message exchange. | ||||
method (Static DH Based Authentication) | ||||
3 | ||||
CoAP is used as transport and the Initiator acts as CoAP client: | ||||
corr (the Initiator can correlate message_1 and message_2) | ||||
1 | ||||
From there, METHOD_CORR has the following value: | ||||
METHOD_CORR (4 * method + corr) (int) | ||||
13 | ||||
The Initiator indicates only one cipher suite in the (potentially | ||||
truncated) list of cipher suites. | ||||
Supported Cipher Suites (1 byte) | ||||
00 | ||||
The Initiator selected the indicated cipher suite. | ||||
Selected Cipher Suite (int) | ||||
0 | ||||
Cipher suite 0 is supported by both the Initiator and the Responder, | ||||
see Section 3.6. | ||||
D.2.1. Message_1 | ||||
The Initiator generates its ephemeral key pair. | ||||
X (Initiator's ephemeral private key) (32 bytes) | ||||
ae 11 a0 db 86 3c 02 27 e5 39 92 fe b8 f5 92 4c 50 d0 a7 ba 6e ea b4 ad | ||||
1f f2 45 72 f4 f5 7c fa | ||||
G_X (Initiator's ephemeral public key, CBOR unencoded) (32 bytes) | ||||
8d 3e f5 6d 1b 75 0a 43 51 d6 8a c2 50 a0 e8 83 79 0e fc 80 a5 38 a4 44 | ||||
ee 9e 2b 57 e2 44 1a 7c | ||||
The Initiator chooses a connection identifier C_I: | ||||
Connection identifier chosen by Initiator (1 byte) | ||||
16 | ||||
Note that since C_I is a byte string in the interval h'00' to h'2f', | ||||
it is encoded as the corresponding integer - 24, i.e. 0x16 = 22, 22 - | ||||
24 = -2, and -2 in CBOR encoding is equal to 0x21. | ||||
C_I (1 byte) | ||||
21 | ||||
Since no external authorization data is sent: | ||||
EAD_1 (0 bytes) | ||||
Since the list of supported cipher suites needs to contain the | ||||
selected cipher suite, the initiator truncates the list of supported | ||||
cipher suites to one cipher suite only, 00. | ||||
Because one single selected cipher suite is conveyed, it is encoded | ||||
as an int instead of an array: | ||||
SUITES_I (int) | ||||
0 | ||||
message_1 is constructed as the CBOR Sequence of the data items above | ||||
encoded as CBOR. In CBOR diagnostic notation: | ||||
message_1 = | ||||
( | ||||
13, | ||||
0, | ||||
h'8D3EF56D1B750A4351D68AC250A0E883790EFC80A538A444EE9E2B57E2441A7C', | ||||
-2 | ||||
) | ||||
Which as a CBOR encoded data item is: | ||||
message_1 (CBOR Sequence) (37 bytes) | ||||
0d 00 58 20 8d 3e f5 6d 1b 75 0a 43 51 d6 8a c2 50 a0 e8 83 79 0e fc 80 | ||||
a5 38 a4 44 ee 9e 2b 57 e2 44 1a 7c 21 | ||||
D.2.2. Message_2 | ||||
Since METHOD_CORR mod 4 equals 1, C_I is omitted from data_2. | ||||
The Responder generates the following ephemeral key pair. | ||||
Y (Responder's ephemeral private key) (32 bytes) | ||||
c6 46 cd dc 58 12 6e 18 10 5f 01 ce 35 05 6e 5e bc 35 f4 d4 cc 51 07 49 | ||||
a3 a5 e0 69 c1 16 16 9a | ||||
G_Y (Responder's ephemeral public key, CBOR unencoded) (32 bytes) | ||||
52 fb a0 bd c8 d9 53 dd 86 ce 1a b2 fd 7c 05 a4 65 8c 7c 30 af db fc 33 | ||||
01 04 70 69 45 1b af 35 | ||||
From G_X and Y or from G_Y and X the ECDH shared secret is computed: | ||||
G_XY (ECDH shared secret) (32 bytes) | ||||
de fc 2f 35 69 10 9b 3d 1f a4 a7 3d c5 e2 fe b9 e1 15 0d 90 c2 5e e2 f0 | ||||
66 c2 d8 85 f4 f8 ac 4e | ||||
The key and nonce for calculating the 'ciphertext' are calculated as | ||||
follows, as specified in Section 4. | ||||
HKDF SHA-256 is the HKDF used (as defined by cipher suite 0). | ||||
PRK_2e = HMAC-SHA-256(salt, G_XY) | ||||
Salt is the empty byte string. | ||||
salt (0 bytes) | ||||
From there, PRK_2e is computed: | ||||
PRK_2e (32 bytes) | ||||
93 9f cb 05 6d 2e 41 4f 1b ec 61 04 61 99 c2 c7 63 d2 7f 0c 3d 15 fa 16 | ||||
71 fa 13 4e 0d c5 a0 4d | ||||
The Responder's static Diffie-Hellman key pair is the following: | ||||
R (Responder's private authentication key) (32 bytes) | ||||
bb 50 1a ac 67 b9 a9 5f 97 e0 ed ed 6b 82 a6 62 93 4f bb fc 7a d1 b7 4c | ||||
1f ca d6 6a 07 94 22 d0 | ||||
G_R (Responder's public authentication key) (32 bytes) | ||||
a3 ff 26 35 95 be b3 77 d1 a0 ce 1d 04 da d2 d4 09 66 ac 6b cb 62 20 51 | ||||
b8 46 59 18 4d 5d 9a 32 | ||||
Since the Responder authenticates with a static Diffie-Hellman key, | ||||
PRK_3e2m = HKDF-Extract( PRK_2e, G_RX ), where G_RX is the ECDH | ||||
shared secret calculated from G_R and X, or G_X and R. | ||||
From the Responder's authentication key and the Initiator's ephemeral | ||||
key (see Appendix D.2.1), the ECDH shared secret G_RX is calculated. | ||||
G_RX (ECDH shared secret) (32 bytes) | ||||
21 c7 ef f4 fb 69 fa 4b 67 97 d0 58 84 31 5d 84 11 a3 fd a5 4f 6d ad a6 | ||||
1d 4f cd 85 e7 90 66 68 | ||||
PRK_3e2m (32 bytes) | ||||
75 07 7c 69 1e 35 01 2d 48 bc 24 c8 4f 2b ab 89 f5 2f ac 03 fe dd 81 3e | ||||
43 8c 93 b1 0b 39 93 07 | ||||
The Responder chooses a connection identifier C_R. | ||||
Connection identifier chosen by Responder (1 byte) | ||||
00 | ||||
Note that since C_R is a byte string in the interval h'00' to h'2f', | ||||
it is encoded as the corresponding integer - 24, i.e. 0x00 = 0, 0 - | ||||
24 = -24, and -24 in CBOR encoding is equal to 0x37. | ||||
C_R (1 byte) | ||||
37 | ||||
Data_2 is constructed as the CBOR Sequence of G_Y and C_R. | ||||
data_2 = | ||||
( | ||||
h'52FBA0BDC8D953DD86CE1AB2FD7C05A4658C7C30AFDBFC3301047069451BAF35', | ||||
-24 | ||||
) | ||||
Which as a CBOR encoded data item is: | ||||
data_2 (CBOR Sequence) (35 bytes) | ||||
58 20 52 fb a0 bd c8 d9 53 dd 86 ce 1a b2 fd 7c 05 a4 65 8c 7c 30 af db | ||||
fc 33 01 04 70 69 45 1b af 35 37 | ||||
From data_2 and message_1, compute the input to the transcript hash | ||||
TH_2 = H( H(message_1), data_2 ), as a CBOR Sequence of these 2 data | ||||
items. | ||||
Input to calculate TH_2 (CBOR Sequence) (72 bytes) | ||||
0d 00 58 20 8d 3e f5 6d 1b 75 0a 43 51 d6 8a c2 50 a0 e8 83 79 0e fc 80 | ||||
a5 38 a4 44 ee 9e 2b 57 e2 44 1a 7c 21 58 20 52 fb a0 bd c8 d9 53 dd 86 | ||||
ce 1a b2 fd 7c 05 a4 65 8c 7c 30 af db fc 33 01 04 70 69 45 1b af 35 37 | ||||
And from there, compute the transcript hash TH_2 = SHA-256( | ||||
H(message_1), data_2 ) | ||||
TH_2 (CBOR unencoded) (32 bytes) | ||||
de cf d6 4a 36 67 64 0a 02 33 b0 4a a8 aa 91 f6 89 56 b8 a5 36 d0 cf 8c | ||||
73 a6 e8 a7 c3 62 1e 26 | ||||
The Responder's subject name is the empty string: | ||||
Responder's subject name (text string) | ||||
"" | ||||
ID_CRED_R is the following: | ||||
ID_CRED_R = | ||||
{ | ||||
4: h'05' | ||||
} | ||||
ID_CRED_R (4 bytes) | ||||
a1 04 41 05 | ||||
CRED_R is the following COSE_Key: | ||||
{ | ||||
1: 1, | ||||
-1: 4, | ||||
-2: h'A3FF263595BEB377D1A0CE1D04DAD2D40966AC6BCB622051B84659184D5D9A32, | ||||
"subject name": "" | ||||
} | ||||
Which encodes to the following byte string: | ||||
CRED_R (54 bytes) | ||||
a4 01 01 20 04 21 58 20 a3 ff 26 35 95 be b3 77 d1 a0 ce 1d 04 da d2 d4 | ||||
09 66 ac 6b cb 62 20 51 b8 46 59 18 4d 5d 9a 32 6c 73 75 62 6a 65 63 74 | ||||
20 6e 61 6d 65 60 | ||||
Since no external authorization data is sent: | ||||
EAD_2 (0 bytes) | ||||
The plaintext is defined as the empty string: | ||||
P_2m (0 bytes) | ||||
The Enc_structure is defined as follows: [ "Encrypt0", | ||||
<< ID_CRED_R >>, << TH_2, CRED_R >> ], so ID_CRED_R is encoded as a | ||||
CBOR bstr, and the concatenation of the CBOR byte strings TH_2 and | ||||
CRED_R is wrapped in a CBOR bstr. | ||||
A_2m = | ||||
[ | ||||
"Encrypt0", | ||||
h'A1044105', | ||||
h'5820DECFD64A3667640A0233B04AA8AA91F68956B8A536D0CF8C73A6E8A7C3621E2 | ||||
6A401012004215820A3FF263595BEB377D1A0CE1D04DAD2D40966AC6BCB622051B846 | ||||
59184D5D9A326C7375626A656374206E616D6560' | ||||
] | ||||
Which encodes to the following byte string to be used as Additional | ||||
Authenticated Data: | ||||
A_2m (CBOR-encoded) (105 bytes) | ||||
83 68 45 6e 63 72 79 70 74 30 44 a1 04 41 05 58 58 58 20 de cf d6 4a 36 | ||||
67 64 0a 02 33 b0 4a a8 aa 91 f6 89 56 b8 a5 36 d0 cf 8c 73 a6 e8 a7 c3 | ||||
62 1e 26 a4 01 01 20 04 21 58 20 a3 ff 26 35 95 be b3 77 d1 a0 ce 1d 04 | ||||
da d2 d4 09 66 ac 6b cb 62 20 51 b8 46 59 18 4d 5d 9a 32 6c 73 75 62 6a | ||||
65 63 74 20 6e 61 6d 65 60 | ||||
info for K_2m is defined as follows: | ||||
info for K_2m = | ||||
[ | ||||
10, | ||||
h'DECFD64A3667640A0233B04AA8AA91F68956B8A536D0CF8C73A6E8A7C3621E26', | ||||
"K_2m", | ||||
16 | ||||
] | ||||
Which as a CBOR encoded data item is: | ||||
info for K_2m (CBOR-encoded) (42 bytes) | ||||
84 0a 58 20 de cf d6 4a 36 67 64 0a 02 33 b0 4a a8 aa 91 f6 89 56 b8 a5 | ||||
36 d0 cf 8c 73 a6 e8 a7 c3 62 1e 26 64 4b 5f 32 6d 10 | ||||
From these parameters, K_2m is computed. Key K_2m is the output of | ||||
HKDF-Expand(PRK_3e2m, info, L), where L is the length of K_2m, so 16 | ||||
bytes. | ||||
K_2m (16 bytes) | ||||
4e cd ef ba d8 06 81 8b 62 51 b9 d7 86 78 bc 76 | ||||
info for IV_2m is defined as follows: | ||||
info for IV_2m = | ||||
[ | ||||
10, | ||||
h'A51C76463E8AE58FD3B8DC5EDE1E27143CC92D223EACD9E5FF6E3FAC876658A5', | ||||
"IV_2m", | ||||
13 | ||||
] | ||||
Which as a CBOR encoded data item is: | ||||
info for IV_2m (CBOR-encoded) (43 bytes) | ||||
84 0a 58 20 de cf d6 4a 36 67 64 0a 02 33 b0 4a a8 aa 91 f6 89 56 b8 a5 | ||||
36 d0 cf 8c 73 a6 e8 a7 c3 62 1e 26 65 49 56 5f 32 6d 0d | ||||
From these parameters, IV_2m is computed. IV_2m is the output of | ||||
HKDF-Expand(PRK_3e2m, info, L), where L is the length of IV_2m, so 13 | ||||
bytes. | ||||
IV_2m (13 bytes) | ||||
e9 b8 e4 b1 bd 02 f4 9a 82 0d d3 53 4f | ||||
Finally, COSE_Encrypt0 is computed from the parameters above. | ||||
o protected header = CBOR-encoded ID_CRED_R | ||||
o external_aad = A_2m | ||||
o empty plaintext = P_2m | ||||
MAC_2 is the 'ciphertext' of the COSE_Encrypt0 with empty plaintext. | ||||
In case of cipher suite 0 the AEAD is AES-CCM truncated to 8 bytes: | ||||
MAC_2 (CBOR unencoded) (8 bytes) | ||||
42 e7 99 78 43 1e 6b 8f | ||||
Since method = 2, Signature_or_MAC_2 is MAC_2: | ||||
Signature_or_MAC_2 (CBOR unencoded) (8 bytes) | ||||
42 e7 99 78 43 1e 6b 8f | ||||
CIPHERTEXT_2 is the ciphertext resulting from XOR between plaintext | ||||
and KEYSTREAM_2 which is derived from TH_2 and the pseudorandom key | ||||
PRK_2e. | ||||
The plaintext is the CBOR Sequence of the items ID_CRED_R and the | ||||
CBOR encoded Signature_or_MAC_2, in this order (EAD_2 is empty). | ||||
Note that since ID_CRED_R contains a single 'kid' parameter, i.e., | ||||
ID_CRED_R = { 4 : kid_R }, only the byte string kid_R is conveyed in | ||||
the plaintext encoded as a bstr_identifier. kid_R is encoded as the | ||||
corresponding integer - 24, i.e. 0x05 = 5, 5 - 24 = -19, and -19 in | ||||
CBOR encoding is equal to 0x32. | ||||
The plaintext is the following: | ||||
P_2e (CBOR Sequence) (10 bytes) | ||||
32 48 42 e7 99 78 43 1e 6b 8f | ||||
KEYSTREAM_2 = HKDF-Expand( PRK_2e, info, length ), where length is | ||||
the length of the plaintext, so 10. | ||||
info for KEYSTREAM_2 = | ||||
[ | ||||
10, | ||||
h'DECFD64A3667640A0233B04AA8AA91F68956B8A536D0CF8C73A6E8A7C3621E26', | ||||
"KEYSTREAM_2", | ||||
10 | ||||
] | ||||
Which as a CBOR encoded data item is: | ||||
info for KEYSTREAM_2 (CBOR-encoded) (49 bytes) | ||||
84 0a 58 20 de cf d6 4a 36 67 64 0a 02 33 b0 4a a8 aa 91 f6 89 56 b8 a5 | ||||
36 d0 cf 8c 73 a6 e8 a7 c3 62 1e 26 6b 4b 45 59 53 54 52 45 41 4d 5f 32 | ||||
0a | ||||
From there, KEYSTREAM_2 is computed: | ||||
KEYSTREAM_2 (10 bytes) | ||||
91 b9 ff ba 9b f5 5a d1 57 16 | ||||
Using the parameters above, the ciphertext CIPHERTEXT_2 can be | ||||
computed: | ||||
CIPHERTEXT_2 (CBOR unencoded) (10 bytes) | ||||
a3 f1 bd 5d 02 8d 19 cf 3c 99 | ||||
message_2 is the CBOR Sequence of data_2 and CIPHERTEXT_2, in this | ||||
order: | ||||
message_2 = | ||||
( | ||||
data_2, | ||||
h'A3F1BD5D028D19CF3C99' | ||||
) | ||||
Which as a CBOR encoded data item is: | ||||
message_2 (CBOR Sequence) (46 bytes) | ||||
58 20 52 fb a0 bd c8 d9 53 dd 86 ce 1a b2 fd 7c 05 a4 65 8c 7c 30 af db | ||||
fc 33 01 04 70 69 45 1b af 35 37 4a a3 f1 bd 5d 02 8d 19 cf 3c 99 | ||||
D.2.3. Message_3 | ||||
Since corr equals 1, C_R is not omitted from data_3. | ||||
The Initiator's static Diffie-Hellman key pair is the following: | ||||
I (Initiator's private authentication key) (32 bytes) | ||||
2b be a6 55 c2 33 71 c3 29 cf bd 3b 1f 02 c6 c0 62 03 38 37 b8 b5 90 99 | ||||
a4 43 6f 66 60 81 b0 8e | ||||
G_I (Initiator's public authentication key, CBOR unencoded) (32 bytes) | ||||
2c 44 0c c1 21 f8 d7 f2 4c 3b 0e 41 ae da fe 9c aa 4f 4e 7a bb 83 5e c3 | ||||
0f 1d e8 8a db 96 ff 71 | ||||
HKDF SHA-256 is the HKDF used (as defined by cipher suite 0). | ||||
From the Initiator's authentication key and the Responder's ephemeral | ||||
key (see Appendix D.2.2), the ECDH shared secret G_IY is calculated. | ||||
G_IY (ECDH shared secret) (32 bytes) | ||||
cb ff 8c d3 4a 81 df ec 4c b6 5d 9a 57 2e bd 09 64 45 0c 78 56 3d a4 98 | ||||
1d 80 d3 6c 8b 1a 75 2a | ||||
PRK_4x3m = HMAC-SHA-256 (PRK_3e2m, G_IY). | ||||
PRK_4x3m (32 bytes) | ||||
02 56 2f 1f 01 78 5c 0a a5 f5 94 64 0c 49 cb f6 9f 72 2e 9e 6c 57 83 7d | ||||
8e 15 79 ec 45 fe 64 7a | ||||
data 3 is equal to C_R. | ||||
data_3 (CBOR Sequence) (1 byte) | ||||
37 | ||||
From data_3, CIPHERTEXT_2, and TH_2, compute the input to the | ||||
transcript hash TH_3 = H( H(TH_2 , CIPHERTEXT_2), data_3), as a CBOR | ||||
Sequence of these 2 data items. | ||||
Input to calculate TH_3 (CBOR Sequence) (46 bytes) | ||||
58 20 de cf d6 4a 36 67 64 0a 02 33 b0 4a a8 aa 91 f6 89 56 b8 a5 36 d0 | ||||
cf 8c 73 a6 e8 a7 c3 62 1e 26 4a a3 f1 bd 5d 02 8d 19 cf 3c 99 37 | ||||
And from there, compute the transcript hash TH_3 = SHA-256( H(TH_2 , | ||||
CIPHERTEXT_2), data_3) | ||||
TH_3 (CBOR unencoded) (32 bytes) | ||||
b6 cd 80 4f c4 b9 d7 ca c5 02 ab d7 7c da 74 e4 1c b0 11 82 d7 cb 8b 84 | ||||
db 03 ff a5 83 a3 5f cb | ||||
The initiator's subject name is the empty string: | ||||
Initiator's subject name (text string) | ||||
"" | ||||
And its credential is: | ||||
ID_CRED_I = | ||||
{ | ||||
4: h'23' | ||||
} | ||||
ID_CRED_I (4 bytes) | ||||
a1 04 41 23 | ||||
CRED_I is the following COSE_Key: | ||||
{ | ||||
1:1, | ||||
-1:4, | ||||
-2:h'2C440CC121F8D7F24C3B0E41AEDAFE9CAA4F4E7ABB835EC30F1DE88ADB96FF71', | ||||
"subject name":"" | ||||
} | ||||
Which encodes to the following byte string: | ||||
CRED_I (54 bytes) | ||||
a4 01 01 20 04 21 58 20 2c 44 0c c1 21 f8 d7 f2 4c 3b 0e 41 ae da fe 9c | ||||
aa 4f 4e 7a bb 83 5e c3 0f 1d e8 8a db 96 ff 71 6c 73 75 62 6a 65 63 74 | ||||
20 6e 61 6d 65 60 | ||||
Since no external authorization data is exchanged: | ||||
EAD_3 (0 bytes) | ||||
The plaintext of the COSE_Encrypt is the empty string: | ||||
P_3m (0 bytes) | ||||
The associated data is the following: [ "Encrypt0", << ID_CRED_I >>, | ||||
<< TH_3, CRED_I, ? EAD_3 >> ]. | ||||
A_3m (CBOR-encoded) (105 bytes) | ||||
83 68 45 6e 63 72 79 70 74 30 44 a1 04 41 23 58 58 58 20 b6 cd 80 4f c4 | ||||
b9 d7 ca c5 02 ab d7 7c da 74 e4 1c b0 11 82 d7 cb 8b 84 db 03 ff a5 83 | ||||
a3 5f cb a4 01 01 20 04 21 58 20 2c 44 0c c1 21 f8 d7 f2 4c 3b 0e 41 ae | ||||
da fe 9c aa 4f 4e 7a bb 83 5e c3 0f 1d e8 8a db 96 ff 71 6c 73 75 62 6a | ||||
65 63 74 20 6e 61 6d 65 60 | ||||
Info for K_3m is computed as follows: | ||||
info for K_3m = | ||||
[ | ||||
10, | ||||
h'B6CD804FC4B9D7CAC502ABD77CDA74E41CB01182D7CB8B84DB03FFA583A35FCB', | ||||
"K_3m", | ||||
16 | ||||
] | ||||
Which as a CBOR encoded data item is: | ||||
info for K_3m (CBOR-encoded) (42 bytes) | ||||
84 0a 58 20 b6 cd 80 4f c4 b9 d7 ca c5 02 ab d7 7c da 74 e4 1c b0 11 82 | ||||
d7 cb 8b 84 db 03 ff a5 83 a3 5f cb 64 4b 5f 33 6d 10 | ||||
From these parameters, K_3m is computed. Key K_3m is the output of | ||||
HKDF-Expand(PRK_4x3m, info, L), where L is the length of K_2m, so 16 | ||||
bytes. | ||||
K_3m (16 bytes) | ||||
02 c7 e7 93 89 9d 90 d1 28 28 10 26 96 94 c9 58 | ||||
Nonce IV_3m is the output of HKDF-Expand(PRK_4x3m, info, L), where L | ||||
= 13 bytes. | ||||
Info for IV_3m is defined as follows: | ||||
info for IV_3m = | ||||
[ | ||||
10, | ||||
h'B6CD804FC4B9D7CAC502ABD77CDA74E41CB01182D7CB8B84DB03FFA583A35FCB', | ||||
"IV_3m", | ||||
13 | ||||
] | ||||
Which as a CBOR encoded data item is: | ||||
info for IV_3m (CBOR-encoded) (43 bytes) | ||||
84 0a 58 20 b6 cd 80 4f c4 b9 d7 ca c5 02 ab d7 7c da 74 e4 1c b0 11 82 | ||||
d7 cb 8b 84 db 03 ff a5 83 a3 5f cb 65 49 56 5f 33 6d 0d | ||||
From these parameters, IV_3m is computed: | ||||
IV_3m (13 bytes) | ||||
0d a7 cc 3a 6f 9a b2 48 52 ce 8b 37 a6 | ||||
MAC_3 is the 'ciphertext' of the COSE_Encrypt0 with empty plaintext. | ||||
In case of cipher suite 0 the AEAD is AES-CCM truncated to 8 bytes: | ||||
MAC_3 (CBOR unencoded) (8 bytes) | ||||
ee 59 8e a6 61 17 dc c3 | ||||
Since method = 3, Signature_or_MAC_3 is MAC_3: | ||||
Signature_or_MAC_3 (CBOR unencoded) (8 bytes) | ||||
ee 59 8e a6 61 17 dc c3 | ||||
Finally, the outer COSE_Encrypt0 is computed. | ||||
The plaintext is the CBOR Sequence of the items ID_CRED_I and the | ||||
CBOR encoded Signature_or_MAC_3, in this order (EAD_3 is empty). | ||||
Note that since ID_CRED_I contains a single 'kid' parameter, i.e., | ||||
ID_CRED_I = { 4 : kid_I }, only the byte string kid_I is conveyed in | ||||
the plaintext encoded as a bstr_identifier. kid_I is encoded as the | ||||
corresponding integer - 24, i.e. 0x23 = 35, 35 - 24 = 11, and 11 in | ||||
CBOR encoding is equal to 0x0b. | ||||
P_3ae (CBOR Sequence) (10 bytes) | ||||
0b 48 ee 59 8e a6 61 17 dc c3 | ||||
The Associated data A is the following: Associated data A = [ | ||||
"Encrypt0", h'', TH_3 ] | ||||
A_3ae (CBOR-encoded) (45 bytes) | ||||
83 68 45 6e 63 72 79 70 74 30 40 58 20 b6 cd 80 4f c4 b9 d7 ca c5 02 ab | ||||
d7 7c da 74 e4 1c b0 11 82 d7 cb 8b 84 db 03 ff a5 83 a3 5f cb | ||||
Key K_3ae is the output of HKDF-Expand(PRK_3e2m, info, L). | ||||
info is defined as follows: | ||||
info for K_3ae = | ||||
[ | ||||
10, | ||||
h'B6CD804FC4B9D7CAC502ABD77CDA74E41CB01182D7CB8B84DB03FFA583A35FCB', | ||||
"K_3ae", | ||||
16 | ||||
] | ||||
Which as a CBOR encoded data item is: | ||||
info for K_3ae (CBOR-encoded) (43 bytes) | ||||
84 0a 58 20 b6 cd 80 4f c4 b9 d7 ca c5 02 ab d7 7c da 74 e4 1c b0 11 82 | ||||
d7 cb 8b 84 db 03 ff a5 83 a3 5f cb 65 4b 5f 33 61 65 10 | ||||
L is the length of K_3ae, so 16 bytes. | ||||
From these parameters, K_3ae is computed: | ||||
K_3ae (16 bytes) | ||||
6b a4 c8 83 1d e3 ae 23 e9 8e f7 35 08 d0 95 86 | ||||
Nonce IV_3ae is the output of HKDF-Expand(PRK_3e2m, info, L). | ||||
info is defined as follows: | ||||
info for IV_3ae = | ||||
[ | ||||
10, | ||||
h'97D8AD42334833EB25B960A5EB0704505F89671A0168AA1115FAF92D9E67EF04', | ||||
"IV_3ae", | ||||
13 | ||||
] | ||||
Which as a CBOR encoded data item is: | ||||
info for IV_3ae (CBOR-encoded) (44 bytes) | ||||
84 0a 58 20 b6 cd 80 4f c4 b9 d7 ca c5 02 ab d7 7c da 74 e4 1c b0 11 82 | ||||
d7 cb 8b 84 db 03 ff a5 83 a3 5f cb 66 49 56 5f 33 61 65 0d | ||||
L is the length of IV_3ae, so 13 bytes. | ||||
From these parameters, IV_3ae is computed: | ||||
IV_3ae (13 bytes) | ||||
6c 6d 0f e1 1e 9a 1a f3 7b 87 84 55 10 | ||||
Using the parameters above, the 'ciphertext' CIPHERTEXT_3 can be | ||||
computed: | ||||
CIPHERTEXT_3 (CBOR unencoded) (18 bytes) | ||||
d5 53 5f 31 47 e8 5f 1c fa cd 9e 78 ab f9 e0 a8 1b bf | ||||
From the parameter above, message_3 is computed, as the CBOR Sequence | ||||
of the following items: (C_R, CIPHERTEXT_3). | ||||
message_3 = | ||||
( | ||||
-24, | ||||
h'D5535F3147E85F1CFACD9E78ABF9E0A81BBF' | ||||
) | ||||
Which encodes to the following byte string: | ||||
message_3 (CBOR Sequence) (20 bytes) | ||||
37 52 d5 53 5f 31 47 e8 5f 1c fa cd 9e 78 ab f9 e0 a8 1b bf | ||||
D.2.4. OSCORE Security Context Derivation | ||||
From here, the Initiator and the Responder can derive an OSCORE | ||||
Security Context, using the EDHOC-Exporter interface. | ||||
From TH_3 and CIPHERTEXT_3, compute the input to the transcript hash | ||||
TH_4 = H( TH_3, CIPHERTEXT_3 ), as a CBOR Sequence of these 2 data | ||||
items. | ||||
Input to calculate TH_4 (CBOR Sequence) (53 bytes) | ||||
58 20 b6 cd 80 4f c4 b9 d7 ca c5 02 ab d7 7c da 74 e4 1c b0 11 82 d7 cb | ||||
8b 84 db 03 ff a5 83 a3 5f cb 52 d5 53 5f 31 47 e8 5f 1c fa cd 9e 78 ab | ||||
f9 e0 a8 1b bf | ||||
And from there, compute the transcript hash TH_4 = SHA-256(TH_3 , | ||||
CIPHERTEXT_4) | ||||
TH_4 (CBOR unencoded) (32 bytes) | ||||
7c cf de dc 2c 10 ca 03 56 e9 57 b9 f6 a5 92 e0 fa 74 db 2a b5 4f 59 24 | ||||
40 96 f9 a2 ac 56 d2 07 | ||||
The Master Secret and Master Salt are derived as follows: | ||||
Master Secret = EDHOC-Exporter( "OSCORE Master Secret", 16 ) = EDHOC- | ||||
KDF(PRK_4x3m, TH_4, "OSCORE Master Secret", 16) = HKDF-Expand( | ||||
PRK_4x3m, info_ms, 16 ) | ||||
Master Salt = EDHOC-Exporter( "OSCORE Master Salt", 8 ) = EDHOC- | ||||
KDF(PRK_4x3m, TH_4, "OSCORE Master Salt", 8) = HKDF-Expand( PRK_4x3m, | ||||
info_salt, 8 ) | ||||
info_ms for OSCORE Master Secret is defined as follows: | ||||
info_ms = [ | ||||
10, | ||||
h'7CCFDEDC2C10CA0356E957B9F6A592E0FA74DB2AB54F59244096F9A2AC56D207', | ||||
"OSCORE Master Secret", | ||||
16 | ||||
] | ||||
Which as a CBOR encoded data item is: | ||||
info_ms for OSCORE Master Secret (CBOR-encoded) (58 bytes) | ||||
84 0a 58 20 7c cf de dc 2c 10 ca 03 56 e9 57 b9 f6 a5 92 e0 fa 74 db 2a | ||||
b5 4f 59 24 40 96 f9 a2 ac 56 d2 07 74 4f 53 43 4f 52 45 20 4d 61 73 74 | ||||
65 72 20 53 65 63 72 65 74 10 | ||||
info_salt for OSCORE Master Salt is defined as follows: | ||||
info_salt = [ | ||||
10, | ||||
h'7CCFDEDC2C10CA0356E957B9F6A592E0FA74DB2AB54F59244096F9A2AC56D207', | ||||
"OSCORE Master Salt", | ||||
8 | ||||
] | ||||
Which as a CBOR encoded data item is: | ||||
info for OSCORE Master Salt (CBOR-encoded) (56 Bytes) | ||||
84 0a 58 20 7c cf de dc 2c 10 ca 03 56 e9 57 b9 f6 a5 92 e0 fa 74 db 2a | ||||
b5 4f 59 24 40 96 f9 a2 ac 56 d2 07 72 4f 53 43 4f 52 45 20 4d 61 73 74 | ||||
65 72 20 53 61 6c 74 08 | ||||
From these parameters, OSCORE Master Secret and OSCORE Master Salt | ||||
are computed: | ||||
OSCORE Master Secret (16 bytes) | ||||
c3 4a 50 6d 0e bf bd 17 03 04 86 13 5f 9c b3 50 | ||||
OSCORE Master Salt (8 bytes) | ||||
c2 24 34 9d 9b 34 ca 8c | ||||
The client's OSCORE Sender ID is C_R and the server's OSCORE Sender | * ECDH ephemeral public keys of type EC2 or OKP in message_1 and | |||
ID is C_I. | message_2 consist of the COSE_Key parameter named 'x', see | |||
Section 7.1 and 7.2 of [I-D.ietf-cose-rfc8152bis-algs] | ||||
Client's OSCORE Sender ID (1 byte) | * Certain ciphertexts in message_2 and message_3 consist of a subset | |||
00 | of the single recipient encrypted data object COSE_Encrypt0, which | |||
is described in Sections 5.2-5.3 of | ||||
[I-D.ietf-cose-rfc8152bis-struct]. The ciphertext is computed | ||||
over the plaintext and associated data, using an encryption key | ||||
and a nonce. The associated data is an Enc_structure consisting | ||||
of protected headers and externally supplied data (external_aad). | ||||
Server's OSCORE Sender ID (1 byte) | * Signatures in message_2 of method 0 and 2, and in message_3 of | |||
16 | method 0 and 1, consist of a subset of the single signer data | |||
The AEAD Algorithm and the hash algorithm are the application AEAD | object COSE_Sign1, which is described in Sections 4.2-4.4 of | |||
and hash algorithms in the selected cipher suite. | [I-D.ietf-cose-rfc8152bis-struct]. The signature is computed over | |||
a Sig_structure containing payload, protected headers and | ||||
externally supplied data (external_aad) using a private signature | ||||
key and verified using the corresponding public signature key. | ||||
OSCORE AEAD Algorithm (int) | Appendix D. Test Vectors | |||
10 | ||||
OSCORE Hash Algorithm (int) | TBD | |||
-16 | ||||
Appendix E. Applicability Template | Appendix E. Applicability Template | |||
This appendix contains an example of an applicability statement, see | This appendix contains a rudimentary example of an applicability | |||
Section 3.9. | statement, see Section 3.9. | |||
For use of EDHOC in the XX protocol, the following assumptions are | For use of EDHOC in the XX protocol, the following assumptions are | |||
made on the parameters: | made: | |||
o METHOD = 1 (I uses signature key, R uses static DH key.) | 1. Transfer in CoAP as specified in Appendix A.3 with requests | |||
expected by the CoAP server (= Responder) at /app1-edh, no | ||||
Content-Format needed. | ||||
o EDHOC requests are expected by the server at /app1-edh, no | 2. METHOD = 1 (I uses signature key, R uses static DH key.) | |||
Content-Format needed. | 3. CRED_I is an IEEE 802.1AR IDevID encoded as a C509 certificate of | |||
type 0 [I-D.ietf-cose-cbor-encoded-cert]. | ||||
o CRED_I is an 802.1AR IDevID encoded as a C509 Certificate of type | * R acquires CRED_I out-of-band, indicated in EAD_1. | |||
0 [I-D.ietf-cose-cbor-encoded-cert]. | ||||
* R acquires CRED_I out-of-band, indicated in EAD_1 | * ID_CRED_I = {4: h''} is a 'kid' with value empty byte string. | |||
* ID_CRED_I = {4: h''} is a kid with value empty byte string | 4. CRED_R is a UCCS of type OKP as specified in Section 3.5.2. | |||
o CRED_R is a COSE_Key of type OKP as specified in Section 3.5.4. | * The CBOR map has parameters 1 (kty), -1 (crv), and -2 | |||
(x-coordinate). | ||||
* The CBOR map has parameters 1 (kty), -1 (crv), and -2 | * ID_CRED_R = CRED_R | |||
(x-coordinate). | ||||
o ID_CRED_R = CRED_R | 5. External authorization data is defined and processed as specified | |||
in [I-D.selander-ace-ake-authz]. | ||||
o No use of message_4: the application sends protected messages from | 6. EUI-64 used as identity of endpoint. | |||
R to I. | ||||
o External authorization data is defined and processed as specified | 7. No use of message_4: the application sends protected messages | |||
in [I-D.selander-ace-ake-authz]. | from R to I. | |||
Appendix F. EDHOC Message Deduplication | Appendix F. EDHOC Message Deduplication | |||
EDHOC by default assumes that message duplication is handled by the | EDHOC by default assumes that message duplication is handled by the | |||
transport, in this section exemplified with CoAP. | transport, in this section exemplified with CoAP. | |||
Deduplication of CoAP messages is described in Section 4.5 of | Deduplication of CoAP messages is described in Section 4.5 of | |||
[RFC7252]. This handles the case when the same Confirmable (CON) | [RFC7252]. This handles the case when the same Confirmable (CON) | |||
message is received multiple times due to missing acknowledgement on | message is received multiple times due to missing acknowledgement on | |||
CoAP messaging layer. The recommended processing in [RFC7252] is | CoAP messaging layer. The recommended processing in [RFC7252] is | |||
skipping to change at page 97, line 39 ¶ | skipping to change at page 70, line 25 ¶ | |||
to be able to resend it. An EDHOC implementation MAY keep the | to be able to resend it. An EDHOC implementation MAY keep the | |||
protocol state to be able to recreate the previously sent EDHOC | protocol state to be able to recreate the previously sent EDHOC | |||
message and resend it. The previous message or protocol state MUST | message and resend it. The previous message or protocol state MUST | |||
NOT be kept longer than what is required for retransmission, for | NOT be kept longer than what is required for retransmission, for | |||
example, in the case of CoAP transport, no longer than the | example, in the case of CoAP transport, no longer than the | |||
EXCHANGE_LIFETIME (see Section 4.8.2 of [RFC7252]). | EXCHANGE_LIFETIME (see Section 4.8.2 of [RFC7252]). | |||
Note that the requirements in Section 5.1 still apply because | Note that the requirements in Section 5.1 still apply because | |||
duplicate messages are not processed by the EDHOC state machine: | duplicate messages are not processed by the EDHOC state machine: | |||
o EDHOC messages SHALL be processed according to the current | * EDHOC messages SHALL be processed according to the current | |||
protocol state. | protocol state. | |||
o Different instances of the same message MUST NOT be processed in | * Different instances of the same message MUST NOT be processed in | |||
one session. | one session. | |||
Appendix G. Transports Not Natively Providing Correlation | Appendix G. Transports Not Natively Providing Correlation | |||
Protocols that do not natively provide full correlation between a | Protocols that do not natively provide full correlation between a | |||
series of messages can send the C_I and C_R identifiers along as | series of messages can send the C_I and C_R identifiers along as | |||
needed. | needed. | |||
The transport over CoAP (Appendix A.3) can serve as a blueprint for | The transport over CoAP (Appendix A.3) can serve as a blueprint for | |||
other server-client protocols: The client prepends the C_x which the | other server-client protocols: The client prepends the C_x which the | |||
server selected (or, for message 1, a sentinel null value which is | server selected (or, for message 1, the CBOR simple value 'true' | |||
not a valid C_x) to any request message it sends. The server does | which is not a valid C_x) to any request message it sends. The | |||
not send any such indicator, as responses are matched to request by | server does not send any such indicator, as responses are matched to | |||
the client-server protocol design. | request by the client-server protocol design. | |||
Protocols that do not provide any correlation at all can prescribe | Protocols that do not provide any correlation at all can prescribe | |||
prepending of the peer's chosen C_x to all messages. | prepending of the peer's chosen C_x to all messages. | |||
Appendix H. Change Log | Appendix H. Change Log | |||
RFC Editor: Please remove this appendix. | ||||
Main changes: | Main changes: | |||
o From -07 to -08: | * From -08 to -09: | |||
* Prepended C_x moved from the EDHOC protocol itself to the | - G_Y and CIPHERTEXT_2 are now included in one CBOR bstr | |||
- MAC_2 and MAC_3 are now generated with EDHOC-KDF | ||||
- Info field "context" is now general and explicit in EDHOC-KDF | ||||
- Restructured Section 4, Key Derivation | ||||
- Added EDHOC MAC length to cipher suite for use with static DH | ||||
- More details on the use of CWT and UCCS | ||||
- Restructured and clarified Section 3.5, Authentication | ||||
Parameters | ||||
- Replaced 'kid2' with extension of 'kid' | ||||
- EAD encoding now supports multiple ead types in one message | ||||
- Clarified EAD type | ||||
- Updated message sizes | ||||
- Replaced "perfect forward secrecy" with "forward secrecy" | ||||
- Updated security considerations | ||||
- Replaced prepended 'null' with 'true' in the CoAP transport of | ||||
message_1 | ||||
- Updated CDDL definitions | ||||
- Expanded on the use of COSE | ||||
* From -07 to -08: | ||||
- Prepended C_x moved from the EDHOC protocol itself to the | ||||
transport mapping | transport mapping | |||
* METHOD_CORR renamed to METHOD, corr removed | - METHOD_CORR renamed to METHOD, corr removed | |||
* Removed bstr_identifier and use bstr / int instead; C_x can now | - Removed bstr_identifier and use bstr / int instead; C_x can now | |||
be int without any implied bstr semantics | be int without any implied bstr semantics | |||
* Defined COSE header parameter 'kid2' with value type bstr / int | - Defined COSE header parameter 'kid2' with value type bstr / int | |||
for use with ID_CRED_x | for use with ID_CRED_x | |||
* Updated message sizes | - Updated message sizes | |||
* New cipher suites with AES-GCM and ChaCha20 / Poly1305 | - New cipher suites with AES-GCM and ChaCha20 / Poly1305 | |||
* Changed from one- to two-byte identifier of CNSA compliant | - Changed from one- to two-byte identifier of CNSA compliant | |||
suite | suite | |||
* Separate sections on transport and connection id with further | - Separate sections on transport and connection id with further | |||
sub-structure | sub-structure | |||
* Moved back key derivation for OSCORE from draft-ietf-core- | - Moved back key derivation for OSCORE from draft-ietf-core- | |||
oscore-edhoc | oscore-edhoc | |||
* OSCORE and CoAP specific processing moved to new appendix | - OSCORE and CoAP specific processing moved to new appendix | |||
* Message 4 section moved to message processing section | - Message 4 section moved to message processing section | |||
o From -06 to -07: | * From -06 to -07: | |||
* Changed transcript hash definition for TH_2 and TH_3 | - Changed transcript hash definition for TH_2 and TH_3 | |||
* Removed "EDHOC signature algorithm curve" from cipher suite | - Removed "EDHOC signature algorithm curve" from cipher suite | |||
* New IANA registry "EDHOC Exporter Label" | ||||
* New application defined parameter "context" in EDHOC-Exporter | - New IANA registry "EDHOC Exporter Label" | |||
* Changed normative language for failure from MUST to SHOULD send | - New application defined parameter "context" in EDHOC-Exporter | |||
- Changed normative language for failure from MUST to SHOULD send | ||||
error | error | |||
* Made error codes non-negative and 0 for success | - Made error codes non-negative and 0 for success | |||
* Added detail on success error code | - Added detail on success error code | |||
* Aligned terminology "protocol instance" -> "session" | - Aligned terminology "protocol instance" -> "session" | |||
* New appendix on compact EC point representation | - New appendix on compact EC point representation | |||
* Added detail on use of ephemeral public keys | - Added detail on use of ephemeral public keys | |||
* Moved key derivation for OSCORE to draft-ietf-core-oscore-edhoc | - Moved key derivation for OSCORE to draft-ietf-core-oscore-edhoc | |||
* Additional security considerations | - Additional security considerations | |||
* Renamed "Auxililary Data" as "External Authorization Data" | - Renamed "Auxililary Data" as "External Authorization Data" | |||
* Added encrypted EAD_4 to message_4 | - Added encrypted EAD_4 to message_4 | |||
o From -05 to -06: | * From -05 to -06: | |||
* New section 5.2 "Message Processing Outline" | - New section 5.2 "Message Processing Outline" | |||
* Optional inital byte C_1 = null in message_1 | - Optional inital byte C_1 = null in message_1 | |||
* New format of error messages, table of error codes, IANA | - New format of error messages, table of error codes, IANA | |||
registry | registry | |||
* Change of recommendation transport of error in CoAP | - Change of recommendation transport of error in CoAP | |||
* Merge of content in 3.7 and appendix C into new section 3.7 | - Merge of content in 3.7 and appendix C into new section 3.7 | |||
"Applicability Statement" | "Applicability Statement" | |||
* Requiring use of deterministic CBOR | - Requiring use of deterministic CBOR | |||
* New section on message deduplication | - New section on message deduplication | |||
* New appendix containin all CDDL definitions | - New appendix containin all CDDL definitions | |||
* New appendix with change log | - New appendix with change log | |||
* Removed section "Other Documents Referencing EDHOC" | - Removed section "Other Documents Referencing EDHOC" | |||
* Clarifications based on review comments | ||||
o From -04 to -05: | - Clarifications based on review comments | |||
* EDHOC-Rekey-FS -> EDHOC-KeyUpdate | * From -04 to -05: | |||
* Clarification of cipher suite negotiation | - EDHOC-Rekey-FS -> EDHOC-KeyUpdate | |||
* Updated security considerations | - Clarification of cipher suite negotiation | |||
* Updated test vectors | - Updated security considerations | |||
* Updated applicability statement template | - Updated test vectors | |||
o From -03 to -04: | - Updated applicability statement template | |||
* Restructure of section 1 | * From -03 to -04: | |||
* Added references to C509 Certificates | - Restructure of section 1 | |||
* Change in CIPHERTEXT_2 -> plaintext XOR KEYSTREAM_2 (test | - Added references to C509 Certificates | |||
vector not updated) | ||||
* "K_2e", "IV_2e" -> KEYSTREAM_2 | - Change in CIPHERTEXT_2 -> plaintext XOR KEYSTREAM_2 (test | |||
vector not updated) | ||||
* Specified optional message 4 | - "K_2e", "IV_2e" -> KEYSTREAM_2 | |||
- Specified optional message 4 | ||||
* EDHOC-Exporter-FS -> EDHOC-Rekey-FS | - EDHOC-Exporter-FS -> EDHOC-Rekey-FS | |||
* Less constrained devices SHOULD implement both suite 0 and 2 | - Less constrained devices SHOULD implement both suite 0 and 2 | |||
* Clarification of error message | - Clarification of error message | |||
* Added exporter interface test vector | - Added exporter interface test vector | |||
o From -02 to -03: | * From -02 to -03: | |||
* Rearrangements of section 3 and beginning of section 4 | - Rearrangements of section 3 and beginning of section 4 | |||
* Key derivation new section 4 | - Key derivation new section 4 | |||
* Cipher suites 4 and 5 added | - Cipher suites 4 and 5 added | |||
* EDHOC-EXPORTER-FS - generate a new PRK_4x3m from an old one | - EDHOC-EXPORTER-FS - generate a new PRK_4x3m from an old one | |||
* Change in CIPHERTEXT_2 -> COSE_Encrypt0 without tag (no change | - Change in CIPHERTEXT_2 -> COSE_Encrypt0 without tag (no change | |||
to test vector) | to test vector) | |||
* Clarification of error message | - Clarification of error message | |||
* New appendix C applicability statement | - New appendix C applicability statement | |||
o From -01 to -02: | * From -01 to -02: | |||
* New section 1.2 Use of EDHOC | - New section 1.2 Use of EDHOC | |||
* Clarification of identities | - Clarification of identities | |||
* New section 4.3 clarifying bstr_identifier | - New section 4.3 clarifying bstr_identifier | |||
* Updated security considerations | - Updated security considerations | |||
* Updated text on cipher suite negotiation and key confirmation | - Updated text on cipher suite negotiation and key confirmation | |||
* Test vector for static DH | - Test vector for static DH | |||
o From -00 to -01: | * From -00 to -01: | |||
* Removed PSK method | - Removed PSK method | |||
* Removed references to certificate by value | - Removed references to certificate by value | |||
Acknowledgments | Acknowledgments | |||
The authors want to thank Christian Amsuess, Alessandro Bruni, | The authors want to thank Christian Amsuess, Alessandro Bruni, | |||
Karthikeyan Bhargavan, Timothy Claeys, Martin Disch, Theis Groenbech | Karthikeyan Bhargavan, Timothy Claeys, Martin Disch, Theis Groenbech | |||
Petersen, Dan Harkins, Klaus Hartke, Russ Housley, Stefan Hristozov, | Petersen, Dan Harkins, Klaus Hartke, Russ Housley, Stefan Hristozov, | |||
Alexandros Krontiris, Ilari Liusvaara, Karl Norrman, Salvador Perez, | Alexandros Krontiris, Ilari Liusvaara, Karl Norrman, Salvador Perez, | |||
Eric Rescorla, Michael Richardson, Thorvald Sahl Joergensen, Jim | Eric Rescorla, Michael Richardson, Thorvald Sahl Joergensen, Jim | |||
Schaad, Carsten Schuermann, Ludwig Seitz, Stanislav Smyshlyaev, | Schaad, Carsten Schuermann, Ludwig Seitz, Stanislav Smyshlyaev, | |||
Valery Smyslov, Peter van der Stok, Rene Struik, Vaishnavi | Valery Smyslov, Peter van der Stok, Rene Struik, Vaishnavi | |||
skipping to change at page 101, line 49 ¶ | skipping to change at page 75, line 25 ¶ | |||
Malisa Vucinic for reviewing and commenting on intermediate versions | Malisa Vucinic for reviewing and commenting on intermediate versions | |||
of the draft. We are especially indebted to Jim Schaad for his | of the draft. We are especially indebted to Jim Schaad for his | |||
continuous reviewing and implementation of different versions of the | continuous reviewing and implementation of different versions of the | |||
draft. | draft. | |||
Work on this document has in part been supported by the H2020 project | Work on this document has in part been supported by the H2020 project | |||
SIFIS-Home (grant agreement 952652). | SIFIS-Home (grant agreement 952652). | |||
Authors' Addresses | Authors' Addresses | |||
Goeran Selander | Göran Selander | |||
Ericsson AB | Ericsson AB | |||
SE-164 80 Stockholm | ||||
Sweden | ||||
Email: goran.selander@ericsson.com | Email: goran.selander@ericsson.com | |||
John Preuss Mattsson | ||||
John Preuß Mattsson | ||||
Ericsson AB | Ericsson AB | |||
SE-164 80 Stockholm | ||||
Sweden | ||||
Email: john.mattsson@ericsson.com | Email: john.mattsson@ericsson.com | |||
Francesca Palombini | Francesca Palombini | |||
Ericsson AB | Ericsson AB | |||
SE-164 80 Stockholm | ||||
Sweden | ||||
Email: francesca.palombini@ericsson.com | Email: francesca.palombini@ericsson.com | |||
End of changes. 451 change blocks. | ||||
2460 lines changed or deleted | 1131 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |