<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.3.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-mboned-ambi-05" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="AMBI">Asymmetric Manifest Based Integrity</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-mboned-ambi-05"/>
    <author initials="J." surname="Holland" fullname="Jake Holland">
      <organization>Akamai Technologies, Inc.</organization>
      <address>
        <postal>
          <street>145 Broadway</street>
          <city>Cambridge, MA 02144</city>
          <country>United States of America</country>
        </postal>
        <email>jakeholland.net@gmail.com</email>
      </address>
    </author>
    <author initials="K." surname="Rose" fullname="Kyle Rose">
      <organization>Akamai Technologies, Inc.</organization>
      <address>
        <postal>
          <street>145 Broadway</street>
          <city>Cambridge, MA 02144</city>
          <country>United States of America</country>
        </postal>
        <email>krose@krose.org</email>
      </address>
    </author>
    <author initials="M." surname="Franke" fullname="Max Franke">
      <organization>TU Berlin</organization>
      <address>
        <postal>
          <country>Germany</country>
        </postal>
        <email>mfranke@inet.tu-berlin.de</email>
      </address>
    </author>
    <date year="2025" month="October" day="17"/>
    <area>Ops</area>
    <workgroup>Mboned</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 107?>

<t>This document defines Asymmetric Manifest-Based Integrity (AMBI).
AMBI allows each receiver or forwarder of a stream of multicast packets to check the integrity of the contents of each packet in the data stream.
AMBI operates by passing cryptographically verifiable hashes of the data packets inside manifest messages, and sending the manifests over authenticated out-of-band communication channels.</t>
    </abstract>
  </front>
  <middle>
    <?line 113?>

<section anchor="problems">
      <name>Introduction</name>
      <t>Multicast transport poses security problems that are not easily addressed by the same security mechanisms used for unicast transport.</t>
      <t>The "Introduction" sections of the documents describing TESLA <xref target="RFC4082"/>, and TESLA in SRTP <xref target="RFC4383"/>, and TESLA with ALC and NORM <xref target="RFC5776"/> present excellent overviews of the challenges unique to multicast authentication for use cases like wide scale software or video distribution with a high data transfer rate. The challenges are briefly summarized here:</t>
      <ul spacing="normal">
        <li>
          <t>A MAC based on a symmetric shared secret cannot be used because each packet has multiple receivers that do not trust each other, and using a symmetric shared secret exposes the same secret to each receiver.</t>
        </li>
        <li>
          <t>Asymmetric per-packet signatures can handle only very low bit-rates because of the transport and computational overhead associated with signature transmission and verification.</t>
        </li>
        <li>
          <t>An asymmetric signature of a larger message comprising multiple packets requires reliable receipt of all such packets, something that cannot be guaranteed in a timely manner even for protocols that do provide reliable delivery, and the retransmission of which may anyway exceed the useful lifetime for data formats that can otherwise tolerate some degree of loss.</t>
        </li>
      </ul>
      <t>Asymmetric Manifest-Based Integrity (AMBI) defines a method for receivers or middle boxes to cryptographically authenticate and verify the integrity of a stream of packets by comparing the data packets to a stream of packet "manifests" (described in <xref target="ref-manifest"/>) received via an out-of-band communication channel that provides authentication and verifiable integrity.</t>
      <t>Each manifest contains a cryptographic hash value for each packet in a sequence of packets from the data stream, hereafter called a "packet digest".
The packet digest is computed from a pseudo header that includes the packet contents as well as a manifest stream identifier. This happens according to a defined digest profile (described in <xref target="ref-profile"/>) for the data stream.</t>
      <t>Upon receipt of a packet digest inside a manifest conveyed in a secure channel and verification that it matches the hash calculated from a received multicast data packet, the receiver has proof of the integrity of that data packet.</t>
      <t>This document defines the "ietf-ambi" YANG <xref target="RFC7950"/> model in <xref target="ref-yang"/> as an extension of the "ietf-dorms" model defined in <xref target="I-D.draft-ietf-mboned-dorms"/>.
Also defined are new URI schemes for transport of manifests over TLS or DTLS, and a new media type for transport of manifests over HTTPS.
The encodings for these are defined in <xref target="ref-transport"/>.</t>
      <section anchor="comparison-with-tesla">
        <name>Comparison with TESLA</name>
        <t>AMBI and TESLA <xref target="RFC4082"/> and <xref target="RFC5776"/> attempt to achieve a similar goal of authenticating the integrity of streams of multicast packets.
AMBI imposes a higher overhead than TESLA imposes, as measured in the amount of extra data required.
In exchange, AMBI relaxes the requirement for establishing an upper bound on clock synchronization between sender and receiver, and allows for the use case of authenticating multicast traffic before forwarding it through the network, while also allowing receivers to authenticate the same traffic.
By contrast, this is not possible with TESLA because the data packets can't be authenticated until a key is disclosed, so either the middlebox has to forward data packets without first authenticating them so that the receiver has them prior to key disclosure, or the middlebox has to hold packets until the key is disclosed, at which point the receiver can no longer establish their authenticity.</t>
        <t>The other new capability is that because AMBI provides authentication information out of band, authentication can be retrofitted into some pre-existing deployments without changing the protocol of the data packets under some restrictions outlined in <xref target="ref-security"/>.
By contrast, TESLA requires a MAC to be added to each authenticated message.</t>
      </section>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in <xref target="RFC2119"/> and <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t>
      </section>
      <section anchor="notes-for-contributors-and-reviewers">
        <name>Notes for Contributors and Reviewers</name>
        <t>Note to RFC Editor: Please remove this section and its subsections before publication.</t>
        <t>This section is to provide references to make it easier to review the development and discussion on the draft so far.</t>
        <section anchor="venue">
          <name>Venues for Contribution and Discussion</name>
          <t>This document is in the Github repository at:</t>
          <t><eref target="https://github.com/GrumpyOldTroll/ietf-dorms-cluster">https://github.com/GrumpyOldTroll/ietf-dorms-cluster</eref></t>
          <t>Readers are welcome to open issues and send pull requests for this document.</t>
          <t>Please note that contributions may be merged and substantially edited, and as a reminder, please carefully consider the Note Well before contributing: <eref target="https://datatracker.ietf.org/submit/note-well/">https://datatracker.ietf.org/submit/note-well/</eref></t>
          <t>Substantial discussion of this document should take place on the MBONED working group mailing list (mboned@ietf.org).</t>
          <ul spacing="normal">
            <li>
              <t>Join: <eref target="https://www.ietf.org/mailman/listinfo/mboned">https://www.ietf.org/mailman/listinfo/mboned</eref></t>
            </li>
            <li>
              <t>Search: <eref target="https://mailarchive.ietf.org/arch/browse/mboned/">https://mailarchive.ietf.org/arch/browse/mboned/</eref></t>
            </li>
          </ul>
        </section>
        <section anchor="non-obvious-doc-choices">
          <name>Non-obvious doc choices</name>
          <ul spacing="normal">
            <li>
              <t>TBD: we need a way to assert that we provide the full set of packets for an (S,G) on all UDP ports and non-UDP protocols. Naively authenticating UDP  for specified ports and ignoring other ports means that an attacker could attack a separate UDP port by injecting traffic directed at it, potentially hitting a different application that listens on 0.0.0.0, so an (S,G) with legitimately authenticated UDP traffic on one port could be used to transport UDP-based attacks to apps on another port or protocol unless they are firewalled.  Passing traffic for an (S,G) subscription would open a new channel to such targets that otherwise would not be reachable from the internet for users behind e.g. a CPE with nat or connection-state-based firewalling.</t>
            </li>
            <li>
              <t>Dropped intent to support DTLS+FECFRAME in this spec because RFC 6363 seems incomprehensible on a few points, most notably demux strategy between repair and source ADUs, which as written seems to require specifying another layer.  So support for this will have to be a later separate RFC.  However, for future extensibility made manifest-stream into a list instead of a leaf-list so that it can be an augment target for a later YANG extension with FEC selection from the likewise-very-confusing semi-overlapping registries at <eref target="https://www.iana.org/assignments/rmt-fec-parameters/rmt-fec-parameters.xhtml">https://www.iana.org/assignments/rmt-fec-parameters/rmt-fec-parameters.xhtml</eref> defined by RFCs 5052 and 6363. See also RFC 6363, RFC 6681, and RFC 6865</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="threat-model">
      <name>Threat Model</name>
      <t>AMBI is designed to operate over the internet, under the Internet Threat Model described in <xref target="RFC3552"/>.</t>
      <t>AMBI aims to provide Data Integrity for a multicast data stream, building on the security anchors described in <xref target="anchors"/> to do so.
