<?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-01" 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="2020" month="October" day="30"/>

    <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, 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 computational overhead.</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 communicating packet “manifests” (described in <xref target="ref-manifest"/>) 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>Each manifest MUST be delivered in a way that provides cryptographic integrity guarantees of the authenticity of the manifest.
For example, TLS could be used to deliver a stream of manifests over a unicast data stream from a set of trusted senders to each receiver, or a protocol that asymmetrically signs each message could be used to transport authenticated manifests over a multicast channel.
Note that a UDP-based protocol might drop or reorder manifests while still providing authentication.</t>

<t>Upon successful verification of a manifest and receipt of any subset of the corresponding data packets, the receiver has proof of the integrity of the contents of the data packets that are listed in the manifest.</t>

<t>Authenticating the integrity of the data packets depends on:</t>

<t><list style="symbols">
  <t>the authenticity of the manifests</t>
  <t>the authenticity of the digest profile used for construction of the packet digests</t>
  <t>the difficulty of generating a collision for the packet digests contained in the manifest.</t>
</list></t>

<t>This document defines a YANG <xref target="RFC7950"/> module that augments the DORMS <xref target="I-D.draft-ietf-mboned-dorms-00"/> YANG module to provide a way to communicate a digest profile, described in <xref target="ref-profile"/>, for construction of the packet digests, described in <xref target="ref-digests"/>.
When obtaining the digest profile by using DORMS, the authenticity of the data stream relies on a trust relationship with the DORMS server, since that anchors the authenticity of the digest profile for constructing packet digests.</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, as measured in the amount of extra data required, than TESLA imposes.
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="threat-model" title="Threat Model">

<t>TBD: Summarize the applicable threat model this protects against.  A diagram plus a cleaned-up version of the on-list explanation here is probably appropriate: https://mailarchive.ietf.org/arch/msg/mboned/CG9FLjPwuno3MtvYvgNcD5p69I4/</t>

<t>Reference <xref target="RFC3552"/> https://tools.ietf.org/html/rfc3552#section-3</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>https://github.com/GrumpyOldTroll/ietf-dorms-cluster</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: https://datatracker.ietf.org/submit/note-well/</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: https://www.ietf.org/mailman/listinfo/mboned</t>
  <t>Search: https://mailarchive.ietf.org/arch/browse/mboned/</t>
</list></t>

</section>
</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-and-validation-windows" title="Buffering and Validation Windows">

<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 manifest stream and can be authenticated, 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>Once a data packet is authenticated, the corresponding packet digest can be discarded and the data packet can be further processed by the receiving application or forwarded through the receiving network.
Authenticating a data packet consumes one packet digest and prevents re-learning, with a hold-down time equal to the hold time for packet digests.
A different manifest might provide the same packet digest with the same packet sequence number, but the digest remains consumed if it has been used to authenticate a data packet.</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 SHOULD be discarded.
(Note that in some cases, packet digests can be sent redundantly in more than one manifest.
In such cases, the latest received time for an authenticated packet digest should be used for the expiration time.)</t>

<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, when using DORMS.</t>

<t>Receivers SHOULD follow the recommendations for hold times provided by the sender, subject to their capabilities and any administratively configured limits on buffer sizes at the receiver.</t>

<t>However receivers MAY deviate from the values recommended by the sender for a variety of reasons.
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 constraints on some devices.</t>

<section anchor="inter-packet-gap" title="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.
Examples of such techniques include paced chirping and pathrate.</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: there should also be a way to specify that only packets to a specific UDP port are applicable.
I think this is not quite right today and probably should be done with a grouping in the yang model, so that the profile appears either inside a “protocol” container inside the (S,G) or inside the udp-stream inside the “protocol”, but am not sure.
Follow-up on this after the first reference implementation…</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 digest profile indicates that UDP payloads are validated, the IP protocol for the packets MUST be 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 digest profile indicates that IP payloads are validated, the IP payload of the packet is used, using the outermost IP layer that contains the (S,G) corresponding to the (S,G) protected by the manifest.
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.</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 UDP payload is indicated, this value MUST be UDP (0x11).</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 a protocol that does not use source ports.</t>

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

<t>The destination port of the packet.
Zeroes if using a protocol that does not use destination ports.</t>

<t>TBD: there’s something I hate about the source and destination ports.
Maybe it should only be active in UDP-payload mode, instead of zeroes when not UDP?
But I suspect there’s a better approach than UDP-or-not, so it’s this way for now, with hopes of finding something better in the next version.</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>

