<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.21 (Ruby 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-dekok-emu-teapv2-00" category="std" consensus="true" submissionType="IETF" obsoletes="7170" updates="9427" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.24.0 -->
  <front>
    <title abbrev="TEAP">Tunnel Extensible Authentication Protocol (TEAP) Version 2</title>
    <seriesInfo name="Internet-Draft" value="draft-dekok-emu-teapv2-00"/>
    <author initials="A." surname="DeKok" fullname="Alan DeKok">
      <organization>InkBridge Networks</organization>
      <address>
        <email>alan.dekok@inkbridge.io</email>
      </address>
    </author>
    <date year="2025" month="June" day="23"/>
    <area>Internet</area>
    <workgroup>EMU working group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 46?>

<t>This document defines the Tunnel Extensible Authentication Protocol
(TEAP) version 2.  It addresses a number of security and
interoperability issues in TEAPv1 which was defined in
<xref target="I-D.ietf-emu-rfc7170bis"/>.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-dekok-emu-teapv2/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        EMU Working Group mailing list (<eref target="mailto:emu@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/emu/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/emu/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/inkbridgenetworks/teapv2.git"/>.</t>
    </note>
  </front>
  <middle>
    <?line 53?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Tunnel Extensible Authentication Protocol (TEAP) version 1 was first
defined in <xref target="RFC7170"/>.  However, implementations of that
specification were found to have limited interoperability, due to the
complexity and under-specification of the cryptographic key
deriviations that it defined.</t>
      <t>TEAPv1 was updated and clarified in <xref target="I-D.ietf-emu-rfc7170bis"/>.  That
document described a large amount of potential functionality in the
protocol, but also noted in <xref section="5.1" sectionFormat="comma" target="I-D.ietf-emu-rfc7170bis"/>
that only a small subset of that functionality was interoperable.  In
addition, the interoperable parts of the protocol security issues
which could allow on-path attackers essentially unlimited control over
the data being transported inside of the TLS tunnel.</t>
      <t>We do not review the full security issues with TEAPv1 here.  Instead,
we define new and simpler cryptographic key deriviations.  These
derivations address all of the known issues with TEAPv1.</t>
      <section anchor="changes-from-teapv1">
        <name>Changes from TEAPv1</name>
        <t>Most aspects of TEAPv1 are unchanged.  The message and TLV formats are
the same, as are the derivations for the session_key_seed
(<xref section="6.1" sectionFormat="comma" target="I-D.ietf-emu-rfc7170bis"/>), along with the Master
Session Key (MSK) and Extended Master Session Key (EMSK)
(<xref section="6.4" sectionFormat="comma" target="I-D.ietf-emu-rfc7170bis"/>).</t>
        <t>The Crypto-Binding TLV <xref section="4.2.13" sectionFormat="comma" target="I-D.ietf-emu-rfc7170bis"/>
format is also the same as for TEAPv1, even though the cryptographic
derivation has changed.</t>
        <t>The main difference between TEAPv1 and TEAPv2 is in the cryptographic
calculations.  The changes for TEAPv2 address a number of issues in
TEAPv1:</t>
        <ul spacing="normal">
          <li>
            <t>each inner exchange is bound to the TLS tunnel.</t>
          </li>
          <li>
            <t>Where an inner exchange in TEAPv2 usd an MSK of all zeros, TEAPv2
defines a pseudo MSK which is derived from the data being exchanged.</t>
          </li>
          <li>
            <t>each inner exchange includes a Crypto-Binding TLV.</t>
          </li>
          <li>
            <t>inner exchanges which use a challenge (e.g. EAP-MSCHAPv2 <xref target="KAMATH"/>)
derive that challenge from the TLS parameters.</t>
          </li>
          <li>
            <t>The cryptographic key derivations have been substantially
simplified.</t>
          </li>
        </ul>
        <t>The result is a protocol which is simpler and is more extensible.</t>
      </section>
    </section>
    <section anchor="negotiation">
      <name>Negotiation</name>
      <t>TEAPv2 uses the same version negotiation method as is defined in
<xref section="3.1" sectionFormat="comma" target="I-D.ietf-emu-rfc7170bis"/>, with the Version field set
to two (2) for TEAPv2.</t>
      <t>TEAPv2 MUST use TLS 1.3 or later.</t>
    </section>
    <section anchor="cryptographic-calculations">
      <name>Cryptographic Calculations</name>
      <t>The crytographic calculations for TEAPv2 have been substantially
simplified from those defined in <xref section="6" sectionFormat="comma" target="I-D.ietf-emu-rfc7170bis"/>.</t>
      <section anchor="key-derivations">
        <name>TEAP Authentication Phase 1: Key Derivations</name>
        <t>The session key seed is the same as defined in
<xref section="6.2.1" sectionFormat="comma" target="I-D.ietf-emu-rfc7170bis"/> for TEAPv2.  That
definition is reproduced here verbatim:</t>
        <artwork><![CDATA[
   session_key_seed = TLS-Exporter(
                      "EXPORTER: teap session key seed",, 40)
]]></artwork>
      </section>
      <section anchor="intermediate-compound-key">
        <name>Intermediate Compound Key Derivations</name>
        <t>Instead of using a complex key deriviation method as was done with
TEAPv1, TEAPv2 uses a much simpler method to derive the keys.  This
method is split into a few steps:</t>
        <ul spacing="normal">
          <li>
            <t>define a seed which combines data from the current inner message
along with data from the previous round.</t>
          </li>
          <li>
            <t>Call the TLS-Exporter() function (<xref section="7.5" sectionFormat="comma" target="RFC8446"/>) with the
above seed as the "context_value", in order to derive keying data.</t>
          </li>
          <li>
            <t>Split the resulting keying data into subkeys, which are each used
for different purposes.</t>
          </li>
        </ul>
        <t>TEAPv1 mixed data from each inner authentication message into
the key derivation, TEAPv2 mixes data from each inner message.  Some
inner authentication methods do not derive keys
(e.g. Basic-Password-Req TLV and Basic-Password-Resp TLV).  Other
inner message exchanges such as the CSR-Attributes TLV, PKCS#7 TLV, or
PKCS#10 TLV also do not derive keys.</t>
        <t>Where TEAPv1 uses a Master Session Key (MSK) of all zeros for those
inner messages which did not define an MSK, TEAPv2 defines a pseudo
MSK which is tied to the TLS tunnel.  The pseduo MSK is derived from
the data being exchanged, which should better protect the data from
on-path attackers.  This pseudo MSK is then used in the cryptographic
calculations.</t>
        <t>The MSK and/or EMSK for each inner message are mixed with a seed from
previous rounds beginning with the TEAP Phase 2 session_key_seed, to
yield a new set of keys for this round.  The seed from the final round
is then used to derive the MSK and EMSK for TEAP.</t>
        <section anchor="key-seeding">
          <name>Key Seeding</name>
          <t>All intermediate compound key deriviations for TEAPv2 depend on the
same structure as input to the key deriviations.  For simplicity, we
define the structure using the same syntax as is used for TLS
<xref target="RFC8446"/></t>
          <artwork><![CDATA[
   struct {
       opaque PrevRoundKey[40]
       opaque MSK[32];
       opaque EMSK[32]
   } RoundSeed
]]></artwork>
          <t>The above fields have the following definitions:</t>
          <t>PrevRoundKey</t>
          <ul empty="true">
            <li>
              <t>A key which ties the current exchange to the previous exchange.</t>
              <t>For the first round, this field is taken from the session_key_seed.</t>
              <t>For subsequent rounds, this field is the previous rounds RoundKey
field, which is taken from the DerivedKey structure defined in the
next section.</t>
            </li>
          </ul>
          <t>MSK</t>
          <ul empty="true">
            <li>
              <t>The Master Session Key (MSK) from the inner message</t>
              <t>If the MSK is longer than 32 octets, the extra octets are not used
in this structure.</t>
              <t>If the inner method derives an EMSK but not an MSK, then this field
MUST be initialized to all zeros.</t>
              <t>If the inner message does not perform authentication, or the inner
authentication method does not derive an MSK or an EMSK, then a
pseudo MSK is derived instead.  See (TBD) below for dicussion and
definition of the pseudo MSK.</t>
            </li>
          </ul>
          <t>EMSK</t>
          <ul empty="true">
            <li>
              <t>The Extended Master Session Key (EMSK) from the inner method.</t>
              <t>If the EMSK is longer than 32 octets, the extra octets are not used
in this structure.</t>
              <t>If the inner method does not derive an EMSK, then this field is
initialized to all zeros.</t>
            </li>
          </ul>
          <t>An inner message MUST derive either an MSK (including a pseudo MSK),
or an EMSK, or both.  The RoundSeed structure MUST NOT have both of
the MSK and EMSK fields be all zeros.</t>
        </section>
        <section anchor="key-derivation">
          <name>Key Derivation</name>
          <t>Each round produces a DerivedKey, which is depends on the RoundSeed
for this round via the following calculation.</t>
          <artwork><![CDATA[
   DerivedKey = TLS-Exporter(
                "EXPORTER: TEAPv2 Inner Methods Compound Keys",
                RoundSeed, 104)
]]></artwork>
          <t>The DerivedKey is 104 octets in length, and assigned to the following
structure:</t>
          <artwork><![CDATA[
   struct {
       opaque RoundKey[40];
       opaque CMK[32]
       opaque Challenge[32]
   } RoundSeed
]]></artwork>
          <t>The above fields have the following definitions:</t>
          <t>RoundKey</t>
          <ul empty="true">
            <li>
              <t>The key for this round, which is copied to the PrevRoundKey field in
the RoundSeed structure, in order to seed the next round.</t>
            </li>
          </ul>
          <t>CMK</t>
          <ul empty="true">
            <li>
              <t>The Compound MAC Key (CMK)</t>
              <t>The CMK is mixed with with various data from the TEAP negotiation to
create the Compound-MAC field of the Crypto-Binding attribute.</t>
            </li>
          </ul>
          <t>Challenge</t>
          <ul empty="true">
            <li>
              <t>The implicit challenge used for inner authentication methods such as
EAP-MSCHAPv2.</t>
              <t>Unlike the implicit challenge in <xref section="2.4" sectionFormat="comma" target="RFC9427"/>, this
challenge is fixed size in length.  The inner method uses only as
much of the Challenge as it needs, and the remainder of the
Challenge is ignored.</t>
              <t>If the inner method does not use a challenge, then the Challenge
field is ignored.</t>
            </li>
          </ul>
          <t>TBD: this derivation should be from each message, NOT from each side.
That is, instead of each party keeping track of "ours" and "theirs"
key data, there should only be one set of data "session".  The party
which sends the first inner message is the one which is bootstraps
this process.  Each inner exchange then updates RoundKey.</t>
        </section>
      </section>
      <section anchor="methods-which-do-not-generate-msk-or-emsk">
        <name>Methods which do not generate MSK or EMSK</name>
        <t>Where an inner message does not generate MSK (Basic-Password-Resp TLV
or PKCS#7 TLV), then a pseudo MSK is calculated which is derived from
the inner data.  This pseudo MSK ensures that the data from each
message is mixed in with the data from previous exchanges.  This
mixing cryptographically binds every inner message to the protected
tunnel (not just inner authentication messages), and binds each
message to the previous one.  This cryptographic binding prevents
on-path attacks.</t>
        <t>In contrast, TEAPv1 sets the MSK to zero for these TLVs, which does
not tie the data to the TLS session, or prevent on-path attackers.</t>
        <artwork><![CDATA[
  MSK = TLS-Exporter("EXPORTER: TEAPv2 Pseudo MSK",
                     data, 32)
]]></artwork>
        <t>Where "data" is the contents of the TLV.  That is, everything encoded
in the TLV after the four octet TLV header.  The following list shows
the TLVs which are used in inner message exchanges, and the contents
which are used as the "data" fefined above.</t>
        <ul spacing="normal">
          <li>
            <t>Basic-Password-Req TLV: Value</t>
          </li>
          <li>
            <t>Basic-Password-Resp TLV: Userlen, Username, Passlen, Password</t>
          </li>
          <li>
            <t>CSR-Attributes TLV: DER Encoded CSR Attributes</t>
          </li>
          <li>
            <t>PKCS#7 TLV: PKCS#7 Data</t>
          </li>
          <li>
            <t>PKCS#10 TLV: PKCS#10 Data</t>
          </li>
        </ul>
        <t>The sending party MUST inform the receiving party which TLVs are used
to calculate this pseudo MSK via the Pseudo-MSK-Contents TLV, which is
defined in (TBD), below.</t>
        <t>This explicit signal makes implementations easier, because otherwise
each non-authentication exchange would require special-purpose code to
process the TLVs being sent.  It also makes future extensions easier,
as any future non-authentication exchanges can simply be listed in the
Pseudo-MSK-Contents TLV, and do not need special-purpose code to
process.</t>
      </section>
      <section anchor="computing-compound-mac">
        <name>Computing the Compound-MAC</name>
        <t>The Compound-MAC used in the Crypto-Binding TLV is calculated exactly
the same as with TEAPv1:</t>
        <artwork><![CDATA[
   Compound-MAC = the first 20 octets of MAC( CMK, BUFFER )
]]></artwork>
        <t>Where CMK is the Compound MAC key derived above for this round, and
the definition of BUFFER is the same as in <xref section="6.3" sectionFormat="comma" target="I-D.ietf-emu-rfc7170bis"/> for TEAPv1.</t>
      </section>
      <section anchor="eap-master-session-key-generation">
        <name>EAP Master Session Key Generation</name>
        <t>TEAP authentication assures that the MSK and EMSK output from running
TEAP are combined result of all inner methods.  The resulting MSK and
ESMK are generated from the final inner method, via the following
derivation:</t>
        <artwork><![CDATA[
   MSK  = the first 64 octets of TLS-PRF(RoundSeed,
          "Session Key Generating Function")
   EMSK = the first 64 octets of TLS-PRF(RoundSeed,
          "Extended Session Key Generating Function")
]]></artwork>
        <t>The value for RoundSeed MUST use the PrevRoundSeed from the previous
round, along with the MSK and the EMSK from the final inner message.</t>
      </section>
      <section anchor="operation-across-multiple-rounds">
        <name>Operation across Multiple Rounds</name>
        <t>Unlike TEAPv1, every message for every round in TEAPv2 MUST contain a
Crypto-Binding TLV.  This cryptographic binding helps protect from
on-path attackers.</t>
        <t>Any party which sends a message in TEAPv2 MUST include a
Crypto-Binding TLV.  Any party which receives a message in TEAPv2 MUST
verify that it contains a Crypto-Binding TLV</t>
        <t>TBD: discuss why use of MSK only in TEAPv1 is likely to avoid
cryptographic binding?  The session_key_seed is taken from the
TLS-Exporter(), which binds it to the tunnel.  But subsequent
exchanges of MSK-only methods do not bind the results to the tunnel.
This may or may not be a problem?</t>
      </section>
      <section anchor="teapv2-message-format">
        <name>TEAPv2 Message Format</name>
        <t>The TEAPv2 message format is identical to that of TEAPv1
(<xref section="4.1" sectionFormat="comma" target="I-D.ietf-emu-rfc7170bis"/>) with only one change: the
Ver field is set to "2", to indicate that this is TEAPv2.</t>
      </section>
      <section anchor="teapv2-tlvs">
        <name>TEAPv2 TLVs</name>
        <t>The TEAPv2 TLV format and TLV definitions are identical to that for
TEAPv1 (<xref section="4.2" sectionFormat="comma" target="I-D.ietf-emu-rfc7170bis"/>), with only the
changes and additions noted below.</t>
        <section anchor="crypto-binding-tlv">
          <name>Crypto-Binding TLV</name>
          <t>The format of the TEAPv2 Crypto-Binding TLV is the same as for TEAPv1
(<xref section="4.2.13" sectionFormat="comma" target="I-D.ietf-emu-rfc7170bis"/>), with the following
changes:</t>
          <ul spacing="normal">
            <li>
              <t>The Version field MUST set to two (2).</t>
            </li>
            <li>
              <t>The Received-Ver field MUST be set to two (2), to indicate TEAPv2.</t>
            </li>
            <li>
              <t>The Flags field MUST have value 2, to indicate that only the MSK
Compound-MAC is present.</t>
            </li>
            <li>
              <t>the Nonce field is not used.  It SHOULD be set to zeros by the
sender.  The receiver MUST ignore it.</t>
            </li>
            <li>
              <t>The ESMK Compound-MAC field is not used.  It SHOULD be set to zeros
by the sender.  The receiver MUST ignore it.</t>
            </li>
            <li>
              <t>The MSK Compound-MAC field is calculated as described above in
<xref target="computing-compound-mac"/>.</t>
            </li>
          </ul>
          <t>Note that unlike TEAPv1, only one CMK is derived for each inner
message, which also means that only one Compound-MAC is derived.  This
Compound-MAC is placed into the MSK Compound-MAC field, and the EMSK
Compound-MAC field is not used.</t>
          <t>It would be possible to redefine the entire contents of the
Crypto-Binding TLV, in the interest of minor optimization.  However,
re-using the existing Crypto-Binding TLV format means that there are
minimal changes required to implementations, which is a more useful
property than saving a few octets of data being exchanged.</t>
        </section>
        <section anchor="pseudo-msk-contents-tlv">
          <name>Pseudo-MSK-Contents TLV</name>
          <t>The Pseudo-MSK-Contents TLV provides a mechanism for the sender to inform
the receiver as to which attribute or attributes were used to
calculate the pseudo MAC.</t>
          <t>The Pseudo-MSK-Contents TLV MUST be included in any message where no
authentication is taking place.  The Pseudo-MSK-Contents TLV MUST be
included in any message where the inner authentication method does not
derive either an MSK or an EMSK.  Where a party expects a
Pseudo-MSK-Contents TLV but does not receive it, then the peer or EAP
server MUST treat this as a fatal error of 2010 (Missing
Pseudo-MSK-Contents TLV).</t>
          <t>The Pseudo-MSK-Contents TLV MUST NOT be included in any message where
the inner authentication method derives either an MSK or an EMSK.
Where a party receives an unexpected Pseudo-MSK-Contents TLV, then the
peer or EAP server MUST treat this as a fatal error of 2002
(Unexpected TLVs Exchanged).</t>
          <t>Where there is a fatal error due to a problem with the
Pseudo-MSK-Contents TLV, the party MUST send a NAK TLV which includes
a reference to the Pseudo-MSK-Contents TLV.</t>
          <t>TBD: Do we want to add a Vendor-Id as is done with the NAK TLV?</t>
          <artwork><![CDATA[
 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             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Type Reference         | ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
          <t>M</t>
          <ul empty="true">
            <li>
              <t>1 - Required TLV</t>
            </li>
          </ul>
          <t>R</t>
          <ul empty="true">
            <li>
              <t>Reserved, set to zero (0)</t>
            </li>
          </ul>
          <t>TLV Type</t>
          <ul empty="true">
            <li>
              <t>20 - Pseudo-MSK-Contents</t>
            </li>
          </ul>
          <t>Length</t>
          <ul empty="true">
            <li>
              <t>The Length field is two octets and contains the length of the TLV
field in octets.  The Length MUST be at least two (2), and MUST be a
multiple of two (2).</t>
              <t>If the Length field is invalid, implementations MUST behave as if
Pseudo-MSK-Contents TLV was missing.</t>
            </li>
          </ul>
          <t>Type Reference</t>
          <ul empty="true">
            <li>
              <t>An array of one or more 2-octet values.  The values MUST be the TLV
Type numbers of the TLVs which were used as input to the pseudo MAC
calculation.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="implicit-challenges">
        <name>Implicit Challenges</name>
        <t>TBD EAP-MSCHAPv2</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>TBD - assign new Pseduo-MSK-Contents TLV</t>
      <t>TBD - assign Error 2010 (Missing Pseudo-MSK-Contents TLV)</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="BCP14">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC9427">
          <front>
            <title>TLS-Based Extensible Authentication Protocol (EAP) Types for Use with TLS 1.3</title>
            <author fullname="A. DeKok" initials="A." surname="DeKok"/>
            <date month="June" year="2023"/>
            <abstract>
              <t>The Extensible Authentication Protocol-TLS (EAP-TLS) (RFC 5216) has been updated for TLS 1.3 in RFC 9190. Many other EAP Types also depend on TLS, such as EAP-Flexible Authentication via Secure Tunneling (EAP-FAST) (RFC 4851), EAP-Tunneled TLS (EAP-TTLS) (RFC 5281), the Tunnel Extensible Authentication Protocol (TEAP) (RFC 7170). It is possible that many vendor-specific EAP methods, such as the Protected Extensible Authentication Protocol (PEAP), depend on TLS as well. This document updates those methods in order to use the new key derivation methods available in TLS 1.3. Additional changes necessitated by TLS 1.3 are also discussed.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9427"/>
          <seriesInfo name="DOI" value="10.17487/RFC9427"/>
        </reference>
        <reference anchor="I-D.ietf-emu-rfc7170bis">
          <front>
            <title>Tunnel Extensible Authentication Protocol (TEAP) Version 1</title>
            <author fullname="Alan DeKok" initials="A." surname="DeKok">
         </author>
            <date day="28" month="May" year="2025"/>
            <abstract>
              <t>   This document defines the Tunnel Extensible Authentication Protocol
   (TEAP) version 1.  TEAP is a tunnel-based EAP method that enables
   secure communication between a peer and a server by using the
   Transport Layer Security (TLS) protocol to establish a mutually
   authenticated tunnel.  Within the tunnel, TLV objects are used to
   convey authentication-related data between the EAP peer and the EAP
   server.  This document obsoletes RFC 7170 and updates RFC 9427 by
   moving all TEAP specifications from those documents to this one.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-emu-rfc7170bis-22"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="KAMATH">
          <front>
            <title>Microsoft EAP CHAP Extensions</title>
            <author initials="R. H. and A." surname="Palekar" fullname="Ryan Hurst and Ashwin Palekar">
              <organization/>
            </author>
            <date year="2007" month="June"/>
          </front>
        </reference>
        <reference anchor="RFC7170">
          <front>
            <title>Tunnel Extensible Authentication Protocol (TEAP) Version 1</title>
            <author fullname="H. Zhou" initials="H." surname="Zhou"/>
            <author fullname="N. Cam-Winget" initials="N." surname="Cam-Winget"/>
            <author fullname="J. Salowey" initials="J." surname="Salowey"/>
            <author fullname="S. Hanna" initials="S." surname="Hanna"/>
            <date month="May" year="2014"/>
            <abstract>
              <t>This document defines the Tunnel Extensible Authentication Protocol (TEAP) version 1. TEAP is a tunnel-based EAP method that enables secure communication between a peer and a server by using the Transport Layer Security (TLS) protocol to establish a mutually authenticated tunnel. Within the tunnel, TLV objects are used to convey authentication-related data between the EAP peer and the EAP server.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7170"/>
          <seriesInfo name="DOI" value="10.17487/RFC7170"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
H4sIABs9WWgAA71bbXPbRpL+Pr9iSv4i7ZFciVbsDa/WWVmWLz5HjkuSvVeV
SqVAYihhBQIMBhClOL7ffk93zxv4Yit3qVNSCYmXnp5+fbp7OBwOVVu0pZno
q66qTKnP7ltT2WJaGn3StTemaotZ1hZ1pd83dVvP6lLvX52dvD/QH01j6fpY
ZdNpY+5AAtdVXs+qbAGCeZPN22FubuvboVl0w9Zky7vx8PBQKdtmVf5LVtYV
nmubzqhi2fAn244PD789BM3GZBP9pmpNU5lWra4n+uz8g17VzW1RXevrpu6W
6nYVHxm+ovUUmJ1o2+bKdtNFYYnDq4cllnlzdvVa1VNbl6Y1dqKfHz0/VN0y
z/jbt8fj50oti4nG3xM9yyrdWaOzpske9H4x11lZ6gdjD3Td6JvM3ugb0xil
NUQyoRv4aOumbczcTphEbuZZV7YWT/j7Dwu5TV9VBunWzUSpoS4qXDwZ6Vfm
bX2LB0V+JyWY8JfMIivKCbjIqhGL9B9FdTttivzajIoaD9TNdVYVv7GqSCi3
L/mmfmdakhkWrOpmgdt3ZoLHX56+Pzqe6IvXp387en6MC/Tp+PjZRD6SOOjj
m+GrUWHaOSuwmc9IaNPCguuimqf03p6cn1x9T5/w5yxq77yYNbWt562GYejT
7/EfZ151ZffkWZL/RP9nVxkNzT+Xi142Wv5EHhcPkMf3XWNbDevRJ/ZmVcAq
s9LcZo1Sd6bqmBU2DbYWfBGxgft/0DZGkBI9UbQ33XSigwgrJ6S/io2O8AD0
MhzqbGrbJpvh29VNYTVsu1vAJUi5RWWg2xvzeMdRznHuvOOMIGBsJs8bYy2o
ZbrqFlPT6HqurZl1TdE+0F4hbNh4vTRNNi1KugjD7vAC9k8k74706qaY3ehV
Zh1rOe6pT5926O/z55Hsb1HkeWmUekJu1NR5NyOOsds/Ggz8no6Yh3kBLanI
if706TtYFa2OpbX+vl4ZvDHQxWJZGpIoU7W08fYma5Vdmlkx94ut4Gp6XnfQ
OpzpJrszuiwWRcu0+5IZ6Lwz9BS4VbOayN87KWq8b5phnzQvaPSseVi29XWT
LSFHfWsewHxT3BWOLeJJF17tOYTnxY7NSgzJeYlZmTUg7je9W/xaX9E+E4Oy
s6aYEhkNGnDcbIENt8Tgsm5J8lmp513FCsrECCre5dKpYqCnHayptLWu6vYr
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

-->

</rfc>
