LURK WG                                                  D. Migault, Ed.
Internet-Draft                                                  Ericsson
Intended status: Informational                              July 8, 2016
Expires: January 9, 2017


               LURK Protocol for TLS/DTLS1.2 version 1.0
                         draft-mglt-lurk-tls-00

Abstract

   This document describes the LURK/TLS protocol between a Edge Server
   and a Key Server.

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at http://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on January 9, 2017.

Copyright Notice

   Copyright (c) 2016 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.






Migault                  Expires January 9, 2017                [Page 1]


Internet-Draft                  LURK TLS                       July 2016


Table of Contents

   1.  Requirements notation . . . . . . . . . . . . . . . . . . . .   2
   2.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2
   3.  Terminology and Acronyms  . . . . . . . . . . . . . . . . . .   3
   4.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   3
   5.  LURK/TLS Header . . . . . . . . . . . . . . . . . . . . . . .   3
   6.  Reachability / Keep Alive . . . . . . . . . . . . . . . . . .   5
   7.  Capability Discovery  . . . . . . . . . . . . . . . . . . . .   5
   8.  Master Secret with RSA Authentication . . . . . . . . . . . .   6
   9.  Extended Master Secret with RSA Authentication  . . . . . . .   8
   10. Master Secret with RSA Authentication and PFS . . . . . . . .  10
   11. Signature with ECDHE Authentication . . . . . . . . . . . . .  10
   12. Unpredictable Signature with ECDHE Authentication . . . . . .  11
   13. Security Considerations . . . . . . . . . . . . . . . . . . .  13
     13.1.  Threat Analysis  . . . . . . . . . . . . . . . . . . . .  13
     13.2.  RSA  . . . . . . . . . . . . . . . . . . . . . . . . . .  14
       13.2.1.  TLS Session Binding  . . . . . . . . . . . . . . . .  14
       13.2.2.  Decryption Oracle  . . . . . . . . . . . . . . . . .  15
       13.2.3.  Illegitimate access to Key Server and PFS  . . . . .  15
     13.3.  ECDHE  . . . . . . . . . . . . . . . . . . . . . . . . .  16
       13.3.1.  Cross Protocol Attacks . . . . . . . . . . . . . . .  16
       13.3.2.  Signing Oracle . . . . . . . . . . . . . . . . . . .  17
     13.4.  LURKS versus standard TLS1.2 . . . . . . . . . . . . . .  17
     13.5.  DDoS . . . . . . . . . . . . . . . . . . . . . . . . . .  18
   14. IANA Considerations . . . . . . . . . . . . . . . . . . . . .  19
   15. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . .  19
   16. References  . . . . . . . . . . . . . . . . . . . . . . . . .  19
     16.1.  Normative References . . . . . . . . . . . . . . . . . .  19
     16.2.  Normative References . . . . . . . . . . . . . . . . . .  20
   Appendix A.  Example of LURK Exchanges  . . . . . . . . . . . . .  20
     A.1.  LURK/TLS RSA Master Secret  . . . . . . . . . . . . . . .  20
     A.2.  LURK/TLS RSA Extended Master Secret . . . . . . . . . . .  21
     A.3.  LURK/TLS ECDHE Signature  . . . . . . . . . . . . . . . .  22
     A.4.  LURK/TLS/sECDHE Unpredictable . . . . . . . . . . . . . .  23
   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .  25

1.  Requirements notation

   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 [RFC2119].

2.  Introduction

   This document describes the LURK/TLS protocol between an Edge Server
   and a Key Server.  The LURK/TLS protocol is designed to address the




Migault                  Expires January 9, 2017                [Page 2]


Internet-Draft                  LURK TLS                       July 2016


   use cases as well as fulfill the requirements presented in
   [I-D.mglt-lurk-tls-use-cases].

   This document limits the scope LURK/TLS to the following
   authentication methods: RSA [RFC5246], [RFC6347] ECDHE_RSA,
   ECDHE_ECDSA [RFC4279] with TLS1.2 or prior versions.  If other
   authentication methods are required, the LURK/TLS can be extended
   considering the analysis of [I-D.mglt-lurk-tls-requirements].

3.  Terminology and Acronyms

   - item :

4.  Introduction

   LURK/TLS defines the interactions between the Edge Server and the Key
   Server.  In this document, the Edge Server interacts with the Key
   Server in order to perform the authentication phase of the TLS key
   exchange.  This document only considers the case where the
   authentication methods are RSA, ECHDE_RSA or ECDHE_ECDSA.  Additional
   authentication methods or different interactions are left for the
   future.

   LURK/TLS is a query - response protocol.

5.  LURK/TLS Header

   The LURK/TLS Header contains the necessary elements to interpret the
   remaining payload as well as identifiers used to bind a query and a
   response.  As the status of a response is only meaningful for
   response, this section defines a different header for query and
   response.

   The first byte of the LURK/TLS header contains the query bit (q) set
   to 1 for a query and 0 for a response, 4 reserved bits set to zero,
   and three right bits used to indicate the LURK/TLS version (version).
   In this document, the version is set to 1.  Follows the query type
   (qtype) that indicates the purpose of the query as well as how to
   interpret the remaining payload.  Finally, the query identifier (id)
   is used to bind the query with the response.

   For responses, the LURK/TLS header contains an additional field that
   indicates the status of the response (status).

   When the Edge Server or the Key Server sends a query, the query bit
   MUST be set to one, the reserved bits MUST be set to zero, the
   version MUST be set to one, the query type MUST be one of the values