<t>The payload type is configurable because when sending UDP, some legacy networks may strip the UDP option space, and it’s necessary to provide a manifest stream capable of authentication that can interoperate with these networks.
However, for non-UDP traffic or in order to authenticate the UDP options, some use cases may require support for authenticating the full IP payload.</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                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Refresh Deadline        |      Packet Digest Count      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 ... Packet Content Expansions ...             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      ... Packet Digests ...                   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

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

<t>A 32-bit unsigned integer chosen by the sender.</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="refresh-deadline" title="Refresh Deadline">

<t>A 16-bit unsigned integer number of seconds.</t>

<t>A zero value means the current digest profile for the current manifest stream is stable.</t>

<t>A nonzero value means that the authentication is transitioning to a new manifest stream, and the set of digest profiles SHOULD be refreshed by receivers that might stay joined longer than this duration, and a different manifest stream SHOULD be selected, before this many seconds have elapsed, in order to avoid a disruption.
See <xref target="transition"/>.</t>

</section>
<section anchor="packet-digest-count" title="Packet Digest Count">

<t>The count of packet digests in the manifest.</t>

</section>
<section anchor="packet-digests" title="Packet Digests">

<t>Packet digests appended one after the other, aligned to 8-bit boundaries with zero padding (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 field 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 end.</t>

<t>The receivers SHOULD use a random value between now and one half the number of seconds in the deadline field, to spread the spike of load on the DORMS server during a large multicast event.</t>

</section>
</section>
<section anchor="transport-considerations" 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: extend the ‘manifest-transport’ in the YANG model to make an extensible mechanism to advertise different transport options for receiving manifest streams.</t>

<t>TBD: add ALTA to the list when and if it gets further along <xref target="I-D.draft-krose-mboned-alta-01"/>.
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: 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.</t>

<t>An HTTPS stream carrying the ‘application/ambi’ media type is composed of a sequence of binary AMBI manifests.
It is RECOMMENDED to use Chunked encoding.</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>TBD: DTLS <xref target="RFC6347"/> can provide authentication for datagrams, so if manifests can be constructed to fit within datagrams, it is an appropriate choice.
(IPSec is similar–worth adding as an option?).</t>

<t>This option provides no native redundancy or retransmission, but packet digests can be repeated in different manifests to provide some resilience to loss.
Lost manifests that result in the loss of blocks of packet digests can be expensive, since they would make received data packets unauthenticatable.
TBD: should we therefore not support this case? (probably still worthwhile–the manifests can still contain redundant hashes)</t>

</section>
<section anchor="dtls-fecframe" title="DTLS + FECFRAME">

<t>DTLS for manifests that do not fit into single-packet payloads can still be delivered by using FECFRAME <xref target="RFC6363"/>, particularly Reed-Solomon <xref target="RFC6865"/> or possibly Raptor <xref target="RFC6681"/>.
This has some advantages compared to HTTPS because of the absence of HOL-blocking, while providing for tunable redundancy.
This has some advantages relative to DTLS because of overhead reduction and non-integer redundancy tunability (e.g. 1.5 becomes a viable redundancy factor).</t>

<t>TBD: define this method, possibly in another RFC.</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.</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:metadata/dorms:sender/dorms:group/dorms:udp-stream:
    +--rw manifest-stream* [id]
       +--rw id                     uint32
       +--rw manifest-transport*    inet:uri
       +--rw hash-algorithm         iha:hash-algorithm-type
       +--rw payload-type           enumeration
       +--rw data-hold-time-ms?     uint32
       +--rw digest-hold-time-ms?   uint32

]]></artwork></figure>

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

