<?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 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-avtcore-rtp-sframe-03" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title>RTP Payload Format for SFrame</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-avtcore-rtp-sframe-03"/>
    <author initials="P." surname="Thatcher" fullname="Peter Thatcher">
      <organization>Microsoft</organization>
      <address>
        <email>pthatcher@microsoft.com</email>
      </address>
    </author>
    <author initials="Y." surname="Fablet" fullname="Youenn Fablet">
      <organization>Apple</organization>
      <address>
        <email>youenn@apple.com</email>
      </address>
    </author>
    <author initials="A." surname="Rosenberg" fullname="Aron Rosenberg">
      <organization>Apple</organization>
      <address>
        <email>aron.rosenberg@apple.com</email>
      </address>
    </author>
    <date/>
    <area>Applications and Real-Time</area>
    <workgroup>Audio/Video Transport Core Maintenance</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 54?>

<t>This document describes the RTP payload format of SFrame, its use in SDP, and per stream key derivation.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ietf-wg-avtcore.github.io/draft-ietf-avtcore-rtp-sframe/draft-ietf-avtcore-rtp-sframe.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-avtcore-rtp-sframe/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Audio/Video Transport Core Maintenance Working Group mailing list (<eref target="mailto:avt@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/avt/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/avt/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-avtcore/draft-ietf-avtcore-rtp-sframe"/>.</t>
    </note>
  </front>
  <middle>
    <?line 58?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>SFrame <xref target="RFC9605"/> describes an end-to-end encryption and authentication mechanism
for media data in a multiparty conference call, in which central media servers (SFUs) can access the
media metadata needed to make forwarding decisions without having access to the actual media.</t>
      <t>This document describes how to packetize a media frame encrypted using SFrame into RTP packets, how to
signal support in SDP, and how to derive per SSRC SFrame keys from a common key.</t>
    </section>
    <section anchor="terminology-and-notation">
      <name>Terminology and Notation</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 BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/>
when, and only when, they appear in all capitals, as shown here.</t>
    </section>
    <section anchor="sframe-format">
      <name>SFrame format</name>
      <t>An SFrame ciphertext comprises a header and encrypted data.
The SFrame header has a size varying between 1 and 17 bytes.
The encrypted data can be of arbitrary length and is larger than the unencrypted data by a fixed overhead that depends on the encryption algorithm.
The overhead can be up to 16 bytes.</t>
      <t>As an SFrame ciphertext can be arbitrarily long, an application may decide to partition the data encrypted with SFrame
into pieces small enough that the SFrame ciphertext fits in a single RTP packet.
We call this per-packet SFrame.
This has the advantage of allowing the content to be decrypted as soon as it is received.</t>
      <t>An alternative is to encrypt the data, a media frame typically, and send the SFrame ciphertext over several RTP packets.
We call this per-frame SFrame.
This has the advantage of limiting the SFrame overhead, especially for video frames.
This alternative is also compatible with <xref target="WebRTC_Encoded_Transform"/>, which is important for backward compatibility of existing services.</t>
      <t>The RTP format presented in this document supports both alternatives.</t>
    </section>
    <section anchor="rtp-header-usage">
      <name>RTP Header Usage</name>
      <t>The general RTP payload format for SFrame is depicted below.</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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |V=2|P|X|  CC   |M|     PT      |       sequence number         |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                           timestamp                           |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |           synchronization source (SSRC) identifier            |
  +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
  |            contributing source (CSRC) identifiers             |
  |                             ....                              |
  +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
  |S E T x x x x x|                                               |
  |                                                               |
  :                       SFrame payload                          :
  |                                                               |
  |                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                               :    OPTIONAL RTP padding       |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      <t>The first byte of the RTP payload is the SFrame payload descriptor.</t>
      <t>The S bit of the SFrame payload descriptor MUST be 0 for all fragments except for the first one of the SFrame frame.</t>
      <t>The E bit of the SFrame payload descriptor MUST be 0 for all fragments except for the last one of the SFrame frame.</t>
      <t>An SFrame frame is protecting media content that can be either in a packetized format or in a raw format as defined by <xref target="WebRTC_Encoded_Transform"/>.
The T bit of the SFrame payload descriptor MUST be 0 if the fragment comes from a raw format as defined by <xref target="WebRTC_Encoded_Transform"/>.
The T bit of the SFrame payload descriptor MUST be 1 if the fragment comes from a packetized format.
All fragments of an SFrame frame MUST have the same T bit value.</t>
      <t>The 5 remaining bits of the SFrame payload descriptor are reserved for future use.
Senders MUST set them to 0 and receivers MUST ignore them.</t>
      <t>The payload type (PT) identifies the format of the media encrypted with SFrame.</t>
      <t>The SSRC, timestamp, marker bit, and CSRCs of the SFrame RTP packets MUST be the same
as those of the output of the media-format-specific packetization.
The header extensions of the SFrame RTP packets SHOULD be the same
as those of the output of the media-format-specific packetization, but some may be omitted
if it is known that the omitted header extensions do not need to be duplicated on each SFrame RTP packet.</t>
    </section>
    <section anchor="rtp-processing-of-sframe-frames">
      <name>RTP Processing of SFrame frames</name>
      <section anchor="rtp-packetization-of-sframe">
        <name>RTP Packetization of SFrame</name>
        <t>For a given SFrame frame to be sent, the following steps are done:</t>
        <ol spacing="normal" type="1"><li>
            <t>Let content be the SFrame frame payload to be sent.</t>
          </li>
          <li>
            <t>Let RTP metadata be the SFrame frame RTP metadata. It contains information such as payload type, timestamp, synchronization source, contributing sources, marker bit, header extensions, and payload origin.</t>
          </li>
          <li>
            <t>Fragment the content in a list of payloads so that RTP packets generated from them do not exceed the network maximum transmission unit size.</t>
          </li>
          <li>
            <t>For each payload in the list, run the following steps:
            </t>
            <ol spacing="normal" type="1"><li>
                <t>Let descriptor be an SFrame payload descriptor, initialized to a zero byte.</t>
              </li>
              <li>
                <t>Set the first bit S of the descriptor to 1 if the payload is first in the list and 0 otherwise.</t>
              </li>
              <li>
                <t>Set the second bit E of the descriptor to 1 if the payload is last in the list and 0 otherwise.</t>
              </li>
              <li>
                <t>Set the third bit T of the descriptor to 1 if the SFrame frame payload origin is packetized, and 0 if it is raw.</t>
              </li>
              <li>
                <t>Prepend the payload with the descriptor.</t>
              </li>
              <li>
                <t>Let packet be an RTP packet with payload.</t>
              </li>
              <li>
                <t>Set the packet's RTP header, including header extensions, using the RTP metadata.</t>
              </li>
              <li>
                <t>In particular, if the SFrame frame marker bit is set, set the RTP header marker bit to the value of the second bit E of the descriptor.</t>
              </li>
              <li>
                <t>Send the packet.</t>
              </li>
            </ol>
          </li>
        </ol>
        <t>SFrame packets can be generated either from RTP media packets or from media frames as defined by <xref target="WebRTC_Encoded_Transform"/>.
The two kinds of processing are presented below.</t>
        <section anchor="per-frame-sframe-sending">
          <name>Per-frame SFrame sending</name>
          <t>For per-frame SFrame, the following steps are done on the sender side, with a media frame as input:</t>
          <ol spacing="normal" type="1"><li>
              <t>Generate a list of RTP packets from the media frame using the media-format-specific packetizer.</t>
            </li>
            <li>
              <t>Let packet be the last RTP packet in the list.</t>
            </li>
            <li>
              <t>Let payload be an SFrame ciphertext generated from the media frame data.</t>
            </li>
            <li>
              <t>Let RTP metadata be an SFrame frame RTP metadata.</t>
            </li>
            <li>
              <t>Set the SFrame RTP metadata payload origin to raw.</t>
            </li>
            <li>
              <t>Set the SFrame RTP metadata marker bit if the packet has its marker bit set.</t>
            </li>
            <li>
              <t>Set the SFrame RTP metadata other fields (timestamp, payload type, RTP header extensions...) using the packet RTP header.</t>
            </li>
            <li>
              <t>Send the SFrame frame generated from payload and RTP metadata to the SFrame packetizer.</t>
            </li>
          </ol>
        </section>
        <section anchor="per-packet-sframe-sending">
          <name>Per-packet SFrame sending</name>
          <t>For per-packet SFrame, the following steps are done on the sender side, with a media frame as input:</t>
          <ol spacing="normal" type="1"><li>
              <t>Generate a list of RTP packets from the media frame using the media-format-specific packetizer.
The packetizer can be made aware of the SFrame overhead so that packet payloads do not get further split when doing SFrame packetization,
to get a 1-1 match between the generated RTP packets and the SFrame encrypted sent RTP packets.</t>
            </li>
            <li>
              <t>For each RTP packet in the list, run the following steps:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t>Let payload be an SFrame ciphertext generated from the RTP packet payload.</t>
                </li>
                <li>
                  <t>Let RTP metadata be an SFrame frame RTP metadata.</t>
                </li>
                <li>
                  <t>Set the SFrame RTP metadata payload origin to packetized.</t>
                </li>
                <li>
                  <t>Set the SFrame RTP metadata other fields using the packet RTP header, including the marker bit.</t>
                </li>
                <li>
                  <t>Send the SFrame frame generated from payload and RTP metadata to the SFrame packetizer.</t>
                </li>
              </ol>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="rtp-depacketization-of-sframe">
        <name>RTP depacketization of SFrame</name>
        <t>When receiving an RTP SFrame packet, the following steps are done:</t>
        <ol spacing="normal" type="1"><li>
            <t>Add the packet to the set of received RTP packets.</t>
          </li>
          <li>
            <t>Sort the set in order of the RTP sequence number.</t>
          </li>
          <li>
            <t>Search for the smallest list of RTP packets in the set such that:
            </t>
            <ol spacing="normal" type="1"><li>
                <t>The packets are consecutive in sequence number.</t>
              </li>
              <li>
                <t>The first packet of the list has its S bit set to 1.</t>
              </li>
              <li>
                <t>The last packet of the list has its E bit set to 1.</t>
              </li>
            </ol>
          </li>
          <li>
            <t>If there is no such list, abort these steps.</t>
          </li>
          <li>
            <t>Remove the selected RTP packets from the set of received RTP packets.</t>
          </li>
          <li>
            <t>If the T bits of each RTP packet of the list do not have the same value, abort these steps.</t>
          </li>
          <li>
            <t>If the payload types of each RTP packet of the list do not have the same value, abort these steps.</t>
          </li>
          <li>
            <t>For each RTP packet of the list, remove the first byte of the packet's payload.</t>
          </li>
          <li>
            <t>Let the SFrame payload be the concatenation of the payloads of each RTP packet of the list.</t>
          </li>
          <li>
            <t>Let the SFrame RTP metadata be computed from the RTP headers of the RTP packets of the list, in particular:
            </t>
            <ol spacing="normal" type="1"><li>
                <t>The RTP metadata's marker bit is set if the marker bit of the last RTP packet of the list is set.</t>
              </li>
              <li>
                <t>The RTP metadata's payload origin is packetized if the T bit value is 1 and raw otherwise.</t>
              </li>
            </ol>
          </li>
          <li>
            <t>Decrypt the SFrame payload to obtain the media decrypted data. If decryption fails, abort these steps.</t>
          </li>
          <li>
            <t>If the frame RTP metadata payload origin is raw, i.e., the T bits of each RTP packet of the list are 0, send the media frame created from the media decrypted data and SFrame RTP metadata to the receiving pipeline.</t>
          </li>
          <li>
            <t>Otherwise, run the following sub-steps:
            </t>
            <ol spacing="normal" type="1"><li>
                <t>Let depacketizer be a media-format-specific depacketizer selected from the frame payload type.</t>
              </li>
              <li>
                <t>Send the media decrypted data and SFrame RTP metadata to the depacketizer.</t>
              </li>
              <li>
                <t>If the depacketizer generates a media frame, send the media frame to the receiving pipeline.</t>
              </li>
            </ol>
          </li>
        </ol>
        <t>Errors like inconsistent T bits, inconsistent payload types or decryption failures cause depacketization to fail and the corresponding frame to be discarded.
The receiver SHOULD treat a discarded frame as a lost/corrupted frame and rely on its normal recovery mechanisms (e.g., PLI/FIR for video) even though no RTP packet was lost.</t>
      </section>
      <section anchor="sframe-metadata">
        <name>SFrame metadata</name>
        <t>The SFrame AEAD encryption and decryption operations of <xref target="RFC9605"/> take a <tt>metadata</tt> input, which is authenticated as part of the AAD along with the SFrame header but is not transmitted in the SFrame ciphertext.
This metadata is unrelated to the RTP metadata used in the packetization algorithms above.</t>
        <t>By default, the <tt>metadata</tt> input for the SFrame encryption and decryption operations is empty.
RTP header fields and header extension values can be modified by RTP middleboxes such as SFUs, and some are not identical across the RTP packets of a frame.
Applications that want to use a non-empty SFrame metadata need to define how it is made available to both sender and receiver out of band of the RTP headers.</t>
      </section>
    </section>
    <section anchor="sframe-sdp-negotiation">
      <name>SFrame SDP negotiation</name>
      <t>SFrame packetization is indicated via a new "a=sframe" SDP attribute defined in this specification.
This attribute is used at media level, it does not appear at session level.</t>
      <t>The presence of the "a=sframe" attribute in a media section indicates that the media carried by the RTP packets of the media section is encrypted with SFrame in both directions.
An answerer that supports SFrame includes the attribute in its answer only if it was present in the offer.
An answerer that requires SFrame MUST reject m-sections that do not have the "a=sframe" SDP attribute.
If the offer contains "a=sframe" and the answer does not, the offerer MUST NOT send media for that m-section and MUST NOT fall back to sending unencrypted RTP.
The offerer MUST also discard any RTP received for that m-section and SHOULD close it in subsequent offers.
If an m-section has the "a=sframe" SDP attribute in an offer, it MUST appear in any reoffer unless the m-section is closed.</t>
      <t>When SFrame is in use for that media section, it will apply to the relevant media encodings defined for that media section.
This includes RTP payload types bound to media packetizers and media depacketizers as defined in <xref target="RFC7656"/>, typically audio formats such as Opus and RTP video formats such as H264.
This notably includes RTP payload types representing <xref target="WebRTC_Encoded_Transform"/> <eref target="https://w3c.github.io/webrtc-encoded-transform/#dom-rtcencodedvideoframe-data">encoded video frame formats</eref> and <eref target="https://w3c.github.io/webrtc-encoded-transform/#dom-rtcencodedaudioframe-data">encoded audio frame formats</eref>.</t>
      <t>This does not include RTP-Based Redundancy mechanisms as defined in <xref target="RFC7656"/>.
For instance, RTX defined in <xref target="RFC4588"/> will retransmit SFrame-based packets.
Forward error correction formats as defined in <xref target="RFC5109"/> will protect the encrypted content.
For Redundant Audio Data, known as RED, as defined in <xref target="RFC2198"/>, a RED packetizer will take as input SFrame encrypted media data instead of unencrypted media data.</t>
      <t>If BUNDLE is in use and the "a=sframe" attribute is present for a media section but not for another media section of the same BUNDLE,
payload types for media encodings that are relevant for SFrame MUST NOT be reused between the two media sections.</t>
      <t>Here is an example of SFrame being negotiated for audio (opus and CN) and for video (H264 and VP8):</t>
      <artwork><![CDATA[
m=audio 50000 RTP/SAVPF 10 11
a=sframe
a=rtpmap:10 opus/48000/2
a=rtpmap:11 CN/8000

m=video 50002 RTP/SAVPF 100 101
a=sframe
a=rtpmap:100 H264/90000
a=rtpmap:101 VP8/90000
]]></artwork>
    </section>
    <section anchor="sframe-sdp-rtp-key-management">
      <name>SFrame SDP RTP Key Management</name>
      <t>When SFrame is used with SDP and specifies RTP as the media transport, an additional key derivation step MAY be applied to produce a unique key per SSRC for a m= line.
The resulting per SSRC stream key is used as the initial key in the session for that SSRC and becomes the input to the SFrame <tt>derive_key_salt</tt> function.</t>
      <t>This initial derivation step starts with the <tt>base_key</tt> of the session. Then, each SSRC stream involved in the SDP session, MUST perform this derivation step to produce
the initial SFrame <tt>ssrc_key</tt> for that stream in the SDP session. This step is performed using HMAC-based Key Derivation Function (HKDF) <xref target="RFC5869"/> as follows:</t>
      <artwork><![CDATA[
ssrc_key = HKDF-Expand(HKDF-Extract(SSRC, base_key),
                       "SFrame 1.0 RTP Stream", CipherSuite.Nh)
]]></artwork>
      <t>In the derivation of ssrc_key:</t>
      <ul spacing="normal">
        <li>
          <t>The SSRC is encoded as a 4-byte big-endian byte sequence and passed as the salt value to HKDF-Extract.</t>
        </li>
        <li>
          <t>The same CipherSuite is used for this step as for the per packet / frame step the resulting key will be used with.</t>
        </li>
      </ul>
    </section>
    <section anchor="sframe-ratcheting-with-per-ssrc-keys">
      <name>SFrame Ratcheting with per SSRC keys</name>
      <t>If ratcheting is used with this per SSRC key derivation algorithm, the per SSRC key derivation step MUST be done once at the start of the session, and then each subsequent
ratchet is done on the per SSRC specific keys using the SFrame ratcheting algorithm described in section 5.1 of <xref target="RFC9605"/>.
In this per SSRC key derivation algorithm, the same algorithm defined in section 5.1 of <xref target="RFC9605"/> is used to produce the KID from the key_generation and ratchet_steps inputs. This results in all streams using the same KID, but different keys.
Each stream maintains its own CTR value, so the same CTR value can be used by several streams.
Since the keys are different, this does not result in nonce reuse.</t>
      <t>This results in a key tree that looks like the following for an offer that has three different SSRC's a, b, and c.</t>
      <artwork><![CDATA[
+--------+
|base_key|
+---+----+ Initial
    |     Derivation       Ratchet 1               Ratchet N
    |    +----------+   +-------------+         +-------------+
    |--->|ssrc_key_a|-->|ssrc_key_a[1]|-->...-->|ssrc_key_a[N]|
    |    +----------+   +-------------+         +-------------+
    |    +----------+   +-------------+         +-------------+
    |--->|ssrc_key_b|-->|ssrc_key_b[1]|-->...-->|ssrc_key_b[N]|
    |    +----------+   +-------------+         +-------------+
    |    +----------+   +-------------+         +-------------+
    +--->|ssrc_key_c|-->|ssrc_key_c[1]|-->...-->|ssrc_key_c[N]|
         +----------+   +-------------+         +-------------+
]]></artwork>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This document is subject to the security considerations of SFrame <xref target="RFC9605"/>.
How keys are established and distributed between endpoints is out of scope of this document.</t>
      <section anchor="scope-of-sframe-protection">
        <name>Scope of SFrame Protection</name>
        <t>SFrame provides end-to-end confidentiality and integrity of the media payload only.
The RTP header, RTP header extensions, CSRCs and the SFrame payload descriptor are not protected end-to-end by SFrame.
RTCP is not protected by SFrame.
Hop-by-hop protection mechanisms, for instance SRTP <xref target="RFC3711"/> and cryptex <xref target="RFC9335"/>, are still needed to protect these fields from attackers on the network path.
SRTP alone does not encrypt RTP header extensions, which can be done using cryptex.
These mechanisms are terminated at each middlebox, which can still access and modify these fields.</t>
      </section>
      <section anchor="unauthenticated-sframe-payload-descriptor">
        <name>Unauthenticated SFrame Payload Descriptor</name>
        <t>The S, E and T bits of the SFrame payload descriptor are not covered by the SFrame authentication.
A middlebox modifying the S or E bits can prevent a frame from being reassembled, or can cause RTP packets of different frames to be reassembled together.
In the latter case, SFrame decryption fails and the frame is discarded, which is a denial of service but does not compromise the media content.</t>
        <t>A middlebox modifying the T bit of all packets of a frame does not cause SFrame decryption to fail.
The authentic decrypted data is then processed either as a raw media frame or as a packetized payload, depending on the T bit value chosen by the middlebox.
Receivers cannot expect that the decrypted data is well-formed for the processing selected by the T bit and need to handle it as robustly as data received from the network.
Applications that need to prevent this can bind the payload origin to the SFrame ciphertext by including it in the SFrame <tt>metadata</tt> input, as described in <xref target="sframe-metadata"/>.</t>
      </section>
      <section anchor="payload-type-confusion">
        <name>Payload Type Confusion</name>
        <t>The payload type is not authenticated by SFrame and can be legitimately rewritten by middleboxes such as SFUs, which may use different payload type mappings on each leg.
A malicious middlebox can thus cause authentic decrypted media to be processed by a depacketizer or decoder of a different media format than the one used by the sender.
Media depacketizers and decoders are known to be a significant attack surface.
Receivers cannot expect that the decrypted data matches the media format identified by the payload type and need to handle it as robustly as data received from the network.</t>
      </section>
      <section anchor="metadata-exposed-to-middleboxes">
        <name>Metadata Exposed to Middleboxes</name>
        <t>By design, SFrame exposes metadata to middleboxes so that they can make forwarding decisions.
This includes the RTP header, the RTP header extensions, the SFrame header, the SFrame payload descriptor and the RTP packet sizes.
This information can reveal frame boundaries, frame sizes, key frames, video layer structure, and in the case of audio, voice activity, for instance via the audio level header extension <xref target="RFC6464"/>.
These leaks are potentially larger with per-packet SFrame, where the SFrame boundaries follow the media-format-specific packetization.
Senders are expected to only send the header extensions that are needed by the middleboxes and the receivers to reduce privacy risks.
RTP padding can be used to reduce the information leaked by packet sizes.</t>
      </section>
      <section anchor="per-ssrc-key-derivation">
        <name>Per SSRC Key Derivation</name>
        <t>The SFrame encryption nonce is derived from the key and the CTR value.
If several RTP streams are encrypted with the same key and KID while maintaining independent CTR values, the same nonce will be used with the same key for different content, which breaks the confidentiality and integrity guarantees of the AEAD algorithms used by SFrame.
The per SSRC key derivation defined in <xref target="sframe-sdp-rtp-key-management"/> prevents this by producing a different key for each SSRC.</t>
        <t>The per SSRC key derivation relies on the uniqueness of the SSRC among the RTP streams using the same base_key.
If two senders use the same base_key and pick the same SSRC, they will derive the same ssrc_key and may reuse nonces.
A base_key is not expected to be shared between senders unless the application guarantees that their SSRCs are distinct.
When an SSRC changes, for instance after an SSRC collision as described in <xref target="RFC3550"/>, a new ssrc_key is derived from the new SSRC and the CTR value can be reset.</t>
        <t>The SSRC used for the derivation is the SSRC chosen by the sender.
A middlebox that rewrites SSRCs, as is commonly done by SFUs when forwarding simulcast streams, prevents receivers from deriving the correct key, unless the receivers know the original SSRC through other means.
In that case, decryption fails, which is a denial of service but does not compromise the media content.
Similarly, a middlebox swapping the SSRCs of two RTP streams causes decryption failures instead of media of one stream being presented as media of the other stream.</t>
        <t>When the per SSRC key derivation is not used, for instance because SSRCs are not preserved end-to-end as described above, the application ensures that each RTP stream encrypted with the same base_key uses distinct KID values, or that the streams share a single counter.
Since the SFrame key and salt are derived from both the base_key and the KID <xref target="RFC9605"/>, using a distinct KID for each RTP stream results in distinct keys and salts for each stream, even if all streams share the same base_key.
The KID is part of the SFrame header, which is authenticated by SFrame, and is therefore not affected by middleboxes rewriting RTP header fields.
The KID allocation scheme needs to guarantee that the KID values used by the RTP streams of all senders sharing a base_key are distinct.</t>
        <t>Retransmission packets as defined in <xref target="RFC4588"/> carry SFrame packets that were encrypted with the key derived from the original SSRC, not from the retransmission SSRC.</t>
        <t>Sender and receiver need to agree, using an out-of-band mechanism, on whether the per SSRC key derivation is used.
A mismatch results in decryption failures for all media.</t>
      </section>
      <section anchor="downgrade">
        <name>Downgrade</name>
        <t>An attacker able to modify the SDP can remove the "a=sframe" attribute.
The negotiation rules of <xref target="sframe-sdp-negotiation"/> prevent an endpoint that offered SFrame from sending unencrypted media in that case, but they do not prevent an attacker from removing "a=sframe" from an offer.
In many deployments, the signaling server is operated by the same entity as the SFU, which is the entity SFrame protects against.
Applications that require end-to-end encryption cannot rely solely on the SDP negotiation to decide whether to use SFrame.
Instead, they have to enforce SFrame usage based on their own policy.</t>
      </section>
      <section anchor="resource-exhaustion">
        <name>Resource Exhaustion</name>
        <t>The depacketization algorithm of <xref target="rtp-depacketization-of-sframe"/> buffers RTP packets until a complete SFrame frame is received.
An attacker sending packets that never complete a frame can cause unbounded memory use.
Receivers are expected to bound the number of buffered packets and discard incomplete frames after a limited amount of time, for instance when newer frames have been fully received.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document updates the "attribute-name (formerly "att-field")" subregistry of the "Session Description Protocol (SDP) Parameters" registry (see Section 8.2.4 of <xref target="RFC8866"/>).
Specifically, it adds the SDP "a=sframe" attribute for use at the media level.</t>
      <t>Contact name: IETF AVT Working Group</t>
      <t>Contact email address: avt@ietf.org</t>
      <t>Attribute name: sframe</t>
      <t>Attribute syntax: This attribute takes no values</t>
      <t>Attribute semantics: N/A</t>
      <t>Attribute value: N/A</t>
      <t>Usage Level: media</t>
      <t>Charset dependent: No</t>
      <t>Purpose: The presence of this attribute in the SDP indicates that the media carried by the RTP packets of the m-section is encrypted by SFrame</t>
      <t>O/A procedures: SDP O/A procedures are defined in section 6</t>
      <t>Mux Category: NORMAL</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="WebRTC_Encoded_Transform" target="https://w3c.github.io/webrtc-encoded-transform/">
          <front>
            <title>WebRTC Encoded Transform</title>
            <author>
              <organization>World Wide Web Consortium</organization>
            </author>
            <date year="2025" month="May"/>
          </front>
        </reference>
        <reference anchor="RFC9605">
          <front>
            <title>Secure Frame (SFrame): Lightweight Authenticated Encryption for Real-Time Media</title>
            <author fullname="E. Omara" initials="E." surname="Omara"/>
            <author fullname="J. Uberti" initials="J." surname="Uberti"/>
            <author fullname="S. G. Murillo" initials="S. G." surname="Murillo"/>
            <author fullname="R. Barnes" initials="R." role="editor" surname="Barnes"/>
            <author fullname="Y. Fablet" initials="Y." surname="Fablet"/>
            <date month="August" year="2024"/>
            <abstract>
              <t>This document describes the Secure Frame (SFrame) end-to-end encryption and authentication mechanism for media frames in a multiparty conference call, in which central media servers (Selective Forwarding Units or SFUs) can access the media metadata needed to make forwarding decisions without having access to the actual media.</t>
              <t>This mechanism differs from the Secure Real-Time Protocol (SRTP) in that it is independent of RTP (thus compatible with non-RTP media transport) and can be applied to whole media frames in order to be more bandwidth efficient.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9605"/>
          <seriesInfo name="DOI" value="10.17487/RFC9605"/>
        </reference>
        <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="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="RFC7656">
          <front>
            <title>A Taxonomy of Semantics and Mechanisms for Real-Time Transport Protocol (RTP) Sources</title>
            <author fullname="J. Lennox" initials="J." surname="Lennox"/>
            <author fullname="K. Gross" initials="K." surname="Gross"/>
            <author fullname="S. Nandakumar" initials="S." surname="Nandakumar"/>
            <author fullname="G. Salgueiro" initials="G." surname="Salgueiro"/>
            <author fullname="B. Burman" initials="B." role="editor" surname="Burman"/>
            <date month="November" year="2015"/>
            <abstract>
              <t>The terminology about, and associations among, Real-time Transport Protocol (RTP) sources can be complex and somewhat opaque. This document describes a number of existing and proposed properties and relationships among RTP sources and defines common terminology for discussing protocol entities and their relationships.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7656"/>
          <seriesInfo name="DOI" value="10.17487/RFC7656"/>
        </reference>
        <reference anchor="RFC4588">
          <front>
            <title>RTP Retransmission Payload Format</title>
            <author fullname="J. Rey" initials="J." surname="Rey"/>
            <author fullname="D. Leon" initials="D." surname="Leon"/>
            <author fullname="A. Miyazaki" initials="A." surname="Miyazaki"/>
            <author fullname="V. Varsa" initials="V." surname="Varsa"/>
            <author fullname="R. Hakenberg" initials="R." surname="Hakenberg"/>
            <date month="July" year="2006"/>
            <abstract>
              <t>RTP retransmission is an effective packet loss recovery technique for real-time applications with relaxed delay bounds. This document describes an RTP payload format for performing retransmissions. Retransmitted RTP packets are sent in a separate stream from the original RTP stream. It is assumed that feedback from receivers to senders is available. In particular, it is assumed that Real-time Transport Control Protocol (RTCP) feedback as defined in the extended RTP profile for RTCP-based feedback (denoted RTP/AVPF) is available in this memo. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4588"/>
          <seriesInfo name="DOI" value="10.17487/RFC4588"/>
        </reference>
        <reference anchor="RFC5109">
          <front>
            <title>RTP Payload Format for Generic Forward Error Correction</title>
            <author fullname="A. Li" initials="A." role="editor" surname="Li"/>
            <date month="December" year="2007"/>
            <abstract>
              <t>This document specifies a payload format for generic Forward Error Correction (FEC) for media data encapsulated in RTP. It is based on the exclusive-or (parity) operation. The payload format described in this document allows end systems to apply protection using various protection lengths and levels, in addition to using various protection group sizes to adapt to different media and channel characteristics. It enables complete recovery of the protected packets or partial recovery of the critical parts of the payload depending on the packet loss situation. This scheme is completely compatible with non-FEC-capable hosts, so the receivers in a multicast group that do not implement FEC can still work by simply ignoring the protection data. This specification obsoletes RFC 2733 and RFC 3009. The FEC specified in this document is not backward compatible with RFC 2733 and RFC 3009. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5109"/>
          <seriesInfo name="DOI" value="10.17487/RFC5109"/>
        </reference>
        <reference anchor="RFC2198">
          <front>
            <title>RTP Payload for Redundant Audio Data</title>
            <author fullname="C. Perkins" initials="C." surname="Perkins"/>
            <author fullname="I. Kouvelas" initials="I." surname="Kouvelas"/>
            <author fullname="O. Hodson" initials="O." surname="Hodson"/>
            <author fullname="V. Hardman" initials="V." surname="Hardman"/>
            <author fullname="M. Handley" initials="M." surname="Handley"/>
            <author fullname="J.C. Bolot" initials="J.C." surname="Bolot"/>
            <author fullname="A. Vega-Garcia" initials="A." surname="Vega-Garcia"/>
            <author fullname="S. Fosse-Parisis" initials="S." surname="Fosse-Parisis"/>
            <date month="September" year="1997"/>
            <abstract>
              <t>This document describes a payload format for use with the real-time transport protocol (RTP), version 2, for encoding redundant audio data. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2198"/>
          <seriesInfo name="DOI" value="10.17487/RFC2198"/>
        </reference>
        <reference anchor="RFC5869">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="DOI" value="10.17487/RFC5869"/>
        </reference>
        <reference anchor="RFC3711">
          <front>
            <title>The Secure Real-time Transport Protocol (SRTP)</title>
            <author fullname="M. Baugher" initials="M." surname="Baugher"/>
            <author fullname="D. McGrew" initials="D." surname="McGrew"/>
            <author fullname="M. Naslund" initials="M." surname="Naslund"/>
            <author fullname="E. Carrara" initials="E." surname="Carrara"/>
            <author fullname="K. Norrman" initials="K." surname="Norrman"/>
            <date month="March" year="2004"/>
            <abstract>
              <t>This document describes the Secure Real-time Transport Protocol (SRTP), a profile of the Real-time Transport Protocol (RTP), which can provide confidentiality, message authentication, and replay protection to the RTP traffic and to the control traffic for RTP, the Real-time Transport Control Protocol (RTCP). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3711"/>
          <seriesInfo name="DOI" value="10.17487/RFC3711"/>
        </reference>
        <reference anchor="RFC3550">
          <front>
            <title>RTP: A Transport Protocol for Real-Time Applications</title>
            <author fullname="H. Schulzrinne" initials="H." surname="Schulzrinne"/>
            <author fullname="S. Casner" initials="S." surname="Casner"/>
            <author fullname="R. Frederick" initials="R." surname="Frederick"/>
            <author fullname="V. Jacobson" initials="V." surname="Jacobson"/>
            <date month="July" year="2003"/>
            <abstract>
              <t>This memorandum describes RTP, the real-time transport protocol. RTP provides end-to-end network transport functions suitable for applications transmitting real-time data, such as audio, video or simulation data, over multicast or unicast network services. RTP does not address resource reservation and does not guarantee quality-of- service for real-time services. The data transport is augmented by a control protocol (RTCP) to allow monitoring of the data delivery in a manner scalable to large multicast networks, and to provide minimal control and identification functionality. RTP and RTCP are designed to be independent of the underlying transport and network layers. The protocol supports the use of RTP-level translators and mixers. Most of the text in this memorandum is identical to RFC 1889 which it obsoletes. There are no changes in the packet formats on the wire, only changes to the rules and algorithms governing how the protocol is used. The biggest change is an enhancement to the scalable timer algorithm for calculating when to send RTCP packets in order to minimize transmission in excess of the intended rate when many participants join a session simultaneously. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="64"/>
          <seriesInfo name="RFC" value="3550"/>
          <seriesInfo name="DOI" value="10.17487/RFC3550"/>
        </reference>
        <reference anchor="RFC8866">
          <front>
            <title>SDP: Session Description Protocol</title>
            <author fullname="A. Begen" initials="A." surname="Begen"/>
            <author fullname="P. Kyzivat" initials="P." surname="Kyzivat"/>
            <author fullname="C. Perkins" initials="C." surname="Perkins"/>
            <author fullname="M. Handley" initials="M." surname="Handley"/>
            <date month="January" year="2021"/>
            <abstract>
              <t>This memo defines the Session Description Protocol (SDP). SDP is intended for describing multimedia sessions for the purposes of session announcement, session invitation, and other forms of multimedia session initiation. This document obsoletes RFC 4566.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8866"/>
          <seriesInfo name="DOI" value="10.17487/RFC8866"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="TestVectors" target="https://github.com/ietf-wg-avtcore/draft-ietf-avtcore-rtp-sframe/blob/main/test-vectors/test-vectors-per-ssrc-key-derivation.json">
          <front>
            <title>SFrame Per SSRC Key Derivation Test Vectors</title>
            <author>
              <organization/>
            </author>
            <date year="2026" month="October"/>
          </front>
        </reference>
        <reference anchor="RFC9335">
          <front>
            <title>Completely Encrypting RTP Header Extensions and Contributing Sources</title>
            <author fullname="J. Uberti" initials="J." surname="Uberti"/>
            <author fullname="C. Jennings" initials="C." surname="Jennings"/>
            <author fullname="S. Murillo" initials="S." surname="Murillo"/>
            <date month="January" year="2023"/>
            <abstract>
              <t>While the Secure Real-time Transport Protocol (SRTP) provides confidentiality for the contents of a media packet, a significant amount of metadata is left unprotected, including RTP header extensions and contributing sources (CSRCs). However, this data can be moderately sensitive in many applications. While there have been previous attempts to protect this data, they have had limited deployment, due to complexity as well as technical limitations.</t>
              <t>This document updates RFC 3711, the SRTP specification, and defines Cryptex as a new mechanism that completely encrypts header extensions and CSRCs and uses simpler Session Description Protocol (SDP) signaling with the goal of facilitating deployment.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9335"/>
          <seriesInfo name="DOI" value="10.17487/RFC9335"/>
        </reference>
        <reference anchor="RFC6464">
          <front>
            <title>A Real-time Transport Protocol (RTP) Header Extension for Client-to-Mixer Audio Level Indication</title>
            <author fullname="J. Lennox" initials="J." role="editor" surname="Lennox"/>
            <author fullname="E. Ivov" initials="E." surname="Ivov"/>
            <author fullname="E. Marocco" initials="E." surname="Marocco"/>
            <date month="December" year="2011"/>
            <abstract>
              <t>This document defines a mechanism by which packets of Real-time Transport Protocol (RTP) audio streams can indicate, in an RTP header extension, the audio level of the audio sample carried in the RTP packet. In large conferences, this can reduce the load on an audio mixer or other middlebox that wants to forward only a few of the loudest audio streams, without requiring it to decode and measure every stream that is received. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6464"/>
          <seriesInfo name="DOI" value="10.17487/RFC6464"/>
        </reference>
      </references>
    </references>
    <?line 422?>

<section anchor="test-vectors">
      <name>Test Vectors</name>
      <t>This section provides a set of test vectors that implementations can use to
verify that they correctly implement SFrame per SSRC stream key derivation,
and ratcheting of the resulting per SSRC keys, with registered SFrame cipher
suites.</t>
      <t>For each SSRC, <tt>ssrc_key_a</tt> is the initial key produced by the derivation in
<xref target="sframe-sdp-rtp-key-management"/>.  <tt>ssrc_key_a_1</tt> and <tt>ssrc_key_a_2</tt> are the
keys after the first and second ratchet steps described in
<xref target="sframe-ratcheting-with-per-ssrc-keys"/>, corresponding to <tt>ssrc_key_a[1]</tt>
and <tt>ssrc_key_a[N]</tt> with N = 2 in the key tree.  The values for <tt>ssrc_key_b</tt> follow the
same pattern.</t>
      <t>All values are either numeric or byte strings.  Numeric values are represented
as hex values, prefixed with <tt>0x</tt>.  Byte strings are represented in hex
encoding.</t>
      <t>Line breaks and whitespace within values are inserted to conform to the width
requirements of the RFC format.  They should be removed before use.</t>
      <t>These test vectors are also available in JSON format at <xref target="TestVectors"/>.  In the
JSON test vectors, numeric values are JSON numbers and byte string values are
JSON strings containing the hex encoding of the byte strings.</t>
      <sourcecode type="test-vectors"><![CDATA[
cipher_suite: 0x0001
base_key: 000102030405060708090a0b0c0d0e0f
ssrc_a: 0x12345678
ssrc_b: 0x98765432
ssrc_key_a: f309f118aecdacfbc165cc080022b297
            100bbb55e483b002d762000a0faa684d
ssrc_key_a_1: a8c48a47a6536eda200b4e94e8eaa660
              2f4f2266bd66284490229540f93127ab
ssrc_key_a_2: 1141095c432877af08c314e0e2936ce4
              389d697c74769fb2db911ea467f984dc
ssrc_key_b: 06e5d1b8c6e01f10b592bd2e13ff4b37
            182b895ec8330d5cc6ec690704043b5f
ssrc_key_b_1: 7aa3bf333dde545fe56daaf2449fbff1
              774f6df78ce0b593b59f05f3d1f505dd
ssrc_key_b_2: 4aa1c3f077b45d4d76cb470690529534
              721b21eda62bceaa8ec73e59926d25c4
]]></sourcecode>
      <sourcecode type="test-vectors"><![CDATA[
cipher_suite: 0x0002
base_key: 000102030405060708090a0b0c0d0e0f
ssrc_a: 0x12345678
ssrc_b: 0x98765432
ssrc_key_a: f309f118aecdacfbc165cc080022b297
            100bbb55e483b002d762000a0faa684d
ssrc_key_a_1: a8c48a47a6536eda200b4e94e8eaa660
              2f4f2266bd66284490229540f93127ab
ssrc_key_a_2: 1141095c432877af08c314e0e2936ce4
              389d697c74769fb2db911ea467f984dc
ssrc_key_b: 06e5d1b8c6e01f10b592bd2e13ff4b37
            182b895ec8330d5cc6ec690704043b5f
ssrc_key_b_1: 7aa3bf333dde545fe56daaf2449fbff1
              774f6df78ce0b593b59f05f3d1f505dd
ssrc_key_b_2: 4aa1c3f077b45d4d76cb470690529534
              721b21eda62bceaa8ec73e59926d25c4
]]></sourcecode>
      <sourcecode type="test-vectors"><![CDATA[
cipher_suite: 0x0003
base_key: 000102030405060708090a0b0c0d0e0f
ssrc_a: 0x12345678
ssrc_b: 0x98765432
ssrc_key_a: f309f118aecdacfbc165cc080022b297
            100bbb55e483b002d762000a0faa684d
ssrc_key_a_1: a8c48a47a6536eda200b4e94e8eaa660
              2f4f2266bd66284490229540f93127ab
ssrc_key_a_2: 1141095c432877af08c314e0e2936ce4
              389d697c74769fb2db911ea467f984dc
ssrc_key_b: 06e5d1b8c6e01f10b592bd2e13ff4b37
            182b895ec8330d5cc6ec690704043b5f
ssrc_key_b_1: 7aa3bf333dde545fe56daaf2449fbff1
              774f6df78ce0b593b59f05f3d1f505dd
ssrc_key_b_2: 4aa1c3f077b45d4d76cb470690529534
              721b21eda62bceaa8ec73e59926d25c4
]]></sourcecode>
      <sourcecode type="test-vectors"><![CDATA[
cipher_suite: 0x0004
base_key: 000102030405060708090a0b0c0d0e0f
ssrc_a: 0x12345678
ssrc_b: 0x98765432
ssrc_key_a: f309f118aecdacfbc165cc080022b297
            100bbb55e483b002d762000a0faa684d
ssrc_key_a_1: a8c48a47a6536eda200b4e94e8eaa660
              2f4f2266bd66284490229540f93127ab
ssrc_key_a_2: 1141095c432877af08c314e0e2936ce4
              389d697c74769fb2db911ea467f984dc
ssrc_key_b: 06e5d1b8c6e01f10b592bd2e13ff4b37
            182b895ec8330d5cc6ec690704043b5f
ssrc_key_b_1: 7aa3bf333dde545fe56daaf2449fbff1
              774f6df78ce0b593b59f05f3d1f505dd
ssrc_key_b_2: 4aa1c3f077b45d4d76cb470690529534
              721b21eda62bceaa8ec73e59926d25c4
]]></sourcecode>
      <sourcecode type="test-vectors"><![CDATA[
cipher_suite: 0x0005
base_key: 000102030405060708090a0b0c0d0e0f
          101112131415161718191a1b1c1d1e1f
ssrc_a: 0x12345678
ssrc_b: 0x98765432
ssrc_key_a: 4715e2a3e3ecb408c83135a30b8e660c
            75a3488dbd4d9dd3553a01b39df76bc4
            3a5a0b130159edd90353b09c810e849d
            b7398182ac7c1dea072a2c1b6bac7dda
ssrc_key_a_1: 9f0f48590c721b61733d1021212d6b92
              953e8aa73e9fac510e33113be7abb3a1
              230daf15bc5c5247ffeab88f745ca59e
              ba608e832e8e9b5a50cd05c5b866e604
ssrc_key_a_2: b10d573c2a0447596d8a162093d7c0aa
              0fe0eb84a598d06174b24e8ab2ca73a8
              1dedb3158a6ea9a734e5544769524766
              325a4248e585c8231a323f2093afc118
ssrc_key_b: f7891c6b18d88a93ba7638875b87146d
            f4cb9693ca3837b480e9221539e86c1c
            98391cb1273423b33f94abe7f67c1070
            997a588084a54391ebda18b3d6ff92f1
ssrc_key_b_1: 686debc361271a29bb6e908ca4cbae6a
              8d2512ba73b89bbb883a81d6aceab6bf
              69e24064ae2758803ac4f2ff0aab2bd8
              cf1b4eab1e608892e816e4b4d6374b71
ssrc_key_b_2: ab9a74c7040713e8d1c3aa4ab5c6b22e
              214c81d571c182b7d83b480364e86c9c
              d99bff7af9e1abc9e6ef772460835aa4
              20b30d9329b9f686558e6e601eb4615c
]]></sourcecode>
      <sourcecode type="test-vectors"><![CDATA[
cipher_suite: 0x0006
base_key: 000102030405060708090a0b0c0d0e0f
          101112131415161718191a1b1c1d1e1f
ssrc_a: 0x12345678
ssrc_b: 0x98765432
ssrc_key_a: 4715e2a3e3ecb408c83135a30b8e660c
            75a3488dbd4d9dd3553a01b39df76bc4
            3a5a0b130159edd90353b09c810e849d
            b7398182ac7c1dea072a2c1b6bac7dda
ssrc_key_a_1: 9f0f48590c721b61733d1021212d6b92
              953e8aa73e9fac510e33113be7abb3a1
              230daf15bc5c5247ffeab88f745ca59e
              ba608e832e8e9b5a50cd05c5b866e604
ssrc_key_a_2: b10d573c2a0447596d8a162093d7c0aa
              0fe0eb84a598d06174b24e8ab2ca73a8
              1dedb3158a6ea9a734e5544769524766
              325a4248e585c8231a323f2093afc118
ssrc_key_b: f7891c6b18d88a93ba7638875b87146d
            f4cb9693ca3837b480e9221539e86c1c
            98391cb1273423b33f94abe7f67c1070
            997a588084a54391ebda18b3d6ff92f1
ssrc_key_b_1: 686debc361271a29bb6e908ca4cbae6a
              8d2512ba73b89bbb883a81d6aceab6bf
              69e24064ae2758803ac4f2ff0aab2bd8
              cf1b4eab1e608892e816e4b4d6374b71
ssrc_key_b_2: ab9a74c7040713e8d1c3aa4ab5c6b22e
              214c81d571c182b7d83b480364e86c9c
              d99bff7af9e1abc9e6ef772460835aa4
              20b30d9329b9f686558e6e601eb4615c
]]></sourcecode>
      <sourcecode type="test-vectors"><![CDATA[
cipher_suite: 0x0007
base_key: 000102030405060708090a0b0c0d0e0f
          101112131415161718191a1b1c1d1e1f
ssrc_a: 0x12345678
ssrc_b: 0x98765432
ssrc_key_a: 4715e2a3e3ecb408c83135a30b8e660c
            75a3488dbd4d9dd3553a01b39df76bc4
            3a5a0b130159edd90353b09c810e849d
            b7398182ac7c1dea072a2c1b6bac7dda
ssrc_key_a_1: 9f0f48590c721b61733d1021212d6b92
              953e8aa73e9fac510e33113be7abb3a1
              230daf15bc5c5247ffeab88f745ca59e
              ba608e832e8e9b5a50cd05c5b866e604
ssrc_key_a_2: b10d573c2a0447596d8a162093d7c0aa
              0fe0eb84a598d06174b24e8ab2ca73a8
              1dedb3158a6ea9a734e5544769524766
              325a4248e585c8231a323f2093afc118
ssrc_key_b: f7891c6b18d88a93ba7638875b87146d
            f4cb9693ca3837b480e9221539e86c1c
            98391cb1273423b33f94abe7f67c1070
            997a588084a54391ebda18b3d6ff92f1
ssrc_key_b_1: 686debc361271a29bb6e908ca4cbae6a
              8d2512ba73b89bbb883a81d6aceab6bf
              69e24064ae2758803ac4f2ff0aab2bd8
              cf1b4eab1e608892e816e4b4d6374b71
ssrc_key_b_2: ab9a74c7040713e8d1c3aa4ab5c6b22e
              214c81d571c182b7d83b480364e86c9c
              d99bff7af9e1abc9e6ef772460835aa4
              20b30d9329b9f686558e6e601eb4615c
]]></sourcecode>
      <sourcecode type="test-vectors"><![CDATA[
cipher_suite: 0x0008
base_key: 000102030405060708090a0b0c0d0e0f
          101112131415161718191a1b1c1d1e1f
ssrc_a: 0x12345678
ssrc_b: 0x98765432
ssrc_key_a: 4715e2a3e3ecb408c83135a30b8e660c
            75a3488dbd4d9dd3553a01b39df76bc4
            3a5a0b130159edd90353b09c810e849d
            b7398182ac7c1dea072a2c1b6bac7dda
ssrc_key_a_1: 9f0f48590c721b61733d1021212d6b92
              953e8aa73e9fac510e33113be7abb3a1
              230daf15bc5c5247ffeab88f745ca59e
              ba608e832e8e9b5a50cd05c5b866e604
ssrc_key_a_2: b10d573c2a0447596d8a162093d7c0aa
              0fe0eb84a598d06174b24e8ab2ca73a8
              1dedb3158a6ea9a734e5544769524766
              325a4248e585c8231a323f2093afc118
ssrc_key_b: f7891c6b18d88a93ba7638875b87146d
            f4cb9693ca3837b480e9221539e86c1c
            98391cb1273423b33f94abe7f67c1070
            997a588084a54391ebda18b3d6ff92f1
ssrc_key_b_1: 686debc361271a29bb6e908ca4cbae6a
              8d2512ba73b89bbb883a81d6aceab6bf
              69e24064ae2758803ac4f2ff0aab2bd8
              cf1b4eab1e608892e816e4b4d6374b71
ssrc_key_b_2: ab9a74c7040713e8d1c3aa4ab5c6b22e
              214c81d571c182b7d83b480364e86c9c
              d99bff7af9e1abc9e6ef772460835aa4
              20b30d9329b9f686558e6e601eb4615c
]]></sourcecode>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