Migault                  Expires January 9, 2017                [Page 3]


Internet-Draft                  LURK TLS                       July 2016


   indicated by the LURKTLSQueryType, and the query identifier SHOULD be
   randomly generated to avoid response spoofing attacks.

   Upon receiving the query, the Key Server or the Edge Server ignores
   the reserved bits and checks the LURK/TLS version.  If the version is
   not supported, then an "unvalid_lurk_version" error is returned.
   Then, it checks if the query type is supported.  If the query type is
   unknown, an "unvalid_query_type" error is returned.  In any other
   case, the message is treated accordingly to the query type indicated.
   The response header associated to a query header, is the exact copy
   of the query header with the query bit set to zero.

   Upon receiving a response, the Key Server or the Edge Server checks
   the response is bound to a query by checking the id.  If no binding
   is found, the response is ignored.

   THESE ARE SOME OPEN QUESTIONS AND COMMENTS THAT SHOULD BE ADDRESSED
   AND SHOULD NOT BE PART OF THE FINAL VERSION OF THE DRAFT.

   OPEN QUESTIONS 1):  OPEN QUESTION: CAN WE HAVE DIFFERENT HEADERS FOR
                       QUERY AND RESPONSE ?

   OPEN QUESTIONS 2):  THE DEFINITION OF THE FIRST BYTE HEADER IS NOT
                       PROPERLY DEFINED BY THE PSEUDO CODE.



























Migault                  Expires January 9, 2017                [Page 4]


Internet-Draft                  LURK TLS                       July 2016


      enum {
          zero(0), one(1) (1)
      } QueryBit

      enum {
          one (1), (8)
      } LURKTLSVersion

      enum {
         ping (0), capabilities (1),
         rsa_master (2), rsa_extended_master (3), pfs_rsa_master (4),
         echde (5), pfs_non_predictable_ecdhe (6), (255)
      }LURKTLSQueryType

      enum {
          success (0), unvalid_lurk_version (1),
          unvalid_query_type (1) (255)
      } LURKTLSResponseStatus


      struct {
          QueryBit q
          Reserved reserved
          LURKTLSVersion version
          LURKTLSQueryType qtype
          uint64 id;
      } LURKTLSQueryHeader

      struct {
        LURKTLSQueryHeader qheader
        LURKResponseStatus status
      } LURKTLSResponseHeader

6.  Reachability / Keep Alive

   To check the reachability between the Edge Server and the Key Server,
   the Edge Server or the Key Server may send a LURK/TLS query with the
   query type "ping".  Upon receiving such query, the receiver sends
   back a LURK/TLS response with a LURKStatusResponse set to "success",
   with no additional payloads.

7.  Capability Discovery

   To discover the capabilities of the Key Server, the Edge Server may
   request the list of query types served by the Key Server.  The Edge
   Server sends a LURK/TLS query with the query type set to
   "capability".  Upon receiving the query, the Key Server sends back a
   LURK/TLS response with a LURKStatus set to success and a LURK/TLS



Migault                  Expires January 9, 2017                [Page 5]


Internet-Draft                  LURK TLS                       July 2016


   capability payload.  The payload contains its length and an ordered
   list of the LURK/TLS query type supported.

                        struct {
                            opaque data<1..2**32-1>
                        } LURKTLSCapabilityPayload


   THESE ARE SOME OPEN QUESTION AND COMMENTS THAT SHOULD BE ADDRESSED
   AND SHOULD NOT BE PART OF THE FINAL VERSION OF THE DRAFT.

   OPEN QUESTIONS 3):  CURRENT CAPABILITY FORMAT IS LIMITED TO THE
                       CAPABILITIES OF THE QUERY TYPE.  IN SOME CASE,
                       THE QUERY TYPE MAY BE ASSOCIATED TO SOME
                       ADDITIONAL PARAMETERS SUCH AS CRYPTOGRAPHIC HASH
                       FUNCTIONS, OR ECC PARAMETERS.  SHOULD THESE SUB
                       PARAMETERS BE EMBEDDED INTO THIS REQUEST OR
                       SHOULD WE HAVE DEDICATED REQUEST FOR THEM?

   OPEN QUESTIONS 4):  CURRENT PARAMETERS THAT NEED TO BE SPECIFIED ARE
                       PRF / ECParameters / EC Points into Capabilities.

8.  Master Secret with RSA Authentication

   This section describes how the Edge Server request the generation of
   a master secret, with RSA as an authentication method.

   The Edge Server sends a LURK/TLS query to the Key Server with the
   necessary inputs to generate the master secret
   (LURKTLSMasterRSAInputPayload).  This payload contains the length of
   the payload (length), the identifier of the RSA key pair (key_id),
   the Pseudo Random Function Algorithm to generate the master secret
   (master_prf), the ClientHello.random (client_random), the
   ServerHello.random (edge_server_random), the TLS version
   (client_version) of the TLS Client, the TLS version of the Edge
   Server (edge_server_version), and the encrypted pre master secret
   generated by the TLS Client (encrypted_premaster_secret).

   Upon receipt of the LURKTLSMasterRSAInputPayload, the Key Server
   checks the RSA key pair is available (key_id).  Different format can
   be used to identify the key pair.  This document defines sha256_32
   format which takes the 32 first bits of the hash of the public key
   using sha256.  If the format of the key pair identifier is not
   understood, an "unvalid_keypair_id_format" error is returned.  If the
   designated key pair is not available an "unvalid_keypair_id".  With
   the key pair identified, the Key Server is able to check the length
   of the encrypted premaster secret and so the length of the payload.
   In case of length mismatch and "unvalid_payload_format" is returned.



