<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.2.13 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-mboned-ambi-02" category="std">

  <front>
    <title abbrev="AMBI">Asymmetric Manifest Based Integrity</title>

    <author initials="J." surname="Holland" fullname="Jake Holland">
      <organization>Akamai Technologies, Inc.</organization>
      <address>
        <postal>
          <street>150 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>150 Broadway</street>
          <city>Cambridge, MA 02144</city>
          <country>United States of America</country>
        </postal>
        <email>krose@krose.org</email>
      </address>
    </author>

    <date year="2021" month="July" day="10"/>

    <area>Ops</area>
    <workgroup>Mboned</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<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>


<section anchor="problems" title="Introduction">

<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>

<t><list style="symbols">
  <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>
  <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>
  <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>
</list></t>

<t>Aymmetric 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 message digest (described in <xref target="ref-digests"/>) for each packet in a sequence of packets from the data stream, hereafter called a “packet digest”.
The packet digest incorporates a cryptographic hash of the packet contents and some identifying data from the packet, according to a defined digest profile for the data stream.</t>

<t>Upon receipt of a packet digest inside a manifest conveyed in a secure channel and verification that the packet digest of a received data packet matches, the receiver has proof of the integrity of the contents of the data packet corresponding to that digest.</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" title="Comparison with TESLA">

<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" title="Terminology">

<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" title="Notes for Contributors and Reviewers">

<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" title="Venues for Contribution and Discussion">

<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>

<t><list style="symbols">
  <t>Join: <eref target="https://www.ietf.org/mailman/listinfo/mboned">https://www.ietf.org/mailman/listinfo/mboned</eref></t>
  <t>Search: <eref target="https://mailarchive.ietf.org/arch/browse/mboned/">https://mailarchive.ietf.org/arch/browse/mboned/</eref></t>
</list></t>

</section>
<section anchor="non-obvious-doc-choices" title="Non-obvious doc choices">

<t><list style="symbols">
  <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>
  <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>
</list></t>

</section>
</section>
</section>
<section anchor="threat-model" title="Threat Model">

<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" title="Security Anchors">

<t>Establishing the desired security properties for the multicast data packets relies on secure delivery of some other information:</t>

<t><list style="symbols">
  <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>
  <t>Secure delivery (providing Data Integrity) of a stream of manifests (<xref target="ref-manifest"/>)</t>
</list></t>

<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>

<t><list style="symbols">
  <t>the difficulty of generating a collision for the packet digests contained in the manifest.</t>
</list></t>

<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" title="Alternatives and Their Requirements">

<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" title="System Security">

<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" title="Protocol Operation">

<section anchor="overview" title="Overview">

<t>In order to authenticate a data packet, AMBI receivers need to hold these three pieces of information at the same time:</t>

<t><list style="symbols">
  <t>the data packet</t>
  <t>an authenticated manifest containing the packet digest for the data packet</t>
  <t>a digest profile defining the transformation from the data packet to its packet digest</t>
</list></t>

<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" title="Buffering of Packets and Digests">

<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" title="Validation Windows">

<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>

<t><list style="symbols">
  <t>2 seconds for data packets</t>
  <t>10 seconds for packet digests</t>
</list></t>

<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" title="Preserving Inter-packet Gap">

<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-digests" title="Packet Digests">

<section anchor="ref-profile" title="Digest Profile">

<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>

<t><list style="numbers">
  <t>A cryptographically secure hash algorithm (REQUIRED)</t>
  <t>A manifest stream identifier</t>
  <t>Whether to hash the IP payload or the UDP payload. (see <xref target="payload-type"/>)</t>
</list></t>

<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" title="Payload Type">

<section anchor="udp-vs-ip-payload-validation" title="UDP vs. IP payload validation">

<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" title="Motivation">

<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>
<section anchor="pseudoheader" title="Pseudoheader">

<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>

<figure><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 Identifier                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Payload Data                           |
|                             ...                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<section anchor="source-address" title="Source Address">

<t>The IPv4 or IPv6 source address of the packet.</t>

</section>
<section anchor="destination-address" title="Destination Address">

<t>The IPv4 or IPv6 destination address of the packet.</t>

</section>
<section anchor="zeroes" title="Zeroes">

<t>All bits set to 0.</t>

</section>
<section anchor="protocol" title="Protocol">

<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" title="Length">

<t>The length in octets of the Payload Data field, expressed as an unsigned 16-bit integer.</t>

</section>
<section anchor="source-port" title="Source Port">

