Find enclosed below some review questions from Joe Salowey. I still am researching the answers to questions 1A and 1B, so I have not included a proposal for these yet.

--------------------------------------------------------------------------------------------------------------------------
C. This document should probably reference RFC 3280.

[BA] DONE.

D. I think the last paragraph might not be quite correct:

"... Please note that in the case where the EAP authentication is remoted that
  the EAP server will not reside on the same machine as the
  authenticator, and therefore the name in the EAP server's certificate
  cannot be expected to match that of the intended destination. In this
  case, a more appropriate test might be whether the EAP server's
  certificate is signed by a CA controlling the intended destination
  and whether the EAP server exists within a target sub-domain."

I'm not quite sure what the is meant by "target sub-domain."  In any
case it is important that the peer be able to authorize the server as an
EAP-Server that can authorize the authenticator the peer is connecting
to. This is more than being issued by an organizational CA since that
particular CA may issue certificates for many purposes. There either
needs to be something in the certificate or the peer must have
configuration to be able to perform the authorization.

[BA] How about this?

"  The peer MUST verify the validity of the EAP server certificate, and
  SHOULD also examine the EAP server name presented in the certificate,
  in order to determine whether the EAP server can be trusted.  For
  example, just because a server certificate can chain to a trust
  anchor does not necessarily imply that it is valid for connection to
  a particular network.  As a result, the peer may also want to test
  whether the EAP server certificate is signed by a CA controlling the
  destination network and whether the Server-Id matches the format
  expected for that network.  For example, an EAP peer connecting to
  the "EXAMPLE" SSID may wish to check whether the Server-Id matches
  the regular expression "*.example.com", in addition to checking
  wehther the server certificate chains to the example.com CA."

2. Section 2.5 Key Hierarchy

A.  Why is the EMSK broken into two halves?  It should not be as this
implies a particular usage for the EMSK.  It should just be one 64 byte
value.

[BA] Right.  I've removed the mateiral on the "halves" of the EMSK.

B. Does this section tie the implementation of the PRF to 2246?  What if
TLS 1.2 supports a different PRF?

[BA] I've removed the RFC 2246 reference here and also replaced other 2246 references with
RFC 4346 since that obsoletes 2246.

C. This section shows the TLS key hierarchy, shouldn't it show the
EAP-TLS key hierarchy?

[BA]  How about this?

"   In EAP-TLS, the MSK, EMSK and IV are derived from the TLS master
  secret via a one-way function.  This ensures that the TLS master
  secret cannot be derived from the MSK, EMSK or IV unless the one-way
  function (TLS PRF) is broken.  Since the MSK and EMSK are derived
  from the TLS master secret, if the TLS master secret is compromised
  then the MSK and EMSK are also compromised.

  The MSK is divided into two halves, corresponding to the "Peer to
  Authenticator Encryption Key" (Enc- RECV-Key, 32 octets) and
  "Authenticator to Peer Encryption Key" (Enc- SEND-Key, 32 octets).

  The IV is a 64 octet quantity that is a known value; octets 0-31 are
  known as the "Peer to Authenticator IV" or RECV-IV, and Octets 32-63
  are known as the "Authenticator to Peer IV", or SEND-IV.

  EAP-TLS derives exported keying material and parameters as follows:

  MSK(0,63)   = TLS-PRF-64(TMS, "client EAP encryption",
                   client.random || server.random)
  EMSK(0,63)  = second 64 octets of:
                TLS-PRF-128(TMS, "client EAP encryption",
                   client.random || server.random)
  IV(0,63)    = TLS-PRF-64("", "client EAP encryption",
                   client.random || server.random)


  MSK(0,31)   = Peer to Authenticator Encryption Key (Enc-RECV-Key)
                (MS-MPPE-Recv-Key in [RFC2548]).  Also known as the
                PMK in [IEEE-802.11i].
  MSK(32,63)  = Authenticator to Peer Encryption Key (Enc-SEND-Key)
                (MS-MPPE-Send-Key in [RFC2548])
  IV(0,31)    = Peer to Authenticator Initialization Vector (RECV-IV)
  IV(32,63)   = Authenticator to Peer Initialization vector (SEND-IV)
  Session-Id  = 0x0C || client.random || server.random

  Where:

  IV(W,Z)       = Octets W through Z inclusive of the IV.
  MSK(W,Z)      = Octets W through Z inclusive of the MSK.
  EMSK(W,Z)     = Octets W through Z inclusive of the EMSK.
  TMS           = TLS master_secret
  TLS-PRF-X     = TLS PRF function computed to X octets
  client.random = Nonce generated by the TLS client.
  server.random = Nonce generated by the TLS server.

        |                       | pre_master_secret       |
  server|                       |                         | client
  Random|                       V                         | Random
        |     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+     |
        |     |                                     |     |
        +---->|             master_secret           |<----+
        |     |               (TMS)                 |     |
        |     |                                     |     |
        |     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+     |
        |                       |                         |
        V                       V                         V
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                                                         |
  |                        MSK, EMSK                        |
  |               label == "client EAP encryption"          |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |             |             |
    | MSK(0,31)   | MSK(32,63)  | EMSK(0,63)
    |             |             |
    |             |             |
    V             V             V

     Figure 2 - EAP-TLS Key Hierarchy


  The use of these keys is specific to the lower layer, as described in
  [KEYFRAME] Section 2.1."


