PPPEXT Working Group                                      Ashwin Palekar
INTERNET-DRAFT                                                 Dan Simon
Category: Standards Track                          Microsoft
   <draft-josefsson-pppext-eap-tls-eap-06.txt> Corporation
<draft-josefsson-pppext-eap-tls-eap-07.txt>                    Glen Zorn
   22 March
26 October 2003                                              Joe Salowey
                                                                Hao Zhou
                                                           Cisco Systems
                                                            S. Josefsson
                                                        Extundo
                                                                  Exundo

                Protected EAP Protocol (PEAP) Version 2

This document is an Internet-Draft and is in full conformance with all
provisions of Section 10 of RFC 2026.

Internet-Drafts are working documents of the Internet Engineering Task
Force (IETF), its areas, and its working groups.  Note that other groups
may also distribute working documents as Internet- Drafts.

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."

The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt

The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html.

Copyright Notice

   Copyright (C) The Internet Society (2002). (2003).  All Rights Reserved.

Abstract

   The Extensible Authentication Protocol (EAP), defined in RFC 2284, (EAP) provides for support of
   multiple authentication methods. While EAP
   was originally created for use with PPP, it has since been adopted
   for use with IEEE 802.1X "Network Port Authentication".

   Since its deployment, a number of weaknesses in EAP or some EAP
   protocols have become apparent. These include no per packet
   confidentiality and integrity protection; This document defines the Protected
   Extensible Authentication Protocol (PEAP) Version 2, which results in lack of
   protection to user identity, notification messages or EAP
   negotiation; and sequencing of EAP methods. In addition, there is no
   standardized mechanism for key exchange; no built-in support for
   fragmentation and reassembly; no support for acknowledged
   success/failure indications; provides
   an encrypted and no support for fast reconnect.

   In addition, some authenticated tunnel based on transport layer
   security (TLS) that encapsulates EAP protocols (e.g. like EAP-MD5) are susceptible
   to  dictionary and brute force attacks; do not provide
   confidentiality; do not support server authentication required mechanisms.
   PEAPv2 uses TLS to
   prevent spoofing by protect against rogue servers (gateways), and do not support authenticators, protect
   against various attacks on the
   generation confidentiality and integrity of key strength required for 802.11i.

   By wrapping the
   inner EAP protocol within TLS, Protected EAP (PEAP)
   addresses these deficiencies in EAP or EAP protocols. method exchange and provide EAP method(s)
   running within PEAP are provided with built-in peer identity privacy.
   PEAPv2 also provides support for

   Privacy of user identity.
   Protection to individual EAP methods. For example, protection can
   provide dictionary attack resistance to protocols susceptible to
   that attack.
   Protected EAP notification.
   Protected sequencing of chaining multiple EAP methods.
   Protected negotiation.
   Protected mechanisms,
   cryptographic binding between authentications performed by inner EAP header.
   Protected
   mechanisms and the tunnel, exchange of arbitrary parameters (TLVs) between client and server.
   Standardized mechanism for key exchange.
   Proven key derivation and management.
   Session resumption.
   Server authentication.
   Protected Acknowledged (TLVs),
   optimized session resumption, and result exchange.
   Fragmentation fragmentation and reassembly.

Table of Contents

   Protected EAP Protocol (PEAP)......................................1

1.   Introduction.................................................3
   1.1.     Introduction ..........................................    4
   1.1       Requirements language.......................................5
   1.2.   Terminology.................................................5
   1.3. language ...........................    6
   1.2       Terminology .....................................    6
   1.3       Operational model...........................................6 model ...............................    8
2.     Protocol overview............................................7
   2.1.   PEAP overview .....................................   11
   2.1        PEAPv2 Part 1.................................................8
   2.2.   PEAP 1 ..................................   11
   2.2        PEAPv2 Part 2................................................11
   2.3.   Version negotiation........................................12
   2.4.   Termination................................................12
   2.5. 2 ..................................   16
   2.3        Error handling.............................................14
   2.6.   Retry behavior.............................................15
   2.7.   Session resumption.........................................15
   2.8.   Fragmentation..............................................16
   2.9. handling .................................   19
   2.4        Fragmentation ..................................   21
   2.5        Key derivation.............................................17
   2.10. derivation .................................   22
   2.6        Ciphersuite negotiation....................................18 negotiation ........................   24
3.      Detailed description of the PEAP protocol...................18
   3.1.   PEAP PEAPv2 protocol ..........   25
   3.1        PEAPv2 Packet Format.........................................18
   3.2.   PEAP Format ...........................   25
   3.2        PEAPv2 Request Packet........................................20 Packet ..........................   26
   3.3        PEAPv2 Response Packet .........................   28
   3.4        PEAPv2 Part 2 Packet Format  ...................   29
4.      EAP TLV method..............................................23
   4.1.   Protected success/failure..................................23
   4.2. method .......................................   30
   4.1        EAP-TLV Request Packet.....................................25
   4.3. packet .........................   30
   4.2        EAP-TLV Response Packet....................................25
   4.4.   EAP-TLV packet ......,,................   31
   4.3        TLV format.........................................26
   4.5. format .....................................   32
   4.4        Result TLV.................................................27
   4.6. TLV .....................................   33
   4.5        NAK TLV....................................................28 TLV ........................................   34
   4.6        Crypto-Binding TLV .............................   35
   4.7        Connection-Binding TLV .........................   37
   4.8        Vendor-Specific TLV ............................   38
   4.9        URI TLV ........................................   39
   4.10       EAP Payload TLV ................................   40
   4.11       Intermediate Result TLV ........................   41
   4.12       TLV Rules ......................................   42
5.      Security Considerations.....................................28
   5.1. considerations ..............................   43
   5.1        Authentication and integrity protection....................28
   5.2. protection ........   43
   5.2        Method negotiation.........................................29
   5.3. negotiation .............................   44
   5.3        TLS session cache handling.................................29
   5.4. handling .....................   44
   5.4        Certificate revocation.....................................30
   5.5. revocation .........................   45
   5.5        Separation of the EAP server and the authenticator.........31
   5.6. authenticator .....   46
   5.6        Separation of PEAP PEAPv2 Part 1 and Part 2 Servers...............31
   5.7. Servers .   47
   5.7        Identity verification......................................32
   5.8. verification ..........................   48
   5.8        Man-in-the-middle protection...............................34 attack protection ............   50
   5.9        Cleartext forgeries ............................   50
   5.10       TLS Ciphersuites ...............................   51
   5.11       Denial of service attacks ......................   51
   5.12       Security Claims ................................   52

6.       IANA Considerations.........................................35
   6.1. Considerations .................................   53
   6.1        Definition of Terms........................................35
   6.2. Terms ............................   53
   6.2        Recommended Registration Policies..........................35 Policies ..............   53
7.       References ..........................................   53
   7.1        Normative references........................................35
   8. references ...........................   53
   7.2        Informative references......................................36
   9. references .........................   54
Appendix A - Examples.......................................37
   10.   and Contributions..........................................49
   11. Examples ........................................   56
Acknowledgments ..............................................   70
Author's Addresses ...........................................   70
Intellectual Property Statement.............................50
   12. Statement ..............................   71
Full Copyright Statement....................................51 Statement .....................................   72
1.  Introduction

   The Extensible Authentication Protocol (EAP), described defined in
   [RFC2284],
   [RFC2284bis], provides a standard mechanism for support of multiple authentication
   methods.  Through the use of EAP, support for a
   number of authentication schemes may be added, including smart
   cards, Kerberos, Public Key, One Time Passwords, and others. EAP was developed or for use on wired networks, where physical
   security was presumed. EAP over PPP, defined in [RFC2284], [RFC2284bis], is
   typically deployed with leased lines or modem connections, requiring
   an attacker to gain access to the telephone network in order to snoop
   on the conversation or inject packets.  [IEEE8021X] defines EAP over
   IEEE 802 local area networks(EAPOL), presuming the existence of
   switched media; in order to snoop or inject packets, an attacker
   would need to gain administrative access to the switch.  Due to the
   presumption of physical security, facilities for protection of the
   EAP conversation were not provided. Where an attacker can easily gain
   access to the medium (such as on a wireless network or where EAP is
   run over IP), the presumption of physical security is no longer
   valid.

   Since the its deployment, a number of weaknesses in EAP framework have
   become apparent.  These include lack of:

      identity protection
      protected method negotiation is unprotected, an attacker can inject packets in order
   to cause the negotiation of a method with lesser security. Denial
      protected notification messages
      protected termination messages
      support for sequences of
   service attacks are also possible. Since the initial EAP Identity
   Request/Response methods
      support for fragmentation and reassembly
      support for a generic way to exchange is sent arbitrary
         parameters in the clear, an attacker snooping
   on the conversation can collect user identities a secure channel
      support for use in
   subsequent attacks. generic optimized re-authentication

   In addition many EAP methods lack the following features:

      mutual authentication
      resistance to dictionary attacks
      adequate key generation

   By initially negotiating a TLS channel, and then conducting wrapping the EAP
   conversation protocol within it, PEAP TLS, Protected EAP (PEAP) Version
   2 addresses these deficiencies in EAP or EAP methods.  TLS provides for
   per-packet encryption, authentication, integrity and replay
   protection of the EAP conversation.  Benefits of PEAP Version 2
   include:

Identity protection
     By encrypting the identity exchange, and allowing client
      credentials
     certificates to be provided after negotiation of the TLS channel,
      PEAP
     PEAPv2 provides for identity protection.

Dictionary attack resistance
     By conducting the EAP conversation within a TLS channel, PEAP PEAPv2
     protects EAP methods that might be subject to an offline dictionary
     attack were they to be conducted in the clear.

Protected negotiation
     Since within PEAP, PEAPv2, the EAP conversation is authenticated,
     integrity and replay protected on a per-packet basis, the EAP
     method negotiation that occurs within PEAP PEAPv2 is protected, as are
     error messages sent within the TLS channel (TLS alerts or EAP
     Notification packets).  EAP negotiation outside of PEAPv2 is not
     protected.

Header protection
     Within PEAP, PEAPv2, the EAP conversation is conducted within a TLS
     channel.  As a result, the Type-Data field within PEAPv2 (including
     the EAP header of the EAP method within PEAPv2) is protected
     against modification.  However, the EAP header of PEAPv2  itself is
     not protected against modification, including the Code, Identifier
     and Type fields.

Protected termination
     By sending success/failure indications within the TLS channel,
      PEAP
     PEAPv2 provides support for protected termination of the EAP
     conversation.  This prevents an attacker from carrying out denial
     of service attacks by spoofing EAP Failure messages, or fooling the
     EAP peer into accepting a rogue NAS, by spoofing EAP Success
     messages.

Fragmentation and Reassembly
     Since EAP does not include support for fragmentation and
     reassembly, individual methods need to include this capability.  By
     including support for fragmentation and reassembly within
      PEAP,methods PEAPv2,
     methods leveraging PEAP PEAPv2 do not need to support this on their own.

Fast reconnect
     Where EAP is used for authentication in wireless networks, the
     authentication latency is a concern.  As a result, it is valuable
     to be able to do a quick re-authentication on roaming between
     access points. PEAP PEAPv2 supports this capability by leveraging the
     TLS session resumption facility, and any EAP method running under
      PEAP
     PEAPv2 can take advantage of it.

      Proven and Method independent

Standard key management establishment
     In order to provide keying material for a wide range of link layer
     ciphersuites, EAP methods need to provide a key hierarchy
      generating authentication and encryption keys, as well as
      initialization vectors. Development of a secure key hierarchy keying material.  Key
     derivation is
      complex, and not easy to generalize complex.  PEAPv2 provides for all EAP methods.  By key establishment by
     relying on the widely implemented and well-reviewed TLS [RFC2246]
     key derivation method,
      PEAP mechanism.  PEAPv2 provides the required keying material for any
     EAP method running within it. This frees EAP method developments from
      creating keying material with key strength required for 802.11i
      wireless LAN.  If EAP methods will also be deployed
     without the external protection of PEAP (e.g PEAPv2 or IPSEC, IPSec), then the EAP
     methods should derive
      key material of sufficient strength follow the guidelines in section 6.8 to prevent a Man-in-the-
      middle attack described in the compound binding draft
      [CompoundBinding].
     man-in-the-middle attacks.

Sequencing of multiple EAP methods
     In order to enhance security, PEAPv2 implementations may choose to
     provide multi-factor authentication that validates different
     identities (for example user and machine identities) and/or uses
     different credentials of the same or different identities of the
     peer (e.g.  user password and machine cert).  PEAPv2 provides a
     standard way to chain different types of authentication mechanisms
     supporting different types of credentials.

Protected exchange of arbitrary parameters (TLVs)
     Type-Length-Value (TLV) tuples provide a way to exchange arbitrary
     information between peer and EAP server within a secure channel.
     This information can include signaling parameters for EAP protocol,
     provisioning parameters, media specific and environment specific
     data, and authorization parameters.  The advantage of using PEAP
     TLVs is that every EAP method does not have to be modified.

1.1.  Requirements language

   In this document, the key words "MAY", "MUST,  "MUST  NOT",
   "OPTIONAL", "RECOMMENDED",  "SHOULD",  and  "SHOULD  NOT",  are to be
   interpreted as described in [RFC2119].

1.2.  Terminology

   This document frequently uses the following terms:

Access Point
     A Network Access Server implementing 802.11.

Authenticator
     The end of the link requiring the initiating EAP authentication.  This term is
     also used in [IEEE8021X] and has the same meaning in this document.

Backend Authentication Server
         An Authentication Server
     A backend authentication server is an entity that provides an
         Authentication Service
     authentication service to an NAS. This service verifies from
         the credentials provided by the peer, the claim of identity
         made by Authenticator.  When used, this server
     typically executes EAP methods for the peer. Authenticator.  This
     terminology is also used in [IEEE8021X].

EAP server
     The EAP server is the entity that terminates the EAP
         conversation authentication method with the
     peer. The  In the case where no backend authentication server is used,
     the EAP server may reside is part of the Authenticator.  In the case where the
     authenticator operates in pass-through mode, the EAP server is
     located on the
         NAS, or alternatively within a backend authentication server.

Link layer ciphersuite
     The ciphersuite negotiated for use at the link layer.

   Master key
         The key derived between the EAP client and EAP server during
         the EAP authentication process.

   Master session key
         The keys derived from the master key are subsequently
         used in generation of the transient session keys for
         authentication, encryption, binding exchange, and
         IV-generation.

NAS  Short for "Network Access Server".

Peer The other end of the point-to-point link (PPP),
         point-to-point LAN segment (IEEE 802.1X) or 802.11
         wireless link, which is being authenticated by that responds to the NAS. authenticator.  In IEEE 802.1X,
     [IEEE8021X], this end is known as the Supplicant.

TLS Ciphersuite
     The ciphersuite negotiated for protection of the PEAP PEAPv2 Part 2
     conversation.

EAP Master key (MK)
     A key derived between the PEAPv2 client and server during the
     authentication conversation, and that is kept local to PEAPv2 and
     not exported or made available to a third party.

Master Session Key (MSK)
     Keying material (64 octets) that is derived between the PEAPv2
     client and server and exported by the PEAPv2 implementation.

AAA-Key
     Where a backend authentication server is present, acting as an EAP
     server,  keying material known as the AAA-Key is transported from
     the authentication server to the authenticator.  The AAA-Key is
     used by the EAP peer and authenticator in the derivation of
     Transient session keys Session Keys (TSKs) for the ciphersuite negotiated
     between the EAP peer and authenticator.  As a result, the AAA-Key
     is typically known by all parties in the EAP exchange: the peer,
     authenticator and the authentication server (if present).

Extended Master Session Key (EMSK)
     Additional keying material (64 octets) derived between the EAP
     client and server that is exported by the EAP method.  The transient session keys are EMSK is
     known only to the EAP peer and server and is not provided to a
     third party.

Initialization Vector (IV)
     A 64 octet quantity, suitable for use in an initialization vector
     field, that is derived from between the master session
         keys, EAP client and server.  Since
     the IV is a known value in PEAPv2, it cannot be used by itself for
     computation of any quantity that needs to remain secret.  As a
     result, PEAPv2 implementations are not required to generate it.

Pairwise Master Key (PMK)
     The AAA-Key is divided into two halves, the "Peer to Authenticator
     Encryption Key" (Enc-RECV-Key) and "Authenticator to Peer
     Encryption Key" (Enc-SEND-Key) (reception is defined from the point
     of view of the appropriate size authenticator).  Within [IEEE80211i] Octets 0-31 of
     the AAA-Key (Enc-RECV-Key) are known as the Pairwise Master Key
     (PMK).

Transient EAP Keys (TEKs)
     Session keys which are used to establish a protected channel
     between the EAP peer and type server during the EAP authentication
     exchange.  The TEKs are appropriate for use with the chosen link layer ciphersuite. ciphersuite
     negotiated between EAP peer and server for use in protecting the
     EAP conversation.  Note that the ciphersuite used to set up the
     protected channel between the EAP peer and server during EAP
     authentication is unrelated to the ciphersuite used to subsequently
     protect data sent between the EAP peer and Authenticator.

TLV  TLV standards for objects of format Type-Length-Value.  The TLV
     format is defined in Section 4 of this document.