Migault                  Expires January 9, 2017                [Page 6]


Internet-Draft                  LURK TLS                       July 2016


   Note that the length can be derived from the public key, so the error
   only reveals public information.  If the Key Server does not support
   the PRF, an "unvalid_prf" is returned.  If the TLS version of client
   and the Edge Server are not equal or that the Key Server does not
   support the provided TLS version, an "unvalid_tls_version" error is
   returned.

   When the inputs have been checked, the Key Server decrypts the
   encrypted premaster secret as described in [RFC5246] section 7.4.7.1.
   More specifically, when a PKCS1.5 format error is detected, or a
   mismatch between the TLS versions provided as input and the one
   indicated in the encrypted premaster secret, the Key Server returns a
   randomly generated master secret.  If the pre master is appropriately
   decrypted, then the master secret is computed as described in
   [RFC5246] section 8.1 using the PRF, ClientHello.random, and
   ServerHello.random provided by the Edge Server.  Finally, the Key
   Server returns a master secret to the Edge Server in a
   LURKTLSMasterPayload.

   Upon receipt of the master_secret the Edge Server can generate the
   session keys and finish the TLS key exchange protocol.






























Migault                  Expires January 9, 2017                [Page 7]


Internet-Draft                  LURK TLS                       July 2016


     // status error specifically mentioned in this exchange
     enum {
       unvalid_key_pair_id_format (3), unvalid_key_pair_id (4),
       unvalid_encrypted_master_length (5) unvalid_prf (6),
       unvalid_tls_version (7), unvalid_payload_format (8), (255)
     } LURKTLSResponseStatus


     enum {
         sha256_32 (0), (255)
     }KeyPairIdType

     struct {
         KeyPairIdType type
         opaque data // length defined by the type
     } KeyPairID;


     struct {
         unit16 length
         KeyPairID key_id
         PRFAlgorithm master_prf        // see RFC5246 section 6.1
         Random client_random           // see RFC5246 section 7.4.1.2
         Random edge_server_random
         ProtocolVersion client_version // see RFC5246 section 6.2.1
         ProtocolVersion edge_server_version
         EncryptedPreMasterSecret       // see RFC5246 section 7.4.7.1
                                        // Length depends on the key.
     } LURKTLSMasterRSAInputPayload

     struct {
         LURKTLSPayloadType master
         opaque master[0..47]
     } LURKTLSMasterPayload

                      key_id = sha256(rsa_public_key)[0..31];

9.  Extended Master Secret with RSA Authentication

   This section describes how the Edge Server request the generation of
   an extended master secret, with RSA as an authentication method.

   The Edge Server sends a LURK/TLS query to the Key Server with the
   necessary inputs to generate the master secret
   (LURKTLSExtendedMasterRSAInputPayload).  This payload contains the
   length of the payload (length), the identifier of the RSA key pair
   (key_id), the PRF used to generate the extended master secret
   (master_prf), the PRF used to generate the session hash



Migault                  Expires January 9, 2017                [Page 8]


Internet-Draft                  LURK TLS                       July 2016


   (session_prf), the TLS version of the TLS Client (client_version),
   the TLS version of the Edge Server (edge_server_version), the session
   hash (session_hash) and the encrypted pre master secret generated by
   the TLS Client (encrypted_premaster_secret).

   [RFC5246] section 7.4.9 mentions that for TLS1.2, the hash function
   used to generate the session hash MUST be the one used in the PRF,
   but some cipher_suites may also define different Hash function to
   generate the session_hash.  For that reason the PRF used to compute
   the session hash is explicitly provided.  The session hash is
   generated by the Edge Server as defined in [RFC7627] section 3.

   Upon receipt of the query, the Key Server checks the validity of key
   pair (key_id), the PRF used to generate the master secret
   (master_prf), the TLS versions of the TLS Client (client_version) and
   the TLS version of the Edge Server (edge_server_version) as described
   in Section 8.  The Key Server checks the PRF to generate the session
   hash (session_prf) similarly to the PRF used to generate the master
   (master_prf).  There is not a specific error for these two distinct
   PRF as we believe that when a PRF is available it will be available
   in both case.  With the key pair identified (key_id) and the PRF of
   the session has (session_prf), the Key Server is able to check the
   length of the payload.  If the length does not match, an
   "unvalid_payload_format" is returned.

   The decryption of the encrypted premaster is performed as described
   in Section 8.  Note that the TLS versions are only provided to check
   the format of the encrypted premaster.

   The extended master secret is generated as described in [RFC7627] and
   a LURKTLSMasterPayload with the master secret.

   Upon receipt of the master_secret the Edge Server can generate the
   session keys and finish the TLS key exchange protocol.

     struct{
         unit16 length
         KeyPairID key_id
         PRFAlgorithm master_prf         // see RFC5246 section 6.1
         PRFAlgorithm session_prf        // see RFC5246 section 6.1
         ProtocolVersion client_version  // see RFC5246 section 6.2.1
         ProtocolVersion edge_server_version
         EncryptedPreMasterSecret       // see RFC5246 section 7.4.7.1
         opaque session_hash //length - length(keyid) -1
     }LURKTLSExtendedMasterRSAInputPayload;






Migault                  Expires January 9, 2017                [Page 9]


Internet-Draft                  LURK TLS                       July 2016


10.  Master Secret with RSA Authentication and PFS

   [I-D.erb-lurk-rsalg]