3. Section 2.6 Ciphersuite negotiation

A. At the SAAG meeting in IETF 65 Sam brought up an issue with multiple
layers of negotiation with EAP-TLS.  Is there a vulnerability introduced
by multiple levels of negotiation?  Is it possible that an peer or
server will negotiate a weaker authentication method though the
negotiation of TLS ciphersuites than it would through EAP negotiation?

[BA] The recommended ciphersuites are addressed in [B] below. The major vulnerability is a "Type Code" replacement attack which could enable an attacker to force negotiation of one TLS-based EAP method instead of another. This could lead to a downgrade attack where the TLS ciphersuite policies were not uniform (e.g. EAP-TLS requires 2048-bit RSA, whereas PEAP will allow 1024). I will add some text on this vulnerablity, which is enabled because some TLS-based methods share the same key-derivation formula.

B. The draft does not seem to specify which ciphersuites it is intended
to be used with.  Should it?

[BA] RFC 4346 specifies a mandatory-to-implement ciphersuite in the absence of guidance (e.g. RFC 2716 didn't say anything about ciphersuites). How about this?

"2.6.  Ciphersuite and Compression Negotiation

  EAP-TLS implementations need not necessarily support all TLS
  ciphersuites listed in [RFC4346].  Not all TLS ciphersuites are
  supported by available TLS tool kits and licenses may be required in
  some cases.

  To ensure interoperability, EAP-TLS peers and servers MUST support
  the TLS [RFC4346] mandatory-to-implement ciphersuite:

      TLS_RSA_WITH_3DES_EDE_CBC_SHA.

  In addition, EAP-TLS servers SHOULD support and be able to negotiate
  all of the following TLS ciphersuites:

      TLS_RSA_WITH_RC4_128_MD5
      TLS_RSA_WITH_RC4_128_SHA
      TLS_RSA_WITH_AES_128_CBC_SHA

  In addition, EAP-TLS peers SHOULD support at least one of the
  following TLS ciphersuites:

      TLS_RSA_WITH_RC4_128_MD5
      TLS_RSA_WITH_RC4_128_SHA
      TLS_RSA_WITH_AES_128_CBC_SHA

  Since TLS supports ciphersuite negotiation, peers completing the TLS
  negotiation will also have selected a ciphersuite, which includes
  encryption and hashing methods.  Since the ciphersuite negotiated
  within EAP-TLS applies only to the EAP conversation, TLS ciphersuite
  negotiation SHOULD NOT be used to negotiate the ciphersuites used to
  secure data.

  TLS also supports compression as well as ciphersuite negotiation.
  Therefore during the EAP-TLS conversation the endpoints MAY request
  or negotiate TLS compression.  Since compression negotiated within
  EAP-TLS applies only to the EAP conversation, TLS compression
  negotiation MUST NOT be used to negotiate compression mechanisms to
  be applied to data."

4. General

The document should define a Method-ID (for computing session-ID and key
names).  The method ID could be as simple as the concatenation of the
server and client Finished messages. (these hashes contain the Client
and Hello Random's as well as the identities exchanged in the
certificates).

[BA] Here is the text on Session-Id included in draft-ietf-eap-keying-14.txt:

"The EAP-TLS Session-Id is the concatenation of the Expanded EAP Type Code (including the Type, Vendor-Id and Vendor-Type fields defined in [RFC3748] Section 5.7) with the peer and server nonces."

My recommendation is to add the following text to Section 2.5:

"Session-Id = 0x0D || client.random || server.random"

I don't think it necessary makes sense to add the additional zeroes for Vendor-Id and Vendor-Type in this case, since EAP-TLS is allocated from the standard type space, the Session-Id should be unique.



_______________________________________________
Emu mailing list
[email protected]
https://www1.ietf.org/mailman/listinfo/emu

Reply via email to