1.3.  Operational model

   In EAP, the EAP server may be implemented either within a Network
   Access Server (NAS) or on a backend authentication server.  Where the
   EAP server resides on a NAS, the NAS is required to implement the
   desired EAP methods, and therefore needs to be upgraded to support
   each new EAP method.

   One of the goals of EAP is to enable development of new
   authentication methods without requiring deployment of new code on
   the Network Access Server (NAS).  Where a backend authentication
   server is deployed, the NAS acts as a "passthrough" and need not
   understand specific EAP methods.

   This allows new EAP methods to be deployed on the EAP peer and
   backend authentication server, without the need to upgrade code
   residing on the NAS.

   Figure 1 describes the relationship between the EAP peer, NAS and EAP
   server.  As described in the figure, the EAP conversation occurs
   between the EAP peer and EAP server, "passing through" the NAS.  In
   order for the conversation to proceed in the case where the NAS and
   EAP server reside on separate machines, the NAS and EAP server need
   to establish trust beforehand.

   In PEAP, the conversation between the EAP peer and the EAP server is
   encrypted, authenticated, integrity and replay protected within a
   TLS channel, and mutual authentication is required between the EAP
   peer and the EAP server.

   As a result, where the NAS acts as a "passthrough" it does not have
   knowledge of the TLS master secret derived between the EAP Peer and
   the EAP server. In order to provide keying material for link-layer
   ciphersuites, the NAS obtains the master session keys, which are
   derived from the TLS master secret via a one-way function. This
   enables the NAS and EAP peer to derive keys suitable for encrypting,
   authenticating and integrity protecting session data. However, the
   NAS cannot decrypt the PEAP conversation or spoof session
   resumption, since this requires knowledge of the TLS master secret.

   +-+-+-+-+-+               +-+-+-+-+-+
   |         |               |         |
   | Link    |               | Link    |
   | Layer   |               | Layer   |
   | Cipher- |               | Cipher- |
   | Suite   |               | Suite   |
   |         |               |         |
   +-+-+-+-+-+               +-+-+-+-+-+
       ^                         ^
       |                         |
       |                         |
       |                         |
       V                         V
   +-+-+-+-+-+               +-+-+-+-+-+  Trust +-+-+-+-+-+
   |         |  EAP          |         |<======>|         |
   |         |  Conversation |         |        |         |
   | EAP     |<================================>|  EAP    |
   | Peer    |  (over PPP,   |   NAS   |        |  Server |
   |         |  802.11,etc.) |         |<=======|         |
   |         |               |         |  Keys  |         |
   |         |               |         |        |         |
   +-+-+-+-+-+               +-+-+-+-+-+        +-+-+-+-+-+
       ^                                            ^
       |                                            |
       | EAP API                                    | EAP API
       |                                            |
       V                                            V
   +-+-+-+-+-+                                  +-+-+-+-+-+
   |         |                                  |         |
   |         |                                  |         |
   |  EAP    |                                  |  EAP    |
   |  Method |                                  |  Method |
   |         |                                  |         |
   +-+-+-+-+-+                                  +-+-+-+-+-+

   Figure 1 - Relationship between EAP client, backend authentication
              server and NAS.

   In PEAPv2, the conversation between the EAP peer and the EAP server
   is encrypted, authenticated, integrity and replay protected within a
   TLS channel.

   As a result, where the NAS acts as a "passthrough" it does not have
   knowledge of the TLS master secret derived between the peer and the
   EAP server.  In order to provide keying material for link-layer
   ciphersuites, the NAS obtains the master session key, which is
   derived from a one-way function of the TLS master secret as well as
   keying material provided by EAP methods protected within a TLS
   channel.  This enables the NAS and EAP peer to subsequently derive
   transient session keys suitable for encrypting, authenticating and
   integrity protecting session data.  However, the NAS cannot decrypt
   the PEAPv2 conversation or spoof session resumption, since this
   requires knowledge of the TLS master secret.

1.3.1.  Sequences

   EAP [RFC2284bis] prohibits use of multiple authentication methods
   within a single EAP conversation, except when tunneled methods such
   as PEAPv2 are used.  This restriction was imposed in order to limit
   vulnerabilities to man-in-the-middle attacks as well as to ensure
   compatibility with existing EAP implementations.

   Within PEAP these concerns are addressed since PEAPv2 includes
   support for cryptographic binding to address man-in-the-middle
   attacks, as well as version negotiation so as to enable backward
   compatibility with prior versions of PEAP.

   Within this document, the term "sequence" refers to a series of EAP
   authentication methods run in sequence.  The methods need not be
   distinct - for example, EAP-TLS could be run initially with machine
   credentials followed by the same protocol authenticating with user
   credentials.

   PEAPv2 supports two types of sequences:

[1]  Serial authentication. Initiating additional EAP method(s) after a
     first successful authentication.  In this case the sequence is
     successful if each of the EAP authentication methods completes
     successfully.  For example, successful authentication might require
     a successful machine authentication followed by a successful user
     authentication.

[2]  Parallel authentication. Initiating an alternative EAP method after
     failure of one or more initial methods.  In this case the overall
     authentication is successful if any of the methods is successful.
     For example, if machine authentication fails, then user
     authentication can be attempted.

2.  Protocol overview

   Protected EAP (PEAP) Version 2 is comprised of a two-part
   conversation:

[1]  In Part 1, a TLS session is negotiated, with server authenticating
     to the client and optionally the client to the server.  The
     negotiated key is then used to encrypt the rest of the
     conversation.

[2]  In Part 2, within the TLS session, a complete zero or more EAP conversation
        is methods are
     carried out, unless part 1 provided client authentication. out.  Part 2 completes with a success/failure indication
     protected by the TLS session or a protected error (TLS alert).

   In the next two sections, we provide an overview of each of the parts
   of the PEAP PEAPv2 conversation.

2.1. PEAP  PEAPv2 Part 1

2.1.1.  Initial identity exchange

   The PEAP conversation typically begins with an optional identity
   exchange.  The authenticator will typically send an EAP-
   Request/Identity packet to the peer, and the peer will respond with
   an EAP-Response/Identity packet to the authenticator, containing the
   peer's EAP-ID.  Since the authenticator.

   The initial identity exchange is used primarily to route the EAP
   conversation to the EAP server, if server.  Since the initial identity exchange
   is in the clear, the peer MAY decide to place a routing realm instead
   of its real name in the EAP-Response/Identity.  The real identity of
   the peer can be established later in PEAPv2 part 2.

   If the EAP server is known in advance (such as when all users
   authenticate against the same backend server infrastructure and
   roaming is not supported), or if the identity is otherwise determined
   (such as from the dialing phone number or client MAC address), then
   the identity EAP-Request/Response-identity exchange MAY be omitted.

   Once the optional initial Identity Request/Response exchange is
   completed, while nominally the EAP conversation occurs between the
   authenticator and the peer, the authenticator MAY act as a
   passthrough device, with the EAP packets received from the peer being
   encapsulated for transmission to a backend authentication server.
   However, PEAP does not require a backend authentication server; if
   the authenticator implements PEAP and is provisioned with
   the appropriate certificates, PEAP, then it can authenticate local
   users.

   In the discussion that follows, we will use the term "EAP server" to
   denote the ultimate endpoint conversing with the peer.

2.1.2.  TLS Session Establishment

   In this section, the protocol is described assuming a certificate
   based ciphersuite is negotiated in TLS.  The conversation may
   slightly differ if other TLS ciphersuites are used.

   Once having received the peer's Identity, and determined that PEAP
   authentication is to occur, the EAP server MUST respond with a
   PEAP/Start packet, which is an EAP-Request packet with EAP-
   Type=PEAP,the EAP-Type=PEAP,
   the Start (S) bit set, the PEAP version as specified in  Section
   2.1.5, and no data.  Assuming that the peer supports PEAP, the PEAP
   conversation will then begin, with the peer sending an EAP-Response
   packet with EAP-Type=PEAP.

   The data field of the EAP-Response packet will encapsulate one or
   more TLS records in TLS record layer format, containing a TLS
   client_hello handshake message.  The current cipher spec for the TLS
   records will be TLS_NULL_WITH_NULL_NULL and null compression.  This
   current cipher spec remains the same until the change_cipher_spec
   message signals that subsequent records will have the negotiated
   attributes for the remainder of the handshake.

   The client_hello message contains the client's TLS version number, a
   sessionId, a random number, and a set of TLS ciphersuites supported
   by the client.  The version offered by the client MUST correspond to
   TLS v1.0 or later.

   The EAP server will then respond with an EAP-Request packet with
   EAP-Type=PEAP. EAP-
   Type=PEAP.  The data field of this packet will encapsulate one or
   more TLS records.  These will contain a TLS server_hello handshake
   message, possibly followed by TLS certificate, server_key_exchange,
   certificate_request, server_hello_done and/or finished handshake
   messages, and/or a TLS change_cipher_spec message.

   Since after the TLS session is established, another complete EAP
   negotiation will occur and the peer will authenticate using a
   secondary mechanism, with PEAP PEAPv2 the client need not authenticate as
   part of TLS session establishment.  As a result, although the EAP-
   Request packet sent by the EAP Server MAY contain a
   certificate_request message, this is not required.

   The certificate_request message indicates that the server desires the
   client to authenticate itself via public key. Typically when the
   EAP server sends a certificate_request message, the intent is to
   complete the PEAP authentication without requiring negotiation of an
   additional EAP method.  However, it  It is valid for the
   server to request a certificate in the server_hello and for the
   client refuse to provide one. In this case, the EAP server MUST require that PEAP
   Part 2 be completed.

   Note that since TLS client certificates are sent in the clear, if
   identity protection is required, then it is possible for the TLS
   authentication to be re-negotiated after the first server
   authentication.  To accomplish this, the server will typically not
   request a certificate in the server_hello, then after the
   server_finished message is sent, and before PEAP part 2, the server
   MAY send a TLS hello_request.  This allows the client to perform
   client authentication by sending a client_hello if it wants to, or
   send a no_renegotiation alert to the server indicating that it wants
   to continue with PEAP part 2 instead.  Assuming that the client
   permits renegotiation by sending a client_hello, then the server will
   respond with server_hello, a certificate and certificate_request
   messages.  The client replies with certificate, client_key_exchange
   and certificate_verify messages.  Since this re-
   negotiation re-negotiation occurs
   within the encrypted TLS channel, it does not reveal client
   certificate details.

   The server_hello handshake message contains a TLS version number,
   another random number, a sessionId, and a TLS ciphersuite.  The
   version offered by the server MUST correspond to TLS v1.0 or later.
   In order to provide confidentiality, integrity and replay
   protection, and authentication, the negotiated TLS ciphersuite MUST
   provide all of these security services.

   If the client's sessionId is null or unrecognized by the server, the
   server MUST choose the sessionId to establish a new session;
   otherwise, the sessionId  will  match  that  offered by the client,
   indicating a resumption of the previously established session with
   that sessionId.  The server will also choose a TLS ciphersuite from
   those offered by the client; if the session matches the client's,
   then the TLS ciphersuite MUST match the one negotiated during the
   handshake protocol execution that established the session.

   PEAP implementations need not necessarily support all TLS
   ciphersuites listed in [RFC2246].  Not all TLS ciphersuites are
   supported by available TLS tool kits and licenses may be required to
   support some TLS ciphersuites (e.g. TLS ciphersuites utilizing the
   IDEA encryption algorithm).

   To ensure interoperability, PEAP peers and Authenticators EAP servers MUST support
   and be able to negotiate the following TLS ciphersuites:

       TLS_RSA_WITH_3DES_EDE_CBC_SHA

   In addition, PEAP peers and EAP servers SHOULD support and be able to
   negotiate the following TLS ciphersuites.

       TLS_RSA_WITH_AES_128_CBC_SHA
       TLS_RSA_WITH_RC4_128_MD5
       TLS_RSA_WITH_RC4_128_SHA
       TLS_RSA_WITH_3DES_EDE_CBC_SHA (FIPS compliant)

   TLS as described in [RFC2246] supports compression as well as
   ciphersuite negotiation.  Therefore during the PEAP PEAPv2 Part 1
   conversation the EAP endpoints MAY request or negotiate TLS
   compression.

2.1.3.  Full handshake

   If the EAP server is not resuming a previously established session,
   and if a ciphersuite based on certificates is used, then it MUST
   include a TLS server_certificate handshake message, and a
   server_hello_done handshake message MUST be the last handshake
   message encapsulated in this EAP-Request packet.

   The certificate message contains a public key certificate chain for
   either a key exchange public key (such as an RSA or Diffie-Hellman
   key exchange public key) or a signature public key (such as an RSA or
   DSS signature public key).  In the latter case, a TLS
   server_key_exchange handshake message MUST also be included to allow
   the key exchange to take place.

   The

   If the preceding server_hello message sent by the EAP server in the
   preceding EAP-Request packet did not indicate the resumption of a
   previous session, then the peer MUST respond to the EAP-Request with
   an EAP-Response packet of EAP-Type=PEAP.  The data field of this
   packet will encapsulate one or more TLS records containing a TLS
   change_cipher_spec message and finished handshake message, and
   possibly certificate, certificate_verify and/or client_key_exchange
   handshake messages.
   If the preceding server_hello message sent by the

   The EAP server in the
   preceding MUST then respond with an EAP-Request packet indicated with EAP-
   Type=PEAP, which includes, in the case of a new TLS session, one or
   more TLS records containing TLS change_cipher_spec, finished
   handshake messages; and the first payload of PEAPv2 part 2.  The
   first payload of PEAPv2 part 2 is sent along with finished handshake
   message to reduce number of round trips.

2.1.4.  Session resumption

   The purpose of the sessionId within the TLS protocol is to allow for
   improved efficiency in the case where a client repeatedly attempts to
   authenticate to an EAP server within a short period of time.  This
   capability is particularly useful for support of wireless roaming.

   It is left up to the peer whether to attempt to continue a previous
   session, thus shortening the PEAP Part 1 conversation.  Typically the
   peer's decision will be made based on the time elapsed since the
   previous authentication attempt to that EAP server.

   Based on the sessionId chosen by the peer, and the time elapsed since
   the previous authentication, the EAP server will decide whether to
   allow the continuation, or whether to choose a new session.

   In the case where the EAP server and the authenticator reside on the
   same device, then the client will only be able to continue sessions
   when connecting to the same NAS or channel server.  Should these
   devices be set up in a rotary or round-robin then it may not be
   possible for the peer to know in advance the authenticator it will be
   connecting to, and therefore which sessionId to attempt to reuse.  As
   a result, it is likely that the continuation attempt will fail.

   In the case where the EAP authentication is remoted then continuation
   is much more likely to be successful, since multiple NAS devices and
   channel servers will remote their EAP authentications to the same
   backend authentication server.

   If the EAP server is resuming a previously established session, then
   it MUST send include only the a TLS change_cipher_spec message and a TLS
   finished handshake messages. message after the server_hello message.  The
   finished message contains the peer's EAP server's authentication response to
   the EAP server. peer.

   If the preceding server_hello message sent by the EAP server in the
   preceding EAP-Request packet did not indicate indicated the resumption of a previous
   session, then the peer MUST send, in addition to send only the change_cipher_spec and
   finished messages, a client_key_exchange
   message, which completes the exchange of a shared master secret
   between handshake messages.  The finished message contains the peer and
   peer's authentication response to the EAP server. The EAP server MUST then respond with an EAP-Request packet with
   EAP-Type=PEAP, which includes, in the case of a new TLS session, one
   or more TLS records containing TLS change_cipher_spec and finished
   handshake messages.  The latter contains
   the EAP server's authentication response to the peer. The peer will then
   verify the hash in order to authenticate the EAP server.

   If the EAP server authenticates unsuccessfully, authentication fails, then the peer MAY send an
   EAP-Response packet of EAP-Type=PEAP containing a TLS Alert message
   identifying and EAP-server MUST follow the reason for
   error handling behavior specified in section 2.3.

   Even if the failed authentication. The peer MAY
   send a TLS alert message rather than immediately terminating session is successfully resumed with the
   conversation so as to allow same EAP server,
   the peer and EAP server MUST not assume that either will skip inner
   EAP methods.  The peer may have roamed to log a network which may use the cause
   same EAP server, but may require conformance with a different
   authentication policy.

2.1.5.  Version negotiation

   PEAP packets contain a three bit version field, which enables PEAP
   implementations to be backward compatible with previous versions of
   the
   error for examination by protocol.  This specification documents the system administrator.

   To ensure that PEAP version 2
   protocol; implementations of this specification MUST use a version
   field set to 2.  Version negotiation proceeds as follows:

[1]  In the first EAP-Request sent with EAP Server receives the TLS alert message, type=PEAP, the
   peer EAP server
     MUST wait for set the EAP-Server version field to reply before terminating the
   conversation.  The highest supported version number.

[2]  If the EAP Server peer supports this version of the protocol, it MUST reply
     respond with an EAP-Failure packet
   since server authentication failure is a terminal condition.

   If EAP-Response of EAP type=PEAP, and the version
     number proposed by the EAP server authenticates successfully, server.

[3]  If the EAP peer MUST send does not support this version, it responds with an
     EAP-Response packet of EAP-Type=PEAP, EAP type=PEAP and no data. the highest supported version
     number.

[4]  If the PEAP server does not support the version number proposed by
     the PEAP peer, it terminates the conversation, as described in
     Section 2.2.2.

   The EAP-Server version negotiation procedure guarantees that the EAP peer and
   server will agree to the latest version supported by both parties.
   If version negotiation fails, then continues with Part 2 use of PEAP will not be possible,
   and another mutually acceptable EAP method will need to be negotiated
   if authentication is to proceed.

   The PEAP version field is not protected by TLS and therefore can be
   modified in transit.  In order to detect modification of the PEAP conversation.
   version which could occur as part of a "downgrade" attack,  the
   PEAPv2 peer and server MUST exchange information on the highest
   supported versions proposed by the peers using the crypto-binding-
   TLV.

2.2. PEAP  PEAPv2 Part 2

   The second portion of the PEAP PEAPv2 conversation typically consists of another a
   complete EAP conversation occurring within the TLS session negotiated
   in PEAP PEAPv2 Part 1. It 1; ending with protected termination using the Result-
   TLV.  PEAPv2 part 2 will therefore occur only if establishment of a new TLS
   session in Part 1 is successful or a TLS session is successfully
   resumed in Part 1.

   It  In cases where a new TLS session is established
   in PEAPv2 part 1, the first payload of the part 2 conversation is
   sent by the EAP server along with the finished message to save a
   round-trip.

   Part 2 MUST NOT occur if the EAP Server authenticates unsuccessfully
   or if an EAP-Failure has been sent by the EAP Server server to the peer,
   terminating the conversation.  Since all packets sent within the
   PEAP
   PEAPv2 Part 2 conversation occur after TLS session establishment,
   they are protected using the negotiated TLS ciphersuite.  All EAP
   packets of the EAP conversation in part 2 including the EAP header of
   the inner EAP method are protected using the negotiated TLS
   ciphersuite.

   Part 2 MAY NOT always include a EAP conversation within the TLS
   session, referred to in this document as inner EAP methods.  However,
   Part 2 MUST always end with either protected termination or protected
   error termination.

   Within Part 2, protected EAP conversation and protected termination
   packets are always carried within an EAP-TLV packet.  The EAP-TLV
   packet does not include an EAP header.  There are TLVs defined for
   specific purposes such as carrying EAP-authentication messages and
   carrying cryptographic binding.  New TLVs may be developed for other
   purposes.

2.2.1.  Protected conversation

   Part 2 of the PEAP conversation typically begins with the
   Authenticator EAP server
   sending an optional EAP-Request/Identity packet to the peer,
   protected by the TLS ciphersuite negotiated in PEAP Part 1.  The peer
   responds with an EAP-Response/Identity packet to the authenticator, EAP server,
   containing the peer's userId.  Since this Identity Request/Response
   exchange is protected by the ciphersuite negotiated in TLS, it is protected against not
   vulnerable to snooping or packet modification attacks.

   After the TLS session-protected Identity exchange, the EAP server
   will then select authentication method(s) for the peer, and will send
   an EAP-Request with the EAP-Type Type field set to the initial method.  As
   described in [RFC2284], [RFC2284BIS], the peer can NAK the suggested EAP method,
   suggesting an alternative.  Since the NAK will be sent within the TLS
   channel, it is protected from snooping or packet modification.  As a
   result, an attacker snooping on the exchange will be unable to inject
   NAKs in order to "negotiate down" the authentication method.  An
   attacker will also not be able to determine which EAP method was
   negotiated.

