| < draft-ietf-tls-rfc4492bis-03.txt | draft-ietf-tls-rfc4492bis-04.txt > | |||
|---|---|---|---|---|
| TLS Working Group Y. Nir | TLS Working Group Y. Nir | |||
| Internet-Draft Check Point | Internet-Draft Check Point | |||
| Intended status: Standards Track July 6, 2015 | Intended status: Standards Track S. Josefsson | |||
| Expires: January 7, 2016 | Expires: April 21, 2016 SJD AB | |||
| M. Pegourie-Gonnard | ||||
| Independent / PolarSSL | ||||
| October 19, 2015 | ||||
| Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer | Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer | |||
| Security (TLS) Versions 1.2 and Earlier | Security (TLS) Versions 1.2 and Earlier | |||
| draft-ietf-tls-rfc4492bis-03 | draft-ietf-tls-rfc4492bis-04 | |||
| Abstract | Abstract | |||
| This document describes key exchange algorithms based on Elliptic | This document describes key exchange algorithms based on Elliptic | |||
| Curve Cryptography (ECC) for the Transport Layer Security (TLS) | Curve Cryptography (ECC) for the Transport Layer Security (TLS) | |||
| protocol. In particular, it specifies the use of Ephemeral Elliptic | protocol. In particular, it specifies the use of Ephemeral Elliptic | |||
| Curve Diffie-Hellman (ECDHE) key agreement in a TLS handshake and the | Curve Diffie-Hellman (ECDHE) key agreement in a TLS handshake and the | |||
| use of Elliptic Curve Digital Signature Algorithm (ECDSA) as a new | use of Elliptic Curve Digital Signature Algorithm (ECDSA) as a new | |||
| authentication mechanism. | authentication mechanism. | |||
| skipping to change at page 1, line 36 ¶ | skipping to change at page 1, line 39 ¶ | |||
| 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 January 7, 2016. | This Internet-Draft will expire on April 21, 2016. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2015 IETF Trust and the persons identified as the | Copyright (c) 2015 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 18 ¶ | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 1.1. Conventions Used in This Document . . . . . . . . . . . . 4 | 1.1. Conventions Used in This Document . . . . . . . . . . . . 4 | |||
| 2. Key Exchange Algorithm . . . . . . . . . . . . . . . . . . . 4 | 2. Key Exchange Algorithm . . . . . . . . . . . . . . . . . . . 4 | |||
| 2.1. ECDHE_ECDSA . . . . . . . . . . . . . . . . . . . . . . . 5 | 2.1. ECDHE_ECDSA . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 2.2. ECDHE_RSA . . . . . . . . . . . . . . . . . . . . . . . . 6 | 2.2. ECDHE_RSA . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 2.3. ECDH_anon . . . . . . . . . . . . . . . . . . . . . . . . 6 | 2.3. ECDH_anon . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3. Client Authentication . . . . . . . . . . . . . . . . . . . . 6 | 3. Client Authentication . . . . . . . . . . . . . . . . . . . . 7 | |||
| 3.1. ECDSA_sign . . . . . . . . . . . . . . . . . . . . . . . 7 | 3.1. ECDSA_sign . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 4. TLS Extensions for ECC . . . . . . . . . . . . . . . . . . . 7 | 4. TLS Extensions for ECC . . . . . . . . . . . . . . . . . . . 8 | |||
| 5. Data Structures and Computations . . . . . . . . . . . . . . 8 | 5. Data Structures and Computations . . . . . . . . . . . . . . 8 | |||
| 5.1. Client Hello Extensions . . . . . . . . . . . . . . . . . 8 | 5.1. Client Hello Extensions . . . . . . . . . . . . . . . . . 9 | |||
| 5.1.1. Supported Elliptic Curves Extension . . . . . . . . . 10 | 5.1.1. Supported Elliptic Curves Extension . . . . . . . . . 10 | |||
| 5.1.2. Supported Point Formats Extension . . . . . . . . . . 11 | 5.1.2. Supported Point Formats Extension . . . . . . . . . . 11 | |||
| 5.2. Server Hello Extension . . . . . . . . . . . . . . . . . 11 | 5.2. Server Hello Extension . . . . . . . . . . . . . . . . . 12 | |||
| 5.3. Server Certificate . . . . . . . . . . . . . . . . . . . 12 | 5.3. Server Certificate . . . . . . . . . . . . . . . . . . . 13 | |||
| 5.4. Server Key Exchange . . . . . . . . . . . . . . . . . . . 13 | 5.4. Server Key Exchange . . . . . . . . . . . . . . . . . . . 14 | |||
| 5.5. Certificate Request . . . . . . . . . . . . . . . . . . . 17 | 5.5. Certificate Request . . . . . . . . . . . . . . . . . . . 17 | |||
| 5.6. Client Certificate . . . . . . . . . . . . . . . . . . . 18 | 5.6. Client Certificate . . . . . . . . . . . . . . . . . . . 18 | |||
| 5.7. Client Key Exchange . . . . . . . . . . . . . . . . . . . 19 | 5.7. Client Key Exchange . . . . . . . . . . . . . . . . . . . 19 | |||
| 5.8. Certificate Verify . . . . . . . . . . . . . . . . . . . 21 | 5.8. Certificate Verify . . . . . . . . . . . . . . . . . . . 20 | |||
| 5.9. Elliptic Curve Certificates . . . . . . . . . . . . . . . 22 | 5.9. Elliptic Curve Certificates . . . . . . . . . . . . . . . 21 | |||
| 5.10. ECDH, ECDSA, and RSA Computations . . . . . . . . . . . . 22 | 5.10. ECDH, ECDSA, and RSA Computations . . . . . . . . . . . . 21 | |||
| 5.11. Public Key Validation . . . . . . . . . . . . . . . . . . 22 | ||||
| 6. Cipher Suites . . . . . . . . . . . . . . . . . . . . . . . . 23 | 6. Cipher Suites . . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
| 7. Security Considerations . . . . . . . . . . . . . . . . . . . 24 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 24 | |||
| 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 24 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 25 | |||
| 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 25 | 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 26 | |||
| 10. Version History for This Draft . . . . . . . . . . . . . . . 25 | 10. Version History for This Draft . . . . . . . . . . . . . . . 26 | |||
| 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 26 | 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 27 | |||
| 11.1. Normative References . . . . . . . . . . . . . . . . . . 26 | 11.1. Normative References . . . . . . . . . . . . . . . . . . 27 | |||
| 11.2. Informative References . . . . . . . . . . . . . . . . . 27 | 11.2. Informative References . . . . . . . . . . . . . . . . . 28 | |||
| Appendix A. Equivalent Curves (Informative) . . . . . . . . . . 27 | Appendix A. Equivalent Curves (Informative) . . . . . . . . . . 28 | |||
| Appendix B. Differences from RFC 4492 . . . . . . . . . . . . . 28 | Appendix B. Differences from RFC 4492 . . . . . . . . . . . . . 29 | |||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 29 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 30 | |||
| 1. Introduction | 1. Introduction | |||
| Elliptic Curve Cryptography (ECC) is emerging as an attractive | Elliptic Curve Cryptography (ECC) has emerged as an attractive | |||
| public-key cryptosystem, in particular for mobile (i.e., wireless) | public-key cryptosystem, in particular for mobile (i.e., wireless) | |||
| environments. Compared to currently prevalent cryptosystems such as | environments. Compared to currently prevalent cryptosystems such as | |||
| RSA, ECC offers equivalent security with smaller key sizes. This is | RSA, ECC offers equivalent security with smaller key sizes. This is | |||
| illustrated in the following table, based on [Lenstra_Verheul], which | illustrated in the following table, based on [Lenstra_Verheul], which | |||
| gives approximate comparable key sizes for symmetric- and asymmetric- | gives approximate comparable key sizes for symmetric- and asymmetric- | |||
| key cryptosystems based on the best-known algorithms for attacking | key cryptosystems based on the best-known algorithms for attacking | |||
| them. | them. | |||
| +-----------+-----+------------+ | +-----------+-------+------------+ | |||
| | Symmetric | ECC | DH/DSA/RSA | | | Symmetric | ECC | DH/DSA/RSA | | |||
| +-----------+-----+------------+ | +-----------+-------+------------+ | |||
| | 80 | 163 | 1024 | | | 80 | >=158 | 1024 | | |||
| | 112 | 233 | 2048 | | | 112 | >=221 | 2048 | | |||
| | 128 | 283 | 3072 | | | 128 | >=252 | 3072 | | |||
| | 192 | 409 | 7680 | | | 192 | >=379 | 7680 | | |||
| | 256 | 571 | 15360 | | | 256 | >=506 | 15360 | | |||
| +-----------+-----+------------+ | +-----------+-------+------------+ | |||
| Table 1: Comparable Key Sizes (in bits) | Table 1: Comparable Key Sizes (in bits) | |||
| Smaller key sizes result in savings for power, memory, bandwidth, and | Smaller key sizes result in savings for power, memory, bandwidth, and | |||
| computational cost that make ECC especially attractive for | computational cost that make ECC especially attractive for | |||
| constrained environments. | constrained environments. | |||
| This document describes additions to TLS to support ECC, applicable | This document describes additions to TLS to support ECC, applicable | |||
| to TLS versions 1.0 [RFC2246], 1.1 [RFC4346], and 1.2 [RFC5246]. The | to TLS versions 1.0 [RFC2246], 1.1 [RFC4346], and 1.2 [RFC5246]. The | |||
| use of ECC in TLS 1.3 is defined in [I-D.ietf-tls-tls13], and is | use of ECC in TLS 1.3 is defined in [I-D.ietf-tls-tls13], and is | |||
| skipping to change at page 4, line 21 ¶ | skipping to change at page 4, line 24 ¶ | |||
| 2. Key Exchange Algorithm | 2. Key Exchange Algorithm | |||
| This document defines three new ECC-based key exchange algorithms for | This document defines three new ECC-based key exchange algorithms for | |||
| TLS. All of them use Ephemeral ECDH (ECDHE) to compute the TLS | TLS. All of them use Ephemeral ECDH (ECDHE) to compute the TLS | |||
| premaster secret, and they differ only in the mechanism (if any) used | premaster secret, and they differ only in the mechanism (if any) used | |||
| to authenticate them. The derivation of the TLS master secret from | to authenticate them. The derivation of the TLS master secret from | |||
| the premaster secret and the subsequent generation of bulk | the premaster secret and the subsequent generation of bulk | |||
| encryption/MAC keys and initialization vectors is independent of the | encryption/MAC keys and initialization vectors is independent of the | |||
| key exchange algorithm and not impacted by the introduction of ECC. | key exchange algorithm and not impacted by the introduction of ECC. | |||
| The table below summarizes the new key exchange algorithms, which | Table 2 summarizes the new key exchange algorithms. All of these key | |||
| mimic DHE_DSS, DHE_RSA, and DH_anon, respectively. | exchange algorithms provide forward secrecy. | |||
| +-------------+---------------------------------------+ | +-------------+------------------------------------------+ | |||
| | Algorithm | Description | | | Algorithm | Description | | |||
| +-------------+---------------------------------------+ | +-------------+------------------------------------------+ | |||
| | ECDHE_ECDSA | Ephemeral ECDH with ECDSA signatures. | | | ECDHE_ECDSA | Ephemeral ECDH with ECDSA signatures. | | |||
| | ECDHE_RSA | Ephemeral ECDH with RSA signatures. | | | ECDHE_RSA | Ephemeral ECDH with RSA signatures. | | |||
| | ECDH_anon | Anonymous ECDH, no signatures. | | | ECDH_anon | Anonymous ephemeral ECDH, no signatures. | | |||
| +-------------+---------------------------------------+ | +-------------+------------------------------------------+ | |||
| Table 2: ECC Key Exchange Algorithms | Table 2: ECC Key Exchange Algorithms | |||
| The ECDHE_ECDSA and ECDHE_RSA key exchange mechanisms provide forward | These key exchanges are analogous to DHE_DSS, DHE_RSA, and DH_anon, | |||
| secrecy. With ECDHE_RSA, a server can reuse its existing RSA | respectively. | |||
| certificate and easily comply with a constrained client's elliptic | ||||
| curve p references (see Section 4). However, the computational cost | With ECDHE_RSA, a server can reuse its existing RSA certificate and | |||
| incurred by a server is higher for ECDHE_RSA than for the traditional | easily comply with a constrained client's elliptic curve preferences | |||
| RSA key exchange, which does not provide forward secrecy. | (see Section 4). However, the computational cost incurred by a | |||
| server is higher for ECDHE_RSA than for the traditional RSA key | ||||
| exchange, which does not provide forward secrecy. | ||||
| The anonymous key exchange algorithm does not provide authentication | The anonymous key exchange algorithm does not provide authentication | |||
| of the server or the client. Like other anonymous TLS key exchanges, | of the server or the client. Like other anonymous TLS key exchanges, | |||
| it is subject to man-in-the-middle attacks. Implementations of this | it is subject to man-in-the-middle attacks. Implementations of this | |||
| algorithm SHOULD provide authentication by other means. | algorithm SHOULD provide authentication by other means. | |||
| Note that there is no structural difference between ECDH and ECDSA | Note that there is no structural difference between ECDH and ECDSA | |||
| keys. A certificate issuer may use X.509 v3 keyUsage and | keys. A certificate issuer may use X.509 v3 keyUsage and | |||
| extendedKeyUsage extensions to restrict the use of an ECC public key | extendedKeyUsage extensions to restrict the use of an ECC public key | |||
| to certain computations. This document refers to an ECC key as ECDH- | to certain computations. This document refers to an ECC key as ECDH- | |||
| skipping to change at page 6, line 18 ¶ | skipping to change at page 6, line 22 ¶ | |||
| 2.2. ECDHE_RSA | 2.2. ECDHE_RSA | |||
| This key exchange algorithm is the same as ECDHE_ECDSA except that | This key exchange algorithm is the same as ECDHE_ECDSA except that | |||
| the server's certificate MUST contain an RSA public key authorized | the server's certificate MUST contain an RSA public key authorized | |||
| for signing, and that the signature in the ServerKeyExchange message | for signing, and that the signature in the ServerKeyExchange message | |||
| must be computed with the corresponding RSA private key. The server | must be computed with the corresponding RSA private key. The server | |||
| certificate MUST be signed with RSA. | certificate MUST be signed with RSA. | |||
| 2.3. ECDH_anon | 2.3. ECDH_anon | |||
| NOTE: Despite the name beginning with "ECDH_" (no E), the key used in | ||||
| ECDH_anon is ephemeral just like the key in ECDHE_RSA and | ||||
| ECDHE_ECDSA. The naming follows the example of DH_anon, where the | ||||
| key is also ephemeral but the name does not reflect it. TBD: Do we | ||||
| want to rename this so that it makes sense? | ||||
| In ECDH_anon, the server's Certificate, the CertificateRequest, the | In ECDH_anon, the server's Certificate, the CertificateRequest, the | |||
| client's Certificate, and the CertificateVerify messages MUST NOT be | client's Certificate, and the CertificateVerify messages MUST NOT be | |||
| sent. | sent. | |||
| The server MUST send an ephemeral ECDH public key and a specification | The server MUST send an ephemeral ECDH public key and a specification | |||
| of the corresponding curve in the ServerKeyExchange message. These | of the corresponding curve in the ServerKeyExchange message. These | |||
| parameters MUST NOT be signed. | parameters MUST NOT be signed. | |||
| The client generates an ECDH key pair on the same curve as the | The client generates an ECDH key pair on the same curve as the | |||
| server's ephemeral ECDH key and sends its public key in the | server's ephemeral ECDH key and sends its public key in the | |||
| skipping to change at page 9, line 46 ¶ | skipping to change at page 10, line 13 ¶ | |||
| Actions of the receiver: | Actions of the receiver: | |||
| A server that receives a ClientHello containing one or both of these | A server that receives a ClientHello containing one or both of these | |||
| extensions MUST use the client's enumerated capabilities to guide its | extensions MUST use the client's enumerated capabilities to guide its | |||
| selection of an appropriate cipher suite. One of the proposed ECC | selection of an appropriate cipher suite. One of the proposed ECC | |||
| cipher suites must be negotiated only if the server can successfully | cipher suites must be negotiated only if the server can successfully | |||
| complete the handshake while using the curves and point formats | complete the handshake while using the curves and point formats | |||
| supported by the client (cf. Section 5.3 and Section 5.4). | supported by the client (cf. Section 5.3 and Section 5.4). | |||
| NOTE: A server participating in an ECDHE-ECDSA key exchange may use | NOTE: A server participating in an ECDHE-ECDSA key exchange may use | |||
| different curves for (i) the ECDSA key in its certificate, and (ii) | different curves for the ECDSA key in its certificate, and for the | |||
| the ephemeral ECDH key in the ServerKeyExchange message. The server | ephemeral ECDH key in the ServerKeyExchange message. The server MUST | |||
| must consider the extensions in both cases. | consider the extensions in both cases. | |||
| If a server does not understand the Supported Elliptic Curves | If a server does not understand the Supported Elliptic Curves | |||
| Extension, does not understand the Supported Point Formats Extension, | Extension, does not understand the Supported Point Formats Extension, | |||
| or is unable to complete the ECC handshake while restricting itself | or is unable to complete the ECC handshake while restricting itself | |||
| to the enumerated curves and point formats, it MUST NOT negotiate the | to the enumerated curves and point formats, it MUST NOT negotiate the | |||
| use of an ECC cipher suite. Depending on what other cipher suites | use of an ECC cipher suite. Depending on what other cipher suites | |||
| are proposed by the client and supported by the server, this may | are proposed by the client and supported by the server, this may | |||
| result in a fatal handshake failure alert due to the lack of common | result in a fatal handshake failure alert due to the lack of common | |||
| cipher suites. | cipher suites. | |||
| 5.1.1. Supported Elliptic Curves Extension | 5.1.1. Supported Elliptic Curves Extension | |||
| RFC 4492 defined 25 different curves in the NamedCurve registry for | RFC 4492 defined 25 different curves in the NamedCurve registry for | |||
| use in TLS. Only three have seen any use. This specification is | use in TLS. Only three have seen any use. This specification is | |||
| deprecating the rest (with numbers 1-22). This specification also | deprecating the rest (with numbers 1-22). This specification also | |||
| deprecates the explicit curves with identifiers 0xFF01 and 0xFF02. | deprecates the explicit curves with identifiers 0xFF01 and 0xFF02. | |||
| This leaves only the following: | It also adds the new curves defined in [CFRG-Curves]. The end result | |||
| is as follows: | ||||
| enum { | enum { | |||
| deprecated(1..22), | deprecated(1..22), | |||
| secp256r1 (23), secp384r1 (24), secp521r1 (25), | secp256r1 (23), secp384r1 (24), secp521r1 (25), | |||
| Curve25519(TBD1), | ||||
| Curve448(TBD2), | ||||
| reserved (0xFE00..0xFEFF), | reserved (0xFE00..0xFEFF), | |||
| deprecated(0xFF01..0xFF02), | deprecated(0xFF01..0xFF02), | |||
| (0xFFFF) | (0xFFFF) | |||
| } NamedCurve; | } NamedCurve; | |||
| Note that other specification have since added other values to this | Note that other specification have since added other values to this | |||
| enumeration. | enumeration. | |||
| secp256r1, etc: Indicates support of the corresponding named curve or | secp256r1, etc: Indicates support of the corresponding named curve or | |||
| class of explicitly defined curves. The named curves defined here | class of explicitly defined curves. The named curves secp256r1, | |||
| are those specified in SEC 2 [SECG-SEC2]. Note that many of these | secp384r1, and secp521r1 are specified in SEC 2 [SECG-SEC2]. These | |||
| curves are also recommended in ANSI X9.62 [ANSI.X9-62.2005] and FIPS | curves are also recommended in ANSI X9.62 [ANSI.X9-62.2005] and FIPS | |||
| 186-4 [FIPS.186-4]. Values 0xFE00 through 0xFEFF are reserved for | 186-4 [FIPS.186-4]. Curve25519 and Curve448 are defined in | |||
| private use. | ||||
| [CFRG-Curves]. Values 0xFE00 through 0xFEFF are reserved for private | ||||
| use. | ||||
| The NamedCurve name space is maintained by IANA. See Section 8 for | The NamedCurve name space is maintained by IANA. See Section 8 for | |||
| information on how new value assignments are added. | information on how new value assignments are added. | |||
| struct { | struct { | |||
| NamedCurve elliptic_curve_list<1..2^16-1> | NamedCurve elliptic_curve_list<1..2^16-1> | |||
| } EllipticCurveList; | } EllipticCurveList; | |||
| Items in elliptic_curve_list are ordered according to the client's | Items in elliptic_curve_list are ordered according to the client's | |||
| preferences (favorite choice first). | preferences (favorite choice first). | |||
| skipping to change at page 14, line 14 ¶ | skipping to change at page 14, line 30 ¶ | |||
| This message is sent when using the ECDHE_ECDSA, ECDHE_RSA, and | This message is sent when using the ECDHE_ECDSA, ECDHE_RSA, and | |||
| ECDH_anon key exchange algorithms. | ECDH_anon key exchange algorithms. | |||
| Meaning of this message: | Meaning of this message: | |||
| This message is used to convey the server's ephemeral ECDH public key | This message is used to convey the server's ephemeral ECDH public key | |||
| (and the corresponding elliptic curve domain parameters) to the | (and the corresponding elliptic curve domain parameters) to the | |||
| client. | client. | |||
| The ECCCurveType enum used to have values for explicit prime and for | ||||
| explicit char2 curves. Those values are now deprecated, so only one | ||||
| value remains: | ||||
| Structure of this message: | Structure of this message: | |||
| enum { explicit_prime (1), explicit_char2 (2), | enum { deprecated (1..2), named_curve (3), reserved(248..255) | |||
| named_curve (3), reserved(248..255) } ECCurveType; | } ECCurveType; | |||
| explicit_prime: Indicates the elliptic curve domain parameters are | The value named_curve indicates that a named curve is used. This | |||
| conveyed verbosely, and the underlying finite field is a prime | option SHOULD be used when applicable. | |||
| field. | ||||
| explicit_char2: Indicates the elliptic curve domain parameters are | ||||
| conveyed verbosely, and the underlying finite field is a | ||||
| characteristic-2 field. | ||||
| named_curve: Indicates that a named curve is used. This option | ||||
| SHOULD be used when applicable. | ||||
| Values 248 through 255 are reserved for private use. | Values 248 through 255 are reserved for private use. | |||
| The ECCurveType name space is maintained by IANA. See Section 8 for | The ECCurveType name space is maintained by IANA. See Section 8 for | |||
| information on how new value assignments are added. | information on how new value assignments are added. | |||
| struct { | RFC 4492 had a specification for an ECCurve structure and an | |||
| opaque a <1..2^8-1>; | ECBasisType structure. Both of these are omitted now because they | |||
| opaque b <1..2^8-1>; | were only used with the now deprecated explicit curves. | |||
| } ECCurve; | ||||
| a, b: These parameters specify the coefficients of the elliptic | ||||
| curve. Each value contains the byte string representation of a | ||||
| field element following the conversion routine in Section 4.3.3 of | ||||
| [ANSI.X9-62.2005]. | ||||
| struct { | struct { | |||
| opaque point <1..2^8-1>; | opaque point <1..2^8-1>; | |||
| } ECPoint; | } ECPoint; | |||
| point: This is the byte string representation of an elliptic curve | ||||
| point following the conversion routine in Section 4.3.6 of | ||||
| [ANSI.X9-62.2005]. This byte string may represent an elliptic | ||||
| curve point in uncompressed or compressed format; it MUST conform | ||||
| to what the client has requested through a Supported Point Formats | ||||
| Extension if this extension was used. | ||||
| enum { | This is the byte string representation of an elliptic curve point | |||
| ec_basis_trinomial(1), ec_basis_pentanomial(2), | following the conversion routine in Section 4.3.6 of | |||
| (255) | [ANSI.X9-62.2005]. This byte string may represent an elliptic curve | |||
| } ECBasisType; | point in uncompressed or compressed format; it MUST conform to what | |||
| ec_basis_trinomial: Indicates representation of a characteristic-2 | the client has requested through a Supported Point Formats Extension | |||
| field using a trinomial basis. | if this extension was used. For the Curve25519 and Curve448 curves, | |||
| ec_basis_pentanomial: Indicates representation of a characteristic-2 | the only valid representation is the one specified in [CFRG-Curves] - | |||
| field using a pentanomial basis. | a 32- or 56-octet representation of the u value of the point. | |||
| struct { | struct { | |||
| ECCurveType curve_type; | ECCurveType curve_type; | |||
| select (curve_type) { | select (curve_type) { | |||
| case explicit_prime: | ||||
| opaque prime_p <1..2^8-1>; | ||||
| ECCurve curve; | ||||
| ECPoint base; | ||||
| opaque order <1..2^8-1>; | ||||
| opaque cofactor <1..2^8-1>; | ||||
| case explicit_char2: | ||||
| uint16 m; | ||||
| ECBasisType basis; | ||||
| select (basis) { | ||||
| case ec_basis_trinomial: | ||||
| opaque k <1..2^8-1>; | ||||
| case ec_basis_pentanomial: | ||||
| opaque k1 <1..2^8-1>; | ||||
| opaque k2 <1..2^8-1>; | ||||
| opaque k3 <1..2^8-1>; | ||||
| }; | ||||
| ECCurve curve; | ||||
| ECPoint base; | ||||
| opaque order <1..2^8-1>; | ||||
| opaque cofactor <1..2^8-1>; | ||||
| case named_curve: | case named_curve: | |||
| NamedCurve namedcurve; | NamedCurve namedcurve; | |||
| }; | }; | |||
| } ECParameters; | } ECParameters; | |||
| curve_type: This identifies the type of the elliptic curve domain | ||||
| parameters. | ||||
| prime_p: This is the odd prime defining the field Fp. | ||||
| curve: Specifies the coefficients a and b of the elliptic curve E. | ||||
| base: Specifies the base point G on the elliptic curve. | ||||
| order: Specifies the order n of the base point. | ||||
| cofactor: Specifies the cofactor h = #E(Fq)/n, where #E(Fq) | ||||
| represents the number of points on the elliptic curve E defined | ||||
| over the field Fq (either Fp or F2^m). | ||||
| m: This is the degree of the characteristic-2 field F2^m. | ||||
| k: The exponent k for the trinomial basis representation x^m + x^k+1. | ||||
| k1, k2, k3: The exponents for the pentanomial representation x^m + | This identifies the type of the elliptic curve domain parameters. | |||
| x^k3 + x^k2 + x^k1 + 1 (such that k3 > k2 > k1). | ||||
| namedcurve: Specifies a recommended set of elliptic curve domain | Specifies a recommended set of elliptic curve domain parameters. All | |||
| parameters. All those values of NamedCurve are allowed that refer | those values of NamedCurve are allowed that refer to a specific | |||
| to a specific curve. Values of NamedCurve that indicate support | curve. Values of NamedCurve that indicate support for a class of | |||
| for a class of explicitly defined curves are not allowed here | explicitly defined curves are not allowed here (they are only | |||
| (they are only permissible in the ClientHello extension); this | permissible in the ClientHello extension); this applies to | |||
| applies to arbitrary_explicit_prime_curves(0xFF01) and | arbitrary_explicit_prime_curves(0xFF01) and | |||
| arbitrary_explicit_char2_curves(0xFF02). | arbitrary_explicit_char2_curves(0xFF02). | |||
| struct { | struct { | |||
| ECParameters curve_params; | ECParameters curve_params; | |||
| ECPoint public; | ECPoint public; | |||
| } ServerECDHParams; | } ServerECDHParams; | |||
| curve_params: Specifies the elliptic curve domain parameters | ||||
| associated with the ECDH public key. | Specifies the elliptic curve domain parameters associated with the | |||
| public: The ephemeral ECDH public key. | ECDH public key. | |||
| The ephemeral ECDH public key. | ||||
| The ServerKeyExchange message is extended as follows. | The ServerKeyExchange message is extended as follows. | |||
| enum { ec_diffie_hellman } KeyExchangeAlgorithm; | enum { ec_diffie_hellman } KeyExchangeAlgorithm; | |||
| ec_diffie_hellman: Indicates the ServerKeyExchange message contains | ec_diffie_hellman: Indicates the ServerKeyExchange message contains | |||
| an ECDH public key. | an ECDH public key. | |||
| select (KeyExchangeAlgorithm) { | select (KeyExchangeAlgorithm) { | |||
| case ec_diffie_hellman: | case ec_diffie_hellman: | |||
| skipping to change at page 22, line 18 ¶ | skipping to change at page 21, line 44 ¶ | |||
| 5.9. Elliptic Curve Certificates | 5.9. Elliptic Curve Certificates | |||
| X.509 certificates containing ECC public keys or signed using ECDSA | X.509 certificates containing ECC public keys or signed using ECDSA | |||
| MUST comply with [RFC3279] or another RFC that replaces or extends | MUST comply with [RFC3279] or another RFC that replaces or extends | |||
| it. Clients SHOULD use the elliptic curve domain parameters | it. Clients SHOULD use the elliptic curve domain parameters | |||
| recommended in ANSI X9.62, FIPS 186-4, and SEC 2 [SECG-SEC2]. | recommended in ANSI X9.62, FIPS 186-4, and SEC 2 [SECG-SEC2]. | |||
| 5.10. ECDH, ECDSA, and RSA Computations | 5.10. ECDH, ECDSA, and RSA Computations | |||
| All ECDH calculations (including parameter and key generation as well | All ECDH calculations for the NIST curves (including parameter and | |||
| as the shared secret calculation) are performed according to | key generation as well as the shared secret calculation) are | |||
| [IEEE.P1363.1998] using the ECKAS-DH1 scheme with the identity map as | performed according to [IEEE.P1363.1998] using the ECKAS-DH1 scheme | |||
| key derivation function (KDF), so that the premaster secret is the | with the identity map as key derivation function (KDF), so that the | |||
| x-coordinate of the ECDH shared secret elliptic curve point | premaster secret is the x-coordinate of the ECDH shared secret | |||
| represented as an octet string. Note that this octet string (Z in | elliptic curve point represented as an octet string. Note that this | |||
| IEEE 1363 terminology) as output by FE2OSP, the Field Element to | octet string (Z in IEEE 1363 terminology) as output by FE2OSP, the | |||
| Octet String Conversion Primitive, has constant length for any given | Field Element to Octet String Conversion Primitive, has constant | |||
| field; leading zeros found in this octet string MUST NOT be | length for any given field; leading zeros found in this octet string | |||
| truncated. | MUST NOT be truncated. | |||
| (Note that this use of the identity KDF is a technicality. The | (Note that this use of the identity KDF is a technicality. The | |||
| complete picture is that ECDH is employed with a non-trivial KDF | complete picture is that ECDH is employed with a non-trivial KDF | |||
| because TLS does not directly use the premaster secret for anything | because TLS does not directly use the premaster secret for anything | |||
| other than for computing the master secret. In TLS 1.0 and 1.1, this | other than for computing the master secret. In TLS 1.0 and 1.1, this | |||
| means that the MD5- and SHA-1-based TLS PRF serves as a KDF; in TLS | means that the MD5- and SHA-1-based TLS PRF serves as a KDF; in TLS | |||
| 1.2 the KDF is determined by ciphersuite; it is conceivable that | 1.2 the KDF is determined by ciphersuite; it is conceivable that | |||
| future TLS versions or new TLS extensions introduced in the future | future TLS versions or new TLS extensions introduced in the future | |||
| may vary this computation.) | may vary this computation.) | |||
| An ECDHE key exchange using Curve25519 goes as follows. Each party | ||||
| picks a secret key d uniformly at random and computes the | ||||
| corresponding public key x = Curve25519(d, G). Parties exchange | ||||
| their public keys and compute a shared secret as x_S = Curve25519(d, | ||||
| x_peer). ECDHE for Curve448 works similarily, replacing Curve25519 | ||||
| with Curve448. The derived shared secret is used directly as the | ||||
| premaster secret, which is always exactly 32 bytes when ECDHE with | ||||
| Curve25519 is used and 56 bytes when ECDHE with Curve448 is used. | ||||
| All ECDSA computations MUST be performed according to ANSI X9.62 or | All ECDSA computations MUST be performed according to ANSI X9.62 or | |||
| its successors. Data to be signed/verified is hashed, and the result | its successors. Data to be signed/verified is hashed, and the result | |||
| run directly through the ECDSA algorithm with no additional hashing. | run directly through the ECDSA algorithm with no additional hashing. | |||
| The default hash function is SHA-1 [FIPS.180-2], and sha_size (see | The default hash function is SHA-1 [FIPS.180-2], and sha_size (see | |||
| Section 5.4 and Section 5.8) is 20. However, an alternative hash | Section 5.4 and Section 5.8) is 20. However, an alternative hash | |||
| function, such as one of the new SHA hash functions specified in FIPS | function, such as one of the new SHA hash functions specified in FIPS | |||
| 180-2 [FIPS.180-2], may be used instead. | 180-2 [FIPS.180-2], may be used instead. | |||
| RFC 4492 anticipated the standardization of a mechanism for | RFC 4492 anticipated the standardization of a mechanism for | |||
| specifying the required hash function in the certificate, perhaps in | specifying the required hash function in the certificate, perhaps in | |||
| the parameters field of the subjectPublicKeyInfo. Such | the parameters field of the subjectPublicKeyInfo. Such | |||
| standardization never took place, and as a result, SHA-1 is used in | standardization never took place, and as a result, SHA-1 is used in | |||
| TLS 1.1 and earlier. TLS 1.2 added a SignatureAndHashAlgorithm | TLS 1.1 and earlier. TLS 1.2 added a SignatureAndHashAlgorithm | |||
| parameter to the DigitallySigned struct, thus allowing agility in | parameter to the DigitallySigned struct, thus allowing agility in | |||
| choosing the signature hash. | choosing the signature hash. | |||
| All RSA signatures must be generated and verified according to | All RSA signatures must be generated and verified according to | |||
| [PKCS1] block type 1. | [PKCS1] block type 1. | |||
| 5.11. Public Key Validation | ||||
| With the NIST curves, each party must validate the public key sent by | ||||
| its peer before performing cryptographic computations with it. | ||||
| Failing to do so allows attackers to gain information about the | ||||
| private key, to the point that they may recover the entire private | ||||
| key in a few requests, if that key is not really ephemeral. | ||||
| Curve25519 was designed in a way that the result of Curve25519(x, d) | ||||
| will never reveal information about d, provided it was chosen as | ||||
| prescribed, for any value of x. | ||||
| Let's define legitimate values of x as the values that can be | ||||
| obtained as x = Curve25519(G, d') for some d, and call the other | ||||
| values illegitimate. The definition of the Curve25519 function shows | ||||
| that legitimate values all share the following property: the high- | ||||
| order bit of the last byte is not set. | ||||
| Since there are some implementation of the Curve25519 function that | ||||
| impose this restriction on their input and others that don't, | ||||
| implementations of Curve25519 in TLS SHOULD reject public keys when | ||||
| the high-order bit of the last byte is set (in other words, when the | ||||
| value of the leftmost byte is greater than 0x7F) in order to prevent | ||||
| implementation fingerprinting. | ||||
| Other than this recommended check, implementations do not need to | ||||
| ensure that the public keys they receive are legitimate: this is not | ||||
| necessary for security with Curve25519. | ||||
| 6. Cipher Suites | 6. Cipher Suites | |||
| The table below defines new ECC cipher suites that use the key | The table below defines new ECC cipher suites that use the key | |||
| exchange algorithms specified in Section 2. | exchange algorithms specified in Section 2. | |||
| +---------------------------------------+----------------+ | +---------------------------------------+----------------+ | |||
| | CipherSuite | Identifier | | | CipherSuite | Identifier | | |||
| +---------------------------------------+----------------+ | +---------------------------------------+----------------+ | |||
| | TLS_ECDHE_ECDSA_WITH_NULL_SHA | { 0xC0, 0x06 } | | | TLS_ECDHE_ECDSA_WITH_NULL_SHA | { 0xC0, 0x06 } | | |||
| | TLS_ECDHE_ECDSA_WITH_RC4_128_SHA | { 0xC0, 0x07 } | | | TLS_ECDHE_ECDSA_WITH_RC4_128_SHA | { 0xC0, 0x07 } | | |||
| skipping to change at page 25, line 10 ¶ | skipping to change at page 25, line 48 ¶ | |||
| [RFC4492], the predecessor of this document has already defined the | [RFC4492], the predecessor of this document has already defined the | |||
| IANA registries for the following: | IANA registries for the following: | |||
| o NamedCurve Section 5.1 | o NamedCurve Section 5.1 | |||
| o ECPointFormat Section 5.1 | o ECPointFormat Section 5.1 | |||
| o ECCurveType Section 5.4 | o ECCurveType Section 5.4 | |||
| For each name space, this document defines the initial value | For each name space, this document defines the initial value | |||
| assignments and defines a range of 256 values (NamedCurve) or eight | assignments and defines a range of 256 values (NamedCurve) or eight | |||
| values (ECPointFormat and ECCurveType) reserved for Private Use. Any | values (ECPointFormat and ECCurveType) reserved for Private Use. Any | |||
| additional assignments require IETF Consensus action. | additional assignments require IETF Review. | |||
| NOTE: IANA, please update the registries to reflect the new policy | ||||
| name. | ||||
| NOTE: RFC editor please delete these two notes prior to publication. | ||||
| IANA, please update these two registries to refer to this document. | ||||
| IANA is requested to assign two values from the NamedCurve registry | ||||
| with names Curve25519(TBD1) and Curve448(TBD2) with this document as | ||||
| reference. | ||||
| 9. Acknowledgements | 9. Acknowledgements | |||
| Most of the text is this document is taken from [RFC4492], the | Most of the text is this document is taken from [RFC4492], the | |||
| predecessor of this document. The authors of that document were: | predecessor of this document. The authors of that document were: | |||
| o Simon Blake-Wilson | o Simon Blake-Wilson | |||
| o Nelson Bolyard | o Nelson Bolyard | |||
| o Vipul Gupta | o Vipul Gupta | |||
| o Chris Hawk | o Chris Hawk | |||
| skipping to change at page 26, line 28 ¶ | skipping to change at page 27, line 28 ¶ | |||
| Specification of basic notation", CCITT Recommendation | Specification of basic notation", CCITT Recommendation | |||
| X.680, July 2002. | X.680, July 2002. | |||
| [CCITT.X690] | [CCITT.X690] | |||
| International Telephone and Telegraph Consultative | International Telephone and Telegraph Consultative | |||
| Committee, "ASN.1 encoding rules: Specification of basic | Committee, "ASN.1 encoding rules: Specification of basic | |||
| encoding Rules (BER), Canonical encoding rules (CER) and | encoding Rules (BER), Canonical encoding rules (CER) and | |||
| Distinguished encoding rules (DER)", CCITT Recommendation | Distinguished encoding rules (DER)", CCITT Recommendation | |||
| X.690, July 2002. | X.690, July 2002. | |||
| [CFRG-Curves] | ||||
| Langley, A., Hamburg, M., and S. Turner, "Elliptic Curves | ||||
| for Security", draft-irtf-cfrg-curves-11 (work in | ||||
| progress), October 2015. | ||||
| [FIPS.186-4] | [FIPS.186-4] | |||
| National Institute of Standards and Technology, "Digital | National Institute of Standards and Technology, "Digital | |||
| Signature Standard", FIPS PUB 186-4, 2013, | Signature Standard", FIPS PUB 186-4, 2013, | |||
| <http://nvlpubs.nist.gov/nistpubs/FIPS/ | <http://nvlpubs.nist.gov/nistpubs/FIPS/ | |||
| NIST.FIPS.186-4.pdf>. | NIST.FIPS.186-4.pdf>. | |||
| [PKCS1] RSA Laboratories, "RSA Encryption Standard, Version 1.5", | [PKCS1] RSA Laboratories, "RSA Encryption Standard, Version 1.5", | |||
| PKCS 1, November 1993. | PKCS 1, November 1993. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| skipping to change at page 29, line 10 ¶ | skipping to change at page 30, line 10 ¶ | |||
| TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA | TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA | |||
| TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA | TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA | |||
| TLS_ECDH_RSA_WITH_NULL_SHA | TLS_ECDH_RSA_WITH_NULL_SHA | |||
| TLS_ECDH_RSA_WITH_RC4_128_SHA | TLS_ECDH_RSA_WITH_RC4_128_SHA | |||
| TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA | TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA | |||
| TLS_ECDH_RSA_WITH_AES_128_CBC_SHA | TLS_ECDH_RSA_WITH_AES_128_CBC_SHA | |||
| TLS_ECDH_RSA_WITH_AES_256_CBC_SHA | TLS_ECDH_RSA_WITH_AES_256_CBC_SHA | |||
| Removed unused curves and all but the uncompressed point format. | Removed unused curves and all but the uncompressed point format. | |||
| Author's Address | Added Curve25519 and Curve448. | |||
| Deprecated explicit curves. | ||||
| 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 | ||||
| SJD AB | ||||
| Email: simon@josefsson.org | ||||
| Manuel Pegourie-Gonnard | ||||
| Independent / PolarSSL | ||||
| Email: mpg@elzevir.fr | ||||
| End of changes. 37 change blocks. | ||||
| 144 lines changed or deleted | 175 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||