11.  Signature with ECDHE Authentication

   This section describes how the Edge Server request the generation of
   signature for ECDHE_RSA or ECDHE_ECDSA as an authentication method.

   The EdgeServer provides the Key Server the information to be signed
   in a LURKTLSECDHEInputPayload.  The payload contains the length of
   the inputs (length), the key pair identifier (key_id), the
   ClientHello.random (client_random), the ServerHello.random
   (edge_server_random), the TLS version (version), signature scheme
   which also includes the hash function (signature_scheme) and the
   ECDHE parameters of the Edge Server (ecdhe_params).

   Upon receipt of a LURKTLSECDHEInputPayload, the Key Server, checks
   the key pair identifier (key_id) and the TLS version (version) as
   described in Section 8.  The Key Server MAY perform some checks on
   the ECDHE parameters.  If these parameters are not supported it may
   return an "unvalid_ecdhparams" error.  If a format error is detected,
   an "unvalid_ecdhe_format" error may be returned.

   [NOTE: We need to provide some additional details on how ECDHE params
   can be checked, so it does not appear as an opaque value.]

   Then, the key server generates the signature as defined in [RFC4492]
   section 5.4.. The Key Server returns a LURKTLSDigitallySignedPayload.

   The output of the Key Server has a similar structure as the Signature
   structure defined in [RFC4492] section 5.4.

   Upon receiving the LURKTLSDigitallySignedPayload the Edge Server
   extracts the signature of the payload.  It checks the length of the
   signature which is known from the signature scheme and the key.  In
   case of length mismatch, the Edge Server reports an error and aborts
   the session.  In some case, the Edge Server MAY check the signature
   before finalizing the key exchange.












Migault                  Expires January 9, 2017               [Page 10]


Internet-Draft                  LURK TLS                       July 2016


// defined in TLS1.3 section 4.8.1
enum {
    // RSASSA-PKCS-v1_5 algorithms
    rsa_pkcs1_sha1 (0x0201),
    rsa_pkcs1_sha256 (0x0401),
    rsa_pkcs1_sha384 (0x0501),
    rsa_pkcs1_sha512 (0x0601),

    // ECDSA algorithms
    ecdsa_secp256r1_sha256 (0x0403),
    ecdsa_secp384r1_sha384 (0x0503),
    ecdsa_secp521r1_sha512 (0x0603),

    // RSASSA-PSS algorithms
    rsa_pss_sha256 (0x0700),
    rsa_pss_sha384 (0x0701),
    rsa_pss_sha512 (0x0702),

    // EdDSA algorithms
    ed25519 (0x0703),
    ed448 (0x0704),

    // Reserved Code Points
    private_use (0xFE00..0xFFFF),
    (0xFFFF)
} SignatureScheme;

struct {
    unit16 length
    KeyPairID key_id
    Random client_random              // RFC5246 section 7.4.1.2
    Random edge_server_random
    ProtocolVersion version
    SignatureScheme signature_scheme; // draft-ietf-tls-tls13 sec. 4.8.1
    ServerECDHParams ecdhe_params           // RFC4492 section 5.4
} LURKTLSECDHEInputPayload;

struct {
    opaque signature<0..2^16-1>;
} LURKTLSDigitallySignedPayloads;

12.  Unpredictable Signature with ECDHE Authentication

   Section 11 describes how LURK enables a Edge Server to chose the 64
   bits of the message to be signed.  Although in practice the risks are
   limited, this section provides a mechanism that prevent the Edge
   Server to chose the server random.  In addition, the proposed
   mechanism prevent an attacker to request the signature of a specific



Migault                  Expires January 9, 2017               [Page 11]


Internet-Draft                  LURK TLS                       July 2016


   content.  More specifically, upon receiving a content to be signed,
   the Key Server, will return the signature of a "modified" content as
   well as the necessary parameters to generate the modified content.
   The Edge Server is expected to interacts with the TLS Client based on
   the modified content.

   When the Edge Server uses the unpredictable signature authentication,
   in addition to the inputs sent in the case of the traditional ECDHE
   signature described in Section 11, the Edge Server adds an Pseudo
   Random Function (prf), that will be used by the Key Server to modify
   the content to be signed.

   The Key Server first starts checking the different arguments provided
   by the Edge Server similarly as described in Section 11.  As the PRF
   (prf) is specific to this exchange, the Key Server checks it supports
   the PRF.  If not an "unvalid_prf" error is sent.  If the prf is
   supported, the Key Server generates a new ServerHello.random.  The
   generation of the new ServerHello.random is built following the guide
   lines of Digital Signature section 4.8.1 of [I-D.ietf-tls-tls13] with
   a NULL encryption algorithm.  The Key Server generates a random nonce
   (nonce) and concatenates padding, a 64 byte prefix of of octet 32,
   the string "ECDHE ServerHello.random", a zero byte "0", the nonce and
   the ServerHello.random provided by the Edge Server.  The resulting
   string is hashed by the PRF indicated by the Edge Server, and the new
   value for the ServerHello.random is the first 32 bytes of that
   resulting hash.

   The Key Server generates the signature as described in [RFC4492]
   section 5.4, with the new ServerHello.random.

   Once the signature has been generated, the Key Server returns a
   LURKTLSDigitallySignedPayload as well as a LURKTLSNoncePayload.

   Upon receipt of these two payloads, the Edge Server generates the
   ServerHello.random similarly to the Key Server.  The new value for
   the ServerHello.random is returned by the Edge Server to the TLS
   Client, and the digital signature is returns as previously in the
   ServerKeyExchange.













