rfc8870xml2.original.xml | rfc8870.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE rfc SYSTEM 'rfc2629.dtd' []> | ||||
<rfc ipr="trust200902" category="std" docName="draft-ietf-perc-srtp-ekt-diet-13" | ||||
> | ||||
<?rfc toc="yes"?> | ||||
<?rfc symrefs="yes"?> | ||||
<?rfc sortrefs="yes"?> | ||||
<?rfc compact="yes"?> | ||||
<?rfc subcompact="no"?> | ||||
<?rfc private=""?> | ||||
<?rfc topblock="yes"?> | ||||
<?rfc comments="no"?> | ||||
<front> | ||||
<title abbrev="EKT SRTP">Encrypted Key Transport for DTLS and Secure RTP</title> | ||||
<author initials="C." surname="Jennings" fullname="Cullen Jennings"> | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
<organization>Cisco Systems</organization> | ||||
<address> | ||||
<postal> | ||||
<street></street> | ||||
<city></city> | ||||
<code></code> | ||||
<country></country> | ||||
<region></region> | ||||
</postal> | ||||
<phone></phone> | ||||
<email>fluffy@iii.ca</email> | ||||
<uri></uri> | ||||
</address> | ||||
</author> | ||||
<author initials="J." surname="Mattsson" fullname="John Mattsson"> | ||||
<organization>Ericsson AB</organization> | ||||
<address> | ||||
<postal> | ||||
<street></street> | ||||
<city></city> | ||||
<code></code> | ||||
<country></country> | ||||
<region></region> | ||||
</postal> | ||||
<phone></phone> | ||||
<email>john.mattsson@ericsson.com</email> | ||||
<uri></uri> | ||||
</address> | ||||
</author> | ||||
<author initials="D.A.M." surname="McGrew" fullname="David A. McGrew"> | ||||
<organization>Cisco Systems</organization> | ||||
<address> | ||||
<postal> | ||||
<street></street> | ||||
<city></city> | ||||
<code></code> | ||||
<country></country> | ||||
<region></region> | ||||
</postal> | ||||
<phone></phone> | ||||
<email>mcgrew@cisco.com</email> | ||||
<uri></uri> | ||||
</address> | ||||
</author> | ||||
<author initials="D." surname="Wing" fullname="Dan Wing"> | ||||
<organization>Citrix Systems, Inc.</organization> | ||||
<address> | ||||
<postal> | ||||
<street></street> | ||||
<city></city> | ||||
<code></code> | ||||
<country></country> | ||||
<region></region> | ||||
</postal> | ||||
<phone></phone> | ||||
<email>dwing-ietf@fuggles.com</email> | ||||
<uri></uri> | ||||
</address> | ||||
</author> | ||||
<author initials="F.A." surname="Andreason" fullname="Flemming Andreason"> | ||||
<organization>Cisco Systems</organization> | ||||
<address> | ||||
<postal> | ||||
<street></street> | ||||
<city></city> | ||||
<code></code> | ||||
<country></country> | ||||
<region></region> | ||||
</postal> | ||||
<phone></phone> | ||||
<email>fandreas@cisco.com</email> | ||||
<uri></uri> | ||||
</address> | ||||
</author> | ||||
<date year="2020" month="June" day="23"/> | ||||
<area>Internet</area> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" submissionType | |||
<workgroup></workgroup> | ="IETF" category="std" consensus="true" docName="draft-ietf-perc-srtp-ekt-diet-1 | |||
<keyword>PERC</keyword> | 3" number="8870" obsoletes="" updates="" xml:lang="en" tocInclude="true" symRefs | |||
<keyword>SRTP</keyword> | ="true" sortRefs="true" version="3"> | |||
<keyword>RTP</keyword> | ||||
<keyword>conferencing</keyword> | ||||
<keyword>encryption</keyword> | ||||
<abstract> | <!-- xml2rfc v2v3 conversion 2.46.0 --> | |||
<t>Encrypted Key Transport (EKT) is an extension to DTLS | <front> | |||
(Datagram Transport Layer Security) and Secure Real-time | <title abbrev="EKT SRTP">Encrypted Key Transport for DTLS and Secure RTP</ti | |||
tle> | ||||
<seriesInfo name="RFC" value="8870"/> | ||||
<author initials="C." surname="Jennings" fullname="Cullen Jennings"> | ||||
<organization>Cisco Systems</organization> | ||||
<address> | ||||
<email>fluffy@iii.ca</email> | ||||
</address> | ||||
</author> | ||||
<author initials="J." surname="Mattsson" fullname="John Mattsson"> | ||||
<organization>Ericsson AB</organization> | ||||
<address> | ||||
<email>john.mattsson@ericsson.com</email> | ||||
</address> | ||||
</author> | ||||
<author initials="D." surname="McGrew" fullname="David A. McGrew"> | ||||
<organization>Cisco Systems</organization> | ||||
<address> | ||||
<email>mcgrew@cisco.com</email> | ||||
</address> | ||||
</author> | ||||
<author initials="D." surname="Wing" fullname="Dan Wing"> | ||||
<organization abbrev="Citrix">Citrix Systems, Inc.</organization> | ||||
<address> | ||||
<email>dwing-ietf@fuggles.com</email> | ||||
</address> | ||||
</author> | ||||
<author initials="F." surname="Andreasen" fullname="Flemming Andreasen"> | ||||
<organization>Cisco Systems</organization> | ||||
<address> | ||||
<email>fandreas@cisco.com</email> | ||||
</address> | ||||
</author> | ||||
<date year="2021" month="January" /> | ||||
<keyword>PERC</keyword> | ||||
<keyword>SRTP</keyword> | ||||
<keyword>RTP</keyword> | ||||
<keyword>conferencing</keyword> | ||||
<keyword>encryption</keyword> | ||||
<abstract> | ||||
<t>Encrypted Key Transport (EKT) is an extension to DTLS | ||||
(Datagram Transport Layer Security) and the Secure Real-time | ||||
Transport Protocol (SRTP) that provides for the secure | Transport Protocol (SRTP) that provides for the secure | |||
transport of SRTP master keys, rollover counters, and other | transport of SRTP master keys, rollover counters, and other | |||
information within SRTP. This facility enables SRTP for decentralized | information within SRTP. This facility enables SRTP for decentralized | |||
conferences by distributing a common key to all of the conference | conferences by distributing a common key to all of the conference | |||
endpoints. | endpoints. | |||
</t> | </t> | |||
</abstract> | </abstract> | |||
</front> | ||||
</front> | <middle> | |||
<section anchor="introduction" numbered="true" toc="default"> | ||||
<middle> | <name>Introduction</name> | |||
<t>The Real-time Transport Protocol (RTP) is designed to allow decentraliz | ||||
<section anchor="introduction" title="Introduction"> | ed | |||
<t>Real-time Transport Protocol (RTP) is designed to allow decentralized | ||||
groups with minimal control to establish sessions, such as for | groups with minimal control to establish sessions, such as for | |||
multimedia conferences. Unfortunately, Secure RTP (SRTP <xref target="RFC3711"/ >) | multimedia conferences. Unfortunately, Secure RTP (SRTP) <xref target="RFC3711" format="default"/> | |||
cannot be used in many minimal-control scenarios, because it requires | cannot be used in many minimal-control scenarios, because it requires | |||
that synchronization source (SSRC) values and other data be | that synchronization source (SSRC) values and other data be | |||
coordinated among all of the participants in a session. For example, | coordinated among all of the participants in a session. For example, | |||
if a participant joins a session that is already in progress, that | if a participant joins a session that is already in progress, that | |||
participant needs to be told the SRTP keys along with the SSRC, | participant needs to be informed of the SRTP keys along with the SSRC, | |||
rollover counter (ROC) and other details of the other SRTP sources. | rollover counter (ROC), and other details of the other SRTP sources. | |||
</t> | </t> | |||
<t>The inability of SRTP to work in the absence of central control was | <t>The inability of SRTP to work in the absence of central control was | |||
well understood during the design of the protocol; the omission was | well understood during the design of the protocol; the omission was | |||
considered less important than optimizations such as bandwidth | considered less important than optimizations such as bandwidth | |||
conservation. Additionally, in many situations SRTP is used in | conservation. Additionally, in many situations, SRTP is used in | |||
conjunction with a signaling system that can provide the central | conjunction with a signaling system that can provide the central | |||
control needed by SRTP. However, there are several cases in which | control needed by SRTP. However, there are several cases in which | |||
conventional signaling systems cannot easily provide all of the | conventional signaling systems cannot easily provide all of the | |||
coordination required. | coordination required. | |||
</t> | </t> | |||
<t>This document defines Encrypted Key Transport (EKT) for SRTP and | <t>This document defines Encrypted Key Transport (EKT) for SRTP and | |||
reduces the amount of external signaling control that is needed in a | reduces the amount of external signaling control that is needed in an | |||
SRTP session with multiple receivers. EKT securely distributes the | SRTP session with multiple receivers. EKT securely distributes the | |||
SRTP master key and other information for each SRTP source. With this | SRTP master key and other information for each SRTP source. With this | |||
method, SRTP entities are free to choose SSRC values as they see fit, | method, SRTP entities are free to choose SSRC values as they see fit | |||
and to start up new SRTP sources with new SRTP master keys within a | and to start up new SRTP sources with new SRTP master keys within a | |||
session without coordinating with other entities via external signaling | session without coordinating with other entities via external signaling | |||
or other external means. | or other external means. | |||
</t> | </t> | |||
<t>EKT extends DTLS and SRTP to enable a common key encryption key | <t>EKT extends DTLS and SRTP to enable a common key encryption key | |||
(called an EKTKey) to be distributed to all endpoints, so that each | (called an "EKTKey") to be distributed to all endpoints, so that each | |||
endpoint can securely send its SRTP master key and current SRTP | endpoint can securely send its SRTP master key and current SRTP | |||
rollover counter to the other participants in the session. This data | ROC to the other participants in the session. This data | |||
furnishes the information needed by the receiver to instantiate an | furnishes the information needed by the receiver to instantiate an | |||
SRTP receiver context. | SRTP receiver context. | |||
</t> | </t> | |||
<t>EKT can be used in conferences where the central media distributor or | <t>EKT can be used in conferences where the central Media Distributor or | |||
conference bridge cannot decrypt the media, such as the type defined | conference bridge cannot decrypt the media, such as the type defined | |||
for <xref target="I-D.ietf-perc-private-media-framework"/>. It can also be used | in <xref target="RFC8871" format="default"/>. It can also be used for | |||
for | large-scale conferences where the conference bridge or Media | |||
large scale conferences where the conference bridge or media | Distributor can decrypt all the media but wishes to encrypt the media | |||
distributor can decrypt all the media but wishes to encrypt the media | ||||
it is sending just once and then send the same encrypted media to a large | it is sending just once and then send the same encrypted media to a large | |||
number of participants. This reduces the amount of CPU time needed for | number of participants. This reduces encryption CPU time | |||
encryption and can be used for some optimization to media sending that | in general and is necessary when sending multicast media. | |||
use source specific multicast. | ||||
</t> | </t> | |||
<t>EKT does not control the manner in which the SSRC is generated. It | <t>EKT does not control the manner in which the SSRC is generated. It | |||
is only concerned with distributing the security parameters that an | is only concerned with distributing the security parameters that an | |||
endpoint needs to associate with a given SSRC in order to decrypt | endpoint needs to associate with a given SSRC in order to decrypt | |||
SRTP packets from that sender. | SRTP packets from that sender. | |||
</t> | </t> | |||
<t>EKT is not intended to replace external key establishment | <t>EKT is not intended to replace external key establishment | |||
mechanisms. Instead, it is used in conjunction with those methods, and | mechanisms. Instead, it is used in conjunction with those methods, and | |||
it relieves those methods of the burden to deliver the context for | it relieves those methods of the burden of delivering the context for | |||
each SRTP source to every SRTP participant. This document defines | each SRTP source to every SRTP participant. This document defines | |||
how EKT works with the DTLS-SRTP approach to key establishment, by | how EKT works with the DTLS-SRTP approach to key establishment, by | |||
using keys derived from the DTLS-SRTP handshake to encipher the | using keys derived from the DTLS-SRTP handshake to encipher the | |||
EKTKey in addition to the SRTP media. | EKTKey in addition to the SRTP media. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="overview" numbered="true" toc="default"> | ||||
<section anchor="overview" title="Overview"> | <name>Overview</name> | |||
<t>This specification defines a way for the server in a DTLS-SRTP | <t>This specification defines a way for the server in a DTLS-SRTP | |||
negotiation, see <xref target="dtls-srtp-kt"/>, to provide an EKTKey to the clie | negotiation (see <xref target="dtls-srtp-kt" format="default"/>) to provide an E | |||
nt | KTKey to the client | |||
during the DTLS handshake. The EKTKey thus obtained can be used to | during the DTLS handshake. The EKTKey thus obtained can be used to | |||
encrypt the SRTP master key that is used to encrypt the media sent by | encrypt the SRTP master key that is used to encrypt the media sent by | |||
the endpoint. This specification also defines a way to send the | the endpoint. This specification also defines a way to send the | |||
encrypted SRTP master key (with the EKTKey) along with the SRTP packet, | encrypted SRTP master key (with the EKTKey) along with the SRTP packet | |||
see <xref target="srtp_ekt"/>. Endpoints that receive this and know the EKTKey c | (see <xref target="srtp_ekt" format="default"/>). Endpoints that receive this pa | |||
an use | cket and know the EKTKey can use | |||
the EKTKey to decrypt the SRTP master key which can then be used to decrypt | the EKTKey to decrypt the SRTP master key, which can then be used to decrypt | |||
the SRTP packet. | the SRTP packet. | |||
</t> | </t> | |||
<t>One way to use this is described in the architecture defined | <t>One way to use this specification is described in the architecture defi | |||
by <xref target="I-D.ietf-perc-private-media-framework"/>. Each participant in t | ned | |||
he | by <xref target="RFC8871" format="default"/>. Each participant in the | |||
conference forms a DTLS-SRTP connection to a common key | conference forms a DTLS-SRTP connection to a common Key Distributor | |||
distributor that distributes the same EKTKey to all the endpoints. | that distributes the same EKTKey to all the endpoints. | |||
Then each endpoint picks its own SRTP master key for the media | Then, each endpoint picks its own SRTP master key for the media | |||
they send. When sending media, the endpoint also includes the | it sends. When sending media, the endpoint may also include the | |||
SRTP master key encrypted with the EKTKey in the SRTP packet. | SRTP master key encrypted with the EKTKey in the SRTP packet. | |||
This allows all the endpoints to decrypt the media. | This allows all the endpoints to decrypt the media. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="conventions-used-in-this-document" numbered="true" toc="def | ||||
<section anchor="conventions-used-in-this-document" title="Conventions Used In T | ault"> | |||
his Document"> | <name>Conventions Used in This Document</name> | |||
<t>The key words "MUST", "MUST NOT", "REQUIRED", & | <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
quot;SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT&qu | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", | |||
ot;, "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "<bcp14>SHOULD NOT</bcp14>", | |||
14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they a | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
ppear in all capitals, as shown here. | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document | |||
</t> | are to be interpreted as described in BCP 14 | |||
</section> | <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only | |||
when, they appear in all capitals, as shown here.</t> | ||||
<section anchor="srtp_ekt" title="Encrypted Key Transport"> | </section> | |||
<t>EKT defines a new method of providing SRTP master keys to an | <section anchor="srtp_ekt" numbered="true" toc="default"> | |||
<name>Encrypted Key Transport</name> | ||||
<t>EKT defines a new method of providing SRTP master keys to an | ||||
endpoint. In order to convey the ciphertext corresponding to the SRTP | endpoint. In order to convey the ciphertext corresponding to the SRTP | |||
master key, and other additional information, an additional field, | master key, and other additional information, an additional field, | |||
called EKTField, is added to the SRTP packets. The EKTField appears | called the "EKTField", is added to the SRTP packets. The EKTField appears | |||
at the end of the SRTP packet. It appears after the optional | at the end of the SRTP packet. It appears after the optional | |||
authentication tag if one is present, otherwise the EKTField | authentication tag, if one is present; otherwise, the EKTField | |||
appears after the ciphertext portion of the packet. | appears after the ciphertext portion of the packet. | |||
</t> | </t> | |||
<t>EKT MUST NOT be used in conjunction with SRTP's MKI (Master Key | <t>EKT <bcp14>MUST NOT</bcp14> be used in conjunction with SRTP's MKI (Mas | |||
Identifier) or with SRTP's <From, To> <xref target="RFC3711"/>, as those S | ter Key | |||
RTP | Identifier) or with SRTP's <From, To> <xref target="RFC3711" format="defau | |||
features duplicate some of the functions of EKT. Senders MUST NOT | lt"/>, as those SRTP | |||
include MKI when using EKT. Receivers SHOULD simply ignore any MKI | features duplicate some of the functions of EKT. Senders <bcp14>MUST NOT</bcp14> | |||
include the MKI when using EKT. Receivers <bcp14>SHOULD</bcp14> simply ignore an | ||||
y MKI | ||||
field received if EKT is in use. | field received if EKT is in use. | |||
</t> | </t> | |||
<t>This document defines the use of EKT with SRTP. Its use with SRTCP | <t>This document defines the use of EKT with SRTP. Its use with the | |||
would be similar, but is reserved for a future specification. SRTP | Secure Real-time Transport Control Protocol (SRTCP) | |||
is preferred for transmitting key material because it shares fate | would be similar, but that topic is left for a future specification. SRTP | |||
with the transmitted media, because SRTP rekeying can occur without | is preferred for transmitting keying material because (1) it shares fate | |||
concern for RTCP transmission limits, and because it avoids the need | with the transmitted media, (2) SRTP rekeying can occur without | |||
concern for RTCP transmission limits, and (3) it avoids the need | ||||
for SRTCP compound packets with RTP translators and mixers. | for SRTCP compound packets with RTP translators and mixers. | |||
</t> | </t> | |||
<section anchor="EKT" numbered="true" toc="default"> | ||||
<section anchor="EKT" title="EKTField Formats"> | <name>EKTField Formats</name> | |||
<t>The EKTField uses the format defined in <xref target="tag-format-base"/> for | <t>The EKTField uses the formats defined in Figures <xref | |||
the | target="tag-format-base" format="counter"/> and <xref | |||
target="tag-format-abbreviated" format="counter"/> for the | ||||
FullEKTField and ShortEKTField. The EKTField appended to an SRTP | FullEKTField and ShortEKTField. The EKTField appended to an SRTP | |||
packet can be referred to as an "EKT tag". | packet can be referred to as an "EKT Tag". | |||
</t> | </t> | |||
<figure anchor="tag-format-base"> | ||||
<figure anchor="tag-format-base" align="center" title="FullEKTField format | <name>FullEKTField Format</name> | |||
"><artwork align="center"> | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
0 1 2 3 | 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 | 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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
: : | : : | |||
: EKT Ciphertext : | : EKT Ciphertext : | |||
: : | : : | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Security Parameter Index | Epoch | | | Security Parameter Index | Epoch | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Length |0 0 0 0 0 0 1 0| | | Length |0 0 0 0 0 0 1 0| | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork> | |||
</artwork></figure> | </figure> | |||
<figure anchor="tag-format-abbreviated"> | ||||
<figure anchor="tag-format-abbreviated" align="center" title="ShortEKTField form | <name>ShortEKTField Format</name> | |||
at | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
"><artwork align="center"> | ||||
0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
|0 0 0 0 0 0 0 0| | |0 0 0 0 0 0 0 0| | |||
+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+]]></artwork> | |||
</artwork></figure> | </figure> | |||
<t>The following shows the syntax of the EKTField expressed in ABNF | <t><xref target="tag-formats"/> shows the syntax of the EKTField, expres | |||
<xref target="RFC5234"/>. The EKTField is added to the end of an SRTP | sed in ABNF | |||
<xref target="RFC5234" format="default"/>. The EKTField is added to the end of | ||||
an SRTP | ||||
packet. The EKTPlaintext is the concatenation of SRTPMasterKeyLength, | packet. The EKTPlaintext is the concatenation of SRTPMasterKeyLength, | |||
SRTPMasterKey, SSRC, and ROC in that order. The EKTCiphertext is | SRTPMasterKey, SSRC, and ROC, in that order. The EKTCiphertext is | |||
computed by encrypting the EKTPlaintext using the EKTKey. Future | computed by encrypting the EKTPlaintext using the EKTKey. Future | |||
extensions to the EKTField MUST conform to the syntax of | extensions to the EKTField <bcp14>MUST</bcp14> conform to the syntax of the | |||
ExtensionEKTField. | ExtensionEKTField. | |||
</t> | </t> | |||
<figure anchor="tag-formats"> | ||||
<figure anchor="tag-formats" align="center" title="EKTField Syntax | <name>EKTField Syntax</name> | |||
"><artwork align="center"> | <sourcecode name="" type="abnf"><![CDATA[ | |||
BYTE = %x00-FF | BYTE = %x00-FF | |||
EKTMsgTypeFull = %x02 | EKTMsgTypeFull = %x02 | |||
EKTMsgTypeShort = %x00 | EKTMsgTypeShort = %x00 | |||
EKTMsgTypeExtension = %x03-FF ; Message type %x01 is reserved, due to | EKTMsgTypeExtension = %x03-FF ; Message Type %x01 is not available | |||
; usage by legacy implementations. | ; for assignment due to its usage by | |||
; legacy implementations. | ||||
EKTMsgLength = 2BYTE; | EKTMsgLength = 2BYTE | |||
SRTPMasterKeyLength = BYTE | SRTPMasterKeyLength = BYTE | |||
SRTPMasterKey = 1*242BYTE | SRTPMasterKey = 1*242BYTE | |||
SSRC = 4BYTE; SSRC from RTP | SSRC = 4BYTE ; SSRC from RTP | |||
ROC = 4BYTE ; ROC from SRTP FOR THE GIVEN SSRC | ROC = 4BYTE ; ROC from SRTP for the given SSRC | |||
EKTPlaintext = SRTPMasterKeyLength SRTPMasterKey SSRC ROC | EKTPlaintext = SRTPMasterKeyLength SRTPMasterKey SSRC ROC | |||
EKTCiphertext = 1*251BYTE ; EKTEncrypt(EKTKey, EKTPlaintext) | EKTCiphertext = 1*251BYTE ; EKTEncrypt(EKTKey, EKTPlaintext) | |||
Epoch = 2BYTE | Epoch = 2BYTE | |||
SPI = 2BYTE | SPI = 2BYTE | |||
FullEKTField = EKTCiphertext SPI Epoch EKTMsgLength EKTMsgTypeFull | FullEKTField = EKTCiphertext SPI Epoch EKTMsgLength EKTMsgTypeFull | |||
ShortEKTField = EKTMsgTypeShort | ShortEKTField = EKTMsgTypeShort | |||
ExtensionData = 1*1024BYTE | ExtensionData = 1*1024BYTE | |||
ExtensionEKTField = ExtensionData EKTMsgLength EKTMsgTypeExtension | ExtensionEKTField = ExtensionData EKTMsgLength EKTMsgTypeExtension | |||
EKTField = FullEKTField / ShortEKTField / ExtensionEKTField | EKTField = FullEKTField / ShortEKTField / ExtensionEKTField]]></sourcecode> | |||
</artwork></figure> | </figure> | |||
<t>These fields and data elements are defined as follows: | <t>These fields and data elements are defined as follows: | |||
</t> | ||||
<t>EKTPlaintext: The data that is input to the EKT encryption | ||||
operation. This data never appears on the wire, and is used only in | ||||
computations internal to EKT. This is the concatenation of the SRTP | ||||
Master Key and its length, the SSRC, and the ROC. | ||||
</t> | ||||
<t>EKTCiphertext: The data that is output from the EKT encryption | ||||
operation, described in <xref target="cipher"/>. This field is included in SRTP | ||||
packets when EKT is in use. The length of EKTCiphertext can be larger | ||||
than the length of the EKTPlaintext that was encrypted. | ||||
</t> | ||||
<t>SRTPMasterKey: On the sender side, the SRTP Master Key associated with | ||||
the indicated SSRC. | ||||
</t> | ||||
<t>SRTPMasterKeyLength: The length of the SRTPMasterKey in bytes. This | ||||
depends on the cipher suite negotiated for SRTP using SDP Offer/Answer | ||||
<xref target="RFC3264"/> for the SRTP. | ||||
</t> | ||||
<t>SSRC: On the sender side, this is the SSRC for this SRTP | ||||
source. The length of this field is 32 bits. The SSRC value in the | ||||
EKT tag MUST be the same as the one in the header of the SRTP packet | ||||
to which the tag is appended. | ||||
</t> | ||||
<t>Rollover Counter (ROC): On the sender side, this is set to the | ||||
current value of the SRTP rollover counter in the SRTP context | ||||
associated with the SSRC in the SRTP packet. The length of | ||||
this field is 32 bits. | ||||
</t> | ||||
<t>Security Parameter Index (SPI): This field indicates the appropriate | ||||
EKTKey and other parameters for the receiver to use when processing | ||||
the packet, within a given conference. The length of this field is | ||||
16 bits, representing a two-byte integer in network byte order. The | ||||
parameters identified by this field are: | ||||
</t> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t>The EKT cipher used to process the packet.</t> | ||||
<t>The EKTKey used to process the packet.</t> | ||||
<t>The SRTP Master Salt associated with any master key encrypted with | ||||
this EKT Key. The master salt is communicated separately, via | ||||
signaling, typically along with the EKTKey. (Recall that the SRTP | ||||
master salt is used in the formation of IVs / nonces.)</t> | ||||
</list> | ||||
</t> | ||||
<t>Epoch: This field indicates how many SRTP keys have been sent for this | ||||
SSRC under the current EKTKey, prior to the current key, as a two-byte | ||||
integer in network byte order. It starts at zero at the beginning | ||||
of a session and resets to zero whenever the EKTKey is changed | ||||
(i.e., when a new SPI appears). The epoch for an SSRC increments by | ||||
one every time the sender transmits a new key. The recipient of a | ||||
FullEKTField MUST reject any future FullEKTField for this SPI and | ||||
SSRC that has an equal or lower epoch value to an epoch already | ||||
seen. | ||||
</t> | ||||
<t>Together, these data elements are called an EKT parameter set. Each | ||||
distinct EKT parameter set that is used MUST be associated with a | ||||
distinct SPI value to avoid ambiguity. | ||||
</t> | ||||
<t>EKTMsgLength: All EKT messages types other than the ShortEKTField | ||||
have a length as second from the last element. This is the length | ||||
in octets (in network byte order) of either the | ||||
FullEKTField/ExtensionEKTField including this length field and the | ||||
following EKT Message Type. | ||||
</t> | ||||
<t>Message Type: The last byte is used to indicate the type of the | ||||
EKTField. This MUST be 2 for the FullEKTField format and 0 in | ||||
ShortEKTField format. If a received EKT tag has an unknown message | ||||
type, then the receiver MUST discard the whole EKT tag. | ||||
</t> | </t> | |||
</section> | <dl newline="true" spacing="normal"> | |||
<dt>EKTPlaintext:</dt> | ||||
<dd>This is the data that is input to the EKT encryption operation. This data | ||||
never | ||||
appears on the wire; it is used only in computations internal to EKT. This | ||||
is the concatenation of the SRTP master key and its length, the SSRC, and | ||||
the ROC.</dd> | ||||
<dt>EKTCiphertext:</dt> | ||||
<dd>This is the data that is output from the EKT encryption operation | ||||
(see <xref target="cipher" format="default"/>). This field is included in SRTP | ||||
packets when EKT is in use. The length of the EKTCiphertext can be larger tha | ||||
n | ||||
the length of the EKTPlaintext that was encrypted.</dd> | ||||
<dt>SRTPMasterKey:</dt> | ||||
<dd>On the sender side, this is the SRTP master key associated with the indica | ||||
ted | ||||
SSRC.</dd> | ||||
<dt>SRTPMasterKeyLength:</dt> | ||||
<dd>This is the length of the SRTPMasterKey in bytes. This depends on the ciph | ||||
er | ||||
suite negotiated for SRTP using Session Description Protocol (SDP) Offer/Answe | ||||
r <xref target="RFC3264" | ||||
format="default"/>. | ||||
</dd> | ||||
<dt>SSRC:</dt> | ||||
<dd>On the sender side, this is the SSRC for this SRTP source. The length of | ||||
this field is 32 bits. The SSRC value in the EKT Tag <bcp14>MUST</bcp14> be | ||||
the same as the one in the header of the SRTP packet to which the tag is | ||||
appended.</dd> | ||||
<dt>Rollover Counter (ROC):</dt> | ||||
<dd>On the sender side, this is set to the current value of the SRTP | ||||
ROC in the SRTP context associated with the SSRC in the SRTP | ||||
packet. The length of this field is 32 bits.</dd> | ||||
<section anchor="spis-and-ekt-parameter-sets" title="SPIs and EKT Parameter Sets | <dt>Security Parameter Index (SPI):</dt> | |||
"> | <dd><t>This field indicates the appropriate EKTKey and other parameters for th | |||
<t>The SPI field identifies the parameters for how the EKT tag should | e | |||
be processed: | receiver to use when processing the packet, within a given conference. The | |||
length of this field is 16 bits, representing a two-byte integer in network | ||||
byte order. The parameters identified by this field are as follows:</t> | ||||
<ul spacing="normal"> | ||||
<li>The EKT Cipher used to process the packet.</li> | ||||
<li>The EKTKey used to process the packet.</li> | ||||
<li>The SRTP master salt associated with any master key encrypted | ||||
with this EKT Key. The master salt is communicated separately, v | ||||
ia | ||||
signaling, typically along with the EKTKey. (Recall that the SRTP | ||||
master salt is used in the formation of Initialization Vectors | ||||
(IVs) / nonces.)</li> | ||||
</ul> | ||||
</dd> | ||||
<dt>Epoch:</dt> | ||||
<dd>This field indicates how many SRTP keys have been sent for this SSRC | ||||
under the current EKTKey, prior to the current key, as a two&nbhy;byte intege | ||||
r | ||||
in network byte order. It starts at zero at the beginning of a session and | ||||
resets to zero whenever the EKTKey is changed (i.e., when a new SPI | ||||
appears). The epoch for an SSRC increments by one every time the sender | ||||
transmits a new key. The recipient of a FullEKTField <bcp14>MUST</bcp14> | ||||
reject any future FullEKTField for this SPI and SSRC that has an epoch | ||||
value equal to or lower than an epoch already seen.</dd> | ||||
</dl> | ||||
<t>Together, these data elements are called an "EKT parameter set". To | ||||
avoid ambiguity, each distinct EKT parameter set that is used | ||||
<bcp14>MUST</bcp14> be associated with a distinct SPI value. | ||||
</t> | </t> | |||
<t> | <dl newline="true" spacing="normal"> | |||
<list style="symbols"> | <dt>EKTMsgLength:</dt> | |||
<t>The EKTKey and EKT cipher used to process the packet.</t> | <dd>All EKT Message Types other than the ShortEKTField include a length | |||
<t>The SRTP Master Salt associated with any master key encrypted with | in octets (in network byte | |||
this EKT Key. The master salt is communicated separately, via | order) of either the FullEKTField or the ExtensionEKTField, including this le | |||
signaling, typically along with the EKTKey.</t> | ngth | |||
</list> | field and the EKT Message Type (as defined in the next paragraph).</dd> | |||
<dt>Message Type:</dt> | ||||
<dd>The last byte is used to indicate the type of the EKTField. This | ||||
<bcp14>MUST</bcp14> be 2 for the FullEKTField format and 0 for the ShortEKTFi | ||||
eld | ||||
format. If a received EKT Tag has an unknown Message Type, then the | ||||
receiver <bcp14>MUST</bcp14> discard the whole EKT Tag.</dd> | ||||
</dl> | ||||
</section> | ||||
<section anchor="spis-and-ekt-parameter-sets" numbered="true" toc="default | ||||
"> | ||||
<name>SPIs and EKT Parameter Sets</name> | ||||
<t>The SPI identifies the parameters for how the EKT Tag should | ||||
be processed: | ||||
</t> | </t> | |||
<t>Together, these data elements are called an "EKT parameter set". Ea | <ul spacing="normal"> | |||
ch | <li>The EKTKey and EKT Cipher used to process the packet.</li> | |||
distinct EKT parameter set that is used MUST be associated with a | <li>The SRTP master salt associated with any master key encrypted | |||
distinct SPI value to avoid ambiguity. The association of a given | with this EKT Key. The master salt is communicated separately, v | |||
ia | ||||
signaling, typically along with the EKTKey.</li> | ||||
</ul> | ||||
<t>Together, these data elements are called an "EKT parameter set". To | ||||
avoid ambiguity, each distinct EKT parameter set that is used | ||||
<bcp14>MUST</bcp14> be associated with a distinct SPI value. The associ | ||||
ation of a given | ||||
parameter set with a given SPI value is configured by some other | parameter set with a given SPI value is configured by some other | |||
protocol, e.g., the DTLS-SRTP extension defined in | protocol, e.g., the DTLS-SRTP extension defined in | |||
<xref target="dtls-srtp-kt"/>. | <xref target="dtls-srtp-kt" format="default"/>. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="pkt_proc" numbered="true" toc="default"> | ||||
<section anchor="pkt_proc" title="Packet Processing and State Machine"> | <name>Packet Processing and State Machine</name> | |||
<t>At any given time, each SRTP source has associated with it a | <t>At any given time, the SSRC for each SRTP source has associated with | |||
single EKT parameter set. This parameter set is used to process all | it a single EKT parameter set. This parameter set is used to | |||
outbound packets, and is called the outbound parameter set for that | process all outbound packets and is called the "outbound parameter | |||
SSRC. There may be other EKT parameter sets that are used by other | set" for that SSRC. There may be other EKT parameter sets that are used | |||
by other | ||||
SRTP sources in the same session, including other SRTP | SRTP sources in the same session, including other SRTP | |||
sources on the same endpoint (e.g., one endpoint with voice and video | sources on the same endpoint (e.g., one endpoint with voice and video | |||
might have two EKT parameter sets, or there might be multiple video | might have two EKT parameter sets, or there might be multiple video | |||
sources on an endpoint each with their own EKT parameter set). All of | sources on an endpoint, each with their own EKT parameter set). All of | |||
the received EKT parameter sets SHOULD be stored by all of the | the received EKT parameter sets <bcp14>SHOULD</bcp14> be stored by all of the | |||
participants in an SRTP session, for use in processing inbound SRTP | participants in an SRTP session, for use in processing inbound SRTP | |||
traffic. If a participant deletes an EKT parameter set | traffic. If a participant deletes an EKT parameter set | |||
(e.g., because of space limitations, then it will be unable to | (e.g., because of space limitations), then it will be unable to | |||
process Full EKT Tags containing updated media keys, and thus unable | process Full EKT Tags containing updated media keys and thus will be unable | |||
to receive media from a particpant that has changed its media key. | to receive media from a participant that has changed its media key. | |||
</t> | </t> | |||
<t>Either the FullEKTField or ShortEKTField is appended at the tail end | <t>Either the FullEKTField or ShortEKTField is appended at the tail end | |||
of all SRTP packets. The decision on which to send when is specified | of all SRTP packets. The decision regarding which parameter to send and when | |||
in <xref target="timing"/>. | is specified in <xref target="timing" format="default"/>. | |||
</t> | </t> | |||
<section anchor="outbound-processing" numbered="true" toc="default"> | ||||
<section anchor="outbound-processing" title="Outbound Processing"> | <name>Outbound Processing</name> | |||
<t>See <xref target="timing"/> which describes when to send an SRTP packet with | <t>See <xref target="timing" format="default"/>, which describes when | |||
a | to send an SRTP packet with a | |||
FullEKTField. If a FullEKTField is not being sent, then a | FullEKTField. If a FullEKTField is not being sent, then a | |||
ShortEKTField is sent so the receiver can correctly determine how to | ShortEKTField is sent so the receiver can correctly determine how to | |||
process the packet. | process the packet. | |||
</t> | </t> | |||
<t>When an SRTP packet is sent with a FullEKTField, the EKTField for that | <t>When an SRTP packet is sent with a FullEKTField, the EKTField for t | |||
packet is created as follows, or uses an equivalent set of steps. | hat | |||
packet is created per either the steps below or an equivalent set of steps. | ||||
</t> | </t> | |||
<t> | <ol spacing="normal" type="1"> | |||
<list style="numbers"> | <li>The Security Parameter Index (SPI) field is set to the value of | |||
<t>The Security Parameter Index (SPI) field is set to the value of the | the | |||
Security Parameter Index that is associated with the outbound | SPI that is associated with the outbound | |||
parameter set.</t> | parameter set.</li> | |||
<t>The EKTPlaintext field is computed from the SRTP Master Key, SSRC, | <li>The EKTPlaintext field is computed from the SRTP master key, SSR | |||
and ROC fields, as shown in <xref target="EKT"/>. The ROC, SRTP Master Key, and | C, | |||
SSRC used in EKT processing MUST be the same as the one used in | and ROC fields, as shown in <xref target="EKT" format="default"/>. The ROC, SRTP | |||
the SRTP processing.</t> | master key, and | |||
<t>The EKTCiphertext field is set to the ciphertext created by | SSRC used in EKT processing <bcp14>MUST</bcp14> be the same as the one used in | |||
SRTP processing.</li> | ||||
<li>The EKTCiphertext field is set to the ciphertext created by | ||||
encrypting the EKTPlaintext with the EKTCipher using the EKTKey | encrypting the EKTPlaintext with the EKTCipher using the EKTKey | |||
as the encryption key. The encryption process is detailed in | as the encryption key. The encryption process is detailed in | |||
<xref target="cipher"/>.</t> | <xref target="cipher" format="default"/>.</li> | |||
<t>Then the FullEKTField is formed using the EKTCiphertext and the SPI | <li> | |||
associated with the EKTKey used above. Also appended are the Length | <t>Then, the FullEKTField is formed using the EKTCiphertext and th | |||
e SPI | ||||
associated with the EKTKey used above. Also appended are the length | ||||
and Message Type using the FullEKTField format. | and Message Type using the FullEKTField format. | |||
<list style="symbols"> | ||||
<t>Note: the value of the EKTCiphertext field is identical in successive | ||||
packets protected by the same EKTKey and SRTP master key. This value MAY | ||||
be cached by an SRTP sender to minimize computational effort.</t> | ||||
</list></t> | ||||
</list> | ||||
</t> | ||||
<t>The computed value of the FullEKTField is appended to the end of the | ||||
SRTP packet, after the encrypted payload. | ||||
</t> | </t> | |||
<t>When a packet is sent with the ShortEKTField, the ShortEKFField is | </li> | |||
simply appended to the packet. | </ol> | |||
</t> | <aside><t>Note: The value of the EKTCiphertext field is identical in successi | |||
<t>Outbound packets SHOULD continue to use the old SRTP Master Key for | ve | |||
packets protected by the same EKTKey and SRTP master key. This value <bcp14>MAY< | ||||
/bcp14> | ||||
be cached by an SRTP sender to minimize computational effort.</t></aside> | ||||
<t>The computed value of the FullEKTField is appended to the end of | ||||
the SRTP packet, after the encrypted payload.</t> | ||||
<t>When a packet is sent with the ShortEKTField, the ShortEKTField | ||||
is simply appended to the packet.</t> | ||||
<t>Outbound packets <bcp14>SHOULD</bcp14> continue to use the old SRTP | ||||
master key for | ||||
250 ms after sending any new key in a FullEKTField value. This gives | 250 ms after sending any new key in a FullEKTField value. This gives | |||
all the receivers in the system time to get the new key before they | all the receivers in the system time to get the new key before they | |||
start receiving media encrypted with the new key. (The specific | start receiving media encrypted with the new key. (The specific | |||
value of 250ms is chosen to represent a reasonable upper bound on | value of 250 ms is chosen to represent a reasonable upper bound on | |||
the amount of latency and jitter that is tolerable in a real-time | the amount of latency and jitter that is tolerable in a real-time | |||
context.) | context.) | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="inbound-processing" numbered="true" toc="default"> | ||||
<section anchor="inbound-processing" title="Inbound Processing"> | <name>Inbound Processing</name> | |||
<t>When receiving a packet on a RTP stream, the following steps are | <t>When receiving a packet on an RTP stream, the following steps are | |||
applied for each SRTP received packet. | applied for each received SRTP packet. | |||
</t> | </t> | |||
<t> | <ol spacing="normal" type="1"> | |||
<list style="numbers"> | <li>The final byte is checked to determine which EKT format is in | |||
<t>The final byte is checked to determine which EKT format is in | ||||
use. When an SRTP packet contains a ShortEKTField, the | use. When an SRTP packet contains a ShortEKTField, the | |||
ShortEKTField is removed from the packet then normal SRTP | ShortEKTField is removed from the packet and then normal SRTP | |||
processing occurs. If the packet contains a FullEKTField, then | processing occurs. If the packet contains a FullEKTField, then | |||
processing continues as described below. The reason for using the | processing continues as described below. The reason for using the | |||
last byte of the packet to indicate the type is that the length of | last byte of the packet to indicate the type is that the length of | |||
the SRTP part is not known until the decryption has | the SRTP part is not known until the decryption has | |||
occurred. At this point in the processing, there is no easy way to | occurred. At this point in the processing, there is no easy way to | |||
know where the EKTField would start. However, the whole UDP packet | know where the EKTField would start. However, the whole SRTP packet | |||
has been received, so instead of the starting at the front of the | has been received, so instead of starting at the front of the | |||
packet, the parsing works backwards at the end of the packet and | packet, the parsing works backwards at the end of the packet, and | |||
thus the type is placed at the very end of the packet.</t> | thus the type is placed at the very end of the packet.</li> | |||
<t>The Security Parameter Index (SPI) field is used to find the | <li>The Security Parameter Index (SPI) field is used to find the | |||
right EKT parameter set to be used for processing the packet. | right EKT parameter set to be used for processing the packet. | |||
If there is no matching SPI, then the verification function | If there is no matching SPI, then the verification function | |||
MUST return an indication of authentication failure, and | <bcp14>MUST</bcp14> return an indication of authentication failure, and | |||
the steps described below are not performed. The EKT parameter | the steps described below are not performed. The EKT parameter | |||
set contains the EKTKey, EKTCipher, and the SRTP Master Salt.</t> | set contains the EKTKey, the EKTCipher, and the SRTP master salt.</li> | |||
<t>The EKTCiphertext is authenticated and decrypted, as | <li>The EKTCiphertext is authenticated and decrypted, as | |||
described in <xref target="cipher"/>, using the EKTKey and EKTCipher found in th | described in <xref target="cipher" format="default"/>, using the EKTKey and EKTC | |||
e | ipher found in the | |||
previous step. If the EKT decryption operation returns an | previous step. If the EKT decryption operation returns an | |||
authentication failure, then EKT processing MUST be aborted. The | authentication failure, then EKT processing <bcp14>MUST</bcp14> be aborted. The | |||
receiver SHOULD discard the whole UDP packet.</t> | receiver <bcp14>SHOULD</bcp14> discard the whole SRTP packet.</li> | |||
<t>The resulting EKTPlaintext is parsed as described in <xref target="EKT"/>, to | <li>The resulting EKTPlaintext is parsed as described in <xref targe | |||
recover the SRTP Master Key, SSRC, and ROC fields. The SRTP Master | t="EKT" format="default"/>, to | |||
Salt that is associated with the EKTKey is also retrieved. If the | recover the SRTP master key, SSRC, and ROC fields. The SRTP master | |||
value of the srtp_master_salt sent as part of the EKTkey is | salt that is associated with the EKTKey is also retrieved. If the | |||
value of the srtp_master_salt (see <xref target="ekt_key"/>) sent as part of the | ||||
EKTKey is | ||||
longer than needed by SRTP, then it is truncated by taking the | longer than needed by SRTP, then it is truncated by taking the | |||
first N bytes from the srtp_master_salt field.</t> | first N bytes from the srtp_master_salt field.</li> | |||
<t>If the SSRC in the EKTPlaintext does not match the SSRC of the SRTP packet | <li>If the SSRC in the EKTPlaintext does not match the SSRC of the S | |||
received, then this FullEKTField MUST be discarded and the following steps in | RTP packet | |||
received, then this FullEKTField <bcp14>MUST</bcp14> be discarded and the | ||||
subsequent steps in | ||||
this list skipped. After stripping the FullEKTField, the remainder of | this list skipped. After stripping the FullEKTField, the remainder of | |||
the SRTP packet MAY be processed as normal.</t> | the SRTP packet <bcp14>MAY</bcp14> be processed as normal.</li> | |||
<t>The SRTP Master Key, ROC, and SRTP Master Salt from the previous | <li> | |||
<t>The SRTP master key, ROC, and SRTP master salt from the previou | ||||
s | ||||
steps are saved in a map indexed by the SSRC found in the | steps are saved in a map indexed by the SSRC found in the | |||
EKTPlaintext and can be used for any future crypto operations on | EKTPlaintext and can be used for any future crypto operations on | |||
the inbound packets with that SSRC. | the inbound packets with that SSRC. | |||
<list style="symbols"> | </t> | |||
<t>Unless the transform specifies other acceptable key lengths, | <ul spacing="normal"> | |||
the length of the SRTP Master Key MUST be the same as the | <li>Unless the transform specifies other acceptable key lengths, | |||
the length of the SRTP master key <bcp14>MUST</bcp14> be the same as the | ||||
master key length for the SRTP transform in use. If this is | master key length for the SRTP transform in use. If this is | |||
not the case, then the receiver MUST abort EKT processing and | not the case, then the receiver <bcp14>MUST</bcp14> abort EKT processing and | |||
SHOULD discared the whole UDP packet.</t> | <bcp14>SHOULD</bcp14> discard the whole SRTP packet.</li> | |||
<t>If the length of the SRTP Master Key is less than the master | <li>If the length of the SRTP master key is less than the master | |||
key length for the SRTP transform in use, and the transform | key length for the SRTP transform in use and the transform | |||
specifies that this length is acceptable, then the SRTP Master | specifies that this length is acceptable, then the SRTP master | |||
Key value is used to replace the first bytes in the existing | key value is used to replace the first bytes in the existing | |||
master key. The other bytes remain the same as in the old key. | master key. The other bytes remain the same as in the old key. | |||
For example, the Double GCM transform <xref target="I-D.ietf-perc-double"/> | For example, the double GCM transform <xref target="RFC8723" format="default"/> | |||
allows replacement of the first, "end to end" half of the | allows replacement of the first ("end-to-end") half of the | |||
master key.</t> | master key.</li> | |||
</list></t> | </ul> | |||
<t>At this point, EKT processing has successfully completed, and the | </li> | |||
normal SRTP processing takes place.</t> | <li>At this point, EKT processing has successfully completed, and th | |||
</list> | e | |||
</t> | normal SRTP processing takes place.</li> | |||
<t>The value of the EKTCiphertext field is identical in successive | </ol> | |||
packets protected by the same EKT parameter set and the same SRTP | <t>The value of the EKTCiphertext field is identical in successive | |||
master key, and ROC. SRTP senders and receivers MAY cache an | packets protected by the same EKT parameter set, SRTP | |||
master key, and ROC. | ||||
SRTP senders and receivers <bcp14>MAY</bcp14> cache an | ||||
EKTCiphertext value to optimize processing in cases where the master | EKTCiphertext value to optimize processing in cases where the master | |||
key hasn't changed. Instead of encrypting and decrypting, senders | key hasn't changed. Instead of encrypting and decrypting, senders | |||
can simply copy the pre-computed value and receivers can compare a | can simply copy the precomputed value and receivers can compare a | |||
received EKTCiphertext to the known value. | received EKTCiphertext to the known value. | |||
</t> | </t> | |||
<t><xref target="outbound-processing"/> recommends that SRTP senders continue us | <t><xref target="outbound-processing" format="default"/> recommends th | |||
ing | at SRTP senders continue using | |||
an old key for some time after sending a new key in an EKT tag. | an old key for some time after sending a new key in an EKT Tag. | |||
Receivers that wish to avoid packet loss due to decryption failures | Receivers that wish to avoid packet loss due to decryption failures | |||
MAY perform trial decryption with both the old key and the new key, | <bcp14>MAY</bcp14> perform trial decryption with both the old key and the new ke y, | |||
keeping the result of whichever decryption succeeds. Note that this | keeping the result of whichever decryption succeeds. Note that this | |||
approach is only compatible with SRTP transforms that include | approach is only compatible with SRTP transforms that include | |||
integrity protection. | integrity protection. | |||
</t> | </t> | |||
<t>When receiving a new EKTKey, implementations need to use the | <t>When receiving a new EKTKey, implementations need to use the | |||
ekt_ttl field (see <xref target="ekt_key"/>) | ekt_ttl field (see <xref target="ekt_key" format="default"/>) | |||
to create a time after which this key cannot be used and they also | to create a time after which this key cannot be used, and they also | |||
need to create a counter that keeps track of how many times the key | need to create a counter that keeps track of how many times the key | |||
has been used to encrypt data to ensure it does not exceed the T value | has been used to encrypt data, to ensure that it does not exceed the T value | |||
for that cipher (see <xref target="cipher"/>). If either of these limits are exc | for that cipher (see <xref target="cipher" format="default"/>). If either of | |||
eeded, | these limits is exceeded, | |||
the key can no longer be used for encryption. At this point implementation | the key can no longer be used for encryption. At this point, implementations | |||
need to either use the call signaling to renegotiate a new session | need to either use call signaling to renegotiate a new session | |||
or need to terminate the existing session. Terminating the session is a | or terminate the existing session. Terminating the session is a | |||
reasonable implementation choice because these limits should not be | reasonable implementation choice because these limits should not be | |||
exceeded except under an attack or error condition. | exceeded, except under an attack or error condition. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="cipher" numbered="true" toc="default"> | ||||
<section anchor="cipher" title="Ciphers"> | <name>Ciphers</name> | |||
<t>EKT uses an authenticated cipher to encrypt and authenticate the | <t>EKT uses an authenticated cipher to encrypt and authenticate the | |||
EKTPlaintext. This specification defines the interface to the cipher, | EKTPlaintext. This specification defines the interface to the cipher, | |||
in order to abstract the interface away from the details of that | in order to abstract the interface away from the details of that | |||
function. This specification also defines the default cipher that is | function. This specification also defines the default cipher that is | |||
used in EKT. The default cipher described in <xref target="DefaultCipher"/> MUST | used in EKT. The default cipher described in <xref target="DefaultCipher" format ="default"/> <bcp14>MUST</bcp14> | |||
be implemented, but another cipher that conforms to this interface | be implemented, but another cipher that conforms to this interface | |||
MAY be used. The cipher used for a given EKTCiphertext value is | <bcp14>MAY</bcp14> be used. The cipher used for a given EKTCiphertext value is | |||
negotiated using the supported_ekt_ciphers and indicated with the | negotiated using the supported_ekt_ciphers extension (see <xref target="dtls-srt | |||
p-extensions"/>) and indicated with the | ||||
SPI value in the FullEKTField. | SPI value in the FullEKTField. | |||
</t> | </t> | |||
<t>An EKTCipher consists of an encryption function and a decryption | <t>An EKTCipher consists of an encryption function and a decryption | |||
function. The encryption function E(K, P) takes the following inputs: | function. The encryption function E(K, P) takes the following inputs: | |||
</t> | </t> | |||
<t> | <ul spacing="normal"> | |||
<list style="symbols"> | <li>a secret key K with a length of L bytes, and</li> | |||
<t>a secret key K with a length of L bytes, and</t> | <li>a plaintext value P with a length of M bytes.</li> | |||
<t>a plaintext value P with a length of M bytes.</t> | </ul> | |||
</list> | <t>The encryption function returns a ciphertext value C whose length is | |||
</t> | N | |||
<t>The encryption function returns a ciphertext value C whose length is N | bytes, where N may be larger than M. The decryption function D(K, C) | |||
bytes, where N may be larger than M. The decryption function D(K, C) | ||||
takes the following inputs: | takes the following inputs: | |||
</t> | </t> | |||
<t> | <ul spacing="normal"> | |||
<list style="symbols"> | <li>a secret key K with a length of L bytes, and</li> | |||
<t>a secret key K with a length of L bytes, and</t> | <li>a ciphertext value C with a length of N bytes.</li> | |||
<t>a ciphertext value C with a length of N bytes.</t> | </ul> | |||
</list> | <t>The decryption function returns a plaintext value P that is M bytes | |||
</t> | long, or it returns an indication that the decryption operation failed | |||
<t>The decryption function returns a plaintext value P that is M bytes | because the ciphertext was invalid (i.e., it was not generated by the | |||
long, or returns an indication that the decryption operation failed | ||||
because the ciphertext was invalid (i.e. it was not generated by the | ||||
encryption of plaintext with the key K). | encryption of plaintext with the key K). | |||
</t> | </t> | |||
<t>These functions have the property that D(K, E(K, P)) = P for all | <t>These functions have the property that D(K, E(K, P)) = P for all | |||
values of K and P. Each cipher also has a limit T on the number of | values of K and P. Each cipher also has a limit T on the number of | |||
times that it can be used with any fixed key value. The EKTKey MUST | times that it can be used with any fixed key value. The EKTKey <bcp14>MUST | |||
NOT be used for encryption more that T times. Note that if the same | NOT</bcp14> be used for encryption more than T times. Note that if the same | |||
FullEKTField is retransmitted 3 times, that only counts as 1 | FullEKTField is retransmitted three times, that only counts as one | |||
encryption. | encryption. | |||
</t> | </t> | |||
<t>Security requirements for EKT ciphers are discussed in <xref target="sec"/>. | <t>Security requirements for EKT Ciphers are discussed in <xref | |||
</t> | target="sec" format="default"/>.</t> | |||
<section anchor="DefaultCipher" numbered="true" toc="default"> | ||||
<section anchor="DefaultCipher" title="AES Key Wrap"> | <name>AES Key Wrap</name> | |||
<t>The default EKT Cipher is the Advanced Encryption Standard (AES) Key | <t>The default EKT Cipher is the Advanced Encryption Standard (AES) | |||
Wrap with Padding <xref target="RFC5649"/> algorithm. It requires a plaintext | Key Wrap with Padding algorithm <xref target="RFC5649" format="default | |||
length M that is at least one octet, and it returns a ciphertext with | "/>. It requires a plaintext length M that is at least one | |||
a length of N = M + (M mod 8) + 8 octets. | octet, and it returns a ciphertext with a length of N = M + (M mod | |||
<vspace/> | 8) + 8 octets. It can be used with key sizes of L = 16 octets or L = 3 | |||
It can be used with key sizes of L = 16, and L = 32 octets, and | 2 | |||
its use with those key sizes is indicated as AESKW128, or AESKW256, | octets, and its use with those key sizes is indicated as AESKW128 | |||
respectively. The key size determines the length of the AES key used by the | or AESKW256, respectively. | |||
Key Wrap algorithm. With this cipher, T=2^48. | The key size determines the length of the | |||
</t> | AES key used by the Key Wrap algorithm. With this cipher, | |||
<texttable anchor="CipherTable" title="EKT Ciphers | T=2<sup>48</sup>.</t> | |||
"> | <table anchor="CipherTable" align="center"> | |||
<ttcol align="left">Cipher</ttcol> | <name>EKT Ciphers</name> | |||
<ttcol align="right">L</ttcol> | <thead> | |||
<ttcol align="right">T</ttcol> | <tr> | |||
<th align="left">Cipher</th> | ||||
<c>AESKW128</c><c>16</c><c>2^48</c> | <th align="right">L</th> | |||
<c>AESKW256</c><c>32</c><c>2^48</c> | <th align="right">T</th> | |||
</texttable> | </tr> | |||
<t>As AES-128 is the mandatory to implement transform in SRTP, AESKW128 | </thead> | |||
MUST be implemented for EKT and AESKW256 MAY be implemented. | <tbody> | |||
<tr> | ||||
<td align="left">AESKW128</td> | ||||
<td align="right">16</td> | ||||
<td align="right">2<sup>48</sup></td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">AESKW256</td> | ||||
<td align="right">32</td> | ||||
<td align="right">2<sup>48</sup></td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>As AES-128 is the mandatory-to-implement transform in SRTP, AESKW12 | ||||
8 | ||||
<bcp14>MUST</bcp14> be implemented for EKT. AESKW256 <bcp14>MAY</bcp14> be imple | ||||
mented. | ||||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="defining-new-ekt-ciphers" numbered="true" toc="default" | ||||
<section anchor="defining-new-ekt-ciphers" title="Defining New EKT Ciphers"> | > | |||
<t>Other specifications may extend this document by defining other | <name>Defining New EKT Ciphers</name> | |||
EKTCiphers as described in <xref target="iana"/>. This section defines how those | <t>Other specifications may extend this document by defining other | |||
EKTCiphers, as described in <xref target="iana" format="default"/>. This section | ||||
defines how those | ||||
ciphers interact with this specification. | ciphers interact with this specification. | |||
</t> | </t> | |||
<t>An EKTCipher determines how the EKTCiphertext field is written, and | <t>An EKTCipher determines how the EKTCiphertext field is written and | |||
how it is processed when it is read. This field is opaque to the other | how it is processed when it is read. This field is opaque to the other | |||
aspects of EKT processing. EKT ciphers are free to use this field in | aspects of EKT processing. EKT Ciphers are free to use this field in | |||
any way, but they SHOULD NOT use other EKT or SRTP fields as an | any way, but they <bcp14>SHOULD NOT</bcp14> use other EKT or SRTP fields as an | |||
input. The values of the parameters L, and T MUST be defined by each | input. The values of the parameters L and T <bcp14>MUST</bcp14> be defined by ea | |||
EKTCipher. The cipher MUST provide integrity protection. | ch | |||
EKTCipher. | ||||
The cipher <bcp14>MUST</bcp14> provide integrity protection. | ||||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="SynchronizingOperation" numbered="true" toc="default"> | ||||
<section anchor="SynchronizingOperation" title="Synchronizing Operation"> | <name>Synchronizing Operation</name> | |||
<t>If a source has its EKTKey changed by the key management, it MUST also | <t>If a source has its EKTKey changed by key management, it <bcp14>MUST< | |||
/bcp14> also | ||||
change its SRTP master key, which will cause it to send out a new | change its SRTP master key, which will cause it to send out a new | |||
FullEKTField and eventually begin encrypting with it, as defined in | FullEKTField and eventually begin encrypting with it, as described in | |||
<xref target="outbound-processing"/>. | <xref target="outbound-processing" format="default"/>. | |||
This ensures that if key management thought the EKTKey | This ensures that if key management thought the EKTKey | |||
needs changing (due to a participant leaving or joining) and | needs changing (due to a participant leaving or joining) and | |||
communicated that to a source, the source will also change its SRTP | communicated that to a source, the source will also change its SRTP | |||
master key, so that traffic can be decrypted only by those who know | master key, so that traffic can be decrypted only by those who know | |||
the current EKTKey. | the current EKTKey. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="timing" numbered="true" toc="default"> | ||||
<section anchor="timing" title="Timing and Reliability Consideration"> | <name>Timing and Reliability Considerations</name> | |||
<t>A system using EKT learns the SRTP master keys distributed with | <t>A system using EKT learns the SRTP master keys distributed with | |||
the FullEKTField sent with the SRTP, rather than with call signaling. A | the FullEKTField sent with SRTP, rather than with call signaling. | |||
A | ||||
receiver can immediately decrypt an SRTP packet, provided the SRTP | receiver can immediately decrypt an SRTP packet, provided the SRTP | |||
packet contains a FullEKTField. | packet contains a FullEKTField. | |||
</t> | </t> | |||
<t>This section describes how to reliably and expediently deliver new | <t>This section describes how to reliably and expediently deliver new | |||
SRTP master keys to receivers. | SRTP master keys to receivers. | |||
</t> | </t> | |||
<t>There are three cases to consider. The first case is a new sender | <t>There are three cases to consider. In the first case, a new | |||
joining a session, which needs to communicate its SRTP master key to | sender joins a session and needs to communicate its SRTP | |||
all the receivers. The second case is a sender changing its SRTP | master key to all the receivers. In the second case, a sender | |||
master key which needs to be communicated to all the receivers. The | changes its SRTP master key, which needs to be communicated to all | |||
third case is a new receiver joining a session already in progress | the receivers. In the third case, a new receiver joins a session | |||
which needs to know the sender's SRTP master key. | already in progress and needs to know the sender's SRTP | |||
</t> | master key. | |||
<t>The three cases are: | ||||
</t> | </t> | |||
<t> | <t>The three cases are as follows:</t> | |||
<list style="hanging"> | <dl newline="true" spacing="normal"> | |||
<t hangText="New sender:"> | <dt>New sender:</dt> | |||
<vspace /> | <dd> | |||
A new sender SHOULD send a packet containing the | A new sender <bcp14>SHOULD</bcp14> send a packet containing the | |||
FullEKTField as soon as possible, always before or coincident with | FullEKTField as soon as possible, ideally in its initial SRTP packet. To accomm | |||
sending its initial SRTP packet. To accommodate packet loss, it is | odate packet loss, it is | |||
RECOMMENDED that the FullEKTField be transmitted in three consecutive packets. | <bcp14>RECOMMENDED</bcp14> that the FullEKTField be transmitted in three consecu | |||
tive packets. | ||||
If the sender does not send a FullEKTField in its | If the sender does not send a FullEKTField in its | |||
initial packets and receivers have not otherwise been provisioned | initial packets and receivers have not otherwise been provisioned | |||
with a decryption key, then decryption will fail and SRTP packets | with a decryption key, then decryption will fail and SRTP packets | |||
will be dropped until the receiver receives a FullEKTField from the | will be dropped until the receiver receives a FullEKTField from the | |||
sender.</t> | sender.</dd> | |||
<t hangText="Rekey:"> | <dt>Rekey:</dt> | |||
<vspace /> | <dd> | |||
By sending EKT tag over SRTP, the rekeying event shares fate with the | By sending an EKT Tag over SRTP, the rekeying event shares fate with the | |||
SRTP packets protected with that new SRTP master key. To accommodate | SRTP packets protected with that new SRTP master key. To accommodate | |||
packet loss, it is RECOMMENDED that three consecutive packets contain | packet loss, it is <bcp14>RECOMMENDED</bcp14> that three consecutive packets | |||
the FullEKTField be transmitted.</t> | containing the FullEKTField be transmitted.</dd> | |||
<t hangText="New receiver:"> | <dt>New receiver:</dt> | |||
<vspace /> | <dd> | |||
When a new receiver joins a session it does not need to communicate | When a new receiver joins a session, it does not need to communicate | |||
its sending SRTP master key (because it is a receiver). When a new | its sending SRTP master key (because it is a receiver). Also, when a new | |||
receiver joins a session, the sender is generally unaware of the | receiver joins a session, the sender is generally unaware of the | |||
receiver joining the session. Thus, senders SHOULD periodically | receiver joining the session; thus, senders <bcp14>SHOULD</bcp14> periodically | |||
transmit the FullEKTField. That interval depends on how frequently new | transmit the FullEKTField. That interval depends on how frequently new | |||
receivers join the session, the acceptable delay before those | receivers join the session, the acceptable delay before those | |||
receivers can start processing SRTP packets, and the acceptable | receivers can start processing SRTP packets, and the acceptable | |||
overhead of sending the FullEKTField. If sending audio and video, the | overhead of sending the FullEKTField. If sending audio and video, the | |||
RECOMMENDED frequency is the same as the rate of intra coded video | <bcp14>RECOMMENDED</bcp14> frequency is the same as the rate of intra-coded vide | |||
frames. If only sending audio, the RECOMMENDED frequency is every | o | |||
100ms.</t> | frames. If only sending audio, the <bcp14>RECOMMENDED</bcp14> frequency is every | |||
</list> | 100 ms.</dd> | |||
</t> | </dl> | |||
<t>In general, sending EKT tags less frequently will consume less bandwidth, but | <t>If none of the above three cases apply, a ShortEKTField <bcp14>SHOULD | |||
increase the time it takes for a join or rekey to take effect. Applications | </bcp14> be sent. | |||
should schedule the sending of EKT tags in a way that makes sense for their | </t> | |||
bandwidth and latency requirements. | ||||
</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="dtls-srtp-kt" title="Use of EKT with DTLS-SRTP"> | <t> | |||
<t>This document defines an extension to DTLS-SRTP called SRTP EKTKey | In general, sending FullEKTField tags less frequently will consume less | |||
Transport which enables secure transport of EKT keying material from | bandwidth but will increase the time it takes for a join or rekey to | |||
take effect. Applications should schedule the sending of FullEKTField tags in | ||||
a way that makes sense for their bandwidth and latency requirements. | ||||
</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="dtls-srtp-kt" numbered="true" toc="default"> | ||||
<name>Use of EKT with DTLS-SRTP</name> | ||||
<t>This document defines an extension to DTLS-SRTP called "SRTP EKTKey | ||||
Transport", which enables secure transport of EKT keying material from | ||||
the DTLS-SRTP peer in the server role to the client. This allows | the DTLS-SRTP peer in the server role to the client. This allows | |||
those peers to process EKT keying material in SRTP and | such a peer to process EKT keying material in SRTP and | |||
retrieve the embedded SRTP keying material. This combination of | retrieve the embedded SRTP keying material. | |||
This combination of | ||||
protocols is valuable because it combines the advantages of DTLS, | protocols is valuable because it combines the advantages of DTLS, | |||
which has strong authentication of the endpoint and flexibility, | which has strong authentication of the endpoint and flexibility, | |||
along with allowing secure multiparty RTP with loose coordination | along with allowing secure multi-party RTP with loose coordination | |||
and efficient communication of per-source keys. | and efficient communication of per-source keys. | |||
</t> | </t> | |||
<t>In cases where the DTLS termination point is more trusted than the | <t>In cases where the DTLS termination point is more trusted than the | |||
media relay, the protection that DTLS affords to EKT key material | media relay, the protection that DTLS affords to EKT keying material | |||
can allow EKT keys to be tunneled through an untrusted relay such as | can allow EKT Keys to be tunneled through an untrusted relay such as | |||
a centralized conference bridge. For more details, see | a centralized conference bridge. For more details, see | |||
<xref target="I-D.ietf-perc-private-media-framework"/>. | <xref target="RFC8871" format="default"/>. | |||
</t> | </t> | |||
<section anchor="dtlssrtp-recap" numbered="true" toc="default"> | ||||
<section anchor="dtlssrtp-recap" title="DTLS-SRTP Recap"> | <name>DTLS-SRTP Recap</name> | |||
<t>DTLS-SRTP <xref target="RFC5764"/> uses an extended DTLS exchange between two | <t>DTLS-SRTP <xref target="RFC5764" format="default"/> uses an extended | |||
DTLS exchange between two | ||||
peers to exchange keying material, algorithms, and parameters for | peers to exchange keying material, algorithms, and parameters for | |||
SRTP. The SRTP flow operates over the same transport as the | SRTP. The SRTP flow operates over the same transport as the | |||
DTLS-SRTP exchange (i.e., the same 5-tuple). DTLS-SRTP combines the | DTLS-SRTP exchange (i.e., the same 5-tuple). DTLS-SRTP combines the | |||
performance and encryption flexibility benefits of SRTP with the | performance and encryption flexibility benefits of SRTP with the | |||
flexibility and convenience of DTLS-integrated key and association | flexibility and convenience of DTLS-integrated key and association | |||
management. DTLS-SRTP can be viewed in two equivalent ways: as a new | management. DTLS-SRTP can be viewed in two equivalent ways: as a new | |||
key management method for SRTP, and a new RTP-specific data format | key management method for SRTP and as a new RTP-specific data format | |||
for DTLS. | for DTLS. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="dtls-srtp-extensions" numbered="true" toc="default"> | ||||
<section anchor="dtls-srtp-extensions" title="SRTP EKT Key Transport Extensions | <name>SRTP EKT Key Transport Extensions to DTLS-SRTP</name> | |||
to DTLS-SRTP"> | <t>This document defines a new TLS negotiated extension | |||
<t>This document defines a new TLS negotiated extension | called "supported_ekt_ciphers" and a new TLS handshake message type called | |||
supported_ekt_ciphers and a new TLS handshake message type | "ekt_key". The extension negotiates the cipher to be used in | |||
ekt_key. The extension negotiates the cipher to be used in | ||||
encrypting and decrypting EKTCiphertext values, and the handshake | encrypting and decrypting EKTCiphertext values, and the handshake | |||
message carries the corresponding key. | message carries the corresponding key. | |||
</t> | </t> | |||
<t><xref target="dtls-srtp-flow"/> shows a message flow of DTLS 1.3 client and s | <t><xref target="dtls-srtp-flow" format="default"/> shows a message | |||
erver | flow between a DTLS 1.3 client and server | |||
using EKT configured using the DTLS extensions described in this | using EKT configured using the DTLS extensions described in this | |||
section. (The initial cookie exchange and other normal DTLS | section. (The initial cookie exchange and other normal DTLS | |||
messages are omitted.) To be clear, EKT can be used with versions | messages are omitted.) To be clear, EKT can be used with versions | |||
of DTLS prior to 1.3. The only difference is that in a pre-1.3 TLS | of DTLS prior to 1.3. The only difference is that in pre-1.3 TLS, | |||
stacks will not have built-in support for generating and processing | stacks will not have built-in support for generating and processing | |||
ACK messages. | ACK messages. | |||
</t> | </t> | |||
<figure anchor="dtls-srtp-flow"> | ||||
<figure anchor="dtls-srtp-flow" align="center"><artwork align="center"> | <name>DTLS 1.3 Message Flow</name> | |||
<artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
Client Server | Client Server | |||
ClientHello | ClientHello | |||
+ use_srtp | + use_srtp | |||
+ supported_ekt_ciphers | + supported_ekt_ciphers | |||
--------> | --------> | |||
ServerHello | ServerHello | |||
{EncryptedExtensions} | {EncryptedExtensions} | |||
+ use_srtp | + use_srtp | |||
+ supported_ekt_ciphers | + supported_ekt_ciphers | |||
{... Finished} | {... Finished} | |||
<-------- | <-------- | |||
{... Finished} --------> | {... Finished} --------> | |||
[ACK] | [ACK] | |||
<-------- [EKTKey] | <-------- [EKTKey] | |||
[ACK] --------> | [ACK] --------> | |||
|SRTP packets| <-------> |SRTP packets| | |SRTP packets| <-------> |SRTP packets| | |||
+ <EKT tags> + <EKT tags> | + <EKT Tags> + <EKT Tags> | |||
<span class="insert"><EKT Tags></span> + <span class="insert"><EKT Tags></span> | ||||
{} Messages protected using DTLS handshake keys | {} Messages protected using DTLS handshake keys | |||
[] Messages protected using DTLS application traffic keys | [] Messages protected using DTLS application traffic keys | |||
<> Messages protected using the EKTKey and EKT cipher | <> Messages protected using the EKTKey and EKT Cipher | |||
|| Messages protected using the SRTP Master Key sent in | || Messages protected using the SRTP master key sent in | |||
a Full EKT Tag | a Full EKT Tag]]></artwork> | |||
</artwork></figure> | </figure> | |||
<t>In the context of a multi-party SRTP session in which each endpoint | <t>In the context of a multi-party SRTP session in which each endpoint | |||
performs a DTLS handshake as a client with a central DTLS server, | performs a DTLS handshake as a client with a central DTLS server, | |||
the extensions defined in this document allow the DTLS server to set | the extensions defined in this document allow the DTLS server to set | |||
a common EKTKey for all participants. Each endpoint can then use | a common EKTKey for all participants. Each endpoint can then use | |||
EKT tags encrypted with that common key to inform other endpoint of | EKT Tags encrypted with that common key to inform other endpoints of | |||
the keys it uses to protect SRTP packets. This avoids the need | the keys it uses to protect SRTP packets. This avoids the need | |||
for many individual DTLS handshakes among the endpoints, at the cost | for many individual DTLS handshakes among the endpoints, at the cost | |||
of preventing endpoints from directly authenticating one another. | of preventing endpoints from directly authenticating one another. | |||
</t> | </t> | |||
<artwork align="center" name="" type="" alt=""><![CDATA[ | ||||
<figure align="center"><artwork align="center"> | ||||
Client A Server Client B | Client A Server Client B | |||
<----DTLS Handshake----> | <----DTLS Handshake----> | |||
<--------EKTKey--------- | <--------EKTKey--------- | |||
<----DTLS Handshake----> | <----DTLS Handshake----> | |||
---------EKTKey--------> | ---------EKTKey--------> | |||
-------------SRTP Packet + EKT Tag-------------> | ||||
<------------SRTP Packet + EKT Tag-------------- | ||||
</artwork></figure> | ||||
<section anchor="negotiating-an-ektcipher" title="Negotiating an EKTCipher"> | -------------SRTP Packet + EKT Tag-------------> | |||
<t>To indicate its support for EKT, a DTLS-SRTP client includes in its | <------------SRTP Packet + EKT Tag--------------]]></artwork> | |||
<section anchor="negotiating-an-ektcipher" numbered="true" toc="default" | ||||
> | ||||
<name>Negotiating an EKTCipher</name> | ||||
<t>To indicate its support for EKT, a DTLS-SRTP client includes in its | ||||
ClientHello an extension of type supported_ekt_ciphers listing the | ClientHello an extension of type supported_ekt_ciphers listing the | |||
ciphers used for EKT by the client supports in preference order, with | ciphers used for EKT by the client, in preference order, with | |||
the most preferred version first. If the server agrees to use EKT, | the most preferred version first. If the server agrees to use EKT, | |||
then it includes a supported_ekt_ciphers extension in its ServerHello | then it includes a supported_ekt_ciphers extension in its | |||
EncryptedExtensions (or ServerHello for DTLS 1.2) | ||||
containing a cipher selected from among those advertised by the | containing a cipher selected from among those advertised by the | |||
client. | client. | |||
</t> | </t> | |||
<t>The extension_data field of this extension contains an "EKTCipher" | <t>The extension_data field of this extension contains an "EKTCipher" | |||
value, | value, | |||
encoded using the syntax defined in <xref target="RFC8446"/>: | encoded using the syntax defined in <xref target="RFC8446" format="default"/>: | |||
</t> | </t> | |||
<sourcecode name="" type="tls-presentation"><![CDATA[ | ||||
enum { | ||||
reserved(0), | ||||
aeskw_128(1), | ||||
aeskw_256(2), | ||||
} EKTCipherType; | ||||
<figure align="center"><artwork align="center"> | struct { | |||
enum { | select (Handshake.msg_type) { | |||
reserved(0), | case client_hello: | |||
aeskw_128(1), | EKTCipherType supported_ciphers<1..255>; | |||
aeskw_256(2), | ||||
} EKTCipherType; | ||||
struct { | case server_hello: | |||
select (Handshake.msg_type) { | EKTCipherType selected_cipher; | |||
case client_hello: | ||||
EKTCipherType supported_ciphers<1..255>; | ||||
case server_hello: | case encrypted_extensions: | |||
EKTCipherType selected_cipher; | EKTCipherType selected_cipher; | |||
}; | ||||
} EKTCipher; | ||||
</artwork></figure> | ||||
</section> | ||||
<section anchor="ekt_key" title="Establishing an EKT Key"> | }; | |||
<t>Once a client and server have concluded a handshake that negotiated | } EKTCipher;]]></sourcecode> | |||
an EKTCipher, the server MUST provide to the client a key to be | </section> | |||
<section anchor="ekt_key" numbered="true" toc="default"> | ||||
<name>Establishing an EKT Key</name> | ||||
<t>Once a client and server have concluded a handshake that negotiated | ||||
an EKTCipher, the server <bcp14>MUST</bcp14> provide to the client a key to be | ||||
used when encrypting and decrypting EKTCiphertext values. EKTKeys | used when encrypting and decrypting EKTCiphertext values. EKTKeys | |||
are sent in encrypted handshake records, using handshake type | are sent in encrypted handshake records, using handshake type | |||
ekt_key(TBD). The body of the handshake message contains an | ekt_key(26). The body of the handshake message contains an | |||
EKTKey structure: | EKTKey structure as follows: | |||
</t> | ||||
<t>[[ NOTE: RFC Editor, please replace "TBD" above with the code point | ||||
assigned by IANA ]] | ||||
</t> | </t> | |||
<figure align="center"><artwork align="center"> | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
struct { | struct { | |||
opaque ekt_key_value<1..256>; | opaque ekt_key_value<1..256>; | |||
opaque srtp_master_salt<1..256>; | opaque srtp_master_salt<1..256>; | |||
uint16 ekt_spi; | uint16 ekt_spi; | |||
uint24 ekt_ttl; | uint24 ekt_ttl; | |||
} EKTKey; | } EKTKey;]]></artwork> | |||
</artwork></figure> | <t>The contents of the fields in this message are as follows: | |||
<t>The contents of the fields in this message are as follows: | ||||
</t> | </t> | |||
<t> | <dl newline="true" spacing="normal"> | |||
<list style="hanging"> | <dt>ekt_key_value</dt> | |||
<t hangText="ekt_key_value"> | <dd> | |||
<vspace /> | ||||
The EKTKey that the recipient should use when generating EKTCiphertext | The EKTKey that the recipient should use when generating EKTCiphertext | |||
values</t> | values</dd> | |||
<t hangText="srtp_master_salt"> | <dt>srtp_master_salt</dt> | |||
<vspace /> | <dd> | |||
The SRTP Master Salt to be used with any Master Key encrypted with this EKT | The SRTP master salt to be used with any master key encrypted with this EKT | |||
Key</t> | Key</dd> | |||
<t hangText="ekt_spi"> | <dt>ekt_spi</dt> | |||
<vspace /> | <dd> | |||
The SPI value to be used to reference this EKTKey and SRTP Master Salt in | The SPI value to be used to reference this EKTKey and SRTP master salt in | |||
EKT tags (along with the EKT cipher negotiated in the handshake)</t> | EKT Tags (along with the EKT Cipher negotiated in the handshake)</dd> | |||
<t hangText="ekt_ttl"> | <dt>ekt_ttl</dt> | |||
<vspace /> | <dd> | |||
The maximum amount of time, in seconds, that this EKTKey can be used. The | The maximum amount of time, in seconds, that this EKTKey can be used. The | |||
ekt_key_value in this message MUST NOT be used for encrypting or decrypting | ekt_key_value in this message <bcp14>MUST NOT</bcp14> be used for encrypting or | |||
information after the TTL expires.</t> | decrypting | |||
</list> | information after the TTL expires.</dd> | |||
</t> | </dl> | |||
<t>If the server did not provide a supported_ekt_ciphers extension in | <t>If the server did not provide a supported_ekt_ciphers extension in | |||
its ServerHello, then EKTKey messages MUST NOT be sent by the client | its EncryptedExtensions (or ServerHello for DTLS 1.2), then EKTKey messages <bcp | |||
14>MUST NOT</bcp14> be sent by the client | ||||
or the server. | or the server. | |||
</t> | </t> | |||
<t>When an EKTKey is received and processed successfully, the recipient | <t>When an EKTKey is received and processed successfully, the | |||
MUST respond with an ACK message as described in Section 7 | recipient <bcp14>MUST</bcp14> respond with an ACK message as | |||
of <xref target="I-D.ietf-tls-dtls13"/>. The EKTKey message and ACK MUST be | described in <xref target="I-D.ietf-tls-dtls13" sectionFormat="of" | |||
retransmitted following the rules of the negotiated version of DTLS. | section="7"/>. The EKTKey message and ACK <bcp14>MUST</bcp14> be | |||
</t> | retransmitted following the rules of the negotiated version of | |||
<t>EKT MAY be used with versions of DTLS prior to 1.3. In such cases, | DTLS.</t> | |||
the ACK message is still used to provide reliability. Thus, DTLS | <t>EKT <bcp14>MAY</bcp14> be used with versions of DTLS prior to | |||
implementations supporting EKT with DTLS pre-1.3 will need to have | 1.3. In such cases, to provide reliability, the ACK message is still | |||
used. Thus, DTLS | ||||
implementations supporting EKT with pre-1.3 versions of DTLS will need to have | ||||
explicit affordances for sending the ACK message in response to an | explicit affordances for sending the ACK message in response to an | |||
EKTKey message, and for verifying that an ACK message was received. | EKTKey message and for verifying that an ACK message was received. | |||
The retransmission rules for both sides are otherwise defined by the | The retransmission rules for both sides are otherwise defined by the | |||
negotiated version of DTLS. | negotiated version of DTLS. | |||
</t> | </t> | |||
<t>If an EKTKey message is received that cannot be processed, then the | <t>If an EKTKey message is received that cannot be processed, then the | |||
recipient MUST respond with an appropriate DTLS alert. | recipient <bcp14>MUST</bcp14> respond with an appropriate DTLS alert. | |||
</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="offeranswer-considerations" title="Offer/Answer Considerations" | ||||
> | ||||
<t>When using EKT with DTLS-SRTP, the negotiation to use EKT is done at | ||||
the DTLS handshake level and does not change the <xref target="RFC3264"/> Offer | ||||
/ | ||||
Answer messaging. | ||||
</t> | ||||
</section> | ||||
<section anchor="sending-the-dtls-ektkey-reliably" title="Sending the DTLS EKTKe | ||||
y Reliably"> | ||||
<t>The DTLS EKTKey message is sent using the retransmissions | ||||
specified in Section 4.2.4. of DTLS <xref target="RFC6347"/>. Retransmission i | ||||
s | ||||
finished with an ACK message or an alert is received. | ||||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="offeranswer-considerations" numbered="true" toc="default" | ||||
<section anchor="sec" title="Security Considerations"> | > | |||
<t>EKT inherits the security properties of the the key management | <name>Offer/Answer Considerations</name> | |||
protocol that is used to establish the EKTKey, e.g., the DTLS-SRTP | <t>When using EKT with DTLS-SRTP, the negotiation to use EKT is done at | |||
extension defined in this document. | the DTLS handshake level and does not change the SDP Offer&wj;/Answer messaging | |||
<xref target="RFC3264" format="default"/>. | ||||
</t> | </t> | |||
<t>With EKT, each SRTP sender and receiver MUST generate distinct SRTP | </section> | |||
master keys. This property avoids any security concern over the re-use | <section anchor="sending-the-dtls-ektkey-reliably" numbered="true" toc="de | |||
fault"> | ||||
<name>Sending the DTLS EKTKey Reliably</name> | ||||
<t>The DTLS EKTKey message is sent using the retransmissions specified | ||||
in <xref target="RFC6347" sectionFormat="of" section="4.2.4">DTLS</xref> | ||||
. | ||||
Retransmission is finished with an ACK message, or an alert is | ||||
received.</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="sec" numbered="true" toc="default"> | ||||
<name>Security Considerations</name> | ||||
<t>EKT inherits the security properties of the key management | ||||
protocol that is used to establish the EKTKey, e.g., the DTLS-SRTP | ||||
extension defined in this document.</t> | ||||
<t>With EKT, each SRTP sender and receiver <bcp14>MUST</bcp14> generate di | ||||
stinct SRTP | ||||
master keys. This property avoids any security concerns over the reuse | ||||
of keys, by empowering the SRTP layer to create keys on demand. Note | of keys, by empowering the SRTP layer to create keys on demand. Note | |||
that the inputs of EKT are the same as for SRTP with key-sharing: a | that the inputs of EKT are the same as for SRTP with key-sharing: a | |||
single key is provided to protect an entire SRTP session. However, EKT | single key is provided to protect an entire SRTP session. However, EKT | |||
remains secure even when SSRC values collide. | remains secure even when SSRC values collide. | |||
</t> | </t> | |||
<t>SRTP master keys MUST be randomly generated, and <xref target="RFC4086"/> off | <t>SRTP master keys <bcp14>MUST</bcp14> be randomly generated, and <xref t | |||
ers | arget="RFC4086" format="default"/> offers | |||
some guidance about random number generation. SRTP master keys MUST | some guidance about random number generation. SRTP master keys <bcp14>MUST | |||
NOT be re-used for any other purpose, and SRTP master keys MUST NOT be | NOT</bcp14> be reused for any other purpose, and SRTP master keys <bcp14>MUST NO | |||
T</bcp14> be | ||||
derived from other SRTP master keys. | derived from other SRTP master keys. | |||
</t> | </t> | |||
<t>The EKT Cipher includes its own authentication/integrity check. For an | <t>The EKT Cipher includes its own authentication/integrity check. | |||
attacker to successfully forge a FullEKTField, it would need to defeat | ||||
the authentication mechanisms of the EKT Cipher authentication | ||||
mechanism. | ||||
</t> | </t> | |||
<t>The presence of the SSRC in the EKTPlaintext ensures that an attacker | <t>The presence of the SSRC in the EKTPlaintext ensures that an attacker | |||
cannot substitute an EKTCiphertext from one SRTP stream into another | cannot substitute an EKTCiphertext from one SRTP stream into another | |||
SRTP stream. This mitigates the impact of the cut-and-paste attacks | SRTP stream. This mitigates the impact of cut-and-paste attacks | |||
that arise due to the lack of a cryptographic binding between the | that arise due to the lack of a cryptographic binding between the | |||
EKT tag and the rest of the SRTP packet. SRTP tags can only be | EKT Tag and the rest of the SRTP packet. SRTP tags can only be | |||
cut-and-pasted within the stream of packets sent by a given RTP | cut-and-pasted within the stream of packets sent by a given RTP | |||
endpoint; an attacker cannot "cross the streams" and use an EKT tag | endpoint; an attacker cannot "cross the streams" and use an EKT Tag | |||
from one SSRC to reset the key for another SSRC. The epoch field | from one SSRC to reset the key for another SSRC. The Epoch field | |||
in the FullEKTField also prevents an attacker from rolling back to a | in the FullEKTField also prevents an attacker from rolling back to a | |||
previous key. | previous key. | |||
</t> | </t> | |||
<t>An attacker could send packets containing a FullEKTField, in an | <t>An attacker could send packets containing a FullEKTField, in an | |||
attempt to consume additional CPU resources of the receiving system by | attempt to consume additional CPU resources of the receiving system by | |||
causing the receiving system to decrypt the EKT ciphertext and | causing the receiving system to decrypt the EKT ciphertext and | |||
detect an authentication failure. In some cases, caching the previous | detect an authentication failure. In some cases, caching the previous | |||
values of the Ciphertext as described in <xref target="inbound-processing"/> hel ps | values of the ciphertext as described in <xref target="inbound-processing" forma t="default"/> helps | |||
mitigate this issue. | mitigate this issue. | |||
</t> | </t> | |||
<t>In a similar vein, EKT has no replay protection, so an attacker | <t>In a similar vein, EKT has no replay protection, so an attacker | |||
could implant improper keys in receivers by capturing EKTCiphertext | could implant improper keys in receivers by capturing EKTCiphertext | |||
values encrypted with a given EKTKey and replaying them in a | values encrypted with a given EKTKey and replaying them in a | |||
different context, e.g., from a different sender. When the | different context, e.g., from a different sender. When the | |||
underlying SRTP transform provides integrity protection, this attack | underlying SRTP transform provides integrity protection, this attack | |||
will just result in packet loss. If it does not, then it will | will just result in packet loss. If it does not, then it will | |||
result in random data being fed to RTP payload processing. An | result in random data being fed to RTP payload processing. An | |||
attacker that is in a position to mount these attacks, however, | attacker that is in a position to mount these attacks, however, | |||
could achieve the same effects more easily without attacking EKT. | could achieve the same effects more easily without attacking EKT. | |||
</t> | </t> | |||
<t>The key encryption keys distributed with EKTKey messages are group | <t>The key encryption keys distributed with EKTKey messages are group | |||
shared symmetric keys, which means they do not provide protection | shared symmetric keys, which means they do not provide protection | |||
within the group. Group members can impersonate each other; for | within the group. Group members can impersonate each other; for | |||
example, any group member can generate an EKT tag for any SSRC. The | example, any group member can generate an EKT Tag for any SSRC. The | |||
entity that distributes EKTKeys can decrypt any keys distributed | entity that distributes EKTKeys can decrypt any keys distributed | |||
using EKT, and thus any media protected with those keys. | using EKT and thus any media protected with those keys. | |||
</t> | </t> | |||
<t>Each EKT cipher specifies a value T that is the maximum number of | <t>Each EKT Cipher specifies a value T that is the maximum number of | |||
times a given key can be used. An endpoint MUST NOT encrypt more than | times a given key can be used. An endpoint <bcp14>MUST NOT</bcp14> encrypt more | |||
than | ||||
T different FullEKTField values using the same EKTKey. In addition, the | T different FullEKTField values using the same EKTKey. In addition, the | |||
EKTKey MUST NOT be used beyond the lifetime provided by the TTL | EKTKey <bcp14>MUST NOT</bcp14> be used beyond the lifetime provided by the TTL | |||
described in <xref target="dtls-srtp-extensions"/>. | described in <xref target="dtls-srtp-extensions" format="default"/>. | |||
</t> | </t> | |||
<t>The confidentiality, integrity, and authentication of the EKT cipher | <t>The key length of the EKT Cipher | |||
MUST be at least as strong as the SRTP cipher and at least as strong | <bcp14>MUST</bcp14> be at least as long as the SRTP cipher and at least as long | |||
as the DTLS-SRTP ciphers. | as the DTLS-SRTP ciphers. | |||
</t> | </t> | |||
<t>Part of the EKTPlaintext is known, or easily guessable to an | <t>Part of the EKTPlaintext is known or is easily guessable to an | |||
attacker. Thus, the EKT Cipher MUST resist known plaintext attacks. In | attacker. Thus, the EKT Cipher <bcp14>MUST</bcp14> resist known plaintext attack | |||
s. In | ||||
practice, this requirement does not impose any restrictions on our | practice, this requirement does not impose any restrictions on our | |||
choices, since the ciphers in use provide high security even when much | choices, since the ciphers in use provide high security even when much | |||
plaintext is known. | plaintext is known. | |||
</t> | </t> | |||
<t>An EKT cipher MUST resist attacks in which both ciphertexts and | <t>An EKT Cipher <bcp14>MUST</bcp14> resist attacks in which both cipherte | |||
plaintexts can be adaptively chosen and adversaries that can query | xts and | |||
both the encryption and decryption functions adaptively. | plaintexts can be adaptively chosen by an attacker querying both | |||
the encryption and decryption functions. | ||||
</t> | </t> | |||
<t>In some systems, when a member of a conference leaves the conferences, | <t>In some systems, when a member of a conference leaves the conference, | |||
the conferences is rekeyed so that member no longer has the key. When | that conference is rekeyed so that the member who left the conference no longer | |||
has the key. When | ||||
changing to a new EKTKey, it is possible that the attacker could block | changing to a new EKTKey, it is possible that the attacker could block | |||
the EKTKey message getting to a particular endpoint and that endpoint | the EKTKey message getting to a particular endpoint and that endpoint | |||
would keep sending media encrypted using the old key. To mitigate that | would keep sending media encrypted using the old key. To mitigate that | |||
risk, the lifetime of the EKTKey MUST be limited using the ekt_ttl. | risk, the lifetime of the EKTKey <bcp14>MUST</bcp14> be limited by using the ekt | |||
</t> | _ttl. | |||
</section> | ||||
<section anchor="iana" title="IANA Considerations"> | ||||
<section anchor="iana-ekt-msg-types" title="EKT Message Types"> | ||||
<t>IANA is requested to create a new table for "EKT Messages Types" in | ||||
the "Real-Time Transport Protocol (RTP) Parameters" registry. The | ||||
initial values in this registry are: | ||||
</t> | </t> | |||
<texttable anchor="EKTMsgTypeTable" title="EKT Messages Types | </section> | |||
"> | <section anchor="iana" numbered="true" toc="default"> | |||
<ttcol align="left">Message Type</ttcol> | <name>IANA Considerations</name> | |||
<ttcol align="right">Value</ttcol> | <section anchor="iana-ekt-msg-types" numbered="true" toc="default"> | |||
<ttcol align="left">Specification</ttcol> | <name>EKT Message Types</name> | |||
<c>Short</c><c>0</c><c>RFCAAAA</c> | <t>IANA has created a new table for "EKT Message Types" in | |||
<c>Full</c><c>2</c><c>RFCAAAA</c> | the "Real-Time Transport Protocol (RTP) Parameters" registry. The | |||
<c>Unallocated</c><c>3-254</c><c>RFCAAAA</c> | initial values in this registry are as follows: | |||
<c>Reserved</c><c>255</c><c>RFCAAAA</c> | ||||
</texttable> | ||||
<t>Note to RFC Editor: Please replace RFCAAAA with the RFC number for | ||||
this specification. | ||||
</t> | ||||
<t>New entries to this table can be added via "Specification Required" | ||||
as | ||||
defined in <xref target="RFC8126"/>. IANA SHOULD prefer allocation of even valu | ||||
es | ||||
over odd ones until the even code points are consumed to avoid | ||||
conflicts with pre standard versions of EKT that have been deployed. | ||||
Allocated values MUST be in the range of 0 to 254. | ||||
</t> | </t> | |||
<t>All new EKT messages MUST be defined to have a length as second from | <table anchor="EKTMsgTypeTable" align="center"> | |||
the last element, as specified. | <name>EKT Message Types</name> | |||
<thead> | ||||
<tr> | ||||
<th align="left">Message Type</th> | ||||
<th align="right">Value</th> | ||||
<th align="left">Specification</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td align="left">Short</td> | ||||
<td align="right">0</td> | ||||
<td align="left">RFC 8870</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Unassigned</td> | ||||
<td align="right">1</td> | ||||
<td align="left"></td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Full</td> | ||||
<td align="right">2</td> | ||||
<td align="left">RFC 8870</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Unassigned</td> | ||||
<td align="right">3-254</td> | ||||
<td align="left"></td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Reserved</td> | ||||
<td align="right">255</td> | ||||
<td align="left">RFC 8870</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>New entries in this table can be added via "Specification Required" a | ||||
s | ||||
defined in <xref target="RFC8126" format="default"/>. To avoid conflicts with | ||||
pre-standard versions of EKT that have been deployed, IANA | ||||
<bcp14>SHOULD</bcp14> give preference to the allocation of even values over odd | ||||
values until | ||||
the even code points are consumed. Allocated values <bcp14>MUST</bcp14> be in th | ||||
e range of 0 to 254. | ||||
</t> | </t> | |||
</section> | <t>All new EKT messages <bcp14>MUST</bcp14> be defined to include a leng | |||
th parameter, as specified in <xref target="EKT"/>. | ||||
<section anchor="iana-ciphers" title="EKT Ciphers"> | ||||
<t>IANA is requested to create a new table for "EKT Ciphers" in the | ||||
"Real-Time Transport Protocol (RTP) Parameters" registry. The initial | ||||
values in this registry are: | ||||
</t> | </t> | |||
<texttable anchor="EKTCipherTable" title="EKT Cipher Types | </section> | |||
"> | <section anchor="iana-ciphers" numbered="true" toc="default"> | |||
<ttcol align="left">Name</ttcol> | <name>EKT Ciphers</name> | |||
<ttcol align="right">Value</ttcol> | ||||
<ttcol align="left">Specification</ttcol> | ||||
<c>AESKW128</c><c>0</c><c>RFCAAAA</c> | <t>IANA has created a new table for "EKT Ciphers" in the | |||
<c>AESKW256</c><c>1</c><c>RFCAAAA</c> | "Real-Time Transport Protocol (RTP) Parameters" registry. The initial | |||
<c>Unallocated</c><c>2-254</c><c></c> | values in this registry are as follows: | |||
<c>Reserved</c><c>255</c><c>RFCAAAA</c> | ||||
</texttable> | ||||
<t>Note to RFC Editor: Please replace RFCAAAA with the RFC number for | ||||
this specification. | ||||
</t> | </t> | |||
<t>New entries to this table can be added via "Specification Required" | <table anchor="EKTCipherTable" align="center"> | |||
as | <name>EKT Cipher Types</name> | |||
defined in <xref target="RFC8126"/>. The expert SHOULD ensure the specification | <thead> | |||
defines the values for L and T as required in <xref target="cipher"/> of | <tr> | |||
RFCAAAA. Allocated values MUST be in the range of 0 to 254. | <th align="left">Name</th> | |||
<th align="right">Value</th> | ||||
<th align="left">Specification</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td align="left">AESKW128</td> | ||||
<td align="right">0</td> | ||||
<td align="left">RFC 8870</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">AESKW256</td> | ||||
<td align="right">1</td> | ||||
<td align="left">RFC 8870</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Unassigned</td> | ||||
<td align="right">2-254</td> | ||||
<td align="left"/> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Reserved</td> | ||||
<td align="right">255</td> | ||||
<td align="left">RFC 8870</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>New entries in this table can be added via "Specification Required" a | ||||
s | ||||
defined in <xref target="RFC8126" format="default"/>. The expert | ||||
<bcp14>SHOULD</bcp14> ensure that the specification | ||||
defines the values for L and T as required in <xref target="cipher" | ||||
format="default"/> of this document. Allocated values <bcp14>MUST</bcp14> be in | ||||
the range of 0 to 254. | ||||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="tls-extensions" numbered="true" toc="default"> | ||||
<name>TLS Extensions</name> | ||||
<section anchor="tls-extensions" title="TLS Extensions"> | <t>IANA has added supported_ekt_ciphers as a new extension | |||
<t>IANA is requested to add supported_ekt_ciphers as a new extension | name to the "TLS ExtensionType Values" table of the "Transport Layer | |||
name to the "TLS ExtensionType Values" table of the "Transport La | Security (TLS) Extensions" registry: | |||
yer | ||||
Security (TLS) Extensions" registry: | ||||
</t> | </t> | |||
<dl newline="false" spacing="normal"> | ||||
<dt>Value:</dt> | ||||
<dd>39</dd> | ||||
<dt>Extension Name:</dt> | ||||
<dd>supported_ekt_ciphers</dd> | ||||
<dt>TLS 1.3:</dt> | ||||
<dd>CH, EE</dd> | ||||
<dt>Recommended:</dt> | ||||
<dd>Y</dd> | ||||
<dt>Reference:</dt> | ||||
<dd>RFC 8870</dd> | ||||
</dl> | ||||
</section> | ||||
<section anchor="tls-handshake-type" numbered="true" toc="default"> | ||||
<name>TLS Handshake Type</name> | ||||
<figure align="center"><artwork align="center"> | <t>IANA has added ekt_key as a new entry in the "TLS | |||
Value: [TBD-at-Registration] | HandshakeType" table of the "Transport Layer Security (TLS) | |||
Extension Name: supported_ekt_ciphers | Parameters" registry: | |||
TLS 1.3: CH, SH | </t> | |||
Recommended: Y | <dl newline="false" spacing="normal"> | |||
Reference: RFCAAAA | <dt>Value:</dt> | |||
</artwork></figure> | <dd>26</dd> | |||
<t>[[ Note to RFC Editor: TBD will be allocated by IANA. ]] | <dt>Description:</dt> | |||
</t> | <dd>ekt_key</dd> | |||
</section> | <dt>DTLS-OK:</dt> | |||
<dd>Y</dd> | ||||
<dt>Reference:</dt> | ||||
<dd>RFC 8870</dd> | ||||
<dt>Comment:</dt> | ||||
<dd></dd> | ||||
</dl> | ||||
</section> | ||||
</section> | ||||
</middle> | ||||
<back> | ||||
<section anchor="tls-handshake-type" title="TLS Handshake Type"> | <displayreference target="I-D.ietf-tls-dtls13" to="TLS-DTLS13"/> | |||
<t>IANA is requested to add ekt_key as a new entry in the "TLS | ||||
HandshakeType Registry" table of the "Transport Layer Security (TLS) | ||||
Parameters" registry: | ||||
</t> | ||||
<figure align="center"><artwork align="center"> | <references> | |||
Value: [TBD-at-Registration] | <name>References</name> | |||
Description: ekt_key | <references> | |||
DTLS-OK: Y | <name>Normative References</name> | |||
Reference: RFCAAAA | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
Comment: | FC.2119.xml"/> | |||
</artwork></figure> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
<t>[[ Note to RFC Editor: TBD will be allocated by IANA. ]] | FC.3264.xml"/> | |||
</t> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
</section> | FC.3711.xml"/> | |||
</section> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
FC.5234.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.5649.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.5764.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6347.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8126.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8174.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8446.xml"/> | ||||
</references> | ||||
<references> | ||||
<name>Informative References</name> | ||||
<section anchor="acknowledgements" title="Acknowledgements"> | <!-- draft-ietf-perc-double (RFC 8723 / Published) --> | |||
<t>Thank you to Russ Housley provided detailed review and significant | ||||
help with crafting text for this document. Thanks to David Benham, Yi | ||||
Cheng, Lakshminath Dondeti, Kai Fischer, Nermeen Ismail, Paul Jones, | ||||
Eddy Lem, Jonathan Lennox, Michael Peck, Rob Raymond, Sean Turner, | ||||
Magnus Westerlund, and Felix Wyss for fruitful discussions, comments, | ||||
and contributions to this document. | ||||
</t> | ||||
</section> | ||||
</middle> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
<back> | FC.8723.xml"/> | |||
<references title="Normative References"> | ||||
<?rfc include="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.21 | ||||
19.xml"?> | ||||
<?rfc include="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.32 | ||||
64.xml"?> | ||||
<?rfc include="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.37 | ||||
11.xml"?> | ||||
<?rfc include="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.52 | ||||
34.xml"?> | ||||
<?rfc include="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.56 | ||||
49.xml"?> | ||||
<?rfc include="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.57 | ||||
64.xml"?> | ||||
<?rfc include="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.63 | ||||
47.xml"?> | ||||
<?rfc include="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.81 | ||||
26.xml"?> | ||||
<?rfc include="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.81 | ||||
74.xml"?> | ||||
<?rfc include="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.84 | ||||
46.xml"?> | ||||
</references> | ||||
<references title="Informative References"> | ||||
<?rfc include="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.i | ||||
etf-perc-double.xml"?> | ||||
<?rfc include="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.i | ||||
etf-perc-private-media-framework.xml"?> | ||||
<?rfc include="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.i | ||||
etf-tls-dtls13.xml"?> | ||||
<?rfc include="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.40 | ||||
86.xml"?> | ||||
</references> | ||||
</back> | <!-- draft-ietf-perc-private-media-framework (RFC 8871) --> | |||
<reference anchor='RFC8871' target="https://www.rfc-editor.org/info/rfc8871"> | ||||
<front> | ||||
<title>A Solution Framework for Private Media in Privacy-Enhanced RTP Conferenci | ||||
ng (PERC)</title> | ||||
<author initials='P' surname='Jones' fullname='Paul Jones'> | ||||
<organization /> | ||||
</author> | ||||
<author initials='D' surname='Benham' fullname='David Benham'> | ||||
<organization /> | ||||
</author> | ||||
<author initials='C' surname='Groves' fullname='Christian Groves'> | ||||
<organization /> | ||||
</author> | ||||
<date month='January' year='2021'/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8871"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8871"/> | ||||
</reference> | ||||
<!-- draft-ietf-tls-dtls13 (AD Eval/Revised I-D needed) --> | ||||
<xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D | ||||
.draft-ietf-tls-dtls13-39.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.4086.xml"/> | ||||
</references> | ||||
</references> | ||||
<section anchor="acknowledgements" numbered="false" toc="default"> | ||||
<name>Acknowledgments</name> | ||||
<t>Thank you to <contact fullname="Russ Housley"/>, who provided a detaile | ||||
d | ||||
review and significant help with crafting text for this document. Thanks | ||||
to <contact fullname="David Benham"/>, <contact fullname="Yi Cheng"/>, | ||||
<contact fullname="Lakshminath Dondeti"/>, <contact fullname="Kai | ||||
Fischer"/>, <contact fullname="Nermeen Ismail"/>, <contact | ||||
fullname="Paul Jones"/>, <contact fullname="Eddy Lem"/>, <contact | ||||
fullname="Jonathan Lennox"/>, <contact fullname="Michael Peck"/>, | ||||
<contact fullname="Rob Raymond"/>, <contact fullname="Sean Turner"/>, | ||||
<contact fullname="Magnus Westerlund"/>, and <contact fullname="Felix | ||||
Wyss"/> for fruitful discussions, comments, and contributions to this | ||||
document.</t> | ||||
</section> | ||||
</back> | ||||
</rfc> | </rfc> | |||
End of changes. 174 change blocks. | ||||
828 lines changed or deleted | 931 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |