draft-ietf-ipsecme-safecurves-01.txt | draft-ietf-ipsecme-safecurves-02.txt | |||
---|---|---|---|---|
Network Working Group Y. Nir | Network Working Group Y. Nir | |||
Internet-Draft Check Point | Internet-Draft Check Point | |||
Intended status: Standards Track S. Josefsson | Intended status: Standards Track S. Josefsson | |||
Expires: August 5, 2016 SJD | Expires: February 6, 2017 SJD | |||
February 2, 2016 | August 5, 2016 | |||
Curve25519 and Curve448 for IKEv2 Key Agreement | Curve25519 and Curve448 for IKEv2 Key Agreement | |||
draft-ietf-ipsecme-safecurves-01 | draft-ietf-ipsecme-safecurves-02 | |||
Abstract | Abstract | |||
This document describes the use of Curve25519 and Curve448 for | This document describes the use of Curve25519 and Curve448 for | |||
ephemeral key exchange in the Internet Key Exchange (IKEv2) protocol. | ephemeral key exchange in the Internet Key Exchange (IKEv2) protocol. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
skipping to change at page 1, line 32 ¶ | skipping to change at page 1, line 32 ¶ | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on August 5, 2016. | This Internet-Draft will expire on February 6, 2017. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2016 IETF Trust and the persons identified as the | Copyright (c) 2016 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
skipping to change at page 2, line 15 ¶ | skipping to change at page 2, line 15 ¶ | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
1.1. Conventions Used in This Document . . . . . . . . . . . . 2 | 1.1. Conventions Used in This Document . . . . . . . . . . . . 2 | |||
2. Curve25519 & Curve448 . . . . . . . . . . . . . . . . . . . . 2 | 2. Curve25519 & Curve448 . . . . . . . . . . . . . . . . . . . . 2 | |||
3. Use and Negotiation in IKEv2 . . . . . . . . . . . . . . . . 3 | 3. Use and Negotiation in IKEv2 . . . . . . . . . . . . . . . . 3 | |||
3.1. Key Exchange Payload . . . . . . . . . . . . . . . . . . 3 | 3.1. Key Exchange Payload . . . . . . . . . . . . . . . . . . 3 | |||
3.2. Recipient Tests . . . . . . . . . . . . . . . . . . . . . 4 | 3.2. Recipient Tests . . . . . . . . . . . . . . . . . . . . . 4 | |||
4. Security Considerations . . . . . . . . . . . . . . . . . . . 4 | 4. Security Considerations . . . . . . . . . . . . . . . . . . . 4 | |||
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 4 | 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 4 | |||
6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 4 | 6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 5 | |||
7. References . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
7.1. Normative References . . . . . . . . . . . . . . . . . . 5 | 7.1. Normative References . . . . . . . . . . . . . . . . . . 5 | |||
7.2. Informative References . . . . . . . . . . . . . . . . . 5 | 7.2. Informative References . . . . . . . . . . . . . . . . . 5 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 5 | Appendix A. Numerical Example for Curve25519 . . . . . . . . . . 5 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 6 | ||||
1. Introduction | 1. Introduction | |||
[RFC7748] describes two elliptic curves: Curve25519 and Curve448, as | The "Elliptic Curves for Security" document [RFC7748] describes two | |||
well as the X25519 and X448 functions for performing key agreement | elliptic curves: Curve25519 and Curve448, as well as the X25519 and | |||
(Diffie-Hellman) operations with these curves. The curves and | X448 functions for performing key agreement (Diffie-Hellman) | |||
functions are designed for both performance and security. | operations with these curves. The curves and functions are designed | |||
for both performance and security. | ||||
Almost ten years ago [RFC4753] specified the first elliptic curve | Almost ten years ago the "ECP Groups for IKE and IKEv2" document | |||
Diffie-Hellman groups for the Internet Key Exchange protocol (IKEv2 - | [RFC4753] specified the first elliptic curve Diffie-Hellman groups | |||
[RFC7296]). These were the so-called NIST curves. The state of the | for the Internet Key Exchange protocol (IKEv2 - [RFC7296]). These | |||
art has advanced since then. More modern curves allow faster | were the so-called NIST curves. The state of the art has advanced | |||
implementations while making it much easier to write constant-time | since then. More modern curves allow faster implementations while | |||
implementations free from time-based side-channel attacks. This | making it much easier to write constant-time implementations free | |||
document defines two such curves for use in IKE. See [Curve25519] | from time-based side-channel attacks. This document defines two such | |||
for details about the speed and security of the Curve25519 function. | curves for use in IKE. See [Curve25519] for details about the speed | |||
and security of the Curve25519 function. | ||||
1.1. Conventions Used in This Document | 1.1. Conventions Used in This Document | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
2. Curve25519 & Curve448 | 2. Curve25519 & Curve448 | |||
All cryptographic computations are done using the X25519 and X448 | All cryptographic computations are done using the X25519 and X448 | |||
skipping to change at page 3, line 23 ¶ | skipping to change at page 3, line 26 ¶ | |||
SHARED_SECRET = X(d, pub_peer). | SHARED_SECRET = X(d, pub_peer). | |||
This shared secret is used directly as the value denoted g^ir in | This shared secret is used directly as the value denoted g^ir in | |||
section 2.14 of RFC 7296. It is 32 octets when Curve25519 is used, | section 2.14 of RFC 7296. It is 32 octets when Curve25519 is used, | |||
and 56 octets when Curve448 is used. | and 56 octets when Curve448 is used. | |||
3. Use and Negotiation in IKEv2 | 3. Use and Negotiation in IKEv2 | |||
The use of Curve25519 and Curve448 in IKEv2 is negotiated using a | The use of Curve25519 and Curve448 in IKEv2 is negotiated using a | |||
Transform Type 4 (Diffie-Hellman group) in the SA payload of either | Transform Type 4 (Diffie-Hellman group) in the SA payload of either | |||
an IKE_SA_INIT or a CREATE_CHILD_SA exchange. The value xx is used | an IKE_SA_INIT or a CREATE_CHILD_SA exchange. The value TBA1 is used | |||
for the group defined by Curve25519 and yy is used for the group | for the group defined by Curve25519 and the value TBA2 is used for | |||
defined by Curve448. Both are TBA by IANA. | the group defined by Curve448. | |||
3.1. Key Exchange Payload | 3.1. Key Exchange Payload | |||
The diagram for the Key Exchange Payload from section 3.4 of RFC 7296 | The diagram for the Key Exchange Payload from section 3.4 of RFC 7296 | |||
is copied below for convenience: | is copied below for convenience: | |||
1 2 3 | 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Next Payload |C| RESERVED | Payload Length | | | Next Payload |C| RESERVED | Payload Length | | |||
skipping to change at page 3, line 47 ¶ | skipping to change at page 3, line 50 ¶ | |||
| Diffie-Hellman Group Num | RESERVED | | | Diffie-Hellman Group Num | RESERVED | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | |||
~ Key Exchange Data ~ | ~ Key Exchange Data ~ | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
o Payload Length - For Curve25519 the public key is 32 octets, so | o Payload Length - For Curve25519 the public key is 32 octets, so | |||
the Payload Length field will be 40, and for Curve448 the public | the Payload Length field will be 40, and for Curve448 the public | |||
key is 56 octets, so the Payload Length field will be 64. | key is 56 octets, so the Payload Length field will be 64. | |||
o The Diffie-Hellman Group Num is xx for Curve25519, or yy for | o The Diffie-Hellman Group Num is TBA1 for Curve25519, or TBA2 for | |||
Curve448 (both TBA by IANA). | Curve448. | |||
o The Key Exchange Data is the 32 or 56 octets as described in | o The Key Exchange Data is the 32 or 56 octets as described in | |||
section 6 of [RFC7748] | section 6 of [RFC7748] | |||
3.2. Recipient Tests | 3.2. Recipient Tests | |||
This document matches the discussion in [RFC7748] related to | This document matches the discussion in [RFC7748] related to | |||
receiving and accepting incompatible point formats. In particular, | receiving and accepting incompatible point formats. In particular, | |||
receiving entities MUST mask the most-significant bit in the final | receiving entities MUST mask the most-significant bit in the final | |||
byte for X25519 (but not X448), and implementations MUST accept non- | byte for X25519 (but not X448), and implementations MUST accept non- | |||
canonical values. See section 5 of [RFC7748] for further discussion. | canonical values. See section 5 of [RFC7748] for further discussion. | |||
skipping to change at page 5, line 7 ¶ | skipping to change at page 5, line 12 ¶ | |||
"Curve25519" and "Curve448" and this document as reference. The | "Curve25519" and "Curve448" and this document as reference. The | |||
Recipient Tests field should also point to this document. | Recipient Tests field should also point to this document. | |||
6. Acknowledgements | 6. Acknowledgements | |||
Curve25519 was designed by D. J. Bernstein and the parameters for | Curve25519 was designed by D. J. Bernstein and the parameters for | |||
Curve448 ("Goldilocks") is by Mike Hamburg. The specification of | Curve448 ("Goldilocks") is by Mike Hamburg. The specification of | |||
algorithms, wire format and other considerations are in RFC 7748 by | algorithms, wire format and other considerations are in RFC 7748 by | |||
Adam Langley, Mike Hamburg, and Sean Turner. | Adam Langley, Mike Hamburg, and Sean Turner. | |||
The examples in Appendix A were calculated using the master version | ||||
of OpenSSL, retrieved on August 4th, 2016. | ||||
7. References | 7. References | |||
7.1. Normative References | 7.1. Normative References | |||
[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, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
[RFC7296] Kivinen, T., Kaufman, C., Hoffman, P., Nir, Y., and P. | [RFC7296] Kivinen, T., Kaufman, C., Hoffman, P., Nir, Y., and P. | |||
Eronen, "Internet Key Exchange Protocol Version 2 | Eronen, "Internet Key Exchange Protocol Version 2 | |||
(IKEv2)", RFC 7296, October 2014. | (IKEv2)", RFC 7296, October 2014. | |||
skipping to change at page 5, line 35 ¶ | skipping to change at page 5, line 43 ¶ | |||
Records", LNCS 3958, February 2006, | Records", LNCS 3958, February 2006, | |||
<http://dx.doi.org/10.1007/11745853_14>. | <http://dx.doi.org/10.1007/11745853_14>. | |||
[RFC4753] Fu, D. and J. Solinas, "ECP Groups For IKE and IKEv2", | [RFC4753] Fu, D. and J. Solinas, "ECP Groups For IKE and IKEv2", | |||
RFC 4753, January 2007. | RFC 4753, January 2007. | |||
[RFC6954] Merkle, J. and M. Lochter, "Using the Elliptic Curve | [RFC6954] Merkle, J. and M. Lochter, "Using the Elliptic Curve | |||
Cryptography (ECC) Brainpool Curves for the Internet Key | Cryptography (ECC) Brainpool Curves for the Internet Key | |||
Exchange Protocol Version 2 (IKEv2)", RFC 6954, July 2013. | Exchange Protocol Version 2 (IKEv2)", RFC 6954, July 2013. | |||
Authors' Addresses | Appendix A. Numerical Example for Curve25519 | |||
Suppose we have both the initiator and the responder generating | ||||
private keys by generating 32 random octets. As usual in IKEv2 and | ||||
its extension, we will denote Initiator values with the suffix _i and | ||||
responder values with the suffix _r: | ||||
random_i = 75 1f b4 30 86 55 b4 76 b6 78 9b 73 25 f9 ea 8c | ||||
dd d1 6a 58 53 3f f6 d9 e6 00 09 46 4a 5f 9d 94 | ||||
random_r = 0a 54 64 52 53 29 0d 60 dd ad d0 e0 30 ba cd 9e | ||||
55 01 ef dc 22 07 55 a1 e9 78 f1 b8 39 a0 56 88 | ||||
These numbers need to be fixed by unsetting some bits as described in | ||||
section 5 of RFC 7748. This affects only the first and last octets | ||||
of each value: | ||||
fixed_i = 70 1f b4 30 86 55 b4 76 b6 78 9b 73 25 f9 ea 8c | ||||
dd d1 6a 58 53 3f f6 d9 e6 00 09 46 4a 5f 9d 54 | ||||
fixed_r = 08 54 64 52 53 29 0d 60 dd ad d0 e0 30 ba cd 9e | ||||
55 01 ef dc 22 07 55 a1 e9 78 f1 b8 39 a0 56 48 | ||||
The actual private keys are considered to be encoded in little-endian | ||||
format: | ||||
d_i = 549D5F4A460900E6D9F63F53586AD1DD8CEAF925739B78B676B4558630B41F70 | ||||
d_r = 4856A039B8F178E9A1550722DCEF01559ECDBA30E0D0ADDD600D295352645408 | ||||
The public keys are generated from this using the formula in | ||||
Section 2: | ||||
pub_i = X25519(d_i, G) = | ||||
48 d5 dd d4 06 12 57 ba 16 6f a3 f9 bb db 74 f1 | ||||
a4 e8 1c 08 93 84 fa 77 f7 90 70 9f 0d fb c7 66 | ||||
pub_r = X25519(d_r, G) = | ||||
0b e7 c1 f5 aa d8 7d 7e 44 86 62 67 32 98 a4 43 | ||||
47 8b 85 97 45 17 9e af 56 4c 79 c0 ef 6e ee 25 | ||||
And this is the value of the Key Exchange Data field in the key | ||||
exchange payload described in Section 3.1. The shared value is | ||||
calculated as in Section 2: | ||||
SHARED_SECRET = X25519(d_i, pub_r) = X25519(d_r, pub_i) = | ||||
c7 49 50 60 7a 12 32 7f-32 04 d9 4b 68 25 bf b0 | ||||
68 b7 f8 31 9a 9e 37 08-ed 3d 43 ce 81 30 c9 50 | ||||
Authors' Addresses | ||||
Yoav Nir | Yoav Nir | |||
Check Point Software Technologies Ltd. | Check Point Software Technologies Ltd. | |||
5 Hasolelim st. | 5 Hasolelim st. | |||
Tel Aviv 6789735 | Tel Aviv 6789735 | |||
Israel | Israel | |||
Email: ynir.ietf@gmail.com | Email: ynir.ietf@gmail.com | |||
Simon Josefsson | Simon Josefsson | |||
SJD AB | SJD AB | |||
End of changes. 12 change blocks. | ||||
24 lines changed or deleted | 79 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |