<?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-01" 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-01"/>
    <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="October" day="13"/>
    <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 between TEAPv1 and TEAPv2 simplify the
protocol substantially, and address issues seen with TEAPv1:</t>
        <ul spacing="normal">
          <li>
            <t>The Crypto-Binding TLV calculation in TEAPv1 had significant
differences between theory and practice.  TEAPv2 redefines the
deriviation of the Crypto-Binding TLV to make it simpler.</t>
          </li>
          <li>
            <t>A number of inner message exchanges did not tie the Crypto-Binding
TLV to the data being exchanged, as the MSK was set to all zeroes.
This setting negated most of the utility of the Crypto-Binding TLVs.
TEAPv2 simplifies this deriviation, and avoids the use of the
Crypto-Binding TLV where it is not necessary.</t>
          </li>
          <li>
            <t>The other 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="initial-binding-tlv">
        <name>Initial-Binding TLV</name>
        <t>NOTE: We should use either the Initial-Binding TLV <em>OR</em> the
Crypto-Binding TLV.  We do not need both.</t>
        <t>The Initial-Binding TLV is used to prove that both the peer and server
participated in the tunnel establishment and sequence of
authentications.  It also provides verification of the TEAP type,
version negotiated, and Outer TLVs exchanged before the TLS tunnel
establishment.</t>
        <t>The Initial-Binding TLV MUST be included in the first message sent by
each party, and MUST NOT be included in any subseqent messages.</t>
        <t>A party receiving an initial message from the other party MUST check
that the message contains an Initial-Binding TLV. The Initial-Binding
TLV MUST be validated by the receiving part before processing any
other field is process.</t>
        <t>The Initial-Binding TLV is valid only if the following checks pass on
its contents:</t>
        <ul spacing="normal">
          <li>
            <t>The Version field contain a known value,</t>
          </li>
          <li>
            <t>The Received-Ver field matches the TEAP version sent by the receiver during the EAP version negotiation,</t>
          </li>
          <li>
            <t>The Sub-Type field is set to the correct value for this exchange,</t>
          </li>
          <li>
            <t>The Compound-MAC verifies correctly.</t>
          </li>
        </ul>
        <t>If any of the above checks fails, then the TLV is invalid.  An invalid
Initial-Binding TLV is a fatal error and is handled as described in
((RFC7170bis phase 2 errors))</t>
        <t>Once the Initial-Binding TLV(s) have been exchanged and verified, both
parties know that the TLS tunnel is secure.  Any subsequent
Crypto-Binding TLV exchange is unnecessary.</t>
        <t>The Crypto-Binding TLV is defined as follows:</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             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Reserved   |    Version    |  Received-Ver.| Flags|Sub-Type|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
~                             Nonce                             ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
~                          Compound-MAC                         ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <t>M</t>
        <ul empty="true">
          <li>
            <t>Mandatory, set to one (1)</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>TBD - Initial-Binding TLV</t>
          </li>
        </ul>
        <t>Length</t>
        <ul empty="true">
          <li>
            <t>24</t>
          </li>
        </ul>
        <t>Reserved</t>
        <ul empty="true">
          <li>
            <t>Reserved, set to zero (0)</t>
          </li>
        </ul>
        <t>Version</t>
        <ul empty="true">
          <li>
            <t>The Version field is a single octet, which is set to the version
of Crypto-Binding TLV the TEAP method is using.  For an
implementation compliant with TEAPv1, the version
number MUST be set to one (1).</t>
          </li>
        </ul>
        <t>Received-Ver</t>
        <ul empty="true">
          <li>
            <t>The Received-Ver field is a single octet and MUST be set to the
TEAP version number received during version negotiation.  Note
that this field only provides protection against downgrade
attacks, where a version of EAP requiring support for this TLV is
required on both sides.</t>
            <t>For TEAPv1, this version number MUST be set to one (1).</t>
          </li>
        </ul>
        <t>Flags</t>
        <ul empty="true">
          <li>
            <t>The Flags field is four bits.</t>
            <ul empty="true">
              <li>
                <t>The field MUST be set to zero.</t>
                <t>All other values of the Flags field are invalid.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Sub-Type</t>
        <ul empty="true">
          <li>
            <t>The Sub-Type field is four bits.  Defined values include</t>
            <ul empty="true">
              <li>
                <t>0  Binding Request</t>
                <ul empty="true">
                  <li>
                    <t>MUST be used by authentication server.</t>
                  </li>
                </ul>
                <t>1  Binding Response</t>
                <ul empty="true">
                  <li>
                    <t>MUST be used by peer.</t>
                  </li>
                </ul>
                <t>All other values of the Sub-Type field are invalid.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Nonce</t>
        <ul empty="true">
          <li>
            <t>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.  The nonce in a request MUST have its least significant bit