<figure><artwork><![CDATA[
<CODE BEGINS> file ietf-ambi@2020-10-31.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";
    }

    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 2019-08-25 {
        description "Initial revision as an extension.";
        reference
          "";
    }

    augment
      "/dorms:metadata/dorms:sender/dorms:group/dorms:udp-stream" {
        description "Definition of the manifest stream providing
            integrity info for the data stream";

        list manifest-stream {
            key id;
            description "Definition of a manifest stream.";
            leaf id {
                type uint32;
                mandatory true;
                description
                  "The Manifest ID referenced in a manifest.";
            }
            leaf-list manifest-transport {
                type inet:uri;
                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 payload-type {
                type enumeration {
                    enum udp {
                      description "The hash includes only the UDP
                          payload.";
                    }
                    enum ip {
                      description "The hash includes the full IP
                          payload.";
                    }
                }
                mandatory true;
                description "The contents of the payload for the
                    digest profile";
            }
            leaf data-hold-time-ms {
                type uint32;
                default 2000;
                description
                  "The number of milliseconds to hold data
                   packets waiting for a corresponding digest before
                   discarding";
            }
            leaf digest-hold-time-ms {
                type uint32;
                default 10000;
                description
                  "The number of milliseconds to hold packet
                   digests waiting for a corresponding data packet
                   before discarding";
            }
        }
    }
}

<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: https://www.iana.org/form/media-types</t>

<t>TBD: check guidelines in https://tools.ietf.org/html/rfc5226</t>

</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>
<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="RFC6363" target='https://www.rfc-editor.org/info/rfc6363'>
<front>
<title>Forward Error Correction (FEC) Framework</title>
<author initials='M.' surname='Watson' fullname='M. Watson'><organization /></author>
<author initials='A.' surname='Begen' fullname='A. Begen'><organization /></author>
<author initials='V.' surname='Roca' fullname='V. Roca'><organization /></author>
<date year='2011' month='October' />
<abstract><t>This document describes a framework for using Forward Error Correction (FEC) codes with applications in public and private IP networks to provide protection against packet loss.  The framework supports applying FEC to arbitrary packet flows over unreliable transport and is primarily intended for real-time, or streaming, media.  This framework can be used to define Content Delivery Protocols that provide FEC for streaming media delivery or other packet flows.  Content Delivery Protocols defined using this framework can support any FEC scheme (and associated FEC codes) that is compliant with various requirements defined in this document. Thus, Content Delivery Protocols can be defined that are not specific to a particular FEC scheme, and FEC schemes can be defined that are not specific to a particular Content Delivery Protocol.   [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='6363'/>
<seriesInfo name='DOI' value='10.17487/RFC6363'/>
</reference>



<reference  anchor="RFC6681" target='https://www.rfc-editor.org/info/rfc6681'>
<front>
<title>Raptor Forward Error Correction (FEC) Schemes for FECFRAME</title>
<author initials='M.' surname='Watson' fullname='M. Watson'><organization /></author>
<author initials='T.' surname='Stockhammer' fullname='T. Stockhammer'><organization /></author>
<author initials='M.' surname='Luby' fullname='M. Luby'><organization /></author>
<date year='2012' month='August' />
<abstract><t>This document describes Fully-Specified Forward Error Correction (FEC) Schemes for the Raptor and RaptorQ codes and their application to reliable delivery of media streams in the context of the FEC Framework.  The Raptor and RaptorQ codes are systematic codes, where a number of repair symbols are generated from a set of source symbols and sent in one or more repair flows in addition to the source symbols that are sent to the receiver(s) within a source flow.  The Raptor and RaptorQ codes offer close to optimal protection against arbitrary packet losses at a low computational complexity.  Six FEC Schemes are defined: two for the protection of arbitrary packet flows, two that are optimized for small source blocks, and two for the protection of a single flow that already contains a sequence number. Repair data may be sent over arbitrary datagram transport (e.g., UDP) or using RTP.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='6681'/>
<seriesInfo name='DOI' value='10.17487/RFC6681'/>
</reference>



<reference  anchor="RFC6865" target='https://www.rfc-editor.org/info/rfc6865'>
<front>
<title>Simple Reed-Solomon Forward Error Correction (FEC) Scheme for FECFRAME</title>
<author initials='V.' surname='Roca' fullname='V. Roca'><organization /></author>
<author initials='M.' surname='Cunche' fullname='M. Cunche'><organization /></author>
<author initials='J.' surname='Lacan' fullname='J. Lacan'><organization /></author>
<author initials='A.' surname='Bouabdallah' fullname='A. Bouabdallah'><organization /></author>
<author initials='K.' surname='Matsuzono' fullname='K. Matsuzono'><organization /></author>
<date year='2013' month='February' />
<abstract><t>This document describes a fully-specified simple Forward Error Correction (FEC) scheme for Reed-Solomon codes over the finite field (also known as the Galois Field) GF(2^^m), with 2 &lt;= m &lt;= 16, that can be used to protect arbitrary media streams along the lines defined by FECFRAME.  The Reed-Solomon codes considered have attractive properties, since they offer optimal protection against packet erasures and the source symbols are part of the encoding symbols, which can greatly simplify decoding.  However, the price to pay is a limit on the maximum source block size, on the maximum number of encoding symbols, and a computational complexity higher than that of the Low-Density Parity Check (LDPC) codes, for instance.</t></abstract>
</front>
<seriesInfo name='RFC' value='6865'/>
<seriesInfo name='DOI' value='10.17487/RFC6865'/>
</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="I-D.draft-ietf-mboned-dorms-00">
<front>
<title>Discovery Of Restconf Metadata for Source-specific multicast</title>

<author initials='J' surname='Holland' fullname='Jake Holland'>
    <organization />
</author>

<date month='March' day='11' 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'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-00' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-mboned-dorms-00.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="I-D.ietf-tsvwg-udp-options">
<front>
<title>Transport Options for UDP</title>

<author initials='J' surname='Touch' fullname='Joseph Touch'>
    <organization />
</author>

<date month='September' day='12' year='2019' />

<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-08' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-tsvwg-udp-options-08.txt' />
</reference>



<reference anchor="I-D.draft-krose-mboned-alta-01">
<front>
<title>Asymmetric Loss-Tolerant Authentication</title>

<author initials='K' surname='Rose' fullname='Kyle Rose'>
    <organization />
</author>

<author initials='J' surname='Holland' fullname='Jake Holland'>
    <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='http://www.ietf.org/internet-drafts/draft-krose-mboned-alta-01.txt' />
</reference>




    </references>




  </back>

<!-- ##markdown-source:
H4sIAGnfnV8AA919eXPbSJLv//wUFXJsWJohqcNH2+yJnpYlu1uzkq215O2d
t7vxAgSKJFogwEUBojlezWffvOoCQdvd2/1i4nEOUyBQR1ZW5i+PSoxGo0GT
N4WeqFOzWS51U+epukrKfKZNo14lRmfqomz0vM6bzSCZTmt9D/devboYZFVa
Jkt4MquTWTPKdTMbLadVqbNRspzmo6PjQZY08PvJ0cnR6Pho9ORokMKFeVVv
Jso02WCQr+qJaurWNCdHRy+PTgZJrZOJercyg3VV383rql1N1BU1OrjTG7iY
TWg8damb0Tl2PBiYJimz/5sUcNdEbbQZrPKJ+vemSofKVHVT65mBb5slfvnP
wSBpm0VVTwZqNFDwyUszUX8Zqx+rooB26BrP6y/JnY4uV/Uc5n6XLJNc3ep0
UVZFNc81tH5RpmO6xUB3upmo42dH6lVdJdk62dAPKdBvos6AMnWezfVQXZ2q
o5Pjp0/516otGyTLhzJvgOQ3DRDKqGqmTpcaliShuzR0XEzUzzCuBQ9rDGT4
fo6Xx2m1jKb0z2P1vjI6mM8/bwrtr/2DTOauhgF9T/8/hiENBmVVL5Mmv9ew
Qur9m7OT4+OX8vX5k6ffuK/Pn9ivz18c268vnj+Tr9+8fHYkX18cf/PUfn3y
lK5ejM7H22ybQddmdAR3DPJy1hnHk2fPTuzX5y9eyNenRy/s1adPjvzXF3Z0
z7755rkdHewD2zl125j79XzUZqtRtWryClYtGhoRxW2poklgS8HQRqORSqaw
NkkKzH+7yI2CrdguddmoTM/yEmjds5lHnc2s9nEXH4wH+I9KiqJaG6WTdKFq
nWqYdw0sooAK66TO8I+ZSogjkiV+X7ZFA0sJQmKVpHe6MaqpVLrQ6Z1qFhpY
0HYD9+KFtIIrZUNsQL3wY3Aj/QySwrYuI6pWuia+mW7gXmPycq7SerNqqnmd
rBbQd1FsFAwzn+XJFDh7kZgFs5lr0A4NNkSeabW0cm2pjUnmyOuwh5TRZYat
42P2FmgHKYCyAkado9zKVNU2o2o2muJDsN2WbYk/wMLBxJOy1IUZ8/Is8ywr
9GDwCMldV1mb0l3y+fRoVVcw4qV5GAyuHB1hQUuzAoGlVrDuBoaVtkRBezcM
MGkUiEhVVg0Q0eRAgCTLapgNjA7ohDMwsNf9s0uNQ8sNPN3iTbCeioYddjhG
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

-->

</rfc>