2.3. Version negotiation

   PEAP packets contain a three bit version field, which enables PEAP
   implementations to be backward compatible with previous versions of
   the protocol. Implementations of this specification MUST use a
   version field set to 2.  This specification documents the protocol
   for version 2.

   Version negotiation proceeds as follows:

   [1]  In the first EAP-Request sent with

   The EAP type=PEAP, conversation within the TLS protected session may involve a
   sequence of zero or more EAP
   server MUST set the version field to authentication methods; it completes
   with the highest supported version
   number.

   [2]  If protected termination described in section 2.2.2.  Several
   EAP-TLVs may be included in each Request and Response.  EAP-methods
   (except if the type is EAP-TLV) are always encapsulated within EAP client supports this version of
   Payload-TLV.

   In a typical EAP conversation, the protocol, it
   MUST respond with an EAP-Response result of EAP type=PEAP, and the version
   number proposed conversation is
   communicated by the sending EAP server.

   [3]  If Success or EAP Failure packets after the
   EAP client does not support this version, it responds
   with an EAP-Response of method is complete.  The EAP type=PEAP and Success or Failure packet is
   considered the highest supported
   version number.

   [4]  If last packet of the EAP server supports the version proposed by the client,
   then all future EAP-Request packets conversation; and therefore
   cannot be used when sequences need to be supported.  Hence, instead
   of using the EAP-success or EAP-failure packet, both peer and EAP type=PEAP
   server MUST include use the version field set Intermediate Result TLV to communicate the agreed upon version number. Similarly,
   result.

   In a typical EAP conversation, the EAP client MUST include Success or EAP Failure is
   considered the agreed upon version number in all
   EAP-Response packets last packet of the EAP type=PEAP.

   [5]  If conversation.  Within PEAP, the PEAP
   EAP server does not support can start another EAP method after success or failure of
   the version number proposed
   by previous EAP method inside the PEAP client, it terminates protected session.

   In a sequence of more than one EAP authentication method, to make
   sure the conversation, as described same parties are involved in
   Section 2.4.

   This version tunnel establishment and
   successful completion of previous inner EAP methods, before
   completing negotiation procedure guarantees that of the next EAP client method, both peer and EAP
   server will agree to the latest version supported by both
   parties. If version negotiation fails, then MUST use of PEAP will not be
   possible, and another mutually acceptable crypto binding (Crypto-Binding TLV).  If no EAP method will need to be
   methods have been negotiated if authentication is to proceed. In order to protect
   against a downgrade version attack between PEAP versions support by inside the peers, tunnel or no EAP methods have
   been successfully completed inside the peers MUST exchange information on tunnel, the highest
   version number supported during crypto-binding TLV
   MUST NOT be used.

   The Crypto-Binding TLV and the binding exchange.

2.4. Termination
   As described in [RFC2284], Intermediate-Result TLV MUST be sent
   after each successful EAP Success and Failure packets method (except for type EAP-TLV).  If these
   TLVs are not
   authenticated, so that they may sent, it should be forged considered as tunnel compromise error
   by an attacker without
   fear of detection.  Forged peer and EAP Failure packets server.

   Both TLVs can be used to
   convince sent in an EAP-TLV packet.  Alternatively, if a
   subsequent EAP peer conversation is being attempted, then in order to disconnect.  Forged EAP Success packets may
   reduce round trips, both TLVs SHOULD be used by a rogue NAS to convince a peer to let itself access the
   network, even though sent in the NAS has not authenticated itself.

   By requiring mutual authentication and by supporting encrypted,
   authenticated and integrity protected success/failure indications,
   (described below as "protected" indications) PEAP provides
   protection against these attacks. Within PEAP, protected
   success/failure indications are supported by sending these
   indications within EAP-Payload of
   the TLS channel.

   PEAP support for protected success/failure indications is
   constrained by first EAP packet of the [RFC2284] and [IEEE8021X] specifications. In
   [IEEE8021X], next EAP conversation (for example, EAP-
   Identity or EAP-packet of the authenticator "manufactures" cleartext EAP Success
   and Failure packets based on method).  Alternatively, if the result indicated by
   next packet is the backend
   authentication server. As a result, were a PEAP server termination packet, then in order to send a
   protected EAP Success or EAP Failure packet as reduce
   round trips, both TLVs SHOULD be sent with the final packet
   within termination packet.

   If the EAP exchange, authenticators compliant with [IEEE8021X]
   would silently discard server sends a valid Crypto-Binding-TLV to the packet, and replace it peer, the
   peer MUST respond with a cleartext
   EAP Success or Failure.  Since Crypto-Binding TLV.  If the client will discard these
   unprotected indications, where an authenticator compliant with
   [IEEE8021X] Crypto-Binding-
   TLV is present, invalid, it is not should be possible to conclude a
   successful authentication.  As considered a result, this approach tunnel compromise error by
   the peer.  If the peer does not
   provide reliable authenticated success/failure indications on all
   media.

   In addition, [RFC2284] states that an EAP Success or EAP Failure respond with a EAP-TLV packet terminates the EAP conversation, so that no response is
   possible. Since EAP Success and EAP Failure packets are not
   retransmitted, if
   containing the final packet is lost, then authentication will
   fail. As crypto-binding TLV, it should be considered a result, where packet loss tunnel
   compromise error by the EAP server.

2.2.2.  Protected Termination

   The PEAPv2 part 2 conversation is expected to be non-
   negligible, unacknowledged completed by an exchange of
   success/failure indications lack
   robustness.

   As a result, a PEAP server SHOULD NOT send (Result-TLV) within a protected EAP Success
   or EAP Failure EAP-TLV packet as
   protected by the final packet within a PEAP
   conversation. However, in TLS session.

   If the spirit of being "conservative in what
   you send, liberal in what you receive", a PEAP client SHOULD accept Crypto-Binding TLV and process such a packet if it is received. This behavior makes it
   possible for implementations to save a round-trip (improving the
   performance of fast reconnect), assuming that the authentication
   occurs within a low packet loss environment Intermediate-Result TLV have NOT
   been exchanged in which "manufacture"
   of packets is guaranteed not to occur.

   Instead, EAP servers MUST utilize the acknowledged and protected
   success/failure indications defined previous conversation, then they MUST be
   present in Section 4. In this approach, the PEAP server sends the success/failure indication as an EAP-
   Request with type=33 (EAP TLV), protected indication packet.  Otherwise, it should be
   considered a tunnel compromise error by the peer and EAP server.

   The Result TLV is sent within the TLS channel.  The PEAP client then
   replies with a protected success/failure
   indication as an EAP-Response with type=33 (EAP TLV). Result-TLV.  The conversation concludes with the PEAP
   server sending a cleartext success/failure indication.

   Since both sides have already concluded a protected termination
   conversation, this final packet

   The only outcome which should be considered as successful
   authentication is ceremonial.

   Use when an EAP Request of a Type=EAP-TLVs with Result
   TLV of Status=Success, is answered by an EAP Response of Type=EAP-
   TLVs with Result TLV of Status=Success.

   All other combinations (EAP-TLVs Failure, EAP-TLVs Success), (EAP-
   TLVs Failure, EAP-TLVs Failure), (no EAP-TLVs exchange or no
   protected and acknowledged success/failure indication
   provides EAP Success or Failure) should be considered failed
   authentications, both by the PEAP protocol immunity against peer and EAP server.  Once the
   PEAPv2 peer and PEAPv2 server considers them as failed
   authentications, they are the last packets inside the "manufacture" protected
   tunnel.  These are considered failed authentications regardless of
   whether a cleartext success/failure indications mandated by [IEEE8021X].  It
   also enables both sides of EAP Success or EAP Failure packet is subsequently
   sent.

   After the conversation to communicate PEAPv2 server has sent the
   outcome of PEAP mutual authentication, although success indication, the TLS alert
   mechanism already provides this capability peer is
   allowed to some extent.  On refuse to accept a Success message from the
   other hand, this approach requires an extra round-trip, which
   affects PEAPv2 server
   since the performance client's policy may require completion of fast reconnect.

   Once PEAP has been selected as certain EAP
   methods.  If the authentication method, compliant
   PEAP implementations peer wants the server to negotiate EAP methods, it
   MUST silently discard unprotected send the EAP-TLV packet with Result-TLV with Status=Failure.  If
   the success
   indications (e.g. cleartext EAP Success) unless both indication from the PEAP peer
   and EAP server have indicated a successful authentication exchange via contains the mechanism described in Section 4.

   Similarly, once crypto-
   binding TLV, then the TLS channel has been set up, compliant PEAP
   implementations peer MUST silently discard unprotected failure
   indications (e.g. cleartext EAP Failure) unless they are proceeded
   by a protected failure indication. Protected failure indications include a crypto-binding TLV in the TLS alert mechanism, as well
   EAP-TLV response.  If the indication mechanism
   described in Section 4. For example, if a PEAP peer has previously
   received a protected EAP-Request of Type=33 (EAP TLV) does not respond with
   Result=Failure, a EAP-TLV packet
   containing the crypto-binding TLV or if the crypto-binding TLV is
   invalid, it has received should be considered as a protected EAP-Request of
   Type=33 (EAP-TLV) tunnel compromise error by the
   EAP server.

   If the EAP server has set Result-TLV with Result=Success, Status=Success; and responded with a the
   response from the peer is Status=Failure, then the EAP server MUST
   either start another EAP conversation inside the protected EAP-Response of Type=33 (EAP-TLV) channel or
   return Result=TLV with Result=Failure,
   then it will accept Status=Failure without a crypto-binding TLV
   and process Intermediate Result TLV.

   A PEAPv2 tunnel may be nested inside another tunnel, for example,
   PEAPv2 may be negotiated as a cleartext EAP Failure.
   However, if a PEAP peer has previously received method inside a PEAPv2 tunnel.  In
   this case, each tunnel MUST use protected EAP-
   Request of Type=33 (EAP-TLV) termination.

2.3.  Error handling

   Once the peer responds with Result=Success, the first PEAP packet and has responded
   with the EAP server
   receives the first PEAP packet from the peer, both MUST silently
   discard all clear text EAP messages unless both the PEAP peer and
   server have indicated success or failure or an error using a
   protected EAP-Request of Type=33 (EAP-TLV) with
   Result=Success, error or protected termination mechanism.  If the PEAPv2
   tunnel is nested inside another tunnel, then an unprotected failure indication MUST the clear text EAP
   messages should be
   silently discarded.

   Prior to establishment accepted after protected termination of all the TLS channel, no keying material
   exists, so that protected success/failure indications are not
   possible. However, within PEAP
   tunnels.  After a failure to establish the TLS
   channel (e.g. failure to verify Fatal alert is received or after protected
   termination is complete, the peer or EAP server certificate) is
   considered an unrecoverable error, so that where this failure has
   occurred, an unprotected failure indication can be safely accepted.

2.5. Error handling should accept clear
   text EAP messages.

   Other than supporting TLS alert messages, PEAP PEAPv2 does not have its
   own error message capabilities.  This is unnecessary since errors in
   the
   PEAP PEAPv2 Part 1 conversation are communicated via TLS alert
   messages, and errors in the PEAP PEAPv2 Part 2 conversation are expected
   to be handled by individual EAP methods.

   If an error occurs at any point in the PEAP conversation, TLS layer, the EAP server
   SHOULD send a TLS alert message instead of the next EAP-request
   packet to the peer.  The EAP server SHOULD send an EAP-Request packet
   with EAP-Type=PEAP, encapsulating a TLS record containing the
   appropriate TLS alert message.  The EAP server SHOULD send a TLS
   alert message rather than immediately terminating the conversation so
   as to allow the peer to inform the user of the cause of the failure
   and possibly allow for a restart of the conversation.  To ensure that
   the peer receives the TLS alert message, the EAP server MUST wait for
   the peer to reply with an EAP-Response packet.

2.6. Retry behavior

   As with other EAP protocols,

   The EAP-Response packet sent by the EAP server is responsible for retry
   behavior. This means that if peer MAY encapsulate a TLS
   client_hello handshake message, in which case the EAP server does not receive a reply
   from the peer, it MUST resend MAY
   allow the EAP-Request for which PEAPv2 conversation to be restarted, or it has not
   yet received MAY contain an EAP-Response. However,
   EAP-Response packet with EAP-Type=PEAP and no data, in which case the peer
   PEAPv2 server MUST NOT resend EAP-
   Response packets without first being prompted by send an EAP-Failure packet, and terminate the
   conversation.

   It is up to the EAP server.

   For example, server whether to allow restarts, and if so, how
   many times the initial PEAP start packet sent by the conversation can be restarted.  An EAP server
   were
   implementing restart capability SHOULD impose a limit on the number
   of restarts, so as to be lost, then protect against denial of service attacks.

   If an error occurs at any point in the TLS layer, the peer would not receive this packet, and
   would not respond to it. As SHOULD
   send a result, TLS alert message instead of the PEAP start next EAP-response packet would be
   resent by to
   the EAP server. Once the  The peer received the PEAP start
   packet, it would SHOULD send an EAP-Response packet with
   EAP-Type=PEAP, encapsulating a TLS record containing the client_hello appropriate
   TLS alert message.  If the EAP-Response were to be lost, then the The EAP server
   would resend the initial PEAP start, and the peer would resend the
   EAP-Response.

   As a result, it is possible that a peer will receive duplicate EAP-
   Request messages, and may send duplicate EAP-Responses.  Both the
   peer and the EAP Server should be engineered to handle this
   possibility.

2.7. Session resumption

   The purpose of restart the sessionId within conversation by
   sending a EAP-Request packet encapsulating the TLS protocol is to allow for
   improved efficiency
   hello_request_handshake message, in the which case where a client repeatedly attempts
   to authenticate to an EAP server within a short period of time. This
   capability is particularly useful for support of wireless roaming.

   It is left up to the peer whether to attempt to continue a previous
   session, thus shortening the PEAP Part 1 conversation. Typically the
   peer's decision will be made based on the time elapsed since MAY allow the
   previous authentication attempt
   PEAPv2 conversation to that EAP server.

   Based on the sessionId chosen by the peer, and the time elapsed
   since the previous authentication, be restarted; or the EAP server will decide
   whether to allow can response
   with EAP Failure.

   Any time the continuation, peer or whether to choose a new
   session.

   In the case where the EAP server and the authenticator reside on the
   same device, then the client will only be able to continue sessions finds an error when connecting to processing
   the same NAS or channel server. Should these
   devices be set up in sequence of exchanges, such a rotary or round-robin then it may not be
   possible for the peer to know in advance the authenticator violation of TLV rules, it will
   be connecting to, and therefore which sessionId to attempt to reuse.
   As should
   send a result, it is likely that the continuation attempt will fail.

   In the case where Result TLV of failure and terminate the EAP authentication is remoted then
   continuation tunnel.  This is much more likely
   usually due to be successful, since multiple
   NAS devices an implementation problem and channel servers will remote their EAP
   authentications to the same backend authentication server.

   If the EAP server is resuming a previously established session, then
   it MUST include only considered an fatal
   error.

   If a TLS change_cipher_spec message and tunnel compromise error (see Section 2.2) is detected by the
   peer, the peer SHOULD send a TLS
   finished handshake message after the server_hello message.  The
   finished Internal Error alert (a Fatal error)
   message contains instead of the EAP server's authentication response next EAP-response packet to the peer.

   After EAP server.
   Similarly, if a session tunnel compromise error is successfully resumed, the EAP-Server starts with
   Part 2 of detected by the PEAP conversation. The peer may have roamed to a
   different network and successfully resumed with same EAP server. The
   peer and
   server, the EAP server MUST not assume that SHOULD send a session resume
   implies either TLS Internal error alert (a
   Fatal error) message instead of them will skip inner EAP methods.

2.8. the next EAP-response packet to the
   peer.

2.4.  Fragmentation

   A single TLS record may be up to 16384 octets in length, but a TLS
   message may span multiple TLS records, and a TLS certificate message
   may in principle be as long as 16MB.  The group of PEAP messages sent
   in a single round may thus be larger than the PPP MTU size, the
   maximum RADIUS packet size of 4096 octets, or even the Multilink
   Maximum Received Reconstructed Unit (MRRU).  As described in [2],
   [RFC1990], the multilink MRRU is negotiated via the Multilink MRRU
   LCP option, which includes an MRRU length field of two octets, and
   thus can support MRRUs as large as 64 KB.

   However, note that in order to protect against reassembly lockup and
   denial of service attacks, it may be desirable for an implementation
   to set a maximum size for one such group of TLS messages.  Since a
   typical certificate chain is rarely longer than a few thousand
   octets, and no other field is likely to be anywhere near as long, a
   reasonable choice of maximum acceptable message length might be 64
   KB.

   If this value is chosen, then fragmentation can be handled via the
   multilink PPP fragmentation mechanisms described in [RFC1990].  While
   this is desirable, EAP methods are used in other applications such as
   [IEEE80211] and there may be cases in which multilink or the MRRU LCP
   option cannot be negotiated.  As a result, a PEAP PEAPv2 implementation
   MUST provide its own support for fragmentation and reassembly.

   Since EAP is an ACK-NAK protocol, fragmentation support can be added
   in a simple manner.  In EAP, fragments that are lost or damaged in
   transit will be retransmitted, and since sequencing information is
   provided by the Identifier field in EAP, there is no need for a
   fragment offset field as is provided in IPv4.

   PEAP

   PEAPv2 fragmentation support is provided through addition of flag
   bits within the EAP-Response and EAP-Request packets, as well as a
   TLS Message Length field of four octets.  Flags include the Length
   included (L), More fragments (M), and PEAP Start (S) bits.  The L
   flag is set to indicate the presence of the four octet TLS Message
   Length field, and MUST be set only for the first fragment of a
   fragmented TLS message or set of messages.

   The TLS Message Length field in the PEAPv2 header is not protected;
   and hence can be modified by a attacker.  The TLS record length in
   the TLS data is protected.  Hence, if TLS Message length received in
   the first packet (with L bit set) is greater or less than the total
   size of TLS data received including multiple fragments, then the TLS
   message length should be ignored.

   A single TLS record may be up to 16384 octets in length, but a TLS
   message may span multiple TLS records, and a TLS certificate message
   may in principle be as long as 16MB.  However, note that in order to
   protect against reassembly lockup and denial of service attacks, it
   may be desirable for an implementation to set a maximum size for one
   such group of TLS messages.  Since a typical certificate chain is
   rarely longer than a few thousand octets, and no other field is
   likely to be anywhere near as long, a reasonable choice of maximum
   acceptable message length might be 64 KB.

   The M flag is set on all but the last fragment.  The S flag is set
   only within the PEAP start message sent from the EAP server to the
   peer.  The TLS Message Length field is four octets, and provides the
   total length of the TLS message or set of messages that is being
   fragmented; this simplifies buffer allocation.

   When a PEAP PEAPv2 peer receives an EAP-Request packet with the M bit set,
   it MUST respond with an EAP-Response with EAP-Type=PEAP and no data.
   This serves as a fragment ACK.  The EAP server MUST wait until it
   receives the EAP-Response before sending another fragment.  In order
   to prevent errors in processing of fragments, the EAP server MUST
   increment the Identifier field for each fragment contained within an
   EAP-Request, and the peer MUST include this Identifier value in the
   fragment ACK contained within the EAP-Response.  Retransmitted
   fragments will contain the same Identifier value.

   Similarly, when the EAP server receives an EAP-Response with the M
   bit set, it MUST respond with an EAP-Request with EAP-Type=PEAP and
   no data. This serves as a fragment ACK.  The EAP peer MUST wait until
   it receives the EAP-Request before sending another fragment.  In
   order to prevent errors in the processing of fragments, the EAP
   server MUST increment the Identifier value for each fragment ACK
   contained within an EAP-Request, and the peer MUST include this
   Identifier value in the subsequent fragment contained within an EAP-
   Response.