set to zero (0), and the nonce in a response MUST have the same
value as the request nonce except the least significant bit MUST
be set to one (1).</t>
          </li>
        </ul>
        <t>Compound-MAC</t>
        <ul empty="true">
          <li>
            <t>The Compound-MAC field is 20 octets.  The computation of the MAC
is described in <xref target="computing-compound-mac"/>.</t>
            <t>Note that this field is always 20 octets in length.  Any larger
MAC is simply truncated.  All validations or comparisons MUST be done
on the truncated value.</t>
          </li>
        </ul>
        <t>###</t>
        <t>The CMK used to calculate the Compound-MAC is defined as</t>
        <artwork><![CDATA[
CMK = the first 20 octets of TLS-PRF(session-key-seed,
             "Inner Methods Compound Keys",
             Nonce)
]]></artwork>
        <t>Note that the Nonce is different for the Binding Request and Binding Response.</t>
        <section anchor="msk-and-emsk">
          <name>MSK and EMSK</name>
        </section>
      </section>
      <section anchor="eap-master-session-key-generation">
        <name>EAP Master Session Key Generation</name>
        <t>When the Initial-Binding TLV is used, the final TEAP MSK and EMSK are
not bound to the inner methods.  The MSK and EMSK are derived as:</t>
        <artwork><![CDATA[
   MSK  = the first 64 octets of TLS-PRF(session-key-seed,
          "Session Key Generating Function")
   EMSK = the first 64 octets of TLS-PRF(session-key-seed,
          "Extended Session Key Generating Function")
]]></artwork>
      </section>
      <section anchor="intermediate-compound-key">
        <name>Intermediate Compound Key Derivations</name>
        <t>NOTE: We should use either the Initial-Binding TLV <em>OR</em> the
Crypto-Binding TLV.  We do not need both.  If we use the
Initial-Binding TLV, then the intermediate compound key deriviations
are not necessary.</t>
        <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 exchange into the key derivation,
TEAPv2 mixes data only from inner exchanges which derive an MSK and/or
an EMSK.  For inner exchanges which do not derive an MSK or EMSK,
TEAPv2 omits the Crypto-Binding TLV.</t>
        <t>That is, some inner authentication methods do not derive MSK or EMSK,
such as 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 MSK or EMSK.  Inner messages which
contain those TLVs MUST NOT contain a Crypto-Binding TLV.</t>
        <t>Where an inner authentication methed derives the MSK and/or EMSK, those
keys 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 authentication method.</t>
              <t>If the MSK is longer than 32 octets, the extra octets are not used
in this structure.</t>
              <t>If the inner authentication method derives an EMSK but not an MSK,
then this field MUST be initialized to all zeros.</t>
            </li>
          </ul>
          <t>EMSK</t>
          <ul empty="true">
            <li>
              <t>The Extended Master Session Key (EMSK) from the inner authentication
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 authentiction method derives an MSK but not an EMSK,
then this field MUST be initialized to all zeros.</t>
            </li>
          </ul>
          <t>Where the inner message is not an authentication method, or the inner
authentication method does not derive MSK or EMSK
(e.g. Basic-Password-Resp TLV), then the RoundSeed structure MUST NOT
be modified.  The inner message also MUST NOT send a Crypto-Binding
TLV.</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]
   } DerivedKey
]]></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 round has not generated MSK or EMSK, then the resulting
inner message MUST NOT contain a Crypto-Binding TLV.</t>
        <t>For these inner messages, the RoundSeed contents MUST remain
unchanged.  That is, the Crypto-Binding TLV is calculated, and the
RoundSeed updated only for inner authentication methods which derive
MSK or EMSK.  The Crypto-Binding TLV is therefore calculated as if
other inner exchanges do not exist.</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-1">
        <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 (if available) from the final
inner exchange.</t>
        <t>Where no inner exchange derives an MSK or EMSK, then the RoundSeed
structure is unchanged from its initial value, which has PrevRoundKey
set to Seed, and the MSK and EMSK fields are all zero.</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 set to random values.  There is no need to set
the least significant bit to zero or one.  If the least significant
bit is set to a particular value, it has no impact on the protocol.</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>
      <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>
    </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:
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
BBonP5xsfI1/XWIK0Ej9HzbzqO9jRgAA

-->

</rfc>
