<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>

<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="exp" docName="draft-ietf-bfd-secure-sequence-numbers-27" number="9986" updates="" obsoletes="" ipr="trust200902" submissionType="IETF" consensus="true" tocInclude="true" tocDepth="3" symRefs="true" sortRefs="true" version="3" xml:lang="en">

  <front>
    <title abbrev="ISAAC Authentication">Meticulous Keyed ISAAC for
    Bidirectional Forwarding Detection (BFD) Optimized Authentication</title>
    <seriesInfo name="RFC" value="9986"/>
    <author fullname="Alan DeKok" initials="A." surname="DeKok">
      <organization>InkBridge Networks</organization>
      <address>
        <postal>
          <street>100 Centrepointe Drive #200</street>
          <city>Ottawa</city>
          <region>ON</region>
          <code>K2G 6B1</code>
          <country>Canada</country>
        </postal>
        <email>alan.dekok@inkbridge.io</email>
      </address>
    </author>
    <author fullname="Mahesh Jethanandani" initials="M." surname="Jethanandani">
      <organization>Arrcus</organization>
      <address>
        <email>mjethanandani@gmail.com</email>
      </address>
    </author>
    <author fullname="Sonal Agarwal" initials="S." surname="Agarwal">
      <organization>Arrcus, Inc.</organization>
      <address>
        <postal>
          <street>170 W. Tasman Drive</street>
          <city>San Jose</city>
          <region>CA</region>
          <code>95070</code>
          <country>United States of America</country>
        </postal>
        <email>sagarwal12@gmail.com</email>
      </address>
    </author>
    <author fullname="Ashesh Mishra" initials="A." surname="Mishra">
      <organization>Aalyria Technologies</organization>
      <address>
        <email>ashesh@aalyria.com</email>
      </address>
    </author>
    <author fullname="Jeffrey Haas" initials="J." surname="Haas">
      <organization>HPE</organization>
      <address>
        <email>jeffrey.haas@hpe.com</email>
      </address>
    </author>
    <date month="June" year="2026"/>
    <area>RTG</area>
    <workgroup>bfd</workgroup>

<keyword>secure BFD</keyword>
<keyword>replay packets</keyword>
<keyword>spoofing</keyword>
<keyword>pseudo-random number</keyword>

    <abstract>
      <t>
	This document describes a Bidirectional Forwarding Detection (BFD) Optimized Authentication Mode known as Meticulous Keyed ISAAC Authentication. This mode can be used to
	authenticate some BFD packets with less CPU time cost than using
	MD5 or SHA-1 with the trade-off of decreased security.  This
	mechanism cannot be used to signal state changes, but it can
	be used to maintain a session in the Up state.
      </t>
    </abstract>
  </front>
  <middle>
    <section>
      <name>Introduction</name>
      <t>
	BFD (<xref target="RFC5880" sectionFormat="of" section="6.7"/>) defines a number of authentication
	mechanisms, including Simple Password and various other
	methods based on MD5 and SHA-1 hashes.  The benefit of using
	cryptographic hashes is that they are secure.  The downside to
	cryptographic hashes is that they are expensive and time-consuming on resource-constrained hardware.
      </t>
      <t>
	When BFD packets are unauthenticated, it is possible for an
	attacker to forge, modify, and/or replay packets on a link.
	These attacks have a number of side effects.  They can cause
	parties to believe that a link is down, or they can cause
	parties to believe that the link is up when it is, in fact,
	down.
      </t>
      <t>
	<xref target="RFC9985"/> defines
	procedures that enable better scaling of authentication for BFD by
	splitting BFD Authentication work between more computationally intensive
	authentication used for significant changes, and less computationally
	intensive authentication for packets validating that the session is in
	the Up state.  See <xref target="RFC9985"/> for general performance and security
	considerations.
      </t>
      <t>
        This document provides the definition of BFD Optimized Authentication
	Modes using the existing 
	MD5 (<xref target="RFC5880" section="6.7.3"/>) and
	SHA-1 (<xref target="RFC5880" section="6.7.4"/>) Authentication
	mechanisms for the more computationally intensive work.  It also defines
	methods for using a mechanism, ISAAC <xref target="ISAAC"/>, for
	the less computationally intensive mechanism.
      </t>
      <t>
	ISAAC requires only a few CPU
	operations per generated 32-bit number, can take a large
	secret key as a seed, and it has an extremely long cycle
        length.  These properties make it ideal for use in BFD.
      </t>
      <t>
	ISAAC+ <xref target="ISAAC-Plus"/> documents some cryptanalysis of the
	ISAAC mechanism.  This analysis addressed an issue with initial seeding,
	and the method proposed here incorporates recommendations to address
	that attack.
      </t>
      <section>
        <name>Meticulous Keying</name>
        <t>
	  <xref target="RFC5880"/> uses the term
	  "meticulous keyed" and "meticulous keying" without
	  defining those terms.  That meaning of that term is found
	  by examining the definition of the sequence number from
	  <xref target="RFC5880" sectionFormat="parens" section="4.3"/>:
        </t>
          <blockquote>
            The sequence number for this packet.  For Keyed MD5
            Authentication, this value is incremented occasionally.  For
            Meticulous Keyed MD5 Authentication, this value is incremented for
            each successive packet transmitted for a session.  This provides
            protection against replay attacks.
          </blockquote>
        <t>
	  In this context, the term "meticulous" means that the
	  sequence number is incremented on every new packet that
	  is sent.  The term "keyed" means that the packets are
	  authenticated via the use of a secret key or keys that
	  are known to both sender and receiver.  Therefore, the term
	  "meticulous keyed" refers to the BFD Authentication
	  type where each subsequently transmitted packet has a sequence number that is 
	  one greater than the immediately previous one and can be authenticated.
        </t>
      </section>
      <section>
        <name>Requirements Language</name>
        <t>
    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&nbsp;14 <xref target="RFC2119"/> <xref target="RFC8174"/> 
    when, and only when, they appear in all capitals, as shown here.
        </t>
      </section>
    </section>
    <section>
      <name>Experimental Extensions to RFC 5880</name>
      <t>
	This document describes an experimental extension to BFD <xref target="RFC5880"/>. This experiment is intended to
	provide additional insights into what happens when the
	authentication method defined in this document is used.
      </t>
      <t>
	This document is classified as Experimental and is not part of
	the IETF Standards Track. Implementations based on this
	document should not be considered as compliant with BFD <xref target="RFC5880"/> and should not assume
	interoperability with other implementations that conform to
	this document.
      </t>
      <t>
	Some of the state variables in <xref target="RFC5880" sectionFormat="of" section="6.8.1"/> are related
	to the authentication type being used for a particular
	session.  However, the definitions given in <xref target="RFC5880"/> are specific to Keyed MD5 or SHA-1
	Authentication, which limit their utility for new
        authentication types. This document presumes a relaxed definition for
        the following BFD state variables that does not limit them to MD5 and
        SHA-1 but instead extends them to the mechanism defined herein:
      </t>
      <ul spacing="compact">
        <li>bfd.RcvAuthSeq</li>
        <li>bfd.XmitAuthSeq</li>
        <li>bfd.AuthSeqKnown</li>
      </ul>
    </section>
    <section>
      <name>Architecture of the Auth Type Method</name>
      <t>
	This document specifies two Optimized BFD
	<xref target="RFC9985"/> Authentication Modes:

      </t>
      <ul>
        <li>
	    For the more computationally intensive authentication mechanisms, the existing
	    MD5 (<xref target="RFC5880" section="6.7.3"/>) and
	    SHA-1 (<xref target="RFC5880" section="6.7.4"/>) Authentication
	    mechanisms are leveraged with small PDU changes necessary to carry the
	    Optimization Mode encoding.  These changes are documented in
	    Sections <xref target="md5_format" format="counter"/> and <xref target="sha1_format" format="counter"/>,
	    respectively.
	  </li>
        <li>
	    For the less computationally intensive authentication mode, this
	    document defines the Meticulous Keyed ISAAC Authentication mechanism.
	    The PDU format for this mode is defined in <xref target="meticulous_keyed_isaac"/>.
	    The procedures for using this format are covered later in this document.
	  </li>
      </ul>
      <t>ISAAC is used as a way to generate an infinite stream of
      pseudorandom numbers, referred to here as "Auth Keys".  With
      Meticulous Keyed ISAAC Authentication, these Auth Keys are used
      as a signal that the sending party is authentic.  That is, only
      the sending party can generate the correct Auth Keys.  Therefore,
      if the receiving party sees a correct Auth Key in a BFD Control Packet in
      the Up state, then only the sending party could have generated it.
      </t>
      <t>Note that BFD Control Packets with the less computationally intensive
      ISAAC Authentication Format type are NOT signed or authenticated.  Therefore, 
      this format <bcp14>MUST NOT</bcp14> be used to signal BFD state
      changes.
      </t>
      <section anchor="rationale">
        <name>Rationale for ISAAC and Operational Overview</name>
        <t>
	  There are many cryptographically secure pseudorandom number generators (CSPRNGs) available. This section explains why ISAAC was chosen.
        </t>
        <t>
	  The goal for this less computationally intensive authentication was to provide a
	  signal that the session was in the Up state in the
	  form of a 32-bit number, which is difficult for an attacker
	  to guess.  The number should be generated from a CSPRNG
	  that produces results based on a Seed composed of both
	  public and private data.  Since BFD can have packet loss,
	  the generator should also be "seekable" in that the BFD
	  state machine should be able to query the generator (within
	  a small window) for new numbers.
        </t>
        <t>
	  This last property rules out most CSPRNGs, as they are
	  not seekable by design.  That is, most CSPRNGs maintain
	  minimal state and are designed to produce a long sequence
	  of pseudorandom numbers from a few simple calculations.  In
	  general, every call to the CSPRNG function modifies the
	  internal state in an irreversible fashion, and then produces
	  a new random number as the result.
        </t>
        <t>
	  It could be possible to use such a generator and
	  manually save many results in a buffer.  This buffer could
	  then enable "seeking" within a short window.  In contrast,
	  ISAAC produces large sets of numbers by design, making it
	  an integrated solution.
        </t>
        <t>
	  Further, most CSPRNGs are designed to have small seeds.
	  This limitation means that any secret key defined by an
	  administrator is not directly usable as a Seed for the
	  generator.  Instead, any secret key (including any
	  per-session data) would have to be hashed before being used
	  to see the generator.  For these reasons, ISAAC was chosen. It
	  can accept keys up to 8192 octets in length, which is more
	  than sufficient for BFD.
        </t>
        <t>
	  ISAAC has been subject to cryptanalysis, most notably ISAAC+ <xref target="ISAAC-Plus"></xref>.  There are no known
	  vulnerabilities.
        </t>
        <t>
	  Two instances of ISAAC are created: one for transmission and one for reception. An instance is required for each direction since the
	  inputs for seeding ISAAC require the locally randomly generated Seed
	  value and the current BFD Your Discriminator value for an Up session.
	  These values are distinct on each side of the BFD session.
        </t>
        <t>
	  The process for using ISAAC with BFD for each direction is then as follows:
        </t>
        <ul>
          <li>
	      The administrator provides a secret key that is used to
	      authenticate each party in the BFD sessions.
	    </li>
          <li>
	      When the session transitions into the Up state, the
	      secret key is combined with per-session data to seed ISAAC.
	    </li>
          <li>
	      The ISAAC process produces a "page" of 256 32-bit random
	      numbers.
	    </li>
          <li>
	      The BFD state machine also records a sequence number
	      that is associated with the first entry of that page.
	      The combination of 256 entries and the sequence number
	      allows the BFD state machine to "seek" within a
	      256-packet window with zero cost through simple
	      addition or subtraction of sequence numbers.
	    </li>
          <li>
	      If there is a lost packet, the BFD state machine
	      simply seeks to the entry that is associated with the
	      received packet and checks if the received packet
	      contains the expected number.
	    </li>
          <li>
	      BFD supports packet rates of hundreds of packets per
	      second.  Even at those rates, 256 entries per ISAAC
	      page provides for about a second of BFD operation
	      before the next page has to be calculated.
	    </li>
          <li>
	      As the next page calculation is complex, and there is
	      a long period of time available before the next page
	      is needed, this calculation can be done in the background.
	    </li>
          <li>
	      If the next page calculation is started immediately
	      after the current page is fully used, there should be
	      sufficient time to calculate the next page as a
	      background task, no matter what the packet rate.
	    </li>
        </ul>
        <t>
	    In summary, the ISAAC Seed depends on both a secret key
	    and per-session data, so it is difficult for an attacker
	    to guess or attack via an offline dictionary attack.
	    The generated numbers
	    are saved in an array, where the BFD fast path can
	    consume them at essentially zero cost.
        </t>
        <t>
	    The only downside to this method is that it does not
	    provide for per-packet integrity checks.  This limitation
	    is addressed by mandating that Meticulous Keyed ISAAC
	    Authentication is only used to signal that the session
	    remains in the Up state. The ISAAC numbers then signal
	    that the originator of the packet is authentic, and the
	    BFD state machine verifies that the rest of the packet
	    is well formed and matches the expected state.
        </t>
        <t>
	    The result is an authentication method that satisfies
	    the needs of the BFD state machine and is secure.
        </t>
      </section>
    </section>
    <section>
      <name>Meticulous Keyed ISAAC Authentication Types</name>
      <section anchor="meticulous_keyed_isaac">
        <name>Meticulous Keyed ISAAC Authentication, ISAAC Format</name>
        <t>
	  If the Authentication Present (A) bit is set in the header,