The aim is to enable receivers to subscribe to and receive multicast packets from a trusted sender without damage to the Systems Security (Section 2.3 of <xref target="RFC3552"/>) for those receivers or other entities.</t>
      <t>Thus, we assume there might be attackers on-path or off-path with the capability to inject or modify packets, but that the attackers have not compromised the sender or discovered any of the sender's secret keys.
We assume that an attacker may have compromised some receivers of the multicast traffic, but still aim to provide the above security properties for receivers that have not been compromised.</t>
      <t>Those sending multicast traffic to receivers that include untrusted receivers should avoid transmitting sensitive information that requires strong confidentiality guarantees, due to the risk of compromise from those receivers.
Since multicast transmits the same packets to potentially many receivers, in the presence of potentially compromised receivers confidentiality of the content cannot be assured.</t>
      <t>However, any protocol that provides encryption of the packet data before generating the packet digest can provide confidentiality against on-path passive observers who do not possess the decryption key.
This level of confidentiality can be provided by any such protocols without impact on AMBI's operation.</t>
      <section anchor="anchors">
        <name>Security Anchors</name>
        <t>Establishing the desired security properties for the multicast data packets relies on secure delivery of some other information:</t>
        <ul spacing="normal">
          <li>
            <t>Secured unicast connections (providing Data Integrity) to one or more trusted DORMS <xref target="I-D.draft-ietf-mboned-dorms"/> servers that use the AMBI extensions to the DORMS YANG model as defined in <xref target="ref-yang"/></t>
          </li>
          <li>
            <t>Secure delivery (providing Data Integrity) of a stream of manifests (<xref target="ref-manifest"/>)</t>
          </li>
        </ul>
        <t>The secured unicast connection to the DORMS server provides the Peer Entity authentication of the DORMS server that's needed to establish the Data Integrity of the data it sends.</t>
        <t>Note that DORMS provides a method for using DNS to bootstrap discovery of the DORMS server.
In contexts where secure DNS lookup cannot be provided, it's still possible to establish a secure connection to a trusted DORMS server as long as the trusted DORMS server's hostname is known to the receivers (removing the need to use DNS for that discovery).
Once the server name is known, the ordinary certificate verification of that hostname while establishing a secure https connection provides the needed security properties to anchor the rest.</t>
        <t>Receiving unauthenticated data packets and knowing how to generate packet digests from the manifest profile provided by the AMBI extensions in the DORMS metadata allows the receiver to generate packet digests based on the contents of the received packet, which can be compared against the packet digests that were securely received.</t>
        <t>Comparing the digests and finding the same answer then provides Data Integrity for the data packets that relies on one more property of the digest generation algorithm:</t>
        <ul spacing="normal">
          <li>
            <t>the difficulty of generating a collision for the packet digests contained in the manifest.</t>
          </li>
        </ul>
        <t>Taken together, successful validation of the multicast data packets proves within the above constraints that someone with control of the manifest URI streams provided by the DORMS server has verified the sending of the packets corresponding to the digests sent in that stream of manifests.</t>
        <section anchor="alternatives-and-their-requirements">
          <name>Alternatives and Their Requirements</name>
          <t>Other protocols that can provide authentication could also be used for manifest delivery if defined later in another specification.
For example a protocol that asymmetrically signs each packet, as the one defined in Section 3 of <xref target="RFC6584"/> does, would be a viable candidate for a delivery protocol for manifests that could be delivered over a multicast transport, which could have some important scalability benefits.</t>
          <t>Other methods of securely transmitting metadata equivalent to the metadata provided by the "ietf-ambi" YANG model could also be used to provide the same security guarantees with the manifest channels.
Defining other such possibilities is out of scope for this document.</t>
        </section>
      </section>
      <section anchor="system-security">
        <name>System Security</name>
        <t>By providing the means to authenticate multicast packets, AMBI aims to avoid giving attackers who can inject or modify packets the ability to attack application vulnerabilities that might be possible to exercise if those applications process the attack traffic.
Many of the entries in the Common Vulnerabilities and Exposures (CVE) list at <xref target="CVE"/> (an extensive industry-wide database of software vulnerabilities) have documented a variety of system security problems that can result from maliciously generated UDP packets.</t>
        <t>TBD: Fold in a mention of how off-path attacks are possible from most places on the internet for interdomain multicast over AMT at an ingest point, and how the multicast fanout downstream of that can make it a good target if multicast sees more use.  A diagram plus a cleaned-up version of the on-list explanation here is probably appropriate: <eref target="https://mailarchive.ietf.org/arch/msg/mboned/CG9FLjPwuno3MtvYvgNcD5p69I4/">https://mailarchive.ietf.org/arch/msg/mboned/CG9FLjPwuno3MtvYvgNcD5p69I4/</eref>.  Nightmare scenario is zero-day RCE by off-path attacker that takes over a significant number of the devices watching a major sports event.</t>
        <t>See also work-in-progress: <eref target="https://squarooticus.github.io/draft-krose-multicast-security/draft-krose-multicast-security.html">https://squarooticus.github.io/draft-krose-multicast-security/draft-krose-multicast-security.html</eref></t>
      </section>
    </section>
    <section anchor="protocol-operation">
      <name>Protocol Operation</name>
      <section anchor="overview">
        <name>Overview</name>
        <t>In order to authenticate a data packet, AMBI receivers need to hold these three pieces of information at the same time:</t>
        <ul spacing="normal">
          <li>
            <t>the data packet</t>
          </li>
          <li>
            <t>an authenticated manifest containing the packet digest for the data packet</t>
          </li>
          <li>
            <t>a digest profile defining the transformation from the data packet to its packet digest</t>
          </li>
        </ul>
        <t>The manifests are delivered as a stream of manifests over an authenticated data channel.
Manifest contents MUST be authenticated before they can be used to authenticate data packets.</t>
        <t>The manifest stream is composed of an ordered sequence of manifests that each contain an ordered sequence of packet digests, corresponding to the original packets as sent from their origin, in the same order.</t>
        <t>Note that a manifest contains potentially many packet digests, and its size can be tuned to fit within a convenient PDU (Protocol Data Unit) of the manifest transport stream.