2.9.

2.5.  Key derivation

   Since the normal TLS keys are used in the handshake, and therefore
   should not be used in a different context, new keys must be derived
   from the TLS master secret for use with the selected link layer
   ciphersuites.

   In the most general case, keying material must be provided for
   authentication, encryption and initialization vectors (IVs) in each
   direction.

   Since EAP methods may not know the link layer ciphersuite that has
   been negotiated, it may not be possible for them

   Instead of deriving keys specific to provide link layer ciphersuite-specific keys. In addition, attempting to provide
   such keys is undesirable, since it would require the ciphersuites EAP method
   methods provides a Master Session Key (MSK) used to
   be revised each time derive keys in a new
   link layer ciphersuite specific manner.  The method used to extract ciphering
   keys from the MSK is developed. As a
   result, PEAP beyond the scope of this document.

   PEAPv2 also derives master session keys an Extended Master Session Key (EMSK) which can subsequently be
   truncated is
   reserved for use with a particular link layer ciphersuite.  Since
   the truncation algorithms are ciphersuite-specific, they are not
   discussed here; examples of such algorithms are provided in
   [RFC3079]. deriving keys in other ciphering applications.
   This draft also does not discuss the format of the attributes used to
   communicate the master session keys from the backend authentication
   server to the NAS; examples of such attributes are provided in
   [RFC2548].

   PEAPv2 combines key material from the TLS exchange with key material
   from inner key generating EAP methods to provide stronger keys and to
   bind inner authentication mechanisms to the TLS tunnel.  Both the
   peer and EAP server MUST derive master compound MAC and compound session
   keys using the procedure described below.

   The input for the cryptographic binding includes the following:

[a]  The PEAPv2 tunnel key (TK) is calculated using the first 64 octets
     of the (secret) key material generated as described in the compound Session Key derivation EAP-TLS
     algorithm (RFC2716 section (section
   4.2) of 3.5)

[b]  The MSK provided by each successful inner EAP method (should not
     include  the draft Compound Authentication Binding Problem
   [compoundbinding].

   Algorithms 64 octets of EMSK); for each successful EAP method
     completed within the truncation of these encryption and authentication
   master session keys tunnel.

   ISK1..ISKn are specific the MSK portion of the EAP keying material obtained
   from methods 1 to each link layer ciphersuite.
   Link layer ciphersuites in use with PPP include DESEbis [RFC2419],
   3DES [RFC2420] and MPPE [RFC3078]. IEEE 802.11 ciphersuites are
   described n.  In some cases (except in [IEEE80211]. An example the case of how encryption keys the EAP-
   TLV method), where the inner EAP method does not provide keys: ISKi,
   for use
   with MPPE [RFC3078] are derived from some i, may be the null string ("").

   The algorithm uses P_SHA-1 PRF specified in the TLS master specification
   [RFC2246] ("|" denotes concatenation).

   The intermediate combined key is generated after each successful EAP
   method inside the tunnel.

   Generating the intermediate combined key:

   Take the second 32 octets of TK

   IPMK0 = TK

   for j = 1 to k do
       IPMKj = P_SHA1(IPMK(j-1),"Intermediate PEAP MAC key" | ISKj);

   k = the last successful EAP method inside the tunnel at the point
   where the combined MAC key is derived.

   Each IPMKj output is 32 octets.  IPMKn is the intermediate combined
   key used to derive combined session and combined MAC keys.

   Compound MAC Key derivation:

   The Compound MAC Key for the server (the B1_MAC) is derived CMK_B1

   CMK_B1 = P_SHA1(IPMKn,"PEAP Server B1 MAC key" | S_NONCE)

   The Compound MAC Key for the client (the B2_MAC) is derived from MAC
   key called CMK B2.

   CMK_B2 = P_SHA1(IPMKn,"PEAP Client B2 MAC key" | C_NONCE | S_NONCE)

   The compound MAC keys (CMK_B1 and CMK_B2) are each 20 octets long.

   Compound Session Key derivation:

   The compound session key (CSK) is
   given derived on both the peer and EAP
   server after successful completion of protected termination.

   CSK = P_SHA1 (IPMKn, "PEAP compound session key" | C_NONCE | S_NONCE
   | OutputLength)

   The output length of the CSK must be at least 128 bytes.  The first
   64 octets are taken and the MSK and the second 64 octets are taken as
   the EMSK.  The MSK and EMSK are described in [RFC3079].

2.10. [RFC2284bis].

2.6.  Ciphersuite negotiation

   Since TLS supports TLS ciphersuite negotiation, peers completing the
   TLS negotiation will also have selected a TLS ciphersuite, which
   includes key strength, encryption and hashing methods.  However,
   unlike in [RFC2716], within PEAP, PEAPv2, the negotiated TLS ciphersuite
   relates only to the mechanism by which the PEAP PEAPv2 Part 2 conversation
   will be protected, and has no relationship to link layer security
   mechanisms negotiated within the PPP Encryption Control Protocol
   (ECP) [RFC1968] or within IEEE 802.11 [IEEE80211].

   As a result, this specification currently does not support secure
   negotiation of link layer ciphersuites, although this capability may
   be added in future by addition of TLVs to the EAP TLV method defined
   in Section 4.

3.  Detailed description of the PEAP PEAPv2 protocol

3.1. PEAP  PEAPv2 Packet Format

   A summary of the PEAP PEAPv2 Request/Response packet format is shown
   below.  The fields are transmitted from left to right.

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Code      |   Identifier  |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Type      |   Flags | Ver |  Data...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   Code

      1 - Request
      2 - Response

   Identifier

      The Identifier field is one octet and aids in matching responses
      with requests.

   Length

      The Length field is two octets and indicates the length of the EAP
      packet including the Code, Identifier, Length, Type, and Data
      fields.  Octets outside the range of the Length field should be
      treated as Data Link Layer padding and should be ignored on
      reception.

   Type

      25 - PEAP

   Flags

       0 1 2 3 4
      +-+-+-+-+-+
      |L M S R R|
      +-+-+-+-+-+

      L = Length included
      M = More fragments
      S = PEAP start
      R = Reserved (must be zero)
      The L bit (length included) is set to indicate the presence of the
      four octet TLS Message Length field, and MUST be set for the first
      fragment of a fragmented TLS message or set of messages.  The L
      bit MUST NOT be set for other fragments of the same set of
      messages.  The M bit(more fragments) is set on all but the last
      fragment.  The S bit (PEAP start) is set in a PEAP Start message.
      This differentiates the PEAP Start message from a fragment
      acknowledgment.

   Version

       0 1 2
      +-+-+-+
      |R|1|0|
      +-+-+-+

      R = Reserved (must be zero)

   Data

      The format of the Data field is determined by the Code field.

3.2. PEAP  PEAPv2 Request Packet

   A summary of the PEAP PEAPv2 Request packet format is shown below.  The
   fields are transmitted from left to right.

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Code      |   Identifier  |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Type      |   Flags | Ver |      TLS Message Length
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     TLS Message Length        |       TLS Data...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   Code

      1

   Identifier

      The Identifier field is one octet and aids in matching responses
      with requests.  The Identifier field MUST be changed on each
      Request packet.

   Length
      The Length field is two octets and indicates the length of the EAP
      packet including the Code, Identifier, Length, Type, Flags, TLS
      message length and TLS
   Response data fields.

   Type

      25 - PEAP

   Flags

       0 1 2 3 4
      +-+-+-+-+-+
      |L M S R R|
      +-+-+-+-+-+

      L = Length included
      M = More fragments
      S = PEAP start
      R = Reserved (must be zero)

      The L bit (length included) is set to indicate the presence of the
      four octet TLS Message Length field, and MUST be set for the first
      fragment of a fragmented TLS message or set of messages.  The M
      bit(more fragments) is set on all but the last fragment.  The S
      bit (PEAP start) is set in a PEAP Start message.  This
      differentiates the PEAP Start message from a fragment
      acknowledgment.

   Version

       0 1 2
      +-+-+-+
      |R|1|0|
      +-+-+-+

      R = Reserved (must be zero)

   TLS Message Length

      The TLS Message Length field is four octets, and is present only
      if the L bit is set.  This field provides the total length of the
      TLS message or set of messages that is being fragmented.

   TLS data

      The TLS data consists of the encapsulated packet in TLS record
      format.

3.3.  PEAP  PEAPv2 Response Packet

   A summary of the PEAP PEAPv2 Response packet format is shown below.  The
   fields are transmitted from left to right.

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Code      |   Identifier  |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Type      |   Flags   |Ver|      TLS Message Length
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     TLS Message Length        |       TLS Data...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   Code

      2

   Identifier

      The Identifier field is one octet and MUST match the Identifier
      field from the corresponding request.

   Length

      The Length field is two octets and indicates the length of the EAP
      packet including the Code, Identifier, Length, Type, Flags, Ver,
      TLS message length, and TLS data fields.

   Type

      25 - PEAP

   Flags

       0 1 2 3 4
      +-+-+-+-+-+
      |L M S R R|
      +-+-+-+-+-+

      L = Length included
      M = More fragments
      S = PEAP start
      R = Reserved (must be zero)

      The L bit (length included) is set to indicate the presence of the
      four octet TLS Message Length field, and MUST be set for the first
      fragment of a fragmented TLS message or set of messages.  The M
      bit (more fragments) is set on all but the last fragment.  The S
      bit (PEAP start) is set in a PEAP Start message.  This
      differentiates the PEAP Start message from a fragment
      acknowledgment.

   Version

       0 1 2
      +-+-+-+
      |R|1|0|
      +-+-+-+

      R = Reserved (must be zero)

   TLS Message Length

      The TLS Message Length field is four octets, and is present only
      if the L bit is set.  This field provides the total length of the
      TLS message or set of messages that is being fragmented.

   TLS data

      The TLS data consists of the encapsulated TLS packet in TLS record
      format.

4.

3.4.  PEAPv2 Part 2 Packet Format

   The PEAPv2 Part 2 packet format is the same as the PEAPv2 Request and
   Response packet formats described in Sections 3.1 and 3.2, except
   that the TLS Data field encapsulates TLS packets in TLS record
   format, representing encrypted EAP-TLVs.

   Although the EAP-TLV method has been allocated an EAP Type, use of
   this method is prohibited outside of a tunnel by [RFC2284bis].  Since
   EAP-TLVs are self-describing, when transmitted within PEAPv2, the EAP
   header portion of the EAP-TLV packet is absent (including the Code,
   Identifier, Length and Type fields), leaving only a list of  TLVs as
   the payload.

   Within PEAPv2, all inner EAP method packets are encapsulated in EAP-
   TLV format.  The EAP-Payload is an (optional) TLV which encapsulates
   EAP packets (including all EAP header fields) and in addition carries
   TLVs associated with them.

   PEAP Part 2 packet format = EAP-TLV [EAP-Payload TLV [[EAP packet],
   TLVs, ...], TLVs, ...] OR TLS Alert
   The EAP-TLV packet is included without the EAP header fields (Code,
   Identifier, Length, Type)

4.  EAP-TLV method

   The EAP-TLV method is a payload with standard Type-Length-Value (TLV)
   objects.  The TLV objects could be used to carry arbitrary parameters
   between EAP peer and EAP server.  Possible uses for TLV objects
   include: language and character set for Notification messages;
   cryptographic binding; IPv6 MIPv6 Binding Update.

   The EAP peer may not necessarily implement all the TLVs supported by
   the EAP server; and hence to allow for interoperability, the TLV
   method allows a EAP server to discover if a TLV is supported by the
   EAP peer, using the NAK TLV.

   The mandatory bit in a TLV indicates that if the peer MUST understand
   the TLV. A peer can determine that a TLV is unknown when it does not
   support the TLV; or when the TLV is corrupted. The mandatory bit
   does not indicate that the peer successfully applied the value of
   the TLV. The specification of a TLV could define additional
   conditions under which the TLV can be determined to be unknown.

   If an EAP peer finds an unknown TLV which is marked as mandatory; TLV, it MUST indicate send a failure to the EAP server using the NAK TLV; TLV in response; and all the
   other TLVs in the message MUST be ignored.  If an EAP peer finds an unknown
   unsupported TLV which is marked as optional;
   then optional, it MUST ignore the NOT send an NAK
   TLV.

   The EAP mandatory bit does not imply that the peer is not required to inform
   understand the EAP server contents of unknown TLVs which are marked as optional. the TLV.  The appropriate response to a
   supported TLV with content that is not understood is defined by the
   TLV specification.

   If the EAP peer finds that the packet has no TLVs, then it MUST send
   a response with EAP-TLV Response Packet.

   The Response packet may
   contain no TLVs. mandatory bit in a TLV indicates that if the EAP server does not
   support the TLV, it MUST send a NAK TLV in response; otherwise it
   MUST send a protected termination message.  If an EAP server finds an unknown
   unsupported TLV which is marked as mandatory; the other TLVs in the
   message MUST be ignored. The

   An EAP-TLV packet is a EAP server method and within a PEAPv2 tunnel,  it can
   drop the connection
   be sequenced before or send a after any other EAP method. An EAP-TLV request packet with NAK-TLV
   does not have to
   the EAP client.

   Compliant PEAP contain any TLVs nor need it contain any mandatory
   TLVs.

   PEAPv2 implementations MUST support the EAP TLV method, as well as
   processing of mandatory/optional settings on the TLV, the NAK TLV.

   TLVs can be contained/nested in other TLVs.

4.1.  EAP-TLV Request Packet

   A summary of the EAP-TLV Request packet format is a EAP method; shown below.  The
   fields are transmitted from left to right.

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Code      |   Identifier  |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Type      |                  Data....
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   Code

      1

   Identifier

      The Identifier field is one octet and it can aids in matching responses
      with requests.  The Identifier field MUST be sequenced before or after any other changed on each
      Request packet.

   Length

      The Length field is two octets and indicates the length of the EAP method.
      packet including the Code, Identifier, Length, Type, and Data
      fields.

   Type

      33 - EAP-TLV

   Data

      The Data field is of variable length, and contains Type-Length-
      Value tuples (TLVs).

4.2.  EAP-TLV Response Packet

   A summary of the Extension Response packet does not have format is shown below.
   The fields are transmitted from left to contain any right.

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Code      |   Identifier  |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Type      |                  Data....
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   Code
      2

   Identifier

      The Identifier field is one octet and aids in matching responses
      with requests.  The Identifier field MUST be changed on each
      Request packet.

   Length

      The Length field is two octets and indicates the length of the EAP
      packet including the Code, Identifier, Length, Type, and Data
      fields.

   Type

      33 - EAP-TLV

   Data

      The Data field is of variable length, and contains Type-Length-
      Value tuples (TLVs).

4.3.  TLV format

   EAP-TLV TLVs or are defined as follows:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |M|R|            TLV Type       |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                              Value...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   M

      0 - Non-mandatory TLV
      1 - Mandatory TLV

   R

      Reserved, set to zero (0)

   TLV Type

      A 14-bit field, denoting the TLV type. Allocated Types include:

      0 -   Reserved
      1 -   Reserved
      2 -   Reserved
      3 -   RESULT_TLV - Acknowledged Result
      4 -   NAK_TLV
      5 -   Crypto-Binding TLV
      6 -   Connection-Binding TLV
      7 -   Vendor-Specific TLV
      8 -   URI TLV
      9 -   EAP Payload TLV
      10 -  Intermediate Result TLV

   Length

      The length of the Value field in octets.

   Value

      The value of the TLV.

4.4.  Result TLV

   The Result TLV provides support for acknowledged success and failure
   messages within PEAPv2.  PEAPv2 implementations MUST support this
   TLV, which cannot be responded to with a NAK TLV.  If the Status
   field does not
   have contain one of the known values, then the peer or EAP
   server MUST drop the connection.  The Result TLV is defined as
   follows:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |M|R|         TLV Type          |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |             Status            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   M

      1 - Mandatory TLV

   R

      Reserved, set to zero (0)

   TLV Type

      3

   Length

      2

   Status

      The Status field is two octets.  Values include:

      1 - Success
      2 - Failure

4.5.  NAK TLV

   The NAK TLV allows a peer to detect TLVs that are not supported by
   the other peer.  An EAP-TLV packet can contain any mandatory 0 or more NAK TLVs.

4.1. Protected success/failure

   Compliant PEAP
   PEAPv2 implementations MUST support acknowledged protected
   success/failure together this TLV and this TLV cannot be
   responded to with a NAK TLV.  The NAK TLV is defined as follows:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |M|R|         TLV Type          |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          Vendor-Id                            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |            NAK-Type           |           TLVs....
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   M

      1 - Mandatory TLV

   R

      Reserved, set to zero (0)

   TLV Type

      4

   Length

      >=6

   Vendor-Id

      The Vendor-Id field is four octets, and contains the Vendor-Id of
      the TLV that was not supported.  The high-order octet is 0 and the
      low-order 3 octets are the SMI Network Management Private
      Enterprise Code of the Vendor in network byte order.  The Vendor-
      Id field MUST be zero for TLVs that are not Vendor-Specific TLVs.
      For Vendor-Specific TLVs, the Vendor-ID MUST be set to the SMI
      code.

   NAK-Type

      The NAK-Type field is two octets.  The field contains the Type of
      the TLV that was not supported.  A TLV of this Type MUST have been
      included in the previous packet.

   TLVs

      This field contains a list of TLVs, each of which MUST NOT have
      the mandatory bit set.  These optional TLVs can be used in the
      future to communicate why the offending TLV was determined to be
      unsupported.