and the Authentication Type field contains either Optimized MD5
	  Meticulous Keyed ISAAC Authentication (7) or
	  Optimized SHA-1 Meticulous Keyed ISAAC Authentication (8), and the Optimized Authentication Mode field contains
	  2 (<xref target="RFC9985" section="7"/>), the Authentication Section has the following
	  format:
        </t>
        <figure>
          <name>Meticulous Keyed ISAAC Authentication Format</name>
          <artwork align="center"><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Auth Type   |   Auth Len    |  Auth Key ID  |   Opt. Mode   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Sequence Number                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             Seed                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            Auth Key                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork>
        </figure>
        <dl newline="true">
          <dt>
	    Auth Type:
          </dt>
          <dd>
	    The current Auth Type.  It <bcp14>MUST</bcp14> provide for meticulous
	    keying.  That is, an authentication type where each packet
	    is authenticated and where the Sequence Number field
	    is incremented by one (1) for every packet that is sent.
	  </dd>
          <dt>
	    Auth Len:
          </dt>
          <dd>
	    The length of the Authentication Section in bytes.  For
	    Meticulous Keyed ISAAC Authentication Format, the length is 16 bytes.
	  </dd>
          <dt>
	    Auth Key ID:
          </dt>
          <dd>
	    The authentication key ID in use for this packet.  This
	    allows multiple secret keys to be active simultaneously.
	  </dd>
          <dt>
	    Opt Mode:
          </dt>
          <dd>
	    The Optimized Authentication Mode is defined in 
	    <xref target="RFC9985" section="7"/>.
	    When the Auth Type is either Optimized MD5 Meticulous Keyed ISAAC
            Authentication (7) or Optimized SHA-1 Meticulous Keyed ISAAC
            Authentication (8), and the format is Meticulous Keyed ISAAC
            Authentication Format, the Optimized Authentication Mode field will
            be set to 2.
	  </dd>
          <dt>
	    Sequence Number:
          </dt>
          <dd>
	    The sequence number for this packet.  For Meticulous Keyed
	    ISAAC Authentication, this value is incremented once for
	    each successive packet transmitted for a session.  This
	    provides protection against replay attacks.
	  </dd>
          <dt>
	    Seed:
          </dt>
          <dd>
	    A 32-bit (4 octet) Seed that is used in conjunction with
	    the shared key in order to configure and initialize the
	    ISAAC Pseudorandom Number Generator (PRNG).  It is used to
	    identify and secure different "streams" of random numbers
	    that are generated by ISAAC.
	  </dd>
          <dt>
	    Auth Key:
          </dt>
          <dd>
            <t>
	      This field carries the 32-bit (4 octet) ISAAC output that
	      is associated with the sequence number.  The ISAAC PRNG
	      <bcp14>MUST</bcp14> be configured and initialized as given in <xref target="seeding-isaac"/>.
            </t>
            <t>
	      Note that the Auth Key here does not include any summary
	      or hash of the BFD Control Packet.  The packet itself is completely
	      unauthenticated.
            </t>
          </dd>
        </dl>
        <t>When the receiving party receives a BFD packet with an
	expected sequence number and the correct corresponding ISAAC
	output in the Auth Key field, it knows that only the authentic
	sending party could have sent that message.  The sending party is
	therefore Up, as it is the only one who could have sent the
	message.</t>
      </section>
      <section anchor="md5_format">
        <name>Meticulous Keyed ISAAC Authentication, MD5 Format</name>
        <t>
	  If the Authentication Present (A) bit is set in the header,
	  and the Authentication Type field contains Optimized MD5
	  Meticulous Keyed ISAAC Authentication (7), and the
	  Optimized Authentication Mode field contains 1 (<xref target="RFC9985" section="7"/>), the Authentication Section has the following
	  format:
        </t>
        <figure>
          <name>Meticulous Keyed ISAAC Authentication, MD5 Format</name>
          <artwork align="center"><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Auth Type   |   Auth Len    |  Auth Key ID  |   Opt. Mode   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Sequence Number                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Auth Key/Digest...                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                              ...                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork>
        </figure>
        <dl newline="true">
          <dt>
	    Auth Type:
          </dt>
          <dd>
	    The current Auth Type.  It <bcp14>MUST</bcp14> provide for meticulous
	    keying.  That is, an authentication type where each packet
	    is authenticated and where the Sequence Number field
	    is incremented by one (1) for every packet that is sent.
	  </dd>
          <dt>
	    Auth Len:
          </dt>
          <dd>
	    The length of the Authentication Section in bytes. For Meticulous Keyed ISAAC Authentication, MD5 Format, the length is 24 bytes.
	  </dd>
          <dt>
	    Auth Key ID:
          </dt>
          <dd>
	    The authentication key ID in use for this packet.  This
	    allows multiple secret keys to be active simultaneously.
	  </dd>
          <dt>
	    Opt Mode:
          </dt>
          <dd>
	    The Optimized Authentication Mode is defined in 
	    <xref target="RFC9985" section="7"/>.
	    When the Auth Type is Optimized MD5 Meticulous Keyed ISAAC
            Authentication (7), and the format is MD5 Authentication Format, 
            the Optimized Authentication Mode field will be set to 1.
	  </dd>
          <dt>
	    Sequence Number:
          </dt>
          <dd>
	    The sequence number for this packet.  For Meticulous Keyed
	    ISAAC Authentication, this value is incremented once for
	    each successive packet transmitted for a session.  This
	    provides protection against replay attacks.
	  </dd>
          <dt>
	    Auth Key/Digest:
          </dt>
          <dd>
	    This field carries the 16-byte MD5 digest for the packet.  
	    The procedure for calculating this field is documented in
	    <xref target="RFC5880" section="6.7.3"/>.
	  </dd>
        </dl>
      </section>
      <section anchor="sha1_format">
        <name>Meticulous Keyed ISAAC Authentication, SHA-1 Format</name>
        <t>
	  If the Authentication Present (A) bit is set in the header,
	  and the Authentication Type field contains Optimized SHA-1
	  Meticulous Keyed ISAAC Authentication (8), and the
	  Optimized Authentication Mode field contains 1 (<xref target="RFC9985" section="7"/>), the Authentication Section has the following
	  format:
        </t>
        <figure>
          <name>Meticulous Keyed ISAAC Authentication, SHA-1 Format</name>
          <artwork align="center"><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Auth Type   |   Auth Len    |  Auth Key ID  |   Opt. Mode   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Sequence Number                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Auth Key/Hash...                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                              ...                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork>
        </figure>
        <dl newline="true">
          <dt>
	    Auth Type:
          </dt>
          <dd>
	    The current Auth Type.  It <bcp14>MUST</bcp14> provide for meticulous
	    keying.  That is, an authentication type where each packet
	    is authenticated and where the Sequence Number field
	    is incremented by one (1) for every packet that is sent.
	  </dd>
          <dt>
	    Auth Len:
          </dt>
          <dd>
	    The length of the Authentication Section in bytes.  For
	    Meticulous Keyed ISAAC Authentication, SHA-1 Format, the length is 28 bytes.
	  </dd>
          <dt>
	    Auth Key ID:
          </dt>
          <dd>
	    The authentication key ID in use for this packet.  This
	    allows multiple secret keys to be active simultaneously.
	  </dd>
          <dt>
	    Opt Mode:
          </dt>
          <dd>
	    The Optimized Authentication Mode is defined in 
	    <xref target="RFC9985" section="7"/>.
	    When the Auth Type is Optimized SHA-1 Meticulous Keyed ISAAC
            Authentication (8), and the format is SHA-1 Authentication Format, 
            the Optimized Authentication Mode field will be set to 1.
	  </dd>
          <dt>
	    Sequence Number:
          </dt>
          <dd>
	    The sequence number for this packet.  For Meticulous Keyed
	    ISAAC Authentication, this value is incremented once for
	    each successive packet transmitted for a session.  This
	    provides protection against replay attacks.
	  </dd>
          <dt>
	    Auth Key/Digest:
          </dt>
          <dd>
	    This field carries the 16-byte SHA-1 hash for the packet.  
	    The procedure for calculating this field is documented in
	    <xref target="RFC5880" section="6.7.4"/>.
	  </dd>
        </dl>
      </section>
    </section>
    <section>
      <name>New State Variables for Meticulous Keyed ISAAC Authentications</name>
      <t>
	This document defines new state variables for use with
	Meticulous Keyed ISAAC Authentication.
      </t>
      <dl newline="true">
        <dt>
	  bfd.MetKeyIsaacRcvKeyKnown:
        </dt>
        <dd>
	  A boolean value that indicates whether or not the system
	  knows the receive key for the Meticulous Keyed ISAAC
	  Authentication.  The initial value is false.  This value
	  is changed to "true" when a party verifies that the other
	  party has started to use the Meticulous Keyed ISAAC
	  Authentication with an authenticated Auth Key.
	</dd>
        <dt>
	  bfd.MetKeyIsaacRcvAuthBase:
        </dt>
        <dd>
	  A 32-bit unsigned integer containing a copy of the
	  bfd.RcvAuthSeq number that is associated with the current
	  ISAAC "page" for authenticating received packets.
	</dd>
        <dt>
	  bfd.MetKeyIsaacRcvAuthIndex:
        </dt>
        <dd>
	  An 8-bit number used to index within a particular "page" of
	  pseudorandom numbers.
	</dd>
        <dt>
	  bfd.MetKeyIsaacRcvAuthSeed:
        </dt>
        <dd>
	  A 32-bit unsigned integer containing a copy of the Seed
	  associated with received packets.
	</dd>
        <dt>
	  bfd.MetKeyIsaacRcvAuthData:
        </dt>
        <dd>
	  A data structure that contains the ISAAC data for the
	  received Auth Type method.  The format and contents of this
	  structure are implementation specific and hold the internal
	  state of the ISAAC CSPRNG.
	</dd>
        <dt>
	  bfd.MetKeyIsaacXmitKeyKnown:
        </dt>
        <dd>
	  A boolean value that indicates whether or not the system
	  knows the xmit key for Meticulous Keyed ISAAC Authentication.
	  The initial value is false.  This value is
	  changed to "true" when a party starts to transmit using
	  Meticulous Keyed ISAAC Authentication.
	</dd>
        <dt>
	  bfd.MetKeyIsaacXmitAuthBase:
        </dt>
        <dd>
	  A 32-bit unsigned integer containing a copy of the
	  bfd.XmitAuthSeq number that is associated with the current
	  ISAAC "page" for authenticating sent packets.
	</dd>
        <dt>
	  bfd.MetKeyIsaacXmitAuthIndex:
        </dt>
        <dd>
	  An 8-bit number used to index within a particular "page" of
	  pseudorandom numbers.
	</dd>
        <dt>
	  bfd.MetKeyIsaacXmitAuthSeed:
        </dt>
        <dd>
	  A 32-bit unsigned integer containing a copy of the Seed
	  associated with sent packets.
	</dd>
        <dt>
	  bfd.MetKeyIsaacXmitAuthData:
        </dt>
        <dd>
	  A data structure that contains the ISAAC data for the
	  sending Auth Type method.  The format and contents of this
	  structure are implementation specific and hold the internal
	  state of the ISAAC CSPRNG.
	</dd>
      </dl>
    </section>
    <section>
      <name>Procedures for BFD Authentication Using Meticulous Keyed ISAAC, MD5, or SHA-1 Formats</name>
      <t>
        The transmit and receive procedures utilize the additional procedures
	documented in
	<xref target="RFC9985" section="7.1"/>.
      </t>
      <t>
        The authentication procedure for Meticulous Keyed ISAAC, MD5 Format is
	described in <xref target="RFC5880" section="6.7.3"/> for the Meticulous
	Keyed MD5 Authentication Mode.
      </t>
      <t>
        The authentication procedure for Meticulous Keyed ISAAC, SHA-1 Format is
	described in <xref target="RFC5880" section="6.7.4"/> for the Meticulous
	Keyed SHA-1 Authentication Mode.
      </t>
    </section>
    <section>
      <name>Procedures for BFD Authentication Using Meticulous Keyed ISAAC, ISAAC Format</name>
      <t>In this mode of optimized authentication, one or more secret
      keys (with corresponding key IDs) are configured in each system.
      One of the keys is used to seed the ISAAC PRNG.  The output of
      ISAAC is used to signal that the sender is authentic.  To help
      avoid replay attacks, a sequence number is also carried in each
      packet.  For Meticulous Keyed ISAAC Authentication, the sequence number <bcp14>MUST</bcp14> be
      incremented by one on every packet.</t>
      <t>The receiving system accepts the packet if the key ID matches
      one of the configured Keys, and the Auth Key derived from the
      selected Key, Seed, and sequence number matches the Auth Key
      carried in the packet, and the sequence number is strictly
      greater than the last sequence number received (modulo wrap at
      2<sup>32</sup>).  If any of these criteria do not match, the packet fails
      validation and is discarded.</t>