<t>The source port of the packet.
Zeroes if using IP-layer authentication for a non-UDP protocol.</t>

</section>
<section anchor="destination-port" title="Destination Port">

<t>The UDP destination port of the packet.
Zeroes if using IP-layer authentication for a non-UDP protocol.</t>

</section>
<section anchor="manifest-identifier" title="Manifest Identifier">

<t>The 32-bit identifier for the manifest stream.</t>

</section>
<section anchor="payload" title="Payload Data">

<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="ref-manifest" title="Manifests">

<section anchor="manifest-layout" title="Manifest Layout">

<figure><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></figure>

<section anchor="manifest-stream-identifier" title="Manifest Stream Identifier">

<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>
<section anchor="manifest-sequence-number" title="Manifest Sequence Number">

<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" title="First Packet Sequence Number">

<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 overapping 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" title="T bit (TLVs Present)">

<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" title="Packet Digest Count">

<t>A 15-bit unsigned integer equal to the count of packet digests in the manifest.</t>

</section>
<section anchor="tlv-space" title="TLV Space">

<t>A 16-bit unsigned integer with the length of the TLVs section.</t>

</section>
<section anchor="tlvs" title="TLVs">

<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>

<t><list style="symbols">
  <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>
  <t>Length: a 8-bit or 16-bit unsigned integer indicating the length of the value</t>
  <t>Value: a value with semantics defined by the Type field.</t>
</list></t>

<t>Defined values:</t>

<texttable>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Value</ttcol>
      <c>0</c>
      <c>Pad</c>
      <c>Length can be 0-255. Value is filled with 0 and ignored by receiver.</c>
      <c>128</c>
      <c>Refresh Deadline</c>
      <c>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"/>.</c>
</texttable>

<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
 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" title="Packet Digests">

<t>Packet digests 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="transition" title="Transitioning to Other Manifest Streams">

<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" title="Transport Considerations">

<section anchor="overview-1" title="Overview">

<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" title="HTTPS">

<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" title="TLS">

<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" title="DTLS">

<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" title="Examples">

<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" title="YANG Module">

<section anchor="tree-diagram" title="Tree Diagram">

<t>The tree diagram below follows the notation defined in <xref target="RFC8340"/>.</t>

<figure><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></figure>

</section>
<section anchor="module" title="Module">

<figure><artwork><![CDATA[
<CODE BEGINS> file ietf-ambi@2021-07-11.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;
      }
    }
  }
}
<CODE ENDS>
]]></artwork></figure>

</section>
</section>
<section anchor="iana" title="IANA Considerations">

<section anchor="the-yang-module-names-registry" title="The YANG Module Names Registry">

<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>

<figure><artwork><![CDATA[
      name:      ietf-ambi
      namespace: urn:ietf:params:xml:ns:yang:ietf-ambi
      prefix:    ambi
      reference: I-D.draft-jholland-mboned-ambi
]]></artwork></figure>

</section>
<section anchor="the-xml-registry" title="The XML Registry">

<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>

<figure><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></figure>

</section>
<section anchor="media-type" title="Media Type">

<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/rfc5226">https://tools.ietf.org/html/rfc5226</eref></t>

</section>
<section anchor="uri-schemes" title="URI Schemes">

<section anchor="tls-1" title="TLS">

<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" title="DTLS">

<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" title="Security Considerations">

<section anchor="predictable-packets" title="Predictable Packets">

<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" title="Attacks on Side Applications">

<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 appliction 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 multicst 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" title="Acknowledgements">

<t>Many thanks to Daniel Franke, Eric Rescorla, Christian Worm Mortensen, Max Franke, and Albert Manfredi for their very helpful comments and suggestions.</t>