Migault                  Expires January 9, 2017               [Page 12]


Internet-Draft                  LURK TLS                       July 2016


   struct {
       LURKTLSECDHEInputPayload ecdhe_input
       PRFAlgorithm prf        // see RFC5246 section 6.1
   } LURKTLSECDHEUnpredictableInputPayload;


   padding = \
       2020202020202020202020202020202020202020202020202020202020202020\
       2020202020202020202020202020202020202020202020202020202020202020
   context = 45 43 44 48 45 20 53 65 72 76 65 72 48 65 6c 6c
             6f 2e 72 61 6e 64 6f 6d
   zero-byte = 00

   ServerHello.random = PRF(padding + context + zero-byte +
                            edge_server_random + nonce)[32]

   struct {
       opaque signature<0..2^16-1>;
       opaque new_server_random[32]
   } LURKTLSUnpredictableDigitallySignedPayloads;

   THESE ARE SOME OPEN QUESTION AND COMMENTS THAT SHOULD BE ADDRESSED
   AND SHOULD NOT BE PART OF THE FINAL VERSION OF THE DRAFT.

   OPEN QUESTIONS 5):  PRIMARY PURPOSE OF USING TLS1.3 PADDING SCHEME IS
                       TO HAVE ONE PADDING SCHEME USED ACROSS TLS
                       VERSIONS.  IS THAT REASONABLE ?

13.  Security Considerations

   THIS SECTION CONTAINS ROUGH NOTES.  IT NEEDS TO BE RE-WRITTEN, SO ANY
   SUGGESTION IS WELCOME.

13.1.  Threat Analysis

   The TLS Server authentication provides a TLS Client a proof that it
   is setting a TLS session with the expected TLS Server.  The scope of
   the provided authentication credentials is expected to be limited to
   the TLS session established between the TLS Client and the TLS
   Server.

   TLS_AUTH 1:  TLS authentication information is expected to be
                restrained to a single TLS session.

   In addition, motivations to perform illegitimate TLS session may be
   to perform a resource exhaustion attack on the TLS Server or to
   collect information leaked by the authentication method.  As a




Migault                  Expires January 9, 2017               [Page 13]


Internet-Draft                  LURK TLS                       July 2016


   result, the additional requirements for the TLS authentication should
   be:

   TLS_AUTH 2:  TLS authentication should not leak information
                associated to the Private Keys involved.

   TLS_AUTH 3:  TLS authentication should involve reasonable resource.

   A TLS session is entirely characterized by its key exchange messages.
   Among other characteristics, the TLS session is characterized by the
   ClientHello.random, the ServerHello.random, the TLS version and the
   TLS authentication.

13.2.  RSA

13.2.1.  TLS Session Binding

   With RSA, the premaster secret provided by the TLS Client and
   contains the TLS version used at least for TLS version 1.0 and
   greater.  There is only a single authentication method based on RSA
   encryption.  In addition, only the owner of the Private Key will be
   able to provide the same master secret as the one locally generated
   by the TLS Client.  As a result, the master secret can hardly be re-
   used across different authentication methods or TLS versions which
   provides makes master secret some kind of resistant to cross protocol
   attacks.

   On the other hand the master secret is not bound to all parameters of
   the key exchange such as the certificate for example.  This exposes
   RSA to MiM and master secret may not be bound to a single TLS
   session.  This vulnerability is addressed by the extended master
   secret.

   The premaster secret may be used against a TLS version that present
   vulnerabilities.  The premaster secret may be decrypted using this
   vulnerability.  Although having different keys for different TLS
   version would prevent such protocol attack issue, certificates do not
   allow to specify the TLS version.

   The following recommendations are intended to address cross protocol
   attack for RSA.

   RECOMMENDATION 1)  Server SHOULD limit the use of RSA to TLS1.0 and
                      greater version that do not present
                      vulnerabilities on the RSA authentication method.

   RECOMMENDATION 2)  TLS Client SHOULD NOT re-use their premaster
                      secret.



Migault                  Expires January 9, 2017               [Page 14]


Internet-Draft                  LURK TLS                       July 2016


13.2.2.  Decryption Oracle

   In order to prevent the Key Server to be used as an Bleichenbacher
   oracle

   RECOMMENDATION 1)  The Key Server MUST NOT return any information
                      associated to the encrypted content.  Instead,
                      when the encrypted data does not meet the expected
                      format a randomly generated premaster MUST be
                      generated and used to generate the master secret
                      or extended master secret returned by the Key
                      Server to the Edge Server.  Currently Section 8
                      and Section 9 meet this requirements.

   RECOMMENDATION 2)  The Key Server MUST NOT use a Private Key shared
                      by a TLS Server implementing a vulnerable TLS
                      version.

   In any proposed method Section 8, Section 9 or in
   [I-D.erb-lurk-rsalg], the master secret or extended master secret is
   returned instead of the premaster secret.  The hash function
   increases the difficulty for an attacker to perform chosen cipher
   text attack.  In fact, a collision free hash function makes difficult
   to determine the pre-master secret even though randoms and session-
   hash can be provided to the Key Server.  As a result:

   RECOMMENDATION 3)  The Key Server MUST only use collision free PRF.