<section>
<name>Transmission using Meticulous Keyed ISAAC Authentication, ISAAC Format</name>
	<t>The Auth Type field <bcp14>MUST</bcp14> be set to one of two
	values; Optimized MD5 Meticulous Keyed ISAAC Authentication (7) or
	Optimized SHA-1 Meticulous Keyed ISAAC Authentication (8).</t>
        <t>The Auth Len field <bcp14>MUST</bcp14> be set to 16.</t>
        <t>The Auth Key ID field <bcp14>MUST</bcp14> be set to the ID of the
        current authentication key.  The Sequence Number field
        <bcp14>MUST</bcp14> be set to bfd.XmitAuthSeq.</t>
	<t>The Seed field <bcp14>MUST</bcp14> be set to the value of the
	current Seed used for this session.</t>
	<t>The Auth Key field <bcp14>MUST</bcp14> be set to the output of
	ISAAC, which depends on the secret Key, the current Seed, and the
	sequence number.</t>
        <t>The Optimized Authentication Mode field <bcp14>MUST</bcp14> be 2,
        the "less computationally intensive authentication type". See <xref
        target="RFC9985" section="7"/>.</t>
	<t>For Meticulous Keyed ISAAC Authentication, bfd.XmitAuthSeq
	<bcp14>MUST</bcp14> be incremented by one on each packet in a
	circular fashion (when treated as an unsigned 32-bit value).  The
	bfd.XmitAuthSeq <bcp14>MUST NOT</bcp14> be incremented by more than
	one per packet.</t>
      </section>