4.6.  Crypto-binding TLV

   The Crypto-Binding TLV is used prove that both peers participated in
   the sequence of authentications (specifically the TLS session and
   inner EAP methods that generate keys).

   Both the Binding exchange. Request (B1) and Binding Response (B2) use the same
   packet format.  However the Sub-Type indicates whether it is B1 or
   B2.

   The Result Crypto-Binding TLV is MUST be used to indicate success or failure perform Cryptographic Binding
   after each successful EAP method (except EAP-TLV) in a sequence of the PEAP
   tunnel.
   EAP methods is complete in PEAPv2 part 2.  The PEAP tunnel success/failure packet MUST contain a Result
   TLV along with the Cryto-Binding TLV. Crypto-Binding TLV may can
   also be used during Protected Termination.

   The crypto-binding TLV must have the version number received during
   the PEAP version negotiation.  The receiver of the crypto binding TLV
   must verify that the version in other EAP-TLV packets. Result the crypto binding TLV MUST NOT be matches the
   version it sent in packets
   other than during the protected success/failure indication. PEAP version negotiation.  If a CRYPTO BINDING TLV does not exist in a packet that contains
   Result TLV, this check
   fails then the EAP peer TLV is invalid.

   The receiver of the crypto binding TLV must disconnect verify that the connection. subtype
   is not set to any value other than the ones allowed.  If a CRYPTO BINDING TLV this check
   fails validation, then peer must disconnect the connection. Implementations that can delete TLV is invalid.

   This message format is used for the TLS handle MUST
   delete Binding Request (B1) and also the TLS handle. Implementations that keep track of session
   state
   Binding Response. This uses TLV type CRYPTO_BINDING_TLV.  PEAPv2
   implementations MUST ensure that the session handle support this TLV and this TLV cannot be used
   responded to skip
   stage2 authentication.

   When using the Result-TLV, the only outcome which should be
   considered with a NAK TLV.  The format is as successful authentication given below.

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |M|R|         TLV Type          |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Version    |Received Ver.  |         Sub-Type              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   ~                             Nonce                             ~
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   ~                          Compound MAC                         ~
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   M

      1 - Mandatory TLV

   R

      Reserved, set to zero (0)

   TLV Type

      5

   Length

      52

   Version

      The Version field is when an EAP Request a single octet, which is set to the version
      of
   Type=EAP-TLVs with Result crypto binding TLV.  For the crypto-binding TLV of Status=Success defined in this
      specification, It is answered by an
   EAP Response set to zero (0).

   Received Version

      The Received Version field is a single octet and MUST be set to
      the PEAP version number received during version negotiation.  Note
      that this field only provides protection against downgrade attacks
      where a version of Type=EAP-TLVs with Result PEAP requiring support for this TLV of Status=Success.

   If is required
      on both sides (such as PEAPv2 or a more recent version).

   Sub-Type
      The Sub-Type field is two octets.  Possible values include:

      0 - Binding Request
      1 - Binding Response

   Nonce

      The Nonce field is 32 octets.  It contains a 256 bit nonce that is
      temporally unique, used for compound MAC key derivation at each
      end.  This is the EAP server has set Result-TLV with Status=Success; S_NONCE for the B1 message and a C_NONCE for the
   response from
      B2 message.

   Compound MAC

      The Compound MAC field is 16 octets.  This can be the EAP peer Server MAC
      (B1_MAC) or the Client MAC (B2_MAC).  It is Status=Failure, then computed over the server MUST
   either continue EAP conversation
      entire Crypto-Binding TLV attribute using the HMAC-SHA1-128 that
      provides 128 bits of output using the CMK_B1 or return Result=TLV CMK_B2 with
   Status=Failure. This the
      MAC field zeroed out.

4.7.  Connection-Binding TLV

   The Connection-Binding TLV allows EAP peer for connection specific information
   to indicate that it refuses be sent by the peer to
   accept the authentication without negotiating certain auth methods
   as per its policy.

   All other combinations (EAP-TLVs Failure, EAP-TLVs Success), (EAP-
   TLVs Failure, EAP-TLVs Failure), (no EAP-TLVs exchange or no
   protected EAP Success or Failure, no Crypto-Binding TLVs, crypto-
   binding AAA server.  This TLV validation is not successful) should be considered
   failed authentications, both logged
   by the PEAP peer and authenticator.
   Once the PEAP peer and authenticator considers them as failed
   authentications, they are the last packets inside the protected
   tunnel. These are considered failed authentications regardless of
   whether a cleartext EAP Success or AAA server.  The AAA or EAP Failure packet is
   subsequently sent.  Because server should not deny
   access if there i s a mismatch between the EAP-TLVs method is protected within value sent through the TLS channel, these packets cannot be spoofed, whereas cleartext
   EAP Success AAA
   protocol and EAP Failure messages can be sent by an attacker.

   In order this TLV.

   The format of this TLV is defined for the validation layer that defines the
   parameters.  The format of crypto-binding TLV the value sent by the peer to be successful, the EAP
   server and EAP peer should may be in-sync on which EAP methods
   inside the tunnel have been successful. If any or all EAP methods
   inside different from the tunnels have failed as per EAP server or EAP peer, then
   that does not mean format of the Result will always be set to failure.

   In a successful authentication for a tunnel, corresponding value
   sent through the last packet
   exchange (both request and response) inside AAA protocol.  For example, the tunnel MUST always
   contain a valid Crypto-Binding connection binding
   TLV may contain 802.11 MAC Address and Result-TLV=Success.

   Compliant SSID.

   PEAP implementations MUST MAY support the EAP this TLV method,
   processing of mandatory/optional settings on the TLV, the and this TLV MUST NOT be
   responded to with a NAK TLV,
   Result-TLV, Method-Identity-TLV, Crypto-Binding-TLV.

4.2. EAP-TLV Request Packet

   A summary of the EAP EAP-TLVs Request packet format TLV.  It is shown below.
   The fields are transmitted from left to right. defined as follows:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Code      |   Identifier
   |M|R|         TLV Type          |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Type      |                  Data....                           TLVs...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   Code

      1

   Identifier

   M

      0 - Optional TLV

   R

      Reserved, set to zero (0)

   TLV Type

      6

   Length

      >=0

   TLVs...

      The Identifier field is one octet and aids contains a list of TLVs, each in matching responses the same format defined
      in Section 4.3, with requests.  The Identifier field MUST be changed the optional bit set.  These TLVs contain
      information on each Request
   packet.

   Length

      The Length field is two octets and indicates the length identity of the
   EAP packet including peer and authenticator (layer 2
      or IP addresses); the Code, Identifier, Length, Type, media used to connect the peer and Data
   fields.

   Type

      33 - EAP-TLV

   Data
      authenticator (NAS-Port-Type); and/or the service the client is
      trying to access on the gateway (SSID).  The Data field format of these TLVs
      will be defined in a separate draft.

4.8.  Vendor-Specific TLV

   The Vendor-Specific TLV is available to allow vendors to support
   their own extended attributes not suitable for general usage.

   A Vendor-Specific-TLV attribute can contain one or more TLVs,
   referred to as Vendor-TLVs.  The TLV-type of variable length, the Vendor-TLV will be
   defined by the vendor.  All the Vendor-TLVs inside a single Vendor-
   Specific TLV belong to the same vendor.

   PEAPv2 implementations MUST support the Vendor-Specific TLV; and contains EAP-TLV TLVs.

4.3. EAP-TLV Response Packet this
   TLV cannot be responded to with a NAK TLV.  PEAPv2 implementations
   MAY NOT support the Vendor-TLVs included in the Vendor-Specific TLV
   and can respond with a NAK TLV.

   Vendor-TLVs may be optional or mandatory. Vendor-TLVs sent in the
   protected success and failure packets MUST be marked as optional.  If
   Vendor-TLVs sent in protected success/failure packets are marked as
   Mandatory, then the peer or EAP server MUST drop the connection.

   A summary of the EAP-TLV Response packet Vendor-Specific Attribute format is shown below.
   The fields are transmitted from left to right.

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Code      |   Identifier
   |M|R|         TLV Type          |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Type                          Vendor-Id                            |                  Data....
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   Code

      2

   Identifier
   |                         Vendor-TLVs....
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   M

      1 - Mandatory TLV

   R

      Reserved, set to zero (0)

   TLV Type

      7

   Length

      >=4

   Vendor-Id

      The Identifier Vendor-Id field is one four octets.  The high-order octet is 0 and aids
      the low-order 3 octets are the SMI Network Management Private
      Enterprise Code of the Vendor in matching responses
   with requests. network byte order.  The Identifier field Vendor-
      Id MUST be changed on each Request
   packet.

   Length

      The Length zero for TLVs that are not Vendor-Specific TLVs.  For
      Vendor-Specific TLVs, the Vendor-ID MUST be set to the SMI code.

   Vendor-TLVs

      This field is two octets and indicates the length of indefinite length.  It contains vendor-specific
      TLVs, in a format defined by the
   EAP vendor.

4.9.  URI TLV

   The URI TLV allows a server to send a URI to the client to refer it
   to a resource.  The TLV contains a URI in the format specified in
   RFC2396 with UTF-8 encoding.  If a packet including contains multiple URI TLVs,
   then the Code, Identifier, Length, Type, client SHOULD select the first TLV it can implement, and Data
   fields.

   Type

      33 - EAP EAP-TLV

   Data

      The Data field
   ignore the others.  If the client is unable to implement any of variable length, the
   URI TLVs, then it MAY ignore the error.  PEAP implementations MAY
   support this TLV; and contains Attribute-
   Value Pairs (TLVs).

4.4. EAP-TLV this TLV format

   EAP-TLV TLVs are defined as follows: cannot be responded to with a NAK TLV.

   A summary of this field is shown below:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |M|R|         TLV Type          |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                              Value...                            URI...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   M

      0 - Non-mandatory TLV
      1 - Mandatory Optional TLV

   R

      Reserved, set to 0. zero (0)

   TLV Type

      A 14-bit field, denoting the attribute type. Allocated TLV Types
      include:
      0 - Reserved
      1 - Reserved
      2 - Reserved
      3 -        - RESULT_TLV - Acknowledged Result
      4 -  NAK_TLV
      5 -  CRYPTO_BINDING TLV
      6 -  METHOD_IDENTITY TLV

      8

   Length

      The length of the Value

      >=0

   URI

      This field in octets.

   Value

      The value is of the attribute.

   CRYPTO_BINDING_TLV indefinite length, and METHOD_IDENTITY_TLV are defined conforms to the format
      specified in [RFC2396].

4.10.  EAP-Payload TLV

   To allow piggybacking EAP request and response with other TLVs, the draft
   Compound Authentication Binding Problem[CompoundBinding].

4.5. Result
   EAP Payload TLV is defined, which includes an encapsulated EAP packet
   and 0 or more TLVs.  PEAPv2 implementations MUST support this TLV,
   which cannot be responded to with a NAK TLV.  The Result EAP-Payload TLV provides support for acknowledged Success and Failure
   messages within PEAP. It is
   defined as follows:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |M|R|         TLV Type          |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |             Status                          EAP packet...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                             TLVs...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   M

      1 - Mandatory TLV

   R

      Reserved, set to zero (0)

   TLV Type

      3 - Success/Failure

      8

   Length

      2

   Status

      >=0

   EAP packet

      This field contains a complete EAP packet, including the EAP
      header (Code, Identifier, Length, Type) fields.  The status length of
      this field is two octets. Values include:

      1 - Success
      2 -        - Failure

4.6. NAK determined by the Length field of the encapsulated
      EAP packet.

   TLVs...

      This (optional) field contains a list of TLVs associated with the
      EAP packet field.  The TLVs utilize the same format described
      Section 4.3, and MUST NOT have the mandatory bit set.  The total
      length of this field is equal to the Length field of the EAP-
      Payload-TLV, minus the Length field in the EAP header of the EAP
      packet field.

4.11.  Intermediate Result TLV

   The NAK Intermediate Result TLV allows a peer provides support for acknowledged
   intermediate Success and Failure messages within EAP.  PEAPv2
   implementations MUST support this TLV, which cannot be responded to detect when TLVs that are not supported
   by the other peer. It
   with a NAK TLV.  This TLV is defined as follows:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |M|R|         TLV Type          |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      TLV Type number      | TLVsà             Status            |        TLVs...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   M
      1 - Mandatory TLV

   R

      Reserved, set to zero (0)

   TLV Type

      4 -

      10

   Length

      <tbd>

   TLV Type number.

      >=2

   Status

      The Status field is two octets.  Values include:

      1 - Success
      2 - Failure

   TLVs

      This (optional) field is of indeterminate length, and contains the
      TLVs associated with the Intermediate Result TLV, in the same
      format as described in Section 4.3.  The TLVs in this field MUST
      NOT have the mandatory bit set.

4.12.  TLV type that Rules

   To save round trips, multiple TLVs can be sent in the single PEAPv2
   packet.  However, multiple EAP Payload TLVs within one single PEAPv2
   packet is not supported.

   TLVs.. supported in this version and MUST NOT be sent.  If the
   peer or EAP server receives multiple EAP Payload TLVs, then it MUST
   drop the connection.

   The field contains following table provides a list guide to which TLVs may be found in
   which kind of optional TLVs. These could packets, and in which quantity:

   Request  Response    Success   Failure   TLV
   0-1      0-1         0-1       0-1       Intermediate Result TLV
   0-1      0-1         0         0         EAP Payload TLV
   0-1      0-1         1         1         Result TLV
   0-1      0-1         0-1       0-1       Crypto-Binding TLV
   0+       0+          0         0         NAK TLV
   0-1      0-1         0-1       0-1       Connection-Binding TLV
   0+       0+          0+        0+        Vendor-Specific TLV
   0+       0           0+        0-1       URI TLV
   The following table defines the meaning of the above table entries.

   0     This TLV MUST NOT be used present in future to send information on why the field was determined packet.
   0+    Zero or more instances of this TLV MAY be present in packet.
   0-1   Zero or one instance of this TLV MAY be present in packet.
   1     Exactly one instance of this TLV MUST be present in packet.

   Packet type Description
   ----------------------------
   Request  -  EAP-TLV request packet sent by EAP server to peer.
   Response -  EAP-TLV response packet sent by peer to EAP server.
   Success  - EAP-TLV packet sent by Peer or EAP server as
              protected success
   Failure  - EAP-TLV packet sent by Peer or EAP server as
              protected failure.

   The EAP-Payload TLV can contain other TLVs.  The table below
   defines which TLVs can be contained inside the EAP-Payload TLV
   and how many such TLVs can be unknown. included.

   EAP-Payload-TLV      TLV
   0                    Intermediate Result TLV
   0                    EAP Payload TLV
   0                    Result TLV
   0                    Crypto-Binding TLV
   0+                   NAK TLV
   0                    Connection-Binding TLV
   0+                   Vendor-Specific TLV
   0                    URI TLV

5.  Security Considerations

5.1.  Authentication and integrity protection

   The EAP-TLV method is presumed to run before or after an EAP
   method that supports mutual authentication and establishes

   PEAPv2 provides a server authenticated, encrypted and integrity
   protected channel.  PEAP is tunnel.  All data within the tunnel has these properties.
   Data outside the tunnel such a method, and as a result the
   acknowledged Success and Failure messages are always protected.

   Note however, that [IEEE8021X] manufactures cleartext EAP Success and EAP Failure messages, so that even though Failure,
   authentication methods negotiated outside of PEAPv2 and the Result TLV will be
   protected, this will be followed PEAPv2
   headers themselves are not protected by a cleartext EAP Success or EAP
   Failure packet. this tunnel.

   In addition, the crypto-binding TLV can reveal man-in-the-middle
   attack described in section 6.8. Hence, the server should not reveal
   any sensitive data to the client until after the Crypto-Binding TLV
   has been properly verified.

5.2.  Method negotiation

   If the peer does not support PEAP, PEAPv2, or does not wish to utilize PEAP
   PEAPv2 authentication, it MUST respond to the initial EAP-Request/PEAP-
   Start EAP-
   Request/PEAP-Start with a NAK, suggesting an alternate authentication
   method. Since the NAK is sent in cleartext with no integrity
   protection or authentication, it is subject to spoofing.  Unauthentic  Inauthentic
   NAK packets can be used to trick the peer and Authenticator authenticator into
   "negotiating down" to a weaker form of authentication, such as EAP-MD5 EAP-
   MD5 (which only provides one way authentication and does not derive a
   key).

   Since a subsequent protected EAP conversation can take place within
   the TLS session, selection of PEAP PEAPv2 as an authentication method does
   not limit the potential secondary authentication methods.  As a
   result, the only legitimate reason for a peer to NAK PEAP PEAPv2 as an
   authentication method is that it does not support it.  Where the
   additional security of PEAP PEAPv2 is required, server implementations
   SHOULD respond to a NAK with an EAP-Failure, terminating the
   authentication conversation.

   Since method negotiation outside of PEAP is not protected, if the
   peer is configured to allow PEAP and other EAP methods at the same
   time, the negotiation is subject to downgrade attacks.  Since method
   negotiation outside of PEAP is not protected, if the peer is
   configured to allow PEAP version 2; and previous PEAP versions at the
   same time, the negotiation is subject to negotiation downgrade
   attacks. However, peers configured to allow PEAPv2 and later PEAP
   versions may not be subject to downgrade negotiation attack since the
   highest version supported by both peers is checked within the
   protected tunnel.

   If peer implementations select incorrect methods or credentials with
   EAP servers, then attacks are possible on the credentials. Hence, a
   PEAPv2 peer implementation should preferably be configured with a set
   of credentials and methods that may be used with a specific PEAPv2
   Server. The peer implementation may be configured to use different
   methods and/or credentials based on the PEAPv2 server.

5.3.  TLS session cache handling

   In cases where a TLS session has been successfully resumed, in some
   circumstances, it is possible for the EAP server  to skip the PEAP PEAPv2
   Part 2 conversation, and successfully conclude the conversation as
   described in Section 2.4.

   PEAP with
   a protected termination.

   PEAPv2 "fast reconnect" is desirable in applications such as wireless
   roaming, since it minimizes interruptions in connectivity.  It is
   also desirable when the "inner" EAP mechanism used is such that it
   requires user interaction.  The user should not be required to re-
   authenticate herself, using biometrics, token cards or similar, every
   time the radio connectivity is handed over between access points in
   wireless environments.

   However, there are issues that need to be understood in order to
   avoid introducing security vulnerabilities.

   Since PEAP PEAPv2 Part 1 may not provide client authentication,
   establishment of a TLS session (and an entry in the TLS session
   cache) does not by itself provide an indication of the peer's
   authenticity.  The peer's authenticity is only proven after
   successful completion of the protected acknowledge exchange in PEAP
   part 2.

   Some PEAP PEAPv2 implementations may not be capable of removing TLS
   session cache entries established in PEAP PEAPv2 Part 1 after an
   unsuccessful PEAP PEAPv2 Part 2 authentication. In such implementations,
   the existence of a TLS session cache entry provides no indication
   that the peer has previously been authenticated. As a result,
   implementations that do not remove TLS session cache entries after a
   failed PEAP PEAPv2 Part 2 authentication or failed protected ack termination
   MUST use other means than successful TLS resumption as the indicator
   of whether the client is authenticated or not.  The implementation
   MUST determine that the client is authenticated only after the
   completion of protected acknowledge has
   been successfully exchanged. termination.  Failing to do this would enable
   a peer to gain access by completing PEAP PEAPv2 Part 1, tearing down the
   connection, re-connecting and resuming PEAP PEAPv2 Part 1, thereby proving
   herself authenticated.  Thus, TLS resumption MUST only be enabled if
   the implementation supports TLS session cache removal.  If an EAP
   server implementing PEAP PEAPv2 removes TLS session cache entries of peers
   failing PEAP PEAPv2 Part 2 authentication, then it MAY skip the
   PEAP PEAPv2
   Part 2 conversation entirely after a successful session resumption,
   successfully terminating the PEAP PEAPv2 conversation as described in
   Section 2.4.

