rfc9529.original | rfc9529.txt | |||
---|---|---|---|---|
LAKE Working Group G. Selander | Internet Engineering Task Force (IETF) G. Selander | |||
Internet-Draft J. Preuß Mattsson | Request for Comments: 9529 J. Preuß Mattsson | |||
Intended status: Informational Ericsson | Category: Informational Ericsson | |||
Expires: 30 July 2024 M. Serafin | ISSN: 2070-1721 M. Serafin | |||
ASSA ABLOY | ASSA ABLOY | |||
M. Tiloca | M. Tiloca | |||
RISE | RISE AB | |||
M. Vučinić | M. Vučinić | |||
Inria | Inria | |||
27 January 2024 | March 2024 | |||
Traces of EDHOC | Traces of Ephemeral Diffie-Hellman Over COSE (EDHOC) | |||
draft-ietf-lake-traces-09 | ||||
Abstract | Abstract | |||
This document contains some example traces of Ephemeral Diffie- | This document contains example traces of Ephemeral Diffie-Hellman | |||
Hellman Over COSE (EDHOC). | Over COSE (EDHOC). | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This document is not an Internet Standards Track specification; it is | |||
provisions of BCP 78 and BCP 79. | published for informational purposes. | |||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Not all documents | |||
approved by the IESG are candidates for any level of Internet | ||||
Standard; see Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on 30 July 2024. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9529. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2024 IETF Trust and the persons identified as the | Copyright (c) 2024 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 (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
1.1. Setup . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.1. Setup | |||
1.2. Terminology and Requirements Language . . . . . . . . . . 4 | 1.2. Requirements Language | |||
2. Authentication with Signatures, X.509 Certificates Identified | 2. Authentication with Signatures, X.509 Identified by 'x5t' | |||
by 'x5t' . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2.1. message_1 | |||
2.1. message_1 . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2.2. message_2 | |||
2.2. message_2 . . . . . . . . . . . . . . . . . . . . . . . . 6 | 2.3. message_3 | |||
2.3. message_3 . . . . . . . . . . . . . . . . . . . . . . . . 14 | 2.4. message_4 | |||
2.4. message_4 . . . . . . . . . . . . . . . . . . . . . . . . 23 | 2.5. PRK_out and PRK_exporter | |||
2.5. PRK_out and PRK_exporter . . . . . . . . . . . . . . . . 25 | 2.6. OSCORE Parameters | |||
2.6. OSCORE Parameters . . . . . . . . . . . . . . . . . . . . 26 | 2.7. Key Update | |||
2.7. Key Update . . . . . . . . . . . . . . . . . . . . . . . 28 | 2.8. Certificates | |||
2.8. Certificates . . . . . . . . . . . . . . . . . . . . . . 29 | 3. Authentication with Static DH, CCS Identified by 'kid' | |||
3. Authentication with Static DH, CCS Identified by 'kid' . . . 31 | 3.1. message_1 (First Time) | |||
3.1. message_1 (first time) . . . . . . . . . . . . . . . . . 32 | 3.2. error | |||
3.2. error . . . . . . . . . . . . . . . . . . . . . . . . . . 33 | 3.3. message_1 (Second Time) | |||
3.3. message_1 (second time) . . . . . . . . . . . . . . . . . 33 | 3.4. message_2 | |||
3.4. message_2 . . . . . . . . . . . . . . . . . . . . . . . . 35 | 3.5. message_3 | |||
3.5. message_3 . . . . . . . . . . . . . . . . . . . . . . . . 42 | 3.6. message_4 | |||
3.6. message_4 . . . . . . . . . . . . . . . . . . . . . . . . 49 | 3.7. PRK_out and PRK_exporter | |||
3.7. PRK_out and PRK_exporter . . . . . . . . . . . . . . . . 51 | 3.8. OSCORE Parameters | |||
3.8. OSCORE Parameters . . . . . . . . . . . . . . . . . . . . 53 | 3.9. Key Update | |||
3.9. Key Update . . . . . . . . . . . . . . . . . . . . . . . 54 | 4. Invalid Traces | |||
4. Invalid Traces . . . . . . . . . . . . . . . . . . . . . . . 56 | 4.1. Encoding Errors | |||
4.1. Encoding Errors . . . . . . . . . . . . . . . . . . . . . 56 | 4.2. Cryptography-Related Errors | |||
4.2. Crypto-related Errors . . . . . . . . . . . . . . . . . . 57 | 4.3. Non-deterministic CBOR | |||
4.3. Non-deterministic CBOR . . . . . . . . . . . . . . . . . 59 | 5. Security Considerations | |||
5. Security Considerations . . . . . . . . . . . . . . . . . . . 59 | 6. IANA Considerations | |||
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 59 | 7. References | |||
7. References . . . . . . . . . . . . . . . . . . . . . . . . . 59 | 7.1. Normative References | |||
7.1. Normative References . . . . . . . . . . . . . . . . . . 59 | 7.2. Informative References | |||
7.2. Informative References . . . . . . . . . . . . . . . . . 60 | Acknowledgments | |||
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 61 | Authors' Addresses | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 61 | ||||
1. Introduction | 1. Introduction | |||
EDHOC [I-D.ietf-lake-edhoc] is a lightweight authenticated key | EDHOC [RFC9528] is a lightweight authenticated key exchange protocol | |||
exchange protocol designed for highly constrained settings. This | designed for highly constrained settings. This document contains | |||
document contains annotated traces of EDHOC sessions, with input, | annotated traces of EDHOC sessions with input, output, and | |||
output, and intermediate processing results to simplify testing of | intermediate processing results to simplify testing of | |||
implementations. The traces have been verified by two independent | implementations. The traces have been verified by two independent | |||
implementations. | implementations. | |||
1.1. Setup | 1.1. Setup | |||
EDHOC is run between an Initiator (I) and a Responder (R). The | EDHOC is run between an Initiator (I) and a Responder (R). The | |||
private/public key pairs and credentials of the Initiator and the | private/public key pairs and credentials of the Initiator and the | |||
Responder required to produce the protocol messages are shown in the | Responder required to produce the protocol messages are shown in the | |||
traces when needed for the calculations. | traces when needed for the calculations. | |||
EDHOC messages and intermediate results are encoded in CBOR [RFC8949] | EDHOC messages and intermediate results are encoded in Concise Binary | |||
and can therefore be displayed in CBOR diagnostic notation using, | Object Representation (CBOR) [RFC8949] and can therefore be displayed | |||
e.g., the CBOR playground [CborMe], which makes them easy to parse | in CBOR diagnostic notation using, e.g., the CBOR playground | |||
for humans. Credentials can also be encoded in CBOR, e.g. CBOR Web | [CborMe], which makes them easy to parse for humans. Credentials can | |||
Tokens (CWT) [RFC8392]. | also be encoded in CBOR, e.g., CBOR Web Tokens (CWTs) [RFC8392]. | |||
The document contains two traces: | The document contains two traces: | |||
* Section 2 - Authentication with signature keys identified by the | * Section 2 - Authentication with signature keys identified by the | |||
hash value of the X.509 certificates (provided in Section 2.8). | hash value of the X.509 certificates (provided in Section 2.8). | |||
The endpoints use EdDSA [RFC8032] for authentication and X25519 | The endpoints use Edwards-curve Digital Signature Algorithm | |||
[RFC7748] for ephemeral-ephemeral Diffie-Hellman key exchange. | (EdDSA) [RFC8032] for authentication and X25519 [RFC7748] for | |||
ephemeral-ephemeral Diffie-Hellman (DH) key exchange. | ||||
* Section 3 - Authentication with static Diffie-Hellman keys | * Section 3 - Authentication with static Diffie-Hellman keys | |||
identified by short key identifiers labelling CWT Claim Sets | identified by short key identifiers labeling CWT Claims Sets | |||
(CCSs) [RFC8392]. The endpoints use NIST P-256 [SP-800-186] for | (CCSs) [RFC8392]. The endpoints use NIST P-256 [SP-800-186] for | |||
both ephemeral-ephemeral and static-ephemeral Diffie-Hellman key | both ephemeral-ephemeral and ephemeral-static DH key exchange. | |||
exchange. This trace also illustrates the cipher suite | This trace also illustrates the cipher suite negotiation and | |||
negotiation, and provides an example of low protocol overhead, | provides an example of low protocol overhead with messages sizes | |||
with messages sizes of (39, 45, 19) bytes. | of 39, 45, and 19 bytes. | |||
Examples of invalid EDHOC messages are found in Section 4. | Examples of invalid EDHOC messages are found in Section 4. | |||
NOTE 1. The same name is used for hexadecimal byte strings and their | Note 1. The same name is used for hexadecimal byte strings and their | |||
CBOR encodings. The traces contain both the raw byte strings and the | CBOR encodings. The traces contain both the raw byte | |||
corresponding CBOR encoded data items. | strings and the corresponding CBOR-encoded data items. | |||
NOTE 2. If not clear from the context, remember that CBOR sequences | Note 2. If not clear from the context, remember that CBOR sequences | |||
and CBOR arrays assume CBOR encoded data items as elements. | and CBOR arrays assume CBOR-encoded data items as elements. | |||
NOTE 3. When the protocol transporting EDHOC messages does not | Note 3. When the protocol transporting EDHOC messages does not | |||
inherently provide correlation across all messages, like CoAP | inherently provide correlation across all messages, then | |||
[RFC7252], then some messages typically are prepended with connection | some messages are typically prepended with connection | |||
identifiers and potentially a message_1 indicator (see Sections 3.4.1 | identifiers and potentially a message_1 indicator (see | |||
and A.2 of [I-D.ietf-lake-edhoc]). Those bytes are not included in | Section 3.4.1 and Appendix A.2 of [RFC9528]). Those bytes | |||
the traces in this document. | are not included in the traces in this document. | |||
1.2. Terminology and Requirements Language | 1.2. 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 | "OPTIONAL" in this document are to be interpreted as described in | |||
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
2. Authentication with Signatures, X.509 Certificates Identified by | 2. Authentication with Signatures, X.509 Identified by 'x5t' | |||
'x5t' | ||||
In this example the Initiator (I) and Responder (R) are authenticated | In this example, the Initiator (I) and Responder (R) are | |||
with digital signatures (METHOD = 0). Both the Initiator and the | authenticated with digital signatures (METHOD = 0). Both the | |||
Responder support cipher suite 0, which determines the algorithms: | Initiator and the Responder support cipher suite 0, which determines | |||
the algorithms: | ||||
* EDHOC AEAD algorithm = AES-CCM-16-64-128 | * EDHOC AEAD algorithm = AES-CCM-16-64-128 | |||
* EDHOC hash algorithm = SHA-256 | * EDHOC hash algorithm = SHA-256 | |||
* EDHOC MAC length in bytes (Static DH) = 8 | * EDHOC Message Authentication Code (MAC) length in bytes (Static | |||
DH) = 8 | ||||
* EDHOC key exchange algorithm (ECDH curve) = X25519 | * EDHOC key exchange algorithm (ECDH curve) = X25519 | |||
* EDHOC signature algorithm = EdDSA | * EDHOC signature algorithm = EdDSA | |||
* Application AEAD algorithm = AES-CCM-16-64-128 | * application AEAD algorithm = AES-CCM-16-64-128 | |||
* Application hash algorithm = SHA-256 | * application hash algorithm = SHA-256 | |||
The public keys are represented with X.509 certificates identified by | The public keys are represented with X.509 certificates identified by | |||
the COSE header parameter 'x5t'. | the CBOR Object Signing and Encryption (COSE) header parameter 'x5t'. | |||
2.1. message_1 | 2.1. message_1 | |||
Both endpoints are authenticated with signatures, i.e., METHOD = 0: | Both endpoints are authenticated with signatures, i.e., METHOD = 0: | |||
METHOD (CBOR Data Item) (1 byte) | METHOD (CBOR Data Item) (1 byte) | |||
00 | 00 | |||
The Initiator selects cipher suite 0. A single cipher suite is | The Initiator selects cipher suite 0. A single cipher suite is | |||
encoded as an int: | encoded as an int: | |||
skipping to change at page 5, line 27 ¶ | skipping to change at line 206 ¶ | |||
G_X (Raw Value) (32 bytes) | G_X (Raw Value) (32 bytes) | |||
31 f8 2c 7b 5b 9c bb f0 f1 94 d9 13 cc 12 ef 15 32 d3 28 ef 32 63 2a | 31 f8 2c 7b 5b 9c bb f0 f1 94 d9 13 cc 12 ef 15 32 d3 28 ef 32 63 2a | |||
48 81 a1 c0 70 1e 23 7f 04 | 48 81 a1 c0 70 1e 23 7f 04 | |||
Initiator's ephemeral public key | Initiator's ephemeral public key | |||
G_X (CBOR Data Item) (34 bytes) | G_X (CBOR Data Item) (34 bytes) | |||
58 20 31 f8 2c 7b 5b 9c bb f0 f1 94 d9 13 cc 12 ef 15 32 d3 28 ef 32 | 58 20 31 f8 2c 7b 5b 9c bb f0 f1 94 d9 13 cc 12 ef 15 32 d3 28 ef 32 | |||
63 2a 48 81 a1 c0 70 1e 23 7f 04 | 63 2a 48 81 a1 c0 70 1e 23 7f 04 | |||
The Initiator selects its connection identifier C_I to be the byte | The Initiator selects its connection identifier C_I to be the byte | |||
string 0x2d, which since it is represented by the 1-byte CBOR int -14 | string 0x2d, which is encoded as 0x2d since it is represented by the | |||
is encoded as 0x2d: | 1-byte CBOR int -14: | |||
Connection identifier chosen by Initiator | Connection identifier chosen by the Initiator | |||
C_I (Raw Value) (1 byte) | C_I (Raw Value) (1 byte) | |||
2d | 2d | |||
Connection identifier chosen by Initiator | Connection identifier chosen by the Initiator | |||
C_I (CBOR Data Item) (1 byte) | C_I (CBOR Data Item) (1 byte) | |||
2d | 2d | |||
No external authorization data: | No external authorization data: | |||
EAD_1 (CBOR Sequence) (0 bytes) | EAD_1 (CBOR Sequence) (0 bytes) | |||
The Initiator constructs message_1: | The Initiator constructs message_1: | |||
message_1 = | message_1 = | |||
( | ( | |||
0, | 0, | |||
0, | 0, | |||
h'31f82c7b5b9cbbf0f194d913cc12ef1532d328ef32632a48 | h'31f82c7b5b9cbbf0f194d913cc12ef1532d328ef32632a48 | |||
81a1c0701e237f04', | 81a1c0701e237f04', | |||
-14 | -14 | |||
) | ) | |||
message_1 (CBOR Sequence) (37 bytes) | message_1 (CBOR Sequence) (37 bytes) | |||
00 00 58 20 31 f8 2c 7b 5b 9c bb f0 f1 94 d9 13 cc 12 ef 15 32 d3 28 | 00 00 58 20 31 f8 2c 7b 5b 9c bb f0 f1 94 d9 13 cc 12 ef 15 32 d3 28 | |||
ef 32 63 2a 48 81 a1 c0 70 1e 23 7f 04 2d | ef 32 63 2a 48 81 a1 c0 70 1e 23 7f 04 2d | |||
2.2. message_2 | 2.2. message_2 | |||
The Responder supports the most preferred and selected cipher suite | The Responder supports the most preferred and selected cipher suite | |||
0, so SUITES_I is acceptable. | 0, so SUITES_I is acceptable. | |||
The Responder creates an ephemeral key pair for use with the EDHOC | The Responder creates an ephemeral key pair for use with the EDHOC | |||
skipping to change at page 6, line 32 ¶ | skipping to change at line 260 ¶ | |||
G_Y (Raw Value) (32 bytes) | G_Y (Raw Value) (32 bytes) | |||
dc 88 d2 d5 1d a5 ed 67 fc 46 16 35 6b c8 ca 74 ef 9e be 8b 38 7e 62 | dc 88 d2 d5 1d a5 ed 67 fc 46 16 35 6b c8 ca 74 ef 9e be 8b 38 7e 62 | |||
3a 36 0b a4 80 b9 b2 9d 1c | 3a 36 0b a4 80 b9 b2 9d 1c | |||
Responder's ephemeral public key | Responder's ephemeral public key | |||
G_Y (CBOR Data Item) (34 bytes) | G_Y (CBOR Data Item) (34 bytes) | |||
58 20 dc 88 d2 d5 1d a5 ed 67 fc 46 16 35 6b c8 ca 74 ef 9e be 8b 38 | 58 20 dc 88 d2 d5 1d a5 ed 67 fc 46 16 35 6b c8 ca 74 ef 9e be 8b 38 | |||
7e 62 3a 36 0b a4 80 b9 b2 9d 1c | 7e 62 3a 36 0b a4 80 b9 b2 9d 1c | |||
The Responder selects its connection identifier C_R to be the byte | The Responder selects its connection identifier C_R to be the byte | |||
string 0x18, which since it is not represented as a 1-byte CBOR int | string 0x18, which is encoded as h'18' = 0x4118 since it is not | |||
is encoded as h'18' = 0x4118: | represented by a 1-byte CBOR int: | |||
Connection identifier chosen by Responder | Connection identifier chosen by the Responder | |||
C_R (Raw Value) (1 byte) | C_R (Raw Value) (1 byte) | |||
18 | 18 | |||
Connection identifier chosen by Responder | Connection identifier chosen by the Responder | |||
C_R (CBOR Data Item) (2 bytes) | C_R (CBOR Data Item) (2 bytes) | |||
41 18 | 41 18 | |||
The transcript hash TH_2 is calculated using the EDHOC hash | The transcript hash TH_2 is calculated using the EDHOC hash | |||
algorithm: | algorithm: | |||
TH_2 = H( G_Y, H(message_1) ) | TH_2 = H( G_Y, H(message_1) ) | |||
H(message_1) (Raw Value) (32 bytes) | H(message_1) (Raw Value) (32 bytes) | |||
c1 65 d6 a9 9d 1b ca fa ac 8d bf 2b 35 2a 6f 7d 71 a3 0b 43 9c 9d 64 | c1 65 d6 a9 9d 1b ca fa ac 8d bf 2b 35 2a 6f 7d 71 a3 0b 43 9c 9d 64 | |||
skipping to change at page 7, line 25 ¶ | skipping to change at line 301 ¶ | |||
bf 2b 35 2a 6f 7d 71 a3 0b 43 9c 9d 64 d3 49 a2 38 48 03 8e d1 6b | bf 2b 35 2a 6f 7d 71 a3 0b 43 9c 9d 64 d3 49 a2 38 48 03 8e d1 6b | |||
TH_2 (Raw Value) (32 bytes) | TH_2 (Raw Value) (32 bytes) | |||
c6 40 5c 15 4c 56 74 66 ab 1d f2 03 69 50 0e 54 0e 9f 14 bd 3a 79 6a | c6 40 5c 15 4c 56 74 66 ab 1d f2 03 69 50 0e 54 0e 9f 14 bd 3a 79 6a | |||
06 52 ca e6 6c 90 61 68 8d | 06 52 ca e6 6c 90 61 68 8d | |||
TH_2 (CBOR Data Item) (34 bytes) | TH_2 (CBOR Data Item) (34 bytes) | |||
58 20 c6 40 5c 15 4c 56 74 66 ab 1d f2 03 69 50 0e 54 0e 9f 14 bd 3a | 58 20 c6 40 5c 15 4c 56 74 66 ab 1d f2 03 69 50 0e 54 0e 9f 14 bd 3a | |||
79 6a 06 52 ca e6 6c 90 61 68 8d | 79 6a 06 52 ca e6 6c 90 61 68 8d | |||
PRK_2e is specified in Section 4.1.1.1 of [I-D.ietf-lake-edhoc]. | PRK_2e is specified in Section 4.1.1.1 of [RFC9528]. | |||
First, the ECDH shared secret G_XY is computed from G_X and Y, or G_Y | First, the Elliptic Curve Diffie-Hellman (ECDH) shared secret G_XY is | |||
and X: | computed from G_X and Y or G_Y and X: | |||
G_XY (Raw Value) (ECDH shared secret) (32 bytes) | G_XY (Raw Value) (ECDH shared secret) (32 bytes) | |||
e5 cd f3 a9 86 cd ac 5b 7b f0 46 91 e2 b0 7c 08 e7 1f 53 99 8d 8f 84 | e5 cd f3 a9 86 cd ac 5b 7b f0 46 91 e2 b0 7c 08 e7 1f 53 99 8d 8f 84 | |||
2b 7c 3f b4 d8 39 cf 7b 28 | 2b 7c 3f b4 d8 39 cf 7b 28 | |||
Then, PRK_2e is calculated using EDHOC_Extract() determined by the | Then, PRK_2e is calculated using EDHOC_Extract(), which is determined | |||
EDHOC hash algorithm: | by the EDHOC hash algorithm: | |||
PRK_2e = EDHOC_Extract( salt, G_XY ) = | PRK_2e = EDHOC_Extract( salt, G_XY ) | |||
= HMAC-SHA-256( salt, G_XY ) | = HMAC-SHA-256( salt, G_XY ) | |||
where salt is TH_2: | where salt is TH_2: | |||
salt (Raw Value) (32 bytes) | salt (Raw Value) (32 bytes) | |||
c6 40 5c 15 4c 56 74 66 ab 1d f2 03 69 50 0e 54 0e 9f 14 bd 3a 79 6a | c6 40 5c 15 4c 56 74 66 ab 1d f2 03 69 50 0e 54 0e 9f 14 bd 3a 79 6a | |||
06 52 ca e6 6c 90 61 68 8d | 06 52 ca e6 6c 90 61 68 8d | |||
PRK_2e (Raw Value) (32 bytes) | PRK_2e (Raw Value) (32 bytes) | |||
d5 84 ac 2e 5d ad 5a 77 d1 4b 53 eb e7 2e f1 d5 da a8 86 0d 39 93 73 | d5 84 ac 2e 5d ad 5a 77 d1 4b 53 eb e7 2e f1 d5 da a8 86 0d 39 93 73 | |||
skipping to change at page 8, line 4 ¶ | skipping to change at line 325 ¶ | |||
where salt is TH_2: | where salt is TH_2: | |||
salt (Raw Value) (32 bytes) | salt (Raw Value) (32 bytes) | |||
c6 40 5c 15 4c 56 74 66 ab 1d f2 03 69 50 0e 54 0e 9f 14 bd 3a 79 6a | c6 40 5c 15 4c 56 74 66 ab 1d f2 03 69 50 0e 54 0e 9f 14 bd 3a 79 6a | |||
06 52 ca e6 6c 90 61 68 8d | 06 52 ca e6 6c 90 61 68 8d | |||
PRK_2e (Raw Value) (32 bytes) | PRK_2e (Raw Value) (32 bytes) | |||
d5 84 ac 2e 5d ad 5a 77 d1 4b 53 eb e7 2e f1 d5 da a8 86 0d 39 93 73 | d5 84 ac 2e 5d ad 5a 77 d1 4b 53 eb e7 2e f1 d5 da a8 86 0d 39 93 73 | |||
bf 2c 24 0a fa 7b a8 04 da | bf 2c 24 0a fa 7b a8 04 da | |||
Since METHOD = 0, the Responder authenticates using signatures. | Since METHOD = 0, the Responder authenticates using signatures. | |||
Since the selected cipher suite is 0, the EDHOC signature algorithm | Since the selected cipher suite is 0, the EDHOC signature algorithm | |||
is EdDSA. | is EdDSA. | |||
The Responder's signature key pair using EdDSA: | The Responder's signature key pair uses EdDSA: | |||
Responder's private authentication key | Responder's private authentication key | |||
SK_R (Raw Value) (32 bytes) | SK_R (Raw Value) (32 bytes) | |||
ef 14 0f f9 00 b0 ab 03 f0 c0 8d 87 9c bb d4 b3 1e a7 1e 6e 7e e7 ff | ef 14 0f f9 00 b0 ab 03 f0 c0 8d 87 9c bb d4 b3 1e a7 1e 6e 7e e7 ff | |||
cb 7e 79 55 77 7a 33 27 99 | cb 7e 79 55 77 7a 33 27 99 | |||
Responder's public authentication key | Responder's public authentication key | |||
PK_R (Raw Value) (32 bytes) | PK_R (Raw Value) (32 bytes) | |||
a1 db 47 b9 51 84 85 4a d1 2a 0c 1a 35 4e 41 8a ac e3 3a a0 f2 c6 62 | a1 db 47 b9 51 84 85 4a d1 2a 0c 1a 35 4e 41 8a ac e3 3a a0 f2 c6 62 | |||
c0 0b 3a c5 5d e9 2f 93 59 | c0 0b 3a c5 5d e9 2f 93 59 | |||
PRK_3e2m is specified in Section 4.1.1.2 of [I-D.ietf-lake-edhoc]. | PRK_3e2m is specified in Section 4.1.1.2 of [RFC9528]. | |||
Since the Responder authenticates with signatures PRK_3e2m = PRK_2e. | Since the Responder authenticates with signatures, PRK_3e2m = PRK_2e. | |||
PRK_3e2m (Raw Value) (32 bytes) | PRK_3e2m (Raw Value) (32 bytes) | |||
d5 84 ac 2e 5d ad 5a 77 d1 4b 53 eb e7 2e f1 d5 da a8 86 0d 39 93 73 | d5 84 ac 2e 5d ad 5a 77 d1 4b 53 eb e7 2e f1 d5 da a8 86 0d 39 93 73 | |||
bf 2c 24 0a fa 7b a8 04 da | bf 2c 24 0a fa 7b a8 04 da | |||
The Responder constructs the remaining input needed to calculate | The Responder constructs the remaining input needed to calculate | |||
MAC_2: | MAC_2: | |||
MAC_2 = EDHOC_KDF( PRK_3e2m, 2, context_2, mac_length_2 ) | MAC_2 = EDHOC_KDF( PRK_3e2m, 2, context_2, mac_length_2 ) | |||
context_2 = << C_R, ID_CRED_R, TH_2, CRED_R, ? EAD_2 >> | context_2 = << C_R, ID_CRED_R, TH_2, CRED_R, ? EAD_2 >> | |||
CRED_R is identified by a 64-bit hash: | CRED_R is identified by a 64-bit hash: | |||
ID_CRED_R = | ID_CRED_R = | |||
{ | { | |||
34 : [-15, h'79f2a41b510c1f9b'] | 34 : [-15, h'79f2a41b510c1f9b'] | |||
} | } | |||
where the COSE header value 34 ('x5t') indicates a hash of an X.509 | where the COSE header value 34 ('x5t') indicates a hash of an X.509 | |||
certficate, and the COSE algorithm -15 indicates the hash algorithm | certificate, and the COSE algorithm -15 indicates the hash algorithm | |||
SHA-256 truncated to 64 bits. | SHA-256 truncated to 64 bits. | |||
ID_CRED_R (CBOR Data Item) (14 bytes) | ID_CRED_R (CBOR Data Item) (14 bytes) | |||
a1 18 22 82 2e 48 79 f2 a4 1b 51 0c 1f 9b | a1 18 22 82 2e 48 79 f2 a4 1b 51 0c 1f 9b | |||
CRED_R is a CBOR byte string of the DER encoding of the X.509 | CRED_R is a CBOR byte string of the DER encoding of the X.509 | |||
certificate in Section 2.8.1: | certificate in Section 2.8.1: | |||
CRED_R (Raw Value) (241 bytes) | CRED_R (Raw Value) (241 bytes) | |||
30 81 ee 30 81 a1 a0 03 02 01 02 02 04 62 31 9e c4 30 05 06 03 2b 65 | 30 81 ee 30 81 a1 a0 03 02 01 02 02 04 62 31 9e c4 30 05 06 03 2b 65 | |||
skipping to change at page 10, line 4 ¶ | skipping to change at line 420 ¶ | |||
30 05 06 03 2b 65 70 30 1d 31 1b 30 19 06 03 55 04 03 0c 12 45 44 48 | 30 05 06 03 2b 65 70 30 1d 31 1b 30 19 06 03 55 04 03 0c 12 45 44 48 | |||
4f 43 20 52 6f 6f 74 20 45 64 32 35 35 31 39 30 1e 17 0d 32 32 30 33 | 4f 43 20 52 6f 6f 74 20 45 64 32 35 35 31 39 30 1e 17 0d 32 32 30 33 | |||
31 36 30 38 32 34 33 36 5a 17 0d 32 39 31 32 33 31 32 33 30 30 30 30 | 31 36 30 38 32 34 33 36 5a 17 0d 32 39 31 32 33 31 32 33 30 30 30 30 | |||
5a 30 22 31 20 30 1e 06 03 55 04 03 0c 17 45 44 48 4f 43 20 52 65 73 | 5a 30 22 31 20 30 1e 06 03 55 04 03 0c 17 45 44 48 4f 43 20 52 65 73 | |||
70 6f 6e 64 65 72 20 45 64 32 35 35 31 39 30 2a 30 05 06 03 2b 65 70 | 70 6f 6e 64 65 72 20 45 64 32 35 35 31 39 30 2a 30 05 06 03 2b 65 70 | |||
03 21 00 a1 db 47 b9 51 84 85 4a d1 2a 0c 1a 35 4e 41 8a ac e3 3a a0 | 03 21 00 a1 db 47 b9 51 84 85 4a d1 2a 0c 1a 35 4e 41 8a ac e3 3a a0 | |||
f2 c6 62 c0 0b 3a c5 5d e9 2f 93 59 30 05 06 03 2b 65 70 03 41 00 b7 | f2 c6 62 c0 0b 3a c5 5d e9 2f 93 59 30 05 06 03 2b 65 70 03 41 00 b7 | |||
23 bc 01 ea b0 92 8e 8b 2b 6c 98 de 19 cc 38 23 d4 6e 7d 69 87 b0 32 | 23 bc 01 ea b0 92 8e 8b 2b 6c 98 de 19 cc 38 23 d4 6e 7d 69 87 b0 32 | |||
47 8f ec fa f1 45 37 a1 af 14 cc 8b e8 29 c6 b7 30 44 10 18 37 eb 4a | 47 8f ec fa f1 45 37 a1 af 14 cc 8b e8 29 c6 b7 30 44 10 18 37 eb 4a | |||
bc 94 95 65 d8 6d ce 51 cf ae 52 ab 82 c1 52 cb 02 | bc 94 95 65 d8 6d ce 51 cf ae 52 ab 82 c1 52 cb 02 | |||
context_2 (CBOR byte string) (296 bytes) | context_2 (CBOR byte string) (296 bytes) | |||
59 01 25 41 18 a1 18 22 82 2e 48 79 f2 a4 1b 51 0c 1f 9b 58 20 c6 40 | 59 01 25 41 18 a1 18 22 82 2e 48 79 f2 a4 1b 51 0c 1f 9b 58 20 c6 40 | |||
5c 15 4c 56 74 66 ab 1d f2 03 69 50 0e 54 0e 9f 14 bd 3a 79 6a 06 52 | 5c 15 4c 56 74 66 ab 1d f2 03 69 50 0e 54 0e 9f 14 bd 3a 79 6a 06 52 | |||
ca e6 6c 90 61 68 8d 58 f1 30 81 ee 30 81 a1 a0 03 02 01 02 02 04 62 | ca e6 6c 90 61 68 8d 58 f1 30 81 ee 30 81 a1 a0 03 02 01 02 02 04 62 | |||
31 9e c4 30 05 06 03 2b 65 70 30 1d 31 1b 30 19 06 03 55 04 03 0c 12 | 31 9e c4 30 05 06 03 2b 65 70 30 1d 31 1b 30 19 06 03 55 04 03 0c 12 | |||
45 44 48 4f 43 20 52 6f 6f 74 20 45 64 32 35 35 31 39 30 1e 17 0d 32 | 45 44 48 4f 43 20 52 6f 6f 74 20 45 64 32 35 35 31 39 30 1e 17 0d 32 | |||
32 30 33 31 36 30 38 32 34 33 36 5a 17 0d 32 39 31 32 33 31 32 33 30 | 32 30 33 31 36 30 38 32 34 33 36 5a 17 0d 32 39 31 32 33 31 32 33 30 | |||
30 30 30 5a 30 22 31 20 30 1e 06 03 55 04 03 0c 17 45 44 48 4f 43 20 | 30 30 30 5a 30 22 31 20 30 1e 06 03 55 04 03 0c 17 45 44 48 4f 43 20 | |||
52 65 73 70 6f 6e 64 65 72 20 45 64 32 35 35 31 39 30 2a 30 05 06 03 | 52 65 73 70 6f 6e 64 65 72 20 45 64 32 35 35 31 39 30 2a 30 05 06 03 | |||
2b 65 70 03 21 00 a1 db 47 b9 51 84 85 4a d1 2a 0c 1a 35 4e 41 8a ac | 2b 65 70 03 21 00 a1 db 47 b9 51 84 85 4a d1 2a 0c 1a 35 4e 41 8a ac | |||
e3 3a a0 f2 c6 62 c0 0b 3a c5 5d e9 2f 93 59 30 05 06 03 2b 65 70 03 | e3 3a a0 f2 c6 62 c0 0b 3a c5 5d e9 2f 93 59 30 05 06 03 2b 65 70 03 | |||
41 00 b7 23 bc 01 ea b0 92 8e 8b 2b 6c 98 de 19 cc 38 23 d4 6e 7d 69 | 41 00 b7 23 bc 01 ea b0 92 8e 8b 2b 6c 98 de 19 cc 38 23 d4 6e 7d 69 | |||
87 b0 32 47 8f ec fa f1 45 37 a1 af 14 cc 8b e8 29 c6 b7 30 44 10 18 | 87 b0 32 47 8f ec fa f1 45 37 a1 af 14 cc 8b e8 29 c6 b7 30 44 10 18 | |||
37 eb 4a bc 94 95 65 d8 6d ce 51 cf ae 52 ab 82 c1 52 cb 02 | 37 eb 4a bc 94 95 65 d8 6d ce 51 cf ae 52 ab 82 c1 52 cb 02 | |||
MAC_2 is computed through EDHOC_Expand() using the EDHOC hash | MAC_2 is computed through EDHOC_Expand() using the EDHOC hash | |||
algorithm, see Section 4.1.2 of [I-D.ietf-lake-edhoc]: | algorithm (see Section 4.1.2 of [RFC9528]): | |||
MAC_2 = HKDF-Expand(PRK_3e2m, info, mac_length_2), where | MAC_2 = HKDF-Expand( PRK_3e2m, info, mac_length_2 ) | |||
where | ||||
info = ( 2, context_2, mac_length_2 ) | info = ( 2, context_2, mac_length_2 ) | |||
Since METHOD = 0, mac_length_2 is given by the EDHOC hash algorithm. | Since METHOD = 0, mac_length_2 is given by the EDHOC hash algorithm. | |||
info for MAC_2 is: | info for MAC_2 is: | |||
info = | info = | |||
( | ( | |||
2, | 2, | |||
h'4118a11822822e4879f2a41b510c1f9b5820c6405c154c56 | h'4118a11822822e4879f2a41b510c1f9b5820c6405c154c56 | |||
7466ab1df20369500e540e9f14bd3a796a0652cae66c9061 | 7466ab1df20369500e540e9f14bd3a796a0652cae66c9061 | |||
688d58f13081ee3081a1a003020102020462319ec4300506 | 688d58f13081ee3081a1a003020102020462319ec4300506 | |||
032b6570301d311b301906035504030c124544484f432052 | 032b6570301d311b301906035504030c124544484f432052 | |||
6f6f742045643235353139301e170d323230333136303832 | 6f6f742045643235353139301e170d323230333136303832 | |||
3433365a170d3239313233313233303030305a3022312030 | 3433365a170d3239313233313233303030305a3022312030 | |||
1e06035504030c174544484f4320526573706f6e64657220 | 1e06035504030c174544484f4320526573706f6e64657220 | |||
45643235353139302a300506032b6570032100a1db47b951 | 45643235353139302a300506032b6570032100a1db47b951 | |||
84854ad12a0c1a354e418aace33aa0f2c662c00b3ac55de9 | 84854ad12a0c1a354e418aace33aa0f2c662c00b3ac55de9 | |||
2f9359300506032b6570034100b723bc01eab0928e8b2b6c | 2f9359300506032b6570034100b723bc01eab0928e8b2b6c | |||
98de19cc3823d46e7d6987b032478fecfaf14537a1af14cc | 98de19cc3823d46e7d6987b032478fecfaf14537a1af14cc | |||
8be829c6b73044101837eb4abc949565d86dce51cfae52ab | 8be829c6b73044101837eb4abc949565d86dce51cfae52ab | |||
82c152cb02', | 82c152cb02', | |||
32 | 32 | |||
) | ) | |||
where the last value is the output size of the EDHOC hash algorithm | where the last value is the output size of the EDHOC hash algorithm | |||
in bytes. | in bytes. | |||
info for MAC_2 (CBOR Sequence) (299 bytes) | info for MAC_2 (CBOR Sequence) (299 bytes) | |||
02 59 01 25 41 18 a1 18 22 82 2e 48 79 f2 a4 1b 51 0c 1f 9b 58 20 c6 | 02 59 01 25 41 18 a1 18 22 82 2e 48 79 f2 a4 1b 51 0c 1f 9b 58 20 c6 | |||
40 5c 15 4c 56 74 66 ab 1d f2 03 69 50 0e 54 0e 9f 14 bd 3a 79 6a 06 | 40 5c 15 4c 56 74 66 ab 1d f2 03 69 50 0e 54 0e 9f 14 bd 3a 79 6a 06 | |||
52 ca e6 6c 90 61 68 8d 58 f1 30 81 ee 30 81 a1 a0 03 02 01 02 02 04 | 52 ca e6 6c 90 61 68 8d 58 f1 30 81 ee 30 81 a1 a0 03 02 01 02 02 04 | |||
62 31 9e c4 30 05 06 03 2b 65 70 30 1d 31 1b 30 19 06 03 55 04 03 0c | 62 31 9e c4 30 05 06 03 2b 65 70 30 1d 31 1b 30 19 06 03 55 04 03 0c | |||
skipping to change at page 12, line 5 ¶ | skipping to change at line 499 ¶ | |||
MAC_2 (CBOR Data Item) (34 bytes) | MAC_2 (CBOR Data Item) (34 bytes) | |||
58 20 86 2a 7e 5e f1 47 f9 a5 f4 c5 12 e1 b6 62 3c d6 6c d1 7a 72 72 | 58 20 86 2a 7e 5e f1 47 f9 a5 f4 c5 12 e1 b6 62 3c d6 6c d1 7a 72 72 | |||
07 2b fe 5b 60 2f fe 30 7e e0 e9 | 07 2b fe 5b 60 2f fe 30 7e e0 e9 | |||
Since METHOD = 0, Signature_or_MAC_2 is the 'signature' of the | Since METHOD = 0, Signature_or_MAC_2 is the 'signature' of the | |||
COSE_Sign1 object. | COSE_Sign1 object. | |||
The Responder constructs the message to be signed: | The Responder constructs the message to be signed: | |||
[ "Signature1", << ID_CRED_R >>, | [ | |||
<< TH_2, CRED_R, ? EAD_2 >>, MAC_2 ] = | "Signature1", | |||
<< ID_CRED_R >>, | ||||
<< TH_2, CRED_R, ? EAD_2 >>, | ||||
MAC_2 | ||||
] = | ||||
[ | [ | |||
"Signature1", | "Signature1", | |||
h'a11822822e4879f2a41b510c1f9b', | h'a11822822e4879f2a41b510c1f9b', | |||
h'5820c6405c154c567466ab1df20369500e540e9f14bd3a79 | h'5820c6405c154c567466ab1df20369500e540e9f14bd3a79 | |||
6a0652cae66c9061688d58f13081ee3081a1a00302010202 | 6a0652cae66c9061688d58f13081ee3081a1a00302010202 | |||
0462319ec4300506032b6570301d311b301906035504030c | 0462319ec4300506032b6570301d311b301906035504030c | |||
124544484f4320526f6f742045643235353139301e170d32 | 124544484f4320526f6f742045643235353139301e170d32 | |||
32303331363038323433365a170d32393132333132333030 | 32303331363038323433365a170d32393132333132333030 | |||
30305a30223120301e06035504030c174544484f43205265 | 30305a30223120301e06035504030c174544484f43205265 | |||
73706f6e6465722045643235353139302a300506032b6570 | 73706f6e6465722045643235353139302a300506032b6570 | |||
032100a1db47b95184854ad12a0c1a354e418aace33aa0f2 | 032100a1db47b95184854ad12a0c1a354e418aace33aa0f2 | |||
c662c00b3ac55de92f9359300506032b6570034100b723bc | c662c00b3ac55de92f9359300506032b6570034100b723bc | |||
01eab0928e8b2b6c98de19cc3823d46e7d6987b032478fec | 01eab0928e8b2b6c98de19cc3823d46e7d6987b032478fec | |||
faf14537a1af14cc8be829c6b73044101837eb4abc949565 | faf14537a1af14cc8be829c6b73044101837eb4abc949565 | |||
d86dce51cfae52ab82c152cb02', | d86dce51cfae52ab82c152cb02', | |||
h'862a7e5ef147f9a5f4c512e1b6623cd66cd17a7272072bfe | h'862a7e5ef147f9a5f4c512e1b6623cd66cd17a7272072bfe | |||
5b602ffe307ee0e9' | 5b602ffe307ee0e9' | |||
] | ] | |||
Message to be signed 2 (CBOR Data Item) (341 bytes) | Message to be signed in message_2 (CBOR Data Item) (341 bytes) | |||
84 6a 53 69 67 6e 61 74 75 72 65 31 4e a1 18 22 82 2e 48 79 f2 a4 1b | 84 6a 53 69 67 6e 61 74 75 72 65 31 4e a1 18 22 82 2e 48 79 f2 a4 1b | |||
51 0c 1f 9b 59 01 15 58 20 c6 40 5c 15 4c 56 74 66 ab 1d f2 03 69 50 | 51 0c 1f 9b 59 01 15 58 20 c6 40 5c 15 4c 56 74 66 ab 1d f2 03 69 50 | |||
0e 54 0e 9f 14 bd 3a 79 6a 06 52 ca e6 6c 90 61 68 8d 58 f1 30 81 ee | 0e 54 0e 9f 14 bd 3a 79 6a 06 52 ca e6 6c 90 61 68 8d 58 f1 30 81 ee | |||
30 81 a1 a0 03 02 01 02 02 04 62 31 9e c4 30 05 06 03 2b 65 70 30 1d | 30 81 a1 a0 03 02 01 02 02 04 62 31 9e c4 30 05 06 03 2b 65 70 30 1d | |||
31 1b 30 19 06 03 55 04 03 0c 12 45 44 48 4f 43 20 52 6f 6f 74 20 45 | 31 1b 30 19 06 03 55 04 03 0c 12 45 44 48 4f 43 20 52 6f 6f 74 20 45 | |||
64 32 35 35 31 39 30 1e 17 0d 32 32 30 33 31 36 30 38 32 34 33 36 5a | 64 32 35 35 31 39 30 1e 17 0d 32 32 30 33 31 36 30 38 32 34 33 36 5a | |||
17 0d 32 39 31 32 33 31 32 33 30 30 30 30 5a 30 22 31 20 30 1e 06 03 | 17 0d 32 39 31 32 33 31 32 33 30 30 30 30 5a 30 22 31 20 30 1e 06 03 | |||
55 04 03 0c 17 45 44 48 4f 43 20 52 65 73 70 6f 6e 64 65 72 20 45 64 | 55 04 03 0c 17 45 44 48 4f 43 20 52 65 73 70 6f 6e 64 65 72 20 45 64 | |||
32 35 35 31 39 30 2a 30 05 06 03 2b 65 70 03 21 00 a1 db 47 b9 51 84 | 32 35 35 31 39 30 2a 30 05 06 03 2b 65 70 03 21 00 a1 db 47 b9 51 84 | |||
85 4a d1 2a 0c 1a 35 4e 41 8a ac e3 3a a0 f2 c6 62 c0 0b 3a c5 5d e9 | 85 4a d1 2a 0c 1a 35 4e 41 8a ac e3 3a a0 f2 c6 62 c0 0b 3a c5 5d e9 | |||
2f 93 59 30 05 06 03 2b 65 70 03 41 00 b7 23 bc 01 ea b0 92 8e 8b 2b | 2f 93 59 30 05 06 03 2b 65 70 03 41 00 b7 23 bc 01 ea b0 92 8e 8b 2b | |||
6c 98 de 19 cc 38 23 d4 6e 7d 69 87 b0 32 47 8f ec fa f1 45 37 a1 af | 6c 98 de 19 cc 38 23 d4 6e 7d 69 87 b0 32 47 8f ec fa f1 45 37 a1 af | |||
14 cc 8b e8 29 c6 b7 30 44 10 18 37 eb 4a bc 94 95 65 d8 6d ce 51 cf | 14 cc 8b e8 29 c6 b7 30 44 10 18 37 eb 4a bc 94 95 65 d8 6d ce 51 cf | |||
ae 52 ab 82 c1 52 cb 02 58 20 86 2a 7e 5e f1 47 f9 a5 f4 c5 12 e1 b6 | ae 52 ab 82 c1 52 cb 02 58 20 86 2a 7e 5e f1 47 f9 a5 f4 c5 12 e1 b6 | |||
62 3c d6 6c d1 7a 72 72 07 2b fe 5b 60 2f fe 30 7e e0 e9 | 62 3c d6 6c d1 7a 72 72 07 2b fe 5b 60 2f fe 30 7e e0 e9 | |||
The Responder signs using the private authentication key SK_R | The Responder signs using the private authentication key SK_R. | |||
Signature_or_MAC_2 (Raw Value) (64 bytes) | Signature_or_MAC_2 (Raw Value) (64 bytes) | |||
c3 b5 bd 44 d1 e4 4a 08 5c 03 d3 ae de 4e 1e 6c 11 c5 72 a1 96 8c c3 | c3 b5 bd 44 d1 e4 4a 08 5c 03 d3 ae de 4e 1e 6c 11 c5 72 a1 96 8c c3 | |||
62 9b 50 5f 98 c6 81 60 8d 3d 1d e7 93 d1 c4 0e b5 dd 5d 89 ac f1 96 | 62 9b 50 5f 98 c6 81 60 8d 3d 1d e7 93 d1 c4 0e b5 dd 5d 89 ac f1 96 | |||
6a ea 07 02 2b 48 cd c9 98 70 eb c4 03 74 e8 fa 6e 09 | 6a ea 07 02 2b 48 cd c9 98 70 eb c4 03 74 e8 fa 6e 09 | |||
Signature_or_MAC_2 (CBOR Data Item) (66 bytes) | Signature_or_MAC_2 (CBOR Data Item) (66 bytes) | |||
58 40 c3 b5 bd 44 d1 e4 4a 08 5c 03 d3 ae de 4e 1e 6c 11 c5 72 a1 96 | 58 40 c3 b5 bd 44 d1 e4 4a 08 5c 03 d3 ae de 4e 1e 6c 11 c5 72 a1 96 | |||
8c c3 62 9b 50 5f 98 c6 81 60 8d 3d 1d e7 93 d1 c4 0e b5 dd 5d 89 ac | 8c c3 62 9b 50 5f 98 c6 81 60 8d 3d 1d e7 93 d1 c4 0e b5 dd 5d 89 ac | |||
f1 96 6a ea 07 02 2b 48 cd c9 98 70 eb c4 03 74 e8 fa 6e 09 | f1 96 6a ea 07 02 2b 48 cd c9 98 70 eb c4 03 74 e8 fa 6e 09 | |||
The Responder constructs PLAINTEXT_2: | The Responder constructs PLAINTEXT_2: | |||
PLAINTEXT_2 = | PLAINTEXT_2 = | |||
( | ( | |||
C_R, | C_R, | |||
ID_CRED_R / bstr / -24..23, | ID_CRED_R / bstr / -24..23, | |||
Signature_or_MAC_2, | Signature_or_MAC_2, | |||
? EAD_2 | ? EAD_2 | |||
) | ) | |||
PLAINTEXT_2 (CBOR Sequence) (82 bytes) | PLAINTEXT_2 (CBOR Sequence) (82 bytes) | |||
41 18 a1 18 22 82 2e 48 79 f2 a4 1b 51 0c 1f 9b 58 40 c3 b5 bd 44 d1 | 41 18 a1 18 22 82 2e 48 79 f2 a4 1b 51 0c 1f 9b 58 40 c3 b5 bd 44 d1 | |||
e4 4a 08 5c 03 d3 ae de 4e 1e 6c 11 c5 72 a1 96 8c c3 62 9b 50 5f 98 | e4 4a 08 5c 03 d3 ae de 4e 1e 6c 11 c5 72 a1 96 8c c3 62 9b 50 5f 98 | |||
c6 81 60 8d 3d 1d e7 93 d1 c4 0e b5 dd 5d 89 ac f1 96 6a ea 07 02 2b | c6 81 60 8d 3d 1d e7 93 d1 c4 0e b5 dd 5d 89 ac f1 96 6a ea 07 02 2b | |||
48 cd c9 98 70 eb c4 03 74 e8 fa 6e 09 | 48 cd c9 98 70 eb c4 03 74 e8 fa 6e 09 | |||
The input needed to calculate KEYSTREAM_2 is defined in Section 4.1.2 | The input needed to calculate KEYSTREAM_2 is defined in Section 4.1.2 | |||
of [I-D.ietf-lake-edhoc], using EDHOC_Expand() with the EDHOC hash | of [RFC9528], using EDHOC_Expand() with the EDHOC hash algorithm: | |||
algorithm: | ||||
KEYSTREAM_2 = EDHOC_KDF( PRK_2e, 0, TH_2, plaintext_length ) = | KEYSTREAM_2 = EDHOC_KDF( PRK_2e, 0, TH_2, plaintext_length ) | |||
= HKDF-Expand( PRK_2e, info, plaintext_length ) | = HKDF-Expand( PRK_2e, info, plaintext_length ) | |||
where plaintext_length is the length in bytes of PLAINTEXT_2 in | where plaintext_length is the length in bytes of PLAINTEXT_2 in bytes | |||
bytes, and info for KEYSTREAM_2 is: | and info for KEYSTREAM_2 is: | |||
info = | info = | |||
( | ( | |||
0, | 0, | |||
h'c6405c154c567466ab1df20369500e540e9f14bd3a796a06 | h'c6405c154c567466ab1df20369500e540e9f14bd3a796a06 | |||
52cae66c9061688d', | 52cae66c9061688d', | |||
82 | 82 | |||
) | ) | |||
where the last value is the length in bytes of PLAINTEXT_2. | where the last value is the length in bytes of PLAINTEXT_2. | |||
info for KEYSTREAM_2 (CBOR Sequence) (37 bytes) | info for KEYSTREAM_2 (CBOR Sequence) (37 bytes) | |||
00 58 20 c6 40 5c 15 4c 56 74 66 ab 1d f2 03 69 50 0e 54 0e 9f 14 bd | 00 58 20 c6 40 5c 15 4c 56 74 66 ab 1d f2 03 69 50 0e 54 0e 9f 14 bd | |||
3a 79 6a 06 52 ca e6 6c 90 61 68 8d 18 52 | 3a 79 6a 06 52 ca e6 6c 90 61 68 8d 18 52 | |||
KEYSTREAM_2 (Raw Value) (82 bytes) | KEYSTREAM_2 (Raw Value) (82 bytes) | |||
fd 3e 7c 3f 2d 6b ee 64 3d 3c 9d 2f 28 47 03 5d 73 e2 ec b0 f8 db 5c | fd 3e 7c 3f 2d 6b ee 64 3d 3c 9d 2f 28 47 03 5d 73 e2 ec b0 f8 db 5c | |||
d1 c6 85 4e 24 89 6a f2 11 88 b2 c4 34 4e 68 9e c2 98 42 83 d9 fb c6 | d1 c6 85 4e 24 89 6a f2 11 88 b2 c4 34 4e 68 9e c2 98 42 83 d9 fb c6 | |||
9c e1 c5 db 10 dc ff f2 4d f9 a4 9a 04 a9 40 58 27 7b c7 fa 9a d6 c6 | 9c e1 c5 db 10 dc ff f2 4d f9 a4 9a 04 a9 40 58 27 7b c7 fa 9a d6 c6 | |||
b1 94 ab 32 8b 44 5e b0 80 49 0c d7 86 | b1 94 ab 32 8b 44 5e b0 80 49 0c d7 86 | |||
The Responder calculates CIPHERTEXT_2 as XOR between PLAINTEXT_2 and | The Responder calculates CIPHERTEXT_2 as XOR between PLAINTEXT_2 and | |||
KEYSTREAM_2: | KEYSTREAM_2: | |||
CIPHERTEXT_2 (Raw Value) (82 bytes) | CIPHERTEXT_2 (Raw Value) (82 bytes) | |||
bc 26 dd 27 0f e9 c0 2c 44 ce 39 34 79 4b 1c c6 2b a2 2f 05 45 9f 8d | bc 26 dd 27 0f e9 c0 2c 44 ce 39 34 79 4b 1c c6 2b a2 2f 05 45 9f 8d | |||
35 8c 8d 12 27 5a c4 2c 5f 96 de d5 f1 3c c9 08 4e 5b 20 18 89 a4 5e | 35 8c 8d 12 27 5a c4 2c 5f 96 de d5 f1 3c c9 08 4e 5b 20 18 89 a4 5e | |||
5a 60 a5 56 2d c1 18 61 9c 3d aa 2f d9 f4 c9 f4 d6 ed ad 10 9d d4 ed | 5a 60 a5 56 2d c1 18 61 9c 3d aa 2f d9 f4 c9 f4 d6 ed ad 10 9d d4 ed | |||
f9 59 62 aa fb af 9a b3 f4 a1 f6 b9 8f | f9 59 62 aa fb af 9a b3 f4 a1 f6 b9 8f | |||
The Responder constructs message_2: | The Responder constructs message_2: | |||
message_2 = | message_2 = | |||
( | ( | |||
G_Y_CIPHERTEXT_2 | G_Y_CIPHERTEXT_2 | |||
) | ) | |||
where G_Y_CIPHERTEXT_2 is the bstr encoding of the concatenation of | where G_Y_CIPHERTEXT_2 is the bstr encoding of the concatenation of | |||
the raw values of G_Y and CIPHERTEXT_2. | the raw values of G_Y and CIPHERTEXT_2. | |||
message_2 (CBOR Sequence) (116 bytes) | message_2 (CBOR Sequence) (116 bytes) | |||
58 72 dc 88 d2 d5 1d a5 ed 67 fc 46 16 35 6b c8 ca 74 ef 9e be 8b 38 | 58 72 dc 88 d2 d5 1d a5 ed 67 fc 46 16 35 6b c8 ca 74 ef 9e be 8b 38 | |||
7e 62 3a 36 0b a4 80 b9 b2 9d 1c bc 26 dd 27 0f e9 c0 2c 44 ce 39 34 | 7e 62 3a 36 0b a4 80 b9 b2 9d 1c bc 26 dd 27 0f e9 c0 2c 44 ce 39 34 | |||
79 4b 1c c6 2b a2 2f 05 45 9f 8d 35 8c 8d 12 27 5a c4 2c 5f 96 de d5 | 79 4b 1c c6 2b a2 2f 05 45 9f 8d 35 8c 8d 12 27 5a c4 2c 5f 96 de d5 | |||
f1 3c c9 08 4e 5b 20 18 89 a4 5e 5a 60 a5 56 2d c1 18 61 9c 3d aa 2f | f1 3c c9 08 4e 5b 20 18 89 a4 5e 5a 60 a5 56 2d c1 18 61 9c 3d aa 2f | |||
d9 f4 c9 f4 d6 ed ad 10 9d d4 ed f9 59 62 aa fb af 9a b3 f4 a1 f6 b9 | d9 f4 c9 f4 d6 ed ad 10 9d d4 ed f9 59 62 aa fb af 9a b3 f4 a1 f6 b9 | |||
8f | 8f | |||
2.3. message_3 | 2.3. message_3 | |||
Since METHOD = 0, the Initiator authenticates using signatures. | Since METHOD = 0, the Initiator authenticates using signatures. | |||
Since the selected cipher suite is 0, the EDHOC signature algorithm | Since the selected cipher suite is 0, the EDHOC signature algorithm | |||
is EdDSA. | is EdDSA. | |||
The Initiator's signature key pair using EdDSA: | The Initiator's signature key pair uses EdDSA: | |||
Initiator's private authentication key | Initiator's private authentication key | |||
SK_I (Raw Value) (32 bytes) | SK_I (Raw Value) (32 bytes) | |||
4c 5b 25 87 8f 50 7c 6b 9d ae 68 fb d4 fd 3f f9 97 53 3d b0 af 00 b2 | 4c 5b 25 87 8f 50 7c 6b 9d ae 68 fb d4 fd 3f f9 97 53 3d b0 af 00 b2 | |||
5d 32 4e a2 8e 6c 21 3b c8 | 5d 32 4e a2 8e 6c 21 3b c8 | |||
Initiator's public authentication key | Initiator's public authentication key | |||
PK_I (Raw Value) (32 bytes) | PK_I (Raw Value) (32 bytes) | |||
ed 06 a8 ae 61 a8 29 ba 5f a5 45 25 c9 d0 7f 48 dd 44 a3 02 f4 3e 0f | ed 06 a8 ae 61 a8 29 ba 5f a5 45 25 c9 d0 7f 48 dd 44 a3 02 f4 3e 0f | |||
23 d8 cc 20 b7 30 85 14 1e | 23 d8 cc 20 b7 30 85 14 1e | |||
PRK_4e3m is specified in Section 4.1.1.3 of [I-D.ietf-lake-edhoc]. | PRK_4e3m is specified in Section 4.1.1.3 of [RFC9528]. | |||
Since the Initiator authenticates with signatures PRK_4e3m = | Since the Initiator authenticates with signatures, PRK_4e3m = | |||
PRK_3e2m. | PRK_3e2m. | |||
PRK_4e3m (Raw Value) (32 bytes) | PRK_4e3m (Raw Value) (32 bytes) | |||
d5 84 ac 2e 5d ad 5a 77 d1 4b 53 eb e7 2e f1 d5 da a8 86 0d 39 93 73 | d5 84 ac 2e 5d ad 5a 77 d1 4b 53 eb e7 2e f1 d5 da a8 86 0d 39 93 73 | |||
bf 2c 24 0a fa 7b a8 04 da | bf 2c 24 0a fa 7b a8 04 da | |||
The transcript hash TH_3 is calculated using the EDHOC hash | The transcript hash TH_3 is calculated using the EDHOC hash | |||
algorithm: | algorithm: | |||
TH_3 = H(TH_2, PLAINTEXT_2, CRED_R) | TH_3 = H( TH_2, PLAINTEXT_2, CRED_R ) | |||
Input to calculate TH_3 (CBOR Sequence) (359 bytes) | Input to calculate TH_3 (CBOR Sequence) (359 bytes) | |||
58 20 c6 40 5c 15 4c 56 74 66 ab 1d f2 03 69 50 0e 54 0e 9f 14 bd 3a | 58 20 c6 40 5c 15 4c 56 74 66 ab 1d f2 03 69 50 0e 54 0e 9f 14 bd 3a | |||
79 6a 06 52 ca e6 6c 90 61 68 8d 41 18 a1 18 22 82 2e 48 79 f2 a4 1b | 79 6a 06 52 ca e6 6c 90 61 68 8d 41 18 a1 18 22 82 2e 48 79 f2 a4 1b | |||
51 0c 1f 9b 58 40 c3 b5 bd 44 d1 e4 4a 08 5c 03 d3 ae de 4e 1e 6c 11 | 51 0c 1f 9b 58 40 c3 b5 bd 44 d1 e4 4a 08 5c 03 d3 ae de 4e 1e 6c 11 | |||
c5 72 a1 96 8c c3 62 9b 50 5f 98 c6 81 60 8d 3d 1d e7 93 d1 c4 0e b5 | c5 72 a1 96 8c c3 62 9b 50 5f 98 c6 81 60 8d 3d 1d e7 93 d1 c4 0e b5 | |||
dd 5d 89 ac f1 96 6a ea 07 02 2b 48 cd c9 98 70 eb c4 03 74 e8 fa 6e | dd 5d 89 ac f1 96 6a ea 07 02 2b 48 cd c9 98 70 eb c4 03 74 e8 fa 6e | |||
09 58 f1 30 81 ee 30 81 a1 a0 03 02 01 02 02 04 62 31 9e c4 30 05 06 | 09 58 f1 30 81 ee 30 81 a1 a0 03 02 01 02 02 04 62 31 9e c4 30 05 06 | |||
03 2b 65 70 30 1d 31 1b 30 19 06 03 55 04 03 0c 12 45 44 48 4f 43 20 | 03 2b 65 70 30 1d 31 1b 30 19 06 03 55 04 03 0c 12 45 44 48 4f 43 20 | |||
52 6f 6f 74 20 45 64 32 35 35 31 39 30 1e 17 0d 32 32 30 33 31 36 30 | 52 6f 6f 74 20 45 64 32 35 35 31 39 30 1e 17 0d 32 32 30 33 31 36 30 | |||
skipping to change at page 16, line 15 ¶ | skipping to change at line 697 ¶ | |||
MAC_3 = EDHOC_KDF( PRK_4e3m, 6, context_3, mac_length_3 ) | MAC_3 = EDHOC_KDF( PRK_4e3m, 6, context_3, mac_length_3 ) | |||
where | where | |||
context_3 = << ID_CRED_I, TH_3, CRED_I, ? EAD_3 >> | context_3 = << ID_CRED_I, TH_3, CRED_I, ? EAD_3 >> | |||
CRED_I is identified by a 64-bit hash: | CRED_I is identified by a 64-bit hash: | |||
ID_CRED_I = | ID_CRED_I = | |||
{ | { | |||
34 : [-15, h'c24ab2fd7643c79f'] | 34 : [-15, h'c24ab2fd7643c79f'] | |||
} | } | |||
where the COSE header value 34 ('x5t') indicates a hash of an X.509 | where the COSE header value 34 ('x5t') indicates a hash of an X.509 | |||
certficate, and the COSE algorithm -15 indicates the hash algorithm | certificate, and the COSE algorithm -15 indicates the hash algorithm | |||
SHA-256 truncated to 64 bits. | SHA-256 truncated to 64 bits. | |||
ID_CRED_I (CBOR Data Item) (14 bytes) | ID_CRED_I (CBOR Data Item) (14 bytes) | |||
a1 18 22 82 2e 48 c2 4a b2 fd 76 43 c7 9f | a1 18 22 82 2e 48 c2 4a b2 fd 76 43 c7 9f | |||
CRED_I is a CBOR byte string of the DER encoding of the X.509 | CRED_I is a CBOR byte string of the DER encoding of the X.509 | |||
certificate in Section 2.8.2: | certificate in Section 2.8.2: | |||
CRED_I (Raw Value) (241 bytes) | CRED_I (Raw Value) (241 bytes) | |||
30 81 ee 30 81 a1 a0 03 02 01 02 02 04 62 31 9e a0 30 05 06 03 2b 65 | 30 81 ee 30 81 a1 a0 03 02 01 02 02 04 62 31 9e a0 30 05 06 03 2b 65 | |||
skipping to change at page 17, line 41 ¶ | skipping to change at line 773 ¶ | |||
33 31 36 30 38 32 34 30 30 5a 17 0d 32 39 31 32 33 31 32 33 30 30 30 | 33 31 36 30 38 32 34 30 30 5a 17 0d 32 39 31 32 33 31 32 33 30 30 30 | |||
30 5a 30 22 31 20 30 1e 06 03 55 04 03 0c 17 45 44 48 4f 43 20 49 6e | 30 5a 30 22 31 20 30 1e 06 03 55 04 03 0c 17 45 44 48 4f 43 20 49 6e | |||
69 74 69 61 74 6f 72 20 45 64 32 35 35 31 39 30 2a 30 05 06 03 2b 65 | 69 74 69 61 74 6f 72 20 45 64 32 35 35 31 39 30 2a 30 05 06 03 2b 65 | |||
70 03 21 00 ed 06 a8 ae 61 a8 29 ba 5f a5 45 25 c9 d0 7f 48 dd 44 a3 | 70 03 21 00 ed 06 a8 ae 61 a8 29 ba 5f a5 45 25 c9 d0 7f 48 dd 44 a3 | |||
02 f4 3e 0f 23 d8 cc 20 b7 30 85 14 1e 30 05 06 03 2b 65 70 03 41 00 | 02 f4 3e 0f 23 d8 cc 20 b7 30 85 14 1e 30 05 06 03 2b 65 70 03 41 00 | |||
52 12 41 d8 b3 a7 70 99 6b cf c9 b9 ea d4 e7 e0 a1 c0 db 35 3a 3b df | 52 12 41 d8 b3 a7 70 99 6b cf c9 b9 ea d4 e7 e0 a1 c0 db 35 3a 3b df | |||
29 10 b3 92 75 ae 48 b7 56 01 59 81 85 0d 27 db 67 34 e3 7f 67 21 22 | 29 10 b3 92 75 ae 48 b7 56 01 59 81 85 0d 27 db 67 34 e3 7f 67 21 22 | |||
67 dd 05 ee ff 27 b9 e7 a8 13 fa 57 4b 72 a0 0b 43 0b | 67 dd 05 ee ff 27 b9 e7 a8 13 fa 57 4b 72 a0 0b 43 0b | |||
MAC_3 is computed through EDHOC_Expand() using the EDHOC hash | MAC_3 is computed through EDHOC_Expand() using the EDHOC hash | |||
algorithm, see Section 4.1.2 of [I-D.ietf-lake-edhoc]: | algorithm (see Section 4.1.2 of [RFC9528]): | |||
MAC_3 = HKDF-Expand(PRK_4e3m, info, mac_length_3), where | MAC_3 = HKDF-Expand( PRK_4e3m, info, mac_length_3 ) | |||
where | ||||
info = ( 6, context_3, mac_length_3 ) | info = ( 6, context_3, mac_length_3 ) | |||
where context_3 = << ID_CRED_I, TH_3, CRED_I, ? EAD_3 >> | where | |||
context_3 = << ID_CRED_I, TH_3, CRED_I, ? EAD_3 >> | ||||
Since METHOD = 0, mac_length_3 is given by the EDHOC hash algorithm. | Since METHOD = 0, mac_length_3 is given by the EDHOC hash algorithm. | |||
info for MAC_3 is: | info for MAC_3 is: | |||
info = | info = | |||
( | ( | |||
6, | 6, | |||
h'a11822822e48c24ab2fd7643c79f58205b7df9b4f58f240c | h'a11822822e48c24ab2fd7643c79f58205b7df9b4f58f240c | |||
e0418e48191b5fff3a22b5ca57f669b16777996592e928bc | e0418e48191b5fff3a22b5ca57f669b16777996592e928bc | |||
58f13081ee3081a1a003020102020462319ea0300506032b | 58f13081ee3081a1a003020102020462319ea0300506032b | |||
6570301d311b301906035504030c124544484f4320526f6f | 6570301d311b301906035504030c124544484f4320526f6f | |||
742045643235353139301e170d3232303331363038323430 | 742045643235353139301e170d3232303331363038323430 | |||
305a170d3239313233313233303030305a30223120301e06 | 305a170d3239313233313233303030305a30223120301e06 | |||
035504030c174544484f4320496e69746961746f72204564 | 035504030c174544484f4320496e69746961746f72204564 | |||
3235353139302a300506032b6570032100ed06a8ae61a829 | 3235353139302a300506032b6570032100ed06a8ae61a829 | |||
ba5fa54525c9d07f48dd44a302f43e0f23d8cc20b7308514 | ba5fa54525c9d07f48dd44a302f43e0f23d8cc20b7308514 | |||
1e300506032b6570034100521241d8b3a770996bcfc9b9ea | 1e300506032b6570034100521241d8b3a770996bcfc9b9ea | |||
d4e7e0a1c0db353a3bdf2910b39275ae48b756015981850d | d4e7e0a1c0db353a3bdf2910b39275ae48b756015981850d | |||
27db6734e37f67212267dd05eeff27b9e7a813fa574b72a0 | 27db6734e37f67212267dd05eeff27b9e7a813fa574b72a0 | |||
0b430b', | 0b430b', | |||
32 | 32 | |||
) | ) | |||
where the last value is the output size of the EDHOC hash algorithm | where the last value is the output size of the EDHOC hash algorithm | |||
in bytes. | in bytes. | |||
info for MAC_3 (CBOR Sequence) (297 bytes) | info for MAC_3 (CBOR Sequence) (297 bytes) | |||
06 59 01 23 a1 18 22 82 2e 48 c2 4a b2 fd 76 43 c7 9f 58 20 5b 7d f9 | 06 59 01 23 a1 18 22 82 2e 48 c2 4a b2 fd 76 43 c7 9f 58 20 5b 7d f9 | |||
b4 f5 8f 24 0c e0 41 8e 48 19 1b 5f ff 3a 22 b5 ca 57 f6 69 b1 67 77 | b4 f5 8f 24 0c e0 41 8e 48 19 1b 5f ff 3a 22 b5 ca 57 f6 69 b1 67 77 | |||
99 65 92 e9 28 bc 58 f1 30 81 ee 30 81 a1 a0 03 02 01 02 02 04 62 31 | 99 65 92 e9 28 bc 58 f1 30 81 ee 30 81 a1 a0 03 02 01 02 02 04 62 31 | |||
9e a0 30 05 06 03 2b 65 70 30 1d 31 1b 30 19 06 03 55 04 03 0c 12 45 | 9e a0 30 05 06 03 2b 65 70 30 1d 31 1b 30 19 06 03 55 04 03 0c 12 45 | |||
skipping to change at page 18, line 46 ¶ | skipping to change at line 830 ¶ | |||
65 70 03 21 00 ed 06 a8 ae 61 a8 29 ba 5f a5 45 25 c9 d0 7f 48 dd 44 | 65 70 03 21 00 ed 06 a8 ae 61 a8 29 ba 5f a5 45 25 c9 d0 7f 48 dd 44 | |||
a3 02 f4 3e 0f 23 d8 cc 20 b7 30 85 14 1e 30 05 06 03 2b 65 70 03 41 | a3 02 f4 3e 0f 23 d8 cc 20 b7 30 85 14 1e 30 05 06 03 2b 65 70 03 41 | |||
00 52 12 41 d8 b3 a7 70 99 6b cf c9 b9 ea d4 e7 e0 a1 c0 db 35 3a 3b | 00 52 12 41 d8 b3 a7 70 99 6b cf c9 b9 ea d4 e7 e0 a1 c0 db 35 3a 3b | |||
df 29 10 b3 92 75 ae 48 b7 56 01 59 81 85 0d 27 db 67 34 e3 7f 67 21 | df 29 10 b3 92 75 ae 48 b7 56 01 59 81 85 0d 27 db 67 34 e3 7f 67 21 | |||
22 67 dd 05 ee ff 27 b9 e7 a8 13 fa 57 4b 72 a0 0b 43 0b 18 20 | 22 67 dd 05 ee ff 27 b9 e7 a8 13 fa 57 4b 72 a0 0b 43 0b 18 20 | |||
MAC_3 (Raw Value) (32 bytes) | MAC_3 (Raw Value) (32 bytes) | |||
39 b1 27 c1 30 12 9a fa 30 61 8c 75 13 29 e6 37 cc 37 34 27 0d 4b 01 | 39 b1 27 c1 30 12 9a fa 30 61 8c 75 13 29 e6 37 cc 37 34 27 0d 4b 01 | |||
25 84 45 a8 ee 02 da a3 bd | 25 84 45 a8 ee 02 da a3 bd | |||
MAC_3 (CBOR Data Item) (34 bytes) | MAC_3 (CBOR Data Item) (34 bytes) | |||
58 20 39 b1 27 c1 30 12 9a fa 30 61 8c 75 13 29 e6 37 cc 37 34 27 0d 4b | 58 20 39 b1 27 c1 30 12 9a fa 30 61 8c 75 13 29 e6 37 cc 37 34 27 0d | |||
01 25 84 45 a8 ee 02 da a3 bd | 4b 01 25 84 45 a8 ee 02 da a3 bd | |||
Since METHOD = 0, Signature_or_MAC_3 is the 'signature' of the | Since METHOD = 0, Signature_or_MAC_3 is the 'signature' of the | |||
COSE_Sign1 object. | COSE_Sign1 object. | |||
The Initiator constructs the message to be signed: | The Initiator constructs the message to be signed: | |||
[ "Signature1", << ID_CRED_I >>, | [ | |||
<< TH_3, CRED_I, ? EAD_3 >>, MAC_3 ] = | "Signature1", | |||
<< ID_CRED_I >>, | ||||
<< TH_3, CRED_I, ? EAD_3 >>, | ||||
MAC_3 | ||||
] = | ||||
[ | [ | |||
"Signature1", | "Signature1", | |||
h'a11822822e48c24ab2fd7643c79f', | h'a11822822e48c24ab2fd7643c79f', | |||
h'58205b7df9b4f58f240ce0418e48191b5fff3a22b5ca57f6 | h'58205b7df9b4f58f240ce0418e48191b5fff3a22b5ca57f6 | |||
69b16777996592e928bc58f13081ee3081a1a00302010202 | 69b16777996592e928bc58f13081ee3081a1a00302010202 | |||
0462319ea0300506032b6570301d311b301906035504030c | 0462319ea0300506032b6570301d311b301906035504030c | |||
124544484f4320526f6f742045643235353139301e170d32 | 124544484f4320526f6f742045643235353139301e170d32 | |||
32303331363038323430305a170d32393132333132333030 | 32303331363038323430305a170d32393132333132333030 | |||
30305a30223120301e06035504030c174544484f4320496e | 30305a30223120301e06035504030c174544484f4320496e | |||
69746961746f722045643235353139302a300506032b6570 | 69746961746f722045643235353139302a300506032b6570 | |||
032100ed06a8ae61a829ba5fa54525c9d07f48dd44a302f4 | 032100ed06a8ae61a829ba5fa54525c9d07f48dd44a302f4 | |||
3e0f23d8cc20b73085141e300506032b6570034100521241 | 3e0f23d8cc20b73085141e300506032b6570034100521241 | |||
d8b3a770996bcfc9b9ead4e7e0a1c0db353a3bdf2910b392 | d8b3a770996bcfc9b9ead4e7e0a1c0db353a3bdf2910b392 | |||
75ae48b756015981850d27db6734e37f67212267dd05eeff | 75ae48b756015981850d27db6734e37f67212267dd05eeff | |||
27b9e7a813fa574b72a00b430b', | 27b9e7a813fa574b72a00b430b', | |||
h'39b127c130129afa30618c751329e637cc3734270d4b0125 | h'39b127c130129afa30618c751329e637cc3734270d4b0125 | |||
8445a8ee02daa3bd' | 8445a8ee02daa3bd' | |||
] | ] | |||
Message to be signed 3 (CBOR Data Item) (341 bytes) | Message to be signed in message_3 (CBOR Data Item) (341 bytes) | |||
84 6a 53 69 67 6e 61 74 75 72 65 31 4e a1 18 22 82 2e 48 c2 4a b2 fd | 84 6a 53 69 67 6e 61 74 75 72 65 31 4e a1 18 22 82 2e 48 c2 4a b2 fd | |||
76 43 c7 9f 59 01 15 58 20 5b 7d f9 b4 f5 8f 24 0c e0 41 8e 48 19 1b | 76 43 c7 9f 59 01 15 58 20 5b 7d f9 b4 f5 8f 24 0c e0 41 8e 48 19 1b | |||
5f ff 3a 22 b5 ca 57 f6 69 b1 67 77 99 65 92 e9 28 bc 58 f1 30 81 ee | 5f ff 3a 22 b5 ca 57 f6 69 b1 67 77 99 65 92 e9 28 bc 58 f1 30 81 ee | |||
30 81 a1 a0 03 02 01 02 02 04 62 31 9e a0 30 05 06 03 2b 65 70 30 1d | 30 81 a1 a0 03 02 01 02 02 04 62 31 9e a0 30 05 06 03 2b 65 70 30 1d | |||
31 1b 30 19 06 03 55 04 03 0c 12 45 44 48 4f 43 20 52 6f 6f 74 20 45 | 31 1b 30 19 06 03 55 04 03 0c 12 45 44 48 4f 43 20 52 6f 6f 74 20 45 | |||
64 32 35 35 31 39 30 1e 17 0d 32 32 30 33 31 36 30 38 32 34 30 30 5a | 64 32 35 35 31 39 30 1e 17 0d 32 32 30 33 31 36 30 38 32 34 30 30 5a | |||
17 0d 32 39 31 32 33 31 32 33 30 30 30 30 5a 30 22 31 20 30 1e 06 03 | 17 0d 32 39 31 32 33 31 32 33 30 30 30 30 5a 30 22 31 20 30 1e 06 03 | |||
55 04 03 0c 17 45 44 48 4f 43 20 49 6e 69 74 69 61 74 6f 72 20 45 64 | 55 04 03 0c 17 45 44 48 4f 43 20 49 6e 69 74 69 61 74 6f 72 20 45 64 | |||
32 35 35 31 39 30 2a 30 05 06 03 2b 65 70 03 21 00 ed 06 a8 ae 61 a8 | 32 35 35 31 39 30 2a 30 05 06 03 2b 65 70 03 21 00 ed 06 a8 ae 61 a8 | |||
29 ba 5f a5 45 25 c9 d0 7f 48 dd 44 a3 02 f4 3e 0f 23 d8 cc 20 b7 30 | 29 ba 5f a5 45 25 c9 d0 7f 48 dd 44 a3 02 f4 3e 0f 23 d8 cc 20 b7 30 | |||
skipping to change at page 20, line 4 ¶ | skipping to change at line 888 ¶ | |||
59 81 85 0d 27 db 67 34 e3 7f 67 21 22 67 dd 05 ee ff 27 b9 e7 a8 13 | 59 81 85 0d 27 db 67 34 e3 7f 67 21 22 67 dd 05 ee ff 27 b9 e7 a8 13 | |||
fa 57 4b 72 a0 0b 43 0b 58 20 39 b1 27 c1 30 12 9a fa 30 61 8c 75 13 | fa 57 4b 72 a0 0b 43 0b 58 20 39 b1 27 c1 30 12 9a fa 30 61 8c 75 13 | |||
29 e6 37 cc 37 34 27 0d 4b 01 25 84 45 a8 ee 02 da a3 bd | 29 e6 37 cc 37 34 27 0d 4b 01 25 84 45 a8 ee 02 da a3 bd | |||
The Initiator signs using the private authentication key SK_I: | The Initiator signs using the private authentication key SK_I: | |||
Signature_or_MAC_3 (Raw Value) (64 bytes) | Signature_or_MAC_3 (Raw Value) (64 bytes) | |||
96 e1 cd 5f ce ad fa c1 b5 af 81 94 43 f7 09 24 f5 71 99 55 95 7f d0 | 96 e1 cd 5f ce ad fa c1 b5 af 81 94 43 f7 09 24 f5 71 99 55 95 7f d0 | |||
26 55 be b4 77 5e 1a 73 18 6a 0d 1d 3e a6 83 f0 8f 8d 03 dc ec b9 cf | 26 55 be b4 77 5e 1a 73 18 6a 0d 1d 3e a6 83 f0 8f 8d 03 dc ec b9 cf | |||
15 4e 1c 6f 55 5a 1e 12 ca 11 8c e4 2b db a6 87 89 07 | 15 4e 1c 6f 55 5a 1e 12 ca 11 8c e4 2b db a6 87 89 07 | |||
Signature_or_MAC_3 (CBOR Data Item) (66 bytes) | Signature_or_MAC_3 (CBOR Data Item) (66 bytes) | |||
58 40 96 e1 cd 5f ce ad fa c1 b5 af 81 94 43 f7 09 24 f5 71 99 55 95 | 58 40 96 e1 cd 5f ce ad fa c1 b5 af 81 94 43 f7 09 24 f5 71 99 55 95 | |||
7f d0 26 55 be b4 77 5e 1a 73 18 6a 0d 1d 3e a6 83 f0 8f 8d 03 dc ec | 7f d0 26 55 be b4 77 5e 1a 73 18 6a 0d 1d 3e a6 83 f0 8f 8d 03 dc ec | |||
b9 cf 15 4e 1c 6f 55 5a 1e 12 ca 11 8c e4 2b db a6 87 89 07 | b9 cf 15 4e 1c 6f 55 5a 1e 12 ca 11 8c e4 2b db a6 87 89 07 | |||
The Initiator constructs PLAINTEXT_3: | The Initiator constructs PLAINTEXT_3: | |||
PLAINTEXT_3 = | PLAINTEXT_3 = | |||
( | ( | |||
ID_CRED_I / bstr / -24..23, | ID_CRED_I / bstr / -24..23, | |||
Signature_or_MAC_3, | Signature_or_MAC_3, | |||
? EAD_3 | ? EAD_3 | |||
) | ) | |||
PLAINTEXT_3 (CBOR Sequence) (80 bytes) | PLAINTEXT_3 (CBOR Sequence) (80 bytes) | |||
a1 18 22 82 2e 48 c2 4a b2 fd 76 43 c7 9f 58 40 96 e1 cd 5f ce ad fa | a1 18 22 82 2e 48 c2 4a b2 fd 76 43 c7 9f 58 40 96 e1 cd 5f ce ad fa | |||
c1 b5 af 81 94 43 f7 09 24 f5 71 99 55 95 7f d0 26 55 be b4 77 5e 1a | c1 b5 af 81 94 43 f7 09 24 f5 71 99 55 95 7f d0 26 55 be b4 77 5e 1a | |||
73 18 6a 0d 1d 3e a6 83 f0 8f 8d 03 dc ec b9 cf 15 4e 1c 6f 55 5a 1e | 73 18 6a 0d 1d 3e a6 83 f0 8f 8d 03 dc ec b9 cf 15 4e 1c 6f 55 5a 1e | |||
12 ca 11 8c e4 2b db a6 87 89 07 | 12 ca 11 8c e4 2b db a6 87 89 07 | |||
The Initiator constructs the associated data for message_3: | The Initiator constructs the associated data for message_3: | |||
A_3 = | A_3 = | |||
[ | [ | |||
"Encrypt0", | "Encrypt0", | |||
h'', | h'', | |||
h'5b7df9b4f58f240ce0418e48191b5fff3a22b5ca57f669b1 | h'5b7df9b4f58f240ce0418e48191b5fff3a22b5ca57f669b1 | |||
6777996592e928bc' | 6777996592e928bc' | |||
] | ] | |||
A_3 (CBOR Data Item) (45 bytes) | A_3 (CBOR Data Item) (45 bytes) | |||
83 68 45 6e 63 72 79 70 74 30 40 58 20 5b 7d f9 b4 f5 8f 24 0c e0 41 | 83 68 45 6e 63 72 79 70 74 30 40 58 20 5b 7d f9 b4 f5 8f 24 0c e0 41 | |||
8e 48 19 1b 5f ff 3a 22 b5 ca 57 f6 69 b1 67 77 99 65 92 e9 28 bc | 8e 48 19 1b 5f ff 3a 22 b5 ca 57 f6 69 b1 67 77 99 65 92 e9 28 bc | |||
The Initiator constructs the input needed to derive the key K_3, see | The Initiator constructs the input needed to derive the key K_3 (see | |||
Section 4.1.2 of [I-D.ietf-lake-edhoc], using the EDHOC hash | Section 4.1.2 of [RFC9528]) using the EDHOC hash algorithm: | |||
algorithm: | ||||
K_3 = EDHOC_KDF( PRK_3e2m, 3, TH_3, key_length ) | K_3 = EDHOC_KDF( PRK_3e2m, 3, TH_3, key_length ) | |||
= HKDF-Expand( PRK_3e2m, info, key_length ), | = HKDF-Expand( PRK_3e2m, info, key_length ) | |||
where key_length is the key length in bytes for the EDHOC AEAD | where key_length is the key length in bytes for the EDHOC | |||
algorithm, and info for K_3 is: | Authenticated Encryption with Associated Data (AEAD) algorithm, and | |||
info for K_3 is: | ||||
info = | info = | |||
( | ( | |||
3, | 3, | |||
h'5b7df9b4f58f240ce0418e48191b5fff3a22b5ca57f669b1 | h'5b7df9b4f58f240ce0418e48191b5fff3a22b5ca57f669b1 | |||
6777996592e928bc', | 6777996592e928bc', | |||
16 | 16 | |||
) | ) | |||
where the last value is the key length in bytes for the EDHOC AEAD | where the last value is the key length in bytes for the EDHOC AEAD | |||
algorithm. | algorithm. | |||
info for K_3 (CBOR Sequence) (36 bytes) | info for K_3 (CBOR Sequence) (36 bytes) | |||
03 58 20 5b 7d f9 b4 f5 8f 24 0c e0 41 8e 48 19 1b 5f ff 3a 22 b5 ca | 03 58 20 5b 7d f9 b4 f5 8f 24 0c e0 41 8e 48 19 1b 5f ff 3a 22 b5 ca | |||
57 f6 69 b1 67 77 99 65 92 e9 28 bc 10 | 57 f6 69 b1 67 77 99 65 92 e9 28 bc 10 | |||
K_3 (Raw Value) (16 bytes) | K_3 (Raw Value) (16 bytes) | |||
da 19 5e 5f 64 8a c6 3b 0e 8f b0 c4 55 20 51 39 | da 19 5e 5f 64 8a c6 3b 0e 8f b0 c4 55 20 51 39 | |||
The Initiator constructs the input needed to derive the nonce IV_3, | The Initiator constructs the input needed to derive the nonce IV_3 | |||
see Section 4.1.2 of [I-D.ietf-lake-edhoc], using the EDHOC hash | (see Section 4.1.2 of [RFC9528]) using the EDHOC hash algorithm: | |||
algorithm: | ||||
IV_3 = EDHOC_KDF( PRK_3e2m, 4, TH_3, iv_length ) | IV_3 = EDHOC_KDF( PRK_3e2m, 4, TH_3, iv_length ) | |||
= HKDF-Expand( PRK_3e2m, info, iv_length ), | = HKDF-Expand( PRK_3e2m, info, iv_length ) | |||
where iv_length is the nonce length in bytes for the EDHOC AEAD | where iv_length is the nonce length in bytes for the EDHOC AEAD | |||
algorithm, and info for IV_3 is: | algorithm, and info for IV_3 is: | |||
info = | info = | |||
( | ( | |||
4, | 4, | |||
h'5b7df9b4f58f240ce0418e48191b5fff3a22b5ca57f669b1 | h'5b7df9b4f58f240ce0418e48191b5fff3a22b5ca57f669b1 | |||
6777996592e928bc', | 6777996592e928bc', | |||
13 | 13 | |||
) | ) | |||
where the last value is the nonce length in bytes for the EDHOC AEAD | where the last value is the nonce length in bytes for the EDHOC AEAD | |||
algorithm. | algorithm. | |||
info for IV_3 (CBOR Sequence) (36 bytes) | info for IV_3 (CBOR Sequence) (36 bytes) | |||
04 58 20 5b 7d f9 b4 f5 8f 24 0c e0 41 8e 48 19 1b 5f ff 3a 22 b5 ca | 04 58 20 5b 7d f9 b4 f5 8f 24 0c e0 41 8e 48 19 1b 5f ff 3a 22 b5 ca | |||
57 f6 69 b1 67 77 99 65 92 e9 28 bc 0d | 57 f6 69 b1 67 77 99 65 92 e9 28 bc 0d | |||
IV_3 (Raw Value) (13 bytes) | IV_3 (Raw Value) (13 bytes) | |||
skipping to change at page 22, line 4 ¶ | skipping to change at line 977 ¶ | |||
where the last value is the nonce length in bytes for the EDHOC AEAD | where the last value is the nonce length in bytes for the EDHOC AEAD | |||
algorithm. | algorithm. | |||
info for IV_3 (CBOR Sequence) (36 bytes) | info for IV_3 (CBOR Sequence) (36 bytes) | |||
04 58 20 5b 7d f9 b4 f5 8f 24 0c e0 41 8e 48 19 1b 5f ff 3a 22 b5 ca | 04 58 20 5b 7d f9 b4 f5 8f 24 0c e0 41 8e 48 19 1b 5f ff 3a 22 b5 ca | |||
57 f6 69 b1 67 77 99 65 92 e9 28 bc 0d | 57 f6 69 b1 67 77 99 65 92 e9 28 bc 0d | |||
IV_3 (Raw Value) (13 bytes) | IV_3 (Raw Value) (13 bytes) | |||
38 d8 c6 4c 56 25 5a ff a4 49 f4 be d7 | 38 d8 c6 4c 56 25 5a ff a4 49 f4 be d7 | |||
The Initiator calculates CIPHERTEXT_3 as 'ciphertext' of | The Initiator calculates CIPHERTEXT_3 as 'ciphertext' of | |||
COSE_Encrypt0 applied using the EDHOC AEAD algorithm with plaintext | COSE_Encrypt0 applied using the EDHOC AEAD algorithm with plaintext | |||
PLAINTEXT_3, additional data A_3, key K_3 and nonce IV_3. | PLAINTEXT_3, additional data A_3, key K_3, and nonce IV_3. | |||
CIPHERTEXT_3 (Raw Value) (88 bytes) | CIPHERTEXT_3 (Raw Value) (88 bytes) | |||
25 c3 45 88 4a aa eb 22 c5 27 f9 b1 d2 b6 78 72 07 e0 16 3c 69 b6 2a | 25 c3 45 88 4a aa eb 22 c5 27 f9 b1 d2 b6 78 72 07 e0 16 3c 69 b6 2a | |||
0d 43 92 81 50 42 72 03 c3 16 74 e4 51 4e a6 e3 83 b5 66 eb 29 76 3e | 0d 43 92 81 50 42 72 03 c3 16 74 e4 51 4e a6 e3 83 b5 66 eb 29 76 3e | |||
fe b0 af a5 18 77 6a e1 c6 5f 85 6d 84 bf 32 af 3a 78 36 97 04 66 dc | fe b0 af a5 18 77 6a e1 c6 5f 85 6d 84 bf 32 af 3a 78 36 97 04 66 dc | |||
b7 1f 76 74 5d 39 d3 02 5e 77 03 e0 c0 32 eb ad 51 94 7c | b7 1f 76 74 5d 39 d3 02 5e 77 03 e0 c0 32 eb ad 51 94 7c | |||
message_3 is the CBOR bstr encoding of CIPHERTEXT_3: | message_3 is the CBOR bstr encoding of CIPHERTEXT_3: | |||
message_3 (CBOR Sequence) (90 bytes) | message_3 (CBOR Sequence) (90 bytes) | |||
skipping to change at page 23, line 15 ¶ | skipping to change at line 1037 ¶ | |||
2.4. message_4 | 2.4. message_4 | |||
No external authorization data: | No external authorization data: | |||
EAD_4 (CBOR Sequence) (0 bytes) | EAD_4 (CBOR Sequence) (0 bytes) | |||
The Responder constructs PLAINTEXT_4: | The Responder constructs PLAINTEXT_4: | |||
PLAINTEXT_4 = | PLAINTEXT_4 = | |||
( | ( | |||
? EAD_4 | ? EAD_4 | |||
) | ) | |||
PLAINTEXT_4 (CBOR Sequence) (0 bytes) | PLAINTEXT_4 (CBOR Sequence) (0 bytes) | |||
The Responder constructs the associated data for message_4: | The Responder constructs the associated data for message_4: | |||
A_4 = | A_4 = | |||
[ | [ | |||
"Encrypt0", | "Encrypt0", | |||
h'', | h'', | |||
h'0eb868f263cf3555dccd396dd8dec29d3750d599be42d5a4 | h'0eb868f263cf3555dccd396dd8dec29d3750d599be42d5a4 | |||
1a5a37c896f294ac' | 1a5a37c896f294ac' | |||
] | ] | |||
A_4 (CBOR Data Item) (45 bytes) | A_4 (CBOR Data Item) (45 bytes) | |||
83 68 45 6e 63 72 79 70 74 30 40 58 20 0e b8 68 f2 63 cf 35 55 dc cd | 83 68 45 6e 63 72 79 70 74 30 40 58 20 0e b8 68 f2 63 cf 35 55 dc cd | |||
39 6d d8 de c2 9d 37 50 d5 99 be 42 d5 a4 1a 5a 37 c8 96 f2 94 ac | 39 6d d8 de c2 9d 37 50 d5 99 be 42 d5 a4 1a 5a 37 c8 96 f2 94 ac | |||
The Responder constructs the input needed to derive the EDHOC | The Responder constructs the input needed to derive the EDHOC | |||
message_4 key, see Section 4.1.2 of [I-D.ietf-lake-edhoc], using the | message_4 key (see Section 4.1.2 of [RFC9528]) using the EDHOC hash | |||
EDHOC hash algorithm: | algorithm: | |||
K_4 = EDHOC_KDF( PRK_4e3m, 8, TH_4, key_length ) | K_4 = EDHOC_KDF( PRK_4e3m, 8, TH_4, key_length ) | |||
= HKDF-Expand( PRK_4x3m, info, key_length ) | = HKDF-Expand( PRK_4e3m, info, key_length ) | |||
where key_length is the key length in bytes for the EDHOC AEAD | where key_length is the key length in bytes for the EDHOC AEAD | |||
algorithm, and info for K_4 is: | algorithm, and info for K_4 is: | |||
info = | info = | |||
( | ( | |||
8, | 8, | |||
h'0eb868f263cf3555dccd396dd8dec29d3750d599be42d5a4 | h'0eb868f263cf3555dccd396dd8dec29d3750d599be42d5a4 | |||
1a5a37c896f294ac', | 1a5a37c896f294ac', | |||
16 | 16 | |||
) | ) | |||
where the last value is the key length in bytes for the EDHOC AEAD | where the last value is the key length in bytes for the EDHOC AEAD | |||
algorithm. | algorithm. | |||
info for K_4 (CBOR Sequence) (36 bytes) | info for K_4 (CBOR Sequence) (36 bytes) | |||
08 58 20 0e b8 68 f2 63 cf 35 55 dc cd 39 6d d8 de c2 9d 37 50 d5 99 | 08 58 20 0e b8 68 f2 63 cf 35 55 dc cd 39 6d d8 de c2 9d 37 50 d5 99 | |||
be 42 d5 a4 1a 5a 37 c8 96 f2 94 ac 10 | be 42 d5 a4 1a 5a 37 c8 96 f2 94 ac 10 | |||
K_4 (Raw Value) (16 bytes) | K_4 (Raw Value) (16 bytes) | |||
df 8c b5 86 1e 1f df ed d3 b2 30 15 a3 9d 1e 2e | df 8c b5 86 1e 1f df ed d3 b2 30 15 a3 9d 1e 2e | |||
The Responder constructs the input needed to derive the EDHOC | The Responder constructs the input needed to derive the EDHOC | |||
message_4 nonce, see Section 4.1.2 of [I-D.ietf-lake-edhoc], using | message_4 nonce (see Section 4.1.2 of [RFC9528]) using the EDHOC hash | |||
the EDHOC hash algorithm: | algorithm: | |||
IV_4 = EDHOC_KDF( PRK_4e3m, 9, TH_4, iv_length ) | IV_4 = EDHOC_KDF( PRK_4e3m, 9, TH_4, iv_length ) | |||
= HKDF-Expand( PRK_4x3m, info, iv_length ) | = HKDF-Expand( PRK_4e3m, info, iv_length ) | |||
where length is the nonce length in bytes for the EDHOC AEAD | where length is the nonce length in bytes for the EDHOC AEAD | |||
algorithm, and info for IV_4 is: | algorithm, and info for IV_4 is: | |||
info = | info = | |||
( | ( | |||
9, | 9, | |||
h'0eb868f263cf3555dccd396dd8dec29d3750d599be42d5a4 | h'0eb868f263cf3555dccd396dd8dec29d3750d599be42d5a4 | |||
1a5a37c896f294ac', | 1a5a37c896f294ac', | |||
13 | 13 | |||
) | ) | |||
where the last value is the nonce length in bytes for the EDHOC AEAD | where the last value is the nonce length in bytes for the EDHOC AEAD | |||
algorithm. | algorithm. | |||
info for IV_4 (CBOR Sequence) (36 bytes) | info for IV_4 (CBOR Sequence) (36 bytes) | |||
09 58 20 0e b8 68 f2 63 cf 35 55 dc cd 39 6d d8 de c2 9d 37 50 d5 99 | 09 58 20 0e b8 68 f2 63 cf 35 55 dc cd 39 6d d8 de c2 9d 37 50 d5 99 | |||
be 42 d5 a4 1a 5a 37 c8 96 f2 94 ac 0d | be 42 d5 a4 1a 5a 37 c8 96 f2 94 ac 0d | |||
IV_4 (Raw Value) (13 bytes) | IV_4 (Raw Value) (13 bytes) | |||
12 8e c6 58 d9 70 d7 38 0f 74 fc 6c 27 | 12 8e c6 58 d9 70 d7 38 0f 74 fc 6c 27 | |||
The Responder calculates CIPHERTEXT_4 as 'ciphertext' of | The Responder calculates CIPHERTEXT_4 as 'ciphertext' of | |||
COSE_Encrypt0 applied using the EDHOC AEAD algorithm with plaintext | COSE_Encrypt0 applied using the EDHOC AEAD algorithm with plaintext | |||
PLAINTEXT_4, additional data A_4, key K_4 and nonce IV_4. | PLAINTEXT_4, additional data A_4, key K_4, and nonce IV_4. | |||
CIPHERTEXT_4 (8 bytes) | CIPHERTEXT_4 (8 bytes) | |||
4f 0e de e3 66 e5 c8 83 | 4f 0e de e3 66 e5 c8 83 | |||
message_4 is the CBOR bstr encoding of CIPHERTEXT_4: | message_4 is the CBOR bstr encoding of CIPHERTEXT_4: | |||
message_4 (CBOR Sequence) (9 bytes) | message_4 (CBOR Sequence) (9 bytes) | |||
48 4f 0e de e3 66 e5 c8 83 | 48 4f 0e de e3 66 e5 c8 83 | |||
2.5. PRK_out and PRK_exporter | 2.5. PRK_out and PRK_exporter | |||
PRK_out is specified in Section 4.1.3 of [I-D.ietf-lake-edhoc]. | PRK_out is specified in Section 4.1.3 of [RFC9528]. | |||
PRK_out = EDHOC_KDF( PRK_4e3m, 7, TH_4, hash_length ) = | PRK_out = EDHOC_KDF( PRK_4e3m, 7, TH_4, hash_length ) | |||
= HKDF-Expand( PRK_4e3m, info, hash_length ) | = HKDF-Expand( PRK_4e3m, info, hash_length ) | |||
where hash_length is the length in bytes of the output of the EDHOC | where hash_length is the length in bytes of the output of the EDHOC | |||
hash algorithm, and info for PRK_out is: | hash algorithm, and info for PRK_out is: | |||
info = | info = | |||
( | ( | |||
7, | 7, | |||
h'0eb868f263cf3555dccd396dd8dec29d3750d599be42d5a4 | h'0eb868f263cf3555dccd396dd8dec29d3750d599be42d5a4 | |||
1a5a37c896f294ac', | 1a5a37c896f294ac', | |||
32 | 32 | |||
) | ) | |||
where the last value is the length in bytes of the output of the | where the last value is the length in bytes of the output of the | |||
EDHOC hash algorithm. | EDHOC hash algorithm. | |||
info for PRK_out (CBOR Sequence) (37 bytes) | info for PRK_out (CBOR Sequence) (37 bytes) | |||
07 58 20 0e b8 68 f2 63 cf 35 55 dc cd 39 6d d8 de c2 9d 37 50 d5 99 | 07 58 20 0e b8 68 f2 63 cf 35 55 dc cd 39 6d d8 de c2 9d 37 50 d5 99 | |||
be 42 d5 a4 1a 5a 37 c8 96 f2 94 ac 18 20 | be 42 d5 a4 1a 5a 37 c8 96 f2 94 ac 18 20 | |||
PRK_out (Raw Value) (32 bytes) | PRK_out (Raw Value) (32 bytes) | |||
b7 44 cb 7d 8a 87 cc 04 47 c3 35 0e 16 5b 25 0d ab 12 ec 45 33 25 ab | b7 44 cb 7d 8a 87 cc 04 47 c3 35 0e 16 5b 25 0d ab 12 ec 45 33 25 ab | |||
b9 22 b3 03 07 e5 c3 68 f0 | b9 22 b3 03 07 e5 c3 68 f0 | |||
The OSCORE Master Secret and OSCORE Master Salt are derived with the | The Object Security for Constrained RESTful Environments (OSCORE) | |||
EDHOC_Exporter as specified in Section 4.2.1 of | Master Secret and OSCORE Master Salt are derived with the | |||
[I-D.ietf-lake-edhoc]. | EDHOC_Exporter as specified in Section 4.2.1 of [RFC9528]. | |||
EDHOC_Exporter( label, context, length ) | EDHOC_Exporter( exporter_label, context, length ) | |||
= EDHOC_KDF( PRK_exporter, label, context, length ) | = EDHOC_KDF( PRK_exporter, exporter_label, context, length ) | |||
where PRK_exporter is derived from PRK_out: | where PRK_exporter is derived from PRK_out: | |||
PRK_exporter = EDHOC_KDF( PRK_out, 10, h'', hash_length ) = | PRK_exporter = EDHOC_KDF( PRK_out, 10, h'', hash_length ) | |||
= HKDF-Expand( PRK_out, info, hash_length ) | = HKDF-Expand( PRK_out, info, hash_length ) | |||
where hash_length is the length in bytes of the output of the EDHOC | where hash_length is the length in bytes of the output of the EDHOC | |||
hash algorithm, and info for the PRK_exporter is: | hash algorithm, and info for the PRK_exporter is: | |||
info = | info = | |||
( | ( | |||
10, | 10, | |||
h'', | h'', | |||
32 | 32 | |||
) | ) | |||
where the last value is the length in bytes of the output of the | where the last value is the length in bytes of the output of the | |||
EDHOC hash algorithm. | EDHOC hash algorithm. | |||
info for PRK_exporter (CBOR Sequence) (4 bytes) | info for PRK_exporter (CBOR Sequence) (4 bytes) | |||
0a 40 18 20 | 0a 40 18 20 | |||
PRK_exporter (Raw Value) (32 bytes) | PRK_exporter (Raw Value) (32 bytes) | |||
2a ae c8 fc 4a b3 bc 32 95 de f6 b5 51 05 1a 2f a5 61 42 4d b3 01 fa | 2a ae c8 fc 4a b3 bc 32 95 de f6 b5 51 05 1a 2f a5 61 42 4d b3 01 fa | |||
84 f6 42 f5 57 8a 6d f5 1a | 84 f6 42 f5 57 8a 6d f5 1a | |||
2.6. OSCORE Parameters | 2.6. OSCORE Parameters | |||
The derivation of OSCORE parameters is specified in Appendix A.1 of | The derivation of OSCORE parameters is specified in Appendix A.1 of | |||
[I-D.ietf-lake-edhoc]. | [RFC9528]. | |||
The AEAD and Hash algorithms to use in OSCORE are given by the | The AEAD and hash algorithms to use in OSCORE are given by the | |||
selected cipher suite: | selected cipher suite: | |||
Application AEAD Algorithm (int) | Application AEAD Algorithm (int) | |||
10 | 10 | |||
Application Hash Algorithm (int) | Application Hash Algorithm (int) | |||
-16 | -16 | |||
The mapping from EDHOC connection identifiers to OSCORE Sender/ | The mapping from EDHOC connection identifiers to OSCORE Sender/ | |||
Recipient IDs is defined in Section 3.3.3 of [I-D.ietf-lake-edhoc]. | Recipient IDs is defined in Section 3.3.3 of [RFC9528]. | |||
C_R is mapped to the Recipient ID of the server, i.e., the Sender ID | C_R is mapped to the Recipient ID of the server, i.e., the Sender ID | |||
of the client. The byte string 0x18, which as C_R is encoded as the | of the client. The byte string 0x18, which as C_R is encoded as the | |||
CBOR byte string 0x4118, is converted to the server Recipient ID | CBOR byte string 0x4118, is converted to the server Recipient ID | |||
0x18. | 0x18. | |||
Client's OSCORE Sender ID (Raw Value) (1 byte) | Client's OSCORE Sender ID (Raw Value) (1 byte) | |||
18 | 18 | |||
C_I is mapped to the Recipient ID of the client, i.e., the Sender ID | C_I is mapped to the Recipient ID of the client, i.e., the Sender ID | |||
of the server. The byte string 0x2d, which as C_I is encoded as the | of the server. The byte string 0x2d, which as C_I is encoded as the | |||
CBOR integer 0x2d is converted to the client Recipient ID 0x2d. | CBOR integer 0x2d, is converted to the client Recipient ID 0x2d. | |||
Server's OSCORE Sender ID (Raw Value) (1 byte) | Server's OSCORE Sender ID (Raw Value) (1 byte) | |||
2d | 2d | |||
The OSCORE Master Secret is computed through EDHOC_Expand() using the | The OSCORE Master Secret is computed through EDHOC_Expand() using the | |||
Application hash algorithm, see Appendix A.1 of | application hash algorithm (see Appendix A.1 of [RFC9528]): | |||
[I-D.ietf-lake-edhoc]: | ||||
OSCORE Master Secret = EDHOC_Exporter( 0, h'', oscore_key_length ) | OSCORE Master Secret = EDHOC_Exporter( 0, h'', oscore_key_length ) | |||
= EDHOC_KDF( PRK_exporter, 0, h'', oscore_key_length ) | = EDHOC_KDF( PRK_exporter, 0, h'', oscore_key_length ) | |||
= HKDF-Expand( PRK_exporter, info, oscore_key_length ) | = HKDF-Expand( PRK_exporter, info, oscore_key_length ) | |||
where oscore_key_length is by default the key length in bytes for the | where oscore_key_length is the key length in bytes for the | |||
Application AEAD algorithm, and info for the OSCORE Master Secret is: | application AEAD algorithm by default, and info for the OSCORE Master | |||
Secret is: | ||||
info = | info = | |||
( | ( | |||
0, | 0, | |||
h'', | h'', | |||
16 | 16 | |||
) | ) | |||
where the last value is the key length in bytes for the Application | where the last value is the key length in bytes for the application | |||
AEAD algorithm. | AEAD algorithm. | |||
info for OSCORE Master Secret (CBOR Sequence) (3 bytes) | info for OSCORE Master Secret (CBOR Sequence) (3 bytes) | |||
00 40 10 | 00 40 10 | |||
OSCORE Master Secret (Raw Value) (16 bytes) | OSCORE Master Secret (Raw Value) (16 bytes) | |||
1e 1c 6b ea c3 a8 a1 ca c4 35 de 7e 2f 9a e7 ff | 1e 1c 6b ea c3 a8 a1 ca c4 35 de 7e 2f 9a e7 ff | |||
The OSCORE Master Salt is computed through EDHOC_Expand() using the | The OSCORE Master Salt is computed through EDHOC_Expand() using the | |||
Application hash algorithm, see Section 4.2 of [I-D.ietf-lake-edhoc]: | application hash algorithm (see Section 4.2 of [RFC9528]): | |||
OSCORE Master Salt = EDHOC_Exporter( 1, h'', oscore_salt_length ) | OSCORE Master Salt = EDHOC_Exporter( 1, h'', oscore_salt_length ) | |||
= EDHOC_KDF( PRK_exporter, 1, h'', oscore_salt_length ) | = EDHOC_KDF( PRK_exporter, 1, h'', oscore_salt_length ) | |||
= HKDF-Expand( PRK_4x3m, info, oscore_salt_length ) | = HKDF-Expand( PRK_exporter, info, oscore_salt_length ) | |||
where oscore_salt_length is the length in bytes of the OSCORE Master | where oscore_salt_length is the length in bytes of the OSCORE Master | |||
Salt, and info for the OSCORE Master Salt is: | Salt, and info for the OSCORE Master Salt is: | |||
info = | info = | |||
( | ( | |||
1, | 1, | |||
h'', | h'', | |||
8 | 8 | |||
) | ) | |||
where the last value is the length in bytes of the OSCORE Master | where the last value is the length in bytes of the OSCORE Master | |||
Salt. | Salt. | |||
info for OSCORE Master Salt (CBOR Sequence) (3 bytes) | info for OSCORE Master Salt (CBOR Sequence) (3 bytes) | |||
01 40 08 | 01 40 08 | |||
OSCORE Master Salt (Raw Value) (8 bytes) | OSCORE Master Salt (Raw Value) (8 bytes) | |||
ce 7a b8 44 c0 10 6d 73 | ce 7a b8 44 c0 10 6d 73 | |||
2.7. Key Update | 2.7. Key Update | |||
Key update is defined in Appendix H of [I-D.ietf-lake-edhoc]. | Key update is defined in Appendix H of [RFC9528]. | |||
EDHOC_KeyUpdate( context ): | EDHOC_KeyUpdate( context ): | |||
PRK_out = EDHOC_KDF( PRK_out, 11, context, hash_length ) | PRK_out = EDHOC_KDF( PRK_out, 11, context, hash_length ) | |||
= HKDF-Expand( PRK_out, info, hash_length ) | = HKDF-Expand( PRK_out, info, hash_length ) | |||
where hash_length is the length in bytes of the output of the EDHOC | where hash_length is the length in bytes of the output of the EDHOC | |||
hash function, and context for KeyUpdate is | hash function, and the context for KeyUpdate is: | |||
context for KeyUpdate (Raw Value) (16 bytes) | context for KeyUpdate (Raw Value) (16 bytes) | |||
d6 be 16 96 02 b8 bc ea a0 11 58 fd b8 20 89 0c | d6 be 16 96 02 b8 bc ea a0 11 58 fd b8 20 89 0c | |||
context for KeyUpdate (CBOR Data Item) (17 bytes) | context for KeyUpdate (CBOR Data Item) (17 bytes) | |||
50 d6 be 16 96 02 b8 bc ea a0 11 58 fd b8 20 89 0c | 50 d6 be 16 96 02 b8 bc ea a0 11 58 fd b8 20 89 0c | |||
and where info for key update is: | where info for KeyUpdate is: | |||
info = | info = | |||
( | ( | |||
11, | 11, | |||
h'd6be169602b8bceaa01158fdb820890c', | h'd6be169602b8bceaa01158fdb820890c', | |||
32 | 32 | |||
) | ) | |||
info for KeyUpdate (CBOR Sequence) (20 bytes) | ||||
0b 50 d6 be 16 96 02 b8 bc ea a0 11 58 fd b8 20 89 0c 18 20 | ||||
PRK_out after KeyUpdate (Raw Value) (32 bytes) | PRK_out after KeyUpdate (Raw Value) (32 bytes) | |||
da 6e ac d9 a9 85 f4 fb a9 ae c2 a9 29 90 22 97 6b 25 b1 4e 89 fa 15 | da 6e ac d9 a9 85 f4 fb a9 ae c2 a9 29 90 22 97 6b 25 b1 4e 89 fa 15 | |||
97 94 f2 8d 82 fa f2 da ad | 97 94 f2 8d 82 fa f2 da ad | |||
After key update, the PRK_exporter needs to be derived anew: | After the key update, the PRK_exporter needs to be derived anew: | |||
PRK_exporter = EDHOC_KDF( PRK_out, 10, h'', hash_length ) = | PRK_exporter = EDHOC_KDF( PRK_out, 10, h'', hash_length ) | |||
= HKDF-Expand( PRK_out, info, hash_length ) | = HKDF-Expand( PRK_out, info, hash_length ) | |||
where info and hash_length are unchanged as in Section 2.5. | where info and hash_length are unchanged as in Section 2.5. | |||
PRK_exporter after KeyUpdate (Raw Value) (32 bytes) | PRK_exporter after KeyUpdate (Raw Value) (32 bytes) | |||
00 14 d2 52 5e e0 d8 e2 13 ea 59 08 02 8e 9a 1c e9 a0 1c 30 54 6f 09 | 00 14 d2 52 5e e0 d8 e2 13 ea 59 08 02 8e 9a 1c e9 a0 1c 30 54 6f 09 | |||
30 c0 44 d3 8d b5 36 2c 05 | 30 c0 44 d3 8d b5 36 2c 05 | |||
The OSCORE Master Secret is derived with the updated PRK_exporter: | The OSCORE Master Secret is derived with the updated PRK_exporter: | |||
OSCORE Master Secret = | OSCORE Master Secret | |||
= HKDF-Expand(PRK_exporter, info, oscore_key_length) | = HKDF-Expand( PRK_exporter, info, oscore_key_length ) | |||
where info and key_length are unchanged as in Section 2.6. | where info and oscore_key_length are unchanged as in Section 2.6. | |||
OSCORE Master Secret after KeyUpdate (Raw Value) (16 bytes) | OSCORE Master Secret after KeyUpdate (Raw Value) (16 bytes) | |||
ee 0f f5 42 c4 7e b0 e0 9c 69 30 76 49 bd bb e5 | ee 0f f5 42 c4 7e b0 e0 9c 69 30 76 49 bd bb e5 | |||
The OSCORE Master Salt is derived with the updated PRK_exporter: | The OSCORE Master Salt is derived with the updated PRK_exporter: | |||
OSCORE Master Salt = HKDF-Expand(PRK_exporter, info, salt_length) | OSCORE Master Salt | |||
= HKDF-Expand( PRK_exporter, info, oscore_salt_length ) | ||||
where info and salt_length are unchanged as in Section 2.6. | where info and oscore_salt_length are unchanged as in Section 2.6. | |||
OSCORE Master Salt after KeyUpdate (Raw Value) (8 bytes) | OSCORE Master Salt after KeyUpdate (Raw Value) (8 bytes) | |||
80 ce de 2a 1e 5a ab 48 | 80 ce de 2a 1e 5a ab 48 | |||
2.8. Certificates | 2.8. Certificates | |||
2.8.1. Responder Certificate | 2.8.1. Responder Certificate | |||
Version: 3 (0x2) | Version: 3 (0x2) | |||
Serial Number: 1647419076 (0x62319ec4) | Serial Number: 1647419076 (0x62319ec4) | |||
skipping to change at page 31, line 33 ¶ | skipping to change at line 1415 ¶ | |||
CA:TRUE | CA:TRUE | |||
Signature Algorithm: ED25519 | Signature Algorithm: ED25519 | |||
Signature Value: | Signature Value: | |||
4b b5 2b bf 15 39 b7 1a 4a af 42 97 78 f2 9e da 7e 81 | 4b b5 2b bf 15 39 b7 1a 4a af 42 97 78 f2 9e da 7e 81 | |||
46 80 69 8f 16 c4 8f 2a 6f a4 db e8 25 41 c5 82 07 ba | 46 80 69 8f 16 c4 8f 2a 6f a4 db e8 25 41 c5 82 07 ba | |||
1b c9 cd b0 c2 fa 94 7f fb f0 f0 ec 0e e9 1a 7f f3 7a | 1b c9 cd b0 c2 fa 94 7f fb f0 f0 ec 0e e9 1a 7f f3 7a | |||
94 d9 25 1f a5 cd f1 e6 7a 0f | 94 d9 25 1f a5 cd f1 e6 7a 0f | |||
3. Authentication with Static DH, CCS Identified by 'kid' | 3. Authentication with Static DH, CCS Identified by 'kid' | |||
In this example the Initiator and the Responder are authenticated | In this example, the Initiator and the Responder are authenticated | |||
with ephemeral-static Diffie-Hellman (METHOD = 3). The Initiator | with ephemeral-static Diffie-Hellman (METHOD = 3). The Initiator | |||
supports cipher suites 6 and 2 (in order of preference) and the | supports cipher suites 6 and 2 (in order of preference), and the | |||
Responder only supports cipher suite 2. After an initial negotiation | Responder only supports cipher suite 2. After an initial negotiation | |||
message exchange, cipher suite 2 is used, which determines the | message exchange, cipher suite 2 is used, which determines the | |||
algorithms: | algorithms: | |||
* EDHOC AEAD algorithm = AES-CCM-16-64-128 | * EDHOC AEAD algorithm = AES-CCM-16-64-128 | |||
* EDHOC hash algorithm = SHA-256 | * EDHOC hash algorithm = SHA-256 | |||
* EDHOC MAC length in bytes (Static DH) = 8 | * EDHOC MAC length in bytes (Static DH) = 8 | |||
* EDHOC key exchange algorithm (ECDH curve) = P-256 | * EDHOC key exchange algorithm (ECDH curve) = P-256 | |||
* EDHOC signature algorithm = ES256 | * EDHOC signature algorithm = ES256 | |||
* Application AEAD algorithm = AES-CCM-16-64-128 | * application AEAD algorithm = AES-CCM-16-64-128 | |||
* Application hash algorithm = SHA-256 | ||||
The public keys are represented as raw public keys (RPK), encoded in | * application hash algorithm = SHA-256 | |||
The public keys are represented as raw public keys (RPKs), encoded in | ||||
a CWT Claims Set (CCS) and identified by the COSE header parameter | a CWT Claims Set (CCS) and identified by the COSE header parameter | |||
'kid'. | 'kid'. | |||
3.1. message_1 (first time) | 3.1. message_1 (First Time) | |||
Both endpoints are authenticated with static DH, i.e., METHOD = 3: | Both endpoints are authenticated with static DH, i.e., METHOD = 3: | |||
METHOD (CBOR Data Item) (1 byte) | METHOD (CBOR Data Item) (1 byte) | |||
03 | 03 | |||
The Initiator selects its preferred cipher suite 6. A single cipher | The Initiator selects its preferred cipher suite 6. A single cipher | |||
suite is encoded as an int: | suite is encoded as an int: | |||
SUITES_I (CBOR Data Item) (1 byte) | SUITES_I (CBOR Data Item) (1 byte) | |||
skipping to change at page 32, line 42 ¶ | skipping to change at line 1472 ¶ | |||
G_X (Raw Value) (32 bytes) | G_X (Raw Value) (32 bytes) | |||
74 1a 13 d7 ba 04 8f bb 61 5e 94 38 6a a3 b6 1b ea 5b 3d 8f 65 f3 26 | 74 1a 13 d7 ba 04 8f bb 61 5e 94 38 6a a3 b6 1b ea 5b 3d 8f 65 f3 26 | |||
20 b7 49 be e8 d2 78 ef a9 | 20 b7 49 be e8 d2 78 ef a9 | |||
Initiator's ephemeral public key, 'x'-coordinate | Initiator's ephemeral public key, 'x'-coordinate | |||
G_X (CBOR Data Item) (34 bytes) | G_X (CBOR Data Item) (34 bytes) | |||
58 20 74 1a 13 d7 ba 04 8f bb 61 5e 94 38 6a a3 b6 1b ea 5b 3d 8f 65 | 58 20 74 1a 13 d7 ba 04 8f bb 61 5e 94 38 6a a3 b6 1b ea 5b 3d 8f 65 | |||
f3 26 20 b7 49 be e8 d2 78 ef a9 | f3 26 20 b7 49 be e8 d2 78 ef a9 | |||
The Initiator selects its connection identifier C_I to be the byte | The Initiator selects its connection identifier C_I to be the byte | |||
string 0x0e, which since it is represented by the 1-byte CBOR int 14 | string 0x0e, which is encoded as 0x0e since it is represented by the | |||
is encoded as 0x0e: | 1-byte CBOR int 14: | |||
Connection identifier chosen by Initiator | Connection identifier chosen by the Initiator | |||
C_I (Raw Value) (1 byte) | C_I (Raw Value) (1 byte) | |||
0e | 0e | |||
Connection identifier chosen by Initiator | Connection identifier chosen by the Initiator | |||
C_I (CBOR Data Item) (1 byte) | C_I (CBOR Data Item) (1 byte) | |||
0e | 0e | |||
No external authorization data: | No external authorization data: | |||
EAD_1 (CBOR Sequence) (0 bytes) | EAD_1 (CBOR Sequence) (0 bytes) | |||
The Initiator constructs message_1: | The Initiator constructs message_1: | |||
message_1 = | message_1 = | |||
( | ( | |||
3, | 3, | |||
6, | 6, | |||
h'741a13d7ba048fbb615e94386aa3b61bea5b3d8f65f32620 | h'741a13d7ba048fbb615e94386aa3b61bea5b3d8f65f32620 | |||
b749bee8d278efa9', | b749bee8d278efa9', | |||
14 | 14 | |||
) | ) | |||
message_1 (CBOR Sequence) (37 bytes) | message_1 (CBOR Sequence) (37 bytes) | |||
03 06 58 20 74 1a 13 d7 ba 04 8f bb 61 5e 94 38 6a a3 b6 1b ea 5b 3d | 03 06 58 20 74 1a 13 d7 ba 04 8f bb 61 5e 94 38 6a a3 b6 1b ea 5b 3d | |||
8f 65 f3 26 20 b7 49 be e8 d2 78 ef a9 0e | 8f 65 f3 26 20 b7 49 be e8 d2 78 ef a9 0e | |||
3.2. error | 3.2. error | |||
The Responder does not support cipher suite 6 and sends an error with | The Responder does not support cipher suite 6 and sends an error with | |||
ERR_CODE 2 containing SUITES_R as ERR_INFO. The Responder proposes | ERR_CODE 2 containing SUITES_R as ERR_INFO. The Responder proposes | |||
cipher suite 2, a single cipher suite thus encoded as an int. | cipher suite 2, a single cipher suite thus encoded as an int. | |||
SUITES_R | SUITES_R | |||
02 | 02 | |||
error (CBOR Sequence) (2 bytes) | error (CBOR Sequence) (2 bytes) | |||
02 02 | 02 02 | |||
3.3. message_1 (second time) | 3.3. message_1 (Second Time) | |||
Same steps are performed as for message_1 the first time, | Same steps are performed as for message_1 the first time | |||
Section 3.1, but with updated SUITES_I. | (Section 3.1) but with SUITES_I updated. | |||
Both endpoints are authenticated with static DH, i.e., METHOD = 3: | Both endpoints are authenticated with static DH, i.e., METHOD = 3: | |||
METHOD (CBOR Data Item) (1 byte) | METHOD (CBOR Data Item) (1 byte) | |||
03 | 03 | |||
The Initiator selects cipher suite 2 and indicates the more preferred | The Initiator selects cipher suite 2 and indicates the more preferred | |||
cipher suite(s), in this case 6, all encoded as the array [6, 2]: | cipher suite(s), in this case 6, all encoded as the array [6, 2]: | |||
SUITES_I (CBOR Data Item) (3 bytes) | SUITES_I (CBOR Data Item) (3 bytes) | |||
skipping to change at page 34, line 28 ¶ | skipping to change at line 1554 ¶ | |||
(Raw Value) (32 bytes) | (Raw Value) (32 bytes) | |||
51 e8 af 6c 6e db 78 16 01 ad 1d 9c 5f a8 bf 7a a1 57 16 c7 c0 6a 5d | 51 e8 af 6c 6e db 78 16 01 ad 1d 9c 5f a8 bf 7a a1 57 16 c7 c0 6a 5d | |||
03 85 03 c6 14 ff 80 c9 b3 | 03 85 03 c6 14 ff 80 c9 b3 | |||
Initiator's ephemeral public key, 'x'-coordinate | Initiator's ephemeral public key, 'x'-coordinate | |||
G_X (CBOR Data Item) (34 bytes) | G_X (CBOR Data Item) (34 bytes) | |||
58 20 8a f6 f4 30 eb e1 8d 34 18 40 17 a9 a1 1b f5 11 c8 df f8 f8 34 | 58 20 8a f6 f4 30 eb e1 8d 34 18 40 17 a9 a1 1b f5 11 c8 df f8 f8 34 | |||
73 0b 96 c1 b7 c8 db ca 2f c3 b6 | 73 0b 96 c1 b7 c8 db ca 2f c3 b6 | |||
The Initiator selects its connection identifier C_I to be the byte | The Initiator selects its connection identifier C_I to be the byte | |||
string 0x37, which since it is represented by the 1-byte CBOR int -24 | string 0x37, which is encoded as 0x37 since it is represented by the | |||
is encoded as 0x37: | 1-byte CBOR int -24: | |||
Connection identifier chosen by Initiator | Connection identifier chosen by the Initiator | |||
C_I (Raw Value) (1 byte) | C_I (Raw Value) (1 byte) | |||
37 | 37 | |||
Connection identifier chosen by Initiator | Connection identifier chosen by the Initiator | |||
C_I (CBOR Data Item) (1 byte) | C_I (CBOR Data Item) (1 byte) | |||
37 | 37 | |||
No external authorization data: | No external authorization data: | |||
EAD_1 (CBOR Sequence) (0 bytes) | EAD_1 (CBOR Sequence) (0 bytes) | |||
The Initiator constructs message_1: | The Initiator constructs message_1: | |||
message_1 = | message_1 = | |||
( | ( | |||
3, | 3, | |||
[6, 2], | [6, 2], | |||
h'8af6f430ebe18d34184017a9a11bf511c8dff8f834730b96 | h'8af6f430ebe18d34184017a9a11bf511c8dff8f834730b96 | |||
c1b7c8dbca2fc3b6', | c1b7c8dbca2fc3b6', | |||
-24 | -24 | |||
) | ) | |||
message_1 (CBOR Sequence) (39 bytes) | message_1 (CBOR Sequence) (39 bytes) | |||
03 82 06 02 58 20 8a f6 f4 30 eb e1 8d 34 18 40 17 a9 a1 1b f5 11 c8 | 03 82 06 02 58 20 8a f6 f4 30 eb e1 8d 34 18 40 17 a9 a1 1b f5 11 c8 | |||
df f8 f8 34 73 0b 96 c1 b7 c8 db ca 2f c3 b6 37 | df f8 f8 34 73 0b 96 c1 b7 c8 db ca 2f c3 b6 37 | |||
3.4. message_2 | 3.4. message_2 | |||
The Responder supports the selected cipher suite 2 and not the by the | The Responder supports the selected cipher suite 2 and not the | |||
Initiator more preferred cipher suite(s) 6, so SUITES_I is | Initiator's more preferred cipher suite(s) 6, so SUITES_I is | |||
acceptable. | acceptable. | |||
The Responder creates an ephemeral key pair for use with the EDHOC | The Responder creates an ephemeral key pair for use with the EDHOC | |||
key exchange algorithm: | key exchange algorithm: | |||
Responder's ephemeral private key | Responder's ephemeral private key | |||
Y (Raw Value) (32 bytes) | Y (Raw Value) (32 bytes) | |||
e2 f4 12 67 77 20 5e 85 3b 43 7d 6e ac a1 e1 f7 53 cd cc 3e 2c 69 fa | e2 f4 12 67 77 20 5e 85 3b 43 7d 6e ac a1 e1 f7 53 cd cc 3e 2c 69 fa | |||
88 4b 0a 1a 64 09 77 e4 18 | 88 4b 0a 1a 64 09 77 e4 18 | |||
skipping to change at page 35, line 48 ¶ | skipping to change at line 1614 ¶ | |||
(Raw Value) (32 bytes) | (Raw Value) (32 bytes) | |||
5e 4f 0d d8 a3 da 0b aa 16 b9 d3 ad 56 a0 c1 86 0a 94 0a f8 59 14 91 | 5e 4f 0d d8 a3 da 0b aa 16 b9 d3 ad 56 a0 c1 86 0a 94 0a f8 59 14 91 | |||
5e 25 01 9b 40 24 17 e9 9d | 5e 25 01 9b 40 24 17 e9 9d | |||
Responder's ephemeral public key, 'x'-coordinate | Responder's ephemeral public key, 'x'-coordinate | |||
G_Y (CBOR Data Item) (34 bytes) | G_Y (CBOR Data Item) (34 bytes) | |||
58 20 41 97 01 d7 f0 0a 26 c2 dc 58 7a 36 dd 75 25 49 f3 37 63 c8 93 | 58 20 41 97 01 d7 f0 0a 26 c2 dc 58 7a 36 dd 75 25 49 f3 37 63 c8 93 | |||
42 2c 8e a0 f9 55 a1 3a 4f f5 d5 | 42 2c 8e a0 f9 55 a1 3a 4f f5 d5 | |||
The Responder selects its connection identifier C_R to be the byte | The Responder selects its connection identifier C_R to be the byte | |||
string 0x27, which since it is represented by the 1-byte CBOR int -8 | string 0x27, which is encoded as 0x27 since it is represented by the | |||
is encoded as 0x27: | 1-byte CBOR int -8: | |||
Connection identifier chosen by Responder | Connection identifier chosen by the Responder | |||
C_R (raw value) (1 byte) | C_R (raw value) (1 byte) | |||
27 | 27 | |||
Connection identifier chosen by Responder | Connection identifier chosen by the Responder | |||
C_R (CBOR Data Item) (1 byte) | C_R (CBOR Data Item) (1 byte) | |||
27 | 27 | |||
The transcript hash TH_2 is calculated using the EDHOC hash | The transcript hash TH_2 is calculated using the EDHOC hash | |||
algorithm: | algorithm: | |||
TH_2 = H( G_Y, H(message_1) ) | TH_2 = H( G_Y, H(message_1) ) | |||
H(message_1) (Raw Value) (32 bytes) | H(message_1) (Raw Value) (32 bytes) | |||
ca 02 ca bd a5 a8 90 27 49 b4 2f 71 10 50 bb 4d bd 52 15 3e 87 52 75 | ca 02 ca bd a5 a8 90 27 49 b4 2f 71 10 50 bb 4d bd 52 15 3e 87 52 75 | |||
skipping to change at page 36, line 43 ¶ | skipping to change at line 1655 ¶ | |||
2f 71 10 50 bb 4d bd 52 15 3e 87 52 75 94 b3 9f 50 cd f0 19 88 8c | 2f 71 10 50 bb 4d bd 52 15 3e 87 52 75 94 b3 9f 50 cd f0 19 88 8c | |||
TH_2 (Raw Value) (32 bytes) | TH_2 (Raw Value) (32 bytes) | |||
35 6e fd 53 77 14 25 e0 08 f3 fe 3a 86 c8 3f f4 c6 b1 6e 57 02 8f f3 | 35 6e fd 53 77 14 25 e0 08 f3 fe 3a 86 c8 3f f4 c6 b1 6e 57 02 8f f3 | |||
9d 52 36 c1 82 b2 02 08 4b | 9d 52 36 c1 82 b2 02 08 4b | |||
TH_2 (CBOR Data Item) (34 bytes) | TH_2 (CBOR Data Item) (34 bytes) | |||
58 20 35 6e fd 53 77 14 25 e0 08 f3 fe 3a 86 c8 3f f4 c6 b1 6e 57 02 | 58 20 35 6e fd 53 77 14 25 e0 08 f3 fe 3a 86 c8 3f f4 c6 b1 6e 57 02 | |||
8f f3 9d 52 36 c1 82 b2 02 08 4b | 8f f3 9d 52 36 c1 82 b2 02 08 4b | |||
PRK_2e is specified in Section 4.1.1.1 of [I-D.ietf-lake-edhoc]. | PRK_2e is specified in Section 4.1.1.1 of [RFC9528]. | |||
First, the ECDH shared secret G_XY is computed from G_X and Y, or G_Y | First, the ECDH shared secret G_XY is computed from G_X and Y or G_Y | |||
and X: | and X: | |||
G_XY (Raw Value) (ECDH shared secret) (32 bytes) | G_XY (Raw Value) (ECDH shared secret) (32 bytes) | |||
2f 0c b7 e8 60 ba 53 8f bf 5c 8b de d0 09 f6 25 9b 4b 62 8f e1 eb 7d | 2f 0c b7 e8 60 ba 53 8f bf 5c 8b de d0 09 f6 25 9b 4b 62 8f e1 eb 7d | |||
be 93 78 e5 ec f7 a8 24 ba | be 93 78 e5 ec f7 a8 24 ba | |||
Then, PRK_2e is calculated using EDHOC_Extract() determined by the | ||||
EDHOC hash algorithm: | ||||
PRK_2e = EDHOC_Extract( salt, G_XY ) = | Then, PRK_2e is calculated using EDHOC_Extract(), which is determined | |||
by the EDHOC hash algorithm: | ||||
PRK_2e = EDHOC_Extract( salt, G_XY ) | ||||
= HMAC-SHA-256( salt, G_XY ) | = HMAC-SHA-256( salt, G_XY ) | |||
where salt is TH_2: | where salt is TH_2: | |||
salt (Raw Value) (32 bytes) | salt (Raw Value) (32 bytes) | |||
35 6e fd 53 77 14 25 e0 08 f3 fe 3a 86 c8 3f f4 c6 b1 6e 57 02 8f f3 | 35 6e fd 53 77 14 25 e0 08 f3 fe 3a 86 c8 3f f4 c6 b1 6e 57 02 8f f3 | |||
9d 52 36 c1 82 b2 02 08 4b | 9d 52 36 c1 82 b2 02 08 4b | |||
PRK_2e (Raw Value) (32 bytes) | PRK_2e (Raw Value) (32 bytes) | |||
5a a0 d6 9f 3e 3d 1e 0c 47 9f 0b 8a 48 66 90 c9 80 26 30 c3 46 6b 1d | 5a a0 d6 9f 3e 3d 1e 0c 47 9f 0b 8a 48 66 90 c9 80 26 30 c3 46 6b 1d | |||
c9 23 71 c9 82 56 31 70 b5 | c9 23 71 c9 82 56 31 70 b5 | |||
Since METHOD = 3, the Responder authenticates using static DH. The | Since METHOD = 3, the Responder authenticates using static DH. The | |||
EDHOC key exchange algorithm is based on the same curve as for the | EDHOC key exchange algorithm is based on the same curve as for the | |||
ephemeral keys, which is P-256, since the selected cipher suite is 2. | ephemeral keys, which is P-256, since the selected cipher suite is 2. | |||
The Responder's static Diffie-Hellman P-256 key pair: | The Responder's static Diffie-Hellman P-256 key pair consists of a | |||
private key and a public key. | ||||
Responder's private authentication key | Responder's private authentication key | |||
SK_R (Raw Value) (32 bytes) | SK_R (Raw Value) (32 bytes) | |||
72 cc 47 61 db d4 c7 8f 75 89 31 aa 58 9d 34 8d 1e f8 74 a7 e3 03 ed | 72 cc 47 61 db d4 c7 8f 75 89 31 aa 58 9d 34 8d 1e f8 74 a7 e3 03 ed | |||
e2 f1 40 dc f3 e6 aa 4a ac | e2 f1 40 dc f3 e6 aa 4a ac | |||
Responder's public authentication key, 'x'-coordinate | Responder's public authentication key, 'x'-coordinate | |||
(Raw Value) (32 bytes) | (Raw Value) (32 bytes) | |||
bb c3 49 60 52 6e a4 d3 2e 94 0c ad 2a 23 41 48 dd c2 17 91 a1 2a fb | bb c3 49 60 52 6e a4 d3 2e 94 0c ad 2a 23 41 48 dd c2 17 91 a1 2a fb | |||
cb ac 93 62 20 46 dd 44 f0 | cb ac 93 62 20 46 dd 44 f0 | |||
Responder's public authentication key, 'y'-coordinate | Responder's public authentication key, 'y'-coordinate | |||
(Raw Value) (32 bytes) | (Raw Value) (32 bytes) | |||
45 19 e2 57 23 6b 2a 0c e2 02 3f 09 31 f1 f3 86 ca 7a fd a6 4f cd e0 | 45 19 e2 57 23 6b 2a 0c e2 02 3f 09 31 f1 f3 86 ca 7a fd a6 4f cd e0 | |||
10 8c 22 4c 51 ea bf 60 72 | 10 8c 22 4c 51 ea bf 60 72 | |||
Since the Responder authenticates with static DH (METHOD = 3), | Since the Responder authenticates with static DH (METHOD = 3), | |||
PRK_3e2m is derived from SALT_3e2m and G_RX. | PRK_3e2m is derived from SALT_3e2m and G_RX. | |||
The input needed to calculate SALT_3e2m is defined in Section 4.1.2 | The input needed to calculate SALT_3e2m is defined in Section 4.1.2 | |||
of [I-D.ietf-lake-edhoc], using EDHOC_Expand() with the EDHOC hash | of [RFC9528], using EDHOC_Expand() with the EDHOC hash algorithm: | |||
algorithm: | ||||
SALT_3e2m = EDHOC_KDF( PRK_2e, 1, TH_2, hash_length ) = | SALT_3e2m = EDHOC_KDF( PRK_2e, 1, TH_2, hash_length ) | |||
= HKDF-Expand( PRK_2e, info, hash_length ) | = HKDF-Expand( PRK_2e, info, hash_length ) | |||
where hash_length is the length in bytes of the output of the EDHOC | where hash_length is the length in bytes of the output of the EDHOC | |||
hash algorithm, and info for SALT_3e2m is: | hash algorithm, and info for SALT_3e2m is: | |||
info = | info = | |||
( | ( | |||
1, | 1, | |||
h'356efd53771425e008f3fe3a86c83ff4c6b16e57028ff39d | h'356efd53771425e008f3fe3a86c83ff4c6b16e57028ff39d | |||
5236c182b202084b', | 5236c182b202084b', | |||
32 | 32 | |||
) | ) | |||
info for SALT_3e2m (CBOR Sequence) (37 bytes) | info for SALT_3e2m (CBOR Sequence) (37 bytes) | |||
01 58 20 35 6e fd 53 77 14 25 e0 08 f3 fe 3a 86 c8 3f f4 c6 b1 6e 57 | 01 58 20 35 6e fd 53 77 14 25 e0 08 f3 fe 3a 86 c8 3f f4 c6 b1 6e 57 | |||
02 8f f3 9d 52 36 c1 82 b2 02 08 4b 18 20 | 02 8f f3 9d 52 36 c1 82 b2 02 08 4b 18 20 | |||
SALT_3e2m (Raw Value) (32 bytes) | SALT_3e2m (Raw Value) (32 bytes) | |||
af 4e 10 3a 47 cb 3c f3 25 70 d5 c2 5a d2 77 32 bd 8d 81 78 e9 a6 9d | af 4e 10 3a 47 cb 3c f3 25 70 d5 c2 5a d2 77 32 bd 8d 81 78 e9 a6 9d | |||
06 1c 31 a2 7f 8e 3c a9 26 | 06 1c 31 a2 7f 8e 3c a9 26 | |||
PRK_3e2m is specified in Section 4.1.1.2 of [I-D.ietf-lake-edhoc]. | PRK_3e2m is specified in Section 4.1.1.2 of [RFC9528]. | |||
PRK_3e2m is derived from G_RX using EDHOC_Extract() with the EDHOC | PRK_3e2m is derived from G_RX using EDHOC_Extract() with the EDHOC | |||
hash algorithm: | hash algorithm: | |||
PRK_3e2m = EDHOC_Extract( SALT_3e2m, G_RX ) = | PRK_3e2m = EDHOC_Extract( SALT_3e2m, G_RX ) | |||
= HMAC-SHA-256( SALT_3e2m, G_RX ) | = HMAC-SHA-256( SALT_3e2m, G_RX ) | |||
where G_RX is the ECDH shared secret calculated from G_X and R, or | where G_RX is the ECDH shared secret calculated from G_X and R, or | |||
G_R and X. | G_R and X. | |||
G_RX (Raw Value) (ECDH shared secret) (32 bytes) | G_RX (Raw Value) (ECDH shared secret) (32 bytes) | |||
f2 b6 ee a0 22 20 b9 5e ee 5a 0b c7 01 f0 74 e0 0a 84 3e a0 24 22 f6 | f2 b6 ee a0 22 20 b9 5e ee 5a 0b c7 01 f0 74 e0 0a 84 3e a0 24 22 f6 | |||
08 25 fb 26 9b 3e 16 14 23 | 08 25 fb 26 9b 3e 16 14 23 | |||
PRK_3e2m (Raw Value) (32 bytes) | PRK_3e2m (Raw Value) (32 bytes) | |||
skipping to change at page 39, line 7 ¶ | skipping to change at line 1760 ¶ | |||
MAC_2: | MAC_2: | |||
MAC_2 = EDHOC_KDF( PRK_3e2m, 2, context_2, mac_length_2 ) | MAC_2 = EDHOC_KDF( PRK_3e2m, 2, context_2, mac_length_2 ) | |||
context_2 = << C_R, ID_CRED_R, TH_2, CRED_R, ? EAD_2 >> | context_2 = << C_R, ID_CRED_R, TH_2, CRED_R, ? EAD_2 >> | |||
CRED_R is identified by a 'kid' with byte string value 0x32: | CRED_R is identified by a 'kid' with byte string value 0x32: | |||
ID_CRED_R = | ID_CRED_R = | |||
{ | { | |||
4 : h'32' | 4 : h'32' | |||
} | } | |||
ID_CRED_R (CBOR Data Item) (4 bytes) | ID_CRED_R (CBOR Data Item) (4 bytes) | |||
a1 04 41 32 | a1 04 41 32 | |||
CRED_R is an RPK encoded as a CCS: | CRED_R is an RPK encoded as a CCS: | |||
{ /CCS/ | { /CCS/ | |||
2 : "example.edu", /sub/ | 2 : "example.edu", /sub/ | |||
8 : { /cnf/ | 8 : { /cnf/ | |||
1 : { /COSE_Key/ | 1 : { /COSE_Key/ | |||
1 : 2, /kty/ | 1 : 2, /kty/ | |||
2 : h'32', /kid/ | 2 : h'32', /kid/ | |||
-1 : 1, /crv/ | -1 : 1, /crv/ | |||
-2 : h'BBC34960526EA4D32E940CAD2A234148 | -2 : h'bbc34960526ea4d32e940cad2a234148 | |||
DDC21791A12AFBCBAC93622046DD44F0', /x/ | ddc21791a12afbcbac93622046dd44f0', /x/ | |||
-3 : h'4519E257236B2A0CE2023F0931F1F386 | -3 : h'4519e257236b2a0ce2023f0931f1f386 | |||
CA7AFDA64FCDE0108C224C51EABF6072' /y/ | ca7afda64fcde0108c224c51eabf6072' /y/ | |||
} | } | |||
} | } | |||
} | } | |||
CRED_R (CBOR Data Item) (95 bytes) | CRED_R (CBOR Data Item) (95 bytes) | |||
a2 02 6b 65 78 61 6d 70 6c 65 2e 65 64 75 08 a1 01 a5 01 02 02 41 32 | a2 02 6b 65 78 61 6d 70 6c 65 2e 65 64 75 08 a1 01 a5 01 02 02 41 32 | |||
20 01 21 58 20 bb c3 49 60 52 6e a4 d3 2e 94 0c ad 2a 23 41 48 dd c2 | 20 01 21 58 20 bb c3 49 60 52 6e a4 d3 2e 94 0c ad 2a 23 41 48 dd c2 | |||
17 91 a1 2a fb cb ac 93 62 20 46 dd 44 f0 22 58 20 45 19 e2 57 23 6b | 17 91 a1 2a fb cb ac 93 62 20 46 dd 44 f0 22 58 20 45 19 e2 57 23 6b | |||
2a 0c e2 02 3f 09 31 f1 f3 86 ca 7a fd a6 4f cd e0 10 8c 22 4c 51 ea | 2a 0c e2 02 3f 09 31 f1 f3 86 ca 7a fd a6 4f cd e0 10 8c 22 4c 51 ea | |||
bf 60 72 | bf 60 72 | |||
skipping to change at page 40, line 4 ¶ | skipping to change at line 1803 ¶ | |||
context_2 = << C_R, ID_CRED_R, TH_2, CRED_R, ? EAD_2 >> | context_2 = << C_R, ID_CRED_R, TH_2, CRED_R, ? EAD_2 >> | |||
context_2 (CBOR Sequence) (134 bytes) | context_2 (CBOR Sequence) (134 bytes) | |||
27 a1 04 41 32 58 20 35 6e fd 53 77 14 25 e0 08 f3 fe 3a 86 c8 3f f4 | 27 a1 04 41 32 58 20 35 6e fd 53 77 14 25 e0 08 f3 fe 3a 86 c8 3f f4 | |||
c6 b1 6e 57 02 8f f3 9d 52 36 c1 82 b2 02 08 4b a2 02 6b 65 78 61 6d | c6 b1 6e 57 02 8f f3 9d 52 36 c1 82 b2 02 08 4b a2 02 6b 65 78 61 6d | |||
70 6c 65 2e 65 64 75 08 a1 01 a5 01 02 02 41 32 20 01 21 58 20 bb c3 | 70 6c 65 2e 65 64 75 08 a1 01 a5 01 02 02 41 32 20 01 21 58 20 bb c3 | |||
49 60 52 6e a4 d3 2e 94 0c ad 2a 23 41 48 dd c2 17 91 a1 2a fb cb ac | 49 60 52 6e a4 d3 2e 94 0c ad 2a 23 41 48 dd c2 17 91 a1 2a fb cb ac | |||
93 62 20 46 dd 44 f0 22 58 20 45 19 e2 57 23 6b 2a 0c e2 02 3f 09 31 | 93 62 20 46 dd 44 f0 22 58 20 45 19 e2 57 23 6b 2a 0c e2 02 3f 09 31 | |||
f1 f3 86 ca 7a fd a6 4f cd e0 10 8c 22 4c 51 ea bf 60 72 | f1 f3 86 ca 7a fd a6 4f cd e0 10 8c 22 4c 51 ea bf 60 72 | |||
context_2 (CBOR byte string) (136 bytes) | context_2 (CBOR byte string) (136 bytes) | |||
58 86 27 a1 04 41 32 58 20 35 6e fd 53 77 14 25 e0 08 f3 fe 3a 86 c8 | 58 86 27 a1 04 41 32 58 20 35 6e fd 53 77 14 25 e0 08 f3 fe 3a 86 c8 | |||
3f f4 c6 b1 6e 57 02 8f f3 9d 52 36 c1 82 b2 02 08 4b a2 02 6b 65 78 | 3f f4 c6 b1 6e 57 02 8f f3 9d 52 36 c1 82 b2 02 08 4b a2 02 6b 65 78 | |||
61 6d 70 6c 65 2e 65 64 75 08 a1 01 a5 01 02 02 41 32 20 01 21 58 20 | 61 6d 70 6c 65 2e 65 64 75 08 a1 01 a5 01 02 02 41 32 20 01 21 58 20 | |||
bb c3 49 60 52 6e a4 d3 2e 94 0c ad 2a 23 41 48 dd c2 17 91 a1 2a fb | bb c3 49 60 52 6e a4 d3 2e 94 0c ad 2a 23 41 48 dd c2 17 91 a1 2a fb | |||
cb ac 93 62 20 46 dd 44 f0 22 58 20 45 19 e2 57 23 6b 2a 0c e2 02 3f | cb ac 93 62 20 46 dd 44 f0 22 58 20 45 19 e2 57 23 6b 2a 0c e2 02 3f | |||
09 31 f1 f3 86 ca 7a fd a6 4f cd e0 10 8c 22 4c 51 ea bf 60 72 | 09 31 f1 f3 86 ca 7a fd a6 4f cd e0 10 8c 22 4c 51 ea bf 60 72 | |||
MAC_2 is computed through EDHOC_Expand() using the EDHOC hash | MAC_2 is computed through EDHOC_Expand() using the EDHOC hash | |||
algorithm, see Section 4.1.2 of [I-D.ietf-lake-edhoc]: | algorithm (see Section 4.1.2 of [RFC9528]): | |||
MAC_2 = HKDF-Expand(PRK_3e2m, info, mac_length_2), where | MAC_2 = HKDF-Expand( PRK_3e2m, info, mac_length_2 ) | |||
where | ||||
info = ( 2, context_2, mac_length_2 ) | info = ( 2, context_2, mac_length_2 ) | |||
Since METHOD = 3, mac_length_2 is given by the EDHOC MAC length. | Since METHOD = 3, mac_length_2 is given by the EDHOC MAC length. | |||
info for MAC_2 is: | info for MAC_2 is: | |||
info = | info = | |||
( | ( | |||
2, | 2, | |||
h'27a10441325820356efd53771425e008f3fe3a86c83ff4c6 | h'27a10441325820356efd53771425e008f3fe3a86c83ff4c6 | |||
b16e57028ff39d5236c182b202084ba2026b6578616d706c | b16e57028ff39d5236c182b202084ba2026b6578616d706c | |||
652e65647508a101a501020241322001215820bbc3496052 | 652e65647508a101a501020241322001215820bbc3496052 | |||
6ea4d32e940cad2a234148ddc21791a12afbcbac93622046 | 6ea4d32e940cad2a234148ddc21791a12afbcbac93622046 | |||
dd44f02258204519e257236b2a0ce2023f0931f1f386ca7a | dd44f02258204519e257236b2a0ce2023f0931f1f386ca7a | |||
fda64fcde0108c224c51eabf6072', | fda64fcde0108c224c51eabf6072', | |||
8 | 8 | |||
) | ) | |||
where the last value is the EDHOC MAC length in bytes. | where the last value is the EDHOC MAC length in bytes. | |||
info for MAC_2 (CBOR Sequence) (138 bytes) | info for MAC_2 (CBOR Sequence) (138 bytes) | |||
02 58 86 27 a1 04 41 32 58 20 35 6e fd 53 77 14 25 e0 08 f3 fe 3a 86 | 02 58 86 27 a1 04 41 32 58 20 35 6e fd 53 77 14 25 e0 08 f3 fe 3a 86 | |||
c8 3f f4 c6 b1 6e 57 02 8f f3 9d 52 36 c1 82 b2 02 08 4b a2 02 6b 65 | c8 3f f4 c6 b1 6e 57 02 8f f3 9d 52 36 c1 82 b2 02 08 4b a2 02 6b 65 | |||
78 61 6d 70 6c 65 2e 65 64 75 08 a1 01 a5 01 02 02 41 32 20 01 21 58 | 78 61 6d 70 6c 65 2e 65 64 75 08 a1 01 a5 01 02 02 41 32 20 01 21 58 | |||
20 bb c3 49 60 52 6e a4 d3 2e 94 0c ad 2a 23 41 48 dd c2 17 91 a1 2a | 20 bb c3 49 60 52 6e a4 d3 2e 94 0c ad 2a 23 41 48 dd c2 17 91 a1 2a | |||
fb cb ac 93 62 20 46 dd 44 f0 22 58 20 45 19 e2 57 23 6b 2a 0c e2 02 | fb cb ac 93 62 20 46 dd 44 f0 22 58 20 45 19 e2 57 23 6b 2a 0c e2 02 | |||
skipping to change at page 41, line 15 ¶ | skipping to change at line 1865 ¶ | |||
Signature_or_MAC_2 (Raw Value) (8 bytes) | Signature_or_MAC_2 (Raw Value) (8 bytes) | |||
09 43 30 5c 89 9f 5c 54 | 09 43 30 5c 89 9f 5c 54 | |||
Signature_or_MAC_2 (CBOR Data Item) (9 bytes) | Signature_or_MAC_2 (CBOR Data Item) (9 bytes) | |||
48 09 43 30 5c 89 9f 5c 54 | 48 09 43 30 5c 89 9f 5c 54 | |||
The Responder constructs PLAINTEXT_2: | The Responder constructs PLAINTEXT_2: | |||
PLAINTEXT_2 = | PLAINTEXT_2 = | |||
( | ( | |||
C_R, | C_R, | |||
ID_CRED_R / bstr / -24..23, | ID_CRED_R / bstr / -24..23, | |||
Signature_or_MAC_2, | Signature_or_MAC_2, | |||
? EAD_2 | ? EAD_2 | |||
) | ) | |||
Since ID_CRED_R contains a single 'kid' parameter, only the byte | Since ID_CRED_R contains a single 'kid' parameter, only the byte | |||
string value is included in the plaintext, represented as described | string value is included in the plaintext, represented as described | |||
in Section 3.3.2 of [I-D.ietf-lake-edhoc]. The CBOR map { 4 : h'32' | in Section 3.3.2 of [RFC9528]. The CBOR map { 4 : h'32' } is thus | |||
} is thus replaced, not by the CBOR byte string 0x4132, but by the | replaced, not by the CBOR byte string 0x4132, but by the CBOR int | |||
CBOR int 0x32, since that is a one byte encoding of a CBOR integer | 0x32, since that is a one-byte encoding of a CBOR integer (-19). | |||
(-19). | ||||
PLAINTEXT_2 (CBOR Sequence) (11 bytes) | PLAINTEXT_2 (CBOR Sequence) (11 bytes) | |||
27 32 48 09 43 30 5c 89 9f 5c 54 | 27 32 48 09 43 30 5c 89 9f 5c 54 | |||
The input needed to calculate KEYSTREAM_2 is defined in Section 4.1.2 | The input needed to calculate KEYSTREAM_2 is defined in Section 4.1.2 | |||
of [I-D.ietf-lake-edhoc], using EDHOC_Expand() with the EDHOC hash | of [RFC9528], using EDHOC_Expand() with the EDHOC hash algorithm: | |||
algorithm: | ||||
KEYSTREAM_2 = EDHOC_KDF( PRK_2e, 0, TH_2, plaintext_length ) = | KEYSTREAM_2 = EDHOC_KDF( PRK_2e, 0, TH_2, plaintext_length ) | |||
= HKDF-Expand( PRK_2e, info, plaintext_length ) | = HKDF-Expand( PRK_2e, info, plaintext_length ) | |||
where plaintext_length is the length in bytes of PLAINTEXT_2, and | where plaintext_length is the length in bytes of PLAINTEXT_2, and | |||
info for KEYSTREAM_2 is: | info for KEYSTREAM_2 is: | |||
info = | info = | |||
( | ( | |||
0, | 0, | |||
h'356efd53771425e008f3fe3a86c83ff4c6b16e57028ff39d | h'356efd53771425e008f3fe3a86c83ff4c6b16e57028ff39d | |||
5236c182b202084b', | 5236c182b202084b', | |||
11 | 11 | |||
) | ) | |||
where the last value is the length in bytes of PLAINTEXT_2. | where the last value is the length in bytes of PLAINTEXT_2. | |||
info for KEYSTREAM_2 (CBOR Sequence) (36 bytes) | info for KEYSTREAM_2 (CBOR Sequence) (36 bytes) | |||
00 58 20 35 6e fd 53 77 14 25 e0 08 f3 fe 3a 86 c8 3f f4 c6 b1 6e 57 | 00 58 20 35 6e fd 53 77 14 25 e0 08 f3 fe 3a 86 c8 3f f4 c6 b1 6e 57 | |||
02 8f f3 9d 52 36 c1 82 b2 02 08 4b 0b | 02 8f f3 9d 52 36 c1 82 b2 02 08 4b 0b | |||
KEYSTREAM_2 (Raw Value) (11 bytes) | KEYSTREAM_2 (Raw Value) (11 bytes) | |||
bf 50 e9 e7 ba d0 bb 68 17 33 99 | bf 50 e9 e7 ba d0 bb 68 17 33 99 | |||
skipping to change at page 42, line 22 ¶ | skipping to change at line 1916 ¶ | |||
The Responder calculates CIPHERTEXT_2 as XOR between PLAINTEXT_2 and | The Responder calculates CIPHERTEXT_2 as XOR between PLAINTEXT_2 and | |||
KEYSTREAM_2: | KEYSTREAM_2: | |||
CIPHERTEXT_2 (Raw Value) (11 bytes) | CIPHERTEXT_2 (Raw Value) (11 bytes) | |||
98 62 a1 ee f9 e0 e7 e1 88 6f cd | 98 62 a1 ee f9 e0 e7 e1 88 6f cd | |||
The Responder constructs message_2: | The Responder constructs message_2: | |||
message_2 = | message_2 = | |||
( | ( | |||
G_Y_CIPHERTEXT_2, | G_Y_CIPHERTEXT_2 | |||
) | ) | |||
where G_Y_CIPHERTEXT_2 is the bstr encoding of the concatenation of | where G_Y_CIPHERTEXT_2 is the bstr encoding of the concatenation of | |||
the raw values of G_Y and CIPHERTEXT_2. | the raw values of G_Y and CIPHERTEXT_2. | |||
message_2 (CBOR Sequence) (45 bytes) | message_2 (CBOR Sequence) (45 bytes) | |||
58 2b 41 97 01 d7 f0 0a 26 c2 dc 58 7a 36 dd 75 25 49 f3 37 63 c8 93 | 58 2b 41 97 01 d7 f0 0a 26 c2 dc 58 7a 36 dd 75 25 49 f3 37 63 c8 93 | |||
42 2c 8e a0 f9 55 a1 3a 4f f5 d5 98 62 a1 ee f9 e0 e7 e1 88 6f cd | 42 2c 8e a0 f9 55 a1 3a 4f f5 d5 98 62 a1 ee f9 e0 e7 e1 88 6f cd | |||
3.5. message_3 | 3.5. message_3 | |||
skipping to change at page 43, line 4 ¶ | skipping to change at line 1945 ¶ | |||
8f f3 9d 52 36 c1 82 b2 02 08 4b 27 32 48 09 43 30 5c 89 9f 5c 54 a2 | 8f f3 9d 52 36 c1 82 b2 02 08 4b 27 32 48 09 43 30 5c 89 9f 5c 54 a2 | |||
02 6b 65 78 61 6d 70 6c 65 2e 65 64 75 08 a1 01 a5 01 02 02 41 32 20 | 02 6b 65 78 61 6d 70 6c 65 2e 65 64 75 08 a1 01 a5 01 02 02 41 32 20 | |||
01 21 58 20 bb c3 49 60 52 6e a4 d3 2e 94 0c ad 2a 23 41 48 dd c2 17 | 01 21 58 20 bb c3 49 60 52 6e a4 d3 2e 94 0c ad 2a 23 41 48 dd c2 17 | |||
91 a1 2a fb cb ac 93 62 20 46 dd 44 f0 22 58 20 45 19 e2 57 23 6b 2a | 91 a1 2a fb cb ac 93 62 20 46 dd 44 f0 22 58 20 45 19 e2 57 23 6b 2a | |||
0c e2 02 3f 09 31 f1 f3 86 ca 7a fd a6 4f cd e0 10 8c 22 4c 51 ea bf | 0c e2 02 3f 09 31 f1 f3 86 ca 7a fd a6 4f cd e0 10 8c 22 4c 51 ea bf | |||
60 72 | 60 72 | |||
TH_3 (Raw Value) (32 bytes) | TH_3 (Raw Value) (32 bytes) | |||
ad af 67 a7 8a 4b cc 91 e0 18 f8 88 27 62 a7 22 00 0b 25 07 03 9d f0 | ad af 67 a7 8a 4b cc 91 e0 18 f8 88 27 62 a7 22 00 0b 25 07 03 9d f0 | |||
bc 1b bf 0c 16 1b b3 15 5c | bc 1b bf 0c 16 1b b3 15 5c | |||
TH_3 (CBOR Data Item) (34 bytes) | TH_3 (CBOR Data Item) (34 bytes) | |||
58 20 ad af 67 a7 8a 4b cc 91 e0 18 f8 88 27 62 a7 22 00 0b 25 07 03 | 58 20 ad af 67 a7 8a 4b cc 91 e0 18 f8 88 27 62 a7 22 00 0b 25 07 03 | |||
9d f0 bc 1b bf 0c 16 1b b3 15 5c | 9d f0 bc 1b bf 0c 16 1b b3 15 5c | |||
Since METHOD = 3, the Initiator authenticates using static DH. The | Since METHOD = 3, the Initiator authenticates using static DH. The | |||
EDHOC key exchange algorithm is based on the same curve as for the | EDHOC key exchange algorithm is based on the same curve as for the | |||
ephemeral keys, which is P-256, since the selected cipher suite is 2. | ephemeral keys, which is P-256, since the selected cipher suite is 2. | |||
The Initiator's static Diffie-Hellman P-256 key pair: | The Initiator's static Diffie-Hellman P-256 key pair consists of a | |||
private key and a public key: | ||||
Initiator's private authentication key | Initiator's private authentication key | |||
SK_I (Raw Value) (32 bytes) | SK_I (Raw Value) (32 bytes) | |||
fb 13 ad eb 65 18 ce e5 f8 84 17 66 08 41 14 2e 83 0a 81 fe 33 43 80 | fb 13 ad eb 65 18 ce e5 f8 84 17 66 08 41 14 2e 83 0a 81 fe 33 43 80 | |||
a9 53 40 6a 13 05 e8 70 6b | a9 53 40 6a 13 05 e8 70 6b | |||
Initiator's public authentication key, 'x'-coordinate | Initiator's public authentication key, 'x'-coordinate | |||
(Raw Value) (32 bytes) | (Raw Value) (32 bytes) | |||
ac 75 e9 ec e3 e5 0b fc 8e d6 03 99 88 95 22 40 5c 47 bf 16 df 96 66 | ac 75 e9 ec e3 e5 0b fc 8e d6 03 99 88 95 22 40 5c 47 bf 16 df 96 66 | |||
0a 41 29 8c b4 30 7f 7e b6 | 0a 41 29 8c b4 30 7f 7e b6 | |||
Initiator's public authentication key, 'y'-coordinate | Initiator's public authentication key, 'y'-coordinate | |||
(Raw Value) (32 bytes) | (Raw Value) (32 bytes) | |||
6e 5d e6 11 38 8a 4b 8a 82 11 33 4a c7 d3 7e cb 52 a3 87 d2 57 e6 db | 6e 5d e6 11 38 8a 4b 8a 82 11 33 4a c7 d3 7e cb 52 a3 87 d2 57 e6 db | |||
3c 2a 93 df 21 ff 3a ff c8 | 3c 2a 93 df 21 ff 3a ff c8 | |||
Since I authenticates with static DH (METHOD = 3), PRK_4e3m is | Since I authenticates with static DH (METHOD = 3), PRK_4e3m is | |||
derived from SALT_4e3m and G_IY. | derived from SALT_4e3m and G_IY. | |||
The input needed to calculate SALT_4e3m is defined in Section 4.1.2 | The input needed to calculate SALT_4e3m is defined in Section 4.1.2 | |||
of [I-D.ietf-lake-edhoc], using EDHOC_Expand() with the EDHOC hash | of [RFC9528], using EDHOC_Expand() with the EDHOC hash algorithm: | |||
algorithm: | ||||
SALT_4e3m = EDHOC_KDF( PRK_3e2m, 5, TH_3, hash_length ) = | SALT_4e3m = EDHOC_KDF( PRK_3e2m, 5, TH_3, hash_length ) | |||
= HKDF-Expand( PRK_3e2m, info, hash_length ) | = HKDF-Expand( PRK_3e2m, info, hash_length ) | |||
where hash_length is the length in bytes of the output of the EDHOC | where hash_length is the length in bytes of the output of the EDHOC | |||
hash algorithm, and info for SALT_4e3m is: | hash algorithm, and info for SALT_4e3m is: | |||
info = | info = | |||
( | ( | |||
5, | 5, | |||
h'adaf67a78a4bcc91e018f8882762a722000b2507039df0bc | h'adaf67a78a4bcc91e018f8882762a722000b2507039df0bc | |||
1bbf0c161bb3155c', | 1bbf0c161bb3155c', | |||
32 | 32 | |||
) | ) | |||
info for SALT_4e3m (CBOR Sequence) (37 bytes) | info for SALT_4e3m (CBOR Sequence) (37 bytes) | |||
05 58 20 ad af 67 a7 8a 4b cc 91 e0 18 f8 88 27 62 a7 22 00 0b 25 07 | 05 58 20 ad af 67 a7 8a 4b cc 91 e0 18 f8 88 27 62 a7 22 00 0b 25 07 | |||
03 9d f0 bc 1b bf 0c 16 1b b3 15 5c 18 20 | 03 9d f0 bc 1b bf 0c 16 1b b3 15 5c 18 20 | |||
SALT_4e3m (Raw Value) (32 bytes) | SALT_4e3m (Raw Value) (32 bytes) | |||
cf dd f9 51 5a 7e 46 e7 b4 db ff 31 cb d5 6c d0 4b a3 32 25 0d e9 ea | cf dd f9 51 5a 7e 46 e7 b4 db ff 31 cb d5 6c d0 4b a3 32 25 0d e9 ea | |||
5d e1 ca f9 f6 d1 39 14 a7 | 5d e1 ca f9 f6 d1 39 14 a7 | |||
PRK_4e3m is specified in Section 4.1.1.3 of [I-D.ietf-lake-edhoc]. | PRK_4e3m is specified in Section 4.1.1.3 of [RFC9528]. | |||
Since I authenticates with static DH (METHOD = 3), PRK_4e3m is | Since I authenticates with static DH (METHOD = 3), PRK_4e3m is | |||
derived from G_IY using EDHOC_Extract() with the EDHOC hash | derived from G_IY using EDHOC_Extract() with the EDHOC hash | |||
algorithm: | algorithm: | |||
PRK_4e3m = EDHOC_Extract(SALT_4e3m, G_IY) = | PRK_4e3m = EDHOC_Extract(SALT_4e3m, G_IY) | |||
= HMAC-SHA-256(SALT_4e3m, G_IY) | = HMAC-SHA-256(SALT_4e3m, G_IY) | |||
where G_IY is the ECDH shared secret calculated from G_I and Y, or | where G_IY is the ECDH shared secret calculated from G_I and Y, or | |||
G_Y and I. | G_Y and I. | |||
G_IY (Raw Value) (ECDH shared secret) (32 bytes) | G_IY (Raw Value) (ECDH shared secret) (32 bytes) | |||
08 0f 42 50 85 bc 62 49 08 9e ac 8f 10 8e a6 23 26 85 7e 12 ab 07 d7 | 08 0f 42 50 85 bc 62 49 08 9e ac 8f 10 8e a6 23 26 85 7e 12 ab 07 d7 | |||
20 28 ca 1b 5f 36 e0 04 b3 | 20 28 ca 1b 5f 36 e0 04 b3 | |||
PRK_4e3m (Raw Value) (32 bytes) | PRK_4e3m (Raw Value) (32 bytes) | |||
skipping to change at page 44, line 43 ¶ | skipping to change at line 2031 ¶ | |||
MAC_3: | MAC_3: | |||
MAC_3 = EDHOC_KDF( PRK_4e3m, 6, context_3, mac_length_3 ) | MAC_3 = EDHOC_KDF( PRK_4e3m, 6, context_3, mac_length_3 ) | |||
context_3 = << ID_CRED_I, TH_3, CRED_I, ? EAD_3 >> | context_3 = << ID_CRED_I, TH_3, CRED_I, ? EAD_3 >> | |||
CRED_I is identified by a 'kid' with byte string value 0x2b: | CRED_I is identified by a 'kid' with byte string value 0x2b: | |||
ID_CRED_I = | ID_CRED_I = | |||
{ | { | |||
4 : h'2b' | 4 : h'2b' | |||
} | } | |||
ID_CRED_I (CBOR Data Item) (4 bytes) | ID_CRED_I (CBOR Data Item) (4 bytes) | |||
a1 04 41 2b | a1 04 41 2b | |||
CRED_I is an RPK encoded as a CCS: | CRED_I is an RPK encoded as a CCS: | |||
{ /CCS/ | { /CCS/ | |||
2 : "42-50-31-FF-EF-37-32-39", /sub/ | 2 : "42-50-31-FF-EF-37-32-39", /sub/ | |||
8 : { /cnf/ | 8 : { /cnf/ | |||
1 : { /COSE_Key/ | 1 : { /COSE_Key/ | |||
1 : 2, /kty/ | 1 : 2, /kty/ | |||
2 : h'2b', /kid/ | 2 : h'2b', /kid/ | |||
-1 : 1, /crv/ | -1 : 1, /crv/ | |||
-2 : h'AC75E9ECE3E50BFC8ED6039988952240 | -2 : h'ac75e9ece3e50bfc8ed6039988952240 | |||
5C47BF16DF96660A41298CB4307F7EB6' /x/ | 5c47bf16df96660a41298cb4307f7eb6' /x/ | |||
-3 : h'6E5DE611388A4B8A8211334AC7D37ECB | -3 : h'6e5de611388a4b8a8211334ac7d37ecb | |||
52A387D257E6DB3C2A93DF21FF3AFFC8' /y/ | 52a387d257e6db3c2a93df21ff3affc8' /y/ | |||
} | } | |||
} | } | |||
} | } | |||
CRED_I (CBOR Data Item) (107 bytes) | CRED_I (CBOR Data Item) (107 bytes) | |||
a2 02 77 34 32 2d 35 30 2d 33 31 2d 46 46 2d 45 46 2d 33 37 2d 33 32 | a2 02 77 34 32 2d 35 30 2d 33 31 2d 46 46 2d 45 46 2d 33 37 2d 33 32 | |||
2d 33 39 08 a1 01 a5 01 02 02 41 2b 20 01 21 58 20 ac 75 e9 ec e3 e5 | 2d 33 39 08 a1 01 a5 01 02 02 41 2b 20 01 21 58 20 ac 75 e9 ec e3 e5 | |||
0b fc 8e d6 03 99 88 95 22 40 5c 47 bf 16 df 96 66 0a 41 29 8c b4 30 | 0b fc 8e d6 03 99 88 95 22 40 5c 47 bf 16 df 96 66 0a 41 29 8c b4 30 | |||
7f 7e b6 22 58 20 6e 5d e6 11 38 8a 4b 8a 82 11 33 4a c7 d3 7e cb 52 | 7f 7e b6 22 58 20 6e 5d e6 11 38 8a 4b 8a 82 11 33 4a c7 d3 7e cb 52 | |||
a3 87 d2 57 e6 db 3c 2a 93 df 21 ff 3a ff c8 | a3 87 d2 57 e6 db 3c 2a 93 df 21 ff 3a ff c8 | |||
skipping to change at page 45, line 52 ¶ | skipping to change at line 2086 ¶ | |||
context_3 (CBOR byte string) (147 bytes) | context_3 (CBOR byte string) (147 bytes) | |||
58 91 a1 04 41 2b 58 20 ad af 67 a7 8a 4b cc 91 e0 18 f8 88 27 62 a7 | 58 91 a1 04 41 2b 58 20 ad af 67 a7 8a 4b cc 91 e0 18 f8 88 27 62 a7 | |||
22 00 0b 25 07 03 9d f0 bc 1b bf 0c 16 1b b3 15 5c a2 02 77 34 32 2d | 22 00 0b 25 07 03 9d f0 bc 1b bf 0c 16 1b b3 15 5c a2 02 77 34 32 2d | |||
35 30 2d 33 31 2d 46 46 2d 45 46 2d 33 37 2d 33 32 2d 33 39 08 a1 01 | 35 30 2d 33 31 2d 46 46 2d 45 46 2d 33 37 2d 33 32 2d 33 39 08 a1 01 | |||
a5 01 02 02 41 2b 20 01 21 58 20 ac 75 e9 ec e3 e5 0b fc 8e d6 03 99 | a5 01 02 02 41 2b 20 01 21 58 20 ac 75 e9 ec e3 e5 0b fc 8e d6 03 99 | |||
88 95 22 40 5c 47 bf 16 df 96 66 0a 41 29 8c b4 30 7f 7e b6 22 58 20 | 88 95 22 40 5c 47 bf 16 df 96 66 0a 41 29 8c b4 30 7f 7e b6 22 58 20 | |||
6e 5d e6 11 38 8a 4b 8a 82 11 33 4a c7 d3 7e cb 52 a3 87 d2 57 e6 db | 6e 5d e6 11 38 8a 4b 8a 82 11 33 4a c7 d3 7e cb 52 a3 87 d2 57 e6 db | |||
3c 2a 93 df 21 ff 3a ff c8 | 3c 2a 93 df 21 ff 3a ff c8 | |||
MAC_3 is computed through EDHOC_Expand() using the EDHOC hash | MAC_3 is computed through EDHOC_Expand() using the EDHOC hash | |||
algorithm, see Section 4.1.2 of [I-D.ietf-lake-edhoc]: | algorithm (see Section 4.1.2 of [RFC9528]): | |||
MAC_3 = HKDF-Expand(PRK_4e3m, info, mac_length_3), where | MAC_3 = HKDF-Expand( PRK_4e3m, info, mac_length_3 ) | |||
where | ||||
info = ( 6, context_3, mac_length_3 ) | info = ( 6, context_3, mac_length_3 ) | |||
Since METHOD = 3, mac_length_3 is given by the EDHOC MAC length. | Since METHOD = 3, mac_length_3 is given by the EDHOC MAC length. | |||
info for MAC_3 is: | info for MAC_3 is: | |||
info = | info = | |||
( | ( | |||
6, | 6, | |||
h'a104412b5820adaf67a78a4bcc91e018f8882762a722000b | h'a104412b5820adaf67a78a4bcc91e018f8882762a722000b | |||
2507039df0bc1bbf0c161bb3155ca2027734322d35302d33 | 2507039df0bc1bbf0c161bb3155ca2027734322d35302d33 | |||
312d46462d45462d33372d33322d333908a101a501020241 | 312d46462d45462d33372d33322d333908a101a501020241 | |||
2b2001215820ac75e9ece3e50bfc8ed60399889522405c47 | 2b2001215820ac75e9ece3e50bfc8ed60399889522405c47 | |||
bf16df96660a41298cb4307f7eb62258206e5de611388a4b | bf16df96660a41298cb4307f7eb62258206e5de611388a4b | |||
8a8211334ac7d37ecb52a387d257e6db3c2a93df21ff3aff | 8a8211334ac7d37ecb52a387d257e6db3c2a93df21ff3aff | |||
c8', | c8', | |||
8 | 8 | |||
) | ) | |||
where the last value is the EDHOC MAC length in bytes. | where the last value is the EDHOC MAC length in bytes. | |||
info for MAC_3 (CBOR Sequence) (149 bytes) | info for MAC_3 (CBOR Sequence) (149 bytes) | |||
06 58 91 a1 04 41 2b 58 20 ad af 67 a7 8a 4b cc 91 e0 18 f8 88 27 62 | 06 58 91 a1 04 41 2b 58 20 ad af 67 a7 8a 4b cc 91 e0 18 f8 88 27 62 | |||
a7 22 00 0b 25 07 03 9d f0 bc 1b bf 0c 16 1b b3 15 5c a2 02 77 34 32 | a7 22 00 0b 25 07 03 9d f0 bc 1b bf 0c 16 1b b3 15 5c a2 02 77 34 32 | |||
2d 35 30 2d 33 31 2d 46 46 2d 45 46 2d 33 37 2d 33 32 2d 33 39 08 a1 | 2d 35 30 2d 33 31 2d 46 46 2d 45 46 2d 33 37 2d 33 32 2d 33 39 08 a1 | |||
01 a5 01 02 02 41 2b 20 01 21 58 20 ac 75 e9 ec e3 e5 0b fc 8e d6 03 | 01 a5 01 02 02 41 2b 20 01 21 58 20 ac 75 e9 ec e3 e5 0b fc 8e d6 03 | |||
99 88 95 22 40 5c 47 bf 16 df 96 66 0a 41 29 8c b4 30 7f 7e b6 22 58 | 99 88 95 22 40 5c 47 bf 16 df 96 66 0a 41 29 8c b4 30 7f 7e b6 22 58 | |||
skipping to change at page 47, line 7 ¶ | skipping to change at line 2140 ¶ | |||
Signature_or_MAC_3 (Raw Value) (8 bytes) | Signature_or_MAC_3 (Raw Value) (8 bytes) | |||
62 3c 91 df 41 e3 4c 2f | 62 3c 91 df 41 e3 4c 2f | |||
Signature_or_MAC_3 (CBOR Data Item) (9 bytes) | Signature_or_MAC_3 (CBOR Data Item) (9 bytes) | |||
48 62 3c 91 df 41 e3 4c 2f | 48 62 3c 91 df 41 e3 4c 2f | |||
The Initiator constructs PLAINTEXT_3: | The Initiator constructs PLAINTEXT_3: | |||
PLAINTEXT_3 = | PLAINTEXT_3 = | |||
( | ( | |||
ID_CRED_I / bstr / -24..23, | ID_CRED_I / bstr / -24..23, | |||
Signature_or_MAC_3, | Signature_or_MAC_3, | |||
? EAD_3 | ? EAD_3 | |||
) | ) | |||
Since ID_CRED_I contains a single 'kid' parameter, only the byte | Since ID_CRED_I contains a single 'kid' parameter, only the byte | |||
string value is included in the plaintext, represented as described | string value is included in the plaintext, represented as described | |||
in Section 3.3.2 of [I-D.ietf-lake-edhoc]. The CBOR map { 4 : h'2b' | in Section 3.3.2 of [RFC9528]. The CBOR map { 4 : h'2b' } is thus | |||
} is thus replaced, not by the CBOR byte string 0x412b, but by the | replaced, not by the CBOR byte string 0x412b, but by the CBOR int | |||
CBOR int 0x2b, since that is a one byte encoding of a CBOR integer | 0x2b, since that is a one-byte encoding of a CBOR integer (-12). | |||
(-12). | ||||
PLAINTEXT_3 (CBOR Sequence) (10 bytes) | PLAINTEXT_3 (CBOR Sequence) (10 bytes) | |||
2b 48 62 3c 91 df 41 e3 4c 2f | 2b 48 62 3c 91 df 41 e3 4c 2f | |||
The Initiator constructs the associated data for message_3: | The Initiator constructs the associated data for message_3: | |||
A_3 = | A_3 = | |||
[ | [ | |||
"Encrypt0", | "Encrypt0", | |||
h'', | h'', | |||
h'adaf67a78a4bcc91e018f8882762a722000b2507039df0bc | h'adaf67a78a4bcc91e018f8882762a722000b2507039df0bc | |||
1bbf0c161bb3155c' | 1bbf0c161bb3155c' | |||
] | ] | |||
A_3 (CBOR Data Item) (45 bytes) | A_3 (CBOR Data Item) (45 bytes) | |||
83 68 45 6e 63 72 79 70 74 30 40 58 20 ad af 67 a7 8a 4b cc 91 e0 18 | 83 68 45 6e 63 72 79 70 74 30 40 58 20 ad af 67 a7 8a 4b cc 91 e0 18 | |||
f8 88 27 62 a7 22 00 0b 25 07 03 9d f0 bc 1b bf 0c 16 1b b3 15 5c | f8 88 27 62 a7 22 00 0b 25 07 03 9d f0 bc 1b bf 0c 16 1b b3 15 5c | |||
The Initiator constructs the input needed to derive the key K_3, see | The Initiator constructs the input needed to derive the key K_3 (see | |||
Section 4.1.2 of [I-D.ietf-lake-edhoc], using the EDHOC hash | Section 4.1.2 of [RFC9528]) using the EDHOC hash algorithm: | |||
algorithm: | ||||
K_3 = EDHOC_KDF( PRK_3e2m, 3, TH_3, key_length ) | K_3 = EDHOC_KDF( PRK_3e2m, 3, TH_3, key_length ) | |||
= HKDF-Expand( PRK_3e2m, info, key_length ), | = HKDF-Expand( PRK_3e2m, info, key_length ) | |||
where key_length is the key length in bytes for the EDHOC AEAD | where key_length is the key length in bytes for the EDHOC AEAD | |||
algorithm, and info for K_3 is: | algorithm, and info for K_3 is: | |||
info = | info = | |||
( | ( | |||
3, | 3, | |||
h'adaf67a78a4bcc91e018f8882762a722000b2507039df0bc | h'adaf67a78a4bcc91e018f8882762a722000b2507039df0bc | |||
1bbf0c161bb3155c', | 1bbf0c161bb3155c', | |||
16 | 16 | |||
) | ) | |||
where the last value is the key length in bytes for the EDHOC AEAD | where the last value is the key length in bytes for the EDHOC AEAD | |||
algorithm. | algorithm. | |||
info for K_3 (CBOR Sequence) (36 bytes) | info for K_3 (CBOR Sequence) (36 bytes) | |||
03 58 20 ad af 67 a7 8a 4b cc 91 e0 18 f8 88 27 62 a7 22 00 0b 25 07 | 03 58 20 ad af 67 a7 8a 4b cc 91 e0 18 f8 88 27 62 a7 22 00 0b 25 07 | |||
03 9d f0 bc 1b bf 0c 16 1b b3 15 5c 10 | 03 9d f0 bc 1b bf 0c 16 1b b3 15 5c 10 | |||
K_3 (Raw Value) (16 bytes) | K_3 (Raw Value) (16 bytes) | |||
8e 7a 30 04 20 00 f7 90 0e 81 74 13 1f 75 f3 ed | 8e 7a 30 04 20 00 f7 90 0e 81 74 13 1f 75 f3 ed | |||
The Initiator constructs the input needed to derive the nonce IV_3, | The Initiator constructs the input needed to derive the nonce IV_3 | |||
see Section 4.1.2 of [I-D.ietf-lake-edhoc], using the EDHOC hash | (see Section 4.1.2 of [RFC9528]) using the EDHOC hash algorithm: | |||
algorithm: | ||||
IV_3 = EDHOC_KDF( PRK_3e2m, 4, TH_3, iv_length ) | IV_3 = EDHOC_KDF( PRK_3e2m, 4, TH_3, iv_length ) | |||
= HKDF-Expand( PRK_3e2m, info, iv_length ), | = HKDF-Expand( PRK_3e2m, info, iv_length ) | |||
where iv_length is the nonce length in bytes for the EDHOC AEAD | where iv_length is the nonce length in bytes for the EDHOC AEAD | |||
algorithm, and info for IV_3 is: | algorithm, and info for IV_3 is: | |||
info = | info = | |||
( | ( | |||
4, | 4, | |||
h'adaf67a78a4bcc91e018f8882762a722000b2507039df0bc | h'adaf67a78a4bcc91e018f8882762a722000b2507039df0bc | |||
1bbf0c161bb3155c', | 1bbf0c161bb3155c', | |||
13 | 13 | |||
) | ) | |||
where the last value is the nonce length in bytes for the EDHOC AEAD | where the last value is the nonce length in bytes for the EDHOC AEAD | |||
algorithm. | algorithm. | |||
info for IV_3 (CBOR Sequence) (36 bytes) | info for IV_3 (CBOR Sequence) (36 bytes) | |||
04 58 20 ad af 67 a7 8a 4b cc 91 e0 18 f8 88 27 62 a7 22 00 0b 25 07 | 04 58 20 ad af 67 a7 8a 4b cc 91 e0 18 f8 88 27 62 a7 22 00 0b 25 07 | |||
03 9d f0 bc 1b bf 0c 16 1b b3 15 5c 0d | 03 9d f0 bc 1b bf 0c 16 1b b3 15 5c 0d | |||
IV_3 (Raw Value) (13 bytes) | IV_3 (Raw Value) (13 bytes) | |||
6d 83 00 c1 e2 3b 56 15 3a e7 0e e4 57 | 6d 83 00 c1 e2 3b 56 15 3a e7 0e e4 57 | |||
The Initiator calculates CIPHERTEXT_3 as 'ciphertext' of | The Initiator calculates CIPHERTEXT_3 as 'ciphertext' of | |||
COSE_Encrypt0 applied using the EDHOC AEAD algorithm with plaintext | COSE_Encrypt0 applied using the EDHOC AEAD algorithm with plaintext | |||
PLAINTEXT_3, additional data A_3, key K_3 and nonce IV_3. | PLAINTEXT_3, additional data A_3, key K_3, and nonce IV_3. | |||
CIPHERTEXT_3 (Raw Value) (18 bytes) | CIPHERTEXT_3 (Raw Value) (18 bytes) | |||
e5 62 09 7b c4 17 dd 59 19 48 5a c7 89 1f fd 90 a9 fc | e5 62 09 7b c4 17 dd 59 19 48 5a c7 89 1f fd 90 a9 fc | |||
message_3 is the CBOR bstr encoding of CIPHERTEXT_3: | message_3 is the CBOR bstr encoding of CIPHERTEXT_3: | |||
message_3 (CBOR Sequence) (19 bytes) | message_3 (CBOR Sequence) (19 bytes) | |||
52 e5 62 09 7b c4 17 dd 59 19 48 5a c7 89 1f fd 90 a9 fc | 52 e5 62 09 7b c4 17 dd 59 19 48 5a c7 89 1f fd 90 a9 fc | |||
The transcript hash TH_4 is calculated using the EDHOC hash | The transcript hash TH_4 is calculated using the EDHOC hash | |||
skipping to change at page 49, line 40 ¶ | skipping to change at line 2266 ¶ | |||
3.6. message_4 | 3.6. message_4 | |||
No external authorization data: | No external authorization data: | |||
EAD_4 (CBOR Sequence) (0 bytes) | EAD_4 (CBOR Sequence) (0 bytes) | |||
The Responder constructs PLAINTEXT_4: | The Responder constructs PLAINTEXT_4: | |||
PLAINTEXT_4 = | PLAINTEXT_4 = | |||
( | ( | |||
? EAD_4 | ? EAD_4 | |||
) | ) | |||
PLAINTEXT_4 (CBOR Sequence) (0 bytes) | PLAINTEXT_4 (CBOR Sequence) (0 bytes) | |||
The Responder constructs the associated data for message_4: | The Responder constructs the associated data for message_4: | |||
A_4 = | A_4 = | |||
[ | [ | |||
"Encrypt0", | "Encrypt0", | |||
h'', | h'', | |||
h'c902b1e3a4326c93c5551f5f3aa6c5ecc0246806765612e5 | h'c902b1e3a4326c93c5551f5f3aa6c5ecc0246806765612e5 | |||
2b5d99e6059d6b6e' | 2b5d99e6059d6b6e' | |||
] | ] | |||
A_4 (CBOR Data Item) (45 bytes) | A_4 (CBOR Data Item) (45 bytes) | |||
83 68 45 6e 63 72 79 70 74 30 40 58 20 c9 02 b1 e3 a4 32 6c 93 c5 55 | 83 68 45 6e 63 72 79 70 74 30 40 58 20 c9 02 b1 e3 a4 32 6c 93 c5 55 | |||
1f 5f 3a a6 c5 ec c0 24 68 06 76 56 12 e5 2b 5d 99 e6 05 9d 6b 6e | 1f 5f 3a a6 c5 ec c0 24 68 06 76 56 12 e5 2b 5d 99 e6 05 9d 6b 6e | |||
The Responder constructs the input needed to derive the EDHOC | The Responder constructs the input needed to derive the EDHOC | |||
message_4 key, see Section 4.1.2 of [I-D.ietf-lake-edhoc], using the | message_4 key (see Section 4.1.2 of [RFC9528]) using the EDHOC hash | |||
EDHOC hash algorithm: | algorithm: | |||
K_4 = EDHOC_KDF( PRK_4e3m, 8, TH_4, key_length ) | K_4 = EDHOC_KDF( PRK_4e3m, 8, TH_4, key_length ) | |||
= HKDF-Expand( PRK_4e3m, info, key_length ) | = HKDF-Expand( PRK_4e3m, info, key_length ) | |||
where key_length is the key length in bytes for the EDHOC AEAD | where key_length is the key length in bytes for the EDHOC AEAD | |||
algorithm, and info for K_4 is: | algorithm, and info for K_4 is: | |||
info = | info = | |||
( | ( | |||
8, | 8, | |||
h'c902b1e3a4326c93c5551f5f3aa6c5ecc0246806765612e5 | h'c902b1e3a4326c93c5551f5f3aa6c5ecc0246806765612e5 | |||
2b5d99e6059d6b6e', | 2b5d99e6059d6b6e', | |||
16 | 16 | |||
) | ) | |||
where the last value is the key length in bytes for the EDHOC AEAD | where the last value is the key length in bytes for the EDHOC AEAD | |||
algorithm. | algorithm. | |||
info for K_4 (CBOR Sequence) (36 bytes) | info for K_4 (CBOR Sequence) (36 bytes) | |||
08 58 20 c9 02 b1 e3 a4 32 6c 93 c5 55 1f 5f 3a a6 c5 ec c0 24 68 06 | 08 58 20 c9 02 b1 e3 a4 32 6c 93 c5 55 1f 5f 3a a6 c5 ec c0 24 68 06 | |||
76 56 12 e5 2b 5d 99 e6 05 9d 6b 6e 10 | 76 56 12 e5 2b 5d 99 e6 05 9d 6b 6e 10 | |||
K_4 (Raw Value) (16 bytes) | K_4 (Raw Value) (16 bytes) | |||
d3 c7 78 72 b6 ee b5 08 91 1b db d3 08 b2 e6 a0 | d3 c7 78 72 b6 ee b5 08 91 1b db d3 08 b2 e6 a0 | |||
The Responder constructs the input needed to derive the EDHOC | The Responder constructs the input needed to derive the EDHOC | |||
message_4 nonce, see Section 4.1.2 of [I-D.ietf-lake-edhoc], using | message_4 nonce (see Section 4.1.2 of [RFC9528]) using the EDHOC hash | |||
the EDHOC hash algorithm: | algorithm: | |||
IV_4 = EDHOC_KDF( PRK_4e3m, 9, TH_4, iv_length ) | IV_4 = EDHOC_KDF( PRK_4e3m, 9, TH_4, iv_length ) | |||
= HKDF-Expand( PRK_4e3m, info, iv_length ) | = HKDF-Expand( PRK_4e3m, info, iv_length ) | |||
where iv_length is the nonce length in bytes for the EDHOC AEAD | where iv_length is the nonce length in bytes for the EDHOC AEAD | |||
algorithm, and info for IV_4 is: | algorithm, and info for IV_4 is: | |||
info = | info = | |||
( | ( | |||
9, | 9, | |||
h'c902b1e3a4326c93c5551f5f3aa6c5ecc0246806765612e5 | h'c902b1e3a4326c93c5551f5f3aa6c5ecc0246806765612e5 | |||
2b5d99e6059d6b6e', | 2b5d99e6059d6b6e', | |||
13 | 13 | |||
) | ) | |||
where the last value is the nonce length in bytes for the EDHOC AEAD | where the last value is the nonce length in bytes for the EDHOC AEAD | |||
algorithm. | algorithm. | |||
info for IV_4 (CBOR Sequence) (36 bytes) | info for IV_4 (CBOR Sequence) (36 bytes) | |||
09 58 20 c9 02 b1 e3 a4 32 6c 93 c5 55 1f 5f 3a a6 c5 ec c0 24 68 06 | 09 58 20 c9 02 b1 e3 a4 32 6c 93 c5 55 1f 5f 3a a6 c5 ec c0 24 68 06 | |||
76 56 12 e5 2b 5d 99 e6 05 9d 6b 6e 0d | 76 56 12 e5 2b 5d 99 e6 05 9d 6b 6e 0d | |||
IV_4 (Raw Value) (13 bytes) | IV_4 (Raw Value) (13 bytes) | |||
04 ff 0f 44 45 6e 96 e2 17 85 3c 36 01 | 04 ff 0f 44 45 6e 96 e2 17 85 3c 36 01 | |||
The Responder calculates CIPHERTEXT_4 as 'ciphertext' of | The Responder calculates CIPHERTEXT_4 as 'ciphertext' of | |||
COSE_Encrypt0 applied using the EDHOC AEAD algorithm with plaintext | COSE_Encrypt0 applied using the EDHOC AEAD algorithm with plaintext | |||
PLAINTEXT_4, additional data A_4, key K_4 and nonce IV_4. | PLAINTEXT_4, additional data A_4, key K_4, and nonce IV_4. | |||
CIPHERTEXT_4 (8 bytes) | CIPHERTEXT_4 (8 bytes) | |||
28 c9 66 b7 ca 30 4f 83 | 28 c9 66 b7 ca 30 4f 83 | |||
message_4 is the CBOR bstr encoding of CIPHERTEXT_4: | message_4 is the CBOR bstr encoding of CIPHERTEXT_4: | |||
message_4 (CBOR Sequence) (9 bytes) | message_4 (CBOR Sequence) (9 bytes) | |||
48 28 c9 66 b7 ca 30 4f 83 | 48 28 c9 66 b7 ca 30 4f 83 | |||
3.7. PRK_out and PRK_exporter | 3.7. PRK_out and PRK_exporter | |||
PRK_out is specified in Section 4.1.3 of [I-D.ietf-lake-edhoc]. | PRK_out is specified in Section 4.1.3 of [RFC9528]. | |||
PRK_out = EDHOC_KDF( PRK_4e3m, 7, TH_4, hash_length ) = | PRK_out = EDHOC_KDF( PRK_4e3m, 7, TH_4, hash_length ) | |||
= HKDF-Expand( PRK_4e3m, info, hash_length ) | = HKDF-Expand( PRK_4e3m, info, hash_length ) | |||
where hash_length is the length in bytes of the output of the EDHOC | where hash_length is the length in bytes of the output of the EDHOC | |||
hash algorithm, and info for PRK_out is: | hash algorithm, and info for PRK_out is: | |||
info = | info = | |||
( | ( | |||
7, | 7, | |||
h'c902b1e3a4326c93c5551f5f3aa6c5ecc0246806765612e5 | h'c902b1e3a4326c93c5551f5f3aa6c5ecc0246806765612e5 | |||
2b5d99e6059d6b6e', | 2b5d99e6059d6b6e', | |||
32 | 32 | |||
) | ) | |||
where the last value is the length in bytes of the output of the | where the last value is the length in bytes of the output of the | |||
EDHOC hash algorithm. | EDHOC hash algorithm. | |||
info for PRK_out (CBOR Sequence) (37 bytes) | info for PRK_out (CBOR Sequence) (37 bytes) | |||
07 58 20 c9 02 b1 e3 a4 32 6c 93 c5 55 1f 5f 3a a6 c5 ec c0 24 68 06 | 07 58 20 c9 02 b1 e3 a4 32 6c 93 c5 55 1f 5f 3a a6 c5 ec c0 24 68 06 | |||
76 56 12 e5 2b 5d 99 e6 05 9d 6b 6e 18 20 | 76 56 12 e5 2b 5d 99 e6 05 9d 6b 6e 18 20 | |||
PRK_out (Raw Value) (32 bytes) | PRK_out (Raw Value) (32 bytes) | |||
2c 71 af c1 a9 33 8a 94 0b b3 52 9c a7 34 b8 86 f3 0d 1a ba 0b 4d c5 | 2c 71 af c1 a9 33 8a 94 0b b3 52 9c a7 34 b8 86 f3 0d 1a ba 0b 4d c5 | |||
1b ee ae ab df ea 9e cb f8 | 1b ee ae ab df ea 9e cb f8 | |||
The OSCORE Master Secret and OSCORE Master Salt are derived with the | The OSCORE Master Secret and OSCORE Master Salt are derived with the | |||
EDHOC_Exporter as specified in 4.2.1 of [I-D.ietf-lake-edhoc]. | EDHOC_Exporter as specified in Section 4.2.1 of [RFC9528]. | |||
EDHOC_Exporter( label, context, length ) | EDHOC_Exporter( exporter_label, context, length ) | |||
= EDHOC_KDF( PRK_exporter, label, context, length ) | = EDHOC_KDF( PRK_exporter, exporter_label, context, length ) | |||
where PRK_exporter is derived from PRK_out: | where PRK_exporter is derived from PRK_out: | |||
PRK_exporter = EDHOC_KDF( PRK_out, 10, h'', hash_length ) = | PRK_exporter = EDHOC_KDF( PRK_out, 10, h'', hash_length ) | |||
= HKDF-Expand( PRK_out, info, hash_length ) | = HKDF-Expand( PRK_out, info, hash_length ) | |||
where hash_length is the length in bytes of the output of the EDHOC | where hash_length is the length in bytes of the output of the EDHOC | |||
hash algorithm, and info for the PRK_exporter is: | hash algorithm, and info for the PRK_exporter is: | |||
info = | info = | |||
( | ( | |||
10, | 10, | |||
h'', | h'', | |||
32 | 32 | |||
) | ) | |||
where the last value is the length in bytes of the output of the | where the last value is the length in bytes of the output of the | |||
EDHOC hash algorithm. | EDHOC hash algorithm. | |||
info for PRK_exporter (CBOR Sequence) (4 bytes) | info for PRK_exporter (CBOR Sequence) (4 bytes) | |||
0a 40 18 20 | 0a 40 18 20 | |||
PRK_exporter (Raw Value) (32 bytes) | PRK_exporter (Raw Value) (32 bytes) | |||
e1 4d 06 69 9c ee 24 8c 5a 04 bf 92 27 bb cd 4c e3 94 de 7d cb 56 db | e1 4d 06 69 9c ee 24 8c 5a 04 bf 92 27 bb cd 4c e3 94 de 7d cb 56 db | |||
43 55 54 74 17 1e 64 46 db | 43 55 54 74 17 1e 64 46 db | |||
3.8. OSCORE Parameters | 3.8. OSCORE Parameters | |||
The derivation of OSCORE parameters is specified in Appendix A.1 of | The derivation of OSCORE parameters is specified in Appendix A.1 of | |||
[I-D.ietf-lake-edhoc]. | [RFC9528]. | |||
The AEAD and Hash algorithms to use in OSCORE are given by the | The AEAD and hash algorithms to use in OSCORE are given by the | |||
selected cipher suite: | selected cipher suite: | |||
Application AEAD Algorithm (int) | Application AEAD Algorithm (int) | |||
10 | 10 | |||
Application Hash Algorithm (int) | Application Hash Algorithm (int) | |||
-16 | -16 | |||
The mapping from EDHOC connection identifiers to OSCORE Sender/ | The mapping from EDHOC connection identifiers to OSCORE Sender/ | |||
Recipient IDs is defined in Section 3.3.3 of [I-D.ietf-lake-edhoc]. | Recipient IDs is defined in Section 3.3.3 of [RFC9528]. | |||
C_R is mapped to the Recipient ID of the server, i.e., the Sender ID | C_R is mapped to the Recipient ID of the server, i.e., the Sender ID | |||
of the client. The byte string 0x27, which as C_R is encoded as the | of the client. The byte string 0x27, which as C_R is encoded as the | |||
CBOR integer 0x27, is converted to the server Recipient ID 0x27. | CBOR integer 0x27, is converted to the server Recipient ID 0x27. | |||
Client's OSCORE Sender ID (Raw Value) (1 byte) | Client's OSCORE Sender ID (Raw Value) (1 byte) | |||
27 | 27 | |||
C_I is mapped to the Recipient ID of the client, i.e., the Sender ID | C_I is mapped to the Recipient ID of the client, i.e., the Sender ID | |||
of the server. The byte string 0x37, which as C_I is encoded as the | of the server. The byte string 0x37, which as C_I is encoded as the | |||
CBOR integer 0x0e is converted to the client Recipient ID 0x37. | CBOR integer 0x0e, is converted to the client Recipient ID 0x37. | |||
Server's OSCORE Sender ID (Raw Value) (1 byte) | Server's OSCORE Sender ID (Raw Value) (1 byte) | |||
37 | 37 | |||
The OSCORE Master Secret is computed through EDHOC_Expand() using the | The OSCORE Master Secret is computed through EDHOC_Expand() using the | |||
Application hash algorithm, see Appendix A.1 of | application hash algorithm (see Appendix A.1 of [RFC9528]): | |||
[I-D.ietf-lake-edhoc]: | ||||
OSCORE Master Secret = EDHOC_Exporter( 0, h'', oscore_key_length ) | OSCORE Master Secret = EDHOC_Exporter( 0, h'', oscore_key_length ) | |||
= EDHOC_KDF( PRK_exporter, 0, h'', oscore_key_length ) | = EDHOC_KDF( PRK_exporter, 0, h'', oscore_key_length ) | |||
= HKDF-Expand( PRK_exporter, info, oscore_key_length ) | = HKDF-Expand( PRK_exporter, info, oscore_key_length ) | |||
where oscore_key_length is by default the key length in bytes for the | where oscore_key_length is by default the key length in bytes for the | |||
Application AEAD algorithm, and info for the OSCORE Master Secret is: | application AEAD algorithm, and info for the OSCORE Master Secret is: | |||
info = | info = | |||
( | ( | |||
0, | 0, | |||
h'', | h'', | |||
16 | 16 | |||
) | ) | |||
where the last value is the key length in bytes for the Application | where the last value is the key length in bytes for the application | |||
AEAD algorithm. | AEAD algorithm. | |||
info for OSCORE Master Secret (CBOR Sequence) (3 bytes) | info for OSCORE Master Secret (CBOR Sequence) (3 bytes) | |||
00 40 10 | 00 40 10 | |||
OSCORE Master Secret (Raw Value) (16 bytes) | OSCORE Master Secret (Raw Value) (16 bytes) | |||
f9 86 8f 6a 3a ca 78 a0 5d 14 85 b3 50 30 b1 62 | f9 86 8f 6a 3a ca 78 a0 5d 14 85 b3 50 30 b1 62 | |||
The OSCORE Master Salt is computed through EDHOC_Expand() using the | The OSCORE Master Salt is computed through EDHOC_Expand() using the | |||
Application hash algorithm, see Section 4.2 of [I-D.ietf-lake-edhoc]: | application hash algorithm (see Section 4.2 of [RFC9528]): | |||
OSCORE Master Salt = EDHOC_Exporter( 1, h'', oscore_salt_length ) | OSCORE Master Salt = EDHOC_Exporter( 1, h'', oscore_salt_length ) | |||
= EDHOC_KDF( PRK_exporter, 1, h'', oscore_salt_length ) | = EDHOC_KDF( PRK_exporter, 1, h'', oscore_salt_length ) | |||
= HKDF-Expand( PRK_4x3m, info, oscore_salt_length ) | = HKDF-Expand( PRK_4x3m, info, oscore_salt_length ) | |||
where oscore_salt_length is the length in bytes of the OSCORE Master | where oscore_salt_length is the length in bytes of the OSCORE Master | |||
Salt, and info for the OSCORE Master Salt is: | Salt, and info for the OSCORE Master Salt is: | |||
info = | info = | |||
( | ( | |||
1, | 1, | |||
h'', | h'', | |||
8 | 8 | |||
) | ) | |||
where the last value is the length in bytes of the OSCORE Master | where the last value is the length in bytes of the OSCORE Master | |||
Salt. | Salt. | |||
info for OSCORE Master Salt (CBOR Sequence) (3 bytes) | info for OSCORE Master Salt (CBOR Sequence) (3 bytes) | |||
01 40 08 | 01 40 08 | |||
OSCORE Master Salt (Raw Value) (8 bytes) | OSCORE Master Salt (Raw Value) (8 bytes) | |||
ad a2 4c 7d bf c8 5e eb | ad a2 4c 7d bf c8 5e eb | |||
3.9. Key Update | 3.9. Key Update | |||
Key update is defined in Appendix H of [I-D.ietf-lake-edhoc]. | The key update is defined in Appendix H of [RFC9528]. | |||
EDHOC_KeyUpdate( context ): | EDHOC_KeyUpdate( context ): | |||
PRK_out = EDHOC_KDF( PRK_out, 11, context, hash_length ) | PRK_out = EDHOC_KDF( PRK_out, 11, context, hash_length ) | |||
= HKDF-Expand( PRK_out, info, hash_length ) | = HKDF-Expand( PRK_out, info, hash_length ) | |||
where hash_length is the length in bytes of the output of the EDHOC | where hash_length is the length in bytes of the output of the EDHOC | |||
hash function, context for KeyUpdate is | hash function, and the context for KeyUpdate is: | |||
context for KeyUpdate (Raw Value) (16 bytes) | context for KeyUpdate (Raw Value) (16 bytes) | |||
a0 11 58 fd b8 20 89 0c d6 be 16 96 02 b8 bc ea | a0 11 58 fd b8 20 89 0c d6 be 16 96 02 b8 bc ea | |||
context for KeyUpdate (CBOR Data Item) (17 bytes) | context for KeyUpdate (CBOR Data Item) (17 bytes) | |||
50 a0 11 58 fd b8 20 89 0c d6 be 16 96 02 b8 bc ea | 50 a0 11 58 fd b8 20 89 0c d6 be 16 96 02 b8 bc ea | |||
and where info for key update is: | and where info for the key update is: | |||
info = | info = | |||
( | ( | |||
11, | 11, | |||
h'a01158fdb820890cd6be169602b8bcea', | h'a01158fdb820890cd6be169602b8bcea', | |||
32 | 32 | |||
) | ) | |||
info for KeyUpdate (CBOR Sequence) (20 bytes) | ||||
0b 50 a0 11 58 fd b8 20 89 0c d6 be 16 96 02 b8 bc ea 18 20 | ||||
PRK_out after KeyUpdate (Raw Value) (32 bytes) | PRK_out after KeyUpdate (Raw Value) (32 bytes) | |||
f9 79 53 77 43 fe 0b d6 b9 b1 41 dd bd 79 65 6c 52 e6 dc 7c 50 ad 80 | f9 79 53 77 43 fe 0b d6 b9 b1 41 dd bd 79 65 6c 52 e6 dc 7c 50 ad 80 | |||
77 54 d7 4d 07 e8 7d 0d 16 | 77 54 d7 4d 07 e8 7d 0d 16 | |||
After key update the PRK_exporter needs to be derived anew: | After the key update, the PRK_exporter needs to be derived anew: | |||
PRK_exporter = EDHOC_KDF( PRK_out, 10, h'', hash_length ) = | PRK_exporter = EDHOC_KDF( PRK_out, 10, h'', hash_length ) | |||
= HKDF-Expand( PRK_out, info, hash_length ) | = HKDF-Expand( PRK_out, info, hash_length ) | |||
where info and hash_length are unchanged as in Section 3.7. | where info and hash_length are unchanged as in Section 3.7. | |||
PRK_exporter after KeyUpdate (Raw Value) (32 bytes) | PRK_exporter after KeyUpdate (Raw Value) (32 bytes) | |||
00 fc f7 db 9b 2e ad 73 82 4e 7e 83 03 63 c8 05 c2 96 f9 02 83 0f ac | 00 fc f7 db 9b 2e ad 73 82 4e 7e 83 03 63 c8 05 c2 96 f9 02 83 0f ac | |||
23 d8 6c 35 9c 75 2f 0f 17 | 23 d8 6c 35 9c 75 2f 0f 17 | |||
The OSCORE Master Secret is derived with the updated PRK_exporter: | The OSCORE Master Secret is derived with the updated PRK_exporter: | |||
OSCORE Master Secret = | OSCORE Master Secret | |||
= HKDF-Expand(PRK_exporter, info, oscore_key_length) | = HKDF-Expand( PRK_exporter, info, oscore_key_length ) | |||
where info and key_length are unchanged as in Section 2.6. | where info and oscore_key_length are unchanged as in Section 3.8. | |||
OSCORE Master Secret after KeyUpdate (Raw Value) (16 bytes) | OSCORE Master Secret after KeyUpdate (Raw Value) (16 bytes) | |||
49 f7 2f ac 02 b4 65 8b da 21 e2 da c6 6f c3 74 | 49 f7 2f ac 02 b4 65 8b da 21 e2 da c6 6f c3 74 | |||
The OSCORE Master Salt is derived with the updated PRK_exporter: | The OSCORE Master Salt is derived with the updated PRK_exporter: | |||
OSCORE Master Salt = HKDF-Expand(PRK_exporter, info, salt_length) | OSCORE Master Salt | |||
= HKDF-Expand( PRK_exporter, info, oscore_salt_length ) | ||||
where info and salt_length are unchanged as in Section 2.6. | where info and oscore_salt_length are unchanged as in Section 3.8. | |||
OSCORE Master Salt after KeyUpdate (Raw Value) (8 bytes) | OSCORE Master Salt after KeyUpdate (Raw Value) (8 bytes) | |||
dd 8b 24 f2 aa 9b 01 1a | dd 8b 24 f2 aa 9b 01 1a | |||
4. Invalid Traces | 4. Invalid Traces | |||
This section contains examples of invalid messages, which a compliant | This section contains examples of invalid messages, which a compliant | |||
implementation will not compose and must or may reject according to | implementation will not compose and must or may reject according to | |||
[I-D.ietf-lake-edhoc], [RFC8949], [RFC9053], and [SP-800-56A]. This | [RFC9528], [RFC8949], [RFC9053], and [SP-800-56A]. This is just a | |||
is just a small set of examples of different reasons a message might | small set of examples of different reasons for which a message might | |||
be invalid. The same types of invalidities applies to other fields | be invalid. The same types of invalidities apply to other fields and | |||
and messages as well. Implementations should make sure to check for | messages as well. Implementations should make sure to check for | |||
similar types of invalidities in all EHDOC fields and messages. | similar types of invalidities in all EDHOC fields and messages. | |||
4.1. Encoding Errors | 4.1. Encoding Errors | |||
4.1.1. Surplus array encoding of message | 4.1.1. Surplus Array Encoding of a Message | |||
Invalid encoding of message_1 as array. Correct encoding is a CBOR | message_1 is incorrectly encoded as a CBOR array. The correct | |||
sequence according to Section 5.2.1 of [I-D.ietf-lake-edhoc]. | encoding is a CBOR sequence according to Section 5.2.1 of [RFC9528]. | |||
Invalid message_1 (38 bytes) | Invalid message_1 (38 bytes) | |||
84 03 02 58 20 74 1a 13 d7 ba 04 8f bb 61 5e 94 38 6a a3 b6 1b ea 5b | 84 03 02 58 20 74 1a 13 d7 ba 04 8f bb 61 5e 94 38 6a a3 b6 1b ea 5b | |||
3d 8f 65 f3 26 20 b7 49 be e8 d2 78 ef a9 0e | 3d 8f 65 f3 26 20 b7 49 be e8 d2 78 ef a9 0e | |||
4.1.2. Surplus bstr encoding of connection identifier | 4.1.2. Surplus bstr Encoding of the Connection Identifier | |||
Invalid encoding 41 0e of C_I = 0x0e. Correct encoding is 0e | The connection identifier C_I = 0x0e is incorrectly encoded as the | |||
according to Section 3.3.2 of [I-D.ietf-lake-edhoc]. | CBOR byte string 41 0e. The correct encoding is the integer 0e | |||
according to Section 3.3.2 of [RFC9528]. | ||||
Invalid message_1 (38 bytes) | Invalid message_1 (38 bytes) | |||
03 02 58 20 74 1a 13 d7 ba 04 8f bb 61 5e 94 38 6a a3 b6 1b ea 5b 3d | 03 02 58 20 74 1a 13 d7 ba 04 8f bb 61 5e 94 38 6a a3 b6 1b ea 5b 3d | |||
8f 65 f3 26 20 b7 49 be e8 d2 78 ef a9 41 0e | 8f 65 f3 26 20 b7 49 be e8 d2 78 ef a9 41 0e | |||
4.1.3. Surplus array encoding of ciphersuite | 4.1.3. Surplus Array Encoding of the Ciphersuite | |||
Invalid array encoding 81 02 of SUITES_I = 2. Correct encoding is 02 | The element SUITES_I = 2 is incorrectly encoded as the CBOR array 81 | |||
according to Section 5.2.2 of [I-D.ietf-lake-edhoc]. | 02. The correct encoding is the integer 02 according to | |||
Section 5.2.2 of [RFC9528]. | ||||
Invalid message_1 (38 bytes) | Invalid message_1 (38 bytes) | |||
03 81 02 58 20 74 1a 13 d7 ba 04 8f bb 61 5e 94 38 6a a3 b6 1b ea 5b | 03 81 02 58 20 74 1a 13 d7 ba 04 8f bb 61 5e 94 38 6a a3 b6 1b ea 5b | |||
3d 8f 65 f3 26 20 b7 49 be e8 d2 78 ef a9 0e | 3d 8f 65 f3 26 20 b7 49 be e8 d2 78 ef a9 0e | |||
4.1.4. Text string encoding of ephemeral key | 4.1.4. Text String Encoding of the Ephemeral Key | |||
Invalid type of the third element (G_X). Correct encoding is a byte | The third element of message_1 (G_X) is incorrectly encoded as a text | |||
string according to Section 5.2.1 of [I-D.ietf-lake-edhoc]. | string. The correct encoding is a byte string according to | |||
Section 5.2.1 of [RFC9528]. | ||||
Invalid message_1 (37 bytes) | Invalid message_1 (37 bytes) | |||
03 02 78 20 20 61 69 72 20 73 70 65 65 64 20 6F 66 20 61 20 75 6E 6C | 03 02 78 20 20 61 69 72 20 73 70 65 65 64 20 6F 66 20 61 20 75 6E 6C | |||
61 64 65 6E 20 73 77 61 6C 6C 6F 77 20 0e | 61 64 65 6E 20 73 77 61 6C 6C 6F 77 20 0e | |||
4.1.5. Wrong number of CBOR sequence elements | 4.1.5. Wrong Number of CBOR Sequence Elements | |||
Invalid number of elements in the CBOR sequence. Correct number of | The CBOR sequence in message_2 has an incorrect number of elements. | |||
elements is 1 according to Section 5.3.1 of [I-D.ietf-lake-edhoc]. | The correct number of elements in the CBOR sequence is 1 according to | |||
Section 5.3.1 of [RFC9528]. | ||||
Invalid message_2 (46 bytes) | Invalid message_2 (46 bytes) | |||
58 20 41 97 01 d7 f0 0a 26 c2 dc 58 7a 36 dd 75 25 49 f3 37 63 c8 93 | 58 20 41 97 01 d7 f0 0a 26 c2 dc 58 7a 36 dd 75 25 49 f3 37 63 c8 93 | |||
42 2c 8e a0 f9 55 a1 3a 4f f5 d5 4B 98 62 a1 1d e4 2a 95 d7 85 38 6a | 42 2c 8e a0 f9 55 a1 3a 4f f5 d5 4B 98 62 a1 1d e4 2a 95 d7 85 38 6a | |||
4.1.6. Surplus map encoding of ID_CRED field | 4.1.6. Surplus Map Encoding of the ID_CRED Field | |||
Invalid encoding a1 04 42 32 10 of ID_CRED_R in PLAINTEXT_2. Correct | The element ID_CRED_R in PLAINTEXT_2 is incorrectly encoded as the | |||
encoding is 42 32 10 according to Section 3.5.3.2 of | map a1 04 42 32 10. The correct encoding is 42 32 10 according to | |||
[I-D.ietf-lake-edhoc]. | Section 3.5.3.2 of [RFC9528]. | |||
Invalid PLAINTEXT_2 (15 bytes) | Invalid PLAINTEXT_2 (15 bytes) | |||
27 a1 04 42 32 10 48 fa 5e fa 2e bf 92 0b f3 | 27 a1 04 42 32 10 48 fa 5e fa 2e bf 92 0b f3 | |||
4.1.7. Surplus bstr encoding of ID_CRED field | 4.1.7. Surplus bstr Encoding of the ID_CRED Field | |||
Invalid encoding 41 32 of ID_CRED_R in PLAINTEXT_2. Correct encoding | The element ID_CRED_R in PLAINTEXT_2 is incorrectly encoded as the | |||
is 32 according to Section 3.5.3.2 of [I-D.ietf-lake-edhoc]. | byte string 41 32. The correct encoding is 32 according to | |||
Section 3.5.3.2 of [RFC9528]. | ||||
Invalid PLAINTEXT_2 (12 bytes) | Invalid PLAINTEXT_2 (12 bytes) | |||
27 41 32 48 fa 5e fa 2e bf 92 0b f3 | 27 41 32 48 fa 5e fa 2e bf 92 0b f3 | |||
4.2. Crypto-related Errors | 4.2. Cryptography-Related Errors | |||
4.2.1. Error in length of ephemeral key | 4.2.1. Error in the Length of the Ephemeral Key | |||
Invalid length of the third element (G_X). Selected cipher suite is | The third element (G_X) has an invalid length. The selected cipher | |||
cipher suite 24 with curve P-384 according to Sections 5.2.2, and | suite is cipher suite 24 with curve P-384 according to Sections 5.2.2 | |||
10.2 of [I-D.ietf-lake-edhoc]. Correct length of x-coordinate is 48 | and 10.2 of [RFC9528]. The correct length of the x-coordinate is 48 | |||
bytes according to Section 3.7 of [I-D.ietf-lake-edhoc] and | bytes according to Section 3.7 of [RFC9528] and Section 7.1.1 of | |||
Section 7.1.1 of [RFC9053]. | [RFC9053]. | |||
Invalid message_1 (40 bytes) | Invalid message_1 (40 bytes) | |||
03 82 02 18 18 58 20 74 1a 13 d7 ba 04 8f bb 61 5e 94 38 6a a3 b6 1b | 03 82 02 18 18 58 20 74 1a 13 d7 ba 04 8f bb 61 5e 94 38 6a a3 b6 1b | |||
ea 5b 3d 8f 65 f3 26 20 b7 49 be e8 d2 78 ef a9 0e | ea 5b 3d 8f 65 f3 26 20 b7 49 be e8 d2 78 ef a9 0e | |||
4.2.2. Error in elliptic curve representation | 4.2.2. Error in Elliptic Curve Representation | |||
Invalid x-coordinate in G_X as x ≥ p. Requirement that x < p | The x-coordinate in G_X is invalid as x ≥ p. It is required that x < | |||
according to Section 9.2 of [I-D.ietf-lake-edhoc] and Section 5.6.2.3 | p according to Section 5.6.2.3 of [SP-800-56A], which is referenced | |||
of [SP-800-56A]. | in Section 9.2 of [RFC9528]. | |||
Invalid message_1 (37 bytes) | Invalid message_1 (37 bytes) | |||
03 02 58 20 ff ff ff ff 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 | 03 02 58 20 ff ff ff ff 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 | |||
00 ff ff ff ff ff ff ff ff ff ff ff ff 0e | 00 ff ff ff ff ff ff ff ff ff ff ff ff 0e | |||
4.2.3. Error in elliptic curve point | 4.2.3. Error in the Elliptic Curve Point | |||
Invalid x-coordinate in (G_X) not corresponding to a point on the | The x-coordinate in G_X is invalid as it does not correspond to a | |||
P-256 curve. Requirement that y^2 ≡ x^3 + a ⋅ x + b (mod p) | point on the P-256 curve. It is required that y^2 ≡ x^3 + a ⋅ x + b | |||
according to Section 9.2 of [I-D.ietf-lake-edhoc] and Section 5.6.2.3 | (mod p) according to Section 5.6.2.3 of [SP-800-56A], which is | |||
of [SP-800-56A]. | referenced in Section 9.2 of [RFC9528]. | |||
Invalid message_1 (37 bytes) | Invalid message_1 (37 bytes) | |||
03 02 58 20 a0 4e 73 60 1d f5 44 a7 0b a7 ea 1e 57 03 0f 7d 4b 4e b7 | 03 02 58 20 a0 4e 73 60 1d f5 44 a7 0b a7 ea 1e 57 03 0f 7d 4b 4e b7 | |||
f6 73 92 4e 58 d5 4c a7 7a 5e 7d 4d 4a 0e | f6 73 92 4e 58 d5 4c a7 7a 5e 7d 4d 4a 0e | |||
4.2.4. Curve point of low order | 4.2.4. Curve Point of the Low Order | |||
Curve25519 point of low order which fails the check for all-zero | The Curve25519 point is invalid as it is of low order and fails the | |||
output according to Section 9.2 of [I-D.ietf-lake-edhoc]. | check for all-zero output according to Section 9.2 of [RFC9528]. | |||
Invalid message_1 (37 bytes) | Invalid message_1 (37 bytes) | |||
03 00 58 20 ed ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | 03 00 58 20 ed ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |||
ff ff ff ff ff ff ff ff ff ff ff ff 7f 0e | ff ff ff ff ff ff ff ff ff ff ff ff 7f 0e | |||
4.2.5. Error in length of MAC | 4.2.5. Error in the Length of the MAC | |||
Invalid length of third element (Signature_or_MAC_2). The length of | The third element (Signature_or_MAC_2) has an invalid length. The | |||
Signature_or_MAC_2 is given by the cipher suite and the MAC length is | length of Signature_or_MAC_2 is given by the cipher suite, and the | |||
at least 8 bytes according to Section 9.3 of [I-D.ietf-lake-edhoc]. | MAC length is at least 8 bytes according to Section 9.3 of [RFC9528]. | |||
Invalid PLAINTEXT_2 (7 bytes) | Invalid PLAINTEXT_2 (7 bytes) | |||
27 32 44 fa 5e fa 2e | 27 32 44 fa 5e fa 2e | |||
4.2.6. Error in elliptic curve encoding | 4.2.6. Error in the Elliptic Curve Encoding | |||
Invalid encoding of third element (G_X). Correct encoding is with | The third element (G_X) is incorrectly encoded. The correct encoding | |||
leading zeros according to Section 3.7 of [I-D.ietf-lake-edhoc] and | is with leading-zero octets according to Section 7.1.1 of [RFC9053], | |||
Section 7.1.1 of [RFC9053]. | which is referenced in Section 3.7 of [RFC9528]. | |||
Invalid message_1 (36 bytes) | Invalid message_1 (36 bytes) | |||
03 02 58 1f d9 69 77 25 d2 3a 68 8b 12 d1 c7 e0 10 8a 08 c9 f7 1a 85 | 03 02 58 1f d9 69 77 25 d2 3a 68 8b 12 d1 c7 e0 10 8a 08 c9 f7 1a 85 | |||
a0 9c 20 81 49 76 ab 21 12 22 48 fc 0e | a0 9c 20 81 49 76 ab 21 12 22 48 fc 0e | |||
4.3. Non-deterministic CBOR | 4.3. Non-deterministic CBOR | |||
4.3.1. Unnecessary long encoding | 4.3.1. Unnecessary Long Encoding | |||
Invalid 16-bit encoding 19 00 03 of METHOD = 3. Correct is the | The element METHOD = 3 is incorrectly encoded as a 16-bit integer. | |||
deterministic encoding 03 according to Section 3.1 of | The deterministic encoding 03 is correct according to Section 3.1 of | |||
[I-D.ietf-lake-edhoc] and Section 4.2.1 of [RFC8949], which states | [RFC9528] and Section 4.2.1 of [RFC8949], which states that the | |||
that the arguments for integers, lengths in major types 2 through 5, | arguments for integers, lengths in major types 2 through 5, and tags | |||
and tags are required to be as short as possible. | are required to be as short as possible. | |||
Invalid message_1 (39 bytes) | Invalid message_1 (39 bytes) | |||
19 00 03 02 58 20 74 1a 13 d7 ba 04 8f bb 61 5e 94 38 6a a3 b6 1b ea | 19 00 03 02 58 20 74 1a 13 d7 ba 04 8f bb 61 5e 94 38 6a a3 b6 1b ea | |||
5b 3d 8f 65 f3 26 20 b7 49 be e8 d2 78 ef a9 0e | 5b 3d 8f 65 f3 26 20 b7 49 be e8 d2 78 ef a9 0e | |||
4.3.2. Indefinite-length array encoding | 4.3.2. Indefinite-Length Array Encoding | |||
Invalid indefinite-length array encoding 9F 06 02 FF of SUITES_I = | The element SUITES_I = [6, 2] is incorrectly encoded as an | |||
[6, 2]. Correct encoding is 82 06 02 according to Section 5.2.2 of | indefinite-length array. The correct encoding is the definite-length | |||
[I-D.ietf-lake-edhoc]. | array 82 06 02 according to Section 4.2.1 of [RFC8949], which is | |||
referenced in Section 3.1 of [RFC9528]. | ||||
Invalid message_1 (40 bytes) | Invalid message_1 (40 bytes) | |||
03 9F 06 02 FF 58 20 74 1a 13 d7 ba 04 8f bb 61 5e 94 38 6a a3 b6 1b | 03 9F 06 02 FF 58 20 74 1a 13 d7 ba 04 8f bb 61 5e 94 38 6a a3 b6 1b | |||
ea 5b 3d 8f 65 f3 26 20 b7 49 be e8 d2 78 ef a9 0e | ea 5b 3d 8f 65 f3 26 20 b7 49 be e8 d2 78 ef a9 0e | |||
5. Security Considerations | 5. Security Considerations | |||
This document contains examples of EDHOC [I-D.ietf-lake-edhoc] whose | This document contains examples of EDHOC [RFC9528]. The security | |||
security considerations apply. The keys printed in these examples | considerations described in [RFC9528] apply. The keys printed in | |||
cannot be considered secret and MUST NOT be used. | these examples cannot be considered secret and MUST NOT be used. | |||
6. IANA Considerations | 6. IANA Considerations | |||
There are no IANA considerations. | This document has no IANA actions. | |||
7. References | 7. References | |||
7.1. Normative References | 7.1. Normative References | |||
[I-D.ietf-lake-edhoc] | ||||
Selander, G., Mattsson, J. P., and F. Palombini, | ||||
"Ephemeral Diffie-Hellman Over COSE (EDHOC)", Work in | ||||
Progress, Internet-Draft, draft-ietf-lake-edhoc-23, 22 | ||||
January 2024, <https://datatracker.ietf.org/doc/html/ | ||||
draft-ietf-lake-edhoc-23>. | ||||
[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/rfc/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/rfc/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
7.2. Informative References | [RFC9528] Selander, G., Preuß Mattsson, J., and F. Palombini, | |||
"Ephemeral Diffie-Hellman Over COSE (EDHOC)", RFC 9528, | ||||
DOI 10.17487/RFC9528, March 2024, | ||||
<https://www.rfc-editor.org/rfc/rfc9528>. | ||||
[CborMe] Bormann, C., "CBOR playground", August 2023, | 7.2. Informative References | |||
<https://cbor.me/>. | ||||
[RFC7252] Shelby, Z., Hartke, K., and C. Bormann, "The Constrained | [CborMe] Bormann, C., "CBOR playground", <https://cbor.me/>. | |||
Application Protocol (CoAP)", RFC 7252, | ||||
DOI 10.17487/RFC7252, June 2014, | ||||
<https://www.rfc-editor.org/rfc/rfc7252>. | ||||
[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/rfc/rfc7748>. | 2016, <https://www.rfc-editor.org/info/rfc7748>. | |||
[RFC8032] Josefsson, S. and I. Liusvaara, "Edwards-Curve Digital | [RFC8032] Josefsson, S. and I. Liusvaara, "Edwards-Curve Digital | |||
Signature Algorithm (EdDSA)", RFC 8032, | Signature Algorithm (EdDSA)", RFC 8032, | |||
DOI 10.17487/RFC8032, January 2017, | DOI 10.17487/RFC8032, January 2017, | |||
<https://www.rfc-editor.org/rfc/rfc8032>. | <https://www.rfc-editor.org/info/rfc8032>. | |||
[RFC8392] Jones, M., Wahlstroem, E., Erdtman, S., and H. Tschofenig, | [RFC8392] Jones, M., Wahlstroem, E., Erdtman, S., and H. Tschofenig, | |||
"CBOR Web Token (CWT)", RFC 8392, DOI 10.17487/RFC8392, | "CBOR Web Token (CWT)", RFC 8392, DOI 10.17487/RFC8392, | |||
May 2018, <https://www.rfc-editor.org/rfc/rfc8392>. | May 2018, <https://www.rfc-editor.org/info/rfc8392>. | |||
[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/rfc/rfc8949>. | <https://www.rfc-editor.org/info/rfc8949>. | |||
[RFC9053] Schaad, J., "CBOR Object Signing and Encryption (COSE): | [RFC9053] Schaad, J., "CBOR Object Signing and Encryption (COSE): | |||
Initial Algorithms", RFC 9053, DOI 10.17487/RFC9053, | Initial Algorithms", RFC 9053, DOI 10.17487/RFC9053, | |||
August 2022, <https://www.rfc-editor.org/rfc/rfc9053>. | August 2022, <https://www.rfc-editor.org/info/rfc9053>. | |||
[SP-800-186] | [SP-800-186] | |||
Chen, L., Moody, D., Randall, K., Regenscheid, A., and A. | Chen, L., Moody, D., Randall, K., Regenscheid, A., and A. | |||
Robinson, "Recommendations for Discrete Logarithm-based | Robinson, "Recommendations for Discrete Logarithm-based | |||
Cryptography: Elliptic Curve Domain Parameters", | Cryptography: Elliptic Curve Domain Parameters", | |||
NIST Special Publication 800-186, February 2023, | NIST Special Publication 800-186, | |||
DOI 10.6028/NIST.SP.800-186, February 2023, | ||||
<https://doi.org/10.6028/NIST.SP.800-186>. | <https://doi.org/10.6028/NIST.SP.800-186>. | |||
[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, | |||
DOI 10.6028/NIST.SP.800-56Ar3, April 2018, | ||||
<https://doi.org/10.6028/NIST.SP.800-56Ar3>. | <https://doi.org/10.6028/NIST.SP.800-56Ar3>. | |||
Acknowledgments | Acknowledgments | |||
The authors want to thank all people verifying EDHOC test vectors | The authors want to thank all people verifying EDHOC test vectors | |||
and/or contributing to the interoperability testing including: | and/or contributing to the interoperability testing, including: | |||
Christian Amsüss, Timothy Claeys, Stefan Hristozov, Rikard Höglund, | Christian Amsüss, Timothy Claeys, Rikard Höglund, Stefan Hristozov, | |||
Christos Koulamas, Francesca Palombini, Lidia Pocero, Peter van der | Christos Koulamas, Francesca Palombini, Lidia Pocero, Peter van der | |||
Stok, and Michel Veillette. | Stok, and Michel Veillette. | |||
Authors' Addresses | Authors' Addresses | |||
Göran Selander | Göran Selander | |||
Ericsson | Ericsson | |||
Sweden | Sweden | |||
Email: goran.selander@ericsson.com | Email: goran.selander@ericsson.com | |||
skipping to change at page 61, line 38 ¶ | skipping to change at line 2823 ¶ | |||
Ericsson | Ericsson | |||
Sweden | Sweden | |||
Email: john.mattsson@ericsson.com | Email: john.mattsson@ericsson.com | |||
Marek Serafin | Marek Serafin | |||
ASSA ABLOY | ASSA ABLOY | |||
Poland | Poland | |||
Email: marek.serafin@assaabloy.com | Email: marek.serafin@assaabloy.com | |||
Marco Tiloca | Marco Tiloca | |||
RISE | RISE AB | |||
Isafjordsgatan 22 | ||||
SE-164 40 Kista | ||||
Sweden | Sweden | |||
Email: marco.tiloca@ri.se | Email: marco.tiloca@ri.se | |||
Mališa Vučinić | Mališa Vučinić | |||
Inria | Inria | |||
France | France | |||
Email: malisa.vucinic@inria.fr | Email: malisa.vucinic@inria.fr | |||
End of changes. 280 change blocks. | ||||
615 lines changed or deleted | 653 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |