<?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-04" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title abbrev="AMBI">Asymmetric Manifest Based Integrity</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-mboned-ambi-04"/>
    <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>
    <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="2022" month="March" day="07"/>
    <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-05-07.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, Max Franke, Albert Manfredi, and Amanda Baber for their very helpful comments and suggestions.</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>
            <date day="7" month="March" year="2022"/>
            <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-04"/>
        </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 838?>



  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+19e3MbR5Ln//gUHVRciBwDEB96cuY8pkjK5qwo6UTa3rnd
jYsG0ADaBLox3Q1SGFnz2S9/+ahHoylrPOONiYvj7Fok0F2VlZWV78waDAa9
Jm8W2XFyUm+Wy6yp8nFymRb5NKub5GVaZ5PkomiyWZU3m146GlXZLT17+fKi
NynHRbqkNydVOm0GedZMB8tRWWSTQboc5YP9x71J2tD3h/uHh4P9o8H+s96Y
PpiV1eY4qZtJr5evquOkqdZ1c7i//2L/sJdWWXqcvF3VvbuyuplV5Xp1nFzy
oL2bbEMfTo4ZnqrImsEZJu716iYtJv8nXdBTx8kmq3ur/Dj5j6Yc95O6rJoq
m9b022aJX/6r10vXzbysjnvJoJfQT17Ux8mfhsl35WJB4/Bnsq4/pTdZ9HFZ
zWjtN+kyzZPrbDwvykU5yzMa/aIYD/mRmqbLmuPk4Ml+8rIq08lduuEvxoS/
4+SUMFPlk1nWTy5Pkv3Dg8eP5dtyXTRAy/dF3hDKrxpCVJ2U0+RkmdGWpPxU
RhMvjpOfCK65gDUkNHwzw8fDcbmMlvRvw+R9WWfBev5ts8j8Z/8ii7mpCKBv
+L9DAilawuUweVWlxU24iMv0Q/ghr+L6++RlVi3yIhx4OeWnvskJRcNmPRjx
E8NJFsP4bVYt02LT6xUl/dLktxlRRvL+1enhwcEL/fXp0eNn+uuzw6N9+/XF
E/v1+cGzx/br0WP36ePHT/HrxeBsuH1GJjRffUxnoJi2Zj568uTQfn36/Ln+
+nj/uX36+Gjf//r8SH998uzZUwN4/9CAePrk+WMDgqdv6tu72WA9WQ3KVZOX
hOcIRN4Jd44XTYqv36XN/HSeV6tjRp5yjJ2V+zg5n07zcZ4VTXJyS+hPR0Rq
L4lA7/JJM0/O6ybHEssiocUmb7IGx5uHrXd4SHco+Weg/9qm/5AX6QaH9H0+
yvKqvOex9+tJuZgm3+G5bJLf91Q+nqfVJPl2SBASjeTrm3ue/FNe5cmb9LYi
0Bf3PPOaKPu0bOikLLYfYeo8y1Zp1SyBGzoC54tsDCabLhJCD726XK2JnSXn
xYwolY5HMQOEGQ7PbVbVYLudw169Pjl9dHV6NTBsXpZ03EoM0MeRA1lN2qMY
Q94/0l19jw+iTX2Xjm+yJpnk9Qov0pY14A75X9a0UoCcJuN0lYIFJJnfVxId
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
MoXfGF8bj1+3tutC+hRaGSvff8eJ0tYJXXxDs4oUb7lFgNkX9y5rF1WU1oNK
kLsVYUQ8YLsuO/eqLF/zt2h3iPX9/DxA5stKfZyDm6GnLgqoITk6yTp7XJrm
fdsWxrMosyUUbS+Q/jMRn6fzV4SX+CkcOhwXzortdt+A/eSnUi1nhB8JpzIc
var2LHIpgOqgKm4r3IqOSpmrsm8v2+pvu76TSCQnzuB0b60XOSec+xV1wmIy
x9U7Ua9Rt69a/IKLJoatsstWspsla2gmmuVIaIpan287KNkuZPkFPChug54b
Aj6XUwnyGJOVrTW+kMlen5fc+akzKYfrXFvjlmEWhlR/Bt9zajoB6ZN1jJSC
hzTesgWLJCaFu6NZ2wnhfAKc5ly2s0h9X/sCBdeFUMY8XUzvoQvLqrLdFs3C
B8XkJqfwRLjYdRgvuP9IaTwwgDDXCgDfAiKL1yY3nNVR3LteVXL3GBJNcPcr
V0mlrhVk1ONPOjS424/anSprVGYJ1HxJaNBCxNoRqXxiqX6qN6KoB0GCcv5m
t1aXIHY3BSlZXU1pxCcDD2ZwabDpf76LWvddUOvaVVzYlTt6kwpfOkyAEHfU
lnrmMgpvONuqsdCrJiyzTNxoyyy8mVX63ru7YXyKDwJSpAgnJ6+vT8ytzT2t
2L2UFlZvz3zX6tZTbucaNhDW7kzSQZhYYQqf2JU2Zoyh5XUF7bfkUO4Gdx4A
hlGGbMm4YQs8vGWdLuo9CZze0XLnQiooFSVVdMEH/uB/uD4q7YoQuwJvhAAc
+5LBSezpRb7MXcO/oJOgIcr19LKoGSEORSIcPvtjkrzl3u0j6wGLDV5rA5nm
jwGy03apTToCQwpm7Nv9yMSP+GT0Q3+f7xPDyoopF6dnb3z7/Btc9kHI1P5o
dblY+9bp3KqCW9kI7wjvqpXGNlK8rPe2SO4WGMAdV6mLAsj3Kd53+eTW7YwP
Ay/eI3i7H7oLoXmVcjtjgj6gW5l0/rAqbbqsR748MnnI+H6ovkBL/dH2OSeF
jO0bC1XVxtTJDqgCmNv9oiIH3UiaBsfsoq+pwUHiXTsoNCon6Hgd/pVH3bJd
383gxoRnh0f7nz7taQtbdhZ2tcKBM1mSUv2Fo1FyqbvGOs7sEQtmq3oqCuB5
nc6dXW3d05cWS5o9wcGZUO+Do3uTNb6Vk9oPr+8lHtOViMm7LcbmfNUs6hbZ
4FpQuYzt8eOnxHR+JQH50btpiOdpE1BLUvwaagmr2OJsza2NPvuNNvrX7d7Z
r9m+yfb+nbkNfHr0+BnnvfnqL7cFlvHIT7s4kCud3rV2W0CfXhTLZ34vseK1
je8Uuii1nkGiUeEWsEqpDd7sIhBUzXGQA1d/cEUlJAhui2Z9i3NtOR2qMvWo
CMsotntDS4cl7ekrwUoR12GYw64JjaScLTgqHZVmP0xvNB89xUiygJ7v/alH
wh5v3aHu+8T5ltuILnLW11ruSNzuA8ttVuK+ezy7P25xx1+9U6mOLUtvvQ7F
UrXrGoOwdNDHy6fhM6pjNjgKu9hqxrvnwN3mejqugJRtN4HEQasMOQOqy8gt
DWKvtKZ2GHGmteR66vXrr6KroPjWP6ZIOTXRpQrtBtJcjWqt6JoQAbi+/NX5
6VDvY5luzcGkaxdehW2r/N3LrC1bubNqKXfpgniRthrSeLnWQ6NrYQmdBdd9
WxI2X1qUVOui4OLp16S8SDoOG/W1XJ64lk5i65UraMDlYKJM4s+7dDMcMjTc
PeCynKxdDh03+1C/U0Y0Li1aNdkSn1jTVlEcNRQmrKiUuuX4RgqIjKPH+8xx
4Ipe8mzHiavJQvabXa71iC/FOOb/6u9mweqf4mXQP/hSw17oMNcvEDQWKXLM
X381GFRk5WE2fVA+adnQv0v+I5/8VzCgPEW0tfWzzovm6HDr0e0BiTmHI/5s
T4Jp0w8hqjmm37dGgsY58FFQ/snn6XH8Oad9bb0b90v54+cAbndR+eP9j/rW
Sn9034BcjtGKfECMngf4B3fz/+/Xf/d+WYBI+YD8/YfTt2fnycvzby/eXH2d
SDarHdhvDvcPnwz26f+eDTGeHmn/QPKxJzMNrI/zwfDg9zjnuNRDsg521lVx
jDeOudlPffxhuTgu6mMG0Ndr/p5eWhFfyj8kO/oBfSJt6BN/nyzP6J/kz/jd
xCdUJjswo38izC2w9vAWHn70U3tkbDXvV3t4fLE9OlSrFy8OnFnxeHvUtKBt
VnrYGnSebo8Z3BpEc6Ity0ByhAWubrgZ811w44tOuBMAfmyN11kocMzjOp6k
rGap60O6c3F+/Uq2g91b40YJcAd5S7gwOUn+hK7g3wnCIzbNP39Ab+6mPLYt
+Sa9Sekj3Bz8tY3F40vjD/bQ0F87p+VqU7FI3x3vJYf7By8SwEICa60KJysh
RHp8mYqFexA3w7Apg+dCbeNywgUvEN8YtHZlHbiIM0nek5lax9clQzflxksS
LUUBgFgd6IoAzY4b1CLz2vlAuQm/bxpRAzzVhVfrql6nfAFC364k1qY9GEEc
RWPSM9DWBbQe3jciGTNXSDqWNb68Okte6+N1xnsyhWIbGryPh2NbvUccqYOv
s1m6QHz1lu87qWX5lrlTysNnaoXwt7suoZrvGgparCvIA3Ts3hNMSj132Nmd
/rb+RWvJl7csLRDlv9NPNAkuv6ym40HGN3LzNHwJMX2GZ/d+jypuXhZel2w8
RYDYWwteYIHG6Ny1iYEK705/CC/kw778i44w+N2S7fE7X5nufsEA+pA4oP1v
/mVXWIs/W9enP+xjiIdkSD6UvX9oKvnDL79BHUNEvXFenr5DAc8usIC71Pfk
V1yjvtd5i7rS2ZdfpG67qRvnmmOLl8vlQJs3la1xtl+YLQ3x/kVwV54rpG9b
zUR3V1eXvq0yR77lEM9cnxwghX13Q2EX6F3DNEZy6oCE1GD/uTLCgJEkO2d8
R7rS47DNF40Bbd/b5uQS80RWWkLfuWoSgwANW5M7XrjDWHRjuJKQjmjKVBiK
/Gz1f+3u7c2MCMjX1eGKW2hHH3Ukdr6J9vB7/cjVMuD6sMw+7YKdoQ9KnS7O
wuKFKD5o2P0kUORBoMRaNRhIOIukXtnEDDFUr49uXvEYqhr2e/dxN+D3ga7A
wziTpIKuu4l2bJRP22ggMcdvx5c+ptziL6T9YM7WjsY4wTpbKmS0S/eokr96
21pJlq10THzrrpwK0RZ44eziaXGKb68mVmo/R3PW2+5wf3/fPlsXSAbaCZs4
7nzBsnzcLnzT9URsNeh0P9aiXGih1bRbgvwSNA5f0o64uVOqwsW31PQvWf7B
/m++/pVeYxEuQpwqn8VAeAOG/9Ew+ufQEHTjjRCwbYZ8wdoYjxJwFd9ZV18U
BIZCIK3bSnekMOpaYeGd4G2OuGsrMiu4Rsh1I/4qLayROl+/1vAwfArcGyZT
fo1d/GjnKyeSWi6OnS7p1r5TUBq1jiWcizwkJzFUaiZOr6wSZ8RtDeuT5ngC
/wrGl9Cym9Tzz89yfOH5+aSTZSc7l639DeQqhvWTJNDL68/I4Zib/zM35+/f
gYtfuwEX/934P/P4jvuJx4z/V+L/k3oaSBu++lo9EcnFyZuT7WQCWM/qmZxn
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
Ni3OvpY8gZle1gLQB4MBZzT3ev8XDh/4JDy2AAA=

-->

</rfc>