By doing so, many packet digests for the multicast data stream can be delivered per packet of the manifest transport.
The intent is that even with unicast-based manifest transport, multicast-style efficiencies of scale can still be realized with only a relatively small unicast overhead, when manifests use a unicast transport.</t>
      </section>
      <section anchor="buffering-of-packets-and-digests">
        <name>Buffering of Packets and Digests</name>
        <t>Using different communication channels for the manifest stream and the data stream introduces a possibility of desynchronization in the timing of the received data between the different channels, so receivers hold data packets and packet digests from the manifest stream in buffers for some duration while awaiting the arrival of their counterparts.</t>
        <t>While holding a data packet, if the corresponding packet digest for that packet arrives in the secured manifest stream, the data packet is authenticated.</t>
        <t>While holding an authenticated packet digest, if the corresponding data packet arrives with a matching packet digest, the data packet is authenticated.</t>
        <t>Authenticating a data packet consumes one packet digest and prevents re-learning a digest for the same sequence number with a hold-down time equal to the hold time for packet digests.
The hold-down is necessary because a different manifest can send a duplicate packet digest for the same packet sequence number, either when repeating of packet digests is used for resilience to loss or when rotating authentication keys, so re-learning the packet digest could allow a replay of a data packet.
After authenticating a packet, the digest and any future digests for the same data packet remain consumed if it has been used to authenticate a data packet, ignoring repeated digests for the same sequence number until after the holddown timer expires.</t>
        <t>Once the data packet is authenticated it can be further processed by the receiving application or forwarded through the receiving network.</t>
        <t>If the receiver's hold duration for a data packet expires without authenticating the packet, the packet SHOULD be dropped as unauthenticated.
If the hold duration of a manifest expires, packet digests last received in that manifest MUST be discarded.</t>
        <t>When multiple digests for the same packet sequence number are received, the latest received time for an authenticated packet digest should be used for the expiration time.</t>
        <section anchor="validation-windows">
          <name>Validation Windows</name>
          <t>Since packet digests are usually smaller than the data packets, it's RECOMMENDED that senders generate and send manifests with timing such that the packet digests in a manifest will typically be received by subscribed receivers before the data packets corresponding to those digests are received.</t>
          <t>This strategy reduces the buffering requirements at receivers, at the cost of introducing some buffering of data packets at the sender, since data packets are generated before their packet digests can be added to manifests.</t>
          <t>The RECOMMENDED default hold times at receivers are:</t>
          <ul spacing="normal">
            <li>
              <t>2 seconds for data packets</t>
            </li>
            <li>
              <t>10 seconds for packet digests</t>
            </li>
          </ul>
          <t>The sender MAY recommend different values for specific data streams, in order to tune different data streams for different performance goals.