13.2.3.  Illegitimate access to Key Server and PFS

   An illegitimate access to a Key Server provides the attacker to send
   any request to the Key Server.  The Key Server can be used as an
   oracle or to perform a single cryptographic operation.  An
   illegitimate access to the Key Server can be performed via an Edge
   Server.  If the attacker got control of the Edge Server that
   terminates the TLS Session of the TLS Client, then the attacker has a
   direct access to the data carried by the TLS Session.  This section
   does not consider this case.  Instead, it considers an attacker that
   access to the Key Server, but does not have access to the terminating
   Edge Server.

   With the operations described in Section 8 and in Section 9, an
   attacker intercepting a TLS Session is able to derive the master or
   extended master secret by sending a single request to the Key Server.
   On the other hand, [I-D.erb-lurk-rsalg] uses a one-way hash that
   defines the ServerHello.random as hash(N).  In order to retrieve the
   master secret, the attacker will need to derive n from hash(n).  As
   result:



Migault                  Expires January 9, 2017               [Page 15]


Internet-Draft                  LURK TLS                       July 2016


   RECOMMENDATION 4)  In order to provide PFS [I-D.erb-lurk-rsalg] is
                      recommended.

13.3.  ECDHE

13.3.1.  Cross Protocol Attacks

   The generation of the signature of the Elliptic Curve Diffie Hellman
   parameters involves the ClientHello.random and the
   ServerHello.random, but for example the TLS version or the
   authentication method are not part of the signature.  As a result, an
   attacker could provide some signed parameters associated to a
   different authentication method.  This issue is addressed by TLS1.3
   which considers a context associated to the generation of the
   signature.

   In order to perform a cross protocol attack, a collision MUST occurs
   between ClientHello.random, ServerHello.random and the authentication
   credentials of two distinct communications.  In addition, a given key
   and a given signature scheme must be shared by the different
   authentication credentials used in the two TLS Sessions.

   a)  ClientHello.random makes offline more difficult to be performed.
       In fact, the ClientHello.random is randomly generated by the TLS
       Client.  As a result, an attacker willing to usurpate the
       identity of the TLS Server, will have to generate a signature
       that matches the ClientHello.random.  For a given TLS Session,
       the probability of success for a given TLS Session is 1 / 2 ** (
       32 * 8 ) = 1 / 2 ** 256, and the probability for a random TLS
       Session is 1 / 2 ** 128 to have a collision.  This still provides
       a high bar for collision during offline attacks.  With on-line
       attack, the attacker knows the values of ClientHello.random,
       which raises the probability of collision to 1.

   b)  ServerHello.random is provided by the TLS Server which provides
       the signature.  As a result, an attacker usurping the TLS Server
       identity will have the possibility to chose the
       ServerHello.random.

   c)  Authentication credentials from different methods needs to match
       and to be signed by the same key.  A match between DHE and ECDHE
       is estimated to be 1 / 2 ** 40, which presents a higher
       probability of collision of several order of magnitude.

   Cross protocol attack is an issue due to the signature scheme adopted
   by TLS 1.2 and previous version.  More specifically, the signature
   scheme does not enable the Key Server or TLS Server to bind a
   signature and authentication credentials to a given authentication



Migault                  Expires January 9, 2017               [Page 16]


Internet-Draft                  LURK TLS                       July 2016


   method and TLS version.  In order to address this issue, a signature
   scheme should be limited to a given authentication credential and TLS
   version.  Possible ways include:

   RECOMMENDATION 5)  Server SHOULD limit the use of ECDSA to TLS1.2.

   RECOMMENDATION 6)  RSA signature SHOULD be preferred for DHE and
                      ECDSA SHOULD be preferred for ECDHE.

   RECOMMENDATION 7)  If RSA is used to sign ECDHE parameters, ECDHE
                      parameters that could be misinterpreted as DHE
                      parameters SHOULD be removed.

13.3.2.  Signing Oracle

   Section 5.8 of [RFC4492] defines the signed dayta as:

                 ClientHello.random + ServerHello.random +
                     ServerKeyExchange.ecdhe_params

   The method described in Section 11 open the Key Server to a first
   chosen 64 byte, which is increases by 32 the first chosen 32 byte of
   the standard TLS.  Section 12 on the other hand reduces it back to
   32.  In addition, Section 12 makes the signature unpredictable by
   generating the ServerHello.random, which reduces the efficiency of
   adaptive clear text signing attacks.

13.4.  LURKS versus standard TLS1.2

   The main difference between LURK and the standard TLS is that with
   LURK the cryptographic operations associated to the authentication
   are performed by the Key Server instead of the TLS Server.

   a)  A compromised Edge Server does not present risk of leakage of the
       Private Key.

   b)  A compromised Edge Server can only have access to the Key Server,
       and removal of the compromised Edge Server address the issue.

   c)  Access to the Private Key operations are not only cryptographic
       operations, and when a master secret is computed, the
       cryptographic output may be harder to access by a potential
       attacker.

   d)  Centralizing provides a global view of the operations performed.
       This may be more efficient for monitoring attacks, than
       monitoring them locally on the Edge Server.




Migault                  Expires January 9, 2017               [Page 17]


Internet-Draft                  LURK TLS                       July 2016


   On the other hand,

   a)  LURK does not address attacks that rely on the TLS protocols.  In
       other words, an attack that can be performed by a TLS Client
       without the standard TLS is likely to be performed with LURK.
       Eventually LURK will ease the detection of such attack making it
       harder.  In addition, the fact that the Key Server interacts with
       authenticated Edge Server does not prevent an TLS Client to
       perform the attack.

   b)  The Key Server provides a lighter way to perform cryptographic
       operation that the standard TLS.  As a result, if enabled by the
       Key Server, an attacker having access to the Key Server will
       become more efficient using it, than using a standard TLS Server.

   c)  LURK provides a bottle neck architecture where the Key Server is
       involved for any TLS Sessions.

   Note that in order to take the full advanatge of the LURK/TLS,

   RECOMMENDATION 8)  LURK/TLS SHOULD be used as the only way to perform
                      operations with the Private Key. More
                      specifically, LURK/TLS SHOULD NOT be used in
                      combination of other deployment where the Private
                      Key is copied on the server.