</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference  anchor="RFC2119" target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
<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" target='https://www.rfc-editor.org/info/rfc6347'>
<front>
<title>Datagram Transport Layer Security Version 1.2</title>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'><organization /></author>
<author initials='N.' surname='Modadugu' fullname='N. Modadugu'><organization /></author>
<date year='2012' month='January' />
<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" target='https://www.rfc-editor.org/info/rfc7230'>
<front>
<title>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</title>
<author initials='R.' surname='Fielding' fullname='R. Fielding' role='editor'><organization /></author>
<author initials='J.' surname='Reschke' fullname='J. Reschke' role='editor'><organization /></author>
<date year='2014' month='June' />
<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 &quot;http&quot; and &quot;https&quot; 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" target='https://www.rfc-editor.org/info/rfc7950'>
<front>
<title>The YANG 1.1 Data Modeling Language</title>
<author initials='M.' surname='Bjorklund' fullname='M. Bjorklund' role='editor'><organization /></author>
<date year='2016' month='August' />
<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" target='https://www.rfc-editor.org/info/rfc8174'>
<front>
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
<author initials='B.' surname='Leiba' fullname='B. Leiba'><organization /></author>
<date year='2017' month='May' />
<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" target='https://www.rfc-editor.org/info/rfc8340'>
<front>
<title>YANG Tree Diagrams</title>
<author initials='M.' surname='Bjorklund' fullname='M. Bjorklund'><organization /></author>
<author initials='L.' surname='Berger' fullname='L. Berger' role='editor'><organization /></author>
<date year='2018' month='March' />
<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" target='https://www.rfc-editor.org/info/rfc8446'>
<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'><organization /></author>
<date year='2018' month='August' />
<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">
	 <organization>Akamai Technologies, Inc.</organization>
      </author>
      <date month="October" day="31" year="2020" />
      <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&#39;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-01" />
   <format type="TXT" target="https://www.ietf.org/archive/id/draft-ietf-mboned-dorms-01.txt" />
</reference>




    </references>

    <references title='Informative References'>





<reference  anchor="RFC3552" target='https://www.rfc-editor.org/info/rfc3552'>
<front>
<title>Guidelines for Writing RFC Text on Security Considerations</title>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'><organization /></author>
<author initials='B.' surname='Korver' fullname='B. Korver'><organization /></author>
<date year='2003' month='July' />
<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" target='https://www.rfc-editor.org/info/rfc3688'>
<front>
<title>The IETF XML Registry</title>
<author initials='M.' surname='Mealling' fullname='M. Mealling'><organization /></author>
<date year='2004' month='January' />
<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" target='https://www.rfc-editor.org/info/rfc4082'>
<front>
<title>Timed Efficient Stream Loss-Tolerant Authentication (TESLA): Multicast Source Authentication Transform Introduction</title>
<author initials='A.' surname='Perrig' fullname='A. Perrig'><organization /></author>
<author initials='D.' surname='Song' fullname='D. Song'><organization /></author>
<author initials='R.' surname='Canetti' fullname='R. Canetti'><organization /></author>
<author initials='J. D.' surname='Tygar' fullname='J. D. Tygar'><organization /></author>
<author initials='B.' surname='Briscoe' fullname='B. Briscoe'><organization /></author>
<date year='2005' month='June' />
<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" target='https://www.rfc-editor.org/info/rfc4302'>
<front>
<title>IP Authentication Header</title>
<author initials='S.' surname='Kent' fullname='S. Kent'><organization /></author>
<date year='2005' month='December' />
<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" target='https://www.rfc-editor.org/info/rfc4383'>
<front>
<title>The Use of Timed Efficient Stream Loss-Tolerant Authentication (TESLA) in the Secure Real-time Transport Protocol (SRTP)</title>
<author initials='M.' surname='Baugher' fullname='M. Baugher'><organization /></author>
<author initials='E.' surname='Carrara' fullname='E. Carrara'><organization /></author>
<date year='2006' month='February' />
<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" target='https://www.rfc-editor.org/info/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 initials='V.' surname='Roca' fullname='V. Roca'><organization /></author>
<author initials='A.' surname='Francillon' fullname='A. Francillon'><organization /></author>
<author initials='S.' surname='Faurite' fullname='S. Faurite'><organization /></author>
<date year='2010' month='April' />
<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" target='https://www.rfc-editor.org/info/rfc6020'>
<front>
<title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
<author initials='M.' surname='Bjorklund' fullname='M. Bjorklund' role='editor'><organization /></author>
<date year='2010' month='October' />
<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" target='https://www.rfc-editor.org/info/rfc6584'>
<front>
<title>Simple Authentication Schemes for the Asynchronous Layered Coding (ALC) and NACK-Oriented Reliable Multicast (NORM) Protocols</title>
<author initials='V.' surname='Roca' fullname='V. Roca'><organization /></author>
<date year='2012' month='April' />
<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="Joe Touch">
	 <organization>Independent consultant</organization>
      </author>
      <date month="May" day="2" year="2021" />
      <abstract>
	 <t>   Transport protocols are extended through the use of transport header
   options. This document extends UDP by indicating the location,
   syntax, and semantics for UDP transport layer options.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-tsvwg-udp-options-12" />
   <format type="TXT" target="https://www.ietf.org/archive/id/draft-ietf-tsvwg-udp-options-12.txt" />