5.4.  Certificate revocation

   Since the EAP server is on the Internet during the EAP conversation,
   the server is capable of following a certificate chain or verifying
   whether the peer's certificate has been revoked. In contrast, the
   peer may or may not have Internet connectivity, and thus while it can
   validate the EAP server's certificate based on a pre-configured set
   of CAs, it may not be able to follow a certificate chain or verify
   whether the EAP server's certificate has been revoked.

   In the case where the peer is initiating a voluntary Layer 2 channel
   using PPTP or L2TP, the peer will typically already have Internet
   connectivity established at the time of channel initiation.  As a
   result, during the EAP conversation it is capable of checking for
   certificate revocation.

   As part of the TLS negotiation, the server presents a certificate to
   the peer.  The peer SHOULD 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. Please note that in the case where the EAP authentication is
   remoted, 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.

   In the case where the peer is attempting to obtain network access, it
   will not have Internet connectivity. The TLS Extensions [TLSEXT] [RFC3546]
   support piggybacking of an Online Certificate Status Protocol (OCSP)
   response within TLS, therefore can be utilized by the peer in order
   to verify the validity of server certificate. However, since not all
   TLS implementations do not implement the TLS extensions, it may be necessary
   for the peer to wait to check for certificate revocation until after
   Internet access has been obtained.  In this case, the peer SHOULD
   conduct the certificate status check immediately upon going online
   and SHOULD NOT send data until it has received a positive response to
   the status request.  If the server certificate is found to be invalid, invalid
   as per client policy, then the peer SHOULD disconnect.

   If the client has a policy to require checking certificate revocation
   and it cannot obtain revocation information then it may need to
   disallow the use of all or some of the inner methods since some
   methods may reveal some sensitive information.

5.5.  Separation of the EAP server and the authenticator

   As a result of a complete PEAP PEAPv2 Part 1 and Part 2 conversation, the
   EAP endpoints will mutually authenticate, and derive a session key
   for subsequent use in link layer security. Since the peer and EAP
   client reside on the same machine, it is necessary for the EAP client
   module to pass the session key to the link layer encryption module.

   The situation may be more complex on the Authenticator, which may or
   may not reside on the same machine as the EAP server. In the case
   where the EAP server and the Authenticator reside on different
   machines, there are several implications for security. Firstly, the
   mutual authentication defined in PEAP will occur between the peer and
   the EAP server, not between the peer and the authenticator. This
   means that as a result of the PEAP conversation, it is not possible
   for the peer to validate the identity of the NAS or channel server
   that it is speaking to.

   The second issue is that the session key negotiated between the peer
   and EAP server will need to be transmitted to the authenticator.
   Therefore a secure mechanism needs to be provided to transmit the
   session key from the EAP server to the authenticator or channel
   server that needs to use the key. The specification of this transit
   mechanism is outside the scope of this document.

5.6.  Separation of PEAP PEAPv2 Part 1 and Part 2 Servers

   The EAP server involved in PEAP PEAPv2 Part 2 need not necessarily be the
   same as the EAP server involved in PEAP PEAPv2 Part 1.  For example, a
   local authentication server or proxy might serve as the endpoint for
   the Part 1 conversation, establishing the TLS channel.  Subsequently,
   once the EAP-Response/Identity has been received within the TLS
   channel, it can be decrypted and forwarded in cleartext to the
   destination realm EAP server.  The rest of the conversation will
   therefore occur between the destination realm EAP server and the
   peer, with the local authentication server or proxy acting as an
   encrypting/decrypting gateway. This permits a non-TLS capable EAP
   server to participate in the PEAP PEAPv2 conversation.

   Note however that such an approach introduces security
   vulnerabilities.  Since the EAP Response/Identity is sent in the
   clear between the proxy and the EAP server, this enables an attacker
   to snoop the user's identity.  It also enables a remote environments,
   which may be public hot spots or Internet coffee shops, to gain
   knowledge of the identity of their users.  Since one of the potential
   benefits of PEAP is identity protection, this is undesirable.

   If the EAP method negotiated during PEAP PEAPv2 Part 2 does not support
   mutual authentication, then if the Part 2 conversation is proxied to
   another destination, the PEAP peer will not have the opportunity to
   verify the secondary EAP server's identity. Only the initial EAP
   server's identity will have been verified as Part part of TLS session
   establishment.

   Similarly, if the EAP method negotiated during PEAP PEAPv2 Part 2 is
   vulnerable to dictionary attack, then an attacker capturing the
   cleartext exchange will be able to mount an offline dictionary attack
   on the password.

   Finally, when a Part 2 conversation is terminated at a different
   location than the Part 1 conversation, the Part 2 destination is
   unaware that the EAP client has negotiated PEAP. PEAPv2. As a result, it is
   unable to enforce policies requiring PEAP. Since some EAP methods
   require PEAP PEAPv2 in order to generate keys or lessen security
   vulnerabilities, where such methods are in use, such a configuration
   may be unacceptable.

   In summary, PEAP PEAPv2 encrypting/decrypting gateway configurations are
   vulnerable to attack and SHOULD NOT be used.  Instead, the entire
   PEAP
   PEAPv2 connection SHOULD be proxied to the final destination, and the
   subsequently derived master session keys need to be transmitted back. This
   T his provides end to end protection of PEAP. PEAPv2.  The specification of
   this transit mechanism is outside the scope of this document, but
   mechanisms similar to [RFC2548] can be used.  These steps protects protect the
   client from revealing her identity to the remote environment.

   In order to find the proper PEAP destination, the EAP client SHOULD
   place a Network Access Identifier (NAI) conforming to [RFC2486] in
   the Identity Response.

   There may be cases where a natural trust relationship exists between
   the (foreign) authentication server and final EAP server, such as on
   a campus or between two offices within the same company, where there
   is no danger in revealing the identity of the station to the
   authentication server.  In these cases, using a proxy solution without end
   to end protection of PEAP PEAPv2 MAY be used. The PEAP If RADIUS is used to
   communicate between gateway and EAP server, then the PEAPv2
   encrypting/decrypting gateway SHOULD provide support for IPsec
   protection of RADIUS in order to provide confidentiality for the
   portion of the conversation between the gateway and the EAP server,
   as described in [RFC3162]. [RFC3579].

5.7.  Identity verification

   Since the TLS session has not yet been negotiated, the initial
   Identity request/response occurs in the clear without integrity
   protection or authentication. It is therefore subject to snooping and
   packet modification.

   In configurations where all users are required to authenticate with
   PEAP
   PEAPv2 and the first portion of the PEAP PEAPv2 conversation is terminated
   at a local backend authentication server, without routing by proxies,
   the initial cleartext Identity Request/Response exchange is not
   needed in order to determine the required authentication method(s) or
   route the authentication conversation to its destination. As a
   result, the initial Identity and  Request/Response exchange MAY NOT
   be present, and a subsequent Identity Request/Response exchange MAY
   occur after the TLS session is established.

   If the initial cleartext Identity Request/Response has been tampered
   with, after the TLS session is established, it is conceivable that
   the EAP Server will discover that it cannot verify the peer's claim
   of identity. For example, the peer's userID may not be valid or may
   not be within a realm handled by the EAP server. Rather than
   attempting to proxy the authentication to the server within the
   correct realm, the EAP server SHOULD terminate the conversation.

   The PEAP PEAPv2 peer can present the server with multiple identities. This
   includes the claim of identity within the initial EAP-
   Response/Identity(MyID)
   Response/Identity (MyID) packet, which is typically used to route the
   EAP conversation to the appropriate home backend authentication
   server. There may also be subsequent EAP-Response/Identity packets
   sent by the peer once the TLS channel has been established.

   Note that since the PEAP PEAPv2 peer may not present a certificate, it is
   not always possible to check the initial EAP-Response/Identity
   against the identity presented in the certificate, as is done in
   [RFC2716].

   Moreover, it cannot be assumed that the peer identities presented
   within multiple EAP-Response/Identity packets will be the same. For
   example, the initial EAP-Response/Identity might correspond to a
   machine identity, while subsequent identities might be those of the
   user. Thus, PEAP PEAPv2 implementations SHOULD NOT abort the
   authentication just because the identities do not match.  However,
   since the initial EAP-Response/Identity will determine the EAP server
   handling the authentication, if this or any other identity is
   inappropriate for use with the destination EAP server, there is no
   alternative but to terminate the PEAP PEAPv2 conversation.

   The protected identity or identities presented by the peer within
   PEAP
   PEAPv2 Part 2 may not be identical to the cleartext identity
   presented in PEAP PEAPv2 Part 1, for legitimate reasons. In order to
   shield the userID from snooping, the cleartext Identity may only
   provide enough information to enable routing of the authentication
   request to the correct realm. For example, the peer may initially
   claim the identity of "nouser@bigco.com" in order to route the
   authentication request to the bigco.com EAP server. Subsequently,
   once the TLS session has been negotiated, in PEAP PEAPv2 Part 2, the peer
   may claim the identity of "fred@bigco.com".  Thus, PEAP PEAPv2 can provide
   protection for the user's identity, though not necessarily the
   destination realm, unless the PEAP PEAPv2 Part 1 conversation terminates
   at the local authentication server.

   As a result, PEAP PEAPv2 implementations SHOULD NOT attempt to compare the
   Identities claimed with Parts 1 and 2 of the PEAP PEAPv2 conversation.
   Similarly, if multiple Identities are claimed within PEAP PEAPv2  Part 2,
   these SHOULD NOT be compared. An EAP conversation may involve more
   than one EAP authentication method, and the identities claimed for
   each of these authentications could be different (e.g. a machine
   authentication, followed by a user authentication).

5.8.  Man-in-the-middle attack protection

   If an

   TLS protection can address a number of weaknesses in the EAP method;
   as well as EAP protocol weaknesses listed in the abstract and
   introduction sections in this document.

   Hence, the recommended solution is to always deploy authentication
   methods with protection of PEAPv2.

   if a deployment chooses to allow a EAP method protected by PEAP is also deployed
   without protection (from of PEAP or IPSEC), and if IPsec at the same credential is
   allowed in both cases, time, then this opens
   up a possibility of a man-in-the-middle attack is possible. attack.

   A man-in-the-middle can spoof the client to authenticate to it
   instead of the real EAP server; and forward the authentication to the
   real server over a protected tunnel. Since the attacker has access to
   the keys derived from the tunnel, it can gain access to the network.

   The compound binding draft [CompoundBinding] identifies a number of
   solutions to

   PEAP version 2 prevents this attack.

   The preferred solution attack by using the keys generated by
   the inner EAP method in the crypto-binding exchange described in
   protected termination section. This attack is to deploy not prevented if the authentication
   inner EAP method with
   protection from PEAP does not generate keys or IPSEC. Protection if the keys generated by
   the inner EAP method can address be compromised.

   Alternatively, the man-in-
   the-middle attack; and in addition attack can address also be thwarted if the inner EAP
   method and EAP
   protocol weaknesses listed in can signal to the abstract and introduction sections
   in peer that the packets are being sent within
   the tunnel.  In most cases this document.

   Another solution may require modification to the inner
   EAP method.  In order to allow for these implementations, PEAPv2
   implementations should inform inner EAP methods that the EAP method
   is being protected by a PEAPv2 tunnel.

   Since all sequence negotiations and exchanges are protected by TLS
   channel, they are immune to snooping and MITM attacks with the use knowledge known only of
   Crypto-Binding TLV. To make sure the same parties are involved tunnel
   establishment and previous inner method, before engaging the next
   method to sent more sensitive information, both peer and server MUST
   use the real peers Crypto-Binding TLV between methods to
   verify check the tunnel
   integrity. If the Crypto-Binding TLV failed validation, they SHOULD
   stop the sequence and terminate the tunnel connection, to prevent
   more sensitive information being sent in subsequent methods.

5.9.  Cleartext forgeries

   As described in [RFC2284bis], EAP Success and Failure packets are not
   authenticated, so that there they may be forged by an attacker without fear
   of detection. Forged EAP Failure packets can be used to convince an
   EAP peer to disconnect. Forged EAP Success and Failure packets may be
   used to convince a peer to disconnect; or convince a peer to access
   the network even before authentication is no man-in-the-middle. A number complete, resulting in
   denial of protocols
   derive keys service for encryption, the peer.

   By supporting encrypted, authenticated and integrity protected
   success/failure indications, PEAPv2 provides protection against these keys
   attacks.

   When the peer responds with the first PEAP packet; and the EAP server
   receives the first PEAPv2 packet from the peer, both MUST silently
   discard all clear text EAP messages unless both the PEAPv2 peer and
   server have indicated success or failure or error using a protected
   error or protected termination mechanism.  The success/failure
   decisions sent by a protected mechanism indicate the final decision
   of the EAP authentication conversation.  After success/failure has
   been indicated by a protected mechanism, the PEAPv2 client can
   process unprotected EAP success and EAP failure message; however MUST
   ignore any unprotected EAP success or failure messages where the
   decision does not match the decision of the protected mechanism.

   [RFC2284bis] states that an EAP Success or EAP Failure packet
   terminates the EAP conversation, so that no response is possible.
   Since EAP Success and EAP Failure packets are not known retransmitted, if
   the final packet is lost, then authentication will fail.  As a
   result, where packet loss is expected to be non-negligible,
   unacknowledged success/failure indications lack robustness.

   As a result, a EAP server SHOULD send a clear text EAP success or
   EAP-failure packet after the man-
   in-the-middle. These keys can protected success or failure packet or
   TLS alert. The peer MUST NOT require the clear text EAP Success or
   EAP Failure if it has received the protected success or failure or
   TLS alert. For more details, refer to [RFC228bis], Section 4.2.

5.10.  TLS Ciphersuites

   Anonymous ciphersuites are vulnerable to man-in-the-middle attacks,
   and SHOULD NOT be used with PEAPv2, unless the EAP methods inside
   PEAPv2 can address the man-in-the-middle attack or unless the man-in-
   the-middle attack can be addressed by mechanisms external to PEAPv2.

5.11.  Denial of service attacks

   Denial of service attacks are possible if the attacker can insert or
   modify packets in the binding phase exchange
   described authentication channel.  The attacker can
   modify unprotected fields in compound binding [compoundbinding] draft to detect man-
   in-the-middle. PEAP implementations MUST support the binding phase
   exchange using compound MACs PEAP packet such as described in the section 4.2 EAP protocol
   or PEAP version number.  This can result in a denial of the
   compound binding draft[CompoundBinding].

   Another solution service
   attack.  It is also possible for EAP methods the attacker to securely signal modify protected
   fields in a packet to cause decode errors resulting in a denial of
   service.  In these ways the attacker can prevent access for peers that
   they
   connecting to the network.

   Denial of service attacks with multiplier impacts are inside more
   interesting than the protected channel. This may require changes ones above.  It is possible to multiply the
   impact by creating a large number of TLS sessions with the EAP protocol. In order to allow
   server.

5.12.  Security Claims

   Intended use:            Wireless or Wired networks, and over
                            the Internet, where physical security
                            cannot be assumed.
   Auth. mechanism:         Use arbitrary EAP methods to implement secure
   signaling, PEAP implementations SHOULD inform and TLS authentication
                            mechanisms for authentication of the
                            client and server.
   Ciphersuite negotiation: Yes.
   Mutual authentication:   Yes. Depends on the type of EAP methods method
                            used within the tunnel and the type of
                            authentication used within TLS.
   Integrity protection:    Yes
   Replay protection:       Yes
   Confidentiality:         Yes
   Key derivation:          Yes
   Key strength:            Variable
   Dictionary attack prot:  Not susceptible.
   Fast reconnect:          Yes
   Crypt. binding:          Yes.
   Acknowledged S/F:        Yes
   Session independence:    Yes.
   Fragmentation:           Yes

   PEAPv2 derives keys by combining keys from TLS and the inner EAP
   methods. It should be noted that the use of TLS ciphersuites with a
   particular key lengths does not guarantee that the key strength of
   the keys will be equivalent to the length.  The key exchange
   mechanisms (eg. RSA or Diffie-Hellman) used must provide sufficient
   security or they are being protected by PEAP. will be the weakest link.  For example RSA key sizes
   with a modulus of 1024 bits provides less than 128 bits of security,
   this may provide sufficient key strength for some applications and
   not for others.  See [PKLENGTH] for a detailed analysis of
   determining the public key strengths used to exchange symmetric keys.

6.  IANA Considerations

   This section provides guidance to the Internet Assigned Numbers
   Authority (IANA) regarding registration of values related to the EAP
   protocol, in accordance with BCP 26, [RFC2434].

   There is one name space in EAP-TLV that require requires registration: TLV-
   Types. PEAPv2
   TLV-Types.

6.1.  Definition of Terms

   The following terms are used here with the meanings defined in BCP
   26: "name space", "assigned value", "registration".

   The following policies are used here with the meanings defined in BCP
   26: "Private Use", "First Come First Served", "Expert Review",
   "Specification Required", "IETF Consensus", "Standards Action".

6.2.  Recommended Registration Policies

   For registration requests where a Designated Expert should be
   consulted, the responsible IESG area director should appoint the
   Designated Expert. For Designated "Designated Expert with Specification
   Required, Required", the request is
   posted to the EAP WG mailing list (or, if it has been disbanded, a
   successor designated by the Area Director) for comment and review,
   and MUST include a pointer to a public specification. Before a period
   of 30 days has passed, the Designated Expert will either approve or
   deny the registration request and publish a notice of the decision to
   the EAP WG mailing list or its successor. A denial notice must be
   justified by an explanation and, in the cases where it is possible,
   concrete suggestions on how the request can be modified so as to
   become acceptable.

   For registration requests requiring Expert Review, the EAP mailing
   list should be consulted. If the EAP mailing list is no longer
   operational, an alternative mailing list may be designated by the
   responsible IESG Area Director.

   EAP-TLVs have a 14-bit field, of which 1-6 0-10 have been allocated.

   Additional EAP-TLV type codes may be allocated following Designated
   Expert with Specification Required [RFC2434].

7.  References

7.1.  Normative references