13.5.  DDoS

   A TLS Client or a corrupted Edge Server may be willing to perform a
   DoS attack by sending random strings, to make the Key Server generate
   some premaster or extended prematser.  A DoS on the Key Server is
   likely to impact all Edge Servers connected to that Key Server.
   Although RSA and ECDHE signature have been designed with limited
   overhead, cryptographic operations are significantly assymetric in
   term of resource engaged.

   RECOMMENDATION 9)  The Key Server SHOULD control and monitor the
                      resource associated by the Key Server to each
                      node.  The Key Server does not have any control
                      over the requesting TLS Client and so is not able
                      to advertise the Edge Server of an abusive TLS
                      Client.  Instead the Key Server SHOULD be able to
                      report any detected abuse to an orchestrator that
                      is in charge of orchestrating the mitigation
                      either at the Edge Server level and internally,
                      that is before the traffic reaches the Key Server.





Migault                  Expires January 9, 2017               [Page 18]


Internet-Draft                  LURK TLS                       July 2016


   Similarly, the Key Server may be used a reflector for Edge Server.
   More specifically, the TLS Client may attack the Edge Server via the
   communication between the Key Server and the Edge Server.  However,
   message exchange between the Edge Server and the Key Server have
   responses that are not significantly larger than Edge Server queries.
   In addition, the exchange between the Edge Server and the Key Server
   and lighter than the one involved between the TLS Client and the Edge
   Server.

14.  IANA Considerations

15.  Acknowledgments

   We would like to thank for their very useful feed backs: Yaron
   Sheffer, Yoav Nir, Stephen Farrell, Eric Burger, Thomas Fossati, Eric
   Rescola.

16.  References

16.1.  Normative References

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <http://www.rfc-editor.org/info/rfc2119>.

   [RFC4279]  Eronen, P., Ed. and H. Tschofenig, Ed., "Pre-Shared Key
              Ciphersuites for Transport Layer Security (TLS)",
              RFC 4279, DOI 10.17487/RFC4279, December 2005,
              <http://www.rfc-editor.org/info/rfc4279>.

   [RFC4492]  Blake-Wilson, S., Bolyard, N., Gupta, V., Hawk, C., and B.
              Moeller, "Elliptic Curve Cryptography (ECC) Cipher Suites
              for Transport Layer Security (TLS)", RFC 4492,
              DOI 10.17487/RFC4492, May 2006,
              <http://www.rfc-editor.org/info/rfc4492>.

   [RFC5246]  Dierks, T. and E. Rescorla, "The Transport Layer Security
              (TLS) Protocol Version 1.2", RFC 5246,
              DOI 10.17487/RFC5246, August 2008,
              <http://www.rfc-editor.org/info/rfc5246>.

   [RFC6347]  Rescorla, E. and N. Modadugu, "Datagram Transport Layer
              Security Version 1.2", RFC 6347, DOI 10.17487/RFC6347,
              January 2012, <http://www.rfc-editor.org/info/rfc6347>.






Migault                  Expires January 9, 2017               [Page 19]


Internet-Draft                  LURK TLS                       July 2016


   [RFC7627]  Bhargavan, K., Ed., Delignat-Lavaud, A., Pironti, A.,
              Langley, A., and M. Ray, "Transport Layer Security (TLS)
              Session Hash and Extended Master Secret Extension",
              RFC 7627, DOI 10.17487/RFC7627, September 2015,
              <http://www.rfc-editor.org/info/rfc7627>.

16.2.  Normative References

   [I-D.mglt-lurk-tls-use-cases]
              Migault, D., Ma, K., Salz, R., Mishra, S., and O. Dios,
              "LURK TLS/DTLS Use Cases", draft-mglt-lurk-tls-use-
              cases-02 (work in progress), June 2016.

   [I-D.mglt-lurk-tls-requirements]
              Migault, D. and K. Ma, "Authentication Model and Security
              Requirements for the TLS/DTLS Content Provider Edge Server
              Split Use Case", draft-mglt-lurk-tls-requirements-00 (work
              in progress), January 2016.

   [I-D.ietf-tls-tls13]
              Rescorla, E., "The Transport Layer Security (TLS) Protocol
              Version 1.3", draft-ietf-tls-tls13-13 (work in progress),
              May 2016.

   [I-D.erb-lurk-rsalg]
              Erb, S. and R. Salz, "A PFS-preserving protocol for LURK",
              draft-erb-lurk-rsalg-01 (work in progress), May 2016.

Appendix A.  Example of LURK Exchanges

A.1.  LURK/TLS RSA Master Secret

 TLS Client          Edge Server         Key Server

 ClientHello
    ProtocolVersion server_version
    Random client_random
    Cipher_suite
        TLS_RSA_*, ...
 -------->

                     ServerHello
                         ProtocolVersion edge_server_version
                         Random server_random
                         Cipher_suite=TLS_RSA
                     Certificate
                         RSA Public Key
                     ServerHelloDone



Migault                  Expires January 9, 2017               [Page 20]