<section>
<name>Receipt using Meticulous Keyed ISAAC Authentication, ISAAC Format</name>
        <t>If the received BFD Control Packet does not contain an
        Authentication Section, or the Auth Type is not correct (either
        Optimized MD5 Meticulous Keyed ISAAC Authentication (7) or
        Optimized SHA-1 Meticulous Keyed ISAAC Authentication (8)), then
        the received packet <bcp14>MUST</bcp14> be discarded.</t>
	<t>If the Auth Key ID field does not match the ID of a configured
	authentication key, the received packet <bcp14>MUST</bcp14> be
	discarded.</t>
        <t>The Optimized Authentication Mode field <bcp14>MUST</bcp14> be 2,
        the "less computationally intensive authentication type". See <xref
        target="RFC9985" section="7"/>.</t>
	<t>If the Auth Len field is not equal to 16, the packet
	<bcp14>MUST</bcp14> be discarded.</t>
	<t>If bfd.AuthSeqKnown is 1, examine the Sequence Number field.  For
	Meticulous Keyed ISAAC, if the sequence number lies outside of the
	range of bfd.RcvAuthSeq+1 to bfd.RcvAuthSeq+(3*Detect Mult) inclusive
	(when treated as an unsigned 32-bit circular number space) the
	received packet <bcp14>MUST</bcp14> be discarded.</t>
	<t>If bfd.MetKeyIsaacRcvKeyKnown is "true" and the Seed field does not
	match the current Seed value, bfd.MetKeyIsaacRcvAuthSeed, the packet
	<bcp14>MUST</bcp14> be discarded.</t>
	<t>Calculate the current expected output of ISAAC, which depends on
	the secret Key, the current Seed, and the sequence number.  If the
	value does not match the Auth Key field, then the packet
	<bcp14>MUST</bcp14> be discarded.</t>
	<t>If bfd.MetKeyIsaacRcvKeyKnown is false, the ISAAC related variables
	are initialized as per <xref
	target="receiver-variable-initialization"/> using the contents of the
	packet.</t>
	<t>Note that in some cases, calculating the expected output of ISAAC
	will result in the creation of a new "page" of 256 numbers.  This
	process will be irreversible and will destroy the current "page".  As
	a result, if the generation of a new output will create a new "page",
	the receiving party <bcp14>MUST</bcp14> save a copy of the entire
	ISAAC state before proceeding with this calculation.  If the outputs
	match, then the saved copy can be discarded and the new ISAAC state
	is used.  If the outputs do not match, then the saved copy
	<bcp14>MUST</bcp14> be restored and the modified copy discarded or
	cached for later use.</t>
      </section>
    </section>
    <section>
      <name>Secret Key</name>
      <t>The security of the Meticulous Keyed ISAAC Auth Type depends on the secret key.
      The secret key is mixed with a per-session Seed as discussed
      below.  The result is used to initialize a stream of
      pseudorandom numbers using the ISAAC random number
      generator.</t>
      <t>Using the same or distinct secret keys for each Optimized
      Authentication Mode has security and operational impacts.  See
      <xref target="key_reuse"/> for discussion on these points.</t>
      <t>It is <bcp14>RECOMMENDED</bcp14> that implementations permit distinct secret keys to
      be provisioned for a given Auth Key ID for each Optimized Authentication
      Mode.  The operator's choice to use such distinct secret keys instead of a single
      secret key is out of scope for this document.</t>
      <t>A particular secret key set is identified via the Auth Key ID
      field.  This Auth Key ID is either placed in the packet by the
      sender or verified by the receiver.  Meticulous Keyed ISAAC
      Authentication permits systems to have multiple Secret
      Keys configured, but we do not discuss how those keys are
      managed or used.  A session <bcp14>MUST NOT</bcp14>, however,
      change the Auth Key ID for Meticulous Keyed ISAAC Authentication during a
      session.  There is no defined way to resync or reinitialize an
      ongoing session with a different Auth Key ID and correspondingly
      different secret key.</t>
      <t>For interoperability, the management interface by which the
      key is configured <bcp14>MUST</bcp14> accept ASCII strings and <bcp14>SHOULD</bcp14> also
      allow for the configuration of any arbitrary binary string in
      hexadecimal form.  Other configuration methods <bcp14>MAY</bcp14> be supported.</t>
      <t>The secret key <bcp14>MUST</bcp14> be at least eight (8) octets in length
      and <bcp14>SHOULD NOT</bcp14> be more than 128 octets in length.</t>
    </section>
    <section>
      <name>Transition to Using ISAAC</name>
      <t>A BFD session that uses Optimized MD5 Meticulous Keyed ISAAC
      Authentication or Optimized SHA-1 Meticulous Keyed ISAAC Authentication
      <bcp14>MUST</bcp14> begin a session with Auth Type set to the
      relevant authentication type and the Optimized
      Authentication Mode field set to 1.
      </t>
      <t>
	When a BFD session using more computationally intensive authentication
	transitions to the Up state, the first Up packet <bcp14>MUST</bcp14> contain an
	Optimized Authentication Mode field with value 1.  Since state
	transitions require full packet integrity checks, an Optimized
	Authentication Mode field with value 2 is not
	permitted for state changes.  Each party <bcp14>MUST</bcp14> continue to use
	the more computationally intensive authentication mode until the other side has
	confirmed the switch to the Up state with a packet that also
	uses more computationally intensive  authentication.
      </t>
      <t>
	Once the BFD session has transitioned to the Up state, the
	sender <bcp14>MAY</bcp14> send the subsequent packets for the Up
	state with the Optimized Authentication Mode field containing value
	2 using the ISAAC Format.
      </t>
      <t>When a system first receives a packet containing the Optimized
      Authentication Mode field with value 2, it
      initializes the ISAAC PRNG state using the Seed from that packet.
      A system originating a packet using Meticulous Keyed ISAAC
      Authentication will generate a Seed and place it into the
      packet, which is then sent.  Further discussion of initialization
      takes place in Sections <xref target="sender-variable-initialization" format="counter"/> and
      <xref target="receiver-variable-initialization" format="counter"/>.</t>
      <t>The first packet after the transition to the Up state is the
      only time when the ISAAC random number generator for transmission is initialized.
      In contrast, a temporary transition away from using Meticulous
      Keyed ISAAC Authentication, ISAAC Format (<xref target="transition-away"/>)
      and back does not cause ISAAC to be rekeyed.</t>
      <t>There is no negotiation as to when authentication switches
      from the original type to using Meticulous Keyed ISAAC Authentication
      using the ISAAC Format.  The sender simply begins sending packets with a
      relevant Auth-Type
      and with the Optimized Authentication Mode field set to 1.  When
      the sender switches to using Meticulous Keyed ISAAC
      Authentication, ISAAC Format, it sets the Optimized Authentication Mode field
      to 2 and starts performing the ISAAC calculations as described
      here.</t>
      <t>Similarly, a receiving system switches to using this method
      when it sees that it has received a packet contains the Optimized
      Authentication Mode field set to 2 when
      bfd.MetKeyIsaacRcvKeyKnown variable is false.  The receiving
      system then initializes its variables and authenticates the
      received packet by comparing the Auth Key in the packet with
      the key it generated itself.</t>
      <t>The operation of those state variables <bcp14>MUST</bcp14> now satisfy
      the requirements of the new Optimized Authentication Mode.
      That is, when changing Optimized Authentication Mode in a session, the current
      value of the bfd.RcvAuthSeq and bfd.XmitAuthSeq variables is
      used as the initial value(s) for the new mode.</t>
    </section>
    <section anchor="seeding-isaac">
      <name>Seeding ISAAC</name>
      <t>The Seed field is used to identify and secure
      different "streams" of random numbers that are generated by
      ISAAC.  Each session uses a different Seed, which is used along
      with the Your Discriminator field
      (<xref target="RFC5880" section="4.1"/>)
      and the secret key to initialize ISAAC.</t>
      <t>The value of the Seed field <bcp14>MUST</bcp14> be derived from a CSPRNG
      source.  Exactly how this can be done is outside of the scope of
      this document.</t>
      <t>A new Seed value <bcp14>MUST</bcp14> be created every time a BFD session
      transitions into the Up state.  In order to prevent continuous
      rekeying, once the session is in the Up state, the Seed for a
      session <bcp14>MUST NOT</bcp14> be changed until another state transition
      occurs.</t>
      <t>The ISAAC PRNG is initialized by setting all internal
      variables and data structures to zero (0).  The PRNG is then
      seeded by using the following structure:</t>
      <figure>
        <name>ISAAC Initialization Structure</name>
        <artwork align="center"><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             Seed                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Your Discriminator                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Secret Key ...            |  Counter |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork>
      </figure>
      <t>
	where the Your Discriminator field is taken from the BFD
	packet defined in <xref target="RFC5880" section="4.1" sectionFormat="comma"/>.
	This field is taken from the respective values
	used by a sending system.  For receiving systems, the field
	are taken from the received packet.  As the size of the buffer
	used to seed is limited, the length of the secret key <bcp14>MUST</bcp14> be
	no more than 1015 octets.  The Counter field is used to ensure
	the initial seeding of ISAAC avoids the seeding issues
	discussed in <xref target="ISAAC-Plus">ISAAC+</xref>.
      </t>
      <t>
	Whatever the API or other interface used to input the Secret
	Key, any implementation-specific internal representations of
	the secret key <bcp14>MUST NOT</bcp14> be used when encoding the secret key
	into the above data structure. That is, there is no length
	field that indicates how long the secret key is and there is
	no trailing zero or NUL byte that indicates the end of the
	secret key.  Implementors are reminded that internal
	representations of data should not affect protocol
	operation.
      </t>
      <t>
	The buffer used to initialize ISAAC filled it with repeated
	copies of the above structure.  For each complete copy of the
	structure, the Counter field is incremented starting from
	zero (0).  The final portion of the initialization buffer
	holds a partial copy of the structure, which is however much
	can be accommodated in the remaining portion of the buffer.
      </t>
      <t>
	Once the ISAAC "page" is initialized, the data is processed
	through the "randinit()" function of <xref target="ISAAC">ISAAC</xref>.  Pseudo-random numbers are then
	produced 32 bits at a time by calling the "isaac()" function.
      </t>
      <t>
	For the sender, this calculation can be done outside of the
	BFD "fast path" as soon as the Your Discriminator value is
	known.  For the receiver, this calculation can only be done
	when the Seed is received from the sender, and therefore the
	initial seeding needs to be done in the BFD "fast path".
      </t>
      <t>
	The following table gives Seed and Your Discriminator as
	32-bit hexadecimal values and the secret key as an
	eleven-character string.  The subsequent table shows the first
	eight sequence numbers and corresponding Auth Key values that
	were generated using the above initial values.
      </t>
      <table>
        <name>Test Inputs for Seeding ISAAC</name>
	<thead>
	  <tr>
	    <th>Field</th>
	    <th>Value(s)</th>
	  </tr>
	</thead>
	<tbody>
	  <tr>
	    <td>Seed</td>
            <td>0x0bfd5eed</td>
	  </tr>
	  <tr>
	    <td>Y-Disc</td>
	    <td>0x4002d15c</td>
	  </tr>
	  <tr>
	    <td>Secret Key</td>
	    <td>RFC5880June</td>
	  </tr>
	  <tr>
	    <td>Counter</td>
	    <td>0...50</td>
	  </tr>
	</tbody>
      </table>

      <table>
        <name>Expected Outputs</name>
	<thead>
	  <tr>
	    <th>Sequence</th>
	    <th>Auth Key</th>
	  </tr>
	</thead>
	<tbody>
	  <tr>
	    <td>0</td>
            <td>9af65d83</td>
	  </tr>
	  <tr>
	    <td>1</td>
            <td>44355d56</td>
	  </tr>
	  <tr>
	    <td>2</td>
            <td>9334074e</td>
	  </tr>
	  <tr>
	    <td>3</td>
            <td>b643ef59</td>
	  </tr>
	  <tr>
	    <td>4</td>
            <td>74d659f1</td>
	  </tr>
	  <tr>
	    <td>5</td>
            <td>8966dc56</td>
	  </tr>
	  <tr>
	    <td>6</td>
            <td>a1f6f9bc</td>
	  </tr>
	  <tr>
	    <td>7</td>
            <td>21895a46</td>
	  </tr>
	</tbody>
      </table>

      <t>
	This construct provides 64 bits of entropy, of which 32
	bits are controlled by each party in a BFD session.  For
	security, each implementation <bcp14>SHOULD</bcp14> randomize their discriminator
	fields at the start of a session, as discussed in <xref target="RFC5880" section="9" sectionFormat="comma"/>.
      </t>
      <t>
	Note that this construct only uses the Your Discriminator
	field once to seed ISAAC.  It therefore allows the My
	Discriminator field to change as permitted by <xref target="RFC5880" sectionFormat="parens" section="6.3">BFD</xref>.
      </t>
      <t>
	While the Your Discriminator field may change, there is no
	way to signal or negotiate Seed changes.  The Seed is set once
	by each party after the session transitions into the Up state,
	and then remains unchanged for the duration of the session.
	The receiving party <bcp14>MUST</bcp14> remember the current Seed value.  The
	Seed value <bcp14>MUST NOT</bcp14> change unless sending party has signaled
	a BFD state change with a packet that is authenticated using a
	more computationally intensive authentication method.  When a system receives a BFD
	packet containing Meticulous Keyed ISAAC Authentication, it
	<bcp14>MUST</bcp14> check that the received Seed contains the expected value,
	and if not, it <bcp14>MUST</bcp14> discard the packet as inauthentic.
      </t>
      <section anchor="sender-variable-initialization">
        <name>Sender Variable Initialization</name>
        <t>
	  A system that sends packets initializes ISAAC as described
	  above.  The ISAAC related variables are initialized as
	  follows:
        </t>
        <dl newline="true">
          <dt>
	    bfd.MetKeyIsaacXmitKeyKnown:
          </dt>
          <dd>
	    This variable transitions from false to true when the
	    sender decides to start using ISAAC.  The sender also
	    initializes the other variables at the same time.
	  </dd>
          <dt>
	    bfd.MetKeyIsaacXmitAuthBase:
          </dt>
          <dd>
	    The sender copies the bfd.XmitAuthSeq number from the
	    current packet to be sent into this variable.
	  </dd>
          <dt>
	    bfd.MetKeyIsaacXmitAuthIndex:
          </dt>
          <dd>
	    The sender sets this variable to zero.
	  </dd>
          <dt>
	    bfd.MetKeyIsaacXmitAuthSeed:
          </dt>
          <dd>
	    The sender copies the current Seed value into this
	    variable.  This variable is then copied into the "Seed"
	    field of each Auth Type packet.
	  </dd>
          <dt>
	    bfd.MetKeyIsaacXmitAuthData:
          </dt>
          <dd>
	    The ISAAC state for sending is encapsulated in this
	    variable.
	  </dd>
        </dl>
      </section>
      <section anchor="receiver-variable-initialization">
        <name>Receiver Variable Initialization</name>
        <t>
	  When a system receives packets with Meticulous Keyed
	  ISAAC Authentication and is able to authenticate such a
	  packet the first time, the ISAAC related variables are
	  initialized as follows:
        </t>
        <dl newline="true">
          <dt>
	    bfd.MetKeyIsaacRcvKeyKnown:
          </dt>
          <dd>
	    This variable transitions from false to true when the
	    receiver sees that the sender has started using Meticulous
	    Keyed ISAAC Authentication.  The receiver also initializes
	    the other variables at the same time.
	  </dd>
          <dt>
	    bfd.MetKeyIsaacRcvAuthBase:
          </dt>
          <dd>
	    The bfd.RcvAuthSeq number from the current packet
	    is copied into this variable.
	  </dd>
          <dt>
	    bfd.MetKeyIsaacRcvAuthIndex:
          </dt>
          <dd>
	    The receiver sets this value to zero.
	  </dd>
          <dt>
	    bfd.MetKeyIsaacRcvAuthSeed:
          </dt>
          <dd>
	    The receiver copies the Seed value from the received packet
	    into this variable.  Note that this copy only occurs when the
	    bfd.MetKeyIsaacXmitKeyKnown variable transitions from false
	    to true.
	  </dd>
          <dt>
	    bfd.MetKeyIsaacRcvAuthData:
          </dt>
          <dd>
	    The ISAAC state for receiving is encapsulated in this
	    variable.
	  </dd>
        </dl>
        <t>
	  As there may be packet loss, the receiver has to take special
	  care to initialize the bfd.MetKeyIsaacRcvAuthBase variable.
	  If there has been no packet loss, the
	  bfd.MetKeyIsaacRcvAuthBase is taken directly from the
	  bfd.RcvAuthSeq variable, and the bfd.MetKeyIsaacRcvAuthIndex
	  is set to zero.
        </t>
        <t>
	  However, if the packet's sequence number differs from the
	  expected value, then the difference "N" indicates how many
	  packets were lost.  The receiver can then use this
	  difference to index into the ISAAC page to find the
	  corresponding Auth Key.  If the key in the ISAAC page does
	  not match the corresponding Auth Key in the packets, the
	  packet fails validation and is discarded.
        </t>
        <t>
	  If a key found by indexing into this ISAAC page 
          does match the Auth Key in the packet, then
	  the bfd.MetKeyIsaacRcvAuthIndex field is initialized to
	  this value.  The bfd.MetKeyIsaacRcvAuthBase field is then
	  initialized to contain the value of bfd.RcvAuthSeq, minus
	  the value of bfd.MetKeyIsaacRcvAuthIndex.  This process
	  allows the pseudorandom stream to be resynchronized in the
	  event of lost packets.
        </t>
        <t>That is, the value for bfd.MetKeyIsaacRcvAuthBase is the
	sequence number for first Auth Key used in this session.  This
	value may be from a lost packet, but can never the less be
	calculated by the receiver from a later packet.</t>
      </section>
    </section>
    <section>
      <name>Operation</name>
      <t>Once the variables have been initialized, ISAAC will be able
      to produce 256 random numbers to use as Auth Keys at near-zero
      cost.  The AuthIndex field is incremented by one for every new
      Auth Key generated.  Each new value of the Sequence Number field
      (sent or received) is then calculated by adding the relevant
      AuthBase and AuthIndex fields.</t>
      <t>When all 256 numbers are consumed, the AuthIndex field will
      wrap to zero.  The ISAAC mixing function is then run, which then
      results in another set of 256 random numbers.  The AuthBase
      variable is then incremented by 256 to indicate that 256 Auth
      Keys have been consumed.  This process then continues until a
      BFD state change.</t>
      <t>ISAAC can be thought of here as producing an infinite stream
      of numbers, based on a secret key, where the numbers are
      produced in "pages" of 256 32-bit values.  This property of
      ISAAC allows for essentially zero-cost "seeking" within a page.
      The expensive operation of mixing is performed only once per 256
      packets, which means that most BFD packet exchanges can be fast
      and efficient.</t>
      <t>The receiving party can then look at the sequence number to
      determine which particular PRNG value is being used in the
      packet.  By subtracting the bfd.MetKeyIsaacAuthBase from the
      sequence number (with possible wrapping), an expected Index can be
      derived and a corresponding Auth Key can be found.  This process thus permits
      the two parties to synchronize if/when a packet or packets are lost.</t>
      <t>Incrementing the sequence number for every packet also
      prevents the reuse of any individual pseudorandom number that
      was derived from ISAAC.</t>
      <t>The sequence number can increment without bounds, though it
      can wrap once it reaches the limit of the 32-bit counter field.
      ISAAC has a cycle length of 2<sup>8287</sup>, so there is no issue with
      using more than 2<sup>32</sup> values from it.</t>
      <t>The result of the above operation is an infinite series of
      numbers that are unguessable and that can be used to
      authenticate the sending party.</t>
      <t>Each system sending BFD packets chooses its own seed,
      generates its own sequence of pseudorandom numbers using ISAAC,
      and places those values into the Auth Key field. Each system
      receiving BFD packets runs a separate pseudorandom number
      generator and verifies that the received packets contain the
      expected Auth Key.</t>
      <section>
        <name>Page Flipping</name>
        <t>Once all 256 Auth Keys from the current page have been used,
	the next page is calculated by calling the isaac() function.
	This function modifies the current page to create the next
	page and is inherently destructive.  In order to prevent
	issues, care should be taken to perform this process
	correctly.</t>
        <t>It is <bcp14>RECOMMENDED</bcp14> that implementations keep both a current
	page and a next page associated with the ISAAC state.  The
	next page can be calculated by making a copy of the current page,
	and then calling the isaac() function.</t>
        <t>The system needs to maintain the current page at all
	times when Meticulous Keyed ISAAC Authentication is used.  The
	next page does not need to be maintained at all times, and
	can be calculated on demand.  However, in order to avoid
	impacting the fast path, the next page should be calculated in
	the background in an asynchronous manner.</t>
        <t>This process has a number of benefits. First, at 60 packets
	per second, the system has approximately four (4) seconds of
	time to calculate the next page.  If the calculation is done
	quickly, the next page is available to the fast path before
	it is needed.</t>
        <t>Second, having the next page available early means that
	an attacker cannot spoof BFD packets and force the received
	to spend significant resources calculating a next page on
	the BFD fast path.  Instead, the receiver can simply check
	the contents of the next page at near-zero cost and discard
	the spoofed packet.</t>
        <t>When the receiver determines that it needs to move to the
	next page, it can simply swap the current and next pages
	(updating the BFD variables as appropriate) and then begin
	an asynchronous calculation of the next page.  Such
	asynchronous calculations are preferable to calculating the
	next page in the BFD fast path.</t>
        <t>This document does not make provisions for dealing with the
	case of losing more than 512 packets.  Implementors <bcp14>MUST</bcp14> limit
	the value of Detect Multi to a small enough number in order to keep
	the number of lost packets within an acceptable limit.</t>
      </section>
      <section anchor="multiple_keys">
        <name>Multiple Keys</name>
        <t>In a keyed algorithm, the key is shared between the two
	systems. Distribution of this key to all the systems at the same
	time can be quite a cumbersome task. BFD sessions running a fast
	rate may require these keys to be refreshed often, which poses
	a further challenge.</t>
        <t>While the Auth Key ID field provides for the provisioning of
	multiple keys simultaneously, there is no way within the BFD
	protocol for each party to signal which set of Key IDs are
	supported.  Any such signaling or negotiation needs to be done
	"out of band" for BFD and usually via manual administrator
	configuration.</t>
        <t>The seeding mechanism for ISAAC, covered in 
	<xref target="seeding-isaac"/>, is carried out only once for a BFD
	session.  In order to rotate keys, it is <bcp14>REQUIRED</bcp14> to administratively
	disable the BFD session as part of changing the keys.  This permits the
	new session to be seeded as part of bringing up the new session.</t>
      </section>
    </section>
    <section anchor="transition-away">
      <name>Transition Away from Using ISAAC</name>
      <t>There are two ways to transition away from using ISAAC.  One
      way is via state changes: either the link goes down due to a
      fault or one party signals a state change via a packet signed
      with a more computationally intensive  authentication.  The second
      situation is where one party wishes to temporarily signal via a more
      computationally intensive method that it is still Up
      by setting the Optimized Authentication Mode field from
      value 2 to value 1.</t>
      <t>The more computationally intensive authentication type provides for full packet
      integrity checks, which serves as a stronger indication that the
      session is Up and that both parties are fully synchronized.
      This switch can be done at any time during a session.</t>
      <t>It is <bcp14>RECOMMENDED</bcp14> that implementations periodically switch to
      the more computationally intensive  authentication type for packets that maintain the
      session in the Up state.  The interval between these switches
      <bcp14>SHOULD</bcp14> be long enough that the system still gains significant
      benefit from using Meticulous Keyed ISAAC Authentication.  See
      <xref target="RFC9985"/>
      for the appropriate procedure on switching
      Optimized Authentication Mode.</t>
      <t>When switching to  the more computationally intensive authentication
      mode after ISAAC has been seeded, the Authentication Section's Sequence
      Number field will continue meticulously increasing.  In order to permit
      transition back to ISAAC as the less computationally intensive
      authentication mechanism, it is necessary for ISAAC to continue to
      generate pages appropriate for validating the received sequence
      number.</t>
      <t><xref target="RFC9985"/>
      describes the procedures that require the switch to the more
      computationally intensive authentication mode -- particularly BFD Poll
      Sequences.</t>
    </section>
    <section anchor="the-yang-model">
      <name>The YANG Module</name>
      <t>
        This YANG module adds two identities defined in this
        document to the YANG key chain model described in <xref target="RFC8177"></xref>.
        One of them uses the Meticulous Keyed MD5 as the
        more computationally intensive authentication and Meticulous Keyed ISAAC, ISAAC 
	Format as the less computationally intensive authentication. The other uses
        the Meticulous Keyed SHA-1 as the more computationally intensive authentication and
        Meticulous Keyed ISAAC, ISAAC Format as the less computationally
        intensive authentication.
      </t>
      <sourcecode markers="true" type="yang" name="ietf-bfd-met-keyed-isaac@2026-06-19.yang"><![CDATA[
module ietf-bfd-met-keyed-isaac {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-bfd-met-keyed-isaac";
  prefix bfd-mki;

  import ietf-key-chain {
    prefix key-chain;
    reference
      "RFC 8177: YANG Data Model for Key Chains.";
  }

  organization
    "IETF Bidirectional Forwarding Detection (BFD) Working Group";

  contact
    "WG Web:   <https://datatracker.ietf.org/wg/bfd>
     WG List:  <rtg-bfd@ietf.org>

     Authors: Mahesh Jethanandani (mjethanandani@gmail.com)
              Ashesh Mishra (ashesh@aalyria.com)
              Jeffrey Haas (jhaas@juniper.net)
              Alan Dekok (alan.dekok@inkbridge.io)
              Sonal Agarwal (sonal@arrcus.com).";
              
  description
    "This YANG module provides identities derived from the
     ietf-key-chain model for the experimental BFD Meticulous Keyed
     ISAAC Authentication Mechanism.

     Copyright (c) 2026 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Revised BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC 9986
     (https://www.rfc-editor.org/info/rfc9986); see the RFC itself
     for full legal notices.";

  revision 2026-06-19 {
    description
      "Initial Version.";
    reference
      "RFC 9986: Meticulous Keyed ISAAC for Bidirectional 
       Forwarding Detection (BFD) Optimized Authentication.";
  }

  identity optimized-md5-meticulous-keyed-isaac {
    base key-chain:crypto-algorithm;
    description
      "BFD Optimized Authentication using Meticulous Keyed MD5 as the
       strong authentication and Meticulous Keyed ISAAC, ISAAC Format 
       as the less computationally intensive authentication.";
    reference
      "RFC 9986: Meticulous Keyed ISAAC for Bidirectional 
       Forwarding Detection (BFD) Optimized Authentication.";
  }

  identity optimized-sha1-meticulous-keyed-isaac {
    base key-chain:crypto-algorithm;
    description
      "BFD Optimized Authentication using Meticulous Keyed SHA-1 as 
       the strong authentication and Meticulous Keyed ISAAC, ISAAC 
       Format as the less computationally intensive authentication.";
    reference
      "RFC 9986: Meticulous Keyed ISAAC for Bidirectional 
       Forwarding Detection (BFD) Optimized Authentication.";
  }
}]]></sourcecode>

    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>
        IANA has assigned two BFD Auth Types, one URI,
        and one YANG module as described in this section.
      </t>
      <section>
        <name>BFD Auth Types</name>
        <t>
          IANA has added the following two Auth Types to the "BFD
          Authentication Types" registry and to the accompanying YANG and MIB modules:
        </t>
        <ul>
          <li>
              7: Optimized MD5 Meticulous Keyed ISAAC Authentication
	    </li>
          <li>
	      8: Optimized SHA-1 Meticulous Keyed ISAAC Authentication
	    </li>
        </ul>
      </section>
      <section anchor="ietf-xml-registry">
        <name>IETF XML Registry</name>
        <t>
	  IANA has registered the following URI in the "ns"
	  registry within the "IETF XML Registry" group <xref target="RFC3688"/>:
        </t>

	<dl spacing="compact" newline="false">
	<dt>URI:</dt><dd>urn:ietf:params:xml:ns:yang:ietf-bfd-met-keyed-isaac</dd>
	<dt>Registrant Contact:</dt><dd>The IESG</dd>
	<dt>XML:</dt><dd>N/A; the requested URI is an XML namespace.</dd>
	</dl>

      </section>
      <section anchor="yang-module-names">
        <name>The YANG Module Names Registry</name>
        <t>
	  IANA has registered the following YANG module in the "YANG Module
	  Names" registry <xref target="RFC6020"/> within the "YANG Parameters" registry group:
        </t>

	<dl spacing="compact" newline="false">
	<dt>Name:</dt>
        <dd>ietf-bfd-met-keyed-isaac</dd>
	<dt>Maintained by IANA?</dt>
	<dd>N</dd>
	<dt>Namespace:</dt>
	<dd>urn:ietf:params:xml:ns:yang:ietf-bfd-met-keyed-isaac</dd>
	<dt>Prefix:</dt>
	<dd>bfd-mki</dd>
	<dt>Reference:</dt>
	<dd>RFC 9986</dd>
	</dl>

      </section>
    </section>
    <section anchor="Security">
      <name>Security Considerations</name>
      <section>
        <name>Protocol Security Considerations</name>
        <t>All security considerations of <xref target="RFC5880"/> and
	<xref target="RFC9985"/> apply to this
	document.</t>
        <t>The distribution of secret keys is typically accomplished using
	provisioning.  Secure distribution of these keys for any particular
	provisioning mechanism is out of scope for this document.</t>
        <t>Keys generated and distributed out of band for the purposes described in
	this specification are generally limited in the security they can
	provide. It is essential that these keys are selected well and
	protected when stored.</t>
        <t>The security of this proposal depends on the security of
	the ISAAC algorithm, which has had minimal analysis.  While it
	is believed that the algorithm is secure enough for this use
	case, no proof is offered.  ISAAC was chosen for the
	reasons discussed in <xref target="rationale"/>, as no other
	option was found to be suitable.</t>
        <t>The choice of ISAAC was driven in part by the limited
	functionality of systems that implement this specification.
	Many of these systems do not have hardware assistance for
	cryptographic operations, meaning that any CSPRNG based on a
	block cipher would be unsuitably slow.  Where hardware
	assistance for block ciphers is available, ISAAC offers no
	advantages over those methods.</t>
        <t>As CPUs get faster and hardware acceleration becomes more
	prevalent, more secure methods become better options.
	Alternative solutions could be AES with hardware acceleration
	in Output Feedback Mode (OFB) (see FIPS 197 and SP 800-38A), Chacha in software <xref target="RFC8439"/>, or
	other well-understood techniques.</t>
        <t>For these reasons and many others, the ISAAC CSPRNG is, at
	best, tolerable for use in this specification and is
	completely unsuitable for use in any other IETF protocol.</t>
        <t>The security of this proposal depends strongly on the
	length of the secret key and on its entropy.  It is
	<bcp14>RECOMMENDED</bcp14> that the key be 16 octets in length or more.</t>
        <t>The dependency on the secret key for security is mitigated
	through the use of two 32-bit numbers: the Your Discriminator field from
	the BFD protocol and the ISAAC Seed.  Both numbers are procedurally
	required to be random.  These numbers serve as a nonce that inhibits
	attackers from performing an offline brute-force dictionary attack to
	discover the key.
        </t>
        <section>
          <name>Spoofing</name>
<t> Meticulous Keyed ISAAC Authentication protects the session against the
spoofing of BFD Up packets and keeps the BFD session Up when it would
otherwise be reset.</t>
          <t>In the event that Meticulously Keyed ISAAC, which is operating as
	  the less computationally intensive authentication mechanism for
	  Optimized BFD, is subverted, the periodic more computationally
	  reauthentication mechanism will limit the time that the session is
	  kept inappropriately in the Up state (<xref target="RFC9985" section="5"/>).
          </t>
          <t>The Meticulous Keyed ISAAC Authentication method allows the
	  BFD endpoints to detect a malicious packet via a number of
	  different methods.  Packets that are malformed are discarded.
	  Packets that do not pass the BFD state machine <xref target="RFC5880" sectionFormat="parens" section="6.2"></xref>
	  checks are discarded.  Packets that do not have the correct
	  sequence number, Seed, and Auth Key are discarded.  These
	  discarded packets have no effect on the BFD state machine.</t>
          <t>The correlation between the sequence number and the Auth
	  Key ensures that each sequence number has a corresponding Auth
	  Key associated with it.  The structure and design of the ISAAC
	  CSPRNG ensures that each Auth Key is unique and is
	  unguessable.</t>
          <t>Performing an attack on this authentication method would require all of the following to be true:</t>
          <ul spacing="normal">
            <li>
              <t>The attacker is on-path and can perform an active attack.</t>
            </li>
            <li>
              <t>The attacker has the contents of one or more packets.</t>
            </li>
            <li>
              <t>The attacker has deduced the secret key used for ISAAC
	    and is able to correlate the sequence number to the current
	    ISAAC state.</t>
            </li>
          </ul>
          <t>These conditions are unlikely to all be true.
	  If the secret key is long and
	  complex, the search space to guess the secret key is too large to
	  discover via brute-force.  The use of the Seed and Your Discriminator
	  fields when seeding ISAAC adds 64 bits of entropy to each session,
	  which further makes offline dictionary attacks impractical. </t>
        </section>
        <section anchor="key_reuse">
          <name>Reuse of Keys</name>
          <t>The cryptographic strength of the Optimized Authentication Mode
	  methods is significantly different between SHA-1 and ISAAC.  While
	  ISAAC has had cryptanalysis and has not been shown to be
	  broken, that analysis is limited. The question then is whether
	  or not it is safe to use the same key for both
	  mechanisms (SHA-1 and ISAAC), or should we require different
	  keys for each mechanism?</t>
          <t>ISAAC is seeded not only with the secret key, but also 32 bits of
	  random data along with 32 bits of a sequence number.  The use of this
	  added randomness increases the difficulty of breaking the secret
	  key.</t>
          <t>If we recommend different keys, then it is possible for the
	  two keys to be configured differently on each side of a BFD
	  link.  For example, a correctly configured key could allow to
	  the BFD state machine to advance to Up.  Then, when the session
	  switches to using to less computationally intensive Optimized
	  Authentication Mode with a different key,
	  that key may not match and the session would immediately drop.
	  Suggesting that the keys be identical instead means that no
	  such misconfiguration is possible.</t>
          <t>If it becomes possible to recover the secret key for the Meticulous
	  Keyed ISAAC Auth Type and the same key is utilized as a key for more
	  computationally intensive authentication types, such as the MD5 and
	  SHA-1 types defined in this document, then authentication for those
	  mechanisms would be compromised.</t>
          <t>Implementations are therefore free to use the same key or
	  different keys for the Optimized Authentication Modes.  The choice to
	  use the a single secret key or distinct secret key per Optimized
	  Authentication Mode must be evaluated by the operator balancing their
	  security and operational requirements.</t>
        </section>
        <section>
          <name>Random Number Considerations</name>
          <t>BFD <xref target="RFC5880"/> and its Authentication mechanisms,
	  including  Meticulous Keyed ISAAC Authentication specified in
	  this document, make use of random numbers.  Such numbers are used in:
          </t>
          <ul spacing="compact">
            <li>Per BFD session Local Discriminators
	    (bfd.LocalDiscr - <xref target="RFC5880" section="6.8.1"/>)</li>
            <li>Initial Authentication sequence number
	    (bfd.XmitAuthSeq - <xref target="RFC5880" section="6.8.1"/>)</li>
            <li>Meticulous Keyed ISAAC Authentication, ISAAC Format Seed
	    (<xref target="meticulous_keyed_isaac"/>)</li>
          </ul>
          <t>The mechanism defined in this document creates an instance of ISAAC
	  for each BFD session seeded by that session's secret key(s) and two
	  locally generated random numbers: the session's Local Discriminator
	  echoed back in the protocol as Your Discriminator and a locally
	  generated Seed.  These random numbers are infrequently generated by
	  comparison to the use case for BFD Optimized Authentication that ISAAC
	  addresses.  Thus, stronger random number generators with better
	  guarantees of entropy can be used for these purposes.</t>
          <t>It is <bcp14>RECOMMENDED</bcp14> that these locally generated random numbers used
	  for the BFD protocol and for initializing ISAAC utilize a
	  non-ISAAC CSPRNG.</t>
          <t>Random numbers in BFD <bcp14>MUST</bcp14> come from a different source than the
	  ISAAC generator used to create per-BFD session Auth Keys.  A
	  different instance of an ISAAC generator <bcp14>MAY</bcp14> be used to create random
	  numbers for use elsewhere in BFD. In order avoid inappropriate
	  disclosure of local random number generator state, that instance <bcp14>MUST</bcp14>
	  be distinct from the generator used for per-session Auth Keys, and it
	  <bcp14>MUST NOT</bcp14> be keyed from any BFD session's secret key.</t>
        </section>
      </section>
      <section anchor="YANG_Security">
        <name>YANG Security Considerations</name>
        <t>
	  This section is modeled after the template described in 
	  <xref target="RFC9907" section="3.7.1"/>.
        </t>
        <t>
	  The "ietf-bfd-met-keyed-isaac" YANG module defines a data model that
	  is designed to be accessed via YANG-based management protocols, such
	  as the Network Configuration Protocol (NETCONF) <xref target="RFC6241"></xref> and RESTCONF <xref target="RFC8040"></xref>.
	  These YANG-based management protocols (1) have to use a secure
	  transport layer (e.g., Secure Shell (SSH) <xref target="RFC4252"></xref>,
          TLS <xref target="RFC8446"></xref>, and QUIC <xref target="RFC9000"></xref>)
	  and (2) have to use mutual authentication.
        </t>
        <t>
	  The Network Configuration Access Control Model (NACM)
	  <xref target="RFC8341"/> provides the means to restrict
	  access for particular NETCONF or RESTCONF users to a preconfigured
	  subset of all available NETCONF or RESTCONF protocol operations and
	  content.
        </t>
	<t>There are no particularly sensitive writable data nodes.</t>
	<t>There are no particularly sensitive readable data nodes.</t>
	<t>There are no particularly sensitive RPC or action operations.</t>
        <t>
	  The YANG module defines a set of identities. These identities are
	  intended to be reused by other YANG modules. The module by itself
	  does not expose any data nodes that are writable, data nodes that
	  contain read-only state, or RPCs.  As such, there are no additional
	  security issues related to the YANG module that need to be
	  considered.
        </t>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3688.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5880.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6020.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8177.xml"/>
	<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8341.xml"/>

        <reference anchor="RFC9985" target="https://www.rfc-editor.org/info/rfc9985">
          <front>
            <title>Optimizing Bidirectional Forwarding Detection (BFD) Authentication</title>
            <author initials="M." surname="Jethanandani" fullname="Mahesh Jethanandani">
              <organization>Arrcus</organization>
            </author>
            <author initials="A." surname="Mishra" fullname="Ashesh Mishra">
              <organization>Aalyria Technologies</organization>
            </author>
            <author initials="J." surname="Haas" fullname="Jeffrey Haas">
              <organization>HPE</organization>
            </author>
            <author initials="A." surname="Saxena" fullname="Ankur Saxena">
              <organization>Ciena Corporation</organization>
            </author>
            <author initials="M." surname="Bhatia" fullname="Manav Bhatia">
              <organization>Google</organization>
            </author>
            <date month='June' year='2026'/>
          </front>
          <seriesInfo name="RFC" value="9985"/>
          <seriesInfo name="DOI" value="10.17487/RFC9985"/>
        </reference>

        <reference anchor="ISAAC" target="https://www.burtleburtle.net/bob/rand/isaac.html">
          <front>
            <title>ISAAC and RC4</title>
            <author initials="R. J." surname="Jenkins" fullname="Robert J. Jenkins Jr."/>
            <date year="1996"/>
          </front>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="ISAAC-Plus" target="https://eprint.iacr.org/2006/438.pdf">
          <front>
            <title>On the pseudo-random generator ISAAC</title>
            <author initials="J-P." surname="Aumasson" fullname="Jean-Philippe Aumasson"/>
            <date year="2006"/>
          </front>
          <refcontent>Cryptology ePrint Archive, Paper 2006/438</refcontent>
        </reference>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4252.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6241.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8040.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8439.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8446.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9000.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9907.xml"/>
      </references>
    </references>

    <section anchor="Acknowledgments" numbered="false">
      <name>Acknowledgments</name>
      <t>
	The authors want to thank <contact fullname="Ketan Talaulikar"/> for his
	reviews and suggestions that have improved the document.
      </t>
    </section>

    <section anchor="contributors" numbered="false">
      <name>Contributors</name>
      <t>
	The authors of this document want to acknowledge <contact fullname="Ankur Saxena"/>
	and <contact fullname="Reshad Rahman"/> as contributors to this document.
      </t>
    </section>
  </back>
</rfc>
