danetool is being built even without libgnutls-dane.
[gnutls.git] / doc / protocol / draft-ietf-tls-ecc-09.txt
blob8efbae5f95caa28a09b86c43ee797611d678a087
3 TLS Working Group                                               V. Gupta
4 Internet-Draft                                                  Sun Labs
5 Expires: October 9, 2005                                 S. Blake-Wilson
6                                                                      BCI
7                                                               B. Moeller
8                                                    University of Calgary
9                                                                  C. Hawk
10                                                       Corriente Networks
11                                                               N. Bolyard
12                                                            April 7, 2005
15                        ECC Cipher Suites for TLS
16                       <draft-ietf-tls-ecc-09.txt>
18 Status of this Memo
20    This document is an Internet-Draft and is subject to all provisions
21    of Section 3 of RFC 3667.  By submitting this Internet-Draft, each
22    author represents that any applicable patent or other IPR claims of
23    which he or she is aware have been or will be disclosed, and any of
24    which he or she become aware will be disclosed, in accordance with
25    RFC 3668.
27    Internet-Drafts are working documents of the Internet Engineering
28    Task Force (IETF), its areas, and its working groups.  Note that
29    other groups may also distribute working documents as Internet-
30    Drafts.
32    Internet-Drafts are draft documents valid for a maximum of six months
33    and may be updated, replaced, or obsoleted by other documents at any
34    time.  It is inappropriate to use Internet-Drafts as reference
35    material or to cite them other than as "work in progress."
37    The list of current Internet-Drafts can be accessed at
38    http://www.ietf.org/ietf/1id-abstracts.txt.
40    The list of Internet-Draft Shadow Directories can be accessed at
41    http://www.ietf.org/shadow.html.
43    This Internet-Draft will expire on October 9, 2005.
45 Copyright Notice
47    Copyright (C) The Internet Society (2005).
49 Abstract
54 Gupta, et al.            Expires October 9, 2005                [Page 1]
56 Internet-Draft          ECC Cipher Suites for TLS             April 2005
59    This document describes new key exchange algorithms based on Elliptic
60    Curve Cryptography (ECC) for the TLS (Transport Layer Security)
61    protocol.  In particular, it specifies the use of Elliptic Curve
62    Diffie-Hellman (ECDH) key agreement in a TLS handshake and the use of
63    Elliptic Curve Digital Signature Algorithm (ECDSA) as a new
64    authentication mechanism.
66    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
67    "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
68    document are to be interpreted as described in RFC 2119 [1].
70    Please send comments on this document to the TLS mailing list.
72 Table of Contents
74    1.   Introduction . . . . . . . . . . . . . . . . . . . . . . . .   3
75    2.   Key Exchange Algorithms  . . . . . . . . . . . . . . . . . .   5
76      2.1  ECDH_ECDSA . . . . . . . . . . . . . . . . . . . . . . . .   7
77      2.2  ECDHE_ECDSA  . . . . . . . . . . . . . . . . . . . . . . .   7
78      2.3  ECDH_RSA . . . . . . . . . . . . . . . . . . . . . . . . .   7
79      2.4  ECDHE_RSA  . . . . . . . . . . . . . . . . . . . . . . . .   7
80      2.5  ECDH_anon  . . . . . . . . . . . . . . . . . . . . . . . .   8
81    3.   Client Authentication  . . . . . . . . . . . . . . . . . . .   9
82      3.1  ECDSA_sign . . . . . . . . . . . . . . . . . . . . . . . .   9
83      3.2  ECDSA_fixed_ECDH . . . . . . . . . . . . . . . . . . . . .  10
84      3.3  RSA_fixed_ECDH . . . . . . . . . . . . . . . . . . . . . .  10
85    4.   TLS Extensions for ECC . . . . . . . . . . . . . . . . . . .  11
86    5.   Data Structures and Computations . . . . . . . . . . . . . .  12
87      5.1  Client Hello Extensions  . . . . . . . . . . . . . . . . .  12
88      5.2  Server Hello Extension . . . . . . . . . . . . . . . . . .  15
89      5.3  Server Certificate . . . . . . . . . . . . . . . . . . . .  16
90      5.4  Server Key Exchange  . . . . . . . . . . . . . . . . . . .  18
91      5.5  Certificate Request  . . . . . . . . . . . . . . . . . . .  22
92      5.6  Client Certificate . . . . . . . . . . . . . . . . . . . .  23
93      5.7  Client Key Exchange  . . . . . . . . . . . . . . . . . . .  24
94      5.8  Certificate Verify . . . . . . . . . . . . . . . . . . . .  25
95      5.9  Elliptic Curve Certificates  . . . . . . . . . . . . . . .  26
96      5.10   ECDH, ECDSA and RSA Computations . . . . . . . . . . . .  26
97    6.   Cipher Suites  . . . . . . . . . . . . . . . . . . . . . . .  28
98    7.   Security Considerations  . . . . . . . . . . . . . . . . . .  30
99    8.   Acknowledgments  . . . . . . . . . . . . . . . . . . . . . .  31
100    9.   References . . . . . . . . . . . . . . . . . . . . . . . . .  32
101      9.1  Normative References . . . . . . . . . . . . . . . . . . .  32
102      9.2  Informative References . . . . . . . . . . . . . . . . . .  32
103         Authors' Addresses . . . . . . . . . . . . . . . . . . . . .  33
104         Intellectual Property and Copyright Statements . . . . . . .  35
110 Gupta, et al.            Expires October 9, 2005                [Page 2]
112 Internet-Draft          ECC Cipher Suites for TLS             April 2005
115 1.  Introduction
117    Elliptic Curve Cryptography (ECC) is emerging as an attractive
118    public-key cryptosystem for mobile/wireless environments.  Compared
119    to currently prevalent cryptosystems such as RSA, ECC offers
120    equivalent security with smaller key sizes.  This is illustrated in
121    the following table, based on [13], which gives approximate
122    comparable key sizes for symmetric- and asymmetric-key cryptosystems
123    based on the best-known algorithms for attacking them.
125                    Symmetric    |  ECC    |  DH/DSA/RSA
126                    -------------+---------+------------
127                       80        |  163    |  1024
128                      112        |  233    |  2048
129                      128        |  283    |  3072
130                      192        |  409    |  7680
131                      256        |  571    |  15360
133                   Table 1: Comparable key sizes (in bits)
136    Smaller key sizes result in power, bandwidth and computational
137    savings that make ECC especially attractive for constrained
138    environments.
140    This document describes additions to TLS to support ECC.  In
141    particular, it defines
143    o  the use of the Elliptic Curve Diffie-Hellman (ECDH) key agreement
144       scheme with long-term or ephemeral keys to establish the TLS
145       premaster secret, and
147    o  the use of fixed-ECDH certificates and ECDSA for authentication of
148       TLS peers.
150    The remainder of this document is organized as follows.  Section 2
151    provides an overview of ECC-based key exchange algorithms for TLS.
152    Section 3 describes the use of ECC certificates for client
153    authentication.  TLS extensions that allow a client to negotiate the
154    use of specific curves and point formats are presented in Section 4.
155    Section 5 specifies various data structures needed for an ECC-based
156    handshake, their encoding in TLS messages and the processing of those
157    messages.  Section 6 defines new ECC-based cipher suites and
158    identifies a small subset of these as recommended for all
159    implementations of this specification.  Section 7 and Section 8
160    mention security considerations and acknowledgments, respectively.
161    This is followed by a list of references cited in this document, the
162    authors' contact information, and statements on intellectual property
166 Gupta, et al.            Expires October 9, 2005                [Page 3]
168 Internet-Draft          ECC Cipher Suites for TLS             April 2005
171    rights and copyrights.
173    Implementation of this specification requires familiarity with TLS
174    [2], TLS extensions [3] and ECC [4][5][6][8].
222 Gupta, et al.            Expires October 9, 2005                [Page 4]
224 Internet-Draft          ECC Cipher Suites for TLS             April 2005
227 2.  Key Exchange Algorithms
229    This document introduces five new ECC-based key exchange algorithms
230    for TLS.  All of them use ECDH to compute the TLS premaster secret
231    and differ only in the lifetime of ECDH keys (long-term or ephemeral)
232    and the mechanism (if any) used to authenticate them.  The derivation
233    of the TLS master secret from the premaster secret and the subsequent
234    generation of bulk encryption/MAC keys and initialization vectors is
235    independent of the key exchange algorithm and not impacted by the
236    introduction of ECC.
238    The table below summarizes the new key exchange algorithms which
239    mimic DH_DSS, DHE_DSS, DH_RSA, DHE_RSA, and DH_anon (see [2]),
240    respectively.
242           Key
243           Exchange
244           Algorithm           Description
245           ---------           -----------
247           ECDH_ECDSA          Fixed ECDH with ECDSA-signed certificates.
249           ECDHE_ECDSA         Ephemeral ECDH with ECDSA signatures.
251           ECDH_RSA            Fixed ECDH with RSA-signed certificates.
253           ECDHE_RSA           Ephemeral ECDH with RSA signatures.
255           ECDH_anon           Anonymous ECDH, no signatures.
257                      Table 2: ECC key exchange algorithms
260    The ECDHE_ECDSA and ECDHE_RSA key exchange mechanisms provide forward
261    secrecy.  With ECDHE_RSA, a server can reuse its existing RSA
262    certificate and easily comply with a constrained client's elliptic
263    curve preferences (see Section 4).  However, the computational cost
264    incurred by a server is higher for ECDHE_RSA than for the traditional
265    RSA key exchange which does not provide forward secrecy.
267    The ECDH_RSA mechanism requires a server to acquire an ECC
268    certificate but the certificate issuer can still use an existing RSA
269    key for signing.  This eliminates the need to update the trusted key
270    store in TLS clients.  The ECDH_ECDSA mechanism requires ECC keys for
271    the server as well as the certification authority and is best suited
272    for constrained devices unable to support RSA.
274    The anonymous key exchange algorithm does not provide authentication
278 Gupta, et al.            Expires October 9, 2005                [Page 5]
280 Internet-Draft          ECC Cipher Suites for TLS             April 2005
283    of the server or the client.  Like other anonymous TLS key exchanges,
284    it is subject to man-in-the-middle attacks.  Implementations of this
285    algorithm SHOULD provide authentication by other means.
287    Note that there is no structural difference between ECDH and ECDSA
288    keys.  A certificate issuer may use X509.v3 keyUsage and
289    extendedKeyUsage extensions to restrict the use of an ECC public key
290    to certain computations.  This document refers to an ECC key as ECDH-
291    capable if its use in ECDH is permitted.  ECDSA-capable is defined
292    similarly.
295               Client                                        Server
296               ------                                        ------
298               ClientHello          -------->
299                                                        ServerHello
300                                                       Certificate*
301                                                 ServerKeyExchange*
302                                               CertificateRequest*+
303                                    <--------       ServerHelloDone
304               Certificate*+
305               ClientKeyExchange
306               CertificateVerify*+
307               [ChangeCipherSpec]
308               Finished             -------->
309                                                 [ChangeCipherSpec]
310                                    <--------              Finished
312               Application Data     <------->      Application Data
315                    * message is not sent under some conditions
316                    + message is not sent unless client authentication
317                      is desired
319                  Figure 1: Message flow in a full TLS handshake
322    Figure 1 shows all messages involved in the TLS key establishment
323    protocol (aka full handshake).  The addition of ECC has direct impact
324    only on the ClientHello, the ServerHello, the server's Certificate
325    message, the ServerKeyExchange, the ClientKeyExchange, the
326    CertificateRequest, the client's Certificate message, and the
327    CertificateVerify.  Next, we describe each ECC key exchange algorithm
328    in greater detail in terms of the content and processing of these
329    messages.  For ease of exposition, we defer discussion of client
330    authentication and associated messages (identified with a + in
334 Gupta, et al.            Expires October 9, 2005                [Page 6]
336 Internet-Draft          ECC Cipher Suites for TLS             April 2005
339    Figure 1) until Section 3 and of the optional ECC-specific extensions
340    (which impact the Hello messages) until Section 4.
342 2.1  ECDH_ECDSA
344    In ECDH_ECDSA, the server's certificate MUST contain an ECDH-capable
345    public key and be signed with ECDSA.
347    A ServerKeyExchange MUST NOT be sent (the server's certificate
348    contains all the necessary keying information required by the client
349    to arrive at the premaster secret).
351    The client MUST generate an ECDH key pair on the same curve as the
352    server's long-term public key and send its public key in the
353    ClientKeyExchange message (except when using client authentication
354    algorithm ECDSA_fixed_ECDH or RSA_fixed_ECDH, in which case the
355    modifications from section Section 3.2 or Section 3.3 apply).
357    Both client and server MUST perform an ECDH operation and use the
358    resultant shared secret as the premaster secret.  All ECDH
359    calculations are performed as specified in Section 5.10
361 2.2  ECDHE_ECDSA
363    In ECDHE_ECDSA, the server's certificate MUST contain an ECDSA-
364    capable public key and be signed with ECDSA.
366    The server MUST send its ephemeral ECDH public key and a
367    specification of the corresponding curve in the ServerKeyExchange
368    message.  These parameters MUST be signed with ECDSA using the
369    private key corresponding to the public key in the server's
370    Certificate.
372    The client MUST generate an ECDH key pair on the same curve as the
373    server's ephemeral ECDH key and send its public key in the
374    ClientKeyExchange message.
376    Both client and server MUST perform an ECDH operation (Section 5.10)
377    and use the resultant shared secret as the premaster secret.
379 2.3  ECDH_RSA
381    This key exchange algorithm is the same as ECDH_ECDSA except the
382    server's certificate MUST be signed with RSA rather than ECDSA.
384 2.4  ECDHE_RSA
386    This key exchange algorithm is the same as ECDHE_ECDSA except the
390 Gupta, et al.            Expires October 9, 2005                [Page 7]
392 Internet-Draft          ECC Cipher Suites for TLS             April 2005
395    server's certificate MUST contain an RSA public key authorized for
396    signing and the signature in the ServerKeyExchange message MUST be
397    computed with the corresponding RSA private key.  The server
398    certificate MUST be signed with RSA.
400 2.5  ECDH_anon
402    In ECDH_anon, the server's Certificate, the CertificateRequest, the
403    client's Certificate, and the CertificateVerify messages MUST NOT be
404    sent.
406    The server MUST send an ephemeral ECDH public key and a specification
407    of the corresponding curve in the ServerKeyExchange message.  These
408    parameters MUST NOT be signed.
410    The client MUST generate an ECDH key pair on the same curve as the
411    server's ephemeral ECDH key and send its public key in the
412    ClientKeyExchange message.
414    Both client and server MUST perform an ECDH operation and use the
415    resultant shared secret as the premaster secret.  All ECDH
416    calculations are performed as specified in Section 5.10
446 Gupta, et al.            Expires October 9, 2005                [Page 8]
448 Internet-Draft          ECC Cipher Suites for TLS             April 2005
451 3.  Client Authentication
453    This document defines three new client authentication mechanisms
454    named after the type of client certificate involved: ECDSA_sign,
455    ECDSA_fixed_ECDH and RSA_fixed_ECDH.  The ECDSA_sign mechanism is
456    usable with any of the non-anonymous ECC key exchange algorithms
457    described in Section 2 as well as other non-anonymous (non-ECC) key
458    exchange algorithms defined in TLS [2].  The ECDSA_fixed_ECDH and
459    RSA_fixed_ECDH mechanisms are usable with ECDH_ECDSA and ECDH_RSA.
460    Their use with ECDHE_ECDSA and ECDHE_RSA is prohibited because the
461    use of a long-term ECDH client key would jeopardize the forward
462    secrecy property of these algorithms.
464    The server can request ECC-based client authentication by including
465    one or more of these certificate types in its CertificateRequest
466    message.  The server MUST NOT include any certificate types that are
467    prohibited for the negotiated key exchange algorithm.  The client
468    must check if it possesses a certificate appropriate for any of the
469    methods suggested by the server and is willing to use it for
470    authentication.
472    If these conditions are not met, the client should send a client
473    Certificate message containing no certificates.  In this case, the
474    ClientKeyExchange should be sent as described in Section 2 and the
475    CertificateVerify should not be sent.  If the server requires client
476    authentication, it may respond with a fatal handshake failure alert.
478    If the client has an appropriate certificate and is willing to use it
479    for authentication, it MUST send that certificate in the client's
480    Certificate message (as per Section 5.6) and prove possession of the
481    private key corresponding to the certified key.  The process of
482    determining an appropriate certificate and proving possession is
483    different for each authentication mechanism and described below.
485    NOTE: It is permissible for a server to request (and the client to
486    send) a client certificate of a different type than the server
487    certificate.
489 3.1  ECDSA_sign
491    To use this authentication mechanism, the client MUST possess a
492    certificate containing an ECDSA-capable public key and signed with
493    ECDSA.
495    The client MUST prove possession of the private key corresponding to
496    the certified key by including a signature in the CertificateVerify
497    message as described in Section 5.8.
502 Gupta, et al.            Expires October 9, 2005                [Page 9]
504 Internet-Draft          ECC Cipher Suites for TLS             April 2005
507 3.2  ECDSA_fixed_ECDH
509    To use this authentication mechanism, the client MUST possess a
510    certificate containing an ECDH-capable public key and that
511    certificate MUST be signed with ECDSA.  Furthermore, the client's
512    ECDH key MUST be on the same elliptic curve as the server's long-term
513    (certified) ECDH key.  This might limit use of this mechanism to
514    closed environments.  In situations where the client has an ECC key
515    on a different curve, it would have to authenticate either using
516    ECDSA_sign or a non-ECC mechanism (e.g.  RSA).  Using fixed ECDH for
517    both servers and clients is computationally more efficient than
518    mechanisms providing forward secrecy.
520    When using this authentication mechanism, the client MUST send an
521    empty ClientKeyExchange as described in Section 5.7 and MUST NOT send
522    the CertificateVerify message.  The ClientKeyExchange is empty since
523    the client's ECDH public key required by the server to compute the
524    premaster secret is available inside the client's certificate.  The
525    client's ability to arrive at the same premaster secret as the server
526    (demonstrated by a successful exchange of Finished messages) proves
527    possession of the private key corresponding to the certified public
528    key and the CertificateVerify message is unnecessary.
530 3.3  RSA_fixed_ECDH
532    This authentication mechanism is identical to ECDSA_fixed_ECDH except
533    the client's certificate MUST be signed with RSA.
558 Gupta, et al.            Expires October 9, 2005               [Page 10]
560 Internet-Draft          ECC Cipher Suites for TLS             April 2005
563 4.  TLS Extensions for ECC
565    Two new TLS extensions are defined in this specification: (i) the
566    Supported Elliptic Curves Extension, and (ii) the Supported Point
567    Formats Extension.  These allow negotiating the use of specific
568    curves and point formats (e.g. compressed vs. uncompressed),
569    respectively, during a handshake starting a new session.  These
570    extensions are especially relevant for constrained clients that may
571    only support a limited number of curves or point formats.  They
572    follow the general approach outlined in [3]; message details are
573    specified in Section 5.  The client enumerates the curves it supports
574    and the point formats it can parse by including the appropriate
575    extensions in its ClientHello message.  The server similarly
576    enumerates the point formats it can parse by including an extension
577    in its ServerHello message.
579    A TLS client that proposes ECC cipher suites in its ClientHello
580    message SHOULD include these extensions.  Servers implementing ECC
581    cipher suites MUST support these extensions, and when a client uses
582    these extensions, servers MUST NOT negotiate the use of an ECC cipher
583    suite unless they can complete the handshake while respecting the
584    choice of curves and compression techniques specified by the client.
585    This eliminates the possibility that a negotiated ECC handshake will
586    be subsequently aborted due to a client's inability to deal with the
587    server's EC key.
589    These extensions MUST NOT be included if the client does not propose
590    any ECC cipher suites.  A client that proposes ECC cipher suites may
591    choose not to include these extension.  In this case, the server is
592    free to choose any one of the elliptic curves or point formats listed
593    in Section 5.  That section also describes the structure and
594    processing of these extensions in greater detail.
596    In the case of session resumption, the server simply ignores the
597    Supported Elliptic Curves Extension and the Supported Point Formats
598    Extension as appearing in the current ClientHello message.  These
599    extensions only play a role during handshakes negotiating a new
600    session.
614 Gupta, et al.            Expires October 9, 2005               [Page 11]
616 Internet-Draft          ECC Cipher Suites for TLS             April 2005
619 5.  Data Structures and Computations
621    This section specifies the data structures and computations used by
622    ECC-based key mechanisms specified in Section 2, Section 3 and
623    Section 4.  The presentation language used here is the same as that
624    used in TLS [2].  Since this specification extends TLS, these
625    descriptions should be merged with those in the TLS specification and
626    any others that extend TLS.  This means that enum types may not
627    specify all possible values and structures with multiple formats
628    chosen with a select() clause may not indicate all possible cases.
630 5.1  Client Hello Extensions
632    This section specifies two TLS extensions that can be included with
633    the ClientHello message as described in [3], the Supported Elliptic
634    Curves Extension and the Supported Point Formats Extension.
636    When these extensions are sent:
638    The extensions SHOULD be sent along with any ClientHello message that
639    proposes ECC cipher suites.
641    Meaning of these extensions:
643    These extensions allow a client to enumerate the elliptic curves it
644    supports and/or the point formats it can parse.
646    Structure of these extensions:
648    The general structure of TLS extensions is described in [3] and this
649    specification adds two new types to ExtensionType.
652        enum { elliptic_curves(??), ec_point_formats(??) } ExtensionType;
654    [[ EDITOR: The values used for elliptic_curves and ec_point_formats
655    have been left as ??.  These values will be assigned when this draft
656    progresses to RFC.  (The examples below will have to be changed
657    accordingly.) ]]
659    elliptic_curves (Supported Elliptic Curves Extension):  Indicates the
660       set of elliptic curves supported by the client.  For this
661       extension, the opaque extension_data field contains
662       EllipticCurveList.
670 Gupta, et al.            Expires October 9, 2005               [Page 12]
672 Internet-Draft          ECC Cipher Suites for TLS             April 2005
675    ec_point_formats (Supported Point Formats Extension):  Indicates the
676       set of point formats that the client can parse.  For this
677       extension, the opaque extension_data field contains
678       ECPointFormatList.
681         enum {
682             sect163k1 (1), sect163r1 (2), sect163r2 (3),
683             sect193r1 (4), sect193r2 (5), sect233k1 (6),
684             sect233r1 (7), sect239k1 (8), sect283k1 (9),
685             sect283r1 (10), sect409k1 (11), sect409r1 (12),
686             sect571k1 (13), sect571r1 (14), secp160k1 (15),
687             secp160r1 (16), secp160r2 (17), secp192k1 (18),
688             secp192r1 (19), secp224k1 (20), secp224r1 (21),
689             secp256k1 (22), secp256r1 (23), secp384r1 (24),
690             secp521r1 (25), reserved (240..247),
691             arbitrary_explicit_prime_curves(253),
692             arbitrary_explicit_char2_curves(254),
693             (255)
694         } NamedCurve;
696    sect163k1, etc:  Indicates support of the corresponding named curve
697       specified in SEC 2 [10].  Note that many of these curves are also
698       recommended in ANSI X9.62 [6], and FIPS 186-2 [8].  Values 240
699       through 247 are reserved for private use.  Values 253 and 254
700       indicate that the client supports arbitrary prime and
701       characteristic-2 curves, respectively (the curve parameters must
702       be encoded explicitly in ECParameters).
705         struct {
706             NamedCurve elliptic_curve_list<1..2^8-1>
707         } EllipticCurveList;
710    Items in elliptic_curve_list are ordered according to the client's
711    preferences (favorite choice first).
713    As an example, a client that only supports secp192r1 (aka NIST P-192;
714    value 19 = 0x13) and secp224r1 (aka NIST P-224; value 21 = 0x15) and
715    prefers to use secp192r1 would include a TLS extension consisting of
716    the following octets:
718         00 ?? 00 03 02 13 15
720    A client that supports arbitrary explicit characteristic-2 curves
721    (value 254 = 0xFE) would include an extension consisting of the
722    following octets:
726 Gupta, et al.            Expires October 9, 2005               [Page 13]
728 Internet-Draft          ECC Cipher Suites for TLS             April 2005
731         00 ?? 00 02 01 FE
734         enum { uncompressed (0), ansiX962_compressed (1),
735                ansiX962_hybrid (2), reserved (3 .. 255)
736         } ECPointFormat;
738         struct {
739             ECPointFormat ec_point_format_list<1..2^8-1>
740         } ECPointFormatList;
742    Three point formats are included in the definition of ECPointFormat
743    above.  The uncompressed point format is the default format in that
744    implementations of this document MUST support it.  The
745    ansiX962_compressed format reduces bandwidth by including only the
746    x-coordinate and a single bit of the y-coordinate of the point.  The
747    ansiX962_hybrid format includes both the full y-coordinate and the
748    compressed y-coordinate to allow flexibility and improve efficiency
749    in some cases.  Implementations of this document MAY support the
750    ansiX962_compressed and ansiX962_hybrid point formats.  (These three
751    formats are described in [6].)  Values 248 through 255 are reserved
752    for private use.
754    Items in ec_point_format_list are ordered according to the client's
755    preferences (favorite choice first).
757    A client that can parse only the uncompressed point format includes
758    an extension consisting of the following octets:
760         00 ?? 00 02 01 00
762    A client that prefers the use of the ansiX962_compressed format over
763    uncompressed may indicate that preference by including an extension
764    consisting of the following octets:
766         00 ?? 00 03 02 01 00
768    Actions of the sender:
770    A client that proposes ECC cipher suites in its ClientHello message
771    appends these extensions (along with any others), enumerating the
772    curves it supports and the point formats it can parse.  Clients
773    SHOULD send both the Supported Elliptic Curves Extension and the
774    Supported Point Formats Extension.  If the Supported Point Formats
775    Extension is indeed sent, it MUST contain the value 0 (uncompressed)
776    as one of the items in the list of point formats.
778    Actions of the receiver:
782 Gupta, et al.            Expires October 9, 2005               [Page 14]
784 Internet-Draft          ECC Cipher Suites for TLS             April 2005
787    A server that receives a ClientHello containing one or both of these
788    extensions MUST use the client's enumerated capabilities to guide its
789    selection of an appropriate cipher suite.  One of the proposed ECC
790    cipher suites must be negotiated only if the server can successfully
791    complete the handshake while using the curves and point formats
792    supported by the client (cf. Section 5.3 and Section 5.4).
794    NOTE: A server participating in an ECDHE-ECDSA key exchange may use
795    different curves for (i) the ECDSA key in its certificate, and (ii)
796    the ephemeral ECDH key in the ServerKeyExchange message.  The server
797    must consider the "elliptic_curves" extension in selecting both of
798    these curves.
800    If a server does not understand the "elliptic_curves" extension or is
801    unable to complete the ECC handshake while restricting itself to the
802    enumerated curves, it MUST NOT negotiate the use of an ECC cipher
803    suite.  Depending on what other cipher suites are proposed by the
804    client and supported by the server, this may result in a fatal
805    handshake failure alert due to the lack of common cipher suites.
807 5.2  Server Hello Extension
809    This section specifies a TLS extension that can be included with the
810    ServerHello message as described in [3], the Supported Point Formats
811    Extension.
813    When this extension is sent:
815    The Supported Point Formats Extension is included in a ServerHello
816    message in response to a ClientHello message containing the Supported
817    Point Formats Extension when negotiating an ECC cipher suite.
819    Meaning of this extensions:
821    This extension allows a server to enumerate the point formats it can
822    parse (for the curve that will appear in its ServerKeyExchange
823    message when using the ECDHE_ECDSA, ECDHE_RSA, or ECDH_anon key
824    exchange algorithm, or for the curve that is used in the server's
825    public key that will appear in its Certificate message when using the
826    ECDH_ECDSA or ECDH_RSA key exchange algorithm).
828    Structure of this extension:
830    The server's Supported Point Formats Extension has the same structure
831    as the client's Supported Point Formats Extension.  Items in
832    elliptic_curve_list here are ordered according to the server's
833    preference (favorite choice first).  Note that the server may include
834    items that were not found in the client's list (e.g., the server may
838 Gupta, et al.            Expires October 9, 2005               [Page 15]
840 Internet-Draft          ECC Cipher Suites for TLS             April 2005
843    prefer to receive points in compressed format even when a client
844    cannot parse this format: the same client may nevertheless be capable
845    to output points in compressed format).
847    Actions of the sender:
849    A server that selects an ECC cipher suite in response to a
850    ClientHello message including a Supported Point Formats Extension
851    appends this extension (along with others) to its ServerHello
852    message, enumerating the point formats it can parse.  The Supported
853    Point Formats Extension, when used, MUST contain the value 0
854    (uncompressed) as one of the items in the list of point formats.
856    Actions of the receiver:
858    A client that receives a ServerHello message containing a Supported
859    Point Formats Extension MUST respect the server's choice of point
860    formats during the handshake (cf. Section 5.6 and Section 5.7).  If
861    no Supported Point Formats Extension is received with the
862    ServerHello, this is equivalent to an extension allowing only the
863    uncompressed point format.
865 5.3  Server Certificate
867    When this message is sent:
869    This message is sent in all non-anonymous ECC-based key exchange
870    algorithms.
872    Meaning of this message:
874    This message is used to authentically convey the server's static
875    public key to the client.  The following table shows the server
876    certificate type appropriate for each key exchange algorithm.  ECC
877    public keys must be encoded in certificates as described in
878    Section 5.9.
880    NOTE: The server's Certificate message is capable of carrying a chain
881    of certificates.  The restrictions mentioned in Table 3 apply only to
882    the server's certificate (first in the chain).
894 Gupta, et al.            Expires October 9, 2005               [Page 16]
896 Internet-Draft          ECC Cipher Suites for TLS             April 2005
899           Key Exchange Algorithm  Server Certificate Type
900           ----------------------  -----------------------
902           ECDH_ECDSA              Certificate must contain an
903                                   ECDH-capable public key. It
904                                   must be signed with ECDSA.
906           ECDHE_ECDSA             Certificate must contain an
907                                   ECDSA-capable public key. It
908                                   must be signed with ECDSA.
910           ECDH_RSA                Certificate must contain an
911                                   ECDH-capable public key. It
912                                   must be signed with RSA.
914           ECDHE_RSA               Certificate must contain an
915                                   RSA public key authorized for
916                                   use in digital signatures. It
917                                   must be signed with RSA.
919                     Table 3: Server certificate types
922    Structure of this message:
924    Identical to the TLS Certificate format.
926    Actions of the sender:
928    The server constructs an appropriate certificate chain and conveys it
929    to the client in the Certificate message.  If the client has used a
930    Supported Elliptic Curves Extension, the public key in the server's
931    certificate MUST respect the client's choice of elliptic curves; in
932    particular, the public key MUST employ a named curve (not the same
933    curve as an explicit curve) unless the client has indicated support
934    for explicit curves of the appropriate type.  If the client has used
935    a Supported Point Formats Extension, both the server's public key
936    point and (in the case of an explicit curve) the curve's base point
937    MUST respect the client's choice of point formats.  (A server that
938    cannot satisfy these requirements must not choose an ECC cipher suite
939    in its ServerHello message.)
941    Actions of the receiver:
943    The client validates the certificate chain, extracts the server's
944    public key, and checks that the key type is appropriate for the
945    negotiated key exchange algorithm.
950 Gupta, et al.            Expires October 9, 2005               [Page 17]
952 Internet-Draft          ECC Cipher Suites for TLS             April 2005
955 5.4  Server Key Exchange
957    When this message is sent:
959    This message is sent when using the ECDHE_ECDSA, ECDHE_RSA and
960    ECDH_anon key exchange algorithms.
962    Meaning of this message:
964    This message is used to convey the server's ephemeral ECDH public key
965    (and the corresponding elliptic curve domain parameters) to the
966    client.
968    Structure of this message:
970         enum { explicit_prime (1), explicit_char2 (2),
971                named_curve (3), reserved(4 .. 255) } ECCurveType;
973    explicit_prime:  Indicates the elliptic curve domain parameters are
974       conveyed verbosely, and the underlying finite field is a prime
975       field.
977    explicit_char2:  Indicates the elliptic curve domain parameters are
978       conveyed verbosely, and the underlying finite field is a
979       characteristic-2 field.
981    named_curve:  Indicates that a named curve is used.  This option
982       SHOULD be used when applicable.
984    Values 248 through 255 are reserved for private use.
986         struct {
987             opaque a <1..2^8-1>;
988             opaque b <1..2^8-1>;
989         } ECCurve;
991    a, b:  These parameters specify the coefficients of the elliptic
992       curve.  Each value contains the byte string representation of a
993       field element following the conversion routine in Section 4.3.3 of
994       ANSI X9.62 [6].
997         struct {
998             opaque point <1..2^8-1>;
999         } ECPoint;
1006 Gupta, et al.            Expires October 9, 2005               [Page 18]
1008 Internet-Draft          ECC Cipher Suites for TLS             April 2005
1011    point:  This is the byte string representation of an elliptic curve
1012       point following the conversion routine in Section 4.3.6 of ANSI
1013       X9.62 [6].  This byte string may represent an elliptic curve point
1014       in uncompressed, hybrid, or compressed format; it MUST conform to
1015       what the client has requested through a Supported Point Formats
1016       Extension if this extension was used.
1019         enum { ec_basis_trinomial, ec_basis_pentanomial } ECBasisType;
1021    ec_basis_trinomial:  Indicates representation of a characteristic-2
1022       field using a trinomial basis.
1024    ec_basis_pentanomial:  Indicates representation of a characteristic-2
1025       field using a pentanomial basis.
1028         struct {
1029             ECCurveType    curve_type;
1030             select (curve_type) {
1031                 case explicit_prime:
1032                     opaque      prime_p <1..2^8-1>;
1033                     ECCurve     curve;
1034                     ECPoint     base;
1035                     opaque      order <1..2^8-1>;
1036                     opaque      cofactor <1..2^8-1>;
1037                 case explicit_char2:
1038                     uint16      m;
1039                     ECBasisType basis;
1040                     select (basis) {
1041                         case ec_trinomial:
1042                             opaque  k <1..2^8-1>;
1043                         case ec_pentanomial:
1044                             opaque  k1 <1..2^8-1>;
1045                             opaque  k2 <1..2^8-1>;
1046                             opaque  k3 <1..2^8-1>;
1047                     };
1048                     ECCurve     curve;
1049                     ECPoint     base;
1050                     opaque      order <1..2^8-1>;
1051                     opaque      cofactor <1..2^8-1>;
1052                 case named_curve:
1053                     NamedCurve namedcurve;
1054             };
1055         } ECParameters;
1062 Gupta, et al.            Expires October 9, 2005               [Page 19]
1064 Internet-Draft          ECC Cipher Suites for TLS             April 2005
1067    curve_type:  This identifies the type of the elliptic curve domain
1068       parameters.
1070    prime_p:  This is the odd prime defining the field Fp.
1072    curve:  Specifies the coefficients a and b of the elliptic curve E.
1074    base:  Specifies the base point G on the elliptic curve.
1076    order:  Specifies the order n of the base point.
1078    cofactor:  Specifies the cofactor h = #E(Fq)/n, where #E(Fq)
1079       represents the number of points on the elliptic curve E defined
1080       over the field Fq (either Fp or F2^m).
1082    m:  This is the degree of the characteristic-2 field F2^m.
1084    k:  The exponent k for the trinomial basis representation x^m + x^k
1085       +1.
1087    k1, k2, k3:  The exponents for the pentanomial representation x^m +
1088       x^k3 + x^k2 + x^k1 + 1 (such that k3 > k2 > k1).
1090    namedcurve:  Specifies a recommended set of elliptic curve domain
1091       parameters.  All enum values of NamedCurve are allowed except for
1092       arbitrary_explicit_prime_curves(253) and
1093       arbitrary_explicit_char2_curves(254).  These two values are only
1094       allowed in the ClientHello extension.
1097         struct {
1098             ECParameters    curve_params;
1099             ECPoint         public;
1100         } ServerECDHParams;
1102    curve_params:  Specifies the elliptic curve domain parameters
1103       associated with the ECDH public key.
1105    public:  The ephemeral ECDH public key.
1107    The ServerKeyExchange message is extended as follows.
1109         enum { ec_diffie_hellman } KeyExchangeAlgorithm;
1118 Gupta, et al.            Expires October 9, 2005               [Page 20]
1120 Internet-Draft          ECC Cipher Suites for TLS             April 2005
1123    ec_diffie_hellman:  Indicates the ServerKeyExchange message contains
1124       an ECDH public key.
1127         select (KeyExchangeAlgorithm) {
1128             case ec_diffie_hellman:
1129                 ServerECDHParams    params;
1130                 Signature           signed_params;
1131         } ServerKeyExchange;
1133    params:  Specifies the ECDH public key and associated domain
1134       parameters.
1136    signed_params:  A hash of the params, with the signature appropriate
1137       to that hash applied.  The private key corresponding to the
1138       certified public key in the server's Certificate message is used
1139       for signing.
1142           enum { ecdsa } SignatureAlgorithm;
1145           select (SignatureAlgorithm) {
1146               case ecdsa:
1147                   digitally-signed struct {
1148                       opaque sha_hash[sha_size];
1149                   };
1150           } Signature;
1152    NOTE: SignatureAlgorithm is "rsa" for the ECDHE_RSA key exchange
1153    algorithm and "anonymous" for ECDH_anon.  These cases are defined in
1154    TLS [2].  SignatureAlgorithm is "ecdsa" for ECDHE_ECDSA.  ECDSA
1155    signatures are generated and verified as described in Section 5.10.
1156    As per ANSI X9.62, an ECDSA signature consists of a pair of integers
1157    r and s.  These integers are both converted into byte strings of the
1158    same length as the curve order n using the conversion routine
1159    specified in Section 4.3.1 of [6].  The two byte strings are
1160    concatenated, and the result is placed in the signature field.
1162    Actions of the sender:
1164    The server selects elliptic curve domain parameters and an ephemeral
1165    ECDH public key corresponding to these parameters according to the
1166    ECKAS-DH1 scheme from IEEE 1363 [5].  It conveys this information to
1167    the client in the ServerKeyExchange message using the format defined
1168    above.
1170    Actions of the recipient:
1174 Gupta, et al.            Expires October 9, 2005               [Page 21]
1176 Internet-Draft          ECC Cipher Suites for TLS             April 2005
1179    The client verifies the signature (when present) and retrieves the
1180    server's elliptic curve domain parameters and ephemeral ECDH public
1181    key from the ServerKeyExchange message.
1183 5.5  Certificate Request
1185    When this message is sent:
1187    This message is sent when requesting client authentication.
1189    Meaning of this message:
1191    The server uses this message to suggest acceptable client
1192    authentication methods.
1194    Structure of this message:
1196    The TLS CertificateRequest message is extended as follows.
1198         enum {
1199             ecdsa_sign(??), rsa_fixed_ecdh(??),
1200             ecdsa_fixed_ecdh(??), (255)
1201         } ClientCertificateType;
1203    ecdsa_sign, etc Indicates that the server would like to use the
1204       corresponding client authentication method specified in Section 3.
1206       [[ EDITOR: The values used for ecdsa_sign, rsa_fixed_ecdh, and
1207       ecdsa_fixed_ecdh have been left as ??.  These values will be
1208       assigned when this draft progresses to RFC.  Earlier versions of
1209       this draft used the values 5, 6, and 7 - however these values have
1210       been removed since they are used differently by SSL 3.0 [14] and
1211       their use by TLS is being deprecated. ]]
1213    Actions of the sender:
1215    The server decides which client authentication methods it would like
1216    to use, and conveys this information to the client using the format
1217    defined above.
1219    Actions of the receiver:
1221    The client determines whether it has a suitable certificate for use
1222    with any of the requested methods, and decides whether or not to
1223    proceed with client authentication.
1230 Gupta, et al.            Expires October 9, 2005               [Page 22]
1232 Internet-Draft          ECC Cipher Suites for TLS             April 2005
1235 5.6  Client Certificate
1237    When this message is sent:
1239    This message is sent in response to a CertificateRequest when a
1240    client has a suitable certificate and has decided to proceed with
1241    client authentication.  (Note that if the server has used a Supported
1242    Point Formats Extension, a certificate can only be considered
1243    suitable for use with the ECDSA_sign, RSA_fixed_ECDH, and
1244    ECDSA_fixed_ECDH authentication methods if the public key point
1245    specified in it respects the server's choice of point formats.  If no
1246    Supported Point Formats Extension has been used, a certificate can
1247    only be considered suitable for use with these authentication methods
1248    if the point is represented in uncompressed point format.)
1250    Meaning of this message:
1252    This message is used to authentically convey the client's static
1253    public key to the server.  The following table summarizes what client
1254    certificate types are appropriate for the ECC-based client
1255    authentication mechanisms described in Section 3.  ECC public keys
1256    must be encoded in certificates as described in Section 5.9.
1258    NOTE: The client's Certificate message is capable of carrying a chain
1259    of certificates.  The restrictions mentioned in Table 4 apply only to
1260    the client's certificate (first in the chain).
1263           Client
1264           Authentication Method   Client Certificate Type
1265           ---------------------   -----------------------
1267           ECDSA_sign              Certificate must contain an
1268                                   ECDSA-capable public key and
1269                                   be signed with ECDSA.
1271           ECDSA_fixed_ECDH        Certificate must contain an
1272                                   ECDH-capable public key on the
1273                                   same elliptic curve as the server's
1274                                   long-term ECDH key. This certificate
1275                                   must be signed with ECDSA.
1277           RSA_fixed_ECDH          Certificate must contain an
1278                                   ECDH-capable public key on the
1279                                   same elliptic curve as the server's
1280                                   long-term ECDH key. This certificate
1281                                   must be signed with RSA.
1286 Gupta, et al.            Expires October 9, 2005               [Page 23]
1288 Internet-Draft          ECC Cipher Suites for TLS             April 2005
1291                      Table 4: Client certificate types
1294    Structure of this message:
1296    Identical to the TLS client Certificate format.
1298    Actions of the sender:
1300    The client constructs an appropriate certificate chain, and conveys
1301    it to the server in the Certificate message.
1303    Actions of the receiver:
1305    The TLS server validates the certificate chain, extracts the client's
1306    public key, and checks that the key type is appropriate for the
1307    client authentication method.
1309 5.7  Client Key Exchange
1311    When this message is sent:
1313    This message is sent in all key exchange algorithms.  If client
1314    authentication with ECDSA_fixed_ECDH or RSA_fixed_ECDH is used, this
1315    message is empty.  Otherwise, it contains the client's ephemeral ECDH
1316    public key.
1318    Meaning of the message:
1320    This message is used to convey ephemeral data relating to the key
1321    exchange belonging to the client (such as its ephemeral ECDH public
1322    key).
1324    Structure of this message:
1326    The TLS ClientKeyExchange message is extended as follows.
1328         enum { implicit, explicit } PublicValueEncoding;
1330    implicit, explicit:  For ECC cipher suites, this indicates whether
1331       the client's ECDH public key is in the client's certificate
1332       ("implicit") or is provided, as an ephemeral ECDH public key, in
1333       the ClientKeyExchange message ("explicit").  (This is "explicit"
1334       in ECC cipher suites except when the client uses the
1335       ECDSA_fixed_ECDH or RSA_fixed_ECDH client authentication
1336       mechanism.)
1342 Gupta, et al.            Expires October 9, 2005               [Page 24]
1344 Internet-Draft          ECC Cipher Suites for TLS             April 2005
1347         struct {
1348             select (PublicValueEncoding) {
1349                 case implicit: struct { };
1350                 case explicit: ECPoint ecdh_Yc;
1351             } ecdh_public;
1352         } ClientECDiffieHellmanPublic;
1354    ecdh_Yc:  Contains the client's ephemeral ECDH public key as a byte
1355       string ECPoint.point, which may represent an elliptic curve point
1356       in uncompressed, hybrid, or compressed format.  Here the format
1357       MUST conform to what the server has requested through a Supported
1358       Point Formats Extension if this extension was used, and MUST be
1359       uncompressed if this extension was not used.
1362         struct {
1363             select (KeyExchangeAlgorithm) {
1364                 case ec_diffie_hellman: ClientECDiffieHellmanPublic;
1365             } exchange_keys;
1366         } ClientKeyExchange;
1368    Actions of the sender:
1370    The client selects an ephemeral ECDH public key corresponding to the
1371    parameters it received from the server according to the ECKAS-DH1
1372    scheme from IEEE 1363 [5].  It conveys this information to the client
1373    in the ClientKeyExchange message using the format defined above.
1375    Actions of the recipient:
1377    The server retrieves the client's ephemeral ECDH public key from the
1378    ClientKeyExchange message and checks that it is on the same elliptic
1379    curve as the server's ECDH key.
1381 5.8  Certificate Verify
1383    When this message is sent:
1385    This message is sent when the client sends a client certificate
1386    containing a public key usable for digital signatures, e.g. when the
1387    client is authenticated using the ECDSA_sign mechanism.
1389    Meaning of the message:
1391    This message contains a signature that proves possession of the
1392    private key corresponding to the public key in the client's
1393    Certificate message.
1398 Gupta, et al.            Expires October 9, 2005               [Page 25]
1400 Internet-Draft          ECC Cipher Suites for TLS             April 2005
1403    Structure of this message:
1405    The TLS CertificateVerify message is extended as follows.
1407         enum { ecdsa } SignatureAlgorithm;
1409         select (SignatureAlgorithm) {
1410             case ecdsa:
1411                 digitally-signed struct {
1412                     opaque sha_hash[sha_size];
1413                 };
1414         } Signature;
1416    For the ecdsa case, the signature field in the CertificateVerify
1417    message contains an ECDSA signature computed over handshake messages
1418    exchanged so far.  ECDSA signatures are computed as described in
1419    Section 5.10.  As per ANSI X9.62, an ECDSA signature consists of a
1420    pair of integers r and s.  These integers are both converted into
1421    byte strings of the same length as the curve order n using the
1422    conversion routine specified in Section 4.3.1 of [6].  The two byte
1423    strings are concatenated, and the result is placed in the signature
1424    field.
1426    Actions of the sender:
1428    The client computes its signature over all handshake messages sent or
1429    received starting at client hello up to but not including this
1430    message.  It uses the private key corresponding to its certified
1431    public key to compute the signature which is conveyed in the format
1432    defined above.
1434    Actions of the receiver:
1436    The server extracts the client's signature from the CertificateVerify
1437    message, and verifies the signature using the public key it received
1438    in the client's Certificate message.
1440 5.9  Elliptic Curve Certificates
1442    X509 certificates containing ECC public keys or signed using ECDSA
1443    MUST comply with [11] or another RFC that replaces or extends it.
1444    Clients SHOULD use the elliptic curve domain parameters recommended
1445    in ANSI X9.62 [6], FIPS 186-2 [8], and SEC 2 [10].
1447 5.10  ECDH, ECDSA and RSA Computations
1449    All ECDH calculations (including parameter and key generation as well
1450    as the shared secret calculation) MUST be performed according to [5]
1454 Gupta, et al.            Expires October 9, 2005               [Page 26]
1456 Internet-Draft          ECC Cipher Suites for TLS             April 2005
1459    using the ECKAS-DH1 scheme with the identity map as key derivation
1460    function, so that the premaster secret is the x-coordinate of the
1461    ECDH shared secret elliptic curve point, i.e. the octet string Z in
1462    IEEE 1363 terminology.
1464    Note that a new extension may be introduced in the future to allow
1465    the use of a different KDF during computation of the premaster
1466    secret.  In this event, the new KDF would be used in place of the
1467    process detailed above.  This may be desirable, for example, to
1468    support compatibility with the planned NIST key agreement standard.
1470    All ECDSA computations MUST be performed according to ANSI X9.62 [6]
1471    or its successors.  Data to be signed/verified is hashed and the
1472    result run directly through the ECDSA algorithm with no additional
1473    hashing.  The default hash function is SHA-1 [7] and sha_size (see
1474    Section 5.4 and Section 5.8) is 20.  However, an alternative hash
1475    function, such as one of the new SHA hash functions specified in FIPS
1476    180-2 [7], may be used instead if the certificate containing the EC
1477    public key explicitly requires use of another hash function.  (The
1478    mechanism for specifying the required hash function has not been
1479    standardized but this provision anticipates such standardization and
1480    obviates the need to update this document in response.  Future PKIX
1481    RFCs may choose, for example, to specify the hash function to be used
1482    with a public key in the parameters field of subjectPublicKeyInfo.)
1484    All RSA signatures must be generated and verified according to PKCS#1
1485    [9] block type 1.
1510 Gupta, et al.            Expires October 9, 2005               [Page 27]
1512 Internet-Draft          ECC Cipher Suites for TLS             April 2005
1515 6.  Cipher Suites
1517    The table below defines new ECC cipher suites that use the key
1518    exchange algorithms specified in Section 2.
1520      CipherSuite TLS_ECDH_ECDSA_WITH_NULL_SHA           = { 0x00, 0x?? }
1521      CipherSuite TLS_ECDH_ECDSA_WITH_RC4_128_SHA        = { 0x00, 0x?? }
1522      CipherSuite TLS_ECDH_ECDSA_WITH_DES_CBC_SHA        = { 0x00, 0x?? }
1523      CipherSuite TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA   = { 0x00, 0x?? }
1524      CipherSuite TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA    = { 0x00, 0x?? }
1525      CipherSuite TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA    = { 0x00, 0x?? }
1527      CipherSuite TLS_ECDHE_ECDSA_WITH_NULL_SHA          = { 0x00, 0x?? }
1528      CipherSuite TLS_ECDHE_ECDSA_WITH_RC4_128_SHA       = { 0x00, 0x?? }
1529      CipherSuite TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA  = { 0x00, 0x?? }
1530      CipherSuite TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA   = { 0x00, 0x?? }
1531      CipherSuite TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA   = { 0x00, 0x?? }
1533      CipherSuite TLS_ECDH_RSA_WITH_NULL_SHA             = { 0x00, 0x?? }
1534      CipherSuite TLS_ECDH_RSA_WITH_RC4_128_SHA          = { 0x00, 0x?? }
1535      CipherSuite TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA     = { 0x00, 0x?? }
1536      CipherSuite TLS_ECDH_RSA_WITH_AES_128_CBC_SHA      = { 0x00, 0x?? }
1537      CipherSuite TLS_ECDH_RSA_WITH_AES_256_CBC_SHA      = { 0x00, 0x?? }
1539      CipherSuite TLS_ECDHE_RSA_WITH_NULL_SHA            = { 0x00, 0x?? }
1540      CipherSuite TLS_ECDHE_RSA_WITH_RC4_128_SHA         = { 0x00, 0x?? }
1541      CipherSuite TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA    = { 0x00, 0x?? }
1542      CipherSuite TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA     = { 0x00, 0x?? }
1543      CipherSuite TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA     = { 0x00, 0x?? }
1545      CipherSuite TLS_ECDH_anon_NULL_WITH_SHA            = { 0x00, 0x?? }
1546      CipherSuite TLS_ECDH_anon_WITH_RC4_128_SHA         = { 0x00, 0x?? }
1547      CipherSuite TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA    = { 0x00, 0x?? }
1548      CipherSuite TLS_ECDH_anon_WITH_AES_128_CBC_SHA     = { 0x00, 0x?? }
1549      CipherSuite TLS_ECDH_anon_WITH_AES_256_CBC_SHA     = { 0x00, 0x?? }
1551                         Table 5: TLS ECC cipher suites
1554    [[ EDITOR: The actual cipher suite numbers will be assigned when this
1555    draft progresses to RFC. ]]
1557    The key exchange method, cipher, and hash algorithm for each of these
1558    cipher suites are easily determined by examining the name.  Ciphers
1559    other than AES ciphers, and hash algorithms are defined in [2].  AES
1560    ciphers are defined in [15].
1562    Server implementations SHOULD support all of the following cipher
1566 Gupta, et al.            Expires October 9, 2005               [Page 28]
1568 Internet-Draft          ECC Cipher Suites for TLS             April 2005
1571    suites, and client implementations SHOULD support at least one of
1572    them: TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA,
1573    TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
1574    TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, and
1575    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA.
1622 Gupta, et al.            Expires October 9, 2005               [Page 29]
1624 Internet-Draft          ECC Cipher Suites for TLS             April 2005
1627 7.  Security Considerations
1629    This document is based on [2], [5], [6] and [15].  The appropriate
1630    security considerations of those documents apply.
1632    One important issue that implementors and users must consider is
1633    elliptic curve selection.  Guidance on selecting an appropriate
1634    elliptic curve size is given in Table 1.
1636    Beyond elliptic curve size, the main issue is elliptic curve
1637    structure.  As a general principle, it is more conservative to use
1638    elliptic curves with as little algebraic structure as possible - thus
1639    random curves are more conservative than special curves such as
1640    Koblitz curves, and curves over F_p with p random are more
1641    conservative than curves over F_p with p of a special form (and
1642    curves over F_p with p random might be considered more conservative
1643    than curves over F_2^m as there is no choice between multiple fields
1644    of similar size for characteristic 2).  Note, however, that algebraic
1645    structure can also lead to implementation efficiencies and
1646    implementors and users may, therefore, need to balance conservatism
1647    against a need for efficiency.  Concrete attacks are known against
1648    only very few special classes of curves, such as supersingular
1649    curves, and these classes are excluded from the ECC standards that
1650    this document references [5], [6].
1652    Another issue is the potential for catastrophic failures when a
1653    single elliptic curve is widely used.  In this case, an attack on the
1654    elliptic curve might result in the compromise of a large number of
1655    keys.  Again, this concern may need to be balanced against efficiency
1656    and interoperability improvements associated with widely-used curves.
1657    Substantial additional information on elliptic curve choice can be
1658    found in [4], [5], [6], [8].
1660    Implementors and users must also consider whether they need forward
1661    secrecy.  Forward secrecy refers to the property that session keys
1662    are not compromised if the static, certified keys belonging to the
1663    server and client are compromised.  The ECDHE_ECDSA and ECDHE_RSA key
1664    exchange algorithms provide forward secrecy protection in the event
1665    of server key compromise, while ECDH_ECDSA and ECDH_RSA do not.
1666    Similarly if the client is providing a static, certified key,
1667    ECDSA_sign client authentication provides forward secrecy protection
1668    in the event of client key compromise, while ECDSA_fixed_ECDH and
1669    RSA_fixed_ECDH do not.  Thus to obtain complete forward secrecy
1670    protection, ECDHE_ECDSA or ECDHE_RSA must be used for key exchange,
1671    with ECDSA_sign used for client authentication if necessary.  Here
1672    again the security benefits of forward secrecy may need to be
1673    balanced against the improved efficiency offered by other options.
1678 Gupta, et al.            Expires October 9, 2005               [Page 30]
1680 Internet-Draft          ECC Cipher Suites for TLS             April 2005
1683 8.  Acknowledgments
1685    The authors wish to thank Bill Anderson and Tim Dierks.
1734 Gupta, et al.            Expires October 9, 2005               [Page 31]
1736 Internet-Draft          ECC Cipher Suites for TLS             April 2005
1739 9.  References
1741 9.1  Normative References
1743    [1]   Bradner, S., "Key Words for Use in RFCs to Indicate Requirement
1744          Levels", RFC 2119, March 1997.
1746    [2]   Dierks, T. and C. Allen, "The TLS Protocol Version 1.0",
1747          RFC 2246, January 1999.
1749    [3]   Blake-Wilson, S., Nystrom, M., Hopwood, D., Mikkelsen, J., and
1750          T. Wright, "Transport Layer Security (TLS) Extensions",
1751          draft-ietf-tls-rfc3546bis-00.txt (work in progress), Nov. 2004.
1753    [4]   SECG, "Elliptic Curve Cryptography", SEC 1, 2000,
1754          <http://www.secg.org/>.
1756    [5]   IEEE, "Standard Specifications for Public Key Cryptography",
1757          IEEE 1363, 2000.
1759    [6]   ANSI, "Public Key Cryptography For The Financial Services
1760          Industry: The Elliptic Curve Digital Signature Algorithm
1761          (ECDSA)", ANSI X9.62, 1998.
1763    [7]   NIST, "Secure Hash Standard", FIPS 180-2, 2002.
1765    [8]   NIST, "Digital Signature Standard", FIPS 186-2, 2000.
1767    [9]   RSA Laboratories, "PKCS#1: RSA Encryption Standard version
1768          1.5", PKCS 1, November 1993.
1770    [10]  SECG, "Recommended Elliptic Curve Domain Parameters", SEC 2,
1771          2000, <http://www.secg.org/>.
1773    [11]  Polk, T., Housley, R., and L. Bassham, "Algorithms and
1774          Identifiers for the Internet X.509 Public Key Infrastructure
1775          Certificate and Certificate Revocation List (CRL) Profile",
1776          RFC 3279, April 2002.
1778 9.2  Informative References
1780    [12]  Harper, G., Menezes, A., and S. Vanstone, "Public-Key
1781          Cryptosystems with Very Small Key Lengths", Advances in
1782          Cryptology -- EUROCRYPT '92, LNCS 658, 1993.
1784    [13]  Lenstra, A. and E. Verheul, "Selecting Cryptographic Key
1785          Sizes", Journal of Cryptology 14 (2001) 255-293,
1786          <http://www.cryptosavvy.com/>.
1790 Gupta, et al.            Expires October 9, 2005               [Page 32]
1792 Internet-Draft          ECC Cipher Suites for TLS             April 2005
1795    [14]  Freier, A., Karlton, P., and P. Kocher, "The SSL Protocol
1796          Version 3.0", November 1996,
1797          <http://wp.netscape.com/eng/ssl3/draft302.txt>.
1799    [15]  Chown, P., "Advanced Encryption Standard (AES) Ciphersuites for
1800          Transport Layer Security (TLS)", RFC 3268, June 2002.
1803 Authors' Addresses
1805    Vipul Gupta
1806    Sun Microsystems Laboratories
1807    16 Network Circle
1808    MS UMPK16-160
1809    Menlo Park, CA  94025
1810    US
1812    Phone: +1 650 786 7551
1813    Email: vipul.gupta@sun.com
1816    Simon Blake-Wilson
1817    Basic Commerce & Industries, Inc.
1818    96 Spandia Ave
1819    Unit 606
1820    Toronto, ON  M6G 2T6
1821    CA
1823    Phone: +1 416 214 5961
1824    Email: sblakewilson@bcisse.com
1827    Bodo Moeller
1828    University of Calgary
1829    Dept of Math & Stats
1830    2500 University Dr NW
1831    Calgary, AB  T2N 1N4
1832    CA
1834    Phone: +1 403 220 5735
1835    Email: bodo@openssl.org
1838    Chris Hawk
1839    Corriente Networks
1841    Email: chris@corriente.net
1846 Gupta, et al.            Expires October 9, 2005               [Page 33]
1848 Internet-Draft          ECC Cipher Suites for TLS             April 2005
1851    Nelson Bolyard
1853    Email: nelson@bolyard.com
1902 Gupta, et al.            Expires October 9, 2005               [Page 34]
1904 Internet-Draft          ECC Cipher Suites for TLS             April 2005
1907 Intellectual Property Statement
1909    The IETF takes no position regarding the validity or scope of any
1910    Intellectual Property Rights or other rights that might be claimed to
1911    pertain to the implementation or use of the technology described in
1912    this document or the extent to which any license under such rights
1913    might or might not be available; nor does it represent that it has
1914    made any independent effort to identify any such rights.  Information
1915    on the procedures with respect to rights in RFC documents can be
1916    found in BCP 78 and BCP 79.
1918    Copies of IPR disclosures made to the IETF Secretariat and any
1919    assurances of licenses to be made available, or the result of an
1920    attempt made to obtain a general license or permission for the use of
1921    such proprietary rights by implementers or users of this
1922    specification can be obtained from the IETF on-line IPR repository at
1923    http://www.ietf.org/ipr.
1925    The IETF invites any interested party to bring to its attention any
1926    copyrights, patents or patent applications, or other proprietary
1927    rights that may cover technology that may be required to implement
1928    this standard.  Please address the information to the IETF at
1929    ietf-ipr@ietf.org.
1932 Disclaimer of Validity
1934    This document and the information contained herein are provided on an
1935    "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
1936    OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
1937    ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
1938    INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
1939    INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
1940    WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
1943 Copyright Statement
1945    Copyright (C) The Internet Society (2005).  This document is subject
1946    to the rights, licenses and restrictions contained in BCP 78, and
1947    except as set forth therein, the authors retain all their rights.
1950 Acknowledgment
1952    Funding for the RFC Editor function is currently provided by the
1953    Internet Society.
1958 Gupta, et al.            Expires October 9, 2005               [Page 35]