Internet-Draft                  LURK TLS                       July 2016


                     <--------

 ClientKeyExchange
     EncryptedPremasterSecret
 [ChangeCipherSpec]
 Finished
 -------->


                     LURKTLSMasterRSAInputPayload
                         key_id
                         master_prf
                         client_random
                         edge_server_random
                         client_version
                         edge_server_version
                         EncryptedPremasterSecret
                     -------->

                                  1. Computing Master Secret
                                  master_secret = master_prf(\
                                  pre_master_secret + "master secret" +\
                                  client_random +\
                                  edge_server_random)[0..47];

                                         LURKTLSMasterPayload
                                             master
                                         <--------

                     [ChangeCipherSpec]
                         Finished
                     <--------
 Application Data      <------->     Application Data

A.2.  LURK/TLS RSA Extended Master Secret

     TLS Client          Edge Server         Key Server

     ClientHello
        ProtocolVersion server_version
        Cipher_suite
            TLS_RSA_*, ...
        Extension 0x0017
     -------->

                         ServerHello
                             ProtocolVersion edge_server_version
                             Cipher_suite=TLS_RSA



Migault                  Expires January 9, 2017               [Page 21]


Internet-Draft                  LURK TLS                       July 2016


                             Extension 0x0017
                         Certificate
                             RSA Public Key
                         ServerHelloDone
                         <--------
     ClientKeyExchange
         EncryptedPremasterSecret
     [ChangeCipherSpec]
     Finished
     -------->

                         LURKTLS Header (Query)
                         LURKTLSExtendedMasterRSAInputPayload
                             key_id
                             master_prf
                             session_prf
                             client_version
                             edge_server_version
                             EncryptedPreMasterSecret
                             session_hash
                         -------->

                                      1. Computing Master Secret
                                      master_secret = master_prf(
                                      pre_master_secret +\
                                      "extended master secret" +\
                                      session_hash)[0..47]

                                             LURKTLS Header (Response)
                                             LURKTLSMasterPayload
                                                 master
                                             <--------

                         [ChangeCipherSpec]
                             Finished
                         <--------
     Application Data      <------->     Application Data

A.3.  LURK/TLS ECDHE Signature

  TLS Client          Edge Server         Key Server

  ClientHello
     ProtocolVersion server_version
     Random client_random
     Cipher_suite
         TLS_ECDHE_ECDSA_*, TLS_ECDHE_RSA_*, ...
         Extension Supported EC, Supported Point Format



Migault                  Expires January 9, 2017               [Page 22]


Internet-Draft                  LURK TLS                       July 2016


  -------->

                      LURKTLS Header (Query)
                      LURKTLSECDHEInputPayload
                          key_id
                          client_random
                          server_random
                          version
                          signature_scheme
                          ecdhe_params
                      -------->
                                   1. Generating the signature
                                   signature = ECDSA(client_random +\
                                   edge_server_random + echde_params)

                                          LURKTLS Header (Response)
                                          LURKTLSDigitallySignedPayloads
                                              signature
                                          <--------

                      ServerHello
                          ProtocolVersion edge_server_version
                          Random server_random
                          Cipher_suite=TLS_ECDHE_ECDSA
                          Extension Supported EC, Supported Point Format
                      Certificate
                          ECDSA Public Key
                      ServerKeyExchange
                          ecdhe_params
                          signature
                      ServerHelloDone
                      <--------


  ClientKeyExchange
  [ChangeCipherSpec]
  Finished
  -------->
                      [ChangeCipherSpec]
                      Finished
                      <--------
  Application Data      <------->     Application Data

A.4.  LURK/TLS/sECDHE Unpredictable

TLS Client          Edge Server         Key Server

ClientHello



Migault                  Expires January 9, 2017               [Page 23]


Internet-Draft                  LURK TLS                       July 2016


   ProtocolVersion server_version
   Random client_random
   Cipher_suite
       TLS_ECDHE_ECDSA_*, TLS_ECDHE_RSA_*, ...
       Extension Supported EC, Supported Point Format
-------->

                    LURKTLS Header (Query)
                    LURKTLSECDHEInputPayload
                        key_id
                        client_random
                        edge_server_random
                        version
                        signature_scheme
                        ecdhe_params
                        prf
                    -------->
                                 1. Generates a random nonce
                                 2. Compute modified edge_server_random
                                 modified_server_random = \
                                       prf(padding + context +\
                                       zero-byte + edge_server_random +\
                                        once)[32]
                                 3. Generate the signature
                                 signature = ECDSA(client_random +\
                                 modified_server_random + echde_params)

                                        LURKTLS Header (Response)
                                        LURKTLSDigitallySignedPayloads
                                            signature
                                            mofified_edge_server_random
                                        <--------


                    ServerHello
                        ProtocolVersion edge_server_version
                        Random modified_edge_server_random
                        Cipher_suite=TLS_ECDHE_ECDSA
                        Extension Supported EC, Supported Point Format
                    Certificate
                        ECDSA Public Key
                    ServerKeyExchange
                        ecdhe_params
                        signature
                    ServerHelloDone
                    <--------
ClientKeyExchange
[ChangeCipherSpec]



Migault                  Expires January 9, 2017               [Page 24]


Internet-Draft                  LURK TLS                       July 2016


Finished
-------->
                    [ChangeCipherSpec]
                    Finished
                    <--------
Application Data      <------->     Application Data

Author's Address

   Daniel Migault (editor)
   Ericsson
   8400 boulevard Decarie
   Montreal, QC   H4P 2N2
   Canada

   Phone: +1 514-452-2160
   Email: daniel.migault@ericsson.com


































Migault                  Expires January 9, 2017               [Page 25]