The YANG model in <xref target="ref-yang"/> provides a mechanism for senders to communicate the sender's recommendation for buffering durations.
These parameters are "data-hold-time" and "digest-hold-time", expressed in milliseconds.</t>
          <t>Receivers MAY deviate from the values recommended by the sender for a variety of reasons, including their own memory constraints or local administrative configuration (for example, it might improve user experience in some situations to hold packets longer than the server recommended when there are receiver-specific delays in the manifest stream that exceed the server's expectations).
Decreasing the buffering durations recommended by the server increases the risk of losing packets, but can be an appropriate tradeoff for specific network conditions and hardware or memory constraints on some devices.</t>
          <t>Receivers SHOULD follow the recommendations for hold times provided by the sender (including the default values from the YANG model when unspecified), subject to their capabilities and any administratively configured overrides at the receiver.</t>
        </section>
        <section anchor="preserving-inter-packet-gap">
          <name>Preserving Inter-packet Gap</name>
          <t>It's RECOMMENDED that middle boxes forwarding buffered data packets preserve the inter-packet gap between packets in the same data stream, and that receiving libraries that perform AMBI-based authentication provide mechanisms to expose the network arrival times of packets to applications.</t>
          <t>The purpose for this recommendation is to preserve the capability of receivers to use techniques for available bandwidth detection or network congestion based on observation of packet times and packet dispersal, making use of known patterns in the sending.
Examples of such techniques include those described in <xref target="PathChirp"/>, <xref target="PathRate"/>, and <xref target="WEBRC"/>.</t>
          <t>Note that this recommendation SHOULD NOT prevent the transmission of an authenticated packet because the prior packet is unauthenticated.
This recommendation only asks implementations to delay the transmission of an authenticated packet to correspond to the interpacket gap if an authenticated packet was previously transmitted and the authentication of the subsequent packet would otherwise burst the packets more quickly.</t>
          <t>This does not prevent the transmission of packets out of order according to their order of authentication, only the timing of packets that are transmitted, after authentication, in the same order they were received.</t>
          <t>For receiver applications, the time that the original packet was received from the network SHOULD be made available to the receiving application.</t>
        </section>
      </section>
      <section anchor="ref-manifest">
        <name>Manifests</name>
        <t>Each manifest has the following format:
### Manifest Layout {#manifest-layout}</t>
        <artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Manifest Stream Identifier                   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                   Manifest sequence number                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 First packet sequence number                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|T|      Packet Digest Count    | TLV Space (present iff T set) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       ... TLVs (Length=TLV Space or 0 if T unset) ...         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      ... Packet Digests ...                   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <section anchor="manifest-stream-identifier">
          <name>Manifest Stream Identifier</name>
          <t>A 32-bit unsigned integer chosen by the sender.
This value MUST be equal to the "id" field in the manifest-stream in the "ietf-ambi" model.
If a manifest is seen that does not have the expected value from the metadata provided for the manifest, the receiver MUST stop processing this manifest and disconnect from this manifest stream.
It MAY reconnect with an exponential backoff starting at 1s, or it MAY connect to an alternative manifest stream if one is known.</t>
          <section anchor="manifest-sequence-number">
            <name>Manifest Sequence Number</name>
            <t>A monotonically increasing 32-bit unsigned integer.
Each manifest sent by the sender increases this value by 1.
On overflow it wraps to 0.</t>
            <t>It's RECOMMENDED to expire the manifest stream and start a new stream for the data packets before a sequence number wrap is necessary.</t>
          </section>
          <section anchor="first-packet-sequence-number">
            <name>First Packet Sequence Number</name>
            <t>A monotonically increasing 32-bit unsigned integer.
Each packet in the data stream increases this value by 1.</t>
            <t>It's RECOMMENDED to expire the manifest stream and start a new stream for the data packets before a sequence number wrap is necessary.</t>
            <t>Note: for redundancy, especially if using a manifest stream with unreliable transport, successive manifests MAY provide duplicates of the same packet digest with the same packet sequence number, using overlapping sets of packet sequence numbers.
When received, these reset the hold timer for the listed packet digests.</t>
          </section>
          <section anchor="t-bit-tlvs-present">
            <name>T bit (TLVs Present)</name>
            <t>If 1, this indicates the TLV Length and TLV space fields are present.
If 0, this indicates neither field is present.</t>
          </section>
          <section anchor="packet-digest-count">
            <name>Packet Digest Count</name>
            <t>A 15-bit unsigned integer equal to the count of packet digests in the manifest.</t>
          </section>
          <section anchor="tlv-space">
            <name>TLV Space</name>
            <t>A 16-bit unsigned integer with the length of the TLVs section.</t>
          </section>
          <section anchor="tlvs">
            <name>TLVs</name>
            <t>These are Type-Length-Value blocks, back to back.
These may be extended by future specifications.</t>
            <t>These are composed of 3 fields:</t>
            <ul spacing="normal">
              <li>
                <t>Type: an 8-bit unsigned integer indicating the type.  Type values in 0-127 have an 8-bit length, and type values in 128-255 have a 16-bit length.</t>
              </li>
              <li>
                <t>Length: a 8-bit or 16-bit unsigned integer indicating the length of the value</t>
              </li>
              <li>
                <t>Value: a value with semantics defined by the Type field.</t>
              </li>
            </ul>
            <t>Defined values:</t>
            <table>
              <thead>
                <tr>
                  <th align="left">Type</th>
                  <th align="left">Name</th>
                  <th align="left">Value</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">0</td>
                  <td align="left">Pad</td>
                  <td align="left">Length can be 0-255. Value is filled with 0 and ignored by receiver.</td>
                </tr>
                <tr>
                  <td align="left">128</td>
                  <td align="left">Refresh Deadline</td>
                  <td align="left">Length MUST be 2.  Value is a 16-bit unsigned integer number of seconds.  When this field is absent or zero, it means the current digest profile for the current manifest stream is stable.  A nonzero value means the authentication is transitioning to a new manifest stream, and the set of digest profiles SHOULD be refreshed by receivers before this much time has elapsed in order to avoid a disruption.  See <xref target="transition"/>.</td>
                </tr>
              </tbody>
            </table>
            <t>1-120 and 129-248 are unassigned
121-127 and 249-255 are reserved for experiments</t>
            <t>Any unknown values MUST be skipped and ignored by the receiver, using the Length field to skip.</t>
            <t>The total size of the manifest in octets is exactly equal to:</t>
            <t>Size of digests * packet count + 14 if T is 0
or
Size of digests * packet count + 16 + TLV Length if T is 1</t>
            <t>The total size of the TLV space is exactly equal to:</t>
            <t>(2 + Length) summed for each TLV</t>
            <t>The total size of the TLV space MUST exactly equal TLV Length.
If the TLV space exceeds the TLV Length, the receiver MUST disconnect, and behave as if the Manifest Stream Identifier was wrong.
This state indicates a failed decoding of the TLV space.</t>
          </section>
          <section anchor="packet-digests">
            <name>Packet Digests</name>
            <t>Hash values calculated according to a specific digest profile. Packet digests are appended one after the other, aligned to 8-bit boundaries with 0-bit padding at the end if the bit length of the digests are not multiples of 8 bits.</t>
          </section>
        </section>
      </section>
      <section anchor="ref-profile">
        <name>Digest Profile</name>
        <t>A packet digest is a message digest for a data packet, built according to a digest profile defined by the sender.</t>
        <t>The digest profile is defined by the sender, and specifies:</t>
        <ol spacing="normal" type="1"><li>
            <t>A cryptographically secure hash algorithm (REQUIRED)</t>
          </li>
          <li>
            <t>A manifest stream identifier</t>
          </li>
          <li>
            <t>Whether to hash the IP payload or the UDP payload. (see <xref target="payload-type"/>)</t>
          </li>
        </ol>
        <t>The hash algorithm is applied to a pseudoheader followed by the packet payload, as determined by the digest profile.
The computed hash value is the packet digest.</t>
        <t>TBD: As recommended by <eref target="https://tools.ietf.org/html/rfc7696#section-2.2">https://tools.ietf.org/html/rfc7696#section-2.2</eref>, a companion document containing the mandatory-to-implement cipher suite should also be published separately and referenced by this document.</t>
        <section anchor="payload-type">
          <name>Payload Type</name>
          <section anchor="udp-vs-ip-payload-validation">
            <name>UDP vs. IP payload validation</name>
            <t>When the manifest definition is at the UDP layer, it applies only to packets with IP protocol of UDP (0x11) and the payload used for calculating the packet digest includes only the UDP payload with length as the number of UDP payload octets, as calculated by subtracting the size of the UDP header from the UDP payload length.</t>
            <t>When the manifest definition is at the IP layer, the payload used for calculating the packet digest includes the full IP payload of the data packets in the (S,G).
There is no restriction on the IP protocols that can be authenticated.
The length field in the pseudoheader is calculated by subtracting the IP Header Length from the IP length, and is equal to the number of octets in the payload for the digest calculation.</t>
          </section>
          <section anchor="motivation">
            <name>Motivation</name>
            <t>Full IP payloads often aren't available to receivers without extra privileges on end user operating systems, so it's useful to provide a way to authenticate only the UDP payload, which is often the only portion of the packet available to many receiving applications.</t>
            <t>However, for some use cases a full IP payload is appropriate.
For example, when retrofitting some existing protocols, some packets may be predictable or frequently repeated.
Use of an IPSec Authentication Header <xref target="RFC4302"/> is one way to disambiguate such packets.
Even though the shared secret means the Authentication Header can't itself be used to authenticate the packet contents, the sequence number in the Authentication Header can ensure that specific packets are not repeated at the IP layer, and so it's useful for AMBI to have the capability to authenticate such packets.</t>
            <t>Another example: some services might need to authenticate the UDP options <xref target="I-D.ietf-tsvwg-udp-options"/>.
When using the UDP payload, the UDP options would not be part of the authenticated payload, but would be included when using the IP payload type.</t>
            <t>Lastly, since (S,G) subscription operates at the IP layer, it's possible that some non-UDP protocols will need to be authenticated, and the IP layer allows for this.
However, most user-space transport applications are expected to use the UDP layer authentication.</t>
          </section>
        </section>
        <section anchor="pseudoheader">
          <name>Pseudoheader</name>
          <t>When calculating the hash for the packet digest, the hash algorithm is applied to a pseudoheader followed by the payload from the packet.
The complete sequence of octets used to calculate the hash is structured as follows:</t>
          <artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Source Address (32 bits IPv4/128 bits IPv6)           |
|                             ...                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Destination Address (32 bits IPv4/128 bits IPv6)        |
|                             ...                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Zeroes    |   Protocol    |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Source Port          |        Destination Port       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Manifest Stream Identifier                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Payload Data                           |
|                             ...                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
          <section anchor="source-address">
            <name>Source Address</name>
            <t>The IPv4 or IPv6 source address of the packet.</t>
          </section>
          <section anchor="destination-address">
            <name>Destination Address</name>
            <t>The IPv4 or IPv6 destination address of the packet.</t>
          </section>
          <section anchor="zeroes">
            <name>Zeroes</name>
            <t>All bits set to 0.</t>
          </section>
          <section anchor="protocol">
            <name>Protocol</name>
            <t>The IP Protocol field from IPv4, or the Next Header field for IPv6.
When using UDP-layer authentication, this value is always UDP (0x11) but for IP-layer authentication it can vary per-packet.</t>
          </section>
          <section anchor="length">
            <name>Length</name>
            <t>The length in octets of the Payload Data field, expressed as an unsigned 16-bit integer.</t>
          </section>
          <section anchor="source-port">
            <name>Source Port</name>
            <t>The source port of the packet.
Zeroes if using IP-layer authentication for a non-UDP protocol.</t>
          </section>
          <section anchor="destination-port">
            <name>Destination Port</name>
            <t>The UDP destination port of the packet.
Zeroes if using IP-layer authentication for a non-UDP protocol.</t>
          </section>
          <section anchor="manifest-stream-identifier-1">
            <name>Manifest Stream Identifier</name>
            <t>The 32-bit identifier for the manifest stream.</t>
          </section>
          <section anchor="payload">
            <name>Payload Data</name>
            <t>The payload data includes either the IP payload or the UDP payload, as indicated by the digest profile.</t>
          </section>
        </section>
      </section>
      <section anchor="transition">
        <name>Transitioning to Other Manifest Streams</name>
        <t>It's possible for multiple manifest streams authenticating the same data stream to be active at the same time.
The different manifest streams can have different hash algorithms, manifest ids, and current packet sequence numbers for the same data stream.
These result in different sets of packet digests for the same data packets, one digest per packet per digest profile.</t>
        <t>It's necessary sometimes to transition gracefully from one manifest stream to another.
The Refresh Deadline TLV from the manifest is used to signal to receivers the need to transition.</t>
        <t>When a receiver gets a nonzero refresh deadline in a manifest the sender SHOULD have an alternate manifest stream ready and available, and the receiver SHOULD learn the alternate manifest stream, join the new one, and leave the old one before the number of seconds given in the refresh deadline.
After the refresh deadline has expired, a manifest stream MAY stop transmitting and close connections from the server side.
When multiple manifest-streams are provided in the metadata, all or all but one SHOULD contain an expire-time, and new or refreshing receivers SHOULD choose a manifest stream without an expire-time, or with the latest expire-time if all manifests have an expire-time.</t>
        <t>The receivers SHOULD start the refresh after a random time delay between now and one half the number of seconds in the deadline field after the first manifest they receive containing a nonzero refresh deadline.
This time delay is to desynchronize the refresh attempts in order to spread the spike of load on the DORMS server while changing manifest profiles during a large multicast event.</t>
      </section>
    </section>
    <section anchor="ref-transport">
      <name>Transport Considerations</name>
      <section anchor="overview-1">
        <name>Overview</name>
        <t>AMBI manifests MUST be authenticated, but any transport protocol providing authentication can be used.
This section discusses several viable options for the use of an authenticating transport, and some associated design considerations.</t>
        <t>TBD: add ALTA to the list when and if it gets further along <xref target="I-D.draft-krose-mboned-alta"/>.
Sending an authenticatable multicast stream (instead of the below unicast-based proposals) is a worthwhile goal, else a 1% unicast authentication overhead becomes a new unicast limit to the scalability.</t>
        <t>TBD: probably should add quic also?  Or maybe https is sufficient?</t>
        <t>TBD: add a recommendation about scalability, like with DORMS, when using a unicast hash stream.
CDN or other kind of fanout solution that can scale the delivery, and still generally hit the time window.</t>
      </section>
      <section anchor="https">
        <name>HTTPS</name>
        <t>This document defines a new media type 'application/ambi' for use with HTTPS.  URIs in the manifest-transport list with the scheme 'https' use this transport.</t>
        <t>An HTTPS stream carrying the 'application/ambi' media type is composed of a sequence of binary AMBI manifests, sent back to back in the payload body (payload body is defined in Section 3.3 of <xref target="RFC7230"/>).</t>
        <t>Complete packet digests from partially received manifests MAY be used by the receiver for authentication of data packets from the multicast channel, even if the full manifest is not yet delivered.</t>
      </section>
      <section anchor="tls">
        <name>TLS</name>
        <t>This document defines the new uri scheme 'ambi+tls' for use with TLS <xref target="RFC8446"/>.  URIs in the manifest-transport list with the scheme 'ambi+tls' use this transport.</t>
        <t>A TLS stream carrying AMBI manifests is composed of a sequence of binary AMBI manifests, transmitted back to back.</t>
        <t>Complete packet Digests from partially received manifests MAY be used by the receiver for authentication, even if the full manifest is not yet delivered.</t>
      </section>
      <section anchor="dtls">
        <name>DTLS</name>
        <t>This document defines the new uri scheme 'ambi+dtls' for use with DTLS <xref target="RFC6347"/>.</t>
        <t>Manifests transported with DTLS have the tradeoff (relative to TLS or HTTPS) that they might be lost and not retransmitted or reordered, but they will not cause head-of-line blocking or delay in processing data packets that arrived later.
For some applications this is a worthwhile tradeoff.</t>
        <t>Note that loss of a single DTLS packet can result in the loss of multiple packet digests, which can mean failure to authenticate multiple data packets.</t>
        <t>DTLS transport for manifests supports one manifest per packet.
It's OPTIONAL to provides for some redundancy in packet digests by providing overlap in the packet sequence numbers across different manifests, thereby sending some or all packet digests multiple times to avoid loss.</t>
        <t>Future extensions might define extensions that can provide more efficient redundancy via FEC.
Those future extensions will require a different URI scheme.</t>
      </section>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <t>TBD: walk through some examples as soon as we have a build running.
Likely to need some touching up of the spec along the way...</t>
    </section>
    <section anchor="ref-yang">
      <name>YANG Module</name>
      <section anchor="tree-diagram">
        <name>Tree Diagram</name>
        <t>The tree diagram below follows the notation defined in <xref target="RFC8340"/>.</t>
        <artwork><![CDATA[
module: ietf-ambi

  augment /dorms:dorms/dorms:metadata/dorms:sender/dorms:group
            /dorms:udp-stream:
    +--rw ambi
       +--rw manifest-stream* [id]
          +--rw id                  uint32
          +--rw manifest-stream* [uri]
          |  +--rw uri    inet:uri
          +--rw hash-algorithm      iha:hash-algorithm-type
          +--rw data-hold-time?     uint32
          +--rw digest-hold-time?   uint32
          +--rw expiration?         yang:date-and-time
  augment /dorms:dorms/dorms:metadata/dorms:sender/dorms:group:
    +--rw ambi
       +--rw manifest-stream* [id]
          +--rw id                  uint32
          +--rw manifest-stream* [uri]
          |  +--rw uri    inet:uri
          +--rw hash-algorithm      iha:hash-algorithm-type
          +--rw data-hold-time?     uint32
          +--rw digest-hold-time?   uint32
          +--rw expiration?         yang:date-and-time

]]></artwork>
      </section>
      <section anchor="module">
        <name>Module</name>
        <sourcecode markers="true"><![CDATA[ file ietf-ambi@2025-10-17.yang
module ietf-ambi {
  yang-version 1.1;

  namespace "urn:ietf:params:xml:ns:yang:ietf-ambi";
  prefix "ambi";

  import ietf-dorms {
    prefix "dorms";
    reference "I-D.jholland-mboned-dorms";
  }

  import ietf-inet-types {
    prefix "inet";
    reference "RFC6991 Section 4";
  }

  import iana-hash-algs {
    prefix "iha";
    reference "draft-ietf-netconf-crypto-types";
  }

  import ietf-yang-types {
    prefix "yang";
    reference "RFC 6991: Common YANG Data Types";
  }

  organization "IETF";

  contact
      "Author:   Jake Holland
                 <mailto:jholland@akamai.com>
      ";

  description
  "Copyright (c) 2019 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 Simplified 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 XXXX
   (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
   for full legal notices.

   The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
   NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
   'MAY', and 'OPTIONAL' in this document are to be interpreted as
   described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
   they appear in all capitals, as shown here.

   This module contains the definition for the AMBI data types.
   It provides metadata for authenticating SSM channels as an
   augmentation to DORMS.";

  revision 2021-07-08 {
    description "Draft version.";
    reference
      "draft-ietf-mboned-ambi";
  }

  grouping manifest-stream-definition {
    description
        "This grouping specifies a manifest stream for
         authenticating a multicast data stream with AMBI";
    leaf id {
      type uint32;
      mandatory true;
      description
          "The Manifest ID referenced in a manifest.";
    }
    list manifest-stream {
      key uri;
      leaf uri {
        type inet:uri;
        mandatory true;
        description
            "The URI for a stream of manifests.";
      }
      description "A URI that provides a location for the
          manifest stream";
    }
    leaf hash-algorithm {
      type iha:hash-algorithm-type;
      mandatory true;
      description
          "The hash algorithm for the packet hashes within
           manifests in this stream.";
    }
    leaf data-hold-time {
      type uint32;
      default 2000;
      units "milliseconds";
      description
          "The number of milliseconds to hold data packets
           waiting for a corresponding digest before
           discarding";
    }
    leaf digest-hold-time {
      type uint32;
      default 10000;
      units "milliseconds";
      description
          "The number of milliseconds to hold packet
           digests waiting for a corresponding data packet
           before discarding";
    }
    leaf expiration {
      type yang:date-and-time;
      description
          "The time after which this manifest stream may
           stop providing authentication for the data stream.
           When not present or empty there is no known expiration.";
    }
  }

  augment
      "/dorms:dorms/dorms:metadata/dorms:sender/dorms:group/"+
      "dorms:udp-stream" {
    description "AMBI extensions for securing UDP multicast.";

    container ambi {
      description "UDP-layer AMBI container for DORMS extension.";
      list manifest-stream {
        key id;
        description "Manifest stream definition list.";
        uses manifest-stream-definition;
      }
    }
  }

  augment
      "/dorms:dorms/dorms:metadata/dorms:sender/dorms:group" {
    description "AMBI extensions for securing IP multicast.";

    container ambi {
      description "IP-layer AMBI container for DORMS extension.";
      list manifest-stream {
        key id;
        description "Definition of a manifest stream.";
        uses manifest-stream-definition;
      }
    }
  }
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <section anchor="the-yang-module-names-registry">
        <name>The YANG Module Names Registry</name>
        <t>This document adds one YANG module to the "YANG Module Names" registry maintained at &lt;https://www.iana.org/assignments/yang-parameters&gt;.
The following registrations are made, per the format in Section 14 of <xref target="RFC6020"/>:</t>
        <artwork><![CDATA[
      name:      ietf-ambi
      namespace: urn:ietf:params:xml:ns:yang:ietf-ambi
      prefix:    ambi
      reference: I-D.draft-jholland-mboned-ambi
]]></artwork>
      </section>
      <section anchor="the-xml-registry">
        <name>The XML Registry</name>
        <t>This document adds the following registration to the "ns" subregistry of the "IETF XML Registry" defined in <xref target="RFC3688"/>, referencing this document.</t>
        <artwork><![CDATA[
       URI: urn:ietf:params:xml:ns:yang:ietf-ambi
       Registrant Contact: The IESG.
       XML: N/A, the requested URI is an XML namespace.
]]></artwork>
      </section>
      <section anchor="media-type">
        <name>Media Type</name>
        <t>TBD: Register 'application/ambi' according to advice from: <eref target="https://www.iana.org/form/media-types">https://www.iana.org/form/media-types</eref></t>
        <t>TBD: check guidelines in <eref target="https://tools.ietf.org/html/rfc8126">https://tools.ietf.org/html/rfc8126</eref></t>
        <t>TBD: comments from Amanda: The first is that the current IANA Considerations RFC is RFC 8126 rather than 5226. The other point, which you may be aware of, is that while https://www.iana.org/form/media-types provides guidance, standards-tree registrations submitted through RFCs shouldn't be submitted through that form and (unlike vendor-tree subtypes and standards-tree subtypes documented in other standards organization specs) won't need to be explicitly approved by the IESG-designated experts. Instead, the advice in RFC 6838 is that media type registrations requested by IETF-stream I-Ds be informally reviewed on the media-types@iana.org mailing list, which the IESG-designated experts participate in.</t>
      </section>
      <section anchor="uri-schemes">
        <name>URI Schemes</name>
        <section anchor="tls-1">
          <name>TLS</name>
          <t>TBD: register 'ambi+tls' as a uri scheme according to advice from: <eref target="https://datatracker.ietf.org/doc/html/rfc7595">https://datatracker.ietf.org/doc/html/rfc7595</eref></t>
        </section>
        <section anchor="dtls-1">
          <name>DTLS</name>
          <t>TBD: register 'ambi+dtls' as a uri scheme according to advice from: <eref target="https://datatracker.ietf.org/doc/html/rfc7595">https://datatracker.ietf.org/doc/html/rfc7595</eref></t>
        </section>
      </section>
    </section>
    <section anchor="ref-security">
      <name>Security Considerations</name>
      <section anchor="predictable-packets">
        <name>Predictable Packets</name>
        <t>Protocols that have predictable packets run the risk of offline attacks for hash collisions against those packets.
When authenticating a protocol that might have predictable packets, it's RECOMMENDED to use a hash function secure against such attacks or to add content to the packets to make them unpredictable, such as an Authentication Header (<xref target="RFC4302"/>), or the addition of an ignored field with random content to the packet payload.</t>
        <t>TBD: explain attack from generating malicious packets and then looking for collisions, as opposed to having to generate a collision on packet contents that include a sequence number and then hitting a match.</t>
        <t>TBD: follow the rest of the guidelines: https://tools.ietf.org/html/rfc3552</t>
      </section>
      <section anchor="attacks-on-side-applications">
        <name>Attacks on Side Applications</name>
        <t>A multicast receiver subscribes to an (S,G) and if it's a UDP application, listens on a socket with a port number for packets to arrive.</t>
        <t>UDP applications sometimes bind to an "unspecified" address ("::" or "0.0.0.0") for a particular UDP port, which will make the application receive and process any packet that arrives on said port.</t>
        <t>Forwarding multicast traffic opens a new practical attack surface against receivers that have bound sockets using the "unspecified" address and were operating behind a firewall and/or NAT.
Such applications will receive traffic from the internet only after sending an outbound packet, and usually only for return packets with the reversed source and destination port and IP addresses.</t>
        <t>Multicast subscription and routing operates at the IP layer, so when a multicast receive application subscribes to a channel, traffic with the IP addresses for that channel will start arriving.
There is no selection for the UDP port at the routing layer that prevents multicast IP traffic from arriving.</t>
        <t>When an insecure application with a vulnerability is listening to a UDP port on an unspecified address, it will receive multicast packets arriving at the device and with that destination UDP port.
Although the primary problem lies in the insecure application, accepting multicast subscriptions increases the attack scope against those applications to include attackers who can inject a packet into a properly subscribed multicast stream.</t>
        <t>It's RECOMMENDED that senders using AMBI to secure their traffic include all IP traffic that they send in their DORMS metadata information, and that firewalls using AMBI to provide secure access to multicast traffic block multicast traffic destined to unsecured UDP ports on (S,G)s that have AMBI-based security for any traffic.
This mitigation prevents new forwarding of multicast traffic from providing attackers with a packet inject capability access to new attack surfaces from pre-existing insecure apps.</t>
      </section>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>Many thanks to Daniel Franke, Eric Rescorla, Christian Worm Mortensen, Albert Manfredi, and Amanda Baber for their very helpful comments and suggestions.</t>
      <t>Part of this work was supported by the Federal Ministry of Research, Technology and Space in the programme of “Souverän. Digital. Vernetzt.” Joint project 6G-RIC, project identification number: 16KISK030.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="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>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="RFC6347">
          <front>
            <title>Datagram Transport Layer Security Version 1.2</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="N. Modadugu" initials="N." surname="Modadugu"/>
            <date month="January" year="2012"/>
            <abstract>
              <t>This document specifies version 1.2 of the Datagram Transport Layer Security (DTLS) protocol. The DTLS protocol provides communications privacy for datagram protocols. The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery. The DTLS protocol is based on the Transport Layer Security (TLS) protocol and provides equivalent security guarantees. Datagram semantics of the underlying transport are preserved by the DTLS protocol. This document updates DTLS 1.0 to work with TLS version 1.2. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6347"/>
          <seriesInfo name="DOI" value="10.17487/RFC6347"/>
        </reference>
        <reference anchor="RFC7230">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document provides an overview of HTTP architecture and its associated terminology, defines the "http" and "https" Uniform Resource Identifier (URI) schemes, defines the HTTP/1.1 message syntax and parsing requirements, and describes related security concerns for implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7230"/>
          <seriesInfo name="DOI" value="10.17487/RFC7230"/>
        </reference>
        <reference anchor="RFC7950">
          <front>
            <title>The YANG 1.1 Data Modeling Language</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols. This document describes the syntax and semantics of version 1.1 of the YANG language. YANG version 1.1 is a maintenance release of the YANG language, addressing ambiguities and defects in the original specification. There are a small number of backward incompatibilities from YANG version 1. This document also specifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7950"/>
          <seriesInfo name="DOI" value="10.17487/RFC7950"/>
        </reference>
        <reference anchor="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>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8340">
          <front>
            <title>YANG Tree Diagrams</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="L. Berger" initials="L." role="editor" surname="Berger"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document captures the current syntax used in YANG module tree diagrams. The purpose of this document is to provide a single location for this definition. This syntax may be updated from time to time based on the evolution of the YANG language.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="215"/>
          <seriesInfo name="RFC" value="8340"/>
          <seriesInfo name="DOI" value="10.17487/RFC8340"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="I-D.draft-ietf-mboned-dorms">
          <front>
            <title>Discovery Of Restconf Metadata for Source-specific multicast</title>
            <author fullname="Jake Holland" initials="J." surname="Holland">
              <organization>Akamai Technologies, Inc.</organization>
            </author>
            <author fullname="Kyle Rose" initials="K." surname="Rose">
              <organization>Akamai Technologies, Inc.</organization>
            </author>
            <author fullname="Max Franke" initials="M." surname="Franke">
              <organization>TU Berlin</organization>
            </author>
            <date day="15" month="September" year="2025"/>
            <abstract>
              <t>   This document defines DORMS (Discovery Of Restconf Metadata for
   Source-specific multicast), a method to discover and retrieve
   extensible metadata about source-specific multicast channels using
   RESTCONF.  The reverse IP DNS zone for a multicast sender's IP
   address is configured to use SRV resource records to advertise the
   hostname of a RESTCONF server that publishes metadata according to a
   new YANG module with support for extensions.  A new service name and
   the new YANG module are defined.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-mboned-dorms-07"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC3552">
          <front>
            <title>Guidelines for Writing RFC Text on Security Considerations</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="B. Korver" initials="B." surname="Korver"/>
            <date month="July" year="2003"/>
            <abstract>
              <t>All RFCs are required to have a Security Considerations section. Historically, such sections have been relatively weak. This document provides guidelines to RFC authors on how to write a good Security Considerations section. 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="72"/>
          <seriesInfo name="RFC" value="3552"/>
          <seriesInfo name="DOI" value="10.17487/RFC3552"/>
        </reference>
        <reference anchor="RFC3688">
          <front>
            <title>The IETF XML Registry</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <date month="January" year="2004"/>
            <abstract>
              <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="81"/>
          <seriesInfo name="RFC" value="3688"/>
          <seriesInfo name="DOI" value="10.17487/RFC3688"/>
        </reference>
        <reference anchor="RFC4082">
          <front>
            <title>Timed Efficient Stream Loss-Tolerant Authentication (TESLA): Multicast Source Authentication Transform Introduction</title>
            <author fullname="A. Perrig" initials="A." surname="Perrig"/>
            <author fullname="D. Song" initials="D." surname="Song"/>
            <author fullname="R. Canetti" initials="R." surname="Canetti"/>
            <author fullname="J. D. Tygar" initials="J. D." surname="Tygar"/>
            <author fullname="B. Briscoe" initials="B." surname="Briscoe"/>
            <date month="June" year="2005"/>
            <abstract>
              <t>This document introduces Timed Efficient Stream Loss-tolerant Authentication (TESLA). TESLA allows all receivers to check the integrity and authenticate the source of each packet in multicast or broadcast data streams. TESLA requires no trust between receivers, uses low-cost operations per packet at both sender and receiver, can tolerate any level of loss without retransmissions, and requires no per-receiver state at the sender. TESLA can protect receivers against denial of service attacks in certain circumstances. Each receiver must be loosely time-synchronized with the source in order to verify messages, but otherwise receivers do not have to send any messages. TESLA alone cannot support non-repudiation of the data source to third parties.</t>
              <t>This informational document is intended to assist in writing standardizable and secure specifications for protocols based on TESLA in different contexts. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4082"/>
          <seriesInfo name="DOI" value="10.17487/RFC4082"/>
        </reference>
        <reference anchor="RFC4302">
          <front>
            <title>IP Authentication Header</title>
            <author fullname="S. Kent" initials="S." surname="Kent"/>
            <date month="December" year="2005"/>
            <abstract>
              <t>This document describes an updated version of the IP Authentication Header (AH), which is designed to provide authentication services in IPv4 and IPv6. This document obsoletes RFC 2402 (November 1998). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4302"/>
          <seriesInfo name="DOI" value="10.17487/RFC4302"/>
        </reference>
        <reference anchor="RFC4383">
          <front>
            <title>The Use of Timed Efficient Stream Loss-Tolerant Authentication (TESLA) in the Secure Real-time Transport Protocol (SRTP)</title>
            <author fullname="M. Baugher" initials="M." surname="Baugher"/>
            <author fullname="E. Carrara" initials="E." surname="Carrara"/>
            <date month="February" year="2006"/>
            <abstract>
              <t>This memo describes the use of the Timed Efficient Stream Loss-tolerant Authentication (RFC 4082) transform within the Secure Real-time Transport Protocol (SRTP), to provide data origin authentication for multicast and broadcast data streams. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4383"/>
          <seriesInfo name="DOI" value="10.17487/RFC4383"/>
        </reference>
        <reference anchor="RFC5776">
          <front>
            <title>Use of Timed Efficient Stream Loss-Tolerant Authentication (TESLA) in the Asynchronous Layered Coding (ALC) and NACK-Oriented Reliable Multicast (NORM) Protocols</title>
            <author fullname="V. Roca" initials="V." surname="Roca"/>
            <author fullname="A. Francillon" initials="A." surname="Francillon"/>
            <author fullname="S. Faurite" initials="S." surname="Faurite"/>
            <date month="April" year="2010"/>
            <abstract>
              <t>This document details the Timed Efficient Stream \%Loss-Tolerant Authentication (TESLA) packet source authentication and packet integrity verification protocol and its integration within the Asynchronous Layered Coding (ALC) and NACK-Oriented Reliable Multicast (NORM) content delivery protocols. This document only considers the authentication/integrity verification of the packets generated by the session's sender. The authentication and integrity verification of the packets sent by receivers, if any, is out of the scope of this document. This document defines an Experimental Protocol for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5776"/>
          <seriesInfo name="DOI" value="10.17487/RFC5776"/>
        </reference>
        <reference anchor="RFC6020">
          <front>
            <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="October" year="2010"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6020"/>
          <seriesInfo name="DOI" value="10.17487/RFC6020"/>
        </reference>
        <reference anchor="RFC6584">
          <front>
            <title>Simple Authentication Schemes for the Asynchronous Layered Coding (ALC) and NACK-Oriented Reliable Multicast (NORM) Protocols</title>
            <author fullname="V. Roca" initials="V." surname="Roca"/>
            <date month="April" year="2012"/>
            <abstract>
              <t>This document introduces four schemes that provide per-packet authentication, integrity, and anti-replay services in the context of the Asynchronous Layered Coding (ALC) and NACK-Oriented Reliable Multicast (NORM) protocols. The first scheme is based on RSA Digital Signatures. The second scheme relies on the Elliptic Curve Digital Signature Algorithm (ECDSA). The third scheme relies on a Group- keyed Message Authentication Code (MAC). Finally, the fourth scheme merges the Digital Signature and group schemes. These schemes have different target use cases, and they do not all provide the same service. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6584"/>
          <seriesInfo name="DOI" value="10.17487/RFC6584"/>
        </reference>
        <reference anchor="I-D.ietf-tsvwg-udp-options">
          <front>
            <title>Transport Options for UDP</title>
            <author fullname="Dr. Joseph D. Touch" initials="J. D." surname="Touch">
              <organization>Independent Consultant</organization>
            </author>
            <author fullname="C. M. Heard" initials="C. M." surname="Heard">
              <organization>Unaffiliated</organization>
            </author>
            <date day="16" month="March" year="2025"/>
            <abstract>
              <t>   Transport protocols are extended through the use of transport header
   options. This document updates RFC 768 (UDP) by indicating the
   location, syntax, and semantics for UDP transport layer options
   within the surplus area after the end of the UDP user data but
   before the end of the IP datagram.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tsvwg-udp-options-45"/>
        </reference>
        <reference anchor="I-D.draft-krose-mboned-alta">
          <front>
            <title>Asymmetric Loss-Tolerant Authentication</title>
            <author fullname="Kyle Rose" initials="K." surname="Rose">
              <organization>Akamai Technologies, Inc.</organization>
            </author>
            <author fullname="Jake Holland" initials="J." surname="Holland">
              <organization>Akamai Technologies, Inc.</organization>
            </author>
            <date day="8" month="July" year="2019"/>
            <abstract>
              <t>   Establishing authenticity of a stream of datagrams in the presence of
   multiple receivers is naively achieved through the use of per-packet
   asymmetric digital signatures, but at high computational cost for
   both senders and receivers.  Timed Efficient Stream Loss-Tolerant
   Authentication (TESLA) instead employs relatively cheap symmetric
   authentication, achieving asymmetry via time-delayed key disclosure,
   while adding latency to verification and imposing requirements on
   time synchronization between receivers and the sender to prevent
   forgery.  This document introduces Asymmetric Loss-Tolerant
   Authentication (ALTA), which employs an acyclic graph of message
   authentication codes (MACs) transmitted alongside data payloads, with
   redundancy to enable authentication of all received payloads in the
   presence of certain patterns of loss, along with regularly paced
   digital signatures.  ALTA requires no time synchronization and
   enables authentication of payloads as soon as sufficient
   authentication material has been received.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-krose-mboned-alta-01"/>
        </reference>
        <reference anchor="PathChirp">
          <front>
            <title>pathChirp: Efficient Available Bandwidth Estimation for Network Paths</title>
            <author initials="V. J." surname="Ribeiro" fullname="Vinay J. Ribeiro">
              <organization/>
            </author>
            <author initials="R. H." surname="Riedi" fullname="Rudolf H. Riedi">
              <organization/>
            </author>
            <author initials="R. G." surname="Baraniuk" fullname="Richard G. Baraniuk">
              <organization/>
            </author>
            <author initials="J." surname="Navratil" fullname="Jiri Navratil">
              <organization/>
            </author>
            <author initials="L." surname="Cottrell" fullname="Les Cottrell">
              <organization/>
            </author>
            <author>
              <organization>Department of Electrical and Computer Engineering Rice University</organization>
            </author>
            <author>
              <organization>SLAC/SCS-Network Monitoring, Stanford University</organization>
            </author>
            <date year="2003"/>
          </front>
        </reference>
        <reference anchor="PathRate">
          <front>
            <title>Packet dispersion techniques and a capacity estimation methodology</title>
            <author initials="C." surname="Dovrolis" fullname="Constantinos Dovrolis">
              <organization/>
            </author>
            <author initials="P." surname="Ramanathan" fullname="Parameswaran Ramanathan">
              <organization/>
            </author>
            <author initials="D." surname="Moore" fullname="David Moore">
              <organization/>
            </author>
            <date year="2004" month="December"/>
          </front>
          <seriesInfo name="IEEE/ACM Transactions on Networking, Volume 12, Issue 6, pp. 963-977." value=""/>
        </reference>
        <reference anchor="CVE" target="https://cve.mitre.org/">
          <front>
            <title>Common Vulnerabilities and Exposures</title>
            <author>
              <organization>MITRE</organization>
            </author>
            <date year="1999" month="September"/>
          </front>
        </reference>
        <reference anchor="WEBRC">
          <front>
            <title>Wave and Equation Based Rate Control Using Multicast Round Trip Time: Extended Report</title>
            <author initials="M." surname="Luby" fullname="M. Luby">
              <organization/>
            </author>
            <author initials="V." surname="Goyal" fullname="V. Goyal">
              <organization/>
            </author>
            <date year="2002" month="September"/>
          </front>
          <seriesInfo name="Digital Fountain Technical Report no. DF2002-07-001" value=""/>
        </reference>
      </references>
    </references>
    <?line 840?>



  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+19/XIbyZHn/3iKCiouRNoARFLftG88FEnN0BYlnciZWd/u
xkUDaBBtAd1wd4MUrJFjH+Tuv3uTe5N9kstfftRHA9TIs54Nx8XRuyMS6K7K
ysrK78waDAa9tmjn+ZE7btaLRd7WxdhdZGUxzZvWvciafOLOyza/rot23ctG
ozq/oWcvXpz3JtW4zBb05qTOpu2gyNvpYDGqynwyyBajYrD/uDfJ2vyoN6b/
Xlf1+sg17aTXK5b1kWvrVdMe7u8/3z/sZXWeHbk3y6Z3W9Xvr+tqtTxyFzxS
732+pg8nRwxEXebt4BSz9XpNm5WT/5HN6akjt86b3rI4cv/cVuO+a6q6rfNp
Q7+tF/jlX3u9bNXOqvqo5wY9Rz9F2Ry53w/dt9V8TuPwZ7KY32fv8+Tjqr6m
Bb/PFlnhrvLxrKzm1XWR0+jn5XjIjzQ0Xd4euYNHj92Lusomt9mavxgT0o7c
CaGjLibXed9dHLv9w4NHj+TbalW2QMt3ZdESni9bQlTjqqk7XuS0Dxk/ldPE
8yP3J4JrJmANCQ1fX+Pj4bhaJEv6w9C9q5o8Ws8f1vM8fPYPspj3NQH0Nf93
SCAlS7gYupd1Vr6PF3GRfYg/5FVcfede5PW8KOOBF1N+6uuCUDRsV4MRPzGc
5CmM3+T1IivXvV5Z0S9tcUNU6ty7lyeHBwfP9dcnDx891V+fHj7ct1+fP7Zf
nx08fWS/PnzkP3306Al+PR+cDjcPxoTma47oDJTTzswPHz8+tF+fPHumvz7a
f2afPnq4H3599lB/ffz06RMDeP/QgHjy+NkjA4Knb5ub2+vBarIcVMu2qAjP
CYi8E/7wztsMX7/N2tnJrKiXR4w8ZRM7S/+xO5tOi3GRl607viH0ZyMitRdE
oLfFpJ25s6YtsMSqdLRY9zpvcbx52GaHh/SHkn8G+q9t+vdFma1xSN8Vo7yo
qzsee7eaVPOp+xbP5ZPirqeK8SyrJ+6bIUFINFKs3t/x5O+LunCvs5uaQJ/f
8cwrouyTqqWTMt98hKnzNF9mdbsAbugInM3zMThrNneEHnp1sVwRO3Nn5TVR
Kh2P8hoQ5jg8N3ndgNduHfby1fHJg8uTy4Fh86Ki41ZhgD6OHMhq0h2FubAj
ZvtQd/Uds+V4U99m4/d56yZFs8SLtGUtuEPx5xWtFCBnbpwtM7AAl4d9JXkx
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
8z0YDDgxu9f7vxY0+kv4tgAA

-->

</rfc>