[RFC1321] Rivest, R., R. and S. Dusse, S., "The MD5 Message-Digest Algorithm",
          RFC 1321, April 1992.

   [RFC1570] Simpson, W., Editor, "PPP LCP Extensions", RFC 1570,
   January
             1994.

   [RFC1661] Simpson, W., Editor, "The Point-to-Point Protocol (PPP)",
   STD
             51, RFC 1661, July 1994.

   [RFC1962] D. Rand.  "The PPP Compression Control Protocol", RFC
   1962,
             Novell, June 1996.

   [RFC1968] Meyer, G., "The PPP Encryption Protocol (ECP)", RFC 1968,
   June
             1996.

   [RFC1990] Sklower, K., Lloyd, B., McGregor, G., Carr, D., and T.
             Coradetti, "The PPP Multilink Protocol (MP)", RFC 1990,
   August
             1996.

[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
          Requirement Levels", BCP 14, RFC 2119, March 1997.

[RFC2246] Dierks, T., T. and C. Allen, C., "The TLS Protocol Version 1.0", RFC
          2246, November 1998.

   [RFC2284] Blunk, L., Vollbrecht, J., "PPP Extensible Authentication
             Protocol (EAP)", RFC 2284, March 1998.

[RFC2486] Aboba, B., B. and M. Beadles, M., "The Network Access Identifier", RFC
          2486, January 1999.

   [TLSEXT]

[RFC2396] Berners-Lee, T., Fielding, R. and L. Masinter, "Uniform
          Resource Identifiers (URI): Generic Syntax", RFC 2396, August
          1998.

[RFC3546] Blake-Wilson, S., et al. "TLS Extensions", RFC 3546, June
          2003.

[RFC2284bis]
          Blunk, L. et al., "Extensible Authentication Protocol (EAP)",
          draft-ietf-eap-rfc2284bis-06.txt, Internet draft (work in
          progress), draft-ietf-tls-extensions-06.txt, Feb October 2003.

   [IEEE8021X]
             IEEE Standards for Local and Metropolitan Area Networks:
   Port
             based Network Access Control, IEEE Std 802.1X-2001, June
   2001.

   [CompoundBinding]
             Puthenkulam, J., Lortz, V., Palekar, A., Simon, D.,
             "The Compound Authentication Binding Problem", March 2003;
             draft-puthenkulam-eap-binding-02.txt.

8.

7.2.  Informative references

   [RFC2419]

[RFC1968] Meyer, G., "The PPP Encryption Protocol (ECP)", RFC 1968, June
          1996.

[RFC1990] Sklower, K., Meyer, Lloyd, B., McGregor, G., Carr, D. and T.
          Coradetti, "The PPP Multilink Protocol (MP)", RFC 1990, August
          1996.

[RFC2419] Sklower, K. and G. Meyer, "The PPP DES Encryption Protocol,
          Version 2 (DESE-bis)", RFC 2419, September 1998.

[RFC2420] Hummert, K., "The PPP Triple-DES Encryption Protocol (3DESE)",
          RFC 2420, September 1998.

[RFC2434] Narten, T. and H. Alvestrand, "Guidelines for Writing an IANA
          Considerations Section in RFCs", BCP 26, RFC 2434, October
          1998.

[RFC2548] Zorn, G., "Microsoft Vendor-specific RADIUS Attributes",
          RFC2548, March 1999.

[RFC2716] Aboba, B., B. and D. Simon, D., "PPP EAP TLS Authentication Protocol",
          RFC 2716, October 1999.

[RFC3078] Pall, G., G. and G. Zorn, G., "Microsoft Point-to-Point Encryption
          (MPPE) Protocol", RFC 3078, March 2001.

[RFC3079] Zorn, G., "Deriving Keys for use with Microsoft Point-to-
   Point Point-to-Point
          Encryption (MPPE)", RFC 3079, March 2001.

[FIPSDES] National Bureau of Standards, "Data Encryption Standard", FIPS
          PUB 46 (January 1977).

[IEEE80211]
          Information technology - Telecommunications and information
          exchange between systems - Local and metropolitan area
          networks - Specific Requirements Part 11:  Wireless LAN Medium
          Access Control (MAC) and Physical Layer (PHY) Specifications,
          IEEE Std. 802.11-1999, 1999.

[MODES]   National Bureau of Standards, "DES Modes of Operation", FIPS
          PUB 81 (December 1980).

   [PEAP version 0]

[PEAPv0]  Kamath, V., Palekar, A., A. and M. Wodrich, M., "Microsoft's PEAP
          version 0 (Implementation in Windows XP SP1)",
             draft-kamath-pppext-peapv0-00.txt.

9. draft-kamath-
          pppext-peapv0-00.txt, Internet draft (work in progress), July
          2002.

[PKLENGTH]
          H. Orman and P. Hoffman, "Determining Strengths For Public
          Keys Used For Exchanging Symmetric Keys", draft-orman-public-
          key-lengths-05.txt, Internet Draft (work in progress),
          December 2002.

[RFC3579] Aboba, B. and P. Calhoun, "RADIUS Support for EAP", RFC 3579,
          September 2003.

[CompoundBinding]
          Puthenkulam, J., Lortz, V., Palekar, A. and D. Simon, "The
          Compound Authentication Binding Problem", draft-puthenkulam-
          eap-binding-03.txt, Internet Draft (work in progress), May
          2003.

[IEEE8021X]
          IEEE Standards for Local and Metropolitan Area Networks: Port
          based Network Access Control, IEEE Std 802.1X-2001, June 2001.

Appendix A - Examples

A.1 Cleartext Identity Exchange

   In the case where an identity exchange occurs within PEAP PEAPv2 Part 1,
   the conversation will appear as follows:

   Authenticating Peer     Authenticator
   -------------------     -------------
                           <- EAP-Request/
                           Identity
   EAP-Response/
   Identity (MyID1) ->

   // Identity sent in the clear. May be a hint to help route the
   authentication request to EAP server, instead of the full user
   identity.

                           <- EAP-Request/
                           EAP-Type=PEAP, V=2
                           (PEAP Start, S bit set)
   EAP-Response/
   EAP-Type=PEAP, V=1 V=2
   (TLS client_hello)->
                           <- EAP-Request/
                           EAP-Type=PEAP, V=2
                           (TLS server_hello,
                            TLS certificate,
                    [TLS server_key_exchange,]
                    [TLS certificate_request,]
                        TLS server_hello_done)
   EAP-Response/
   EAP-Type=PEAP, V=2
   ([TLS certificate,]
    TLS client_key_exchange,
   [TLS certificate_verify,]
    TLS change_cipher_spec,
    TLS finished) ->
                           <- EAP-Request/
                           EAP-Type=PEAP, V=2
                           (TLS change_cipher_spec,
                            TLS finished)
   EAP-Response/
   EAP-Type=PEAP -> finished,
                            EAP-Request/EAP-Type=EAP-TLV
                           [EAP-Payload-TLV[EAP-Request/
                            Identity]])

   // identity protected by TLS. EAP-TLV packet does not include an EAP-
   header.

   TLS channel established
   (messages (EAP messages sent within the TLS channel)

                          <- EAP-Request/
                           Identity
   EAP-Response/
   Identity (MyID2) ->
                          <- EAP-Request/
                           EAP-Type=X

   EAP-Response/
   EAP-Type=X or NAK -> channel
   encapsulated in EAP-TLV packets without EAP header)

   EAP-TLV [EAP-Payload-TLV
   [EAP-Response/Identity (MyID2)]]]->

                            <- EAP-Request/
                           EAP-Type=X
   EAP-Response/
   EAP-Type=X EAP-TLV [EAP-Payload-TLV
                            [EAP-Request/EAP-Type=X]]

   EAP-TLV [EAP-Payload-TLV
   [EAP-Response/EAP-Type=X]] ->

   // Protected termination

                            <- EAP-Request/
                              EAP-Type=EAP-TLV

   Crypto-Binding-TLV=(Version=0, Nounce, Number of inner EAP
   methods=1, Result EAP-TLV [Result TLV (Success), Method_Identity_TLV (EAP-Type=X,
   EAP-Type-Version=0, keylengthusedforderivation,
   ClientIdentityLength= sizeof(MyID2), MyID2, ServerIdentityLength=0,
   Media-type=19), Method_Identity_TLV (EAP-Type=PEAP, EAP-Type-
   Version=2, keylengthusedforderivation, ClientIdentityLength=
   sizeof(MyID1), MyID1, ServerIdentityLength=0, Media-type=19),
   CompoundMAC (over entire EAP TLV inside the tunnel including EAP-
   header))
   EAP-Response/
   EAP-Type=EAP-TLV
   Result=Success
   Crypto-Binding-TLV=(Version=0, Nounce, Number of inner EAP
   methods=1, Result TLV
                            Crypto-Binding-TLV (Version=0,
                            received-version=2, Nonce, B1_MAC),
                            Intermediate-Result-TLV (Success)]

   EAP-TLV [Result-TLV (Success), Method_Identity_TLV (EAP-Type=X,
   EAP-Type-Version=0, keylengthusedforderivation,
   ClientIdentityLength= sizeof(MyID2), MyID2, ServerIdentityLength=0,
   Media-type=19), Method_Identity_TLV (EAP-Type=PEAP, EAP-Type-
   Version=2, keylengthusedforderivation, ClientIdentityLength=
   sizeof(MyID1), MyID1, ServerIdentityLength=0, Media-type=19),
   CompoundMAC (over entire EAP TLV inside the tunnel including EAP-
   header))

   ->
   Intermediate-Result-TLV (Success),
   Crypto-Binding-TLV (Version=0,
   received-version=2,Nonce, B2_MAC)]->

   TLS channel torn down
   (messages sent in cleartext)

                           <- EAP-Success

A.2 No cleartext Identity Exchange

   Where all peers are known to support PEAP, PEAPv2, a non-certificate
   authentication is desired for the client and the PEAP Part 1
   conversation is carried out between the peer and a local EAP server,
   the cleartext identity exchange may be omitted and the conversation
   appears as follows:

   Authenticating Peer     Authenticator
   -------------------     -------------
                           <- EAP-Request/
                           EAP-Type=PEAP, V=1 V=2
                           (PEAP Start, S bit set)

   EAP-Response/
   EAP-Type=PEAP, V=1 V=2
   (TLS client_hello)->
                           <- EAP-Request/
                           EAP-Type=PEAP, V=2
                           (TLS server_hello,
                            TLS certificate,
                    [TLS server_key_exchange,]
                    [TLS certificate_request,]
                        TLS server_hello_done)
   EAP-Response/
   EAP-Type=PEAP, V=2
   ([TLS certificate,]
    TLS client_key_exchange,
   [TLS certificate_verify,]
    TLS change_cipher_spec,
    TLS finished) ->
                           <- EAP-Request/
                           EAP-Type=PEAP, V=2
                           (TLS change_cipher_spec,
                            TLS finished)
   EAP-Response/
   EAP-Type=PEAP, V=2 -> finished,
                           EAP-TLV [EAP-Payload-TLV
                           (EAP-Request/Identity)])

   TLS channel established
   (messages sent within the TLS channel)

                          <- EAP-Request/
                           Identity
   EAP-Response/
   Identity (MyID)

   EAP-TLV [EAP-Payload-TLV
   [EAP-Response/Identity (MyID)]] ->

                          <- EAP-Request/
                           EAP-Type=X
   EAP-Response/
   EAP-Type=X EAP-TLV [EAP-Payload-TLV
                          [EAP-Type=EAP-Request/
                          EAP-Type=X]]

   EAP-TLV [EAP-Payload-TLV
   [EAP-Response/EAP-Type=X
   or NAK NAK] ->
                          <- EAP-Request/
                           EAP-Type=X
   EAP-Response/
   EAP-Type=X EAP-TLV [EAP-Payload-TLV
                          [EAP-Request/EAP-Type=X]]

   EAP-TLV [EAP-Payload-TLV [EAP-Response/
   EAP-Type=X]] ->

   // Protected success
                           <- EAP-Request/
                              EAP-Type=EAP-TLV

   Crypto-Binding-TLV=(Version=0, Nounce, Number of inner EAP
   methods=<number>, EAP-TLV [Crypto-Binding-TLV=
                           (Version=0, Received-version=2,
                           Nonce, B1_MAC),
                           Intermediate-Result-TLV(Success),
                           Result TLV (Success)]

   EAP-TLV [Crypto-Binding-TLV=
   (Version=0,Received-version=2,
   Nonce, B2_MAC),
   Intermediate-Result-TLV (Success), Method_Identity_TLV (for
   each EAP-Type inside PEAP), Method_Identity_TLV (for PEAP),
   CompoundMAC (over entire EAP TLV packet inside the tunnel including
   EAP-header))

   EAP-Response/
   EAP-Type=EAP-TLV
   Crypto-Binding-TLV=(Version=0, Nounce, Number of inner EAP
   methods=<number>,
   Result TLV (Success), Method_Identity_TLV (for
   each EAP-Type inside PEAP), Method_Identity_TLV (for PEAP),
   CompoundMAC (over entire EAP TLV packet inside the tunnel including
   EAP-header)) (Success)]->

   TLS channel torn down
   (messages sent in cleartext)

                           <- EAP-Success

A.3 Client certificate authentication with identity privacy

   Where all peers are known to support PEAP, PEAPv2, where client certificate
   authentication is desired and the PEAP PEAPv2 Part 1 conversation is
   carried out between the peer and a local EAP server, the cleartext
   identity exchange may be omitted and the conversation appears as
   follows:

   Authenticating Peer     Authenticator
   -------------------     -------------
                           <- EAP-Request/
                           EAP-Type=PEAP, V=2
                           (PEAP Start, S bit set)

   EAP-Response/
   EAP-Type=PEAP, V=2
   (TLS client_hello)->
                           <- EAP-Request/
                           EAP-Type=PEAP, V=2
                           (TLS server_hello,
                            TLS certificate,
                            [TLS server_key_exchange,]
                            TLS server_hello_done)
   EAP-Response/
   EAP-Type=PEAP, V=2
   (TLS client_key_exchange,
    TLS change_cipher_spec,
    TLS finished) ->
                           <- EAP-Request/
                           EAP-Type=PEAP, V=2
                           (TLS change_cipher_spec,
                            TLS finished) finished,TLS Hello-Request)
   EAP-Response/
   EAP-Type=PEAP, V=2 ->
   (TLS client_hello)->

   TLS channel established
   (messages sent within the TLS channel)
                           <- EAP-Request/
                           EAP-Type=PEAP, V=2
                           (TLS hello_request)
   EAP-Response/
   EAP-Type=PEAP, V=2
   (TLS client_hello)->

                           <- EAP-Request/
                           EAP-Type=PEAP, V=2
                           (TLS server_hello,
                            TLS certificate,
                    [TLS server_key_exchange,]
                    [TLS certificate_request,]
                        TLS server_hello_done)
   EAP-Response/
   EAP-Type=PEAP, V=2
   ([TLS certificate,]
    TLS client_key_exchange,
   [TLS certificate_verify,]
    TLS change_cipher_spec,
    TLS finished) ->

                           <- EAP-Request/
                           EAP-Type=PEAP, V=2
                           (TLS change_cipher_spec,
                            TLS finished)
   EAP-Response/

   EAP-Type=PEAP, V=2 ->
                           <- EAP-Request/
                              EAP-Type=EAP-TLV
   Crypto-Binding-TLV=(Version=0, Nounce, Number of inner EAP
   methods=<number>, Result TLV (Success), Method_Identity_TLV (for
   each EAP-Type inside PEAP), Method_Identity_TLV (for PEAP),
   CompoundMAC (over entire EAP TLV finished, EAP-TLV
                           [Crypto-binding-TLV (version=0,
                           Received-version=2, Nonce,
                           B1_MAC),
                           Result-TLV (Success)])

   // packet inside format within the tunnel including
   EAP-header))
   EAP-Response/
   EAP-Type=EAP-TLV TLS channel

   EAP-TLV [
   Crypto-Binding-TLV=(Version=0, Nounce, Number of inner EAP
   methods=<number>,
   Received-version=2,
   Nonce, B2_MAC),
   Result TLV (Success), Method_Identity_TLV (for
   each successful EAP-Type inside PEAP), Method_Identity_TLV (for
   PEAP), CompoundMAC (over entire EAP TLV packet inside the tunnel
   including EAP-header)) (Success)]

   TLS channel torn down
   (messages sent in cleartext)

                           <- EAP-Success

A.4 Fragmentation and Reassembly

   In the case where the PEAP fragmentation is required, the
   conversation will appear as follows:

   Authenticating Peer     Authenticator
   -------------------     -------------
                           <- EAP-Request/
                           Identity
   EAP-Response/
   Identity (MyID) ->
                           <- EAP-Request/
                           EAP-Type=PEAP, V=2
                           (PEAP Start, S bit set)

   EAP-Response/
   EAP-Type=PEAP, V=2
   (TLS client_hello)->
                           <- EAP-Request/
                           EAP-Type=PEAP, V=2
                           (TLS server_hello,
                            TLS certificate,
                    [TLS server_key_exchange,]
                    [TLS certificate_request,]
                        TLS server_hello_done)
                    (Fragment 1: L, M bits set)

   EAP-Response/
   EAP-Type=PEAP, V=2 ->

                           <- EAP-Request/
                              EAP-Type=PEAP, V=2
                           (Fragment 2: M bit set)
   EAP-Response/
   EAP-Type=PEAP, V=2 ->
                           <- EAP-Request/
                           EAP-Type=PEAP, V=2
                           (Fragment 3)
   EAP-Response/
   EAP-Type=PEAP, V=2
   ([TLS certificate,]
    TLS client_key_exchange,
   [TLS certificate_verify,]
    TLS change_cipher_spec,
    TLS finished)
    (Fragment 1: L, M bits set)->

                            <- EAP-Request/
                           EAP-Type=PEAP, V=2
   EAP-Response/
   EAP-Type=PEAP, V=2
   (Fragment 2)->
                          <- EAP-Request/
                           EAP-Type=PEAP, V=2
                           (TLS change_cipher_spec,
                            TLS finished)

   EAP-Response/
   EAP-Type=PEAP, V=2 -> finished, EAP-TLV
                           [EAP-Payload-TLV[
                           EAP-Request/Identity]])

   TLS channel established
   (messages sent within the TLS channel)

                          <- EAP-Request/
                           Identity
   EAP-Response/
   Identity (MyID)

   EAP-TLV
   [EAP-Payload-TLV
   [EAP-Response/Identity(myID)]] ->

                          <- EAP-Request/
                           EAP-Type=X
   EAP-Response/
   EAP-Type=X EAP-TLV [ EAP-Payload-TLV
                         [EAP-Request/EAP-Type=X]]

   EAP-TLV [EAP-Payload-TLV
   [EAP-Response/EAP-Type=X or NAK -> NAK]]->

                          <- EAP-Request/
                           EAP-Type=X
   EAP-Response/
   EAP-Type=X EAP-TLV [ EAP-Payload-TLV
                         [EAP-Request/EAP-Type=X]]

   EAP-TLV [EAP-Payload-TLV
   [EAP-Response/EAP-Type=X] ->

                          <- EAP-Request/
                              EAP-Type=EAP-TLV
   Crypto-Binding-TLV=(Version=0, Nounce, Number of inner EAP
   methods=<number>, EAP-TLV [Crypto-Binding-TLV
                          =(Version=0, Received-Version=2,
                          Nonce, B1_MAC),
                          Intermediate-Result-TLV(Success),
                          Result TLV (Success), Method_Identity_TLV (for
   each EAP-Type inside PEAP), Method_Identity_TLV (for PEAP),
   CompoundMAC (over entire EAP TLV packet inside the tunnel including
   EAP-header))
   EAP-Response/
   EAP-Type=EAP-TLV (Success)]

   EAP-TLV [
   Crypto-Binding-TLV=(Version=0, Nounce, Number of inner EAP
   methods=<number>,
   Received-Version=2,Nonce, B2_MAC),
   Result TLV (Success), Method_Identity_TLV (for
   each EAP-Type inside PEAP), Method_Identity_TLV (for PEAP),
   CompoundMAC (over entire EAP TLV packet inside the tunnel including
   EAP-header))
   Intermediate-Result-TLV (Success)] ->

   TLS channel torn down
   (messages sent in cleartext)

                           <- EAP-Success

