One document matched: draft-ietf-tls-rfc4492bis-03.xml
<?xml version="1.0"?>
<?xml-stylesheet type='text/xsl' href='./rfc2629.xslt' ?>
<?rfc compact="yes" ?>
<?rfc sortrefs="yes" ?>
<?rfc strict="yes" ?>
<?rfc linkmailto="yes" ?>
<?rfc toc="yes"?>
<?rfc tocdepth="4"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" >
<?xml-stylesheet type='text/xsl' href='./rfc2629.xslt' ?>
<?rfc symrefs="yes"?>
<?rfc compact="yes" ?>
<?rfc subcompact="yes" ?>
<?rfc sortrefs="yes" ?>
<rfc ipr="trust200902" docName="draft-ietf-tls-rfc4492bis-03" category="std">
<front>
<title abbrev="ECC Cipher Suites for TLS">Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS) Versions 1.2 and Earlier</title>
<author initials="Y." surname="Nir" fullname="Yoav Nir">
<organization abbrev="Check Point">Check Point Software Technologies Ltd.</organization>
<address>
<postal>
<street>5 Hasolelim st.</street>
<city>Tel Aviv</city>
<code>6789735</code>
<country>Israel</country>
</postal>
<email>ynir.ietf@gmail.com</email>
</address>
</author>
<date year="2015"/>
<area>Security Area</area>
<workgroup>TLS Working Group</workgroup>
<keyword>Internet-Draft</keyword>
<abstract>
<t> This document describes key exchange algorithms based on Elliptic Curve Cryptography (ECC) for the Transport
Layer Security (TLS) protocol. In particular, it specifies the use of Ephemeral Elliptic Curve Diffie-Hellman
(ECDHE) key agreement in a TLS handshake and the use of Elliptic Curve Digital Signature Algorithm (ECDSA) as
a new authentication mechanism.</t>
</abstract>
</front>
<!--
Changes from RFC 4492:
* Added mention of TLS 1.2
* Removed "required reading" for ECC from the Introduction. ECC is not longer "exotic"
* Moved the original authors to the Acknowledgement section.
-->
<middle>
<!-- ====================================================================== -->
<section anchor="introduction" title="Introduction">
<t> Elliptic Curve Cryptography (ECC) is emerging as an attractive public-key cryptosystem, in particular for
mobile (i.e., wireless) environments. Compared to currently prevalent cryptosystems such as RSA, ECC offers
equivalent security with smaller key sizes. This is illustrated in the following table, based on
<xref target="Lenstra_Verheul"/>, which gives approximate comparable key sizes for symmetric- and
asymmetric-key cryptosystems based on the best-known algorithms for attacking them.</t>
<texttable anchor="tbl1" title="Comparable Key Sizes (in bits)">
<ttcol align="center">Symmetric</ttcol>
<ttcol align="center">ECC</ttcol>
<ttcol align="center">DH/DSA/RSA</ttcol>
<c>80</c><c>163</c><c>1024</c>
<c>112</c><c>233</c><c>2048</c>
<c>128</c><c>283</c><c>3072</c>
<c>192</c><c>409</c><c>7680</c>
<c>256</c><c>571</c><c>15360</c>
</texttable>
<t> Smaller key sizes result in savings for power, memory, bandwidth, and computational cost that make ECC
especially attractive for constrained environments.</t>
<t> This document describes additions to TLS to support ECC, applicable to TLS versions 1.0
<xref target="RFC2246"/>, 1.1 <xref target="RFC4346"/>, and 1.2 <xref target="RFC5246"/>. The use of ECC in
TLS 1.3 is defined in <xref target="I-D.ietf-tls-tls13" />, and is explicitly out of scope for this document.
In particular, this document defines:<list style="symbols">
<t> the use of the Elliptic Curve Diffie-Hellman key agreement scheme with ephemeral keys to establish the
TLS premaster secret, and</t>
<t>the use of ECDSA certificates for authentication of TLS peers.</t></list></t>
<t> The remainder of this document is organized as follows. <xref target="ecdh"/> provides an overview of
ECC-based key exchange algorithms for TLS. <xref target="clientauth"/> describes the use of ECC certificates
for client authentication. TLS extensions that allow a client to negotiate the use of specific curves and
point formats are presented in <xref target="tlsext"/>. <xref target="structs"/> specifies various data
structures needed for an ECC-based handshake, their encoding in TLS messages, and the processing of those
messages. <xref target="suites"/> defines ECC-based cipher suites and identifies a small subset of these
as recommended for all implementations of this specification. <xref target="sec"/> discusses security
considerations. <xref target="iana"/> describes IANA considerations for the name spaces created by this
document's predecessor. <xref target="ack" /> gives acknowledgements. <xref target="rfc4492diff" />
provides differences from <xref target="RFC4492" />, the document that this one replaces.</t>
<t> Implementation of this specification requires familiarity with TLS, TLS extensions
<xref target="RFC4366" />, and ECC (TBD: reference Wikipedia here?).</t>
<section anchor="mustshouldmay" title="Conventions Used in This Document">
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT",
"RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described
in <xref target="RFC2119"/>.</t>
</section>
</section>
<section anchor="ecdh" title="Key Exchange Algorithm">
<t> This document defines three new ECC-based key exchange algorithms for TLS. All of them use Ephemeral
ECDH (ECDHE) to compute the TLS premaster secret, and they differ only in the mechanism (if any) used to
authenticate them. The derivation of the TLS master secret from the premaster secret and the subsequent
generation of bulk encryption/MAC keys and initialization vectors is independent of the key exchange
algorithm and not impacted by the introduction of ECC.</t>
<t> The table below summarizes the new key exchange algorithms, which mimic DHE_DSS, DHE_RSA, and DH_anon,
respectively.</t>
<texttable anchor="tbl2" title="ECC Key Exchange Algorithms">
<ttcol align="left">Algorithm</ttcol>
<ttcol align="left">Description</ttcol>
<c>ECDHE_ECDSA</c><c>Ephemeral ECDH with ECDSA signatures.</c>
<c>ECDHE_RSA</c><c>Ephemeral ECDH with RSA signatures.</c>
<c>ECDH_anon</c><c>Anonymous ECDH, no signatures.</c>
</texttable>
<t> The ECDHE_ECDSA and ECDHE_RSA key exchange mechanisms provide forward secrecy. With ECDHE_RSA, a server
can reuse its existing RSA certificate and easily comply with a constrained client's elliptic curve p
references (see <xref target="tlsext"/>). 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.</t>
<t> The anonymous key exchange algorithm does not provide authentication of the server or the client. Like
other anonymous TLS key exchanges, it is subject to man-in-the-middle attacks. Implementations of this
algorithm SHOULD provide authentication by other means.</t>
<t> Note that there is no structural difference between ECDH and ECDSA keys. A certificate issuer may use
X.509 v3 keyUsage and extendedKeyUsage extensions to restrict the use of an ECC public key to certain
computations. This document refers to an ECC key as ECDH-capable if its use in ECDH is permitted.
ECDSA-capable is defined similarly. <figure>
<artwork><![CDATA[
Client Server
------ ------
ClientHello -------->
ServerHello
Certificate*
ServerKeyExchange*
CertificateRequest*+
<-------- ServerHelloDone
Certificate*+
ClientKeyExchange
CertificateVerify*+
[ChangeCipherSpec]
Finished -------->
[ChangeCipherSpec]
<-------- Finished
Application Data <-------> Application Data
* message is not sent under some conditions
+ message is not sent unless client authentication
is desired
]]></artwork><postamble>Figure 1: Message flow in a full TLS handshake</postamble>
</figure></t>
<t> Figure 1 shows all messages involved in the TLS key establishment protocol (aka full handshake). The
addition of ECC has direct impact only on the ClientHello, the ServerHello, the server's Certificate
message, the ServerKeyExchange, the ClientKeyExchange, the CertificateRequest, the client's Certificate
message, and the CertificateVerify. Next, we describe the ECC key exchange algorithm in greater detail
in terms of the content and processing of these messages. For ease of exposition, we defer discussion of
client authentication and associated messages (identified with a + in Figure 1) until
<xref target="clientauth" /> and of the optional ECC-specific extensions (which impact the Hello messages)
until <xref target="tlsext" />.</t>
<section anchor="ecdhe_ecdsa" title="ECDHE_ECDSA">
<t> In ECDHE_ECDSA, the server's certificate MUST contain an ECDSA-capable public key and be signed with
ECDSA.</t>
<t> The server sends its ephemeral ECDH public key and a specification of the corresponding curve in the
ServerKeyExchange message. These parameters MUST be signed with ECDSA using the private key corresponding
to the public key in the server's Certificate.</t>
<t> 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 ClientKeyExchange message.</t>
<t> Both client and server perform an ECDH operation <xref target="alg_computes"/> and use the resultant
shared secret as the premaster secret.</t>
</section>
<section anchor="ecdhe_rsa" title="ECDHE_RSA">
<t> This key exchange algorithm is the same as ECDHE_ECDSA except that the server's certificate MUST contain
an RSA public key authorized for signing, and that the signature in the ServerKeyExchange message must be
computed with the corresponding RSA private key. The server certificate MUST be signed with RSA.</t>
</section>
<section anchor="ecdh_anon" title="ECDH_anon">
<t> In ECDH_anon, the server's Certificate, the CertificateRequest, the client's Certificate, and the
CertificateVerify messages MUST NOT be sent.</t>
<t> The server MUST send an ephemeral ECDH public key and a specification of the corresponding curve in
the ServerKeyExchange message. These parameters MUST NOT be signed.</t>
<t> 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 ClientKeyExchange message.</t>
<t> Both client and server perform an ECDH operation and use the resultant shared secret as the premaster
secret. All ECDH calculations are performed as specified in <xref target="alg_computes"/>.</t>
<t> Note that while the ECDHE_ECDSA and ECDHE_RSA key exchange algorithms require the server's certificate
to be signed with a particular signature scheme, this specification (following the similar cases of
DHE_DSS, and DHE_RSA in the TLS base documents) does not impose restrictions on signature schemes used
elsewhere in the certificate chain. (Often such restrictions will be useful, and it is expected that this
will be taken into account in certification authorities' signing practices. However, such restrictions are
not strictly required in general: Even if it is beyond the capabilities of a client to completely validate
a given chain, the client may be able to validate the server's certificate by relying on a trusted
certification authority whose certificate appears as one of the intermediate certificates in the chain.)</t>
</section>
</section>
<section anchor="clientauth" title="Client Authentication">
<t> This document defines a client authentication mechanism, named after the type of client certificate
involved: ECDSA_sign. The ECDSA_sign mechanism is usable with any of the non-anonymous ECC key exchange
algorithms described in <xref target="ecdh"/> as well as other non-anonymous (non-ECC) key exchange
algorithms defined in TLS.</t>
<t> The server can request ECC-based client authentication by including this certificate type in its
CertificateRequest message. The client must check if it possesses a certificate appropriate for the method
suggested by the server and is willing to use it for authentication.</t>
<t> If these conditions are not met, the client should send a client Certificate message containing no
certificates. In this case, the ClientKeyExchange should be sent as described in <xref target="ecdh"/>, and
the CertificateVerify should not be sent. If the server requires client authentication, it may respond with
a fatal handshake failure alert.</t>
<t> If the client has an appropriate certificate and is willing to use it for authentication, it must send
that certificate in the client's Certificate message (as per <xref target="client_cert"/>) and prove
possession of the private key corresponding to the certified key. The process of determining an
appropriate certificate and proving possession is different for each authentication mechanism and
described below.</t>
<t> NOTE: It is permissible for a server to request (and the client to send) a client certificate of a
different type than the server certificate.</t>
<section anchor="ecdsa_sign" title="ECDSA_sign">
<t> To use this authentication mechanism, the client MUST possess a certificate containing an ECDSA-capable
public key and signed with ECDSA.</t>
<t> The client proves possession of the private key corresponding to the certified key by including a
signature in the CertificateVerify message as described in <xref target="cert_verify"/>.</t>
</section>
</section>
<section anchor="tlsext" title="TLS Extensions for ECC">
<t> Two new TLS extensions are defined in this specification: (i) the Supported Elliptic Curves Extension,
and (ii) the Supported Point Formats Extension. These allow negotiating the use of specific curves and
point formats (e.g., compressed vs. uncompressed, respectively) during a handshake starting a new session.
These extensions are especially relevant for constrained clients that may only support a limited number of
curves or point formats. They follow the general approach outlined in <xref target="RFC4366"/>; message
details are specified in <xref target="structs"/>. The client enumerates the curves it supports and the
point formats it can parse by including the appropriate extensions in its ClientHello message. The server
similarly enumerates the point formats it can parse by including an extension in its ServerHello message.</t>
<t> A TLS client that proposes ECC cipher suites in its ClientHello message SHOULD include these extensions.
Servers implementing ECC cipher suites MUST support these extensions, and when a client uses these
extensions, servers MUST NOT negotiate the use of an ECC cipher suite unless they can complete the
handshake while respecting the choice of curves and compression techniques specified by the client.
This eliminates the possibility that a negotiated ECC handshake will be subsequently aborted due to a
client's inability to deal with the server's EC key.</t>
<t> The client MUST NOT include these extensions in the ClientHello message if it does not propose any ECC
cipher suites. A client that proposes ECC cipher suites may choose not to include these extensions. In
this case, the server is free to choose any one of the elliptic curves or point formats listed in
<xref target="structs"/>. That section also describes the structure and processing of these extensions
in greater detail.</t>
<t> In the case of session resumption, the server simply ignores the Supported Elliptic Curves Extension and
the Supported Point Formats Extension appearing in the current ClientHello message. These extensions only
play a role during handshakes negotiating a new session.</t>
</section>
<section anchor="structs" title="Data Structures and Computations">
<t> This section specifies the data structures and computations used by ECC-based key mechanisms specified
in the previous three sections. The presentation language used here is the same as that used in TLS.
Since this specification extends TLS, these descriptions should be merged with those in the TLS specification
and any others that extend TLS. This means that enum types may not specify all possible values, and
structures with multiple formats chosen with a select() clause may not indicate all possible cases.</t>
<section anchor="ch_extensions" title="Client Hello Extensions">
<t> This section specifies two TLS extensions that can be included with the ClientHello message as described
in <xref target="RFC4366"/>, the Supported Elliptic Curves Extension and the Supported Point Formats
Extension.</t>
<t> When these extensions are sent:</t>
<t> The extensions SHOULD be sent along with any ClientHello message that proposes ECC cipher suites.</t>
<t> Meaning of these extensions:</t>
<t> These extensions allow a client to enumerate the elliptic curves it supports and/or the point formats
it can parse.</t>
<t> Structure of these extensions:</t>
<t> The general structure of TLS extensions is described in <xref target="RFC4366"/>, and this specification
adds two new types to ExtensionType.<figure><artwork><![CDATA[
enum { elliptic_curves(10), ec_point_formats(11) } ExtensionType;
]]></artwork></figure><list style="hanging">
<t hangText="elliptic_curves (Supported Elliptic Curves Extension):"> Indicates the set of elliptic
curves supported by the client. For this extension, the opaque extension_data field contains
EllipticCurveList. See <xref target="supp_ec_ext"/> for details.</t>
<t hangText="ec_point_formats (Supported Point Formats Extension):"> Indicates the set of point formats
that the client can parse. For this extension, the opaque extension_data field contains ECPointFormatList.
See <xref target="supp_pf_ext"/> for details.</t></list></t>
<t> Actions of the sender:</t>
<t> A client that proposes ECC cipher suites in its ClientHello message appends these extensions (along
with any others), enumerating the curves it supports and the point formats it can parse. Clients SHOULD
send both the Supported Elliptic Curves Extension and the Supported Point Formats Extension. If the
Supported Point Formats Extension is indeed sent, it MUST contain the value 0 (uncompressed) as one of the
items in the list of point formats.</t>
<t> Actions of the receiver:</t>
<t> A server that receives a ClientHello containing one or both of these extensions MUST use the client's
enumerated capabilities to guide its selection of an appropriate cipher suite. One of the proposed ECC
cipher suites must be negotiated only if the server can successfully complete the handshake while using
the curves and point formats supported by the client (cf. <xref target="server_cert"/> and
<xref target="ske"/>).</t>
<t> NOTE: A server participating in an ECDHE-ECDSA key exchange may use different curves for (i) the ECDSA
key in its certificate, and (ii) the ephemeral ECDH key in the ServerKeyExchange message. The server must
consider the extensions in both cases.</t>
<t> If a server does not understand the Supported Elliptic Curves Extension, does not understand the
Supported Point Formats Extension, or is unable to complete the ECC handshake while restricting itself
to the enumerated curves and point formats, it MUST NOT negotiate the use of an ECC cipher suite.
Depending on what other cipher suites 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 cipher suites.</t>
<section anchor="supp_ec_ext" title="Supported Elliptic Curves Extension">
<t> RFC 4492 defined 25 different curves in the NamedCurve registry for use in TLS. Only three have seen
any use. This specification is deprecating the rest (with numbers 1-22). This specification also
deprecates the explicit curves with identifiers 0xFF01 and 0xFF02. This leaves only the following:</t>
<figure><artwork><![CDATA[
enum {
deprecated(1..22),
secp256r1 (23), secp384r1 (24), secp521r1 (25),
reserved (0xFE00..0xFEFF),
deprecated(0xFF01..0xFF02),
(0xFFFF)
} NamedCurve;
]]></artwork></figure>
<t> Note that other specification have since added other values to this enumeration.</t>
<t> secp256r1, etc: Indicates support of the corresponding named curve or class of explicitly defined
curves. The named curves defined here are those specified in SEC 2 <xref target="SECG-SEC2"/>. Note
that many of these curves are also recommended in ANSI X9.62 <xref target="ANSI.X9-62.2005"/> and
FIPS 186-4 <xref target="FIPS.186-4"/>. Values 0xFE00 through 0xFEFF are reserved for private use.</t>
<t> The NamedCurve name space is maintained by IANA. See <xref target="iana"/> for information on how new
value assignments are added.</t>
<figure><artwork><![CDATA[
struct {
NamedCurve elliptic_curve_list<1..2^16-1>
} EllipticCurveList;
]]></artwork></figure>
<t> Items in elliptic_curve_list are ordered according to the client's preferences (favorite choice
first).</t>
<t> As an example, a client that only supports secp256r1 (aka NIST P-256; value 23 = 0x0017) and secp384r1
(aka NIST P-384; value 24 = 0x0018) and prefers to use secp256r1 would include a TLS extension consisting
of the following octets. Note that the first two octets indicate the extension type (Supported Elliptic
Curves Extension):</t>
<figure><artwork><![CDATA[
00 0A 00 06 00 04 00 17 00 18
]]></artwork></figure>
</section>
<section anchor="supp_pf_ext" title="Supported Point Formats Extension">
<figure><artwork><![CDATA[
enum { uncompressed (0), ansiX962_compressed_prime (1),
ansiX962_compressed_char2 (2), reserved (248..255)
} ECPointFormat;
struct {
ECPointFormat ec_point_format_list<1..2^8-1>
} ECPointFormatList;
]]></artwork></figure>
<t> Three point formats were included in the definition of ECPointFormat above. This specification
deprecates all but the uncompressed point format. Implementations of this document MUST support the
uncompressed format for all of their supported curves, and MUST support no other formats for curves
defined in this specification. For backwards compatibility purposes, the point format list extension
MUST still be included, and contain exactly one value: the uncomptessed point format (0).</t>
<t> The ECPointFormat name space is maintained by IANA. See <xref target="iana"/> for information on how
new value assignments are added.</t>
<t> Items in ec_point_format_list are ordered according to the client's preferences (favorite choice first).</t>
<t> A client compliant with this specification that supports no other curves MUST send the following octets;
note that the first two octets indicate the extension type (Supported Point Formats Extension):<figure><artwork><![CDATA[
00 0B 00 02 01 00
]]></artwork></figure></t>
</section>
</section>
<section anchor="serverhello_ext" title="Server Hello Extension">
<t> This section specifies a TLS extension that can be included with the ServerHello message as described
in <xref target="RFC4366"/>, the Supported Point Formats Extension.</t>
<t> When this extension is sent:</t>
<t> The Supported Point Formats Extension is included in a ServerHello message in response to a ClientHello
message containing the Supported Point Formats Extension when negotiating an ECC cipher suite.</t>
<t> Meaning of this extension:</t>
<t> This extension allows a server to enumerate the point formats it can parse (for the curve that will appear
in its ServerKeyExchange message when using the ECDHE_ECDSA, ECDHE_RSA, or ECDH_anon key exchange algorithm.</t>
<t> Structure of this extension:</t>
<t> The server's Supported Point Formats Extension has the same structure as the client's Supported Point
Formats Extension (see <xref target="supp_pf_ext"/>). Items in ec_point_format_list here are ordered
according to the server's preference (favorite choice first). Note that the server may include items that
were not found in the client's list (e.g., the server may prefer to receive points in compressed format
even when a client cannot parse this format: the same client may nevertheless be capable of outputting
points in compressed format).</t>
<t> Actions of the sender:</t>
<t> A server that selects an ECC cipher suite in response to a ClientHello message including a Supported
Point Formats Extension appends this extension (along with others) to its ServerHello message, enumerating
the point formats it can parse. The Supported Point Formats Extension, when used, MUST contain the value 0
(uncompressed) as one of the items in the list of point formats.</t>
<t> Actions of the receiver:</t>
<t> A client that receives a ServerHello message containing a Supported Point Formats Extension MUST respect
the server's choice of point formats during the handshake (cf. <xref target="client_cert"/> and
<xref target="cke"/>). If no Supported Point Formats Extension is received with the ServerHello, this is
equivalent to an extension allowing only the uncompressed point format.</t>
</section>
<section anchor="server_cert" title="Server Certificate">
<t> When this message is sent:</t>
<t> This message is sent in all non-anonymous ECC-based key exchange algorithms.</t>
<t> Meaning of this message:</t>
<t> This message is used to authentically convey the server's static public key to the client. The following
table shows the server certificate type appropriate for each key exchange algorithm. ECC public keys MUST
be encoded in certificates as described in <xref target="eccerts"/>.</t>
<t> NOTE: The server's Certificate message is capable of carrying a chain of certificates. The restrictions
mentioned in Table 3 apply only to the server's certificate (first in the chain).</t>
<texttable anchor="tbl3" title="Server Certificate Types">
<ttcol align="left">Algorithm</ttcol>
<ttcol align="left">Server Certificate Type</ttcol>
<c>ECDHE_ECDSA</c><c>Certificate MUST contain an ECDSA-capable public key. It MUST be signed with ECDSA.</c>
<c>ECDHE_RSA</c><c>Certificate MUST contain an RSA public key authorized for use in digital signatures.
It MUST be signed with RSA.</c>
</texttable>
<t> Structure of this message:</t>
<t> Identical to the TLS Certificate format.</t>
<t> Actions of the sender:</t>
<t> The server constructs an appropriate certificate chain and conveys it to the client in the Certificate
message. If the client has used a Supported Elliptic Curves Extension, the public key in the server's
certificate MUST respect the client's choice of elliptic curves; in particular, the public key MUST employ
a named curve (not the same curve as an explicit curve) unless the client has indicated support for
explicit curves of the appropriate type. If the client has used a Supported Point Formats Extension, both
the server's public key point and (in the case of an explicit curve) the curve's base point MUST respect
the client's choice of point formats. (A server that cannot satisfy these requirements MUST NOT choose
an ECC cipher suite in its ServerHello message.)</t>
<t> Actions of the receiver:</t>
<t> The client validates the certificate chain, extracts the server's public key, and checks that the key
type is appropriate for the negotiated key exchange algorithm. (A possible reason for a fatal handshake
failure is that the client's capabilities for handling elliptic curves and point formats are exceeded;
cf. <xref target="ch_extensions"/>.)</t>
</section>
<section anchor="ske" title="Server Key Exchange">
<t> When this message is sent:</t>
<t> This message is sent when using the ECDHE_ECDSA, ECDHE_RSA, and ECDH_anon key exchange algorithms.</t>
<t> Meaning of this message:</t>
<t> This message is used to convey the server's ephemeral ECDH public key (and the corresponding elliptic
curve domain parameters) to the client.</t>
<t> Structure of this message:<figure><artwork><![CDATA[
enum { explicit_prime (1), explicit_char2 (2),
named_curve (3), reserved(248..255) } ECCurveType;
]]></artwork></figure><list style="hanging">
<t hangText="explicit_prime:"> Indicates the elliptic curve domain parameters are conveyed verbosely,
and the underlying finite field is a prime field.</t>
<t hangText="explicit_char2:"> Indicates the elliptic curve domain parameters are conveyed verbosely,
and the underlying finite field is a characteristic-2 field.</t>
<t hangText="named_curve:"> Indicates that a named curve is used. This option SHOULD be used when
applicable.</t></list></t>
<t> Values 248 through 255 are reserved for private use.</t>
<t> The ECCurveType name space is maintained by IANA. See <xref target="iana"/> for information on how new
value assignments are added.<figure><artwork><![CDATA[
struct {
opaque a <1..2^8-1>;
opaque b <1..2^8-1>;
} ECCurve;
]]></artwork></figure><list style="hanging">
<t hangText="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
<xref target="ANSI.X9-62.2005"/>.<figure><artwork><![CDATA[
struct {
opaque point <1..2^8-1>;
} ECPoint;
]]></artwork></figure></t>
<t hangText="point:"> This is the byte string representation of an elliptic curve point following the
conversion routine in Section 4.3.6 of <xref target="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.<figure><artwork><![CDATA[
enum {
ec_basis_trinomial(1), ec_basis_pentanomial(2),
(255)
} ECBasisType;
]]></artwork></figure></t>
<t hangText="ec_basis_trinomial:"> Indicates representation of a characteristic-2 field using a trinomial basis.</t>
<t hangText="ec_basis_pentanomial:"> Indicates representation of a characteristic-2 field using a pentanomial basis.<figure><artwork><![CDATA[
struct {
ECCurveType 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:
NamedCurve namedcurve;
};
} ECParameters;
]]></artwork></figure></t>
<t hangText="curve_type:"> This identifies the type of the elliptic curve domain parameters.</t>
<t hangText="prime_p:"> This is the odd prime defining the field Fp.</t>
<t hangText="curve:"> Specifies the coefficients a and b of the elliptic curve E.</t>
<t hangText="base:"> Specifies the base point G on the elliptic curve.</t>
<t hangText="order:"> Specifies the order n of the base point.</t>
<t hangText="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).</t>
<t hangText="m:"> This is the degree of the characteristic-2 field F2^m.</t>
<t hangText="k:"> The exponent k for the trinomial basis representation x^m + x^k+1.</t>
<t hangText="k1, k2, k3:"> The exponents for the pentanomial representation x^m + x^k3 + x^k2 + x^k1 + 1
(such that k3 > k2 > k1).</t>
<t hangText="namedcurve:"> Specifies a recommended set of elliptic curve domain parameters. All those
values of NamedCurve are allowed that refer to a specific curve. Values of NamedCurve that indicate
support for a class of explicitly defined curves are not allowed here (they are only permissible in
the ClientHello extension); this applies to arbitrary_explicit_prime_curves(0xFF01) and
arbitrary_explicit_char2_curves(0xFF02).<figure><artwork><![CDATA[
struct {
ECParameters curve_params;
ECPoint public;
} ServerECDHParams;
]]></artwork></figure></t>
<t hangText="curve_params:"> Specifies the elliptic curve domain parameters associated with the ECDH
public key.</t>
<t hangText="public:"> The ephemeral ECDH public key.</t></list></t>
<t> The ServerKeyExchange message is extended as follows.<figure><artwork><![CDATA[
enum { ec_diffie_hellman } KeyExchangeAlgorithm;
]]></artwork></figure><list style="hanging">
<t hangText="ec_diffie_hellman:"> Indicates the ServerKeyExchange message contains an ECDH public key.</t></list><figure><artwork><![CDATA[
select (KeyExchangeAlgorithm) {
case ec_diffie_hellman:
ServerECDHParams params;
Signature signed_params;
} ServerKeyExchange;
]]></artwork></figure><list style="hanging">
<t hangText="params:"> Specifies the ECDH public key and associated domain parameters.</t>
<t hangText="signed_params:"> A hash of the params, with the signature appropriate to that hash applied.
The private key corresponding to the certified public key in the server's Certificate message is used
for signing.<figure><artwork><![CDATA[
enum { ecdsa } SignatureAlgorithm;
select (SignatureAlgorithm) {
case ecdsa:
digitally-signed struct {
opaque sha_hash[sha_size];
};
} Signature;
ServerKeyExchange.signed_params.sha_hash
SHA(ClientHello.random + ServerHello.random +
ServerKeyExchange.params);
]]></artwork></figure></t></list></t>
<t> NOTE: SignatureAlgorithm is "rsa" for the ECDHE_RSA key exchange algorithm and "anonymous" for ECDH_anon.
These cases are defined in TLS. SignatureAlgorithm is "ecdsa" for ECDHE_ECDSA. ECDSA signatures are
generated and verified as described in <xref target="alg_computes"/>, and SHA in the above template for
sha_hash accordingly may denote a hash algorithm other than SHA-1. As per ANSI X9.62, an ECDSA signature
consists of a pair of integers, r and s. The digitally-signed element is encoded as an opaque vector
<0..2^16-1>, the contents of which are the DER encoding corresponding to the following ASN.1
notation.<figure><artwork><![CDATA[
Ecdsa-Sig-Value ::= SEQUENCE {
r INTEGER,
s INTEGER
}
]]></artwork></figure></t>
<t> Actions of the sender:</t>
<t> The server selects elliptic curve domain parameters and an ephemeral ECDH public key corresponding to
these parameters according to the ECKAS-DH1 scheme from IEEE 1363 <xref target="IEEE.P1363.1998"/>.
It conveys this information to the client in the ServerKeyExchange message using the format defined above.</t>
<t> Actions of the receiver:</t>
<t> The client verifies the signature (when present) and retrieves the server's elliptic curve domain
parameters and ephemeral ECDH public key from the ServerKeyExchange message. (A possible reason for a
fatal handshake failure is that the client's capabilities for handling elliptic curves and point formats
are exceeded; cf. <xref target="ch_extensions"/>.)</t>
</section>
<section anchor="certreq" title="Certificate Request">
<t> When this message is sent:</t>
<t> This message is sent when requesting client authentication.</t>
<t> Meaning of this message:</t>
<t> The server uses this message to suggest acceptable client authentication methods.</t>
<t> Structure of this message:</t>
<t> The TLS CertificateRequest message is extended as follows.<figure><artwork><![CDATA[
enum {
ecdsa_sign(64), rsa_fixed_ecdh(65),
ecdsa_fixed_ecdh(66), (255)
} ClientCertificateType;
]]></artwork></figure><list style="hanging">
<t hangText="ecdsa_sign, etc."> Indicates that the server would like to use the corresponding client
authentication method specified in <xref target="clientauth"/>.</t></list></t>
<t> Actions of the sender:</t>
<t> The server decides which client authentication methods it would like to use, and conveys this information
to the client using the format defined above.</t>
<t> Actions of the receiver:</t>
<t> The client determines whether it has a suitable certificate for use with any of the requested methods
and whether to proceed with client authentication.</t>
</section>
<section anchor="client_cert" title="Client Certificate">
<t> When this message is sent:</t>
<t> This message is sent in response to a CertificateRequest when a client has a suitable certificate and
has decided to proceed with client authentication. (Note that if the server has used a Supported Point
Formats Extension, a certificate can only be considered suitable for use with the ECDSA_sign, RSA_fixed_ECDH,
and ECDSA_fixed_ECDH authentication methods if the public key point specified in it respects the server's
choice of point formats. If no Supported Point Formats Extension has been used, a certificate can only
be considered suitable for use with these authentication methods if the point is represented in
uncompressed point format.)</t>
<t> Meaning of this message:</t>
<t> This message is used to authentically convey the client's static public key to the server. The
following table summarizes what client certificate types are appropriate for the ECC-based client
authentication mechanisms described in <xref target="clientauth"/>. ECC public keys must be encoded in
certificates as described in <xref target="eccerts"/>.</t>
<t> NOTE: The client's Certificate message is capable of carrying a chain of certificates. The
restrictions mentioned in Table 4 apply only to the client's certificate (first in the chain).</t>
<texttable anchor="tbl4" title="Client Certificate Types">
<ttcol align="left">Client Authentication Method</ttcol>
<ttcol align="left">Client Certificate Type</ttcol>
<c>ECDSA_sign</c><c>Certificate MUST contain an ECDSA-capable public key and be signed with ECDSA.</c>
<c>ECDSA_fixed_ECDH</c><c>Certificate MUST contain an ECDH-capable public key on the same elliptic curve
as the server's long-term ECDH key. This certificate MUST be signed with ECDSA.</c>
<c>RSA_fixed_ECDH</c><c>Certificate MUST contain an ECDH-capable public key on the same elliptic curve
as the server's long-term ECDH key. This certificate MUST be signed with RSA.</c>
</texttable>
<t> Structure of this message:</t>
<t> Identical to the TLS client Certificate format.</t>
<t> Actions of the sender:</t>
<t> The client constructs an appropriate certificate chain, and conveys it to the server in the Certificate message.</t>
<t> Actions of the receiver:</t>
<t> The TLS server validates the certificate chain, extracts the client's public key, and checks that the key
type is appropriate for the client authentication method.</t>
</section>
<section anchor="cke" title="Client Key Exchange">
<t> When this message is sent:</t>
<t> This message is sent in all key exchange algorithms. If client authentication with ECDSA_fixed_ECDH
or RSA_fixed_ECDH is used, this message is empty. Otherwise, it contains the client's ephemeral ECDH
public key.</t>
<t> Meaning of the message:</t>
<t> This message is used to convey ephemeral data relating to the key exchange belonging to the client (such
as its ephemeral ECDH public key).</t>
<t> Structure of this message:</t>
<t> The TLS ClientKeyExchange message is extended as follows.<figure><artwork><![CDATA[
enum { implicit, explicit } PublicValueEncoding;
]]></artwork></figure><list style="hanging">
<t hangText="implicit, explicit:"> For ECC cipher suites, this indicates whether the client's ECDH public
key is in the client's certificate ("implicit") or is provided, as an ephemeral ECDH public key, in the
ClientKeyExchange message ("explicit"). (This is "explicit" in ECC cipher suites except when the client
uses the ECDSA_fixed_ECDH or RSA_fixed_ECDH client authentication mechanism.)<figure><artwork><![CDATA[
struct {
select (PublicValueEncoding) {
case implicit: struct { };
case explicit: ECPoint ecdh_Yc;
} ecdh_public;
} ClientECDiffieHellmanPublic;
]]></artwork></figure></t>
<t hangText="ecdh_Yc:"> Contains the client's ephemeral ECDH public key as a byte string ECPoint.point,
which may represent an elliptic curve point in uncompressed or compressed format. Here, the format
MUST conform to what the server has requested through a Supported Point Formats Extension if this
extension was used, and MUST be uncompressed if this extension was not used.<figure><artwork><![CDATA[
struct {
select (KeyExchangeAlgorithm) {
case ec_diffie_hellman: ClientECDiffieHellmanPublic;
} exchange_keys;
} ClientKeyExchange;
]]></artwork></figure></t></list></t>
<t> Actions of the sender:</t>
<t> The client selects an ephemeral ECDH public key corresponding to the parameters it received from the
server according to the ECKAS-DH1 scheme from IEEE 1363. It conveys this information to the client in
the ClientKeyExchange message using the format defined above.</t>
<t> Actions of the receiver:</t>
<t> The server retrieves the client's ephemeral ECDH public key from the ClientKeyExchange message and checks
that it is on the same elliptic curve as the server's ECDH key.</t>
</section>
<section anchor="cert_verify" title="Certificate Verify">
<t> When this message is sent:</t>
<t> This message is sent when the client sends a client certificate containing a public key usable for
digital signatures, e.g., when the client is authenticated using the ECDSA_sign mechanism.</t>
<t> Meaning of the message:</t>
<t> This message contains a signature that proves possession of the private key corresponding to the public
key in the client's Certificate message.</t>
<t> Structure of this message:</t>
<t> The TLS CertificateVerify message and the underlying Signature type are defined in the TLS base
specifications, and the latter is extended here in <xref target="ske"/>. For the ecdsa case, the signature
field in the CertificateVerify message contains an ECDSA signature computed over handshake messages
exchanged so far, exactly similar to CertificateVerify with other signing algorithms:<figure><artwork><![CDATA[
CertificateVerify.signature.sha_hash
SHA(handshake_messages);
]]></artwork></figure></t>
<t> ECDSA signatures are computed as described in <xref target="alg_computes"/>, and SHA in the above
template for sha_hash accordingly may denote a hash algorithm other than SHA-1. As per ANSI X9.62, an
ECDSA signature consists of a pair of integers, r and s. The digitally-signed element is encoded as an
opaque vector <0..2^16-1>, the contents of which are the DER encoding <xref target="CCITT.X690"/>
corresponding to the following ASN.1 notation <xref target="CCITT.X680"/>.<figure><artwork><![CDATA[
Ecdsa-Sig-Value ::= SEQUENCE {
r INTEGER,
s INTEGER
}
]]></artwork></figure></t>
<t> Actions of the sender:</t>
<t> The client computes its signature over all handshake messages sent or received starting at client hello
and up to but not including this message. It uses the private key corresponding to its certified public
key to compute the signature, which is conveyed in the format defined above.</t>
<t> Actions of the receiver:</t>
<t> The server extracts the client's signature from the CertificateVerify message, and verifies the
signature using the public key it received in the client's Certificate message.</t>
</section>
<section anchor="eccerts" title="Elliptic Curve Certificates">
<t> X.509 certificates containing ECC public keys or signed using ECDSA MUST comply with
<xref target="RFC3279"/> or another RFC that replaces or extends it. Clients SHOULD use the elliptic
curve domain parameters recommended in ANSI X9.62, FIPS 186-4, and SEC 2 <xref target="SECG-SEC2"/>.</t>
</section>
<section anchor="alg_computes" title="ECDH, ECDSA, and RSA Computations">
<t> All ECDH calculations (including parameter and key generation as well as the shared secret calculation)
are performed according to <xref target="IEEE.P1363.1998"/> using the ECKAS-DH1 scheme with the identity
map as key derivation function (KDF), so that the premaster secret is the x-coordinate of the ECDH shared
secret elliptic curve point represented as an octet string. Note that this octet string (Z in IEEE 1363
terminology) as output by FE2OSP, the Field Element to Octet String Conversion Primitive, has constant
length for any given field; leading zeros found in this octet string MUST NOT be truncated.</t>
<t> (Note that this use of the identity KDF is a technicality. The complete picture is that ECDH is
employed with a non-trivial KDF 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 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 future TLS
versions or new TLS extensions introduced in the future may vary this computation.)</t>
<t> All ECDSA computations MUST be performed according to ANSI X9.62 or its successors. Data to be
signed/verified is hashed, and the result run directly through the ECDSA algorithm with no additional
hashing. The default hash function is SHA-1 <xref target="FIPS.180-2"/>, and sha_size (see
<xref target="ske"/> and <xref target="cert_verify"/>) is 20. However, an alternative hash function, such
as one of the new SHA hash functions specified in FIPS 180-2 <xref target="FIPS.180-2"/>, may be used instead.</t>
<t> RFC 4492 anticipated the standardization of a mechanism for specifying the required hash function in the certificate,
perhaps in the parameters field of the subjectPublicKeyInfo. Such standardization never took place, and as a result,
SHA-1 is used in TLS 1.1 and earlier. TLS 1.2 added a SignatureAndHashAlgorithm parameter to the DigitallySigned struct,
thus allowing agility in choosing the signature hash.</t>
<t> All RSA signatures must be generated and verified according to <xref target="PKCS1"/> block type 1.</t>
</section>
</section>
<section anchor="suites" title="Cipher Suites">
<t> The table below defines new ECC cipher suites that use the key exchange algorithms specified in <xref target="ecdh"/>.</t>
<texttable anchor="tbl5" title="TLS ECC cipher suites">
<ttcol align="left">CipherSuite</ttcol>
<ttcol align="left">Identifier</ttcol>
<c>TLS_ECDHE_ECDSA_WITH_NULL_SHA</c><c>{ 0xC0, 0x06 }</c>
<c>TLS_ECDHE_ECDSA_WITH_RC4_128_SHA</c><c>{ 0xC0, 0x07 }</c>
<c>TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA</c><c>{ 0xC0, 0x08 }</c>
<c>TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA</c><c>{ 0xC0, 0x09 }</c>
<c>TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA</c><c>{ 0xC0, 0x0A }</c>
<c> </c><c> </c>
<c>TLS_ECDHE_RSA_WITH_NULL_SHA</c><c>{ 0xC0, 0x10 }</c>
<c>TLS_ECDHE_RSA_WITH_RC4_128_SHA</c><c>{ 0xC0, 0x11 }</c>
<c>TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA</c><c>{ 0xC0, 0x12 }</c>
<c>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA</c><c>{ 0xC0, 0x13 }</c>
<c>TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA</c><c>{ 0xC0, 0x14 }</c>
<c> </c><c> </c>
<c>TLS_ECDH_anon_WITH_NULL_SHA</c><c>{ 0xC0, 0x15 }</c>
<c>TLS_ECDH_anon_WITH_RC4_128_SHA</c><c>{ 0xC0, 0x16 }</c>
<c>TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA</c><c>{ 0xC0, 0x17 }</c>
<c>TLS_ECDH_anon_WITH_AES_128_CBC_SHA</c><c>{ 0xC0, 0x18 }</c>
<c>TLS_ECDH_anon_WITH_AES_256_CBC_SHA</c><c>{ 0xC0, 0x19 }</c>
</texttable>
<t> The key exchange method, cipher, and hash algorithm for each of these cipher suites are easily determined
by examining the name. Ciphers (other than AES ciphers) and hash algorithms are defined in
<xref target="RFC2246"/> and <xref target="RFC4346"/>. AES ciphers are defined in <xref target="RFC5246"/>.</t>
<t> Server implementations SHOULD support all of the following cipher suites, and client implementations
SHOULD support at least one of them:<list style="symbols">
<t> TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256</t>
<t> TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA</t>
<t> TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256</t>
<t> TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256</t></list></t>
</section>
<section anchor="sec" title="Security Considerations">
<t> Security issues are discussed throughout this memo.</t>
<t> For TLS handshakes using ECC cipher suites, the security considerations in appendices D of all three TLS
base documemts apply accordingly.</t>
<t> Security discussions specific to ECC can be found in <xref target="IEEE.P1363.1998"/> and
<xref target="ANSI.X9-62.2005"/>. One important issue that implementers and users must consider is elliptic
curve selection. Guidance on selecting an appropriate elliptic curve size is given in Table 1.</t>
<t> Beyond elliptic curve size, the main issue is elliptic curve structure. As a general principle, it is
more conservative to use elliptic curves with as little algebraic structure as possible. Thus, random curves
are more conservative than special curves such as Koblitz curves, and curves over F_p with p random are more
conservative than curves over F_p with p of a special form (and curves over F_p with p random might be
considered more conservative than curves over F_2^m as there is no choice between multiple fields of similar
size for characteristic 2). Note, however, that algebraic structure can also lead to implementation
efficiencies, and implementers and users may, therefore, need to balance conservatism against a need for
efficiency. Concrete attacks are known against only very few special classes of curves, such as supersingular
curves, and these classes are excluded from the ECC standards that this document references
<xref target="IEEE.P1363.1998"/>, <xref target="ANSI.X9-62.2005"/>.</t>
<t> Another issue is the potential for catastrophic failures when a single elliptic curve is widely used.
In this case, an attack on the elliptic curve might result in the compromise of a large number of keys.
Again, this concern may need to be balanced against efficiency and interoperability improvements associated
with widely-used curves. Substantial additional information on elliptic curve choice can be found in
<xref target="IEEE.P1363.1998"/>, <xref target="ANSI.X9-62.2005"/>, and <xref target="FIPS.186-4"/>.</t>
<t> All of the key exchange algorithms defined in this document provide forward secrecy. Some of the
deprecated key exchange algorithms do not.</t>
</section>
<section anchor="iana" title="IANA Considerations">
<t> <xref target="RFC4492" />, the predecessor of this document has already defined the IANA registries for
the following:<list style="symbols">
<t> NamedCurve <xref target="ch_extensions"/></t>
<t> ECPointFormat <xref target="ch_extensions"/></t>
<t> ECCurveType <xref target="ske"/></t></list></t>
<t> For each name space, this document defines the initial value assignments and defines a range of 256 values
(NamedCurve) or eight values (ECPointFormat and ECCurveType) reserved for Private Use. Any additional
assignments require IETF Consensus action.</t>
</section>
<section anchor="ack" title="Acknowledgements">
<t> Most of the text is this document is taken from <xref target="RFC4492"/>, the predecessor of this
document. The authors of that document were:<list style="symbols">
<t> Simon Blake-Wilson</t>
<t> Nelson Bolyard</t>
<t> Vipul Gupta</t>
<t> Chris Hawk</t>
<t> Bodo Moeller</t></list></t>
<t> In the predecessor document, the authors acknowledged the contributions of Bill Anderson and Tim Dierks.</t>
</section>
<section anchor="history" title="Version History for This Draft">
<t> NOTE TO RFC EDITOR: PLEASE REMOVE THIS SECTION</t>
<t> Changes from draft-ietf-tls-rfc4492bis-01 to draft-nir-tls-rfc4492bis-03:<list style="symbols">
<t> Removed unused curves.</t>
<t> Removed unused point formats (all but uncompressed)</t>
</list></t>
<t> Changes from draft-nir-tls-rfc4492bis-00 and draft-ietf-tls-rfc4492bis-00 to
draft-nir-tls-rfc4492bis-01:<list style="symbols">
<t> Merged errata</t>
<t> Removed ECDH_RSA and ECDH_ECDSA</t>
</list></t>
<t> Changes from RFC 4492 to draft-nir-tls-rfc4492bis-00:<list style="symbols">
<t> Added TLS 1.2 to references.</t>
<t> Moved RFC 4492 authors to acknowledgements.</t>
<t> Removed list of required reading for ECC.</t></list></t>
</section>
<!-- ====================================================================== -->
</middle>
<!-- ====================================================================== -->
<back>
<references title="Normative References">
<reference anchor='RFC2246'>
<front>
<title>The TLS Protocol Version 1.0</title>
<author initials='T.' surname='Dierks' fullname='Tim Dierks'/>
<author initials='C.' surname='Allen' fullname='Christopher Allen' />
<date year='1999' month='January' />
</front>
<seriesInfo name='RFC' value='2246' />
<format type='HTML' target='http://tools.ietf.org/html/rfc2246' />
</reference>
<reference anchor='RFC4346'>
<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.1</title>
<author initials='T.' surname='Dierks' fullname='T. Dierks' />
<author initials='E.' surname='Rescorla' fullname='E. Rescorla' />
<date year='2006' month='April' />
</front>
<seriesInfo name='RFC' value='4346' />
<format type='HTML' target='http://tools.ietf.org/html/rfc4346' />
</reference>
<reference anchor='RFC5246'>
<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.2</title>
<author initials='T.' surname='Dierks' fullname='T. Dierks' />
<author initials='E.' surname='Rescorla' fullname='E. Rescorla' />
<date year='2008' month='August' />
</front>
<seriesInfo name='RFC' value='5246' />
<format type='HTML' target='http://tools.ietf.org/html/rfc5246' />
</reference>
<reference anchor='SECG-SEC2'>
<front>
<title>Recommended Elliptic Curve Domain Parameters</title>
<author>
<organization>CECG</organization>
</author>
<date year='2000'/>
</front>
<seriesInfo name='SEC' value='2' />
<format type='PDF' target='http://www.secg.org/download/aid-784/sec2-v2.pdf' />
</reference>
<reference anchor='RFC4366'>
<front>
<title>Transport Layer Security (TLS) Extensions</title>
<author initials='S.' surname='Blake-Wilson' fullname='S. Blake-Wilson'>
<organization /></author>
<author initials='M.' surname='Nystrom' fullname='M. Nystrom'>
<organization /></author>
<author initials='D.' surname='Hopwood' fullname='D. Hopwood'>
<organization /></author>
<author initials='J.' surname='Mikkelsen' fullname='J. Mikkelsen'>
<organization /></author>
<author initials='T.' surname='Wright' fullname='T. Wright'>
<organization /></author>
<date year='2006' month='April' />
</front>
<seriesInfo name='RFC' value='4366' />
<format type='TXT' octets='66344' target='http://www.ietf.org/rfc/rfc4366.txt' />
</reference>
<reference anchor='RFC3279'>
<front>
<title>Algorithms and Identifiers for the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
<author initials='L.' surname='Bassham' fullname='L. Bassham'><organization /></author>
<author initials='W.' surname='Polk' fullname='W. Polk'><organization /></author>
<author initials='R.' surname='Housley' fullname='R. Housley'><organization /></author>
<date year='2002' month='April' />
</front>
<seriesInfo name='RFC' value='3279' />
<format type='TXT' target='http://www.ietf.org/rfc/rfc3279.txt' />
</reference>
<reference anchor="CCITT.X680">
<front>
<title>Abstract Syntax Notation One (ASN.1): Specification of basic notation</title>
<author>
<organization>International Telephone and Telegraph Consultative Committee</organization>
</author>
<date month="July" year="2002" />
</front>
<seriesInfo name="CCITT" value="Recommendation X.680" />
</reference>
<reference anchor="CCITT.X690">
<front>
<title>ASN.1 encoding rules: Specification of basic encoding Rules (BER), Canonical encoding rules (CER) and Distinguished encoding rules (DER)</title>
<author>
<organization>International Telephone and Telegraph Consultative Committee</organization>
</author>
<date month="July" year="2002" />
</front>
<seriesInfo name="CCITT" value="Recommendation X.690" />
</reference>
<reference anchor="FIPS.186-4" target="http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf">
<front>
<title>Digital Signature Standard</title>
<author>
<organization>National Institute of Standards and Technology</organization>
</author>
<date year="2013" />
</front>
<seriesInfo name="FIPS" value="PUB 186-4" />
</reference>
<reference anchor="ANSI.X9-62.2005">
<front>
<title>Public Key Cryptography for the Financial Services Industry, The Elliptic Curve Digital Signature Algorithm (ECDSA)</title>
<author>
<organization>American National Standards Institute</organization>
</author>
<date year="2005" />
</front>
<seriesInfo name="ANSI" value="X9.62" />
</reference>
<reference anchor='RFC2119'>
<front>
<title abbrev='RFC Key Words'>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='Scott Bradner'>
<organization>Harvard University</organization>
<address>
<postal>
<street>1350 Mass. Ave.</street>
<street>Cambridge</street>
<street>MA 02138</street>
</postal>
<phone>- +1 617 495 3864</phone>
<email>sob@harvard.edu</email>
</address>
</author>
<date year='1997' month='March' />
<area>General</area>
<keyword>keyword</keyword>
</front>
<seriesInfo name='BCP' value='14' />
<seriesInfo name='RFC' value='2119' />
<format type='TXT' target='ftp://ftp.isi.edu/in-notes/rfc2119.txt' />
<format type='HTML' octets='16553' target='http://xml.resource.org/public/rfc/html/rfc2119.html' />
<format type='XML' octets='5703' target='http://xml.resource.org/public/rfc/xml/rfc2119.xml' />
</reference>
<reference anchor="PKCS1">
<front>
<title>RSA Encryption Standard, Version 1.5</title>
<author>
<organization>RSA Laboratories</organization>
</author>
<date month="November" year="1993" />
</front>
<seriesInfo name="PKCS" value="1" />
</reference>
</references>
<references title="Informative References">
<reference anchor='I-D.ietf-tls-tls13'>
<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
<author initials='T' surname='Dierks' fullname='Tim Dierks' />
<author initials='E' surname='Rescorla' fullname='Eric Rescorla' />
<date month='July' day='8' year='2014' />
</front>
<seriesInfo name='Internet-Draft' value='draft-ietf-tls-tls13-02' />
<format type='HTML' target='http://tools.ietf.org/html/draft-ietf-tls-tls13-02' />
</reference>
<reference anchor="IEEE.P1363.1998">
<front>
<title>Standard Specifications for Public Key Cryptography</title>
<author>
<organization>Institute of Electrical and Electronics Engineers</organization>
</author>
<date month="" year="1998" />
</front>
<seriesInfo name="IEEE" value="Draft P1363" />
</reference>
<reference anchor='RFC4492'>
<front>
<title>Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS)</title>
<author initials='S.' surname='Blake-Wilson' fullname='S. Blake-Wilson' />
<author initials='N.' surname='Bolyard' fullname='N. Bolyard' />
<author initials='V.' surname='Gupta' fullname='V. Gupta' />
<author initials='C.' surname='Hawk' fullname='C. Hawk' />
<author initials='B.' surname='Moeller' fullname='B. Moeller' />
<date year='2006' month='May' />
</front>
<seriesInfo name='RFC' value='4492' />
<format type='HTML' target='http://tools.ietf.org/html/rfc4492' />
</reference>
<reference anchor="Lenstra_Verheul">
<front>
<title>Selecting Cryptographic Key Sizes</title>
<author initials="A." surname="Lenstra" fullname="Arjen Klaas Lenstra"/>
<author initials="E." surname="Verheul" fullname="Eric Verheul"/>
<date year="2001"/>
</front>
<seriesInfo name="Journal of Cryptology" value="14 (2001) 255-293"/>
<format type='PDF' target='http://www.cs.ru.nl/E.Verheul/papers/Joc2001/joc2001.pdf' />
</reference>
<reference anchor="FIPS.180-2" target="http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf">
<front>
<title>Secure Hash Standard</title>
<author>
<organization>National Institute of Standards and Technology</organization>
</author>
<date month="August" year="2002" />
</front>
<seriesInfo name="FIPS" value="PUB 180-2" />
</reference>
</references>
<!-- ====================================================================== -->
<section anchor="equiv" title="Equivalent Curves (Informative)">
<t> All of the NIST curves <xref target="FIPS.186-4"/> and several of the ANSI curves <xref target="ANSI.X9-62.2005"/> are equivalent to curves listed in <xref target="supp_ec_ext"/>. In the following table, multiple names in one row represent aliases for the same curve.</t>
<texttable anchor="tbl6" title="Equivalent curves defined by SECG, ANSI, and NIST">
<preamble>Curve names chosen by different standards organizations</preamble>
<ttcol align="left">SECG</ttcol>
<ttcol align="left">ANSI X9.62</ttcol>
<ttcol align="left">NIST</ttcol>
<c>sect163k1</c><c></c><c>NIST K-163</c>
<c>sect163r1</c><c></c><c></c>
<c>sect163r2</c><c></c><c>NIST B-163</c>
<c>sect193r1</c><c></c><c></c>
<c>sect193r2</c><c></c><c></c>
<c>sect233k1</c><c></c><c>NIST K-233</c>
<c>sect233r1</c><c></c><c>NIST B-233</c>
<c>sect239k1</c><c></c><c></c>
<c>sect283k1</c><c></c><c>NIST K-283</c>
<c>sect283r1</c><c></c><c>NIST B-283</c>
<c>sect409k1</c><c></c><c>NIST K-409</c>
<c>sect409r1</c><c></c><c>NIST B-409</c>
<c>sect571k1</c><c></c><c>NIST K-571</c>
<c>sect571r1</c><c></c><c>NIST B-571</c>
<c>secp160k1</c><c></c><c></c>
<c>secp160r1</c><c></c><c></c>
<c>secp160r2</c><c></c><c></c>
<c>secp192k1</c><c></c><c></c>
<c>secp192r1</c><c>prime192v1</c><c>NIST P-192</c>
<c>secp224k1</c><c></c><c></c>
<c>secp224r1</c><c></c><c>NIST P-224</c>
<c>secp256k1</c><c></c><c></c>
<c>secp256r1</c><c>prime256v1</c><c>NIST P-256</c>
<c>secp384r1</c><c></c><c>NIST P-384</c>
<c>secp521r1</c><c></c><c>NIST P-521</c>
</texttable>
</section>
<section anchor="rfc4492diff" title="Differences from RFC 4492">
<t><list style="symbols">
<t> Added TLS 1.2</t>
<t> Merged Errata</t>
<t> Removed the ECDH key exchange algorithms: ECDH_RSA and ECDH_ECDSA</t>
<t> Deprecated a bunch of ciphersuites:<list style="synmbols">
<t>TLS_ECDH_ECDSA_WITH_NULL_SHA</t>
<t>TLS_ECDH_ECDSA_WITH_RC4_128_SHA</t>
<t>TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA</t>
<t>TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA</t>
<t>TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA</t>
<t>TLS_ECDH_RSA_WITH_NULL_SHA</t>
<t>TLS_ECDH_RSA_WITH_RC4_128_SHA</t>
<t>TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA</t>
<t>TLS_ECDH_RSA_WITH_AES_128_CBC_SHA</t>
<t>TLS_ECDH_RSA_WITH_AES_256_CBC_SHA</t></list></t>
</list></t>
<t> Removed unused curves and all but the uncompressed point format.</t>
</section>
</back>
</rfc>
| PAFTECH AB 2003-2026 | 2026-04-24 03:32:54 |