<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" ipr="trust200902" docName="draft-ietf-radext-radiusv11-11" number="9765" category="exp" submissionType="IETF" updates="2865, 2866, 5176, 6613, 6614, 7360" obsoletes="" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" xml:lang="en" prepTime="2025-04-22T15:03:17" indexInclude="true" scripts="Common,Latin" tocDepth="3">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-radext-radiusv11-11" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9765" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="RADIUS/1.1">RADIUS/1.1: Leveraging Application-Layer Protocol Negotiation (ALPN) to Remove MD5</title>
    <seriesInfo name="RFC" value="9765" stream="IETF"/>
    <author initials="A." surname="DeKok" fullname="Alan DeKok">
      <organization showOnFrontPage="true">FreeRADIUS</organization>
      <address>
        <email>aland@freeradius.org</email>
      </address>
    </author>
    <date month="04" year="2025"/>
    <area>SEC</area>
    <workgroup>radext</workgroup>
    <keyword>RADIUS</keyword>
    <keyword>ALPN</keyword>
    <keyword>MD5</keyword>
    <keyword>FIPS 140</keyword>
    <keyword>TLS</keyword>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">This document defines Application-Layer Protocol Negotiation (ALPN)
      extensions for use with RADIUS/TLS and RADIUS/DTLS.  These extensions
      permit the negotiation of an application protocol variant of RADIUS
      called "RADIUS/1.1".  No changes are made to RADIUS/UDP or RADIUS/TCP.
      The extensions allow the negotiation of a transport profile where the
      RADIUS shared secret is no longer used, and all MD5-based packet
      authentication and attribute obfuscation methods are removed.</t>
      <t indent="0" pn="section-abstract-2">This document updates RFCs 2865, 2866, 5176, 6613, 6614, and 7360.</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This document is not an Internet Standards Track specification; it is
            published for examination, experimental implementation, and
            evaluation.
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document defines an Experimental Protocol for the Internet
            community.  This document is a product of the Internet Engineering
            Task Force (IETF).  It represents the consensus of the IETF community.
            It has received public review and has been approved for publication
            by the Internet Engineering Steering Group (IESG).  Not all documents
            approved by the IESG are candidates for any level of Internet
            Standard; see Section 2 of RFC 7841. 
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc9765" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2025 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document. Code Components extracted from this
            document must include Revised BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Revised BSD License.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-terminology">Terminology</xref></t>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-the-radius-11-transport-pro">The RADIUS/1.1 Transport Profile for RADIUS</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2">
              <li pn="section-toc.1-1.3.2.1">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.3.2.1.1"><xref derivedContent="3.1" format="counter" sectionFormat="of" target="section-3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-alpn-name-for-radius-11">ALPN Name for RADIUS/1.1</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.2">
                <t indent="0" pn="section-toc.1-1.3.2.2.1"><xref derivedContent="3.2" format="counter" sectionFormat="of" target="section-3.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-operation-of-alpn">Operation of ALPN</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.3">
                <t indent="0" pn="section-toc.1-1.3.2.3.1"><xref derivedContent="3.3" format="counter" sectionFormat="of" target="section-3.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-configuration-of-alpn-for-r">Configuration of ALPN for RADIUS/1.1</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2.3.2">
                  <li pn="section-toc.1-1.3.2.3.2.1">
                    <t indent="0" pn="section-toc.1-1.3.2.3.2.1.1"><xref derivedContent="3.3.1" format="counter" sectionFormat="of" target="section-3.3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-using-protocol-error-for-si">Using Protocol-Error for Signaling ALPN Failure</xref></t>
                  </li>
                  <li pn="section-toc.1-1.3.2.3.2.2">
                    <t indent="0" pn="section-toc.1-1.3.2.3.2.2.1"><xref derivedContent="3.3.2" format="counter" sectionFormat="of" target="section-3.3.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-tabular-summary">Tabular Summary</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.3.2.4">
                <t indent="0" pn="section-toc.1-1.3.2.4.1"><xref derivedContent="3.4" format="counter" sectionFormat="of" target="section-3.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-miscellaneous-items">Miscellaneous Items</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.5">
                <t indent="0" pn="section-toc.1-1.3.2.5.1"><xref derivedContent="3.5" format="counter" sectionFormat="of" target="section-3.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-session-resumption">Session Resumption</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-radius-11-packet-and-attrib">RADIUS/1.1 Packet and Attribute Formats</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2">
              <li pn="section-toc.1-1.4.2.1">
                <t indent="0" pn="section-toc.1-1.4.2.1.1"><xref derivedContent="4.1" format="counter" sectionFormat="of" target="section-4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-radius-11-packet-format">RADIUS/1.1 Packet Format</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.2">
                <t indent="0" pn="section-toc.1-1.4.2.2.1"><xref derivedContent="4.2" format="counter" sectionFormat="of" target="section-4.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-the-token-field">The Token Field</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2.2.2">
                  <li pn="section-toc.1-1.4.2.2.2.1">
                    <t indent="0" pn="section-toc.1-1.4.2.2.2.1.1"><xref derivedContent="4.2.1" format="counter" sectionFormat="of" target="section-4.2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-sending-packets">Sending Packets</xref></t>
                  </li>
                  <li pn="section-toc.1-1.4.2.2.2.2">
                    <t indent="0" pn="section-toc.1-1.4.2.2.2.2.1"><xref derivedContent="4.2.2" format="counter" sectionFormat="of" target="section-4.2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-receiving-packets">Receiving Packets</xref></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-attribute-handling">Attribute Handling</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2">
              <li pn="section-toc.1-1.5.2.1">
                <t indent="0" pn="section-toc.1-1.5.2.1.1"><xref derivedContent="5.1" format="counter" sectionFormat="of" target="section-5.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-obfuscated-attributes">Obfuscated Attributes</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2.1.2">
                  <li pn="section-toc.1-1.5.2.1.2.1">
                    <t indent="0" pn="section-toc.1-1.5.2.1.2.1.1"><xref derivedContent="5.1.1" format="counter" sectionFormat="of" target="section-5.1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-user-password">User-Password</xref></t>
                  </li>
                  <li pn="section-toc.1-1.5.2.1.2.2">
                    <t indent="0" pn="section-toc.1-1.5.2.1.2.2.1"><xref derivedContent="5.1.2" format="counter" sectionFormat="of" target="section-5.1.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-chap-challenge">CHAP-Challenge</xref></t>
                  </li>
                  <li pn="section-toc.1-1.5.2.1.2.3">
                    <t indent="0" pn="section-toc.1-1.5.2.1.2.3.1"><xref derivedContent="5.1.3" format="counter" sectionFormat="of" target="section-5.1.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-tunnel-password">Tunnel-Password</xref></t>
                  </li>
                  <li pn="section-toc.1-1.5.2.1.2.4">
                    <t indent="0" pn="section-toc.1-1.5.2.1.2.4.1"><xref derivedContent="5.1.4" format="counter" sectionFormat="of" target="section-5.1.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-vendor-specific-attributes">Vendor-Specific Attributes</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.5.2.2">
                <t indent="0" pn="section-toc.1-1.5.2.2.1"><xref derivedContent="5.2" format="counter" sectionFormat="of" target="section-5.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-message-authenticator">Message-Authenticator</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.3">
                <t indent="0" pn="section-toc.1-1.5.2.3.1"><xref derivedContent="5.3" format="counter" sectionFormat="of" target="section-5.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-message-authentication-code">Message-Authentication-Code</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.4">
                <t indent="0" pn="section-toc.1-1.5.2.4.1"><xref derivedContent="5.4" format="counter" sectionFormat="of" target="section-5.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-chap-ms-chap-and-similar-at">CHAP, MS-CHAP, and Similar Attributes</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.5">
                <t indent="0" pn="section-toc.1-1.5.2.5.1"><xref derivedContent="5.5" format="counter" sectionFormat="of" target="section-5.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-original-packet-code">Original-Packet-Code</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-other-considerations-when-u">Other Considerations When Using ALPN</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.6.2">
              <li pn="section-toc.1-1.6.2.1">
                <t indent="0" pn="section-toc.1-1.6.2.1.1"><xref derivedContent="6.1" format="counter" sectionFormat="of" target="section-6.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-protocol-error">Protocol-Error</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.2">
                <t indent="0" pn="section-toc.1-1.6.2.2.1"><xref derivedContent="6.2" format="counter" sectionFormat="of" target="section-6.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-status-server">Status-Server</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.3">
                <t indent="0" pn="section-toc.1-1.6.2.3.1"><xref derivedContent="6.3" format="counter" sectionFormat="of" target="section-6.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-proxies">Proxies</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-other-radius-considerations">Other RADIUS Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.7.2">
              <li pn="section-toc.1-1.7.2.1">
                <t indent="0" pn="section-toc.1-1.7.2.1.1"><xref derivedContent="7.1" format="counter" sectionFormat="of" target="section-7.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-crypto-agility">Crypto-Agility</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.2">
                <t indent="0" pn="section-toc.1-1.7.2.2.1"><xref derivedContent="7.2" format="counter" sectionFormat="of" target="section-7.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-error-cause-attribute">Error-Cause Attribute</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.3">
                <t indent="0" pn="section-toc.1-1.7.2.3.1"><xref derivedContent="7.3" format="counter" sectionFormat="of" target="section-7.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-future-standards">Future Standards</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="8" format="counter" sectionFormat="of" target="section-8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-privacy-considerations">Privacy Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="9" format="counter" sectionFormat="of" target="section-9"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.10">
            <t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="10" format="counter" sectionFormat="of" target="section-10"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.11">
            <t indent="0" pn="section-toc.1-1.11.1"><xref derivedContent="11" format="counter" sectionFormat="of" target="section-11"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.11.2">
              <li pn="section-toc.1-1.11.2.1">
                <t indent="0" pn="section-toc.1-1.11.2.1.1"><xref derivedContent="11.1" format="counter" sectionFormat="of" target="section-11.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.11.2.2">
                <t indent="0" pn="section-toc.1-1.11.2.2.1"><xref derivedContent="11.2" format="counter" sectionFormat="of" target="section-11.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.12">
            <t indent="0" pn="section-toc.1-1.12.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.a"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgments">Acknowledgments</xref></t>
          </li>
          <li pn="section-toc.1-1.13">
            <t indent="0" pn="section-toc.1-1.13.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-address">Author's Address</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" removeInRFC="false" toc="include" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">The RADIUS protocol <xref target="RFC2865" format="default" sectionFormat="of" derivedContent="RFC2865"/> uses MD5 <xref target="RFC1321" format="default" sectionFormat="of" derivedContent="RFC1321"/> to authenticate packets and to obfuscate certain
      attributes.  Additional transport protocols were defined for TCP <xref target="RFC6613" format="default" sectionFormat="of" derivedContent="RFC6613"/>, TLS <xref target="RFC6614" format="default" sectionFormat="of" derivedContent="RFC6614"/>, and DTLS <xref target="RFC7360" format="default" sectionFormat="of" derivedContent="RFC7360"/>.  However, those transport protocols still use MD5
      to authenticate individual packets.  That is, the shared secret was used
      along with MD5, even when the RADIUS packets were being transported in
      (D)TLS.  At the time, the consensus of the RADEXT Working Group was that
      this continued use of MD5 was acceptable.  TLS was seen as a simple
      "wrapper" around RADIUS, while using a fixed shared secret.  The
      intention at the time was to allow the use of (D)TLS while making
      essentially no changes to the basic RADIUS encoding, decoding,
      authentication, and packet validation.</t>
      <t indent="0" pn="section-1-2">Issues of MD5 security have been known for decades, most notably in
      <xref target="RFC6151" format="default" sectionFormat="of" derivedContent="RFC6151"/> and in <xref section="3" sectionFormat="of" target="RFC6421" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6421#section-3" derivedContent="RFC6421"/>, among others.  The reliance on MD5 for security
      makes it impossible to use RADIUS in secure systems that forbid the use
      of digest algorithms with known vulnerabilities.  For example, FIPS 140
      forbids systems from relying on insecure cryptographic methods for
      security <xref target="FIPS-140-3" format="default" sectionFormat="of" derivedContent="FIPS-140-3"/>.</t>
      <t indent="0" pn="section-1-3">While the use of MD5 in RADIUS/TLS has not been proven to be insecure,
     it has not been proven to be secure.  This gap means that it is
     difficult to use RADIUS in organizations that require the use of systems
     that have proven security.  Those organizations tend to simply ban the
     use of insecure digests such as MD5 entirely, even if the use of MD5 has
     no known security impact.  While the resulting system might still not be
     secure, it at least does not contain any known insecurities.</t>
      <t indent="0" pn="section-1-4">In addition, the use of MD5 in RADIUS/TLS and RADIUS/DLTS adds no
      security or privacy over that provided by TLS.  In hindsight, the
      decision of the RADEXT Working Group to retain MD5 for historic
      RADIUS/TLS was likely wrong.  It was an easy decision to make in the
      short term, but it has caused ongoing problems that this document
      addresses.  The author of this document played a part in that original
      decision, which is now being corrected by this document.</t>
      <t indent="0" pn="section-1-5">This document defines an Application-Layer Protocol Negotiation
      (ALPN) <xref target="RFC7301" format="default" sectionFormat="of" derivedContent="RFC7301"/> extension for RADIUS over (D)TLS that
      removes the need to use MD5 for (D)TLS, which we call RADIUS/1.1.  This
      specification makes no changes to UDP or TCP transport.  The RADIUS/1.1
      protocol can be best understood as a transport profile for RADIUS over
      TLS, rather than a wholesale revision of the RADIUS protocol.</t>
      <t indent="0" pn="section-1-6">Systems that implement this transport profile can be more easily
      verified to be FIPS 140 compliant.  A preliminary implementation has
      shown that only minor code changes are required to support RADIUS/1.1 on
      top of an existing RADIUS/TLS server implementation. These include:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-1-7">
        <li pn="section-1-7.1">A method to set the list of supported ALPN protocols before the TLS handshake starts.</li>
        <li pn="section-1-7.2">A method to query if ALPN has chosen a protocol (and if yes, which
        protocol was chosen) after the TLS handshake has completed.</li>
        <li pn="section-1-7.3">Changes to the packet encoder and decoder, so that the individual
        packets are not authenticated, and no attribute is encoded with the
        historic obfuscation methods.</li>
      </ul>
      <t indent="0" pn="section-1-8">That is, the bulk of the ALPN protocol can be left to the underlying
      TLS implementation.  This document discusses the ALPN exchange in detail
      in order to give simplified descriptions for the reader, and so that the
      reader does not have to read or understand all of <xref target="RFC7301" format="default" sectionFormat="of" derivedContent="RFC7301"/>.</t>
      <t indent="0" pn="section-1-9">The detailed list of changes from historic TLS-based transports to
      RADIUS/1.1 is as follows:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-1-10">
        <li pn="section-1-10.1">ALPN is used for negotiation of this extension.</li>
        <li pn="section-1-10.2">TLS 1.3 or later is required.</li>
        <li pn="section-1-10.3">All uses of the RADIUS shared secret have been removed.</li>
        <li pn="section-1-10.4">The now unused Request and Response Authenticator fields have been
        repurposed to carry an opaque Token that identifies requests and
        responses.</li>
        <li pn="section-1-10.5">The functionality of the Identifier field has been replaced by the
        Token field, and the space previously taken by the Identifier field is
        now reserved and unused.</li>
        <li pn="section-1-10.6">The Message-Authenticator attribute (<xref section="3.2" sectionFormat="comma" target="RFC3579" format="default" derivedLink="https://rfc-editor.org/rfc/rfc3579#section-3.2" derivedContent="RFC3579"/>) is not sent in any packet,
        and is ignored if received.</li>
        <li pn="section-1-10.7">Attributes such as User-Password, Tunnel-Password, and MS-MPPE keys are sent encoded as "text" (<xref section="3.4" sectionFormat="comma" target="RFC8044" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8044#section-3.4" derivedContent="RFC8044"/>) or "octets" (<xref section="3.5" sectionFormat="comma" target="RFC8044" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8044#section-3.5" derivedContent="RFC8044"/>), without the
        previous MD5-based obfuscation.  This obfuscation is no longer
        necessary, as the data is secured and kept private through the use of
        TLS.</li>
        <li pn="section-1-10.8">The conclusion of the efforts stemming from <xref target="RFC6421" format="default" sectionFormat="of" derivedContent="RFC6421"/> is that crypto-agility in RADIUS is best done via a
        TLS wrapper, and not by extending the RADIUS protocol.</li>
        <li pn="section-1-10.9">
          <xref target="RFC5176" format="default" sectionFormat="of" derivedContent="RFC5176"/> is updated to allow the Error-Cause
          attribute to appear in Access-Reject packets.</li>
      </ul>
      <t indent="0" pn="section-1-11">The following items are left unchanged from historic TLS-based
      transports for RADIUS:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-1-12">
        <li pn="section-1-12.1">The RADIUS packet header is the same size, and the Code and Length
        fields (<xref section="3" sectionFormat="comma" target="RFC2865" format="default" derivedLink="https://rfc-editor.org/rfc/rfc2865#section-3" derivedContent="RFC2865"/>)
        have the same meaning as before.</li>
        <li pn="section-1-12.2">The default 4096-octet packet size from <xref target="RFC2865" sectionFormat="comma" section="3" format="default" derivedLink="https://rfc-editor.org/rfc/rfc2865#section-3" derivedContent="RFC2865"/> is unchanged, although <xref target="RFC7930" format="default" sectionFormat="of" derivedContent="RFC7930"/> can still be leveraged to use larger packets.</li>
        <li pn="section-1-12.3">All attributes that have simple encodings (that is, attributes
        that do not use MD5 obfuscation) have the same encoding and meaning
        as before.</li>
        <li pn="section-1-12.4">As this extension is a transport profile for one "hop"
        (client-to-server connection), it does not impact any other connection
        used by a client or server.  The only systems that are aware that this
        transport profile is in use are the client and server who have
        negotiated the use of this extension on a particular shared
        connection.</li>
        <li pn="section-1-12.5">This extension uses the same ports (2083/tcp and 2083/udp) that
        are defined for RADIUS/TLS <xref target="RFC6614" format="default" sectionFormat="of" derivedContent="RFC6614"/> and RADIUS/DTLS
        <xref target="RFC7360" format="default" sectionFormat="of" derivedContent="RFC7360"/>.</li>
      </ul>
      <t indent="0" pn="section-1-13">A major benefit of this extension is that a server that implements it
      can also be more easily verified for FIPS 140 compliance.  That is, a
      server can remove all uses of MD5, which means that those algorithms are
      provably not used for security purposes.  In that case, however, the
      server will not support the Challenge Handshake Authentication Protocol
      (CHAP) or any authentication method that uses MD5.  The choice of which
      authentication method to accept is always left to the server.  This
      specification does not change any authentication method carried in
      RADIUS, and does not mandate (or forbid) the use of any authentication
      method for any system.</t>
      <t indent="0" pn="section-1-14">As for proxies, there was never a requirement that proxies implement
      CHAP or Microsoft CHAP (MS-CHAP) authentication.  So far as a proxy is concerned, attributes relating to
      CHAP and MS-CHAP are simply opaque data that is transported unchanged to
      the next hop.  Therefore, it is possible for a FIPS 140 compliant proxy
      to transport authentication methods that depend on MD5, so long as that
      data is forwarded to a server that supports those methods.</t>
      <t indent="0" pn="section-1-15">We reiterate that the decision to support (or not support) any authentication
      method is entirely site local, and is not a requirement of this
      specification.  The contents or meaning of any RADIUS attribute other
      than the Message-Authenticator (and similar attributes) are not modified.
      The only change to the Message-Authenticator attribute is that it is no
      longer used in RADIUS/1.1.</t>
      <t indent="0" pn="section-1-16">Unless otherwise described in this document, all RADIUS requirements
      apply to this extension.  That is, this specification defines a
      transport profile for RADIUS.  It is not an entirely new protocol, and
      it defines only minor changes to the existing RADIUS protocol.  It does
      not change the RADIUS packet format, attribute format, etc.  This
      specification is compatible with all RADIUS attributes of the past, present,
      and future.</t>
      <t indent="0" pn="section-1-17">This specification is compatible with existing implementations of
      RADIUS/TLS and RADIUS/DTLS.  Systems that implement this specification can
      fall back to historic RADIUS/TLS if no ALPN signaling is performed, and
      the local configuration permits such fallback.</t>
      <t indent="0" pn="section-1-18">This specification is compatible with all existing RADIUS
      specifications.  There is no need for any RADIUS specification to
      mention this transport profile by name or to make provisions for this
      specification.  This document defines how to transform RADIUS into
      RADIUS/1.1, and no further discussion of that transformation is
      necessary.</t>
      <t indent="0" pn="section-1-19">We note that this document makes no changes to previous RADIUS
      specifications.  Existing RADIUS implementations can continue to be used
      without modification.  Where previous specifications are explicitly
      mentioned and updated, those updates or changes apply only when the
      RADIUS/1.1 transport profile is being used.</t>
      <t indent="0" pn="section-1-20">In short, when negotiated on a connection, the RADIUS/1.1 transport
      profile permits implementations to avoid MD5 when authenticating
      packets or when obfuscating certain attributes.</t>
    </section>
    <section anchor="terminology" numbered="true" removeInRFC="false" toc="include" pn="section-2">
      <name slugifiedName="name-terminology">Terminology</name>
      <t indent="0" pn="section-2-1">
    The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
    "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>",
    "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>",
    "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
    "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be
    interpreted as described in BCP 14 <xref target="RFC2119" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> when, and only when, they appear in all capitals, as
    shown here.
      </t>
      <t indent="0" pn="section-2-2">The following list describes the terminology and abbreviations that are used in this document.</t>
      <dl spacing="normal" newline="true" indent="3" pn="section-2-3">
        <dt pn="section-2-3.1">ALPN</dt>
        <dd pn="section-2-3.2">Application-Layer Protocol Negotiation (as defined in <xref target="RFC7301" format="default" sectionFormat="of" derivedContent="RFC7301"/>).</dd>
        <dt pn="section-2-3.3">RADIUS</dt>
        <dd pn="section-2-3.4">
          <t indent="0" pn="section-2-3.4.1">Remote Authentication Dial-In User Service (as defined in <xref target="RFC2865" format="default" sectionFormat="of" derivedContent="RFC2865"/>, <xref target="RFC2866" format="default" sectionFormat="of" derivedContent="RFC2866"/>, and
	  <xref target="RFC5176" format="default" sectionFormat="of" derivedContent="RFC5176"/>, among others).</t>
          <t indent="0" pn="section-2-3.4.2">While this protocol can be viewed as "RADIUS/1.0", for simplicity
          and historical compatibility, we keep the name "RADIUS".</t>
        </dd>
        <dt pn="section-2-3.5">RADIUS/UDP</dt>
        <dd pn="section-2-3.6">RADIUS over the User Datagram Protocol (see <xref target="RFC2865" format="default" sectionFormat="of" derivedContent="RFC2865"/>,
          <xref target="RFC2866" format="default" sectionFormat="of" derivedContent="RFC2866"/>, and <xref target="RFC5176" format="default" sectionFormat="of" derivedContent="RFC5176"/>, among others).</dd>
        <dt pn="section-2-3.7">RADIUS/TCP</dt>
        <dd pn="section-2-3.8">RADIUS over the Transmission Control Protocol <xref target="RFC6613" format="default" sectionFormat="of" derivedContent="RFC6613"/>.</dd>
        <dt pn="section-2-3.9">RADIUS/TLS</dt>
        <dd pn="section-2-3.10">RADIUS over Transport Layer Security <xref target="RFC6614" format="default" sectionFormat="of" derivedContent="RFC6614"/>.</dd>
        <dt pn="section-2-3.11">RADIUS/DTLS</dt>
        <dd pn="section-2-3.12">RADIUS over Datagram Transport Layer Security <xref target="RFC7360" format="default" sectionFormat="of" derivedContent="RFC7360"/>.</dd>
        <dt pn="section-2-3.13">RADIUS over TLS</dt>
        <dd pn="section-2-3.14">Refers to any RADIUS packets transported over TLS or DTLS.  This
          terminology is used instead of alternatives such as "RADIUS/(D)TLS"
          or "either RADIUS/TLS or RADIUS/DTLS".  This term is generally used
          when referring to TLS-layer requirements for RADIUS packet
          transport.</dd>
        <dt pn="section-2-3.15">historic RADIUS/TLS</dt>
        <dd pn="section-2-3.16">Refers to RADIUS over (D)TLS (as defined in <xref target="RFC6614" format="default" sectionFormat="of" derivedContent="RFC6614"/> and
          <xref target="RFC7360" format="default" sectionFormat="of" derivedContent="RFC7360"/>).  This term does not include the protocol
          defined in this specification.</dd>
        <dt pn="section-2-3.17">RADIUS/1.1</dt>
        <dd pn="section-2-3.18">
          <t indent="0" pn="section-2-3.18.1">RADIUS version 1.1, i.e.,
	    the transport profile defined in this document.  We use
	    RADIUS/1.1 to refer interchangeably to TLS and DTLS
	    transport.</t>
        </dd>
        <dt pn="section-2-3.19">TLS</dt>
        <dd pn="section-2-3.20">
          <t indent="0" pn="section-2-3.20.1">Transport Layer Security.
	    Generally, when we refer to TLS in this document, we are
	    referring interchangeably to TLS or DTLS transport.</t>
        </dd>
      </dl>
    </section>
    <section anchor="the-radius11-transport-profile-for-radius" numbered="true" removeInRFC="false" toc="include" pn="section-3">
      <name slugifiedName="name-the-radius-11-transport-pro">The RADIUS/1.1 Transport Profile for RADIUS</name>
      <t indent="0" pn="section-3-1">This section describes the ALPN transport profile in detail.  It
      first gives the name used for ALPN, and then describes how ALPN is
      configured and negotiated by the client and server.  It then concludes by
      discussing TLS issues such as what to do for ALPN during session
      resumption.</t>
      <section anchor="alpn-name-for-radius11" numbered="true" removeInRFC="false" toc="include" pn="section-3.1">
        <name slugifiedName="name-alpn-name-for-radius-11">ALPN Name for RADIUS/1.1</name>
        <t indent="0" pn="section-3.1-1">The ALPN name defined for RADIUS/1.1 is as follows:</t>
        <dl spacing="normal" newline="true" indent="3" pn="section-3.1-2">
          <dt pn="section-3.1-2.1">"radius/1.1"</dt>
          <dd pn="section-3.1-2.2">The protocol defined by this specification.</dd>
        </dl>
        <t indent="0" pn="section-3.1-3">Where ALPN is not configured or is not received in a TLS
        connection, systems supporting ALPN <bcp14>MUST NOT</bcp14> use
        RADIUS/1.1.</t>
        <t indent="0" pn="section-3.1-4">Where ALPN is configured, the client signals support by sending
        ALPN strings listing which protocols it supports.  The server can
        accept one of these proposals and reply with a matching ALPN string,
        or reject this proposal and not reply with any ALPN string.  A full
        walkthrough of the protocol negotiation is given below.</t>
        <t indent="0" pn="section-3.1-5">Implementations <bcp14>MUST</bcp14> signal ALPN "radius/1.1" in
        order for it to be used in a connection.</t>
        <t indent="0" pn="section-3.1-6">The next step in defining RADIUS/1.1 is to review how ALPN
        works.</t>
      </section>
      <section anchor="operation-of-alpn" numbered="true" removeInRFC="false" toc="include" pn="section-3.2">
        <name slugifiedName="name-operation-of-alpn">Operation of ALPN</name>
        <t indent="0" pn="section-3.2-1">In order to provide a high-level description of ALPN for readers
        who are not familiar with the details of <xref target="RFC7301" format="default" sectionFormat="of" derivedContent="RFC7301"/>, we
        provide a brief overview here.</t>
        <t indent="0" pn="section-3.2-2">Once a system has been configured to support ALPN, it is negotiated
        on a per-connection basis as per <xref target="RFC7301" format="default" sectionFormat="of" derivedContent="RFC7301"/>.  The
        negotiation proceeds as follows:</t>
        <ol spacing="normal" type="%d)" indent="adaptive" start="1" pn="section-3.2-3">
          <li pn="section-3.2-3.1" derivedCounter="1)">The client sends an ALPN extension in the ClientHello.  This
          extension lists one or more application protocols by name.  These
          names are the protocols that the client is claiming to support.</li>
          <li pn="section-3.2-3.2" derivedCounter="2)">
            <t indent="0" pn="section-3.2-3.2.1">The server receives the extension and validates the
	    application protocol name(s) against the list it has
	    configured.</t>
            <t indent="0" pn="section-3.2-3.2.2">If the server finds no acceptable common protocols (ALPN or
            otherwise), it closes the connection.</t>
          </li>
          <li pn="section-3.2-3.3" derivedCounter="3)">
            <t indent="0" pn="section-3.2-3.3.1">Otherwise, the server returns a ServerHello with either no ALPN
	    extension or an ALPN extension containing only one named
	    application protocol, which needs to be one of the names proposed
	    by the client.</t>
            <t indent="0" pn="section-3.2-3.3.2">If the client did not signal ALPN, or the server does not
            accept the ALPN proposal, the server does not reply with any ALPN
            name.</t>
          </li>
          <li pn="section-3.2-3.4" derivedCounter="4)">
            <t indent="0" pn="section-3.2-3.4.1">The client receives the ServerHello, validates the received
	    application protocol (if any) against the name(s) it sent, and
	    records which application protocol was chosen.</t>
            <t indent="0" pn="section-3.2-3.4.2">This check is necessary in order for the client to both know
            which protocol the server has selected, and to validate that the
            protocol sent by the server is one that is acceptable to the
            client.</t>
          </li>
        </ol>
        <t indent="0" pn="section-3.2-4">The next step in defining RADIUS/1.1 is to define how ALPN is
        configured on the client and server and to give more detailed
        requirements on its configuration and operation.</t>
      </section>
      <section anchor="configuration-of-alpn-for-radius11" numbered="true" removeInRFC="false" toc="include" pn="section-3.3">
        <name slugifiedName="name-configuration-of-alpn-for-r">Configuration of ALPN for RADIUS/1.1</name>
        <t indent="0" pn="section-3.3-1">Clients or servers supporting this specification can do so by
        extending their TLS configuration through the addition of a new
        configuration variable, called "Version" here.  The exact name given
        below does not need to be used, but it is <bcp14>RECOMMENDED</bcp14>
        that administrative interfaces or programming interfaces use a similar
        name in order to provide consistent terminology.  This variable
        controls how the implementation signals use of this protocol via
        ALPN.</t>
        <t indent="0" pn="section-3.3-2">When set, this variable should contain the list of permitted RADIUS
        versions as numbers, e.g., "1.0" or "1.1".  The implementation may
        allow multiple values in one variable, allow multiple variables, or
        instead use two configurations for the "minimum" and "maximum" allowed
        versions.  We assume here that there is one variable, which can
        contain either no value or a list of one or more versions that the
        current implementation supports.  In this specification, the possible
        values, ALPN strings, and corresponding interpretations are:</t>
        <table anchor="alpn-configuration-for-radius11" align="center" pn="table-1">
          <name/>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Value</th>
              <th align="left" colspan="1" rowspan="1">ALPN String(s)</th>
              <th align="left" colspan="1" rowspan="1">Interpretation</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">unset</td>
              <td align="left" colspan="1" rowspan="1"/>
              <td align="left" colspan="1" rowspan="1">no ALPN strings are sent</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">1.0</td>
              <td align="left" colspan="1" rowspan="1">radius/1.0</td>
              <td align="left" colspan="1" rowspan="1">require historic RADIUS/TLS</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">1.0, 1.1</td>
              <td align="left" colspan="1" rowspan="1">radius/1.0, radius/1.1</td>
              <td align="left" colspan="1" rowspan="1">allow either historic RADIUS/TLS or RADIUS/1.1</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">1.1</td>
              <td align="left" colspan="1" rowspan="1">radius/1.1</td>
              <td align="left" colspan="1" rowspan="1">require RADIUS/1.1</td>
            </tr>
          </tbody>
        </table>
        <t indent="0" pn="section-3.3-4">This configuration is also extensible to future RADIUS versions if
        that extension becomes necessary.  New values and ALPN names can
        simply be added to the list.  Implementations can then negotiate the
        highest version that is supported by both client and server.</t>
        <t indent="0" pn="section-3.3-5">Implementations <bcp14>SHOULD</bcp14> support both historic
        RADIUS/TLS and RADIUS/1.1.  Such implementations <bcp14>MUST</bcp14>
        set the default value for this configuration variable to "1.0, 1.1".
        This setting ensures that both versions of RADIUS can be
        negotiated.</t>
        <t indent="0" pn="section-3.3-6">Implementations <bcp14>MAY</bcp14> support only RADIUS/1.1.  In
        this case, the default value for this configuration variable
        <bcp14>MUST</bcp14> be "1.1".  This behavior is <bcp14>NOT RECOMMENDED</bcp14>, as it is incompatible with historic RADIUS/TLS.
        This behavior can only be a reasonable default when all (or nearly
        all) RADIUS clients have been updated to support RADIUS/1.1.</t>
        <t indent="0" pn="section-3.3-7">A more detailed definition of the variable and the meaning of the
        values is given below.</t>
        <dl newline="true" spacing="normal" indent="3" pn="section-3.3-8">
          <dt pn="section-3.3-8.1">Configuration Variable Name</dt>
          <dd pn="section-3.3-8.2">Version</dd>
        </dl>
        <dl newline="true" spacing="normal" indent="3" pn="section-3.3-9">
          <dt pn="section-3.3-9.1">For "Value":</dt>
          <dd pn="section-3.3-9.2">
            <ol type="A" indent="adaptive" spacing="normal" start="1" pn="section-3.3-9.2.1">
      <li pn="section-3.3-9.2.1.1" derivedCounter="A.">
                <t indent="0" pn="section-3.3-9.2.1.1.1">If unset, ALPN is not used.</t>
                <t indent="0" pn="section-3.3-9.2.1.1.2">Any connection <bcp14>MUST</bcp14> use historic RADIUS/TLS.</t>
                <t indent="0" pn="section-3.3-9.2.1.1.3">This variable is included here only for logical
        completeness. Implementations of this specification
        <bcp14>SHOULD</bcp14> be configured to always send one or more ALPN
        strings. This data signals that the implementation is capable of
        performing ALPN negotiation, even if it is not currently configured to
        use RADIUS/1.1.</t>
                <dl newline="true" spacing="normal" indent="3" pn="section-3.3-9.2.1.1.4">
                  <dt pn="section-3.3-9.2.1.1.4.1">Client Behavior</dt>
                  <dd pn="section-3.3-9.2.1.1.4.2">The client <bcp14>MUST NOT</bcp14> send any protocol name via ALPN.</dd>
                  <dt pn="section-3.3-9.2.1.1.4.3">Server Behavior</dt>
                  <dd pn="section-3.3-9.2.1.1.4.4">
                    <t indent="0" pn="section-3.3-9.2.1.1.4.4.1">The server <bcp14>MUST NOT</bcp14> signal any protocol name via
            ALPN.</t>
                    <t indent="0" pn="section-3.3-9.2.1.1.4.4.2">If the server receives an ALPN name from the client, it
            <bcp14>MUST NOT</bcp14> close the connection. Instead, it simply
            does not reply with ALPN and finishes the TLS connection setup as
            defined for historic RADIUS/TLS.</t>
                    <t indent="0" pn="section-3.3-9.2.1.1.4.4.3">Note that if a client sends "radius/1.1", the client will see
            that the server failed to acknowledge this request and will close
            the connection. For any other client configuration, the connection
            will use historic RADIUS/TLS.</t>
                  </dd>
                </dl>
              </li>
              <li pn="section-3.3-9.2.1.2" derivedCounter="B.">
                <t indent="0" pn="section-3.3-9.2.1.2.1">If set to "1.0", "1.0, 1.1", "1.1", or future values:</t>
                <dl newline="true" spacing="normal" indent="3" pn="section-3.3-9.2.1.2.2">
                  <dt pn="section-3.3-9.2.1.2.2.1">Client Behavior</dt>
                  <dd pn="section-3.3-9.2.1.2.2.2">
                    <t indent="0" pn="section-3.3-9.2.1.2.2.2.1">The client <bcp14>MUST</bcp14> send the ALPN string(s)
            associated with the configured version. For example, send
            "radius/1.0" for "1.0".</t>
                    <t indent="0" pn="section-3.3-9.2.1.2.2.2.2">The client will receive either no ALPN response from the
	    server; or it will receive an ALPN response of one version string
	    that <bcp14>MUST</bcp14> match one of the strings it sent; or else they will
	    receive a TLS alert of "no_application_protocol" (120).</t>
                    <t indent="0" pn="section-3.3-9.2.1.2.2.2.3">If the connection remains open, the client <bcp14>MUST</bcp14>
            treat the connection as using the matching ALPN version.</t>
                  </dd>
                  <dt pn="section-3.3-9.2.1.2.2.3">Server Behavior</dt>
                  <dd pn="section-3.3-9.2.1.2.2.4">
                    <t indent="0" pn="section-3.3-9.2.1.2.2.4.1">If the server receives no ALPN name from the client, it
            <bcp14>MUST</bcp14> use historic RADIUS/TLS.</t>
                    <t indent="0" pn="section-3.3-9.2.1.2.2.4.2">If the server receives one or more ALPN names from the client,
            it <bcp14>MUST</bcp14> reply with the highest mutually supported
            version and then use the latest supported version for this
            connection.</t>
                    <t indent="0" pn="section-3.3-9.2.1.2.2.4.3">If the server receives one or more ALPN names from the client,
            but none of the names match the versions supported by (or
            configured on) the server, it <bcp14>MUST</bcp14> reply with a TLS
            alert of "no_application_protocol" (120), and then it
            <bcp14>MUST</bcp14> close the TLS connection.</t>
                    <t indent="0" pn="section-3.3-9.2.1.2.2.4.4">These requirements for negotiation are not specific to
            RADIUS/1.1; therefore, they can be used unchanged if any new
            version of RADIUS is defined.</t>
                  </dd>
                </dl>
              </li>
            </ol>
          </dd>
        </dl>
        <t indent="0" pn="section-3.3-10">By requiring the default configuration to allow historic
        RADIUS/TLS, implementations will be able to negotiate both historic
        RADIUS/TLS connections and also RADIUS/1.1 connections.  Any other
        recommended default setting would prevent either the negotiation of
        historic RADIUS/TLS or prevent the negotiation of RADIUS/1.1.</t>
        <t indent="0" pn="section-3.3-11">Once administrators verify that both ends of a connection support
        RADIUS/1.1, and that it has been negotiated successfully, the
        configurations <bcp14>SHOULD</bcp14> be updated to require RADIUS/1.1.
        The connections should be monitored after this change to ensure that
        the systems continue to remain connected.  If there are connection
        issues, then the configuration should be reverted to allowing both
        "radius/1.0" and "radius/1.1" ALPN strings, until the administrator
        has resolved the connection problems.</t>
        <t indent="0" pn="section-3.3-12">We reiterate that systems implementing this specification, but
        which are configured with settings that forbid RADIUS/1.1, will behave
        largely the same as systems that do not implement this specification.
        The only difference is that clients may send the ALPN name
        "radius/1.0".</t>
        <t indent="0" pn="section-3.3-13">Systems implementing RADIUS/1.1 <bcp14>SHOULD NOT</bcp14> be
        configured by default to forbid that protocol.  That setting exists
        mainly for completeness, and to give administrators the flexibility to
        control their own deployments.</t>
        <t indent="0" pn="section-3.3-14">While <xref target="RFC7301" format="default" sectionFormat="of" derivedContent="RFC7301"/> does not discuss the possibility of
        the server sending a TLS alert of "no_application_protocol" (120) when
        the client does not use ALPN, this behavior appears to be useful.  As
        such, servers <bcp14>MAY</bcp14> send a TLS alert of
        "no_application_protocol" (120) when the client does not use ALPN.</t>
        <t indent="0" pn="section-3.3-15">However, some TLS implementations may not permit an application to
        send a TLS alert of its choice at a time of its choice.  This
        limitation means that it is not always possible for an application to
        send the TLS alert as discussed in the previous section.  The impact
        is that an implementation may attempt to connect and then see that
        the connection fails, but it may not be able to determine why that failure
        has occurred.  Implementers and administrators should be aware that
        unexplained connection failures may be due to ALPN issues.</t>
        <t indent="0" pn="section-3.3-16">The server <bcp14>MAY</bcp14> send this alert during the
        ClientHello if it requires ALPN but does not receive it.  That is,
        there may not always be a need to wait for the TLS connection to be
        fully established before realizing that no common ALPN protocol can be
        negotiated.</t>
        <t indent="0" pn="section-3.3-17">Where the client does perform signaling via ALPN, and the server
        determines that there is no compatible application protocol name, then
        as per <xref section="3.2" sectionFormat="comma" target="RFC7301" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7301#section-3.2" derivedContent="RFC7301"/>,
        it <bcp14>MUST</bcp14> send a TLS alert of "no_application_protocol"
        (120).</t>
        <t indent="0" pn="section-3.3-18">The server <bcp14>MUST</bcp14> close the connection whether or not
        the server sent a TLS alert for no compatible ALPN.  The above
        requirements on ALPN apply to both new sessions and to resumed
        sessions.</t>
        <t indent="0" pn="section-3.3-19">In contrast, there is no need for the client to signal that there
        are no compatible application protocol names.  The client sends zero
        or more protocol names, and the server responds as above.  From the
        point of view of the client, the list it sent results in either a
        connection failure or a connection success.</t>
        <t indent="0" pn="section-3.3-20">It is <bcp14>RECOMMENDED</bcp14> that the server logs a descriptive
        error in this situation, so that an administrator can determine why a
        particular connection failed.  The log message <bcp14>SHOULD</bcp14>
        include information about the other end of the connection, such as the IP
        address, certificate information, etc.  Similarly, when the client
        receives a TLS alert of "no_application_protocol" (120), it
        <bcp14>SHOULD</bcp14> log a descriptive error message.  Such error
        messages are critical for helping administrators diagnose
        connectivity issues.</t>
        <section anchor="using-protocol-error-for-signaling-alpn-failure" numbered="true" removeInRFC="false" toc="include" pn="section-3.3.1">
          <name slugifiedName="name-using-protocol-error-for-si">Using Protocol-Error for Signaling ALPN Failure</name>
          <t indent="0" pn="section-3.3.1-1">When it is not possible to send a TLS alert of
          "no_application_protocol" (120), then the only remaining method for
          one party to signal the other is to send application data inside of
          the TLS tunnel.  Therefore, for the situation when one end of a
          connection determines that it requires ALPN, while the other end does
          not support ALPN, then the end requiring ALPN <bcp14>MAY</bcp14> send a
          Protocol-Error packet <xref target="RFC7930" format="default" sectionFormat="of" derivedContent="RFC7930"/> inside of the tunnel
          and then <bcp14>MUST</bcp14> close the connection.  If this is done,
          the Token field of the Protocol-Error packet cannot be copied from
          any request; therefore, that field <bcp14>MUST</bcp14> be set to
          all zeros.</t>
          <t indent="0" pn="section-3.3.1-2">The Protocol-Error packet <bcp14>SHOULD</bcp14> contain a
          Reply-Message attribute with a textual string describing the cause
          of the error.  The packet <bcp14>SHOULD</bcp14> also contain an
          Error-Cause attribute, with value 406 (Unsupported Extension).  The
          packet <bcp14>SHOULD NOT</bcp14> contain other attributes.</t>
          <t indent="0" pn="section-3.3.1-3">An implementation sending this packet could bypass any RADIUS
          encoder and simply write this packet as a predefined, fixed set of
          data to the TLS connection.  That process would likely be simpler
          than trying to call the normal RADIUS packet encoder to encode a
          reply packet with no corresponding request packet.</t>
          <t indent="0" pn="section-3.3.1-4">As this packet is an unexpected response packet, existing client
          implementations of RADIUS over TLS will ignore it.  They may either
          log an error and close the connection, or they may discard the
          packet and leave the connection open.  If the connection remains
          open, the end supporting ALPN will close the connection, so there
          will be no side effects from sending this packet.  Therefore, while
          using a Protocol-Error packet in this way is unusual, it is both
          informative and safe.</t>
          <t indent="0" pn="section-3.3.1-5">The purpose of this packet is not to have the other end of the
          connection automatically determine what went wrong and fix it.
          Instead, the packet is intended to be (eventually) seen by an
          administrator, who can then take remedial action.</t>
        </section>
        <section anchor="tabular-summary" numbered="true" removeInRFC="false" toc="include" pn="section-3.3.2">
          <name slugifiedName="name-tabular-summary">Tabular Summary</name>
          <t indent="0" pn="section-3.3.2-1">The preceding text gives a large number of recommendations. In order
	  to give a simpler description of the outcomes, a table of possible
	  behaviors for client/server values of the Version variable is given
	  below.  The row and column headings are the RADIUS version numbers
	  sent in ALPN (or no ALPN).  The contents of the table are the
	  resulting RADIUS version that is negotiated.  For clarity, only the
	  RADIUS version numbers have been given, and not the full ALPN
	  strings (e.g., "radius/1.0").</t>
          <t indent="0" pn="section-3.3.2-2">This table and the names given below are for informational and
	  descriptive purposes only.</t>
          <table align="center" pn="table-2">
            <name slugifiedName="name-possible-outcomes-for-alpn">Possible Outcomes for ALPN</name>
            <thead>
              <tr>
                <th rowspan="2" align="left" colspan="1">Client</th>
                <th colspan="4" align="center" rowspan="1">Server</th>
              </tr>
              <tr>
                <th align="left" colspan="1" rowspan="1">no ALPN</th>
                <th align="left" colspan="1" rowspan="1">1.0</th>
                <th align="left" colspan="1" rowspan="1">1.0, 1.1</th>
                <th align="left" colspan="1" rowspan="1">1.1</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <th align="left" colspan="1" rowspan="1">no ALPN</th>
                <td align="left" colspan="1" rowspan="1">TLS</td>
                <td align="left" colspan="1" rowspan="1">TLS</td>
                <td align="left" colspan="1" rowspan="1">TLS</td>
                <td align="left" colspan="1" rowspan="1">Close-S</td>
              </tr>
              <tr>
                <th align="left" colspan="1" rowspan="1">1.0</th>
                <td align="left" colspan="1" rowspan="1">TLS</td>
                <td align="left" colspan="1" rowspan="1">TLS</td>
                <td align="left" colspan="1" rowspan="1">TLS</td>
                <td align="left" colspan="1" rowspan="1">Alert</td>
              </tr>
              <tr>
                <th align="left" colspan="1" rowspan="1">1.0, 1.1</th>
                <td align="left" colspan="1" rowspan="1">TLS</td>
                <td align="left" colspan="1" rowspan="1">TLS</td>
                <td align="left" colspan="1" rowspan="1">1.1</td>
                <td align="left" colspan="1" rowspan="1">1.1</td>
              </tr>
              <tr>
                <th align="left" colspan="1" rowspan="1">1.1</th>
                <td align="left" colspan="1" rowspan="1">Close-C</td>
                <td align="left" colspan="1" rowspan="1">Alert</td>
                <td align="left" colspan="1" rowspan="1">1.1</td>
                <td align="left" colspan="1" rowspan="1">1.1</td>
              </tr>
            </tbody>
          </table>
          <t indent="0" pn="section-3.3.2-4">The table entries above have the following meaning:</t>
          <dl newline="true" spacing="normal" indent="3" pn="section-3.3.2-5">
            <dt pn="section-3.3.2-5.1">Alert</dt>
            <dd pn="section-3.3.2-5.2">
              <t indent="0" pn="section-3.3.2-5.2.1">The client sends ALPN, and the server does not agree to
                  the client's ALPN proposal.  The server replies with a TLS
                  alert of "no_application_protocol" (120) and then closes
                  the TLS connection.</t>
              <t indent="0" pn="section-3.3.2-5.2.2">As the server replies with a TLS alert, the
                  Protocol-Error packet is not used here.</t>
            </dd>
            <dt pn="section-3.3.2-5.3">Close-C</dt>
            <dd pn="section-3.3.2-5.4">
              <t indent="0" pn="section-3.3.2-5.4.1">The client sends ALPN, but the server does not respond
                  with ALPN.  The client closes the connection.</t>
              <t indent="0" pn="section-3.3.2-5.4.2">As noted in the previous section, the client
                  <bcp14>MAY</bcp14> send a Protocol-Error packet to the
                  server before closing the connection.</t>
            </dd>
            <dt pn="section-3.3.2-5.5">Close-S</dt>
            <dd pn="section-3.3.2-5.6">
              <t indent="0" pn="section-3.3.2-5.6.1">The client does not send ALPN string(s), but the server
                  requires ALPN.  The server closes the connection.</t>
              <t indent="0" pn="section-3.3.2-5.6.2">As noted in the previous section, the server
                  <bcp14>MAY</bcp14> send a Protocol-Error packet to the
                  client before closing the connection.  The server
                  <bcp14>MAY</bcp14> also send a TLS alert of
                  "no_application_protocol" (120) before closing the
                  connection.</t>
            </dd>
            <dt pn="section-3.3.2-5.7">TLS</dt>
            <dd pn="section-3.3.2-5.8">
              <t indent="0" pn="section-3.3.2-5.8.1">Historic RADIUS/TLS is used.  The client either sends no
                  ALPN string or sends "radius/1.0".  The server either
                  replies with no ALPN string or with "radius/1.0".  The
                  connection <bcp14>MUST</bcp14> use historic RADIUS/TLS.</t>
            </dd>
            <dt pn="section-3.3.2-5.9">1.1</dt>
            <dd pn="section-3.3.2-5.10">
              <t indent="0" pn="section-3.3.2-5.10.1">The client sends the ALPN string "radius/1.1".  The server
                  acknowledges this negotiation with a reply of "radius/1.1",
                  and then RADIUS/1.1 is used.</t>
            </dd>
          </dl>
          <t indent="0" pn="section-3.3.2-6">Implementations should note that this table may be extended in
          future specifications.  The above text is informative, and does not
          mandate that only the above ALPN strings are used.  The actual ALPN
          takes place as defined in the preceding sections of this document
          and in <xref target="RFC7301" format="default" sectionFormat="of" derivedContent="RFC7301"/>.</t>
        </section>
      </section>
      <section anchor="miscellaneous-items" numbered="true" removeInRFC="false" toc="include" pn="section-3.4">
        <name slugifiedName="name-miscellaneous-items">Miscellaneous Items</name>
        <t indent="0" pn="section-3.4-1">Implementations of this specification <bcp14>MUST</bcp14> require
        TLS version 1.3 or later.</t>
        <t indent="0" pn="section-3.4-2">The use of the ALPN string "radius/1.0" is technically unnecessary,
        as it is largely equivalent to not sending any ALPN string.  However,
        that value is useful for RADIUS administrators.  A system that sends
        the ALPN string "radius/1.0" is explicitly signaling that it supports
        ALPN, but that it is not currently configured to support
        RADIUS/1.1.  That information can be used by administrators to
        determine which devices are capable of ALPN.</t>
        <t indent="0" pn="section-3.4-3">The use of the ALPN string "radius/1.0" also permits server
        implementations to send a TLS alert of "no_application_protocol" (120)
        when it cannot find a matching ALPN string.  Experiments with TLS
        library implementations suggest that in some cases it is possible to
        send that TLS alert when ALPN is not used.  However, such a scenario
        is not discussed in <xref target="RFC7301" format="default" sectionFormat="of" derivedContent="RFC7301"/> and is likely not
        universal.  As a result, ALPN as defined in <xref target="RFC7301" format="default" sectionFormat="of" derivedContent="RFC7301"/>
        permits servers to send that TLS alert in situations where it would be
        otherwise forbidden or perhaps unsupported.</t>
        <t indent="0" pn="section-3.4-4">Finally, defining ALPN strings for all known RADIUS versions will
        make it easier to support additional ALPN strings if that
        functionality is ever needed.</t>
      </section>
      <section anchor="session-resumption" numbered="true" removeInRFC="false" toc="include" pn="section-3.5">
        <name slugifiedName="name-session-resumption">Session Resumption</name>
        <t indent="0" pn="section-3.5-1"><xref section="3.1" sectionFormat="comma" target="RFC7301" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7301#section-3.1" derivedContent="RFC7301"/> states
        that ALPN is negotiated on each connection, even if session resumption
        is used:</t>
        <blockquote pn="section-3.5-2">When session resumption or session tickets <xref target="RFC5077" format="default" sectionFormat="of" derivedContent="RFC5077"/> are used, the previous contents of this extension
        are irrelevant, and only the values in the new handshake messages are
        considered.</blockquote>
        <t indent="0" pn="section-3.5-3">(Note: RFC 5077 was obsoleted by <xref target="RFC8446" format="default" sectionFormat="of" derivedContent="RFC8446"/>.)</t>
        <t indent="0" pn="section-3.5-4">In order to prevent down-bidding attacks, RADIUS systems that
        negotiate the "radius/1.1" protocol <bcp14>MUST</bcp14> associate that
        information with the session ticket and enforce the use of
        "radius/1.1" on session resumption.  That is, if "radius/1.1" was
        negotiated for a session, both clients and servers <bcp14>MUST</bcp14>
        behave as if the RADIUS/1.1 variable was set to "require" for that
        session.</t>
        <t indent="0" pn="section-3.5-5">A client that is resuming a "radius/1.1" connection
        <bcp14>MUST</bcp14> advertise only the capability to do "radius/1.1"
        for the resumed session.  That is, even if the client configuration
        allows historic RADIUS/TLS for new connections, it <bcp14>MUST</bcp14>
        signal "radius/1.1" when resuming a session that had previously
        negotiated "radius/1.1".</t>
        <t indent="0" pn="section-3.5-6">Similarly, when a server does resumption for a session that had
        previously negotiated "radius/1.1",  if the client attempts to resume
        the sessions without signaling the use of RADIUS/1.1, the server
        <bcp14>MUST</bcp14> close the connection.  The server
        <bcp14>MUST</bcp14> send an appropriate TLS error, and also
        <bcp14>SHOULD</bcp14> log a descriptive message as described
        above.</t>
        <t indent="0" pn="section-3.5-7">In contrast, there is no requirement for a client or server to
        force the use of RADIUS/TLS from <xref target="RFC6614" format="default" sectionFormat="of" derivedContent="RFC6614"/> on session
        resumption.  Clients are free to signal support for "radius/1.1" on
        resumed sessions, even if the original session did not negotiate
        "radius/1.1".  Servers are free to accept this request and to
        negotiate the use of "radius/1.1" for such sessions.</t>
      </section>
    </section>
    <section anchor="radius11-packet-and-attribute-formats" numbered="true" removeInRFC="false" toc="include" pn="section-4">
      <name slugifiedName="name-radius-11-packet-and-attrib">RADIUS/1.1 Packet and Attribute Formats</name>
      <t indent="0" pn="section-4-1">This section describes the application-layer data that is sent
      inside of (D)TLS when using the RADIUS/1.1 protocol.  Unless otherwise
      discussed herein, the application-layer data is unchanged from historic RADIUS.  This protocol is only used when "radius/1.1" has
      been negotiated by both ends of a connection.</t>
      <section anchor="radius11-packet-format" numbered="true" removeInRFC="false" toc="include" pn="section-4.1">
        <name slugifiedName="name-radius-11-packet-format">RADIUS/1.1 Packet Format</name>
        <t indent="0" pn="section-4.1-1">When RADIUS/1.1 is used, the RADIUS header is modified from
        standard RADIUS.  While the header has the same size, some fields have
        different meanings.  The Identifier and the Request and Response
        Authenticator fields are no longer used in RADIUS/1.1.  Any operations
        that depend on those fields <bcp14>MUST NOT</bcp14> be performed.  As
        packet authentication, secrecy, and security are handled by the TLS
        layer, RADIUS-specific cryptographic primitives are no longer needed
        or used in RADIUS/1.1.</t>
        <t indent="0" pn="section-4.1-2">A summary of the RADIUS/1.1 packet format is shown below.  The
        fields are transmitted from left to right.</t>
        <figure anchor="Header" align="left" suppress-title="false" pn="figure-1">
          <name slugifiedName="name-the-radius-11-packet-format">The RADIUS/1.1 Packet Format</name>
          <artwork align="left" pn="section-4.1-3.1">
 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      |  Reserved-1   |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             Token                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                           Reserved-2                          |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Attributes ...
+-+-+-+-+-+-+-+-+-+-+-+-+-
</artwork>
        </figure>
        <dl spacing="normal" newline="true" indent="3" pn="section-4.1-4">
          <dt pn="section-4.1-4.1">Code</dt>
          <dd pn="section-4.1-4.2">
            <t indent="0" pn="section-4.1-4.2.1">The Code field is one octet and identifies the type of RADIUS packet.</t>
            <t indent="0" pn="section-4.1-4.2.2">The meaning of the Code field is unchanged from previous RADIUS specifications.</t>
          </dd>
          <dt pn="section-4.1-4.3">Reserved-1</dt>
          <dd pn="section-4.1-4.4">
            <t indent="0" pn="section-4.1-4.4.1">The Reserved-1 field is one octet.</t>
            <t indent="0" pn="section-4.1-4.4.2">This field was previously used as the "Identifier" in historic
            RADIUS/TLS.  It is now unused, as the Token field replaces it both
            as the way to identify requests and to associate responses with
            requests.</t>
            <t indent="0" pn="section-4.1-4.4.3">When sending packets, the Reserved-1 field <bcp14>MUST</bcp14>
            be set to zero.  The Reserved-1 field <bcp14>MUST</bcp14> be
            ignored when receiving a packet.</t>
          </dd>
          <dt pn="section-4.1-4.5">Length</dt>
          <dd pn="section-4.1-4.6">
            <t indent="0" pn="section-4.1-4.6.1">The Length field is two octets.</t>
            <t indent="0" pn="section-4.1-4.6.2">The meaning of the Length field is unchanged from previous RADIUS specifications.</t>
          </dd>
          <dt pn="section-4.1-4.7">Token</dt>
          <dd pn="section-4.1-4.8">
            <t indent="0" pn="section-4.1-4.8.1">The Token field is four octets and aids in matching requests
            and replies, as a replacement for the Identifier field.  The
            RADIUS server can detect a duplicate request if it receives the
            same Token value for two packets on a particular connection.</t>
            <t indent="0" pn="section-4.1-4.8.2">All values are possible for the Token field.  Implementations
            <bcp14>MUST</bcp14> treat the Token as an opaque blob when
            comparing Token values.</t>
            <t indent="0" pn="section-4.1-4.8.3">Further requirements are given below in <xref target="sending-packets" format="default" sectionFormat="of" derivedContent="Section 4.2.1"/> for sending packets and in <xref target="receiving-packets" format="default" sectionFormat="of" derivedContent="Section 4.2.2"/> for receiving packets.</t>
          </dd>
          <dt pn="section-4.1-4.9">Reserved-2</dt>
          <dd pn="section-4.1-4.10">
            <t indent="0" pn="section-4.1-4.10.1">The Reserved-2 field is twelve (12) octets in length.</t>
            <t indent="0" pn="section-4.1-4.10.2">These octets <bcp14>MUST</bcp14> be set to zero when sending a packet.</t>
            <t indent="0" pn="section-4.1-4.10.3">These octets <bcp14>MUST</bcp14> be ignored when receiving a packet.</t>
            <t indent="0" pn="section-4.1-4.10.4">These octets are reserved for future protocol extensions.</t>
          </dd>
        </dl>
      </section>
      <section anchor="the-token-field" numbered="true" removeInRFC="false" toc="include" pn="section-4.2">
        <name slugifiedName="name-the-token-field">The Token Field</name>
        <t indent="0" pn="section-4.2-1">This section describes in more detail how the Token field is used.</t>
        <section anchor="sending-packets" numbered="true" removeInRFC="false" toc="include" pn="section-4.2.1">
          <name slugifiedName="name-sending-packets">Sending Packets</name>
          <t indent="0" pn="section-4.2.1-1">The Token field <bcp14>MUST</bcp14> change for every new unique
          packet that is sent on the same connection. For DTLS transport, it
          is possible to retransmit duplicate packets, in which case the Token
          value <bcp14>MUST NOT</bcp14> be changed when a duplicate packet is
          (re)sent.  When the contents of a retransmitted packet change for
          any reason (such as changing Acct-Delay-Time as discussed in <xref section="5.2" sectionFormat="comma" target="RFC2866" format="default" derivedLink="https://rfc-editor.org/rfc/rfc2866#section-5.2" derivedContent="RFC2866"/>), the Token
          value <bcp14>MUST</bcp14> be changed.  Note that on reliable
          transports, packets are never retransmitted; therefore, every new
          packet that is sent has a unique Token value.</t>
          <t indent="0" pn="section-4.2.1-2">We note that in previous RADIUS specifications, the Identifier
          field could have the same value for different packets on the same
          connection.  For example, Access-Request (Code 1) and
          Accounting-Request (Code 4) packets could both use ID 3 and still
          be treated as different packets.  This overlap requires that RADIUS
          clients and servers track the Identifier field, not only on a
          per-connection basis, but also on a per-Code basis.  This behavior
          adds complexity to implementations.</t>
          <t indent="0" pn="section-4.2.1-3">In contrast, the Token values <bcp14>MUST</bcp14> be generated
	  from a 32-bit counter that is unique to each connection.  Such a
	  counter <bcp14>SHOULD</bcp14> be initialized to a random value,
	  taken from a random number generator, whenever a new connection
	  is opened.  The counter <bcp14>MUST</bcp14> then be incremented for
	  every unique new packet that is sent by the client.  Retransmissions
	  of the same packet <bcp14>MUST</bcp14> use the same unchanged Token
	  value.  As the Token value is mandated to be unique per packet, a
	  duplicate Token value is the only way that a server can detect
	  duplicate transmissions.</t>
          <t indent="0" pn="section-4.2.1-4">This counter method ensures that the Tokens are unique and are
          also independent of any Code value in the RADIUS packet header.
          This method is mandated because any other method of generating
          unique and non-conflicting Token values is more complex, with no
          additional benefit and only the likelihood of increased bugs and
          interoperability issues.  Any other method for generating Token
          values would require substantially more resources to track
          outstanding Token values and their associated expiry times.  The
          chance that initial values could potentially cause any confusion by
          being reused across two connections is one in 2<sup>32</sup>, which
          is acceptable.</t>
          <t indent="0" pn="section-4.2.1-5">The purpose for initializing the Token to a random counter is
          mainly to aid administrators in debugging systems.  If the Token
          values always used the same sequence, then it would easier for a
          person to confuse different packets that have the same Token value.
          By instead starting with a random value, those values are more
          evenly distributed across the set of allowed values; therefore, they
          are more likely to be unique.</t>
          <t indent="0" pn="section-4.2.1-6">As there is no special meaning for the Token, there is no meaning
          when a counter "wraps" around from a high value back to zero.  The
          originating system can simply continue to increment the Token value
          without taking any special action in that situation.</t>
          <t indent="0" pn="section-4.2.1-7">Once a RADIUS response to a request has been received and there
          is no need to track the packet any longer, the Token value can be
          reused.  This reuse happens only when the counter "wraps around"
          after 2<sup>32</sup> packets have been sent over one connection.
          This method of managing the counter automatically ensures a long
          delay (i.e., 2<sup>32</sup> packets) between multiple uses of the
          same Token value.  This large number of packets ensures that the
          only possible situation where there may be conflict is when a client
          sends billions of packets a second across one connection, or when a
          client sends billions of packets without receiving replies.  We
          suggest that such situations are vanishingly rare.  The best
          solution to those situations would be to limit the number of
          outstanding packets over one connection to a number much lower than
          billions.</t>
          <t indent="0" pn="section-4.2.1-8">If a RADIUS client has multiple independent subsystems that send
          packets to a server, each subsystem <bcp14>MAY</bcp14> open a new
          connection that is unique to that subsystem.  There is no
          requirement that all packets go over one particular connection.
          That is, despite the use of a 32-bit Token field, RADIUS/1.1 clients
          are still permitted to open multiple source ports as discussed in
          <xref section="2.5" sectionFormat="comma" target="RFC2865" format="default" derivedLink="https://rfc-editor.org/rfc/rfc2865#section-2.5" derivedContent="RFC2865"/>.</t>
          <t indent="0" pn="section-4.2.1-9">While multiple connections from client to server are allowed, we
          reiterate the suggestion of <xref section="3.3" sectionFormat="comma" target="RFC3539" format="default" derivedLink="https://rfc-editor.org/rfc/rfc3539#section-3.3" derivedContent="RFC3539"/> that a single connection is
          preferred to multiple connections.  The use of a single connection
          can improve throughput and latency, while simplifying the client's
          efforts to determine server status.</t>
        </section>
        <section anchor="receiving-packets" numbered="true" removeInRFC="false" toc="include" pn="section-4.2.2">
          <name slugifiedName="name-receiving-packets">Receiving Packets</name>
          <t indent="0" pn="section-4.2.2-1">A server that receives RADIUS/1.1 packets <bcp14>MUST</bcp14>
          perform packet deduplication for all situations where it is required
          by RADIUS.  Where RADIUS does not require deduplication (e.g., TLS
          transport), the server <bcp14>SHOULD NOT</bcp14> do deduplication.
          However, DTLS transport is UDP-based, and therefore still requires
          deduplication.</t>
          <t indent="0" pn="section-4.2.2-2">When using RADIUS/1.1, implementations <bcp14>MUST</bcp14> do
          deduplication only on the Token field, and not on any other field or
          fields in the packet header. A server <bcp14>MUST</bcp14> treat the
          Token as being an opaque field with no intrinsic meaning.  This
          requirement makes the receiver behavior independent of the methods
          by which the Counter is generated.</t>
          <t indent="0" pn="section-4.2.2-3">Where Token deduplication is done, it <bcp14>MUST</bcp14> be done
          on a per-connection basis.  If two packets that are received on
          different connections contain the same Token value, then those
          packets <bcp14>MUST</bcp14> be treated as distinct (i.e., different)
          packets.  Systems performing deduplication <bcp14>MAY</bcp14> still
          track the packet Code, Length, and Attributes that are associated
          with a Token value.  If it determines that the sender is reusing
          Token values for distinct outstanding packets, then an error should
          be logged, and the connection <bcp14>MUST</bcp14> be closed.  There
          is no way to negotiate correct behavior in the protocol.  Either
          both parties operate normally and can communicate, or one end
          misbehaves and no communication is possible.</t>
          <t indent="0" pn="section-4.2.2-4">Once a reply has been sent, a system doing deduplication
          <bcp14>SHOULD</bcp14> cache the replies as discussed in <xref section="2.2.2" sectionFormat="comma" target="RFC5080" format="default" derivedLink="https://rfc-editor.org/rfc/rfc5080#section-2.2.2" derivedContent="RFC5080"/>:</t>
          <blockquote pn="section-4.2.2-5">Each cache entry <bcp14>SHOULD</bcp14> be purged after
          a period of time.  This time <bcp14>SHOULD</bcp14> be no less than 5
          seconds, and no more than 30 seconds.  After about 30 seconds, most
          RADIUS clients and end users will have given up on the
          authentication request.  Therefore, there is little value in having
          a larger cache timeout.</blockquote>
          <t indent="0" pn="section-4.2.2-6">This change from RADIUS means that the Identifier field is no
          longer useful for RADIUS/1.1.  The Reserved-1 field (previously used
          as the Identifier) <bcp14>MUST</bcp14> be set to zero when encoding
          all RADIUS/1.1 packets.  Implementations of RADIUS/1.1 that receive
          packets <bcp14>MUST</bcp14> ignore this field.</t>
        </section>
      </section>
    </section>
    <section anchor="attribute-handling" numbered="true" removeInRFC="false" toc="include" pn="section-5">
      <name slugifiedName="name-attribute-handling">Attribute Handling</name>
      <t indent="0" pn="section-5-1">Most attributes in RADIUS have no special encoding "on the wire", or
      any special meaning between client and server.  Unless discussed in this
      section, all RADIUS attributes are unchanged in this specification.
      This requirement includes attributes that contain a tag, as defined in
      <xref target="RFC2868" format="default" sectionFormat="of" derivedContent="RFC2868"/>.</t>
      <section anchor="obfuscated-attributes" numbered="true" removeInRFC="false" toc="include" pn="section-5.1">
        <name slugifiedName="name-obfuscated-attributes">Obfuscated Attributes</name>
        <t indent="0" pn="section-5.1-1">Since the (D)TLS layer provides for connection authentication,
        integrity checks, and confidentiality, there is no need to hide the
        contents of an attribute on a hop-by-hop basis.  As a result, all
        attributes defined as being obfuscated via the shared secret no longer
        have the obfuscation step applied when RADIUS/1.1 is used.  Instead,
        those attributes <bcp14>MUST</bcp14> be encoded using the encoding for
        the underlying data type, with any encryption / obfuscation step
        omitted.  For example, the User-Password attribute is no longer
        obfuscated and is instead sent as data type "text".</t>
        <t indent="0" pn="section-5.1-2">There are risks from sending passwords over the network, even when
        they are protected by TLS.  One such risk comes from the common
        practice of multi-hop RADIUS routing.  As all security in RADIUS is on
        a hop-by-hop basis, every proxy that receives a RADIUS packet can see
        (and modify) all of the information in the packet.  Sites wishing to
        avoid proxies <bcp14>SHOULD</bcp14> use dynamic peer discovery <xref target="RFC7585" format="default" sectionFormat="of" derivedContent="RFC7585"/>, which permits clients to make connections directly
        to authoritative servers for a realm.</t>
        <t indent="0" pn="section-5.1-3">There are other ways to mitigate these risks.  The simplest is to
        follow the requirements of item (3) from <xref section="3.4" sectionFormat="comma" target="RFC6614" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6614#section-3.4" derivedContent="RFC6614"/> and also follow <xref section="10.4" sectionFormat="comma" target="RFC7360" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7360#section-10.4" derivedContent="RFC7360"/>, which mandates that RADIUS
        over TLS implementations validate the peer before sending any RADIUS
        traffic.</t>
        <t indent="0" pn="section-5.1-4">Another way to mitigate these risks is for the system being
        authenticated to use an authentication protocol that never sends
        passwords (e.g., an Extensible Authentication Protocol (EAP) method
        like EAP-pwd <xref target="RFC5931" format="default" sectionFormat="of" derivedContent="RFC5931"/>), or one that sends passwords protected by a
        TLS tunnel (e.g., EAP Tunneled Transport Layer Security (EAP-TTLS)
        <xref target="RFC5281" format="default" sectionFormat="of" derivedContent="RFC5281"/>).  The processes to choose and configure an
        authentication protocol are strongly site dependent, so further
        discussions of these issues are outside of the scope of this document.
        The goal here is to ensure that the reader has enough information to
        make an informed decision.</t>
        <t indent="0" pn="section-5.1-5">We note that as the RADIUS shared secret is no longer used in this
        specification, it is no longer possible or necessary for any attribute
        to be obfuscated on a hop-by-hop basis using the previous methods
        defined for RADIUS.</t>
        <section anchor="user-password" numbered="true" removeInRFC="false" toc="include" pn="section-5.1.1">
          <name slugifiedName="name-user-password">User-Password</name>
          <t indent="0" pn="section-5.1.1-1">The User-Password attribute (<xref section="5.2" sectionFormat="comma" target="RFC2865" format="default" derivedLink="https://rfc-editor.org/rfc/rfc2865#section-5.2" derivedContent="RFC2865"/>) <bcp14>MUST</bcp14> be
          encoded the same as any other attribute of data type "string" (<xref section="3.5" sectionFormat="comma" target="RFC8044" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8044#section-3.5" derivedContent="RFC8044"/>).</t>
          <t indent="0" pn="section-5.1.1-2">The contents of the User-Password field <bcp14>MUST</bcp14> be at
          least one octet in length and <bcp14>MUST NOT</bcp14> be more than
          128 octets in length.  This limitation is maintained from <xref section="5.2" sectionFormat="comma" target="RFC2865" format="default" derivedLink="https://rfc-editor.org/rfc/rfc2865#section-5.2" derivedContent="RFC2865"/> for
          compatibility with historic transports.</t>
          <t indent="0" pn="section-5.1.1-3">Note that the User-Password attribute is not of data type "text".
          The original reason in <xref target="RFC2865" format="default" sectionFormat="of" derivedContent="RFC2865"/> was because the
          attribute was encoded as an opaque and obfuscated binary blob.  This
          document does not change the data type of User-Password, even though
          the attribute is no longer obfuscated.  The contents of the
          User-Password attribute do not have to be printable text or UTF-8
          data as per the definition of the "text" data type in <xref section="3.4" sectionFormat="comma" target="RFC8044" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8044#section-3.4" derivedContent="RFC8044"/>.</t>
          <t indent="0" pn="section-5.1.1-4">However, implementations should be aware that passwords are often
          printable text, and where the passwords are printable text, it can
          be useful to store and display them as printable text.  Where
          implementations can process non-printable data in the "text" data
          type, they <bcp14>MAY</bcp14> use the data type "text" for
          User-Password.</t>
        </section>
        <section anchor="chap-challenge" numbered="true" removeInRFC="false" toc="include" pn="section-5.1.2">
          <name slugifiedName="name-chap-challenge">CHAP-Challenge</name>
          <t indent="0" pn="section-5.1.2-1"><xref section="5.3" sectionFormat="comma" target="RFC2865" format="default" derivedLink="https://rfc-editor.org/rfc/rfc2865#section-5.3" derivedContent="RFC2865"/>
          allows for the CHAP challenge to be taken from either the
          CHAP-Challenge attribute (<xref section="5.40" sectionFormat="comma" target="RFC2865" format="default" derivedLink="https://rfc-editor.org/rfc/rfc2865#section-5.40" derivedContent="RFC2865"/>) or the Request Authenticator field.  Since
          RADIUS/1.1 connections no longer use a Request Authenticator field,
          it is no longer possible to use the Request Authenticator field as
          the CHAP-Challenge when this transport profile is used.</t>
          <t indent="0" pn="section-5.1.2-2">Clients that send a CHAP-Password attribute (<xref section="5.3" sectionFormat="comma" target="RFC2865" format="default" derivedLink="https://rfc-editor.org/rfc/rfc2865#section-5.3" derivedContent="RFC2865"/>) in an Access-Request
          packet over a RADIUS/1.1 connection <bcp14>MUST</bcp14> also include
          a CHAP-Challenge attribute (<xref section="5.40" sectionFormat="comma" target="RFC2865" format="default" derivedLink="https://rfc-editor.org/rfc/rfc2865#section-5.40" derivedContent="RFC2865"/>).</t>
          <t indent="0" pn="section-5.1.2-3">Proxies may need to receive Access-Request packets over a
          non-RADIUS/1.1 transport and then forward those packets over a
          RADIUS/1.1 connection.  In that case, if the received Access-Request
          packet contains a CHAP-Password attribute but no CHAP-Challenge
          attribute, the proxy <bcp14>MUST</bcp14> create a CHAP-Challenge
          attribute in the proxied packet using the contents from the incoming
          Request Authenticator of the received packet.</t>
        </section>
        <section anchor="tunnel-password" numbered="true" removeInRFC="false" toc="include" pn="section-5.1.3">
          <name slugifiedName="name-tunnel-password">Tunnel-Password</name>
          <t indent="0" pn="section-5.1.3-1">The Tunnel-Password attribute (<xref section="3.5" sectionFormat="comma" target="RFC2868" format="default" derivedLink="https://rfc-editor.org/rfc/rfc2868#section-3.5" derivedContent="RFC2868"/>) <bcp14>MUST</bcp14> be
          encoded the same as any other attribute of data type "string" that
          contains a tag, such as Tunnel-Client-Endpoint (<xref section="3.3" sectionFormat="comma" target="RFC2868" format="default" derivedLink="https://rfc-editor.org/rfc/rfc2868#section-3.3" derivedContent="RFC2868"/>).  Since the attribute is
          no longer obfuscated in RADIUS/1.1, there is no need for a Salt
          field or Data-Length fields as described in <xref section="3.5" sectionFormat="comma" target="RFC2868" format="default" derivedLink="https://rfc-editor.org/rfc/rfc2868#section-3.5" derivedContent="RFC2868"/>. The textual value of
          the password can simply be encoded as is.</t>
          <t indent="0" pn="section-5.1.3-2">Note that the Tunnel-Password attribute is not of data type
          "text".  The original reason in <xref target="RFC2868" format="default" sectionFormat="of" derivedContent="RFC2868"/> was because
          the attribute was encoded as an opaque and obfuscated binary blob.
          We maintain that data type here, even though the attribute is no
          longer obfuscated.  The contents of the Tunnel-Password attribute do
          not have to be printable text or UTF-8 data as per the definition
          of the "text" data type in <xref section="3.4" sectionFormat="comma" target="RFC8044" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8044#section-3.4" derivedContent="RFC8044"/>.</t>
          <t indent="0" pn="section-5.1.3-3">However, implementations should be aware that passwords are often
          printable text, and where the passwords are printable text, it can
          be useful to store and display them as printable text.  Where
          implementations can process non-printable data in the "text" data
          type, they <bcp14>MAY</bcp14> use the data type "text" for
          Tunnel-Password.</t>
        </section>
        <section anchor="vendor-specific-attributes" numbered="true" removeInRFC="false" toc="include" pn="section-5.1.4">
          <name slugifiedName="name-vendor-specific-attributes">Vendor-Specific Attributes</name>
          <t indent="0" pn="section-5.1.4-1">Any Vendor-Specific attribute that uses similar obfuscation
          <bcp14>MUST</bcp14> be encoded as per their base data type.
          Specifically, the MS-MPPE-Send-Key and MS-MPPE-Recv-Key attributes
          (<xref section="2.4" sectionFormat="comma" target="RFC2548" format="default" derivedLink="https://rfc-editor.org/rfc/rfc2548#section-2.4" derivedContent="RFC2548"/>)
          <bcp14>MUST</bcp14> be encoded as any other attribute of data type
          "string" (<xref section="3.4" sectionFormat="comma" target="RFC8044" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8044#section-3.4" derivedContent="RFC8044"/>).</t>
        </section>
      </section>
      <section anchor="message-authenticator" numbered="true" removeInRFC="false" toc="include" pn="section-5.2">
        <name slugifiedName="name-message-authenticator">Message-Authenticator</name>
        <t indent="0" pn="section-5.2-1">The Message-Authenticator attribute (<xref section="3.2" sectionFormat="comma" target="RFC3579" format="default" derivedLink="https://rfc-editor.org/rfc/rfc3579#section-3.2" derivedContent="RFC3579"/>) <bcp14>MUST NOT</bcp14> be
        sent over a RADIUS/1.1 connection.  That attribute is not used or
        needed in RADIUS/1.1.</t>
        <t indent="0" pn="section-5.2-2">If the Message-Authenticator attribute is received over a
        RADIUS/1.1 connection, the attribute <bcp14>MUST</bcp14> be silently
        discarded or treated as an "invalid attribute", as defined in <xref section="2.8" sectionFormat="comma" target="RFC6929" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6929#section-2.8" derivedContent="RFC6929"/>.  That is, the
        Message-Authenticator attribute is no longer used to authenticate
        packets for the RADIUS/1.1 transport.  Its existence (or not) in this
        transport is meaningless.</t>
        <t indent="0" pn="section-5.2-3">A system that receives a Message-Authenticator attribute in a
        packet <bcp14>MUST</bcp14> treat it as an "invalid attribute" as
        defined in <xref section="2.8" sectionFormat="comma" target="RFC6929" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6929#section-2.8" derivedContent="RFC6929"/>.  That is, the packet can still be processed, even
        if the Message-Authenticator attribute is ignored.</t>
        <t indent="0" pn="section-5.2-4">For proxies, the Message-Authenticator attribute has always been
        defined as being created and consumed on a "hop-by-hop" basis.  That
        is, a proxy that received a Message-Authenticator attribute from a
        client would never forward that attribute as is to another server.
        Instead, the proxy would either suppress or recreate the
        Message-Authenticator attribute in the outgoing request.  This
        existing behavior is leveraged in RADIUS/1.1 to suppress the use of the
        Message-Authenticator over a RADIUS/1.1 connection.</t>
        <t indent="0" pn="section-5.2-5">A proxy may receive an Access-Request packet over a RADIUS/1.1
        connection and then forward that packet over a RADIUS/UDP or a
        RADIUS/TCP connection.  In that situation, the proxy
        <bcp14>SHOULD</bcp14> add a Message-Authenticator attribute to every
        Access-Request packet that is sent over an insecure transport
        protocol.</t>
        <t indent="0" pn="section-5.2-6">The original text in <xref section="3.3" sectionFormat="comma" target="RFC3579" format="default" derivedLink="https://rfc-editor.org/rfc/rfc3579#section-3.3" derivedContent="RFC3579"/>, Note 1 required that the
        Message-Authenticator attribute be present for certain Access-Request
        packets.  It also required the use of the Message-Authenticator when
        the Access-Request packet contained an EAP-Message attribute.
        Experience has shown that some RADIUS clients never use the
        Message-Authenticator, even for the situations where its use is
        suggested.</t>
        <t indent="0" pn="section-5.2-7">When the Message-Authenticator attribute is missing from Access-
        Request packets, it is often possible to trivially forge or replay
        those packets.  As such, it is <bcp14>RECOMMENDED</bcp14> that RADIUS
        clients always include Message-Authenticator in Access-Request packets
        when using UDP or TCP transport.  As the scope of this document is
        limited to defining RADIUS/1.1, we cannot mandate that behavior here.
        Instead, we can note that there are no known negatives to this
        behavior, and there are definite positives, such as increased
        security.</t>
        <t indent="0" pn="section-5.2-8">Further issues related to Message-Authenticator are discussed in
	<xref target="I-D.ietf-radext-deprecating-radius" format="default" sectionFormat="of" derivedContent="DEPRECATE-RADIUS"/>.</t>
      </section>
      <section anchor="message-authentication-code" numbered="true" removeInRFC="false" toc="include" pn="section-5.3">
        <name slugifiedName="name-message-authentication-code">Message-Authentication-Code</name>
        <t indent="0" pn="section-5.3-1">Similarly, the Message-Authentication-Code attribute defined in
        <xref section="3.3" sectionFormat="comma" target="RFC6218" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6218#section-3.3" derivedContent="RFC6218"/>
          <bcp14>MUST NOT</bcp14> be sent over a RADIUS/1.1 connection.  If it
        is received in a packet, it <bcp14>MUST</bcp14> be treated as an "invalid
        attribute" as defined in <xref section="2.8" sectionFormat="comma" target="RFC6929" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6929#section-2.8" derivedContent="RFC6929"/>.</t>
        <t indent="0" pn="section-5.3-2">As the Message-Authentication-Code attribute is no longer used in
        RADIUS/1.1, the related MAC-Randomizer attribute (<xref section="3.2" sectionFormat="comma" target="RFC6218" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6218#section-3.2" derivedContent="RFC6218"/>) <bcp14>MUST NOT</bcp14> be
        sent over a RADIUS/1.1 connection.  If it is received in a packet, it
        <bcp14>MUST</bcp14> be treated as an "invalid attribute" as defined in
        <xref section="2.8" sectionFormat="comma" target="RFC6929" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6929#section-2.8" derivedContent="RFC6929"/>.</t>
      </section>
      <section anchor="chap-ms-chap-etc" numbered="true" removeInRFC="false" toc="include" pn="section-5.4">
        <name slugifiedName="name-chap-ms-chap-and-similar-at">CHAP, MS-CHAP, and Similar Attributes</name>
        <t indent="0" pn="section-5.4-1">While some attributes such as CHAP-Password depend on
        insecure cryptographic primitives such as MD5, these attributes are
        treated as opaque blobs when sent between a RADIUS client and server.
        The contents of the attributes are not obfuscated, and they do not
        depend on the RADIUS shared secret.  As a result, these attributes are
        unchanged in RADIUS/1.1.</t>
        <t indent="0" pn="section-5.4-2">Similarly, MS-CHAP depends on MD4, and RADIUS/1.1 does not change
        the definition of any MS-CHAP attributes.  However, MS-CHAP has been
        broken for decades, as noted in <xref target="ASLEAP" format="default" sectionFormat="of" derivedContent="ASLEAP"/>.  The only
        appropriate use case for MS-CHAP is when it is protected by a secure
        transport such as RADIUS/TLS or RADIUS/DTLS, or when it is used for
        "inner tunnel" authentication methods as with the Protected Extensible
        Authentication Protocol (PEAP) or TTLS.</t>
        <t indent="0" pn="section-5.4-3">A server implementing this specification can proxy and
        authenticate CHAP, MS-CHAP, etc. without any issue.  The RADIUS/1.1
        protocol changes how RADIUS packets are authenticated and how "secret"
        data is obfuscated inside of a RADIUS packet.  It does not change any
        authentication method that is transported inside of RADIUS.</t>
      </section>
      <section anchor="original-packet-code" numbered="true" removeInRFC="false" toc="include" pn="section-5.5">
        <name slugifiedName="name-original-packet-code">Original-Packet-Code</name>
        <t indent="0" pn="section-5.5-1"><xref section="4" sectionFormat="comma" target="RFC7930" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7930#section-4" derivedContent="RFC7930"/> defines
        an Original-Packet-Code attribute.  This attribute is needed because
        otherwise it is impossible to correlate the Protocol-Error response
        packet with a particular request packet.  The definition in <xref section="4" sectionFormat="comma" target="RFC7930" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7930#section-4" derivedContent="RFC7930"/> describes the
        reasoning behind this need:</t>
        <blockquote pn="section-5.5-2">The Original-Packet-Code contains the code from the
        request that generated the protocol error so that clients can
        disambiguate requests with different codes and the same ID.</blockquote>
        <t indent="0" pn="section-5.5-3">This attribute is no longer needed in RADIUS/1.1.  The Identifier
        field is unused, so it impossible for two requests to have the "same"
        ID.  Instead, the Token field permits clients and servers to correlate
        requests and responses, independent of the Code value being used.</t>
        <t indent="0" pn="section-5.5-4">Therefore, the Original-Packet-Code attribute (<xref section="4" sectionFormat="comma" target="RFC7930" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7930#section-4" derivedContent="RFC7930"/>) <bcp14>MUST NOT</bcp14> be
        sent over a RADIUS/1.1 connection.  If it is received in a packet, it
        <bcp14>MUST</bcp14> be treated as an "invalid attribute" as defined in
        <xref section="2.8" sectionFormat="comma" target="RFC6929" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6929#section-2.8" derivedContent="RFC6929"/>.</t>
      </section>
    </section>
    <section anchor="other-considerations-when-using-alpn" numbered="true" removeInRFC="false" toc="include" pn="section-6">
      <name slugifiedName="name-other-considerations-when-u">Other Considerations When Using ALPN</name>
      <t indent="0" pn="section-6-1">Most of the differences between RADIUS and RADIUS/1.1 are in the
      packet header and attribute handling, as discussed above.  The remaining
      issues are a small set of unrelated topics, and are discussed here.</t>
      <section anchor="protocol-error" numbered="true" removeInRFC="false" toc="include" pn="section-6.1">
        <name slugifiedName="name-protocol-error">Protocol-Error</name>
        <t indent="0" pn="section-6.1-1">There are a number of situations where a RADIUS server is unable to
        respond to a request.  One situation is where the server depends on a
        database, and the database is down.  While arguably the server should
        close all incoming connections when it is unable to do anything, this
        action is not always effective.  A client may aggressively try to open
        new connections or send packets to an unconnected UDP destination
        where the server is not listening.  Another situation where the server
        is unable to respond is when the server is proxying packets, and the
        outbound connections are either full or failed.</t>
        <t indent="0" pn="section-6.1-2">In all RADIUS specifications prior to this one, there is no way
        for the server to send a client the positive signal that it received a
        request but is unable to send a response.  Instead, the server
        usually just discards the request, which to the client is
        indistinguishable from the situation where the server is down.  This
        failure case is made worse by the fact that perhaps some proxied
        packets succeed while others fail.  The client can only conclude then
        that the server is randomly dropping packets and is unreliable.</t>
        <t indent="0" pn="section-6.1-3">It would be very useful for servers to signal to clients that they
        have received a request but are unable to process it.  This
        specification uses the Protocol-Error packet (<xref section="4" sectionFormat="comma" target="RFC7930" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7930#section-4" derivedContent="RFC7930"/>) as that signal.  The use of
        Protocol-Error allows for both hop-by-hop signaling in the case of
        proxy forwarding errors, and also for end-to-end signaling of server
        to client.  Such signaling should greatly improve the robustness of
        the RADIUS protocol.</t>
        <t indent="0" pn="section-6.1-4">When a RADIUS/1.1 server determines that it is unable to process an
        Access-Request or Accounting-Request packet, it <bcp14>MUST</bcp14>
        respond with a Protocol-Error packet containing an Error-Cause
        attribute.  A proxy that cannot forward the packet
        <bcp14>MUST</bcp14> respond with either 502 (Request Not Routable
        (Proxy)) or 505 (Other Proxy Processing Error).  This requirement is
        to help distinguish failures in the proxy chain from failures at the
        final (i.e., home) server.</t>
        <t indent="0" pn="section-6.1-5">For a home server, if none of the Error-Cause values match the
        reason for the failure, then the value 506 (Resources Unavailable)
        <bcp14>MUST</bcp14> be used.</t>
        <t indent="0" pn="section-6.1-6">When a RADIUS proxy receives a Protocol-Error reply, it
        <bcp14>MUST</bcp14> examine the value of the Error-Cause attribute.
        If there is no Error-Cause attribute, or if its value is something other
        than 502 (Request Not Routable (Proxy)), 505 (Other Proxy Processing
        Error), or 506 (Resources Unavailable), then the proxy <bcp14>MUST</bcp14>
        return the Protocol-Error response packet to the client and include
        the Error-Cause attribute from the response it received.  This process
        allows for full "end-to-end" signaling of servers to clients.</t>
        <t indent="0" pn="section-6.1-7">In all situations other than those outlined in the preceding paragraph, a
        client that receives a Protocol-Error reply <bcp14>MUST</bcp14>
        reprocess the original outgoing packet through the client forwarding
        algorithm.  This requirement includes both clients that originate
        RADIUS traffic and proxies that see an Error-Cause attribute of 502
        (Request Not Routable (Proxy)) or 505 (Other Proxy Processing
        Error).</t>
        <t indent="0" pn="section-6.1-8">The expected result of this processing is that the client forwards
        the packet to a different server.  Clients <bcp14>MUST NOT</bcp14>
        forward the packet over the same connection and <bcp14>SHOULD NOT</bcp14> forward it over a different connection to the same
        server.</t>
        <t indent="0" pn="section-6.1-9">This process may continue over multiple connections and multiple
        servers, until the client either times out the request or fails to
        find a forwarding destination for the packet.  A proxy that is unable
        to forward a packet <bcp14>MUST</bcp14> reply with a Protocol-Error
        packet containing an Error-Cause, as defined above.  A client that
        originates packets <bcp14>MUST</bcp14> treat such a request as if it
        had received no response.</t>
        <t indent="0" pn="section-6.1-10">This behavior is intended to improve the stability of the RADIUS
        protocol by addressing issues first raised in <xref section="2.8" sectionFormat="comma" target="RFC3539" format="default" derivedLink="https://rfc-editor.org/rfc/rfc3539#section-2.8" derivedContent="RFC3539"/>.</t>
      </section>
      <section anchor="status-server" numbered="true" removeInRFC="false" toc="include" pn="section-6.2">
        <name slugifiedName="name-status-server">Status-Server</name>
        <t indent="0" pn="section-6.2-1"><xref section="2.6.5" sectionFormat="comma" target="RFC6613" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6613#section-2.6.5" derivedContent="RFC6613"/>, and
        by extension <xref target="RFC7360" format="default" sectionFormat="of" derivedContent="RFC7360"/>, suggest that the Identifier
        value zero (0) be reserved for use with Status-Server as an
        application-layer watchdog.  This practice <bcp14>MUST NOT</bcp14> be
        used for RADIUS/1.1, as the Identifier field is not used in this
        transport profile.</t>
        <t indent="0" pn="section-6.2-2">The rationale for reserving one value of the Identifier field was
        the limited number of Identifiers available (256) and the overlap in
        Identifiers between Access-Request packets and Status-Server packets.
        If all 256 Identifier values had been used to send Access-Request
        packets, then there would be no Identifier value available for sending
        a Status-Server packet.</t>
        <t indent="0" pn="section-6.2-3">In contrast, the Token field allows for 2<sup>32</sup> outstanding
        packets on one RADIUS/1.1 connection.  If there is a need to send a
        Status-Server packet, it is nearly always possible to allocate a new
        value for the Token field.  If instead there are 2<sup>32</sup>
        outstanding packets for one connection, then it is likely that
        something has gone catastrophically wrong.  In that case, the safest
        way forward is likely to just close the connection.</t>
      </section>
      <section anchor="proxies" numbered="true" removeInRFC="false" toc="include" pn="section-6.3">
        <name slugifiedName="name-proxies">Proxies</name>
        <t indent="0" pn="section-6.3-1">A RADIUS proxy normally decodes and then re-encodes all attributes,
        including obfuscated ones.  A RADIUS proxy will not generally rewrite
        the content of the attributes it proxies (unless site-local policy
        requires such a rewrite).  While some attributes may be modified due
        to administrative or policy rules on the proxy, the proxy will
        generally not rewrite the contents of attributes such as
        User-Password, Tunnel-Password, CHAP-Password, MS-CHAP-Password,
        MS-MPPE keys, etc.  Therefore, all attributes are transported through a
        RADIUS/1.1 connection without changing their values or contents.</t>
        <t indent="0" pn="section-6.3-2">A proxy may negotiate RADIUS/1.1 (or not) with a particular client
        or clients, and it may negotiate RADIUS/1.1 (or not) with a server or
        servers it connects to, in any combination.  As a result, this
        specification is fully compatible with all past, present, and future
        RADIUS attributes.</t>
      </section>
    </section>
    <section anchor="other-radius-considerations" numbered="true" removeInRFC="false" toc="include" pn="section-7">
      <name slugifiedName="name-other-radius-considerations">Other RADIUS Considerations</name>
      <t indent="0" pn="section-7-1">This section discusses issues in RADIUS that need to be addressed in
      order to support ALPN, but which aren't directly part of the RADIUS/1.1
      protocol.</t>
      <section anchor="crypto-agility" numbered="true" removeInRFC="false" toc="include" pn="section-7.1">
        <name slugifiedName="name-crypto-agility">Crypto-Agility</name>
        <t indent="0" pn="section-7.1-1">The crypto-agility requirements of <xref target="RFC6421" format="default" sectionFormat="of" derivedContent="RFC6421"/> are
        addressed in <xref section="C" sectionFormat="comma" target="RFC6614" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6614#appendix-C" derivedContent="RFC6614"/> and in <xref section="10.1" sectionFormat="comma" target="RFC7360" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7360#section-10.1" derivedContent="RFC7360"/>.  This specification makes no changes or additions
        to those specifications.  The use of ALPN and the removal of MD5 has
        no impact on the security or privacy of the protocol.</t>
        <t indent="0" pn="section-7.1-2">RADIUS/TLS has been widely deployed in at least eduroam (<xref target="RFC7593" format="default" sectionFormat="of" derivedContent="RFC7593"/> and <xref target="EDUROAM" format="default" sectionFormat="of" derivedContent="EDUROAM"/>) and in OpenRoaming
        <xref target="OPENROAMING" format="default" sectionFormat="of" derivedContent="OPENROAMING"/>.  RADIUS/DTLS has seen less adoption, but
        it is known to be supported in many RADIUS clients and servers.</t>
        <t indent="0" pn="section-7.1-3">It is <bcp14>RECOMMENDED</bcp14> that all implementations of
        historic RADIUS/TLS be updated to support this specification.  Where a
        system already implements RADIUS over TLS, the additional effort to
        implement this specification is minimal.  Once implementations support
        it, administrators can gain the benefit of it with little or no
        configuration changes.  This specification is backwards compatible
        with <xref target="RFC6614" format="default" sectionFormat="of" derivedContent="RFC6614"/> and <xref target="RFC7360" format="default" sectionFormat="of" derivedContent="RFC7360"/>.  It is
        only potentially subject to down-bidding attacks if implementations do
        not enforce ALPN correctly on session resumption.</t>
        <t indent="0" pn="section-7.1-4">All crypto-agility needed or used by this specification is
        implemented in TLS.  This specification also removes all cryptographic
        primitives from the application-layer protocol (RADIUS) being
        transported by TLS.  As discussed in the following section, this
        specification also bans the development of all new cryptographic or
        crypto-agility methods in the RADIUS protocol.</t>
      </section>
      <section anchor="error-cause-attribute" numbered="true" removeInRFC="false" toc="include" pn="section-7.2">
        <name slugifiedName="name-error-cause-attribute">Error-Cause Attribute</name>
        <t indent="0" pn="section-7.2-1">The Error-Cause attribute is defined in <xref target="RFC5176" format="default" sectionFormat="of" derivedContent="RFC5176"/>. The "Table of Attributes" section given in <xref section="3.6" sectionFormat="comma" target="RFC5176" format="default" derivedLink="https://rfc-editor.org/rfc/rfc5176#section-3.6" derivedContent="RFC5176"/> permits that
        attribute to appear in CoA-NAK and Disconnect-NAK packets.  As no
        other packet type is listed, the implication is that the Error-Cause
        attribute cannot appear in any other packet.  <xref target="RFC7930" format="default" sectionFormat="of" derivedContent="RFC7930"/>
        also permits Error-Cause to appear in Protocol-Error packets.</t>
        <t indent="0" pn="section-7.2-2">However, <xref section="2.6.1" sectionFormat="comma" target="RFC5080" format="default" derivedLink="https://rfc-editor.org/rfc/rfc5080#section-2.6.1" derivedContent="RFC5080"/> suggests that Error-Cause may appear in
        Access-Reject packets.  No explanation is given for this change from
        <xref target="RFC5176" format="default" sectionFormat="of" derivedContent="RFC5176"/>.  There is not even an acknowledgment that
        this suggestion is a change from any previous specification.  We
        correct that issue here.</t>
        <t indent="0" pn="section-7.2-3">This specification updates <xref target="RFC5176" format="default" sectionFormat="of" derivedContent="RFC5176"/> to allow the
        Error-Cause attribute to appear in Access-Reject packets.  It is
        <bcp14>RECOMMENDED</bcp14> that implementations include the
        Error-Cause attribute in Access-Reject packets where appropriate.</t>
        <t indent="0" pn="section-7.2-4">That is, the reason for sending the Access-Reject packet (or the
        Protocol-Error packet) may match a defined Error-Cause value.  In that
        case, it is useful for implementations to send an Error-Cause
        attribute with that value.  This behavior can help RADIUS system
        administrators debug issues in complex proxy chains.</t>
        <t indent="0" pn="section-7.2-5">For example, a proxy may normally forward Access-Request packets
        that contain EAP-Message attributes.  The proxy can determine if the
        contents of the EAP-Message are invalid.  One example of an invalid
        EAP-Message is where the first octet has value larger than 4.  In that
        case, there may be no benefit to forwarding the packet, as the home
        server will reject it.  It may then be possible for the proxy (with
        the knowledge and consent of involved parties) to immediately reply
        with an Access-Reject containing an Error-Cause attribute with value
        202 (Invalid EAP Packet (Ignored)).</t>
        <t indent="0" pn="section-7.2-6">Another possibility is that a proxy is configured to forward
        packets for a particular realm, but it has determined that there are
        no available connections to the next hop for that realm.  In that
        case, it may be possible for the proxy (again, with the knowledge and
        consent of involved parties) to reply with an Access-Reject containing
        an Error-Cause attribute with value 502 (Request Not Routable
        (Proxy)).</t>
        <t indent="0" pn="section-7.2-7">These examples are given only for illustrative and informational
        purposes.  While it is useful to return an informative value for the
        Error-Cause attribute, proxies can only modify the traffic they
        forward with the explicit knowledge and consent of all involved
        parties.</t>
      </section>
      <section anchor="future-standards" numbered="true" removeInRFC="false" toc="include" pn="section-7.3">
        <name slugifiedName="name-future-standards">Future Standards</name>
        <t indent="0" pn="section-7.3-1">Future work may define new attributes, packet types, etc.  It is
        important to be able to do such work without requiring that every new
        standard mention RADIUS/1.1 explicitly.  This document defines
        RADIUS/1.1 as having functional overlap with legacy RADIUS: the
        protocol state machine is unchanged, the packet header Code field is
        unchanged, and the attribute format is largely unchanged.  As a
        result, any new packet Code or attribute defined for RADIUS is
        explicitly compatible with RADIUS/1.1; the field contents and meanings
        are identical.  The only difference between the two protocols is that
        obfuscated attributes in RADIUS are not obfuscated in RADIUS/1.1, and
        this document defines how that mapping is done.</t>
        <t indent="0" pn="section-7.3-2">Any future specification only needs to mention RADIUS/1.1 if it
        adds fields to the RADIUS/1.1 packet header.  Otherwise, transport
        considerations for RADIUS/1.1 are identical to RADIUS over (D)TLS.</t>
        <t indent="0" pn="section-7.3-3">We reiterate that this specification defines a new transport
        profile for RADIUS.  It does not define a completely new protocol.
        Any future specification that defines a new attribute
        <bcp14>MUST</bcp14> define it for RADIUS/UDP first, and afterwards those
        definitions can be applied to this transport profile.</t>
        <t indent="0" pn="section-7.3-4">New specifications <bcp14>MAY</bcp14> define new attributes that
        use the obfuscation methods for User-Password as defined in <xref section="5.2" sectionFormat="comma" target="RFC2865" format="default" derivedLink="https://rfc-editor.org/rfc/rfc2865#section-5.2" derivedContent="RFC2865"/> or for
        Tunnel-Password as defined in <xref section="3.5" sectionFormat="comma" target="RFC2868" format="default" derivedLink="https://rfc-editor.org/rfc/rfc2868#section-3.5" derivedContent="RFC2868"/>.  There is no need for those
        specifications to describe how those new attributes are transported in
        RADIUS/1.1.  Since RADIUS/1.1 does not use MD5, any obfuscated
        attributes will by definition be transported as their underlying data
        type "text" (<xref section="3.4" sectionFormat="comma" target="RFC8044" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8044#section-3.4" derivedContent="RFC8044"/>) or "string" (<xref section="3.5" sectionFormat="comma" target="RFC8044" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8044#section-3.5" derivedContent="RFC8044"/>).</t>
        <t indent="0" pn="section-7.3-5">New RADIUS specifications <bcp14>MUST NOT</bcp14> define attributes
        that can only be transported via RADIUS over TLS.  The RADIUS
        protocol has no way to signal the security requirements of individual
        attributes.  Any existing implementation will handle these new
        attributes as "invalid attributes" (<xref section="2.8" sectionFormat="comma" target="RFC6929" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6929#section-2.8" derivedContent="RFC6929"/>) and could forward them over
        an insecure link.  As RADIUS security and signaling is hop-by-hop,
        there is no way for a RADIUS client or server to even know if such
        forwarding is taking place.  For these reasons and more, it is
        therefore inappropriate to define new attributes that are only secure
        if they use a secure transport layer.</t>
        <t indent="0" pn="section-7.3-6">The result is that specifications do not need to mention this
        transport profile or make any special provisions for dealing with it.
        This specification defines how RADIUS packet encoding, decoding,
        authentication, and verification are performed when using RADIUS/1.1.
        So long as any future specification uses the existing schemes for
        encoding, decoding, etc., that are defined for RADIUS, no additional
        text in future documents is necessary in order to be compatible with
        RADIUS/1.1.</t>
        <t indent="0" pn="section-7.3-7">We note that it is theoretically possible for future standards to
        define new cryptographic primitives for use with RADIUS/UDP.  In that
        case, those documents would likely have to describe how to transport
        that data in RADIUS/1.1.  We believe that such standards are unlikely
        to be published, as other efforts in the RADEXT Working Group are
        forbidding such updates to RADIUS.</t>
      </section>
    </section>
    <section anchor="privacy-considerations" numbered="true" removeInRFC="false" toc="include" pn="section-8">
      <name slugifiedName="name-privacy-considerations">Privacy Considerations</name>
      <t indent="0" pn="section-8-1">This specification requires secure transport for RADIUS.
      RADIUS/1.1 has all of the privacy benefits of RADIUS/TLS <xref target="RFC6614" format="default" sectionFormat="of" derivedContent="RFC6614"/> and RADIUS/DTLS <xref target="RFC7360" format="default" sectionFormat="of" derivedContent="RFC7360"/> and none of
      the privacy or security issues of RADIUS/UDP <xref target="RFC2865" format="default" sectionFormat="of" derivedContent="RFC2865"/> or
      RADIUS/TCP <xref target="RFC6613" format="default" sectionFormat="of" derivedContent="RFC6613"/>.</t>
    </section>
    <section anchor="security-considerations" numbered="true" removeInRFC="false" toc="include" pn="section-9">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-9-1">The primary focus of this document is addressing security
      considerations for RADIUS.  This specification relies on TLS and
      associated ALPN for much of its security.  We refer the
      reader to <xref target="RFC8446" format="default" sectionFormat="of" derivedContent="RFC8446"/> and <xref target="RFC7360" format="default" sectionFormat="of" derivedContent="RFC7360"/> for
      discussions of the security of those protocols.  The discussion in this
      section is limited to issues unique to this specification.</t>
      <t indent="0" pn="section-9-2">Implementations should rely on the underlying TLS library to perform
      ALPN version negotiation.  That is, implementations should supply a list
      of permitted ALPN strings to the TLS library, and let it return the
      negotiated value.</t>
      <t indent="0" pn="section-9-3">There are few other opportunities for security issues.  If an
      implementation gets ALPN wrong, then the wrong application
      data will be transported inside of TLS.  While RADIUS/1.0 and RADIUS/1.1
      share similar packet formats, the protocols are not mutually
      compatible.</t>
      <t indent="0" pn="section-9-4">When an implementation receives the packets for a RADIUS version
      that is not supported by this connection, it will not be able to
      process the packets.  Implementations can produce log messages
      indicating that the application-layer data is unexpected and close the
      connection. In addition, the implementations that see the incorrect
      application data already have full access to all secrets, passwords,
      etc. being transported, so any protocol differences do not result in any
      security issues.  Since all of the application data is protected by TLS,
      there is no possibility for an attacker to obtain any extra data as a
      result of this misconfiguration.</t>
      <t indent="0" pn="section-9-5">RADIUS/1.0 requests sent over a RADIUS/1.1 connection may be accepted
      by the RADIUS/1.1 server, as the server will ignore the ID field and
      try to use portions of the Request Authenticator as a Token.  However,
      the reply from the RADIUS/1.1 server will fail the Response
      Authenticator validation by the RADIUS/1.0 client.  Therefore, the responses will
      be dropped.  The client will generally log these failures, and
      an administrator will address the issue.</t>
      <t indent="0" pn="section-9-6">RADIUS/1.1 requests sent over a RADIUS/1.0 connection will generally
      be discarded by the RADIUS/1.0 server, as the packets will fail the
      Request Authenticator checks.  That is, all request packets such as
      Accounting-Request, CoA-Request, and Disconnect-Request will be
      discarded by the server.  For Access-Request packets containing
      EAP-Message, the packets will be missing Message-Authenticator and will
      therefore be discarded by the server.  Other Access-Request packets that
      contain obfuscated attributes such as User-Password will have those
      attributes decoded to nonsense, thus resulting in Access-Reject
      responses.</t>
      <t indent="0" pn="section-9-7">RADIUS/1.1 Access-Request packets containing non-obfuscated
      attributes such as CHAP-Password may be accepted by a RADIUS/1.0 server,
      but the response will contain a Response Authenticator (i.e., MD5 hash)
      and not a Token that matches the Token in the request.  A similar
      analysis applies for Access-Request packets containing Service-Type =
      Authorize-Only.</t>
      <t indent="0" pn="section-9-8">In conclusion, any mismatch of versions between client and server
      will result in most request packets being discarded by the server and
      all response packets being discarded by the client.  Therefore, the two protocols
      are incompatible and safe from misconfigurations or erroneous
      implementations.</t>
    </section>
    <section anchor="iana-considerations" numbered="true" removeInRFC="false" toc="include" pn="section-10">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-10-1">IANA has updated the "TLS Application-Layer Protocol
      Negotiation (ALPN) Protocol IDs" registry with two new entries:</t>
      <dl newline="false" spacing="compact" indent="3" pn="section-10-2">
        <dt pn="section-10-2.1">Protocol:</dt>
        <dd pn="section-10-2.2">RADIUS/1.0</dd>
        <dt pn="section-10-2.3">Identification Sequence:</dt>
        <dd pn="section-10-2.4">0x72 0x61 0x64 0x69 0x75 0x73 0x2f 0x31 0x2e 0x30 ("radius/1.0")</dd>
        <dt pn="section-10-2.5">Reference:</dt>
        <dd pn="section-10-2.6">RFC 9765</dd>
      </dl>
      <dl newline="false" spacing="compact" indent="3" pn="section-10-3">
        <dt pn="section-10-3.1">Protocol:</dt>
        <dd pn="section-10-3.2">RADIUS/1.1</dd>
        <dt pn="section-10-3.3">Identification Sequence:</dt>
        <dd pn="section-10-3.4">0x72 0x61 0x64 0x69 0x75 0x73 0x2f 0x31 0x2e 0x31 ("radius/1.1")</dd>
        <dt pn="section-10-3.5">Reference:</dt>
        <dd pn="section-10-3.6">RFC 9765</dd>
      </dl>
    </section>
  </middle>
  <back>
    <displayreference target="I-D.ietf-radext-deprecating-radius" to="DEPRECATE-RADIUS"/>
    <references pn="section-11">
      <name slugifiedName="name-references">References</name>
      <references anchor="sec-normative-references" pn="section-11.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t indent="0">In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC2865" target="https://www.rfc-editor.org/info/rfc2865" quoteTitle="true" derivedAnchor="RFC2865">
          <front>
            <title>Remote Authentication Dial In User Service (RADIUS)</title>
            <author fullname="C. Rigney" initials="C." surname="Rigney"/>
            <author fullname="S. Willens" initials="S." surname="Willens"/>
            <author fullname="A. Rubens" initials="A." surname="Rubens"/>
            <author fullname="W. Simpson" initials="W." surname="Simpson"/>
            <date month="June" year="2000"/>
            <abstract>
              <t indent="0">This document describes a protocol for carrying authentication, authorization, and configuration information between a Network Access Server which desires to authenticate its links and a shared Authentication Server. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2865"/>
          <seriesInfo name="DOI" value="10.17487/RFC2865"/>
        </reference>
        <reference anchor="RFC6421" target="https://www.rfc-editor.org/info/rfc6421" quoteTitle="true" derivedAnchor="RFC6421">
          <front>
            <title>Crypto-Agility Requirements for Remote Authentication Dial-In User Service (RADIUS)</title>
            <author fullname="D. Nelson" initials="D." role="editor" surname="Nelson"/>
            <date month="November" year="2011"/>
            <abstract>
              <t indent="0">This memo describes the requirements for a crypto-agility solution for Remote Authentication Dial-In User Service (RADIUS). This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6421"/>
          <seriesInfo name="DOI" value="10.17487/RFC6421"/>
        </reference>
        <reference anchor="RFC6614" target="https://www.rfc-editor.org/info/rfc6614" quoteTitle="true" derivedAnchor="RFC6614">
          <front>
            <title>Transport Layer Security (TLS) Encryption for RADIUS</title>
            <author fullname="S. Winter" initials="S." surname="Winter"/>
            <author fullname="M. McCauley" initials="M." surname="McCauley"/>
            <author fullname="S. Venaas" initials="S." surname="Venaas"/>
            <author fullname="K. Wierenga" initials="K." surname="Wierenga"/>
            <date month="May" year="2012"/>
            <abstract>
              <t indent="0">This document specifies a transport profile for RADIUS using Transport Layer Security (TLS) over TCP as the transport protocol. This enables dynamic trust relationships between RADIUS servers. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6614"/>
          <seriesInfo name="DOI" value="10.17487/RFC6614"/>
        </reference>
        <reference anchor="RFC6929" target="https://www.rfc-editor.org/info/rfc6929" quoteTitle="true" derivedAnchor="RFC6929">
          <front>
            <title>Remote Authentication Dial In User Service (RADIUS) Protocol Extensions</title>
            <author fullname="A. DeKok" initials="A." surname="DeKok"/>
            <author fullname="A. Lior" initials="A." surname="Lior"/>
            <date month="April" year="2013"/>
            <abstract>
              <t indent="0">The Remote Authentication Dial-In User Service (RADIUS) protocol is nearing exhaustion of its current 8-bit Attribute Type space. In addition, experience shows a growing need for complex grouping, along with attributes that can carry more than 253 octets of data. This document defines changes to RADIUS that address all of the above problems.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6929"/>
          <seriesInfo name="DOI" value="10.17487/RFC6929"/>
        </reference>
        <reference anchor="RFC7301" target="https://www.rfc-editor.org/info/rfc7301" quoteTitle="true" derivedAnchor="RFC7301">
          <front>
            <title>Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension</title>
            <author fullname="S. Friedl" initials="S." surname="Friedl"/>
            <author fullname="A. Popov" initials="A." surname="Popov"/>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="E. Stephan" initials="E." surname="Stephan"/>
            <date month="July" year="2014"/>
            <abstract>
              <t indent="0">This document describes a Transport Layer Security (TLS) extension for application-layer protocol negotiation within the TLS handshake. For instances in which multiple application protocols are supported on the same TCP or UDP port, this extension allows the application layer to negotiate which protocol will be used within the TLS connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7301"/>
          <seriesInfo name="DOI" value="10.17487/RFC7301"/>
        </reference>
        <reference anchor="RFC7360" target="https://www.rfc-editor.org/info/rfc7360" quoteTitle="true" derivedAnchor="RFC7360">
          <front>
            <title>Datagram Transport Layer Security (DTLS) as a Transport Layer for RADIUS</title>
            <author fullname="A. DeKok" initials="A." surname="DeKok"/>
            <date month="September" year="2014"/>
            <abstract>
              <t indent="0">The RADIUS protocol defined in RFC 2865 has limited support for authentication and encryption of RADIUS packets. The protocol transports data in the clear, although some parts of the packets can have obfuscated content. Packets may be replayed verbatim by an attacker, and client-server authentication is based on fixed shared secrets. This document specifies how the Datagram Transport Layer Security (DTLS) protocol may be used as a fix for these problems. It also describes how implementations of this proposal can coexist with current RADIUS systems.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7360"/>
          <seriesInfo name="DOI" value="10.17487/RFC7360"/>
        </reference>
        <reference anchor="RFC8044" target="https://www.rfc-editor.org/info/rfc8044" quoteTitle="true" derivedAnchor="RFC8044">
          <front>
            <title>Data Types in RADIUS</title>
            <author fullname="A. DeKok" initials="A." surname="DeKok"/>
            <date month="January" year="2017"/>
            <abstract>
              <t indent="0">RADIUS specifications have used data types for two decades without defining them as managed entities. During this time, RADIUS implementations have named the data types and have used them in attribute definitions. This document updates the specifications to better follow established practice. We do this by naming the data types defined in RFC 6158, which have been used since at least the publication of RFC 2865. We provide an IANA registry for the data types and update the "RADIUS Attribute Types" registry to include a Data Type field for each attribute. Finally, we recommend that authors of RADIUS specifications use these types in preference to existing practice. This document updates RFCs 2865, 3162, 4072, 6158, 6572, and 7268.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8044"/>
          <seriesInfo name="DOI" value="10.17487/RFC8044"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="RFC8174">
          <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 indent="0">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>
      </references>
      <references anchor="sec-informative-references" pn="section-11.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="ASLEAP" target="https://github.com/joswr1ght/asleap" quoteTitle="true" derivedAnchor="ASLEAP">
          <front>
            <title>asleap - recovers weak LEAP and PPTP passwords</title>
            <author/>
            <date month="November" year="2020"/>
          </front>
          <refcontent>commit 254acab</refcontent>
        </reference>
        <reference anchor="I-D.ietf-radext-deprecating-radius" target="https://datatracker.ietf.org/doc/html/draft-ietf-radext-deprecating-radius-05" quoteTitle="true" derivedAnchor="DEPRECATE-RADIUS">
          <front>
            <title>Deprecating Insecure Practices in RADIUS</title>
            <author fullname="Alan DeKok" initials="A." surname="DeKok">
              <organization showOnFrontPage="true">InkBridge Networks</organization>
            </author>
            <date day="26" month="November" year="2024"/>
            <abstract>
              <t indent="0">RADIUS crypto-agility was first mandated as future work by RFC 6421. The outcome of that work was the publication of RADIUS over TLS (RFC 6614) and RADIUS over DTLS (RFC 7360) as experimental documents. Those transport protocols have been in wide-spread use for many years in a wide range of networks. They have proven their utility as replacements for the previous UDP (RFC 2865) and TCP (RFC 6613) transports. With that knowledge, the continued use of insecure transports for RADIUS has serious and negative implications for privacy and security. The recent publication of the "BlastRADIUS" exploit has also shown that RADIUS security needs to be updated. It is no longer acceptable for RADIUS to rely on MD5 for security. It is no longer acceptable to send device or location information in clear text across the wider Internet. This document therefore deprecates many insecure practices in RADIUS, and mandates support for secure TLS-based transport layers. We also discuss related security issues with RADIUS, and give recommendations for practices which increase both security and privacy.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-radext-deprecating-radius-05"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="EDUROAM" target="https://eduroam.org" quoteTitle="true" derivedAnchor="EDUROAM">
          <front>
            <title>eduroam</title>
            <author initials="" surname="eduroam" fullname="eduroam">
              <organization showOnFrontPage="true"/>
            </author>
          </front>
        </reference>
        <reference anchor="FIPS-140-3" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.140-3.pdf" quoteTitle="true" derivedAnchor="FIPS-140-3">
          <front>
            <title>Security Requirements for Cryptographic Modules</title>
            <author>
              <organization abbrev="NIST" showOnFrontPage="true">National Institute of Standards and Technology</organization>
            </author>
            <date month="March" year="2019"/>
          </front>
          <seriesInfo name="NIST FIPS" value="140-3"/>
          <seriesInfo name="DOI" value="10.6028/NIST.FIPS.140-3"/>
        </reference>
        <reference anchor="OPENROAMING" target="https://wballiance.com/openroaming/" quoteTitle="true" derivedAnchor="OPENROAMING">
          <front>
            <title>OpenRoaming: One global Wi-Fi network</title>
            <author>
              <organization showOnFrontPage="true">Wireless Broadband Alliance</organization>
            </author>
          </front>
        </reference>
        <reference anchor="RFC1321" target="https://www.rfc-editor.org/info/rfc1321" quoteTitle="true" derivedAnchor="RFC1321">
          <front>
            <title>The MD5 Message-Digest Algorithm</title>
            <author fullname="R. Rivest" initials="R." surname="Rivest"/>
            <date month="April" year="1992"/>
            <abstract>
              <t indent="0">This document describes the MD5 message-digest algorithm. The algorithm takes as input a message of arbitrary length and produces as output a 128-bit "fingerprint" or "message digest" of the input. This memo provides information for the Internet community. It does not specify an Internet standard.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1321"/>
          <seriesInfo name="DOI" value="10.17487/RFC1321"/>
        </reference>
        <reference anchor="RFC2548" target="https://www.rfc-editor.org/info/rfc2548" quoteTitle="true" derivedAnchor="RFC2548">
          <front>
            <title>Microsoft Vendor-specific RADIUS Attributes</title>
            <author fullname="G. Zorn" initials="G." surname="Zorn"/>
            <date month="March" year="1999"/>
            <abstract>
              <t indent="0">This document describes the set of Microsoft vendor-specific RADIUS attributes. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2548"/>
          <seriesInfo name="DOI" value="10.17487/RFC2548"/>
        </reference>
        <reference anchor="RFC2866" target="https://www.rfc-editor.org/info/rfc2866" quoteTitle="true" derivedAnchor="RFC2866">
          <front>
            <title>RADIUS Accounting</title>
            <author fullname="C. Rigney" initials="C." surname="Rigney"/>
            <date month="June" year="2000"/>
            <abstract>
              <t indent="0">This document describes a protocol for carrying accounting information between a Network Access Server and a shared Accounting Server. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2866"/>
          <seriesInfo name="DOI" value="10.17487/RFC2866"/>
        </reference>
        <reference anchor="RFC2868" target="https://www.rfc-editor.org/info/rfc2868" quoteTitle="true" derivedAnchor="RFC2868">
          <front>
            <title>RADIUS Attributes for Tunnel Protocol Support</title>
            <author fullname="G. Zorn" initials="G." surname="Zorn"/>
            <author fullname="D. Leifer" initials="D." surname="Leifer"/>
            <author fullname="A. Rubens" initials="A." surname="Rubens"/>
            <author fullname="J. Shriver" initials="J." surname="Shriver"/>
            <author fullname="M. Holdrege" initials="M." surname="Holdrege"/>
            <author fullname="I. Goyret" initials="I." surname="Goyret"/>
            <date month="June" year="2000"/>
            <abstract>
              <t indent="0">This document defines a set of RADIUS (Remote Authentication Dial In User Service) attributes designed to support the provision of compulsory tunneling in dial-up networks. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2868"/>
          <seriesInfo name="DOI" value="10.17487/RFC2868"/>
        </reference>
        <reference anchor="RFC3539" target="https://www.rfc-editor.org/info/rfc3539" quoteTitle="true" derivedAnchor="RFC3539">
          <front>
            <title>Authentication, Authorization and Accounting (AAA) Transport Profile</title>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <author fullname="J. Wood" initials="J." surname="Wood"/>
            <date month="June" year="2003"/>
            <abstract>
              <t indent="0">This document discusses transport issues that arise within protocols for Authentication, Authorization and Accounting (AAA). It also provides recommendations on the use of transport by AAA protocols. This includes usage of standards-track RFCs as well as experimental proposals. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3539"/>
          <seriesInfo name="DOI" value="10.17487/RFC3539"/>
        </reference>
        <reference anchor="RFC3579" target="https://www.rfc-editor.org/info/rfc3579" quoteTitle="true" derivedAnchor="RFC3579">
          <front>
            <title>RADIUS (Remote Authentication Dial In User Service) Support For Extensible Authentication Protocol (EAP)</title>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <author fullname="P. Calhoun" initials="P." surname="Calhoun"/>
            <date month="September" year="2003"/>
            <abstract>
              <t indent="0">This document defines Remote Authentication Dial In User Service (RADIUS) support for the Extensible Authentication Protocol (EAP), an authentication framework which supports multiple authentication mechanisms. In the proposed scheme, the Network Access Server (NAS) forwards EAP packets to and from the RADIUS server, encapsulated within EAP-Message attributes. This has the advantage of allowing the NAS to support any EAP authentication method, without the need for method- specific code, which resides on the RADIUS server. While EAP was originally developed for use with PPP, it is now also in use with IEEE 802. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3579"/>
          <seriesInfo name="DOI" value="10.17487/RFC3579"/>
        </reference>
        <reference anchor="RFC5077" target="https://www.rfc-editor.org/info/rfc5077" quoteTitle="true" derivedAnchor="RFC5077">
          <front>
            <title>Transport Layer Security (TLS) Session Resumption without Server-Side State</title>
            <author fullname="J. Salowey" initials="J." surname="Salowey"/>
            <author fullname="H. Zhou" initials="H." surname="Zhou"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="January" year="2008"/>
            <abstract>
              <t indent="0">This document describes a mechanism that enables the Transport Layer Security (TLS) server to resume sessions and avoid keeping per-client session state. The TLS server encapsulates the session state into a ticket and forwards it to the client. The client can subsequently resume a session using the obtained ticket. This document obsoletes RFC 4507. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5077"/>
          <seriesInfo name="DOI" value="10.17487/RFC5077"/>
        </reference>
        <reference anchor="RFC5080" target="https://www.rfc-editor.org/info/rfc5080" quoteTitle="true" derivedAnchor="RFC5080">
          <front>
            <title>Common Remote Authentication Dial In User Service (RADIUS) Implementation Issues and Suggested Fixes</title>
            <author fullname="D. Nelson" initials="D." surname="Nelson"/>
            <author fullname="A. DeKok" initials="A." surname="DeKok"/>
            <date month="December" year="2007"/>
            <abstract>
              <t indent="0">This document describes common issues seen in Remote Authentication Dial In User Service (RADIUS) implementations and suggests some fixes. Where applicable, ambiguities and errors in previous RADIUS specifications are clarified. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5080"/>
          <seriesInfo name="DOI" value="10.17487/RFC5080"/>
        </reference>
        <reference anchor="RFC5176" target="https://www.rfc-editor.org/info/rfc5176" quoteTitle="true" derivedAnchor="RFC5176">
          <front>
            <title>Dynamic Authorization Extensions to Remote Authentication Dial In User Service (RADIUS)</title>
            <author fullname="M. Chiba" initials="M." surname="Chiba"/>
            <author fullname="G. Dommety" initials="G." surname="Dommety"/>
            <author fullname="M. Eklund" initials="M." surname="Eklund"/>
            <author fullname="D. Mitton" initials="D." surname="Mitton"/>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <date month="January" year="2008"/>
            <abstract>
              <t indent="0">This document describes a currently deployed extension to the Remote Authentication Dial In User Service (RADIUS) protocol, allowing dynamic changes to a user session, as implemented by network access server products. This includes support for disconnecting users and changing authorizations applicable to a user session. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5176"/>
          <seriesInfo name="DOI" value="10.17487/RFC5176"/>
        </reference>
        <reference anchor="RFC5281" target="https://www.rfc-editor.org/info/rfc5281" quoteTitle="true" derivedAnchor="RFC5281">
          <front>
            <title>Extensible Authentication Protocol Tunneled Transport Layer Security Authenticated Protocol Version 0 (EAP-TTLSv0)</title>
            <author fullname="P. Funk" initials="P." surname="Funk"/>
            <author fullname="S. Blake-Wilson" initials="S." surname="Blake-Wilson"/>
            <date month="August" year="2008"/>
            <abstract>
              <t indent="0">EAP-TTLS is an EAP (Extensible Authentication Protocol) method that encapsulates a TLS (Transport Layer Security) session, consisting of a handshake phase and a data phase. During the handshake phase, the server is authenticated to the client (or client and server are mutually authenticated) using standard TLS procedures, and keying material is generated in order to create a cryptographically secure tunnel for information exchange in the subsequent data phase. During the data phase, the client is authenticated to the server (or client and server are mutually authenticated) using an arbitrary authentication mechanism encapsulated within the secure tunnel. The encapsulated authentication mechanism may itself be EAP, or it may be another authentication protocol such as PAP, CHAP, MS-CHAP, or MS-CHAP-V2. Thus, EAP-TTLS allows legacy password-based authentication protocols to be used against existing authentication databases, while protecting the security of these legacy protocols against eavesdropping, man-in-the-middle, and other attacks. The data phase may also be used for additional, arbitrary data exchange. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5281"/>
          <seriesInfo name="DOI" value="10.17487/RFC5281"/>
        </reference>
        <reference anchor="RFC5931" target="https://www.rfc-editor.org/info/rfc5931" quoteTitle="true" derivedAnchor="RFC5931">
          <front>
            <title>Extensible Authentication Protocol (EAP) Authentication Using Only a Password</title>
            <author fullname="D. Harkins" initials="D." surname="Harkins"/>
            <author fullname="G. Zorn" initials="G." surname="Zorn"/>
            <date month="August" year="2010"/>
            <abstract>
              <t indent="0">This memo describes an Extensible Authentication Protocol (EAP) method, EAP-pwd, which uses a shared password for authentication. The password may be a low-entropy one and may be drawn from some set of possible passwords, like a dictionary, which is available to an attacker. The underlying key exchange is resistant to active attack, passive attack, and dictionary attack. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5931"/>
          <seriesInfo name="DOI" value="10.17487/RFC5931"/>
        </reference>
        <reference anchor="RFC6151" target="https://www.rfc-editor.org/info/rfc6151" quoteTitle="true" derivedAnchor="RFC6151">
          <front>
            <title>Updated Security Considerations for the MD5 Message-Digest and the HMAC-MD5 Algorithms</title>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <author fullname="L. Chen" initials="L." surname="Chen"/>
            <date month="March" year="2011"/>
            <abstract>
              <t indent="0">This document updates the security considerations for the MD5 message digest algorithm. It also updates the security considerations for HMAC-MD5. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6151"/>
          <seriesInfo name="DOI" value="10.17487/RFC6151"/>
        </reference>
        <reference anchor="RFC6218" target="https://www.rfc-editor.org/info/rfc6218" quoteTitle="true" derivedAnchor="RFC6218">
          <front>
            <title>Cisco Vendor-Specific RADIUS Attributes for the Delivery of Keying Material</title>
            <author fullname="G. Zorn" initials="G." surname="Zorn"/>
            <author fullname="T. Zhang" initials="T." surname="Zhang"/>
            <author fullname="J. Walker" initials="J." surname="Walker"/>
            <author fullname="J. Salowey" initials="J." surname="Salowey"/>
            <date month="April" year="2011"/>
            <abstract>
              <t indent="0">This document defines a set of vendor-specific RADIUS Attributes designed to allow both the secure transmission of cryptographic keying material and strong authentication of any RADIUS message. These attributes have been allocated from the Cisco vendor-specific space and have been implemented by multiple vendors. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6218"/>
          <seriesInfo name="DOI" value="10.17487/RFC6218"/>
        </reference>
        <reference anchor="RFC6613" target="https://www.rfc-editor.org/info/rfc6613" quoteTitle="true" derivedAnchor="RFC6613">
          <front>
            <title>RADIUS over TCP</title>
            <author fullname="A. DeKok" initials="A." surname="DeKok"/>
            <date month="May" year="2012"/>
            <abstract>
              <t indent="0">The Remote Authentication Dial-In User Server (RADIUS) protocol has, until now, required the User Datagram Protocol (UDP) as the underlying transport layer. This document defines RADIUS over the Transmission Control Protocol (RADIUS/TCP), in order to address handling issues related to RADIUS over Transport Layer Security (RADIUS/TLS). It permits TCP to be used as a transport protocol for RADIUS only when a transport layer such as TLS or IPsec provides confidentiality and security. This document defines an Experimental Protocol for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6613"/>
          <seriesInfo name="DOI" value="10.17487/RFC6613"/>
        </reference>
        <reference anchor="RFC7585" target="https://www.rfc-editor.org/info/rfc7585" quoteTitle="true" derivedAnchor="RFC7585">
          <front>
            <title>Dynamic Peer Discovery for RADIUS/TLS and RADIUS/DTLS Based on the Network Access Identifier (NAI)</title>
            <author fullname="S. Winter" initials="S." surname="Winter"/>
            <author fullname="M. McCauley" initials="M." surname="McCauley"/>
            <date month="October" year="2015"/>
            <abstract>
              <t indent="0">This document specifies a means to find authoritative RADIUS servers for a given realm. It is used in conjunction with either RADIUS over Transport Layer Security (RADIUS/TLS) or RADIUS over Datagram Transport Layer Security (RADIUS/DTLS).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7585"/>
          <seriesInfo name="DOI" value="10.17487/RFC7585"/>
        </reference>
        <reference anchor="RFC7593" target="https://www.rfc-editor.org/info/rfc7593" quoteTitle="true" derivedAnchor="RFC7593">
          <front>
            <title>The eduroam Architecture for Network Roaming</title>
            <author fullname="K. Wierenga" initials="K." surname="Wierenga"/>
            <author fullname="S. Winter" initials="S." surname="Winter"/>
            <author fullname="T. Wolniewicz" initials="T." surname="Wolniewicz"/>
            <date month="September" year="2015"/>
            <abstract>
              <t indent="0">This document describes the architecture of the eduroam service for federated (wireless) network access in academia. The combination of IEEE 802.1X, the Extensible Authentication Protocol (EAP), and RADIUS that is used in eduroam provides a secure, scalable, and deployable service for roaming network access. The successful deployment of eduroam over the last decade in the educational sector may serve as an example for other sectors, hence this document. In particular, the initial architectural choices and selection of standards are described, along with the changes that were prompted by operational experience.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7593"/>
          <seriesInfo name="DOI" value="10.17487/RFC7593"/>
        </reference>
        <reference anchor="RFC7930" target="https://www.rfc-editor.org/info/rfc7930" quoteTitle="true" derivedAnchor="RFC7930">
          <front>
            <title>Larger Packets for RADIUS over TCP</title>
            <author fullname="S. Hartman" initials="S." surname="Hartman"/>
            <date month="August" year="2016"/>
            <abstract>
              <t indent="0">The RADIUS-over-TLS experiment described in RFC 6614 has opened RADIUS to new use cases where the 4096-octet maximum size limit of a RADIUS packet proves problematic. This specification extends the RADIUS-over-TCP experiment (RFC 6613) to permit larger RADIUS packets. This specification compliments other ongoing work to permit fragmentation of RADIUS authorization information. This document registers a new RADIUS code, an action that required IESG approval.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7930"/>
          <seriesInfo name="DOI" value="10.17487/RFC7930"/>
        </reference>
        <reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8446" quoteTitle="true" derivedAnchor="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 indent="0">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 indent="0">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>
      </references>
    </references>
    <section anchor="acknowledgments" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.a">
      <name slugifiedName="name-acknowledgments">Acknowledgments</name>
      <t indent="0" pn="section-appendix.a-1">Thanks to <contact fullname="Bernard Aboba"/>, <contact fullname="Karri Huhtanen"/>, <contact fullname="Heikki Vatiainen"/>,
      <contact fullname="Alexander Clouter"/>, <contact fullname="Michael       Richardson"/>, <contact fullname="Hannes Tschofenig"/>, <contact fullname="Matthew Newton"/>, and <contact fullname="Josh Howlett"/> for
      reviews and feedback.</t>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.b">
      <name slugifiedName="name-authors-address">Author's Address</name>
      <author initials="A." surname="DeKok" fullname="Alan DeKok">
        <organization showOnFrontPage="true">FreeRADIUS</organization>
        <address>
          <email>aland@freeradius.org</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