A.5 Server authentication fails in Part 2

   In the case where the server authenticates to the client successfully
   in PEAP PEAPv2 Part 1, but the client fails to authenticate to the server
   in PEAP PEAPv2 Part 2, the conversation will appear as follows:

   Authenticating Peer     Authenticator
   -------------------     -------------
                           <- EAP-Request/
                           Identity
   EAP-Response/
   Identity (MyID) ->
                           <- EAP-Request/
                           EAP-Type=PEAP, V=2
                           (PEAP Start, S bit set)
   EAP-Response/
   EAP-Type=PEAP, V=2
   (TLS client_hello)->
                           <- EAP-Request/
                           EAP-Type=PEAP, V=2
                           (TLS server_hello,
                            TLS certificate,
                    [TLS server_key_exchange,]
                    [TLS certificate_request,]
                        TLS server_hello_done)
   EAP-Response/
   EAP-Type=PEAP, V=2
   ([TLS certificate,]
    TLS client_key_exchange,
   [TLS certificate_verify,]
    TLS change_cipher_spec,
    TLS finished) ->
                           <- EAP-Request/
                           EAP-Type=PEAP, V=2
                           (TLS change_cipher_spec,
                            TLS finished)

   EAP-Response/
   EAP-Type=PEAP, V=2 -> finished, EAP-TLV
                           [EAP-Payload-TLV
                           [EAP-Request/Identity]])

   TLS channel established
   (messages sent within the TLS channel)

                          <- EAP-Request/
                           Identity
   EAP-Response/
   Identity (MyID)

   EAP-TLV [EAP-Payload-TLV
   [EAP-Response/Identity (MyID)]] ->

                           <- EAP-Request/
                           EAP-Type=X
   EAP-Response/

   EAP-Type=X EAP-TLV [EAP-Payload-TLV
                          [EAP-Request/EAP-Type=X]]

   EAP-TLV [EAP-Payload
   [EAP-Response/EAP-Type=X
   or NAK NAK]] ->
                          <- EAP-Request/
                           EAP-Type=X
   EAP-Response/
   EAP-Type=X EAP-TLV [EAP-Payload
                          [EAP-Request/EAP-Type=X]]

   EAP-TLV [EAP-Payload
   [EAP-Response/
   EAP-Type=X]] ->
                           <- EAP-Request/
                              EAP-Type=EAP-TLV
   Crypto-Binding-TLV=(Version=0, Nounce, Number of inner EAP
   methods=<number>, Result TLV EAP-TLV [Crypto-Binding-TLV
                           (Version=0, Received-Version=2,
                           Nonce, B1_MAC),
                           Intermediate-Result-TLV (Failure), Method_Identity_TLV (for
   each EAP-Type inside PEAP), Method_Identity_TLV (for PEAP),
   CompoundMAC (over entire EAP
                           Result TLV packet inside the tunnel including
   EAP-header))
   // Compound MAC calculated using TLS key material only.
   EAP-Response/
   EAP-Type=EAP-TLV
   Crypto-Binding-TLV=(Version=0, Nounce, Number of inner EAP
   methods=<number>, (Failure)]

   EAP-TLV [Crypto-Binding-TLV
   (Version=0, Received-version=2,
   Nonce, B2_MAC),
   Result TLV (Failure), Method_Identity_TLV (for
   each EAP-Type inside PEAP), Method_Identity_TLV (for PEAP),
   CompoundMAC (over entire EAP TLV packet inside the tunnel including
   EAP-header))

   Result=Failure  ->
   Intermediate-Result-TLV (Failure)]

   (TLS session cache entry flushed)
   TLS channel torn down
   (messages sent in cleartext)

                           <- EAP-Failure

A.6 Server authentication fails in Part 1

   In the case where server authentication is unsuccessful in PEAP Part
   1, the conversation will appear as follows:

   Authenticating Peer     Authenticator
   -------------------     -------------
                           <- EAP-Request/
                           Identity
   EAP-Response/
   Identity (MyID) ->
                           <- EAP-Request/
                           EAP-Type=PEAP, V=2
                           (PEAP Start)
   EAP-Response/
   EAP-Type=PEAP, V=2
   (TLS client_hello)->
                           <- EAP-Request/
                           EAP-Type=PEAP, V=2
                           (TLS server_hello,
                            TLS certificate,
                    [TLS server_key_exchange,]
                        TLS server_hello_done)
   EAP-Response/
   EAP-Type=PEAP, V=2
   (TLS client_key_exchange,
   [TLS certificate_verify,]
    TLS change_cipher_spec,
    TLS finished) ->
                           <- EAP-Request/
                           EAP-Type=PEAP, V=2
                           (TLS change_cipher_spec,
                            TLS finished)
   EAP-Response/
   EAP-Type=PEAP, V=2
   (TLS change_cipher_spec,
   TLS finished)

                           <- EAP-Request/
                           EAP-Type=PEAP, V=2 finished, EAP-TLV
                           [EAP-Payload-TLV [
                           EAP-Request/Identity]])
   EAP-Response/
   EAP-Type=PEAP, V=2
   (TLS Alert message) ->
                           <- EAP-Failure
                           (TLS session cache entry flushed)

A.7 Session resume success

   In the case where a previously established session is being resumed,
   the EAP server supports TLS session cache flushing for unsuccessful
   PEAP
   PEAPv2 Part 2 authentications and both sides authenticate
   successfully, the conversation will appear as follows:

   Authenticating Peer     Authenticator
   -------------------     -------------
                           <- EAP-Request/
                           Identity
   EAP-Response/
   Identity (MyID) ->
                           <- EAP-Request/
                           EAP-Type=PEAP,V=2
                           (PEAP Start)
   EAP-Response/
   EAP-Type=PEAP, V=2
   (TLS client_hello)->
                           <- EAP-Request/
                           EAP-Type=PEAP, V=2
                           (TLS server_hello,
                           TLS change_cipher_spec
                           TLS finished)
   EAP-Response/
   EAP-Type=PEAP, V=2
   (TLS change_cipher_spec,
    TLS finished) ->
                           <- EAP-Request/
                              EAP-Type=EAP-TLV
   Crypto-Binding-TLV=(Version=0, Nounce, Number of inner EAP
   methods=0,
                              Result TLV (Success), Method_Identity_TLV (for PEAP),
   CompoundMAC (over entire EAP TLV packet inside the tunnel including
   EAP-header)) (Success)

   // Compound MAC calculated using TLS keys since there were no inner
   EAP methods.

   EAP-Response/
   EAP-Type=EAP-TLV
   Crypto-Binding-TLV=(Version=0, Nounce, Number of inner EAP
   methods=0, Nonce, B2_MAC),
   Result TLV (Success), Method_Identity_TLV (for PEAP),
   CompoundMAC (over entire EAP TLV packet inside the tunnel including
   EAP-header)) .
   -> (Success)->
   TLS channel torn down
   (messages sent in cleartext)

                           <- EAP-Success

A.8 Session resume failure

   In the case where a previously established session is being resumed,
   and the server authenticates to the client successfully but the
   client fails to authenticate to the server, the conversation will
   appear as follows:

   Authenticating Peer     Authenticator
   -------------------     -------------
                           <- EAP-Request/
                           Identity
   EAP-Response/
   Identity (MyID) ->
                           <- EAP-Request/
                           EAP-Request/
                           EAP-Type=PEAP, V=2
                           (TLS
                           (PEAP Start)
   EAP-Response/
   EAP-Type=PEAP, V=2
   (TLS client_hello) ->
                           <- EAP-Request/
                           EAP-Type=PEAP, V=2
                           (TLS server_hello,
                            TLS change_cipher_spec,
                            TLS finished)
   EAP-Response/
   EAP-Type=PEAP, V=2
   (TLS change_cipher_spec,
    TLS finished) ->
                           <- EAP-Request
                           EAP-Type=PEAP, V=2
                           (TLS Alert message)
   EAP-Response
   EAP-Type=PEAP, V=2 ->
                            <- EAP-Failure
                            (TLS session cache entry flushed)

A.9 Session resume failure

   In the case where a previously established session is being resumed,
   and the server authentication is unsuccessful, the conversation will
   appear as follows:

   Authenticating Peer     Authenticator
   -------------------     -------------
                          <- EAP-Request/
                           Identity
   EAP-Response/
   Identity (MyID) ->
                           <- EAP-Request/
                           EAP-Request/
                           EAP-Type=PEAP, V=2
                           (TLS
                           (PEAP Start)
   EAP-Response/
   EAP-Type=PEAP, V=2
   (TLS client_hello)->
                           <- EAP-Request/
                           EAP-Type=PEAP, V=2
                           (TLS server_hello,
                            TLS change_cipher_spec,
                            TLS finished)
   EAP-Response/
   EAP-Type=PEAP, V=2
   (TLS change_cipher_spec,
   TLS finished)
                           <- EAP-Request/
                           EAP-Type=PEAP, V=2
   EAP-Response/
   EAP-Type=PEAP, V=2
   (TLS Alert message) ->

              (TLS session cache entry flushed)
                           <- EAP-Failure

A.10 PEAP version negotiation

   In the case where the peer and authenticator have mismatched PEAP
   versions (e.g. the peer has a pre-standard implementation with
   version 0, and the authenticator has an implementation compliant with
   this specification), the session is being resumed, but the
   authentication is unsuccessful, the conversation will occur as follows:

   Authenticating Peer     Authenticator
   -------------------     -------------
                          <- EAP-Request/
                           Identity
   EAP-Response/
   Identity (MyID) ->
                           <- EAP-Request/
                           EAP-Request/
                           EAP-Type=PEAP, V=2
                           (TLS
                           (PEAP Start)

   EAP-Response/
   EAP-Type=PEAP, V=0
   (TLS client_hello)->
                           <- EAP-Request/
                           EAP-Type=PEAP, V=0
                           (TLS server_hello,
                            TLS change_cipher_spec,
                            TLS finished)

   //conversation continued using pre-standard PEAP version 0

A.11 Sequences of EAP methods

   Where PEAPv2 is negotiated, with a sequence of EAP method X followed
   by method Y, the conversation will occur as follows:

   Authenticating Peer     Authenticator
   -------------------     -------------
                           <- EAP-Request/
                           Identity
   EAP-Response/
   Identity (MyID1) ->
                           <- EAP-Request/
                           EAP-Type=PEAP, V=0 V=2
                           (PEAP Start, S bit set)

   EAP-Response/
   EAP-Type=PEAP, V=2
   (TLS client_hello)->
                           <- EAP-Request/
                           EAP-Type=PEAP, V=2
                           (TLS server_hello,
                            TLS certificate,
                    [TLS server_key_exchange,]
                    [TLS certificate_request,]
                        TLS server_hello_done)
   EAP-Response/
   EAP-Type=PEAP, V=2
   ([TLS certificate,]
    TLS client_key_exchange,
   [TLS certificate_verify,]
    TLS change_cipher_spec,
    TLS finished) ->
                          <- EAP-Request/
                           EAP-Type=PEAP, V=0
   EAP-Response/
   EAP-Type=PEAP, V=0 V=2
                           (TLS Alert message) change_cipher_spec,
                            TLS finished, EAP-TLV

                           [EAP-Payload-TLV[
                           EAP-Request/Identity]])

   TLS channel established
   (messages sent within the TLS channel)

   EAP-TLV [EAP-Payload-TLV
   [EAP-Response/Identity]] ->
   (TLS session cache entry flushed)

                         <- EAP-Failure

10.  Acknowledgments EAP-TLV [EAP-Payload-TLV
                         [EAP-Request/EAP-Type=X]]]

   EAP-TLV [EAP-Payload-TLV
   [EAP-Response/EAP-Type=X]] ->

                          <- EAP-TLV [ EAP-Payload-TLV
                         [EAP-Request/EAP-Type=X]]

   EAP-TLV [EAP-Payload-TLV
   [EAP-Response/EAP-Type=X]]->

                           <- EAP-TLV [EAP Payload TLV [EAP-Type=Y],
                           (Intermediate Result TLV (Success),
                           Crypto-Binding-TLV
                           (Version=0, Received-version=2,
                           Nonce, B1_MAC))]

   // Next EAP conversation started after successful completion of
   previous method X. The intermediate-status and crypto-binding TLVs
   are sent in next packet to minimize round-trips.  In this example,
   identity request is not sent before negotiating EAP-Type=Y.

   EAP-TLV [EAP-Payload-TLV [EAP-Type=Y],
   (Intermediate Result TLV (Success),
   Crypto-Binding-TLV (Version=0,
   Received-version=2, Nonce, B2_MAC))]->

   // Compound MAC calculated using Keys generated from
   EAP methods X and the TLS tunnel.

                          <- EAP-TLV [EAP Payload TLV [
                          EAP-Type=Y]]

   EAP-TLV[EAP Payload TLV
   [EAP-Type=Y]] ->
                           <- EAP-TLV [Result-TLV (Success),
                           Intermediate Result TLV (Success),
                           Crypto-Binding-TLV
                           (Version=0, Received-version=2,
                           Nonce, B1_MAC))]

   EAP-TLV [(Result-TLV (Success),
   Intermediate Result TLV (Success),
   Crypto-Binding-TLV (Version=0,
   Received-version=2, Nonce, B2_MAC))]->

   // Compound MAC calculated using Keys generated from EAP methods X
   and Y and the TLS tunnel.  // Compound Keys generated using Keys
   generated from EAP methods X and Contributions Y; and the TLS tunnel.

   TLS channel torn down (messages sent in cleartext)

                           <- EAP-Success

Acknowledgments

   Thanks to Hakan Andersson, Jan-Ove Larsson, Larsson and Magnus Nystrom of RSA
   Security; Bernard Aboba, Vivek Kamath, Stephen Bensley, Bensley and Narendra
   Gidwani of Microsoft;
   Joe Salowey, Hao Zhou, Ilan Frenkel, Frenkel and Nancy Cam-Winget of Cisco;
   Hakan Andersson of RSA;
   Jose Puthenkulam of Intel for their contributions and critiques.

   The compound binding exchange to address man-in-the-middle attack is
   based on the draft "The Compound Authentication Binding
   Problem"[CompoundBinding].

   The vast majority of the work by Simon Josefsson and Hakan Andersson
   was done while he was they were employed at RSA Laboratories.

Author Addresses

   Ashwin Palekar
   Microsoft Corporation
   One Microsoft Way
   Redmond, WA 98052

   Phone: +1 425 882 8080
   EMail: ashwinp@microsoft.com

   Dan Simon
   Microsoft Corporation
   One Microsoft Way
   Redmond, WA 98052

   Phone: +1 425 706 6711
   EMail: dansimon@microsoft.com
   Glen Zorn
   Cisco Systems
   500 108th Avenue N.E.
   Suite 500
   Bellevue, Washington 98004
   USA

   Phone: + 1 425 438 8210
   Fax:   + 1 425 438 1848
   EMail: gwz@cisco.com

   Simon Josefsson
   Drottningholmsv„gen
   Drottningholmsvagen 70
   112 42 Stockholm
   Sweden

   Phone: +46 8 619 04 22
   EMail: jas@extundo.com

11.

   Hao Zhou
   Cisco Systems, Inc.
   4125 Highlander Parkway
   Richfield, OH 44286

   Phone: +1 330 523 2132
   Fax:   +1 330 523 2239
   EMail: hzhou@cisco.com

   Joseph Salowey
   Cisco Systems
   2901 3rd Ave
   Seattle, WA 98121

   Phone: +1 206 256 3380
   EMail: jsalowey@cisco.com

Intellectual Property Statement

   The IETF takes no position regarding the validity or scope of any
   intellectual property or other rights that might be claimed to
   pertain to the implementation or use of the technology described in
   this document or the extent to which any license under such rights
   might or might not be available; neither does it represent that it
   has made any effort to identify any such rights.  Information on the
   IETF's procedures with respect to rights in standards-track and
   standards-related
   standards- related documentation can be found in BCP-11.  Copies of
   claims of rights made available for publication and any assurances of
   licenses to be made available, or the result of an attempt made to
   obtain a general license or permission for the use of such
   proprietary rights by implementors or users of this specification can
   be obtained from the IETF Secretariat.

   The IETF invites any interested party to bring to its attention any
   copyrights, patents or patent applications, or other proprietary
   rights which may cover technology that may be required to practice
   this standard.  Please address the information to the IETF Executive
   Director.

12.

Full Copyright Statement

   Copyright (C) The Internet Society (2002). (2003).  All Rights Reserved.

   This document and translations of it may be copied and furnished to
   others, and derivative works that comment on or otherwise explain it
   or assist in its implementation may be prepared, copied, published
   and distributed, in whole or in part, without restriction of any
   kind, provided that the above copyright notice and this paragraph are
   included on all such copies and derivative works.  However, this
   document itself may not be modified in any way, such as by removing
   the copyright notice or references to the Internet Society or other
   Internet organizations, except as needed for the purpose of
   developing Internet standards in which case the procedures for
   copyrights defined in the Internet Standards process must be
   followed, or as required to translate it into languages other than
   English.  The limited permissions granted above are perpetual and
   will not be revoked by the Internet Society or its successors or
   assigns.  This document and the information contained herein is
   provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE
   INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR
   IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
   THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE." PURPOSE.

Expiration Date

   This memo is filed as <draft-josefsson-pppext-eap-tls-eap-06.txt>, <draft-josefsson-pppext-eap-tls-eap-07.txt>,
   and  expires after six months. April 22, 2004.