</reference>


<reference anchor="I-D.draft-krose-mboned-alta">
   <front>
      <title>Asymmetric Loss-Tolerant Authentication</title>
      <author fullname="Kyle Rose">
	 <organization>Akamai Technologies, Inc.</organization>
      </author>
      <author fullname="Jake Holland">
	 <organization>Akamai Technologies, Inc.</organization>
      </author>
      <date month="July" day="8" 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" />
   <format type="TXT" target="https://www.ietf.org/archive/id/draft-krose-mboned-alta-01.txt" />
</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></organization>
    </author>
    <author initials="R.H." surname="Riedi" fullname="Rudolf H. Riedi">
      <organization></organization>
    </author>
    <author initials="R.G." surname="Baraniuk" fullname="Richard G. Baraniuk">
      <organization></organization>
    </author>
    <author initials="J." surname="Navratil" fullname="Jiri Navratil">
      <organization></organization>
    </author>
    <author initials="L." surname="Cottrell" fullname="Les Cottrell">
      <organization></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></organization>
    </author>
    <author initials="P." surname="Ramanathan" fullname="Parameswaran Ramanathan">
      <organization></organization>
    </author>
    <author initials="D." surname="Moore" fullname="David Moore">
      <organization></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></organization>
    </author>
    <author initials="V." surname="Goyal" fullname="V. Goyal">
      <organization></organization>
    </author>
    <date year="2002" month="September"/>
  </front>
  <seriesInfo name="Digital Fountain Technical Report no. DF2002-07-001" value=""/>
</reference>


    </references>




  </back>

<!-- ##markdown-source:
H4sIADjU62AAA+19e3MbyZHn//gUHVRciLQBiKTetG9sDknNyCtKOpEzs77d
jYsG0AB61OiGuxukYI382S9/+ahHo6mRx54Nx8XRuxoS6K7KysrKd2aNRqNB
m7dFdpKcNtvVKmvrfJpcpmU+z5o2+TptslnysmyzRZ2320E6mdTZDT17+fXL
wayalumK3pzV6bwd5Vk7H60mVZnNRulqko8OjweztKXvjw+Pj0aHT0dHh4Mp
fbCo6u1J0rSzwSBf1ydJW2+a9vjw8Dm9kNZZepK8WTeD26p+v6irzfokueRB
B++zLX04O2F46jJrR+eYeDBo2rSc/Z+0oKdOkm3WDNb5SfIfbTUdJk1Vt3U2
b+i37Qq//NdgkG7aZVWfDJLRIKGfvGxOkj+Nk2+roqBx+DNZ15/S91n0cVUv
aO3v01WaJ9fZdFlWRbXIMxr9ZTkd8yMNTZe1J8nR48Pk67pKZ7fplr+YEv5O
kjPCTJ3PFtkwuTxNCC+PHsm31aZsgZbvyrwllF+1hKgmqebJ6SqjLUn5qYwm
Lk6SHwmupYA1JjT8cYGPx9NqFS3p38bJu6rJgvX827bI/Gf/Iot5XxNAf+R/
xwTSYFBW9Spt85uMdih59+Ls+Ojouf765OGjp/rr0+OHh/br88f267Ojp4/s
14eP3KePHj3Bry9H5+NdWp3RfM0J0WI578z88PHjY/v1ybNn+uujw2f26aOH
h/7XZw/118dPnz4xgA+PDYgnj589MiB4+ra5uV2MNrP1qFq3eUVbFoHIGHHn
qWhTfP02bZdny7xenzAK9eTurd3HycV8nk/zrGyT0xvCbzqhLf+aCOU2n7XL
5KJpcyyxKhNabPI6a3HMeNhmj4d0h4N/Rvpfo6Dv8zLd4rC8yydZXld3PPZu
M6uKefItnstm+V1P5dNlWs+Sb8YEYU0sZ/P+jif/lNd58jq9qQn04o5nXhGF
nVUtUWyx+wjT+nm2Tut2BdwQKV4U2RTMLi0SQg+9ulpviK0kF+UiLzMi03IB
CDMQ8U1WN2B/vcNevTo9e3B1djUybF5WRPYVBhiC9EFWs+4oxhgPH+quvsMH
0aa+TafvszaZ5c0aL9KWtTil+V82tFKAnCbTdJ3iKCaZ31di4ctqhrO8/ZId
PSPCIxjbvKya5Ly6qasib+549i3t0iprbrFZyTtiHCUBnpZ3PH2e3uQzQkZV
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

-->

</rfc>

