rfc8871xml2.original.xml | rfc8871.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="utf-8"?> | <?xml version='1.0' encoding='utf-8'?> | |||
<!-- name="GENERATOR" content="github.com/mmarkdown/mmark Mmark Markdown Process | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
or - mmark.nl" --> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" | |||
<!DOCTYPE rfc SYSTEM 'rfc2629.dtd' []> | submissionType="IETF" category="std" xml:lang="en" consensus="true" | |||
<rfc ipr="trust200902" submissionType="IETF" category="std" xml:lang="en" consen | docName="draft-ietf-perc-private-media-framework-12" number="8871" obsolete | |||
sus="yes" docName="draft-ietf-perc-private-media-framework-12"> | s="" updates="" tocInclude="true" symRefs="true" sortRefs="true" version="3"> | |||
<?rfc toc="yes"?><?rfc symrefs="yes"?><?rfc sortrefs="yes"?><?rfc compact="yes"? | <!-- xml2rfc v2v3 conversion 2.46.0 --> | |||
><?rfc subcompact="no"?><?rfc comments="no"?> | <front> | |||
<front> | <title abbrev="Private Media Framework">A Solution Framework for Private Med | |||
<title abbrev="Private Media Framework">A Solution Framework for Private Media i | ia in Privacy-Enhanced RTP Conferencing (PERC)</title> | |||
n Privacy Enhanced RTP Conferencing (PERC)</title><author initials="P." surname= | ||||
"Jones" fullname="Paul E. Jones"><organization>Cisco</organization><address><pos | ||||
tal><street>7025 Kit Creek Rd.</street> | ||||
<city>Research Triangle Park</city> | ||||
<code>27709</code> | ||||
<country>USA</country> | ||||
<region>North Carolina</region> | ||||
</postal><phone>+1 919 476 2048</phone> | ||||
<email>paulej@packetizer.com</email> | ||||
</address></author> | ||||
<author initials="D." surname="Benham" fullname="David Benham"><organization>Ind | ||||
ependent</organization><address><postal><street></street> | ||||
</postal><email>dabenham@gmail.com</email> | ||||
</address></author> | ||||
<author initials="C." surname="Groves" fullname="Christian Groves"><organization | ||||
>Independent</organization><address><postal><street></street> | ||||
<city>Melbourne</city> | ||||
<country>Australia</country> | ||||
</postal><email>cngroves.std@gmail.com</email> | ||||
</address></author> | ||||
<date/> | ||||
<area>Internet</area><workgroup></workgroup><keyword>PERC</keyword> | ||||
<keyword>Private Media Framework</keyword> | ||||
<keyword>conferencing</keyword> | ||||
<abstract><t>This document describes a solution framework for ensuring that medi | <seriesInfo name="RFC" value="8871"/> | |||
a | <author initials="P." surname="Jones" fullname="Paul E. Jones"> | |||
confidentiality and integrity are maintained end-to-end within the | <organization>Cisco</organization> | |||
context of a switched conferencing environment where media | <address> | |||
distributors are not trusted with the end-to-end media | <postal> | |||
<street>7025 Kit Creek Rd.</street> | ||||
<city>Research Triangle Park</city> | ||||
<region>North Carolina</region> | ||||
<code>27709</code> | ||||
<country>United States of America</country> | ||||
</postal> | ||||
<phone>+1 919 476 2048</phone> | ||||
<email>paulej@packetizer.com</email> | ||||
</address> | ||||
</author> | ||||
<author initials="D." surname="Benham" fullname="David Benham"> | ||||
<organization>Independent</organization> | ||||
<address> | ||||
<postal> | ||||
<region>California</region> | ||||
<country>United States of America</country> | ||||
</postal> | ||||
<email>dabenham@gmail.com</email> | ||||
</address> | ||||
</author> | ||||
<author initials="C." surname="Groves" fullname="Christian Groves"> | ||||
<organization>Independent</organization> | ||||
<address> | ||||
<postal> | ||||
<street/> | ||||
<city>Melbourne</city> | ||||
<country>Australia</country> | ||||
</postal> | ||||
<email>cngroves.std@gmail.com</email> | ||||
</address> | ||||
</author> | ||||
<date month="January" year="2021"/> | ||||
<keyword>PERC</keyword> | ||||
<keyword>Private Media Framework</keyword> | ||||
<keyword>conferencing</keyword> | ||||
<abstract> | ||||
<t>This document describes a solution framework for ensuring that media | ||||
confidentiality and integrity are maintained end to end within the | ||||
context of a switched conferencing environment where Media | ||||
Distributors are not trusted with the end-to-end media | ||||
encryption keys. The solution builds upon existing security | encryption keys. The solution builds upon existing security | |||
mechanisms defined for the real-time transport protocol (RTP).</t> | mechanisms defined for the Real-time Transport Protocol (RTP).</t> | |||
</abstract> | </abstract> | |||
</front> | ||||
</front> | <middle> | |||
<section anchor="introduction" numbered="true" toc="default"> | ||||
<middle> | <name>Introduction</name> | |||
<t>Switched conferencing is an increasingly popular model for multimedia | ||||
<section anchor="introduction" title="Introduction"> | ||||
<t>Switched conferencing is an increasingly popular model for multimedia | ||||
conferences with multiple participants using a combination of audio, | conferences with multiple participants using a combination of audio, | |||
video, text, and other media types. With this model, real-time media | video, text, and other media types. With this model, real-time media | |||
flows from conference participants are not mixed, transcoded, | flows from conference participants are not mixed, transcoded, | |||
transrated, recomposed, or otherwise manipulated by a Media | translated, recomposed, or otherwise manipulated by a Media | |||
Distributor, as might be the case with a traditional media server or | Distributor, as might be the case with a traditional media server or | |||
multipoint control unit (MCU). Instead, media flows transmitted by | Multipoint Control Unit (MCU). Instead, media flows transmitted by | |||
conference participants are simply forwarded by Media Distributors | conference participants are simply forwarded by Media Distributors | |||
to each of the other participants. Media Distributors often forward only a subs et of | to each of the other participants. Media Distributors often forward only a subs et of | |||
flows based on voice activity detection or other criteria. In some | flows based on voice activity detection or other criteria. In some | |||
instances, Media Distributors may make limited modifications to | instances, Media Distributors may make limited modifications to | |||
RTP <xref target="RFC3550"></xref> headers, for example, but the actual media co ntent | RTP headers <xref target="RFC3550" format="default"/>, for example, but the actu al media content | |||
(e.g., voice or video data) is unaltered.</t> | (e.g., voice or video data) is unaltered.</t> | |||
<t>An advantage of switched conferencing is that Media Distributors can | <t>An advantage of switched conferencing is that Media Distributors can | |||
be more easily deployed on general-purpose computing hardware, | be more easily deployed on general-purpose computing hardware, | |||
including virtualized environments in private and public clouds. | including virtualized environments in private and public clouds. | |||
Virtualized public cloud environments have been viewed as less | Virtualized public cloud environments have been viewed as less | |||
secure since resources are not always physically controlled by | secure, since resources are not always physically controlled by | |||
those who use them. This document defines improved security so as to | those who use them. This document defines improved security so as to | |||
lower the barrier to taking advantage of those environments.</t> | lower the barrier to taking advantage of those environments.</t> | |||
<t>This document defines a solution framework wherein media privacy is | <t>This document defines a solution framework wherein media privacy is | |||
ensured by making it impossible for a Media Distributor to | ensured by making it impossible for a Media Distributor to | |||
gain access to keys needed to decrypt or authenticate the actual media | gain access to keys needed to decrypt or authenticate the actual media | |||
content sent between conference participants. At the same time, the | content sent between conference participants. At the same time, the | |||
framework allows for the Media Distributors to modify certain RTP | framework allows for the Media Distributors to modify certain RTP | |||
headers; add, remove, encrypt, or decrypt RTP header extensions; and | headers; add, remove, encrypt, or decrypt RTP header extensions; and | |||
encrypt and decrypt RTP Control Protocol (RTCP) <xref target="RFC3550"></xref> p ackets. | encrypt and decrypt RTP Control Protocol (RTCP) packets <xref target="RFC3550" f ormat="default"/>. | |||
The framework also prevents replay | The framework also prevents replay | |||
attacks by authenticating each packet transmitted between a given | attacks by authenticating each packet transmitted between a given | |||
participant and the Media Distributor using a unique key per | participant and the Media Distributor using a unique key per | |||
Endpoint that is independent from the key for media encryption and | endpoint that is independent from the key for media encryption and | |||
authentication.</t> | authentication.</t> | |||
<t>This solution framework provides for enhanced privacy | <t>This solution framework provides for enhanced privacy | |||
in RTP-based conferencing environments while utilizing existing | in RTP-based conferencing environments while utilizing existing | |||
security procedures defined for RTP with minimal enhancements.</t> | security procedures defined for RTP with minimal enhancements.</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", | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", | |||
"SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMME | "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", | |||
NDED", | "<bcp14>SHOULD NOT</bcp14>", | |||
"NOT RECOMMENDED", "MAY", and "OPTIONAL" in this d | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
ocument | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document | |||
are to be interpreted as described in BCP 14 <xref target="RFC2119"></xref> <xre | are to be interpreted as described in BCP 14 | |||
f target="RFC8174"></xref> | <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only | |||
when, and only when, they appear in all capitals, as shown here.</t> | when, they appear in all capitals, as shown here.</t> | |||
<t>Additionally, this solution framework uses the following | <t>Additionally, this solution framework uses the following | |||
terms and acronyms:</t> | terms and abbreviations:</t> | |||
<t>End-to-End (E2E): Communications from one Endpoint through one or more | <dl newline="false" spacing="normal"> | |||
Media Distributors to the Endpoint at the other end.</t> | <dt>End-to-End (E2E):</dt><dd>Communications from one endpoint through one | |||
<t>Hop-by-Hop (HBH): Communications between an Endpoint and a Media | or more | |||
Distributor or between Media Distributors.</t> | Media Distributors to the endpoint at the other end.</dd> | |||
<t>Trusted Endpoint (or simply Endpoint): An RTP flow terminating entity that ha | <dt>Hop-by-Hop (HBH):</dt><dd>Communications between an endpoint and a Med | |||
s possession | ia | |||
Distributor or between Media Distributors.</dd> | ||||
<dt>Trusted Endpoint (or simply endpoint):</dt><dd>An RTP flow-terminating | ||||
entity that has possession | ||||
of E2E media encryption keys and terminates E2E encryption. This may | of E2E media encryption keys and terminates E2E encryption. This may | |||
include embedded user conferencing equipment or browsers on computers, | include embedded user conferencing equipment or browsers on computers, | |||
media gateways, MCUs, media recording devices and more that are in the | media gateways, MCUs, media recording devices, and more, that are in the | |||
trusted domain for a given deployment. In the context of WebRTC | trusted domain for a given deployment. In the context of WebRTC | |||
<xref target="W3C.CR-webrtc-20180927"></xref>, where | <xref target="W3C.CR-webrtc" format="default"/>, where | |||
control of a session is divided between a JavaScript application and a | control of a session is divided between a JavaScript application and a | |||
browser, the browser acts as the Trusted Endpoint for purposes of this | browser, the browser acts as the Trusted Endpoint for purposes of this | |||
framework (just as it acts as the endpoint for DTLS-SRTP <xref target="RFC5764"> | framework (just as it acts as the endpoint for DTLS-SRTP <xref target="RFC5764" | |||
</xref> in | format="default"/> in | |||
one-to-one calls).</t> | one-to-one calls).</dd> | |||
<t>Media Distributor (MD): An RTP middlebox that forwards Endpoint media | <dt>Media Distributor (MD):</dt><dd>An RTP middlebox that forwards endpoin | |||
content (e.g., voice or video data) unaltered, either a subset or all | t media | |||
of the flows at any given time, and is never allowed to have access | content (e.g., voice or video data) unaltered -- either a subset or all | |||
of the flows at any given time -- and is never allowed to have access | ||||
to E2E encryption keys. It operates according to the | to E2E encryption keys. It operates according to the | |||
Selective Forwarding Middlebox RTP topologies <xref target="RFC7667"></xref> per | Selective Forwarding Middlebox RTP topologies <xref target="RFC7667" format="def | |||
the | ault"/> per the | |||
constraints defined by the PERC system, which includes, but is not limited | constraints defined by the Private Media in Privacy-Enhanced RTP | |||
Conferencing (PERC) system, which includes, but is not limited | ||||
to, having no access to RTP media plaintext and having limits on what | to, having no access to RTP media plaintext and having limits on what | |||
RTP header field it can alter. The header fields that may be | RTP header fields it can alter. The header fields that may be | |||
modified by a Media Distributor are enumerated in Section 4 of the Double | modified by a Media Distributor are enumerated in <xref target="RFC8723" | |||
cryptographic transform specification <xref target="I-D.ietf-perc-double"></xref | sectionFormat="of" section="4">the double cryptographic transform | |||
> and chosen | specification</xref> and chosen | |||
with respect to utility and the security considerations outlined in this | with respect to utility and the security considerations outlined in this | |||
document.</t> | document.</dd> | |||
<t>Key Distributor: An entity that is a logical function which | <dt>Key Distributor:</dt><dd>An entity that is a logical function that | |||
distributes keying material and related information to Trusted | distributes keying material and related information to Trusted | |||
Endpoints and Media Distributor(s), only that which is appropriate for | Endpoints and Media Distributor(s) -- only what is appropriate for | |||
each. The Key Distributor might be co-resident with another entity | each. The Key Distributor might be co-resident with another entity | |||
trusted with E2E keying material.</t> | trusted with E2E keying material.</dd> | |||
<t>Conference: Two or more participants communicating via Trusted | <dt>Conference:</dt><dd>Two or more participants communicating via Trusted | |||
Endpoints to exchange RTP flows through one or more Media Distributor.</t> | Endpoints to exchange RTP flows through one or more Media Distributors.</dd> | |||
<t>Call Processing: All Trusted Endpoints in the conference connect to it | <dt>Call Processing:</dt><dd>All Trusted Endpoints connect to a | |||
by a call processing dialog, such as with the Focus defined in the | conference via a call processing dialog, e.g., with the "focus" as defined in | |||
Framework for Conferencing with SIP <xref target="RFC4353"></xref>.</t> | <xref target="RFC4353" format="default">"A Framework for Conferencing with the | |||
<t>Third Party: Any entity that is not an Endpoint, Media Distributor, | Session Initiation Protocol (SIP)"</xref>.</dd> | |||
Key Distributor or Call Processing entity as described in this | <dt>Third Party:</dt><dd>Any entity that is not an endpoint, Media Distrib | |||
document.</t> | utor, | |||
</section> | Key Distributor, or call processing entity as described in this | |||
document.</dd> | ||||
<section anchor="perc-entities-and-trust-model" title="PERC Entities and Trust M | </dl> | |||
odel"> | </section> | |||
<t>The following figure depicts the trust relationships, direct or | <section anchor="perc-entities-and-trust-model" numbered="true" toc="default | |||
indirect, between entities described in the subsequent sub-sections. | "> | |||
<name>PERC Entities and Trust Model</name> | ||||
<t><xref target="fig-trust-model"/> depicts the trust relationships, direc | ||||
t or | ||||
indirect, between entities described in the subsequent subsections. | ||||
Note that these entities may be co-located or further divided into | Note that these entities may be co-located or further divided into | |||
multiple, separate physical devices.</t> | multiple, separate physical devices.</t> | |||
<t>Please note that some entities classified as untrusted in the simple, | <t>Please note that some entities classified as untrusted in the simple, | |||
general deployment scenario used most commonly in this document might | general deployment scenario used most commonly in this document might | |||
be considered trusted in other deployments. This document does not | be considered trusted in other deployments. This document does not | |||
preclude such scenarios, but keeps the definitions and examples | preclude such scenarios, but it keeps the definitions and examples | |||
focused by only using the simple, most general deployment | focused by only using the simple, most general deployment | |||
scenario.</t> | scenario.</t> | |||
<figure anchor="fig-trust-model" align="center" title="Trusted and Untrusted Ent | <figure anchor="fig-trust-model"> | |||
ities in PERC | <name>Trusted and Untrusted Entities in PERC</name> | |||
"> | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
<artwork align="center"> | ||||
| | | | |||
+----------+ | +-----------------+ | +----------+ | +-----------------+ | |||
| Endpoint | | | Call Processing | | | Endpoint | | | Call Processing | | |||
+----------+ | +-----------------+ | +----------+ | +-----------------+ | |||
| | | | |||
| | | | |||
+----------------+ | +--------------------+ | +----------------+ | +--------------------+ | |||
| Key Distributor| | | Media Distributor | | | Key Distributor| | | Media Distributor | | |||
+----------------+ | +--------------------+ | +----------------+ | +--------------------+ | |||
| | | | |||
Trusted | Untrusted | Trusted | Untrusted | |||
Entities | Entities | Entities | Entities | |||
| | |]]></artwork> | |||
</figure> | ||||
</artwork> | <section anchor="untrusted-entities" numbered="true" toc="default"> | |||
</figure> | <name>Untrusted Entities</name> | |||
<t>The architecture described in this framework document enables | ||||
<section anchor="untrusted-entities" title="Untrusted Entities"> | ||||
<t>The architecture described in this framework document enables | ||||
conferencing infrastructure to be hosted in domains, such as in a | conferencing infrastructure to be hosted in domains, such as in a | |||
cloud conferencing provider's facilities, where the trustworthiness is | cloud conferencing provider's facilities, where the trustworthiness is | |||
below the level needed to assume the privacy of participant's media | below the level needed to assume that the privacy of the participant's media | |||
is not compromised. The conferencing infrastructure in such a | is not compromised. The conferencing infrastructure in such a | |||
domain is still trusted with reliably connecting the participants | domain is still trusted with reliably connecting the participants | |||
together in a conference, but not trusted with keying material needed | together in a conference but is not trusted with keying material needed | |||
to decrypt any of the participant's media. Entities in such lower | to decrypt any of the participant's media. Entities in such | |||
trustworthiness domains are referred to as untrusted | less-trustworthy domains are referred to as untrusted | |||
entities from this point forward.</t> | entities from this point forward.</t> | |||
<t>It is important to understand that untrusted in this document does not | <t>It is important to understand that "untrusted" in this document does | |||
mean an entity is not expected to function properly. Rather, it means | not | |||
mean that an entity is not expected to function properly. Rather, it means | ||||
only that the entity does not have access to the E2E media encryption | only that the entity does not have access to the E2E media encryption | |||
keys.</t> | keys.</t> | |||
<section anchor="media-distributor" numbered="true" toc="default"> | ||||
<section anchor="media-distributor" title="Media Distributor"> | <name>Media Distributor</name> | |||
<t>A Media Distributor forwards RTP flows between Endpoints in the | <t>A Media Distributor forwards RTP flows between endpoints in the | |||
conference while performing per-hop authentication of each RTP packet. | conference while performing per-hop authentication of each RTP packet. | |||
The Media Distributor may need access to one or more RTP headers or | The Media Distributor may need access to one or more RTP headers or | |||
header extensions, potentially adding or modifying a certain subset. | header extensions, potentially adding or modifying a certain subset. | |||
The Media Distributor also relays secured messaging between the | The Media Distributor also relays secured messaging between the | |||
Endpoints and the Key Distributor and acquires per-hop key | endpoints and the Key Distributor and acquires per-hop key | |||
information from the Key Distributor. The actual media content | information from the Key Distributor. The actual media content | |||
must not be decryptable by a Media Distributor, as it is untrusted to | must not be decryptable by a Media Distributor, as it is not trusted to | |||
have access to the E2E media encryption keys. The key exchange | have access to the E2E media encryption keys. The key exchange | |||
mechanisms specified in this framework prevent the Media Distributor | mechanisms specified in this framework prevent the Media Distributor | |||
from gaining access to the E2E media encryption keys.</t> | from gaining access to the E2E media encryption keys.</t> | |||
<t>An Endpoint's ability to connect to a conference serviced by a Media | <t>An endpoint's ability to connect to a conference serviced by a Medi | |||
Distributor does imply that the Endpoint is authorized to | a | |||
have access to the E2E media encryption keys, as the Media Distributor | Distributor implies that the endpoint is authorized to | |||
does not have the ability to determine whether an Endpoint is | have access to the E2E media encryption keys, although the Media Distributor | |||
does not have the ability to determine whether an endpoint is | ||||
authorized. Instead, the Key Distributor is responsible for | authorized. Instead, the Key Distributor is responsible for | |||
authenticating the Endpoint (e.g., using WebRTC Identity | authenticating the endpoint (e.g., using WebRTC identity assertions | |||
<xref target="I-D.ietf-rtcweb-security-arch"></xref>) and determining its | <xref target="RFC8827" format="default"/>) and determining its | |||
authorization to receive E2E and HBH media encryption keys.</t> | authorization to receive E2E and HBH media encryption keys. | |||
<t>A Media Distributor must perform its role in properly forwarding | </t> | |||
<t>A Media Distributor must perform its role in properly forwarding | ||||
media packets while taking measures to mitigate the adverse effects of | media packets while taking measures to mitigate the adverse effects of | |||
denial of service attacks (refer to <xref target="attacks"></xref>) to a level e qual | denial-of-service attacks (refer to <xref target="attacks" format="default"/>) t o a level equal | |||
to or better than traditional conferencing (non-PERC) | to or better than traditional conferencing (non-PERC) | |||
deployments.</t> | deployments.</t> | |||
<t>A Media Distributor or associated conferencing infrastructure may also | <t>A Media Distributor or associated conferencing infrastructure may a | |||
initiate or terminate various conference control related messaging, | lso | |||
which is outside the scope of this framework document.</t> | initiate or terminate various messaging techniques related to conference | |||
</section> | control. This topic is outside the scope of this framework document.</t> | |||
</section> | ||||
<section anchor="call-processing" title="Call Processing"> | <section anchor="call-processing" numbered="true" toc="default"> | |||
<t>The call processing function is untrusted in the simple, general | <name>Call Processing</name> | |||
deployment scenario. When a physical subset of the call processing | <t>Call processing is untrusted in the simple, general | |||
function resides in facilities outside the trusted domain, it should | deployment scenario. When a physical subset of call processing | |||
resides in facilities outside the trusted domain, it should | ||||
not be trusted to have access to E2E key information.</t> | not be trusted to have access to E2E key information.</t> | |||
<t>The call processing function may include the processing of call | <t>Call processing may include the processing of call | |||
signaling messages, as well as the signing of those messages. It may | signaling messages, as well as the signing of those messages. It may | |||
also authenticate the Endpoints for the purpose of call signaling and | also authenticate the endpoints for the purpose of call signaling and of | |||
subsequently joining of a conference hosted through one or more Media | subsequently joining a conference hosted through one or more Media | |||
Distributors. Call processing may optionally ensure the privacy of | Distributors. Call processing may optionally ensure the privacy of | |||
call signaling messages between itself, the Endpoint, and other | call signaling messages between itself (call processing), the endpoint, and othe r | |||
entities.</t> | entities.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="trusted-entities" numbered="true" toc="default"> | ||||
<section anchor="trusted-entities" title="Trusted Entities"> | <name>Trusted Entities</name> | |||
<t>From the PERC model system perspective, entities considered trusted | <t>From the PERC model system's perspective, entities considered trusted | |||
(refer to <xref target="fig-trust-model"></xref>) can be in possession of the E2 | (refer to <xref target="fig-trust-model" format="default"/>) can be in possessio | |||
E media | n of the E2E media | |||
encryption keys for one or more conferences.</t> | encryption keys for one or more conferences.</t> | |||
<section anchor="endpoint" numbered="true" toc="default"> | ||||
<section anchor="endpoint" title="Endpoint"> | <name>Endpoint</name> | |||
<t>An Endpoint is considered trusted and has access to E2E key | <t>An endpoint is considered trusted and has access to E2E key | |||
information. While it is possible for an Endpoint to be compromised, | information. While it is possible for an endpoint to be compromised, | |||
subsequently performing in undesired ways, defining Endpoint | subsequently performing in undesired ways, defining endpoint | |||
resistance to compromise is outside the scope of this document. | resistance to compromise is outside the scope of this document. | |||
Endpoints take measures to mitigate the adverse effects of denial | Endpoints take measures to mitigate the adverse effects of denial-of-service att | |||
of service attacks (refer to <xref target="attacks"></xref>) from other entities | acks (refer to <xref target="attacks" format="default"/>) from other entities, | |||
, | including from other endpoints, to a level equal to or better than | |||
including from other Endpoints, to a level equal to or better than | ||||
traditional conference (non-PERC) deployments.</t> | traditional conference (non-PERC) deployments.</t> | |||
</section> | </section> | |||
<section anchor="key_distributor" numbered="true" toc="default"> | ||||
<section anchor="key_distributor" title="Key Distributor"> | <name>Key Distributor</name> | |||
<t>The Key Distributor, which may be colocated with an Endpoint or exist | <t>The Key Distributor, which may be co-located with an endpoint or ex | |||
standalone, is responsible for providing key information to Endpoints | ist | |||
for both end-to-end (E2E) and hop-by-hop (HBH) security and for providing key | standalone, is responsible for providing key information to endpoints | |||
information to Media Distributors for the hop-by-hop security.</t> | for both E2E and HBH security and for providing key | |||
<t>Interaction between the Key Distributor and the call processing | information to Media Distributors for HBH security.</t> | |||
function is necessary for proper conference-to-Endpoint | <t>Interaction between the Key Distributor and call processing | |||
mappings. This is described in <xref target="conf-id"></xref>.</t> | is necessary for proper conference-to-endpoint | |||
<t>The Key Distributor needs to be secured and managed in a way to | mappings. This is described in <xref target="conf-id" format="default"/>.</t> | |||
prevent exploitation by an adversary, as any kind of compromise of the | <t>The Key Distributor needs to be secured and managed in a way that | |||
prevents exploitation by an adversary, as any kind of compromise of the | ||||
Key Distributor puts the security of the conference at risk.</t> | Key Distributor puts the security of the conference at risk.</t> | |||
<t>They Key Distributor needs to know which Endpoints and which Media | <t>The Key Distributor needs to know which endpoints and which Media | |||
Distributors are authorized to participate in the conference. How the | Distributors are authorized to participate in the conference. How the | |||
Key Distributor obtains this information is outside the scope of this | Key Distributor obtains this information is outside the scope of this | |||
document. However, Key Distributors MUST reject DTLS associations | document. However, Key Distributors <bcp14>MUST</bcp14> reject DTLS association | |||
with any unauthorized Endpoint or Media Distributor.</t> | s | |||
</section> | with any unauthorized endpoint or Media Distributor.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
</section> | ||||
<section anchor="framework-for-perc" title="Framework for PERC"> | <section anchor="framework-for-perc" numbered="true" toc="default"> | |||
<t>The purpose for this framework is to define a means through which | <name>Framework for PERC</name> | |||
<t>The purpose of this framework is to define a means through which | ||||
media privacy is ensured when communicating within a conferencing | media privacy is ensured when communicating within a conferencing | |||
environment consisting of one or more Media Distributors that only | environment consisting of one or more Media Distributors that only | |||
switch, hence not terminate, media. It does not otherwise attempt to | switch, and hence do not terminate, media. It does not otherwise attempt to | |||
hide the fact that a conference between Endpoints is taking place.</t> | hide the fact that a conference between endpoints is taking place.</t> | |||
<t>This framework reuses several specified RTP security technologies, | <t>This framework reuses several specified RTP security technologies, | |||
including Secure Real-time Transport Protocol (SRTP) <xref target="RFC3711"></xr | including the Secure Real-time Transport Protocol (SRTP) <xref target="RFC3711" | |||
ef>, | format="default"/>, | |||
Encrypted Key Transport (EKT) <xref target="I-D.ietf-perc-srtp-ekt-diet"></xref> | Encrypted Key Transport (EKT) <xref target="RFC8870" format="default"/>, | |||
, | ||||
and DTLS-SRTP.</t> | and DTLS-SRTP.</t> | |||
<section anchor="end-to-end-and-hop-by-hop-authenticated-encryption" numbe | ||||
<section anchor="end-to-end-and-hop-by-hop-authenticated-encryption" title="End- | red="true" toc="default"> | |||
to-End and Hop-by-Hop Authenticated Encryption"> | <name>E2E-Authenticated and HBH-Authenticated Encryption</name> | |||
<t>This solution framework focuses on the end-to-end privacy and | <t>This solution framework focuses on the E2E privacy and | |||
integrity of the participant's media by limiting access to only trusted | integrity of the participant's media by limiting access to only trusted | |||
entities to the E2E key used for authenticated end-to-end encryption. | entities to the E2E key used for authenticated E2E encryption. | |||
However, this framework does give a Media Distributor access to RTP headers | However, this framework does give a Media Distributor access to RTP header | |||
fields and header extensions, as well as the ability to modify a certain | fields and header extensions, as well as the ability to modify a certain | |||
subset of the header fields and to add or change header extensions. Packets | subset of the header fields and to add or change header extensions. Packets | |||
received by a Media Distributor or an Endpoint are authenticated | received by a Media Distributor or an endpoint are authenticated | |||
hop-by-hop.</t> | hop by hop.</t> | |||
<t>To enable all of the above, this framework defines the use of two | <t>To enable all of the above, this framework defines the use of two | |||
security contexts and two associated encryption keys: an "inner" key | security contexts and two associated encryption keys: an "inner" key | |||
(an E2E key distinct for each transmitted media flow) for authenticated | (a distinct E2E key for each transmitted media flow) for authenticated | |||
encryption of RTP media between Endpoints and an "outer" key (HBH key) | encryption of RTP media between endpoints and an "outer" key (a HBH key) | |||
known only to Media Distributor or the adjacent Endpoint | known only to a Media Distributor or the adjacent endpoint | |||
for the hop between an Endpoint and a Media Distributor or peer Endpoint. | for the hop between an endpoint and a Media Distributor or peer endpoint. | |||
An Endpoint will receive one or more E2E keys from | An endpoint will receive one or more E2E keys from | |||
every other Endpoint in the conference that correspond to the media flows | every other endpoint in the conference that correspond to the media flows | |||
transmitted by those other Endpoints, while HBH keys are derived from | transmitted by those other endpoints, while HBH keys are derived from | |||
the DTLS-SRTP association with the Key Distributor. Two communicating | the DTLS-SRTP association with the Key Distributor. Two communicating | |||
Media Distributors use DTLS-SRTP associations directly with each other to | Media Distributors use DTLS-SRTP associations directly with each other to | |||
obtain the HBH keys they will use. See <xref target="key_exchange"></xref> for more details | obtain the HBH keys they will use. See <xref target="key_exchange" format="defa ult"/> for more details | |||
on key exchange.</t> | on key exchange.</t> | |||
<figure anchor="fig-e2e-and-hbh-keys-used" align="center" title="E2E and HBH Key | <figure anchor="fig-e2e-and-hbh-keys-used"> | |||
s Used for Authenticated Encryption of SRTP | <name>E2E and HBH Keys Used for Authenticated Encryption of SRTP Packe | |||
Packets | ts</name> | |||
"> | <artwork align="center" name="" type="" alt=""><![CDATA[+------------- | |||
<artwork align="center">+-------------+ +-------- | + +-------------+ | |||
-----+ | ||||
| |################################| | | | |################################| | | |||
| Media |------------------------ *----->| Media | | | Media |------------------------ *----->| Media | | |||
| Distributor |<----------------------*-|------| Distributor | | | Distributor |<----------------------*-|------| Distributor | | |||
| X |#####################*#|#|######| Y | | | X |#####################*#|#|######| Y | | |||
| | | | | | | | | | | | | | | | |||
+-------------+ | | | +-------------+ | +-------------+ | | | +-------------+ | |||
# ^ | # HBH Key (XY) -+ | | # ^ | # | # ^ | # HBH Key (XY) -+ | | # ^ | # | |||
# | | # E2E Key (B) ---+ | # | | # | # | | # E2E Key (B) ---+ | # | | # | |||
# | | # E2E Key (A) -----+ # | | # | # | | # E2E Key (A) -----+ # | | # | |||
# | | # # | | # | # | | # # | | # | |||
# | | # # | | # | # | | # # | | # | |||
# | | *---- HBH Key (AX) HBH Key (YB) ----* | | # | # | | *---- HBH Key (AX) HBH Key (YB) ----* | | # | |||
# | | # # | | # | # | | # # | | # | |||
# *--------- E2E Key (A) E2E Key (A) ---------* # | # *--------- E2E Key (A) E2E Key (A) ---------* # | |||
# | *------- E2E Key (B) E2E Key (B) -------* | # | # | *------- E2E Key (B) E2E Key (B) -------* | # | |||
# | | # # | | # | # | | # # | | # | |||
# | v # # | v # | # | v # # | v # | |||
+-------------+ +-------------+ | +-------------+ +-------------+ | |||
| Endpoint A | | Endpoint B | | | Endpoint A | | Endpoint B | | |||
+-------------+ +-------------+ | +-------------+ +-------------+]]></artwork> | |||
</artwork> | </figure> | |||
</figure> | <t>The double transform <xref target="RFC8723" format="default"/> enable | |||
<t>The Double transform <xref target="I-D.ietf-perc-double"></xref> enables Endp | s endpoints | |||
oints | to perform encryption using both the E2E and HBH contexts while | |||
to perform encryption using both the end-to-end and hop-by-hop contexts while | ||||
still preserving the same overall interface as other SRTP | still preserving the same overall interface as other SRTP | |||
transforms. The Media Distributor simply uses the corresponding | transforms. The Media Distributor simply uses the corresponding | |||
normal (single) AES-GCM transform, keyed with the appropriate HBH | normal (single) AES-GCM transform, keyed with the appropriate HBH | |||
keys. See <xref target="keyinventory"></xref> for a description of the keys use | keys. See <xref target="keyinventory" format="default"/> for a description of t | |||
d in PERC | he keys used in PERC | |||
and <xref target="packetformat"></xref> for diagram of how encrypted RTP packets | and <xref target="packetformat" format="default"/> for a diagram of how encrypte | |||
appear on the | d RTP packets appear on the | |||
wire.</t> | wire.</t> | |||
<t>RTCP is only encrypted hop-by-hop, not end-to-end. This framework | <t>RTCP is only encrypted hop by hop -- not end to end. This framework | |||
introduces no additional step for RTCP authenticated encryption, so | does not provide an additional step for RTCP-authenticated | |||
the procedures needed are specified in <xref target="RFC3711"></xref> and use th | encryption. Rather, implementations utilize the existing procedures | |||
e same | specified in <xref target="RFC3711" format="default"/>; those procedures use | |||
outer, hop-by-hop cryptographic context chosen in the Double operation | the same outer, HBH cryptographic context chosen in the double transform operati | |||
described above. For this reason, Endpoints MUST NOT send | on | |||
described above. For this reason, endpoints <bcp14>MUST NOT</bcp14> send | ||||
confidential information via RTCP.</t> | confidential information via RTCP.</t> | |||
</section> | </section> | |||
<section anchor="e2e-key-confidentiality" numbered="true" toc="default"> | ||||
<section anchor="e2e-key-confidentiality" title="E2E Key Confidentiality"> | <name>E2E Key Confidentiality</name> | |||
<t>To ensure the confidentiality of E2E keys shared between Endpoints, | <t>To ensure the confidentiality of E2E keys shared between endpoints, | |||
Endpoints use a common Key Encryption Key (KEK) that is | endpoints use a common Key Encryption Key (KEK) that is | |||
known only by the trusted entities in a conference. That KEK, defined | known only by the trusted entities in a conference. That KEK, defined | |||
in the EKT specification <xref target="I-D.ietf-perc-srtp-ekt-diet"></xref> as t | in the EKT specification <xref target="RFC8870" format="default"/> as the EKT Ke | |||
he EKT Key, is | y, is | |||
used to subsequently encrypt the SRTP master key used for E2E | used to subsequently encrypt the SRTP master key used for E2E-authenticated encr | |||
authenticated encryption of media sent by a given Endpoint. | yption of media sent by a given endpoint. | |||
Each Endpoint in the conference creates an SRTP master | Each endpoint in the conference creates an SRTP master | |||
key for E2E authenticated encryption and | key for E2E-authenticated encryption and | |||
keep track of the E2E keys received via the Full EKT Tag for | keeps track of the E2E keys received via the Full EKT Tag for | |||
each distinct synchronization source (SSRC) in the conference so that it | each distinct synchronization source (SSRC) in the conference so that it | |||
can properly decrypt received media. An Endpoint may change its E2E key at any | can properly decrypt received media. An endpoint may change its E2E key at any | |||
time and advertise that new key to the conference as specified in | time and advertise that new key to the conference as specified in | |||
<xref target="I-D.ietf-perc-srtp-ekt-diet"></xref>.</t> | <xref target="RFC8870" format="default"/>.</t> | |||
</section> | </section> | |||
<section anchor="e2e_keys_ops" numbered="true" toc="default"> | ||||
<section anchor="e2e_keys_ops" title="E2E Keys and Endpoint Operations"> | <name>E2E Keys and Endpoint Operations</name> | |||
<t>Any given RTP media flow is identified by its SSRC, and an Endpoint | <t>Any given RTP media flow is identified by its SSRC, and an endpoint | |||
might send more than one at a time and change the mix of media flows | might send more than one at a time and change the mix of media flows | |||
transmitted during the life of a conference.</t> | transmitted during the lifetime of a conference.</t> | |||
<t>Thus, an Endpoint MUST maintain a list of SSRCs from received RTP | <t>Thus, an endpoint <bcp14>MUST</bcp14> maintain a list of SSRCs from r | |||
flows and each SSRC's associated E2E key information. An Endpoint MUST | eceived RTP | |||
discard old E2E keys no later than when it leaves the conference | flows and each SSRC's associated E2E key information. An endpoint <bcp14>MUST</ | |||
(see <xref target="keyexchange"></xref>).</t> | bcp14> | |||
<t>If the packet is to contain RTP header extensions, it should be noted | discard old E2E keys no later than when it leaves the conference.</t> | |||
that those are only encrypted HBH per <xref target="I-D.ietf-perc-double"></xref | <t>If the packet is to contain RTP header extensions, it should be noted | |||
>. For | that those extensions are only encrypted hop by hop per <xref target="RFC8723" f | |||
this reason, Endpoints MUST NOT transmit confidential information | ormat="default"/>. For | |||
this reason, endpoints <bcp14>MUST NOT</bcp14> transmit confidential information | ||||
via RTP header extensions.</t> | via RTP header extensions.</t> | |||
</section> | </section> | |||
<section anchor="hbh-keys-and-per-hop-operations" numbered="true" toc="def | ||||
<section anchor="hbh-keys-and-per-hop-operations" title="HBH Keys and Per-hop Op | ault"> | |||
erations"> | <name>HBH Keys and Per-Hop Operations</name> | |||
<t>To ensure the integrity of transmitted media packets, it is | <t>To ensure the integrity of transmitted media packets, it is | |||
REQUIRED that every packet be authenticated hop-by-hop between | <bcp14>REQUIRED</bcp14> that every packet be authenticated hop by hop between | |||
an Endpoint and a Media Distributor, as well between Media | an endpoint and a Media Distributor, as well as between Media | |||
Distributors. The authentication key used for hop-by-hop | Distributors. The authentication key used for HBH | |||
authentication is derived from an SRTP master key shared only on the | authentication is derived from an SRTP master key shared only on the | |||
respective hop. Each HBH key is distinct per hop and no two hops ever | respective hop. Each HBH key is distinct per hop, and no two hops ever | |||
use the same SRTP master key.</t> | use the same SRTP master key.</t> | |||
<t>While Endpoints also perform HBH authentication, the ability of the Endpoints | <t>While endpoints also perform HBH authentication, the ability of the e | |||
to reconstruct the original RTP header also enables the Endpoints to | ndpoints | |||
authenticate RTP packets E2E. This design yields flexibility to the Media | to reconstruct the original RTP header also enables the endpoints to | |||
authenticate RTP packets end to end. This design yields flexibility to the Medi | ||||
a | ||||
Distributor to change certain RTP header values as packets are | Distributor to change certain RTP header values as packets are | |||
forwarded. Which values the Media Distributor can change in the RTP header | forwarded. Values that the Media Distributor can change in the RTP header | |||
are defined in | are defined in | |||
<xref target="I-D.ietf-perc-double"></xref>. RTCP can only be encrypted hop-by- | <xref target="RFC8723" format="default"/>. RTCP can only be encrypted hop by | |||
hop, giving the | hop, giving the Media Distributor the flexibility to (1) forward RTCP | |||
Media Distributor the flexibility to forward RTCP content unchanged, | content unchanged, (2) transmit compound RTCP packets, (3) initiate | |||
transmit compound RTCP packets or to initiate RTCP packets for | RTCP packets for reporting statistics, or (4) convey other information. | |||
reporting statistics or conveying other information. Performing | Performing HBH authentication for all RTP and RTCP packets also helps | |||
hop-by-hop authentication for all RTP and RTCP packets also helps | provide replay protection (see <xref target="attacks" format="default"/>). The | |||
provide replay protection (see <xref target="attacks"></xref>). The use of the | use of the replay | |||
replay | protection mechanism specified in <xref target="RFC3711" sectionFormat="of" | |||
protection mechanism specified in Section 3.3.2 of <xref target="RFC3711"></xref | section="3.3.2"/> is <bcp14>REQUIRED</bcp14> at each hop.</t> | |||
> is | <t>If there is a need to encrypt one or more RTP header extensions | |||
REQUIRED at each hop.</t> | hop by hop, the endpoint derives an encryption key from the HBH SRTP | |||
<t>If there is a need to encrypt one or more RTP header extensions | master key to encrypt header extensions as per <xref target="RFC6904" format="de | |||
hop-by-hop, the Endpoint derives an encryption key from the HBH SRTP | fault"/>. This | |||
master key to encrypt header extensions as per <xref target="RFC6904"></xref>. | ||||
This | ||||
still gives the Media Distributor visibility into header extensions, | still gives the Media Distributor visibility into header extensions, | |||
such as the one used to determine audio level <xref target="RFC6464"></xref> of conference | such as the one used to determine the audio level <xref target="RFC6464" format= "default"/> of conference | |||
participants. Note that when RTP header extensions are encrypted, all | participants. Note that when RTP header extensions are encrypted, all | |||
hops need to decrypt and | hops need to decrypt and | |||
re-encrypt these encrypted header extensions. Please refer to | re-encrypt these encrypted header extensions. Please refer to | |||
Sections 5.1 through 5.3 of <xref target="I-D.ietf-perc-double"></xref> for proc | Sections <xref target="RFC8723" section="5.1" | |||
edures | sectionFormat="bare"/>, <xref target="RFC8723" section="5.2" | |||
sectionFormat="bare"/>, and <xref target="RFC8723" section="5.3" sectionFormat= | ||||
"bare"/> of <xref target="RFC8723"/> for procedures | ||||
to perform RTP header extension encryption and decryption.</t> | to perform RTP header extension encryption and decryption.</t> | |||
</section> | </section> | |||
<section anchor="key_exchange" numbered="true" toc="default"> | ||||
<section anchor="key_exchange" title="Key Exchange"> | <name>Key Exchange</name> | |||
<t>In brief, the keys used by any given Endpoints are determined in the | <t>In brief, the keys used by any given endpoints are determined as | |||
following way:</t> | follows:</t> | |||
<t> | <ul spacing="normal"> | |||
<list style="symbols"> | <li>The HBH keys that the endpoint uses to send and receive SRTP media | |||
<t>The HBH keys that the Endpoint uses to send and receive SRTP media | are derived from a DTLS handshake that the endpoint performs with | |||
are derived from a DTLS handshake that the Endpoint performs with | the Key Distributor (following normal DTLS-SRTP procedures).</li> | |||
the Key Distributor (following normal DTLS-SRTP procedures).</t> | <li>The E2E key that an endpoint uses to send SRTP media can be | |||
<t>The E2E key that an Endpoint uses to send SRTP media can either be | either set from the DTLS-SRTP association with the Key Distributor or chosen | |||
set from the DTLS-SRTP association with the Key Distributor or chosen | by the endpoint. It is then distributed to other endpoints in a | |||
by the Endpoint. It is then distributed to other Endpoints in a | ||||
Full EKT Tag, encrypted under an EKT Key provided to the client by the | Full EKT Tag, encrypted under an EKT Key provided to the client by the | |||
Key Distributor within the DTLS channel they negotiated. Note that | Key Distributor within the DTLS channel they negotiated. Note that | |||
an Endpoint MAY create a different E2E key per media flow, where a | an endpoint <bcp14>MAY</bcp14> create a different E2E key per media flow, where | |||
media flow is identified by its SSRC value.</t> | a | |||
<t>Each E2E key that an Endpoint uses to receive SRTP media is set | media flow is identified by its SSRC value.</li> | |||
by receiving a Full EKT Tag from another Endpoint.</t> | <li>Each E2E key that an endpoint uses to receive SRTP media is set | |||
<t>The HBH keys used between two Media Distributors is derived from | by receiving a Full EKT Tag from another endpoint.</li> | |||
DTLS-SRTP procedures employed directly between them.</t> | <li>The HBH keys used between two Media Distributors are derived via | |||
</list> | DTLS-SRTP procedures employed directly between them.</li> | |||
</t> | </ul> | |||
<section anchor="initial-key-exchange-and-key-distributor" numbered="tru | ||||
<section anchor="initial-key-exchange-and-key-distributor" title="Initial Key Ex | e" toc="default"> | |||
change and Key Distributor"> | <name>Initial Key Exchange and Key Distributor</name> | |||
<t>The Media Distributor maintains a tunnel with the Key Distributor | <t>The Media Distributor maintains a tunnel with the Key Distributor | |||
(e.g., using <xref target="I-D.ietf-perc-dtls-tunnel"></xref>), making it | (e.g., using the tunnel protocol defined in <xref target="I-D.ietf-perc-dtls-tun | |||
nel" format="default"/>), making it | ||||
possible for the Media Distributor to facilitate the establishment of | possible for the Media Distributor to facilitate the establishment of | |||
a secure DTLS association between each Endpoint and the Key | a secure DTLS association between each endpoint and the Key | |||
Distributor as shown the following figure. The DTLS association | Distributor as shown in <xref target="fig-initial-key-exchange"/>. The DTLS ass | |||
between Endpoints and the Key Distributor enables each Endpoint to | ociation | |||
between endpoints and the Key Distributor enables each endpoint to | ||||
generate E2E and HBH keys and receive the KEK. | generate E2E and HBH keys and receive the KEK. | |||
At the same time, the Key Distributor securely | At the same time, the Key Distributor securely | |||
provides the HBH key information to the Media Distributor. The key | provides the HBH key information to the Media Distributor. The key | |||
information summarized here may include the SRTP master key, SRTP | information summarized here may include the SRTP master key, the SRTP | |||
master salt, and the negotiated cryptographic transform.</t> | master salt, and the negotiated cryptographic transform.</t> | |||
<figure anchor="fig-initial-key-exchange" align="center" title="Exchanging Key I | <figure anchor="fig-initial-key-exchange"> | |||
nformation Between Entities | <name>Exchanging Key Information between Entities</name> | |||
"> | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
<artwork align="center"> | ||||
+-----------+ | +-----------+ | |||
KEK info | Key | HBH Key info to | KEK info | Key | HBH Key info to | |||
to Endpoints |Distributor| Endpoints & Media Distributor | to Endpoints |Distributor| Endpoints & Media Distributor | |||
+-----------+ | +-----------+ | |||
# ^ ^ # | # ^ ^ # | |||
# | | #--- Tunnel | # | | #--- Tunnel | |||
# | | # | # | | # | |||
+-----------+ +-----------+ +-----------+ | +-----------+ +-----------+ +-----------+ | |||
| Endpoint | DTLS | Media | DTLS | Endpoint | | | Endpoint | DTLS | Media | DTLS | Endpoint | | |||
| KEK |<------------|Distributor|------------>| KEK | | | KEK |<------------|Distributor|------------>| KEK | | |||
| HBH Key | to Key Dist | HBH Keys | to Key Dist | HBH Key | | | HBH Key | to Key Dist | HBH Keys | to Key Dist | HBH Key | | |||
+-----------+ +-----------+ +-----------+ | +-----------+ +-----------+ +-----------+]]></artwork> | |||
</figure> | ||||
</artwork> | <t>In addition to the secure tunnel between the Media Distributor and | |||
</figure> | the | |||
<t>In addition to the secure tunnel between the Media Distributor and the | ||||
Key Distributor, there are two additional types of security associations | Key Distributor, there are two additional types of security associations | |||
utilized as a part of the key exchange as discussed in the following | utilized as a part of the key exchange, as discussed in the following | |||
paragraphs. One is a DTLS-SRTP association between an Endpoint and the Key | paragraphs. One is a DTLS-SRTP association between an endpoint and the Key | |||
Distributor (with packets passing through the Media Distributor) and the | Distributor (with packets passing through the Media Distributor), and the | |||
other is a DTLS-SRTP association between peer Media Distributors.</t> | other is a DTLS-SRTP association between peer Media Distributors.</t> | |||
<t>Endpoints establish a DTLS-SRTP association over the RTP session with the | <t>Endpoints establish a DTLS-SRTP association over the RTP session wi th the | |||
Media Distributor and its media ports for the purposes of key information | Media Distributor and its media ports for the purposes of key information | |||
exchange with the Key Distributor. The Media Distributor does not terminate | exchange with the Key Distributor. The Media Distributor does not terminate | |||
the DTLS signaling, but instead forwards DTLS packets received | the DTLS signaling but instead forwards DTLS packets received | |||
from an Endpoint on to the Key Distributor (and vice versa) via a | from an endpoint on to the Key Distributor (and vice versa) via a | |||
tunnel established between Media Distributor and the Key Distributor.</t> | tunnel established between the Media Distributor and the Key Distributor.</t> | |||
<t>In establishing the DTLS association between Endpoints and the | <t>When establishing the DTLS association between endpoints and the | |||
Key Distributor, the Endpoint MUST act as the DTLS client and the | Key Distributor, the endpoint <bcp14>MUST</bcp14> act as the DTLS client, and th | |||
Key Distributor MUST act as the DTLS server. The KEK | e | |||
Key Distributor <bcp14>MUST</bcp14> act as the DTLS server. The KEK | ||||
is conveyed by the Key Distributor over the DTLS | is conveyed by the Key Distributor over the DTLS | |||
association to Endpoints via procedures defined in EKT | association to endpoints via procedures defined in EKT | |||
<xref target="I-D.ietf-perc-srtp-ekt-diet"></xref> via the EKTKey message.</t> | <xref target="RFC8870" format="default"/> via the EKTKey message.</t> | |||
<t>The Key Distributor MUST NOT establish DTLS-SRTP associations with | <t>The Key Distributor <bcp14>MUST NOT</bcp14> establish DTLS-SRTP ass | |||
Endpoints without first authenticating the Media Distributor tunneling the | ociations with | |||
DTLS-SRTP packets from the Endpoint.</t> | endpoints without first authenticating the Media Distributor tunneling the | |||
<t>Note that following DTLS-SRTP procedures for the <xref target="I-D.ietf-perc- | DTLS-SRTP packets from the endpoint.</t> | |||
double"></xref> | <t>Note that following DTLS-SRTP procedures for the cipher defined | |||
cipher, the Endpoint generates both E2E and HBH encryption keys | in <xref target="RFC8723" format="default"/>, the endpoint generates both E2E an | |||
and salt values. Endpoints MUST either use the DTLS-SRTP generated E2E key | d HBH encryption keys | |||
and salt values. Endpoints <bcp14>MUST</bcp14> either use the DTLS-SRTP-generat | ||||
ed E2E key | ||||
for transmission or generate a fresh E2E key. In either case, the generated | for transmission or generate a fresh E2E key. In either case, the generated | |||
SRTP master salt for E2E encryption MUST be replaced with the salt value | SRTP master salt for E2E encryption <bcp14>MUST</bcp14> be replaced with the sal t value | |||
provided by the Key Distributor via the EKTKey message. That is because | provided by the Key Distributor via the EKTKey message. That is because | |||
every Endpoint in the conference uses the same SRTP master salt. The | every endpoint in the conference uses the same SRTP master salt. The | |||
Endpoint only transmits the SRTP master key (not the salt) used for E2E | endpoint only transmits the SRTP master key (not the salt) used for E2E | |||
encryption to other Endpoints in RTP/RTCP packets per | encryption to other endpoints in RTP/RTCP packets per | |||
<xref target="I-D.ietf-perc-srtp-ekt-diet"></xref>.</t> | <xref target="RFC8870" format="default"/>.</t> | |||
<t>Media Distributors use DTLS-SRTP directly with a peer | <t>Media Distributors use DTLS-SRTP directly with a peer | |||
Media Distributor to establish the HBH key for transmitting RTP and RTCP | Media Distributor to establish the HBH key for transmitting RTP and RTCP | |||
packets to that peer Media Distributor. The Key Distributor does not | packets to that peer Media Distributor. The Key Distributor does not | |||
facilitate establishing a HBH key for use between Media Distributors.</t> | facilitate establishing a HBH key for use between Media Distributors.</t> | |||
</section> | </section> | |||
<section anchor="keyexchange" numbered="true" toc="default"> | ||||
<section anchor="keyexchange" title="Key Exchange during a Conference"> | <name>Key Exchange during a Conference</name> | |||
<t>Following the initial key information exchange with the Key | <t>Following the initial key information exchange with the Key | |||
Distributor, an Endpoint is able to encrypt media end-to-end with | Distributor, an endpoint is able to encrypt media end to end with | |||
an E2E key, sending that E2E key to other Endpoints encrypted with the | an E2E key, sending that E2E key to other endpoints encrypted with the | |||
KEK, and is able to encrypt and authenticate RTP packets | KEK, and is able to encrypt and authenticate RTP packets | |||
using a HBH key. The procedures defined do not allow the Media | using a HBH key. This framework does not allow the Media Distributor | |||
Distributor to gain access to the KEK information, preventing it from | to gain access to the KEK information, preventing it from | |||
gaining access to any Endpoint's E2E key and subsequently decrypting | gaining access to any endpoint's E2E key and subsequently decrypting | |||
media.</t> | media.</t> | |||
<t>The KEK may need to change from time-to-time during the | <t>The KEK may need to change from time to time during the | |||
life of a conference, such as when a new participant joins or leaves a | lifetime of a conference, such as when a new participant joins or leaves a | |||
conference. Dictating if, when or how often a conference is to be | conference. Dictating if, when, or how often a conference is to be | |||
re-keyed is outside the scope of this document, but this framework | rekeyed is outside the scope of this document, but this framework | |||
does accommodate re-keying during the life of a conference.</t> | does accommodate rekeying during the lifetime of a conference.</t> | |||
<t>When a Key Distributor decides to re-key a conference, it transmits a | <t>When a Key Distributor decides to rekey a conference, it transmits | |||
a | ||||
new EKTKey message containing the new EKT Key | new EKTKey message containing the new EKT Key | |||
to each of the conference participants. | to each of the conference participants. | |||
Upon receipt of the new EKT Key, the Endpoint MUST create a | Upon receipt of the new EKT Key, the endpoint <bcp14>MUST</bcp14> create a | |||
new SRTP master key and prepare to send that key inside a Full EKT | new SRTP master key and prepare to send that key inside a FullEKTField using | |||
Field using the new EKT Key as per Section 4.5 of <xref target="I-D.ietf-perc-sr | the new EKT Key as per <xref target="RFC8870" sectionFormat="of" | |||
tp-ekt-diet"></xref>. | section="4.5"/>. In order to allow time for all endpoints in the conference to r | |||
In order to allow time for all Endpoints in the conference to receive the new | eceive the new | |||
keys, the sender should follow the recommendations in Section 4.7 of | keys, the sender should follow the recommendations in <xref target="RFC8870" | |||
[I-D.ietf-perc-srtp-ekt-diet]. On receiving a new EKT Key, Endpoints MUST | sectionFormat="of" section="4.6"/>. On receiving a new EKT Key, endpoints <bcp14 | |||
be prepared to decrypt EKT tags using the new key. The EKT SPI field is | >MUST</bcp14> | |||
used to differentiate between tags encrypted with the old and new keys.</t> | be prepared to decrypt EKT Tags using the new key. The EKT Security Parameter | |||
<t>After re-keying, an Endpoint SHOULD retain prior SRTP master keys and | Index (SPI) field is | |||
EKT Key for a period of time sufficient for the purpose of ensuring it can | used to differentiate between EKT Tags encrypted with the old and new keys.</t> | |||
<t>After rekeying, an endpoint <bcp14>SHOULD</bcp14> retain prior SRTP | ||||
master keys and | ||||
EKT Keys for a period of time sufficient for the purpose of ensuring that it can | ||||
decrypt late-arriving or out-of-order packets or packets sent by other | decrypt late-arriving or out-of-order packets or packets sent by other | |||
Endpoints that used the prior keys for a period of time after re-keying began. | endpoints that used the prior keys for a period of time after rekeying began. | |||
An Endpoint MAY retain old keys until the end of the conference.</t> | An endpoint <bcp14>MAY</bcp14> retain old keys until the end of the conference.< | |||
<t>Endpoints MAY follow the procedures in section 5.2 of <xref target="RFC5764"> | /t> | |||
</xref> | <t>Endpoints <bcp14>MAY</bcp14> follow the procedures in <xref target= | |||
"RFC5764" sectionFormat="of" section="5.2"/> | ||||
to renegotiate HBH keys as desired. If new HBH keys are generated, | to renegotiate HBH keys as desired. If new HBH keys are generated, | |||
the new keys are also delivered to the Media Distributor following | the new keys are also delivered to the Media Distributor following | |||
the procedures defined in <xref target="I-D.ietf-perc-dtls-tunnel"></xref> as on | the procedures defined in <xref target="I-D.ietf-perc-dtls-tunnel" format="defau | |||
e possible method.</t> | lt"/> as one possible method.</t> | |||
<t>Endpoints MAY change the E2E encryption key used at | <t>At any time, endpoints <bcp14>MAY</bcp14> change the E2E | |||
any time. An Endpoint MUST generate a new E2E encryption key | encryption key being used. An endpoint <bcp14>MUST</bcp14> generate a new E2E e | |||
ncryption key | ||||
whenever it receives a new EKT Key. After switching to a new key, | whenever it receives a new EKT Key. After switching to a new key, | |||
the new key is conveyed to other Endpoints in the conference | the new key is conveyed to other endpoints in the conference | |||
in RTP/RTCP packets per <xref target="I-D.ietf-perc-srtp-ekt-diet"></xref>.</t> | in RTP/RTCP packets per <xref target="RFC8870" format="default"/>.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="authentication" numbered="true" toc="default"> | ||||
<section anchor="authentication" title="Authentication"> | <name>Authentication</name> | |||
<t>It is important to this solution framework that the entities can | <t>It is important that entities can | |||
validate the authenticity of other entities, especially the Key | validate the authenticity of other entities, especially the Key | |||
Distributor and Endpoints. The details of this are outside the scope | Distributor and endpoints. Details on this topic are outside the scope | |||
of specification but a few possibilities are discussed in the | of this specification, but a few possibilities are discussed in the | |||
following sections. The critical requirements are that an Endpoint can verify | following sections. The critical requirements are that (1) an endpoint | |||
it is connected to the correct Key Distributor for the conference | can verify that it is connected to the correct Key Distributor for the | |||
and the Key Distributor can verify the Endpoint is the correct | conference and (2) the Key Distributor can verify that the endpoint is | |||
Endpoint for the conference.</t> | the correct endpoint for the conference.</t> | |||
<t>Two possible approaches to solve this are Identity Assertions and | <t>Two possible approaches to resolve this situation are identity assertio | |||
Certificate Fingerprints.</t> | ns and | |||
certificate fingerprints.</t> | ||||
<section anchor="identity-assertions" title="Identity Assertions"> | <section anchor="identity-assertions" numbered="true" toc="default"> | |||
<t>WebRTC Identity assertion <xref target="I-D.ietf-rtcweb-security-arch"></xref | <name>Identity Assertions</name> | |||
> is used | <t>A WebRTC identity assertion <xref target="RFC8827" format="default"/> | |||
to bind the identity of the user of the Endpoint to the fingerprint of | is used | |||
to bind the identity of the user of the endpoint to the fingerprint of | ||||
the DTLS-SRTP certificate used for the call. This certificate is | the DTLS-SRTP certificate used for the call. This certificate is | |||
unique for a given call and a conference. This allows the Key | unique for a given call and a conference. | |||
Distributor to ensure that only authorized users participate in the | This certificate is unique for a given call and a conference, allowing the | |||
conference. Similarly the Key Distributor can create a WebRTC Identity | Key Distributor to ensure that only authorized users participate in the | |||
conference. Similarly, the Key Distributor can create a WebRTC identity | ||||
assertion to bind the fingerprint of the unique certificate used by | assertion to bind the fingerprint of the unique certificate used by | |||
the Key Distributor for this conference so that the Endpoint can | the Key Distributor for this conference so that the endpoint can | |||
validate it is talking to the correct Key Distributor. Such a setup | verify that it is talking to the correct Key Distributor. Such a setup | |||
requires an Identity Provider (Idp) trusted by the Endpoints and the | requires an Identity Provider (IdP) trusted by the endpoints and the | |||
Key Distributor.</t> | Key Distributor.</t> | |||
</section> | </section> | |||
<section anchor="certificate-fingerprints-in-session-signaling" numbered=" | ||||
<section anchor="certificate-fingerprints-in-session-signaling" title="Certifica | true" toc="default"> | |||
te Fingerprints in Session Signaling"> | <name>Certificate Fingerprints in Session Signaling</name> | |||
<t>Entities managing session signaling are generally assumed to be | <t>Entities managing session signaling are generally assumed to be | |||
untrusted in the PERC framework. However, there are some deployment | untrusted in the PERC framework. However, there are some deployment | |||
scenarios where parts of the session signaling may be assumed | scenarios where parts of the session signaling may be assumed | |||
trustworthy for the purposes of exchanging, in a manner that can be | trustworthy for the purposes of exchanging, in a manner that can be | |||
authenticated, the fingerprint of an entity's certificate.</t> | authenticated, the fingerprint of an entity's certificate.</t> | |||
<t>As a concrete example, SIP <xref target="RFC3261"></xref> and | <t>As a concrete example, SIP <xref target="RFC3261" format="default"/> | |||
Session Description Protocol (SDP) <xref target="RFC4566"></xref> can be used | and | |||
to convey the fingerprint information per <xref target="RFC5763"></xref>. An En | the Session Description Protocol (SDP) <xref target="RFC4566" format="default"/> | |||
dpoint's | can be used | |||
to convey the fingerprint information per <xref target="RFC5763" format="default | ||||
"/>. An endpoint's | ||||
SIP User Agent would send an INVITE message containing SDP for the | SIP User Agent would send an INVITE message containing SDP for the | |||
media session along with the Endpoint's certificate fingerprint, which | media session along with the endpoint's certificate fingerprint, which | |||
can be signed using the procedures described in <xref target="RFC8224"></xref> f | can be signed using the procedures described in <xref target="RFC8224" format="d | |||
or the | efault"/> for the | |||
benefit of forwarding the message to other entities by the Focus | benefit of forwarding the message to other entities by the focus | |||
<xref target="RFC4353"></xref>. Other entities can verify the fingerprints matc | <xref target="RFC4353" format="default"/>. Other entities can verify that the f | |||
h the | ingerprints match the | |||
certificates found in the DTLS-SRTP connections to find the identity | certificates found in the DTLS-SRTP connections to find the identity | |||
of the far end of the DTLS-SRTP connection and verify that is the | of the far end of the DTLS-SRTP connection and verify that it is the | |||
authorized entity.</t> | authorized entity.</t> | |||
<t>Ultimately, if using session signaling, an Endpoint's certificate | <t>Ultimately, if using session signaling, an endpoint's certificate | |||
fingerprint would need to be securely mapped to a user and conveyed to | fingerprint would need to be securely mapped to a user and conveyed to | |||
the Key Distributor so that it can check that that user is authorized. | the Key Distributor so that it can check that the user in question is authorized . | |||
Similarly, the Key Distributor's certificate fingerprint can be | Similarly, the Key Distributor's certificate fingerprint can be | |||
conveyed to an Endpoint in a manner that can be authenticated as being an | conveyed to an endpoint in a manner that can be authenticated as being an | |||
authorized Key Distributor for this conference.</t> | authorized Key Distributor for this conference.</t> | |||
</section> | </section> | |||
<section anchor="conf-id" numbered="true" toc="default"> | ||||
<section anchor="conf-id" title="Conference Identification"> | <name>Conference Identification</name> | |||
<t>The Key Distributor needs to know what Endpoints are being added to a | <t>The Key Distributor needs to know what endpoints are being added to a | |||
given conference. Thus, the Key Distributor and the Media Distributor | given conference. Thus, the Key Distributor and the Media Distributor | |||
need to know Endpoint-to-conference mappings, which is enabled by | need to know endpoint-to-conference mappings, which are enabled by | |||
exchanging a conference-specific unique identifier defined in | exchanging a conference-specific unique identifier as described in | |||
<xref target="I-D.ietf-perc-dtls-tunnel"></xref>. How this unique identifier is | <xref target="I-D.ietf-perc-dtls-tunnel" format="default"/>. How this unique | |||
assigned | identifier is assigned is outside the scope of this document.</t> | |||
is outside the scope of this document.</t> | </section> | |||
</section> | </section> | |||
</section> | <section anchor="perc-keys" numbered="true" toc="default"> | |||
<name>PERC Keys</name> | ||||
<section anchor="perc-keys" title="PERC Keys"> | <t>This section describes the various keys employed by PERC.</t> | |||
<t>This section describes the various keys employed by PERC.</t> | <section anchor="keyinventory" numbered="true" toc="default"> | |||
<name>Key Inventory and Management Considerations</name> | ||||
<section anchor="keyinventory" title="Key Inventory and Management Consideration | <t>This section summarizes the several different keys used in the PERC f | |||
s"> | ramework, | |||
<t>This section summarizes the several different keys used in the PERC framework | ||||
, | ||||
how they are generated, and what purpose they serve.</t> | how they are generated, and what purpose they serve.</t> | |||
<t>The keys are described in the order in which they would typically be | <t>The keys are described in the order in which they would typically be | |||
acquired.</t> | acquired.</t> | |||
<t>The various keys used in PERC are shown in | <t>The various keys used in PERC are shown in | |||
<xref target="key-inventory-table"></xref> below.</t> | <xref target="key-inventory-table" format="default"/> below.</t> | |||
<figure anchor="key-inventory-table" align="center" title="Key Inventory | ||||
"> | <table anchor="key-inventory-table"> | |||
<artwork align="center">+-----------+------------------------------------------- | <name>Key Inventory</name> | |||
---------+ | <thead> | |||
| Key | Description | | <tr> | |||
+-----------+----------------------------------------------------+ | <th align="center">Key</th> | |||
| HBH Key | SRTP master key used to encrypt media hop-by-hop. | | <th align="center">Description</th> | |||
+-----------+----------------------------------------------------+ | </tr> | |||
| KEK | Key shared by all Endpoints and used to encrypt | | </thead> | |||
| (EKT Key) | each Endpoint's E2E SRTP master key so receiving | | <tbody> | |||
| | Endpoints can decrypt media. | | <tr> | |||
+-----------+----------------------------------------------------+ | <td>HBH Key</td> | |||
| E2E Key | SRTP master key used to encrypt media end-to-end. | | <td>SRTP master key used to encrypt media hop by hop.</td> | |||
+-----------+----------------------------------------------------+ | </tr> | |||
</artwork> | <tr> | |||
</figure> | <td>KEK (EKT Key)</td> | |||
<t>While the number of key types is very small, it should be understood that | <td>Key shared by all endpoints and used to encrypt each endpoint's E2E | |||
SRTP master key so receiving endpoints can decrypt media.</td> | ||||
</tr> | ||||
<tr> | ||||
<td>E2E Key</td> | ||||
<td>SRTP master key used to encrypt media end to end.</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>While the number of key types is very small, it should be understood | ||||
that | ||||
the actual number of distinct keys can be large as the conference | the actual number of distinct keys can be large as the conference | |||
grows in size.</t> | grows in size.</t> | |||
<t>As an example, with 1,000 participants in a conference, there would be at | <t>As an example, with 1,000 participants in a conference, there would b e at | |||
least 1,000 distinct SRTP master keys, all of which share the same master salt. | least 1,000 distinct SRTP master keys, all of which share the same master salt. | |||
Each of those keys are passed through the KDF defined in <xref target="RFC3711"> </xref> to produce | Each of those keys is passed through the Key Derivation Function (KDF) as define d in <xref target="RFC3711" format="default"/> to produce | |||
the actual encryption and authentication keys.</t> | the actual encryption and authentication keys.</t> | |||
<t>Complicating key management is the fact that the KEK can change and, when | <t>Complicating key management is the fact that the KEK can change and, | |||
it does, the Endpoints generate new SRTP master keys that are associated with | when | |||
it does, the endpoints generate new SRTP master keys that are associated with | ||||
a new EKT SPI. Endpoints might retain old keys for a period of time to | a new EKT SPI. Endpoints might retain old keys for a period of time to | |||
ensure they can properly decrypt late-arriving or out-of-order packets, which | ensure that they can properly decrypt late-arriving or out-of-order packets, whi | |||
means the number of keys held during that period of time might substantially | ch | |||
more.</t> | means that the number of keys held during that period of time might be | |||
<t>A more detailed explanation of each of the keys follows.</t> | substantially higher.</t> | |||
</section> | <t>A more detailed explanation of each of the keys follows.</t> | |||
</section> | ||||
<section anchor="dtls-srtp-exchange-yields-hbh-keys" title="DTLS-SRTP Exchange Y | <section anchor="dtls-srtp-exchange-yields-hbh-keys" numbered="true" toc=" | |||
ields HBH Keys"> | default"> | |||
<t>The first set of keys acquired are for hop-by-hop encryption and | <name>DTLS-SRTP Exchange Yields HBH Keys</name> | |||
decryption. Per the Double <xref target="I-D.ietf-perc-double"></xref> procedur | <t>The first set of keys acquired are for HBH encryption and | |||
es, the | decryption. Per the double transform procedures <xref target="RFC8723" format=" | |||
Endpoint performs DTLS-SRTP exchange with the Key Distributor | default"/>, the | |||
and receives a key that is, in fact, "double" the size that is needed. | endpoint performs a DTLS-SRTP exchange with the Key Distributor | |||
The end-to-end part is the first half of the key, so the Endpoint discards | and receives a key that is, in fact, "double" the size that is needed. | |||
that information when generating its own key. The second half of the key | The E2E part is the first half of the key, so the endpoint discards | |||
material is for hop-by-hop operations, so that half of the key | that information when generating its own key. The second half of the keying | |||
material is for HBH operations, so that half of the key | ||||
(corresponding to the least significant bits) is assigned internally as | (corresponding to the least significant bits) is assigned internally as | |||
the HBH key.</t> | the HBH key.</t> | |||
<t>The Key Distributor informs the Media Distributor of the HBH key. Specifical ly, | <t>The Key Distributor informs the Media Distributor of the HBH key. Sp ecifically, | |||
the Key Distributor sends the least significant bits corresponding to the | the Key Distributor sends the least significant bits corresponding to the | |||
half of the keying material determined through DTLS-SRTP with the Endpoint | half of the keying material determined through DTLS-SRTP with the endpoint | |||
to the Media Distributor. A salt value is | to the Media Distributor. A salt value is | |||
generated along with the HBH key. The salt is also longer than needed | generated along with the HBH key. The salt is also longer than needed | |||
for hop-by-hop operations, thus only the least significant bits of the | for HBH operations; thus, only the least significant bits of the | |||
required length (half of the generated salt material) are sent to the | required length (half of the generated salt material) are sent to the | |||
Media Distributor. One way to transmit this key and salt information | Media Distributor. One way to transmit this key and salt information | |||
is via the tunnel protocol defined in <xref target="I-D.ietf-perc-dtls-tunnel">< | is via the tunnel protocol defined in <xref target="I-D.ietf-perc-dtls-tunnel" f | |||
/xref>.</t> | ormat="default"/>.</t> | |||
<t>No two Endpoints have the same HBH key, thus the Media Distributor | <t>No two endpoints have the same HBH key; thus, the Media Distributor | |||
MUST keep track each distinct HBH key (and the corresponding salt) and | <bcp14>MUST</bcp14> keep track of each distinct HBH key (and the corresponding s | |||
alt) and | ||||
use it only for the specified hop.</t> | use it only for the specified hop.</t> | |||
<t>The HBH key is also used for hop-by-hop encryption of RTCP. RTCP is not | <t>The HBH key is also used for HBH encryption of RTCP. RTCP is not | |||
end-to-end encrypted in PERC.</t> | E2E-encrypted in PERC.</t> | |||
</section> | </section> | |||
<section anchor="the-key-distributor-transmits-the-kek-ekt-key" numbered=" | ||||
<section anchor="the-key-distributor-transmits-the-kek-ekt-key" title="The Key D | true" toc="default"> | |||
istributor Transmits the KEK (EKT Key)"> | <name>The Key Distributor Transmits the KEK (EKT Key)</name> | |||
<t>Via the aforementioned DTLS-SRTP association, the Key Distributor | <t>The Key Distributor sends the KEK (the EKT Key per | |||
sends the Endpoint the KEK (EKT Key per | <xref target="RFC8870" format="default"/>) to the endpoint via the aforementione | |||
<xref target="I-D.ietf-perc-srtp-ekt-diet"></xref>). This key is known only to | d DTLS-SRTP association. This key is known only to | |||
the Key Distributor and Endpoints. This key is the most important to | the Key Distributor and endpoints; it is the most important entity to | |||
protect since having knowledge of this key (and the SRTP master salt | protect, since having knowledge of this key (and the SRTP master salt | |||
transmitted as a part of the same message) allows an entity to | transmitted as a part of the same message) allows an entity to | |||
decrypt any media packet in the conference.</t> | decrypt any media packet in the conference.</t> | |||
<t>Note that the Key Distributor can send any number of EKT Keys to | <t>Note that the Key Distributor can send any number of EKT Keys to | |||
Endpoints. This is used to re-key the entire conference. Each | endpoints. This information is used to rekey the entire conference. Each | |||
key is identified by a "Security Parameter Index" (SPI) value. | key is identified by an SPI value. | |||
Endpoints MUST expect that a conference might be re-keyed | Endpoints <bcp14>MUST</bcp14> expect that a conference might be rekeyed | |||
when a new participant joins a conference or when a participant | when a new participant joins a conference or when a participant | |||
leaves a conference in order to protect the confidentiality of | leaves a conference, in order to protect the confidentiality of | |||
the conversation before and after such events.</t> | the conversation before and after such events.</t> | |||
<t>The SRTP master salt to be used by the Endpoint is transmitted along | <t>The SRTP master salt to be used by the endpoint is transmitted along | |||
with the EKT Key. All Endpoints in the conference utilize | with the EKT Key. All endpoints in the conference utilize | |||
the same SRTP master salt that corresponds with a given EKT Key.</t> | the same SRTP master salt that corresponds with a given EKT Key.</t> | |||
<t>The Full EKT Tag in media packets is encrypted using a cipher specified | <t>The Full EKT Tag in media packets is encrypted using a cipher specifi ed | |||
via the EKTKey message (e.g., AES Key Wrap with a 128-bit key). This | via the EKTKey message (e.g., AES Key Wrap with a 128-bit key). This | |||
cipher is different than the cipher used to protect media and is only | cipher is different than the cipher used to protect media and is only | |||
used to encrypt the Endpoint's SRTP master key (and other EKT Tag data | used to encrypt the endpoint's SRTP master key (and other EKT Tag data | |||
as per <xref target="I-D.ietf-perc-srtp-ekt-diet"></xref>).</t> | as per <xref target="RFC8870" format="default"/>).</t> | |||
<t>The Media Distributor is not given the KEK.</t> | <t>The KEK is not given to the Media Distributor.</t> | |||
</section> | </section> | |||
<section anchor="endpoints-fabricate-an-srtp-master-key" numbered="true" t | ||||
<section anchor="endpoints-fabricate-an-srtp-master-key" title="Endpoints fabric | oc="default"> | |||
ate an SRTP Master Key"> | <name>Endpoints Fabricate an SRTP Master Key</name> | |||
<t>As stated earlier, the E2E key determined via DTLS-SRTP MAY be | <t>As stated earlier, the E2E key determined via DTLS-SRTP <bcp14>MAY</b | |||
discarded in favor of a locally-generated E2E SRTP master key. While the | cp14> be | |||
DTLS-SRTP-derived SRTP master key can be used initially, the Endpoint might | discarded in favor of a locally generated E2E SRTP master key. While the | |||
choose to change the SRTP master key periodically and MUST change the | DTLS-SRTP-derived SRTP master key can be used initially, the endpoint might | |||
SRTP master key as a result of the EKT key changing.</t> | choose to change the SRTP master key periodically and <bcp14>MUST</bcp14> change | |||
<t>A locally-generated SRTP master key is used along with the master salt | the | |||
transmitted to the Endpoint from the Key Distributor via the EKTKey | SRTP master key as a result of the EKT Key changing.</t> | |||
message to encrypt media end-to-end.</t> | <t>A locally generated SRTP master key is used along with the master sal | |||
<t>Since the Media Distributor is not involved in E2E functions, it does not | t | |||
create this key nor have access to any Endpoint's E2E key. Note, too, | transmitted to the endpoint from the Key Distributor via the EKTKey | |||
that even the Key Distributor is unaware of the locally-generated E2E keys | message to encrypt media end to end.</t> | |||
used by each Endpoint.</t> | <t>Since the Media Distributor is not involved in E2E functions, it does | |||
<t>The Endpoint transmits its E2E key to other Endpoints in the conference | not | |||
create this key, nor does it have access to any endpoint's E2E key. Note, too, | ||||
that even the Key Distributor is unaware of the locally generated E2E keys | ||||
used by each endpoint.</t> | ||||
<t>The endpoint transmits its E2E key to other endpoints in the conferen | ||||
ce | ||||
by periodically including it in SRTP packets in a Full EKT Tag. When | by periodically including it in SRTP packets in a Full EKT Tag. When | |||
placed in the Full EKT Tag, it is encrypted using the EKT Key provided | placed in the Full EKT Tag, it is encrypted using the EKT Key provided | |||
by the Key Distributor. The master salt is not transmitted, though, | by the Key Distributor. The master salt is not transmitted, though, | |||
since all Endpoints receive the same master salt via the EKTKey | since all endpoints receive the same master salt via the EKTKey | |||
message from the Key Distributor. The recommended frequency with which an | message from the Key Distributor. The recommended frequency with which an | |||
Endpoint transmits its SRTP master key is specified in | endpoint transmits its SRTP master key is specified in | |||
<xref target="I-D.ietf-perc-srtp-ekt-diet"></xref>.</t> | <xref target="RFC8870" format="default"/>.</t> | |||
</section> | </section> | |||
<section anchor="summary-of-key-types-and-entity-possession" numbered="tru | ||||
<section anchor="summary-of-key-types-and-entity-possession" title="Summary of K | e" toc="default"> | |||
ey Types and Entity Possession"> | <name>Summary of Key Types and Entity Possession</name> | |||
<t>All Endpoints have knowledge of the KEK.</t> | <t>All endpoints have knowledge of the KEK.</t> | |||
<t>Every HBH key is distinct for a given Endpoint, thus Endpoint A and | <t>Every HBH key is distinct for a given endpoint; thus, Endpoint A and | |||
Endpoint B do not have knowledge of the other's HBH key. Since HBH keys | Endpoint B do not have knowledge of the other's HBH key. Since HBH keys | |||
are derived from a DTLS-SRTP association, there is at most one HBH key | are derived from a DTLS-SRTP association, there is at most one HBH key | |||
per Endpoint, (The only exception is where the DTLS-SRTP association might | per endpoint. (The only exception is where the DTLS-SRTP association might | |||
be rekeyed per Section 5.2 of <xref target="RFC5764"></xref> and a new key is cr | be rekeyed per <xref target="RFC5764" sectionFormat="of" section="5.2"/> and a n | |||
eated to | ew key is created to | |||
replace the former key.)</t> | replace the former key.)</t> | |||
<t>Each Endpoint generates its own E2E key (SRTP master key), thus | <t>Each endpoint generates its own E2E key (SRTP master key); thus, | |||
there is a distinct E2E key per endpoint. This key is transmitted (encrypted) v ia | there is a distinct E2E key per endpoint. This key is transmitted (encrypted) v ia | |||
the Full EKT Tag to other Endpoints. Endpoints that receive media from | the Full EKT Tag to other endpoints. Endpoints that receive media from | |||
a given transmitting Endpoint gain knowledge of the | a given transmitting endpoint gain knowledge of the | |||
transmitter's E2E key via the Full EKT Tag.</t> | transmitter's E2E key via the Full EKT Tag.</t> | |||
<t>To summarize the various keys and which entity is in possession | <t><xref target="who-has-what-key-table" format="default"/> summarizes | |||
of a given key, refer to <xref target="fig-who-has-what-key"></xref>.</t> | the various keys and which entity is in possession of a given key.</t> | |||
<figure anchor="fig-who-has-what-key" align="center" title="Keys Types and Entit | ||||
y Possession | ||||
"> | ||||
<artwork align="center">+----------------------+------------+-------+-------+--- | ||||
---------+ | ||||
| Key / Entity | Endpoint A | MD X | MD Y | Endpoint B | | ||||
+----------------------+------------+-------+-------+------------+ | ||||
| KEK (EKT Key) | Yes | No | No | Yes | | ||||
+----------------------+------------+-------+-------+------------+ | ||||
| E2E Key (A and B) | Yes | No | No | Yes | | ||||
+----------------------+------------+-------+-------+------------+ | ||||
| HBH Key (A<=>MD X) | Yes | Yes | No | No | | ||||
+----------------------+------------+-------+-------+------------+ | ||||
| HBH Key (B<=>MD Y) | No | No | Yes | Yes | | ||||
+----------------------+------------+---------------+------------+ | ||||
| HBH Key (MD X<=>MD Y)| No | Yes | Yes | No | | ||||
+----------------------+------------+---------------+------------+ | ||||
</artwork> | ||||
</figure> | ||||
</section> | ||||
</section> | ||||
<section anchor="packetformat" title="Encrypted Media Packet Format"> | <table anchor="who-has-what-key-table"> | |||
<t><xref target="fig-perc-packet-format"></xref> presents a complete picture of | <name>Key Types and Entity Possession</name> | |||
what an encrypted | <thead> | |||
<tr> | ||||
<th align="center">Key/Entity</th> | ||||
<th align="center">Endpoint A</th> | ||||
<th align="center">MD X</th> | ||||
<th align="center">MD Y</th> | ||||
<th align="center">Endpoint B</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td>KEK (EKT Key)</td> | ||||
<td align="center">Yes</td> | ||||
<td align="center">No</td> | ||||
<td align="center">No</td> | ||||
<td align="center">Yes</td> | ||||
</tr> | ||||
<tr> | ||||
<td>E2E Key (A and B)</td> | ||||
<td align="center">Yes</td> | ||||
<td align="center">No</td> | ||||
<td align="center">No</td> | ||||
<td align="center">Yes</td> | ||||
</tr> | ||||
<tr> | ||||
<td>HBH Key (A<=>MD X)</td> | ||||
<td align="center">Yes</td> | ||||
<td align="center">Yes</td> | ||||
<td align="center">No</td> | ||||
<td align="center">No</td> | ||||
</tr> | ||||
<tr> | ||||
<td>HBH Key (B<=>MD Y)</td> | ||||
<td align="center">No</td> | ||||
<td align="center">No</td> | ||||
<td align="center">Yes</td> | ||||
<td align="center">Yes</td> | ||||
</tr> | ||||
<tr> | ||||
<td>HBH Key (MD X<=>MD Y)</td> | ||||
<td align="center">No</td> | ||||
<td align="center">Yes</td> | ||||
<td align="center">Yes</td> | ||||
<td align="center">No</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
</section> | ||||
<section anchor="packetformat" numbered="true" toc="default"> | ||||
<name>Encrypted Media Packet Format</name> | ||||
<t><xref target="fig-perc-packet-format" format="default"/> presents a com | ||||
plete picture of what an encrypted | ||||
media packet per this framework looks like when transmitted over the wire. | media packet per this framework looks like when transmitted over the wire. | |||
The packet format shown is encrypted using the Double cryptographic transform | The packet format shown in the figure is encrypted using the double cryptographi c transform | |||
with an EKT Tag appended to the end.</t> | with an EKT Tag appended to the end.</t> | |||
<figure anchor="fig-perc-packet-format" align="center" title="Encrypted Media Pa | <figure anchor="fig-perc-packet-format"> | |||
cket Format | <name>Encrypted Media Packet Format</name> | |||
"> | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
<artwork align="center"> 0 1 2 | 0 1 2 3 | |||
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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<++ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<++ | |||
|V=2|P|X| CC |M| PT | sequence number | IO | |V=2|P|X| CC |M| PT | sequence number | IO | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ IO | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ IO | |||
| timestamp | IO | | timestamp | IO | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ IO | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ IO | |||
| synchronization source (SSRC) identifier | IO | | synchronization source (SSRC) identifier | IO | |||
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ IO | +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ IO | |||
| contributing source (CSRC) identifiers | IO | | contributing source (CSRC) identifiers | IO | |||
| .... | IO | | .... | IO | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<+O | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<+O | |||
| RTP extension (OPTIONAL) ... | |O | | RTP extension (OPTIONAL) ... | |O | |||
+>+>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<+ O | +>+>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<+O | |||
O I | payload ... | IO | O I | payload ... | IO | |||
O I | +-------------------------------+ IO | O I | +-------------------------------+ IO | |||
O I | | RTP padding | RTP pad count | IO | O I | | RTP padding | RTP pad count | IO | |||
O +>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<+O | O +>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<+O | |||
O | | E2E authentication tag | |O | O | | E2E authentication tag | |O | |||
O | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |O | O | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |O | |||
O | | OHB ... | |O | O | | OHB ... | |O | |||
+>| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |+ | +>| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |+ | |||
| | | HBH authentication tag | || | | | | HBH authentication tag | || | |||
| | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ || | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ || | |||
| | | EKT Tag ... | R || | | | | EKT Tag ... | R || | |||
| | +-+-+-+-+-+-+-+-+-+ | || | | | +-+-+-+-+-+-+-+-+-+ | || | |||
| | +- Neither encrypted nor authenticated; || | | | +- Neither encrypted nor authenticated; || | |||
| | appended after Double is performed || | | | appended after the double transform || | |||
| | || | | | is performed || | |||
| | || | | | || | |||
| +- E2E Encrypted Portion E2E Authenticated Portion ---+| | | +- E2E-Encrypted Portion E2E-Authenticated Portion ---+| | |||
| | | | | | |||
+--- HBH Encrypted Portion HBH Authenticated Portion ----+ | +--- HBH-Encrypted Portion HBH-Authenticated Portion ----+ | |||
I = Inner (E2E) encryption / authentication | ||||
O = Outer (HBH) encryption / authentication | ||||
</artwork> | ||||
</figure> | ||||
</section> | ||||
<section anchor="attacks" title="Security Considerations"> | ||||
<section anchor="third-party-attacks" title="Third Party Attacks"> | --- <span class="insert">HBH-Encrypted</span> Portion <span class= | |||
<t>Third party attacks are attacks attempted by an adversary that is not | "insert">HBH-Authenticated</span> Portion ----+ | |||
I = Inner (E2E) encryption/authentication | ||||
O = Outer (HBH) encryption/authentication]]></artwork> | ||||
</figure> | ||||
</section> | ||||
<section anchor="attacks" numbered="true" toc="default"> | ||||
<name>Security Considerations</name> | ||||
<section anchor="third-party-attacks" numbered="true" toc="default"> | ||||
<name>Third-Party Attacks</name> | ||||
<t>Third-party attacks are attacks attempted by an adversary that is not | ||||
supposed to have access to keying material or is otherwise not an | supposed to have access to keying material or is otherwise not an | |||
authorized participant in the conference.</t> | authorized participant in the conference.</t> | |||
<t>On-path attacks are mitigated by hop-by-hop integrity protection and | <t>On-path attacks are mitigated by HBH integrity protection and | |||
encryption. The integrity protection mitigates packet modification | encryption. The integrity protection mitigates packet modification. | |||
and encryption makes selective blocking of packets harder, but not | Encryption makes selective blocking of packets harder, but not | |||
impossible.</t> | impossible.</t> | |||
<t>Off-path attackers could try connecting to different PERC entities to | <t>Off-path attackers could try connecting to different PERC entities to | |||
send specifically crafted packets with an aim of forcing the receiver to | send specifically crafted packets with an aim of forcing the receiver to | |||
forward or render bogus media packets. Endpoints and Media Distributors mitigat e | forward or render bogus media packets. Endpoints and Media Distributors mitigat e | |||
such an attack by performing hop-by-hop authentication and discarding packets | such an attack by performing HBH authentication and discarding packets | |||
that fail authentication.</t> | that fail authentication.</t> | |||
<t>Another attack vector is a third party claiming to be a Media | <t>Another attack vector is a third party claiming to be a Media | |||
Distributor, fooling Endpoints into sending packets to the false | Distributor, fooling endpoints into sending packets to the false | |||
Media Distributor instead of the correct one. The deceived sending | Media Distributor instead of the correct one. The deceived sending | |||
Endpoints could incorrectly assume their packets have been delivered | endpoints could incorrectly assume that their packets have been delivered | |||
to Endpoints when they in fact have not. While this attack is possible, | to endpoints when they in fact have not. While this attack is possible, | |||
the result is a simple denial of service with no leakage of confidential | the result is a simple denial of service with no leakage of confidential | |||
information, since the false Media Distributor would not have access | information, since the false Media Distributor would not have access | |||
to either HBH or E2E encryption keys.</t> | to either HBH or E2E encryption keys.</t> | |||
<t>A third party could cause a denial-of-service by transmitting many bogus | <t>A third party could cause a denial of service by transmitting many bo | |||
or replayed packets toward receiving devices that ultimately degrade | gus | |||
or replayed packets toward receiving devices and ultimately degrading | ||||
conference or device performance. Therefore, implementations might wish to | conference or device performance. Therefore, implementations might wish to | |||
devise mechanisms to safeguard against such illegitimate packets, such as | devise mechanisms to safeguard against such illegitimate packets, such as | |||
utilizing rate-limiting or performing basic sanity-checks on packets | utilizing rate-limiting or performing basic sanity checks on packets | |||
(e.g., looking at packet length or expected sequence number ranges) before | (e.g., looking at packet length or expected sequence number ranges), before | |||
performing more expensive decryption operations.</t> | performing decryption operations that are more expensive.</t> | |||
<t>Use of mutual DTLS authentication (as required by DTLS-SRTP) also helps to | <t>The use of mutual DTLS authentication (as required by DTLS-SRTP) also | |||
prevent a denial-of-service attack by preventing a false Endpoint or false | helps to | |||
prevent a denial-of-service attack by preventing a false endpoint or false | ||||
Media Distributor from successfully participating as a perceived valid media | Media Distributor from successfully participating as a perceived valid media | |||
sender that could otherwise carry out an on-path attack. When mutual | sender that could otherwise carry out an on-path attack. When mutual | |||
authentication fails, a receiving Endpoint would know that it could safely | authentication fails, a receiving endpoint would know that it could safely | |||
discard media packets received from the Endpoint without inspection.</t> | discard media packets received from the endpoint without inspection.</t> | |||
</section> | </section> | |||
<section anchor="media-distributor-attacks" numbered="true" toc="default"> | ||||
<section anchor="media-distributor-attacks" title="Media Distributor Attacks"> | <name>Media Distributor Attacks</name> | |||
<t>A malicious or compromised Media Distributor can attack the session in a | <t>A malicious or compromised Media Distributor can attack the session i | |||
number of possible ways.</t> | n a | |||
number of possible ways, as discussed below.</t> | ||||
<section anchor="denial-of-service" title="Denial of service"> | <section anchor="denial-of-service" numbered="true" toc="default"> | |||
<t>A simple form of attack is discarding received packets that should be | <name>Denial of Service</name> | |||
forwarded. This solution framework does not introduce any mitigation for | <t>A simple form of attack is discarding received packets that should | |||
Media Distributors that fail to forward media packets.</t> | be | |||
<t>Another form of attack is modifying received packets before forwarding. | forwarded. This solution framework does not provide any mitigation | |||
With this solution framework, any modification of the end-to-end | mechanisms for Media Distributors that fail to forward media packets.</t> | |||
authenticated data results in the receiving Endpoint getting an integrity | <t>Another form of attack is modifying received packets before forward | |||
failure when performing authentication on the received packet.</t> | ing. | |||
<t>The Media Distributor can also attempt to perform resource consumption | With this solution framework, any modification of the E2E-authenticated data | |||
attacks on the receiving Endpoint. One such attack would be to insert | results in the receiving endpoint getting an integrity failure when performing a | |||
random SSRC/CSRC values in any RTP packet along with a Full EKT Tag. | uthentication on the received packet.</t> | |||
Since such a message would trigger the receiver to form a new cryptographic | <t>The Media Distributor can also attempt to perform resource consumpt | |||
ion | ||||
attacks on the receiving endpoint. One such attack would be to insert | ||||
random SSRC/CSRC values in any RTP packet along with a Full EKT Tag. Since | ||||
such a message would trigger the receiver to form a new cryptographic | ||||
context, the Media Distributor can attempt to consume the receiving | context, the Media Distributor can attempt to consume the receiving | |||
Endpoint's resources. While E2E authentication would fail and the | endpoint's resources. While E2E authentication would fail and the | |||
cryptographic context would be destroyed, the key derivation operation | cryptographic context would be destroyed, the key derivation operation | |||
would nonetheless consume some computational resources. While resource | would nonetheless consume some computational resources. While resource | |||
consumption attacks cannot be mitigated entirely, rate-limiting packets | consumption attacks cannot be mitigated entirely, rate-limiting packets | |||
might help reduce the impact of such attacks.</t> | might help reduce the impact of such attacks.</t> | |||
</section> | </section> | |||
<section anchor="replay-attack" numbered="true" toc="default"> | ||||
<section anchor="replay-attack" title="Replay Attack"> | <name>Replay Attacks</name> | |||
<t>A replay attack is when an already received packet from a previous | <t>A replay attack is an attack where an already-received packet from | |||
point in the RTP stream is replayed as new packet. This could, for | a previous | |||
point in the RTP stream is replayed as a new packet. This could, for | ||||
example, allow a Media Distributor to transmit a sequence of packets | example, allow a Media Distributor to transmit a sequence of packets | |||
identified as a user saying "yes", instead of the "no" the u ser | identified as a user saying "yes", instead of the "no" the user | |||
actually said.</t> | actually said.</t> | |||
<t>A replay attack is mitigated by the requirement to implement | <t>A replay attack is mitigated by the requirement to implement | |||
replay protection as | replay protection as | |||
described in Section 3.3.2 of <xref target="RFC3711"></xref>. | described in <xref target="RFC3711" sectionFormat="of" section="3.3.2"/>. | |||
End-to-end replay protection MUST be provided for the | E2E replay protection <bcp14>MUST</bcp14> be provided for the | |||
duration of the conference.</t> | duration of the conference.</t> | |||
</section> | </section> | |||
<section anchor="delayed-playout-attack" numbered="true" toc="default"> | ||||
<section anchor="delayed-playout-attack" title="Delayed Playout Attack"> | <name>Delayed Playout Attacks</name> | |||
<t>A delayed playout attack is one where media is received and held by | <t>A delayed playout attack is an attack where media is received and h | |||
a Media Distributor and then forwarded to Endpoints at a later point | eld by | |||
a Media Distributor and then forwarded to endpoints at a later point | ||||
in time.</t> | in time.</t> | |||
<t>This attack is possible even if E2E replay protection is in place. | <t>This attack is possible even if E2E replay protection is in place. | |||
Because the Media Distributor is allowed to select a | Because the Media Distributor is allowed to select a | |||
subset of streams and not forward the rest to a receiver, such as in | subset of streams and not forward the rest to a receiver, such as in | |||
forwarding only the most active speakers, the receiver has to accept | forwarding only the most active speakers, the receiver has to accept | |||
gaps in the E2E packet sequence. The issue with this is that a Media | gaps in the E2E packet sequence. The problem here is that a Media | |||
Distributor can select to not deliver a particular stream for a while.</t> | Distributor can choose to not deliver a particular stream for a while.</t> | |||
<t>While the Media Distributor can purposely stop forwarding media flows, it | <t>While the Media Distributor can purposely stop forwarding media flo | |||
ws, it | ||||
can also select an arbitrary starting point to resume forwarding those | can also select an arbitrary starting point to resume forwarding those | |||
media flow, perhaps forwarding old packets rather than current packets. | media flows, perhaps forwarding old packets rather than current packets. | |||
As a consequence, what the media source sent can be substantially delayed | As a consequence, what the media source sent can be substantially delayed | |||
at the receiver with the receiver believing that newly arriving packets | at the receiver with the receiver believing that newly arriving packets | |||
are delayed only by transport delay when the packets may actually be | are delayed only by transport delay when the packets may actually be | |||
minutes or hours old.</t> | minutes or hours old.</t> | |||
<t>While this attack cannot be eliminated entirely, its effectiveness | <t>While this attack cannot be eliminated entirely, its effectiveness | |||
can be reduced by re-keying the conference periodically since | can be reduced by rekeying the conference periodically, since | |||
significantly-delayed media encrypted with expired keys would not be | significantly delayed media encrypted with expired keys would not be | |||
decrypted by Endpoints.</t> | decrypted by endpoints.</t> | |||
</section> | </section> | |||
<section anchor="splicing-attack" numbered="true" toc="default"> | ||||
<section anchor="splicing-attack" title="Splicing Attack"> | <name>Splicing Attacks</name> | |||
<t>A splicing attack is an attack where a Media Distributor receiving | <t>A splicing attack is an attack where a Media Distributor receiving | |||
multiple media sources splices one media stream into the other. If | multiple media sources splices one media stream into the other. If | |||
the Media Distributor were able to change the SSRC without the receiver | the Media Distributor were able to change the SSRC without the receiver | |||
having any method for verifying the original source ID, then the Media | having any method for verifying the original source ID, then the Media | |||
Distributor could first deliver stream A and then later forward stream | Distributor could first deliver stream A and then later forward stream | |||
B under the same SSRC as stream A was previously using. By including | B under the same SSRC that stream A was previously using. By including | |||
the SSRC in the integrity check for each packet, both HBH and E2E, PERC | the SSRC in the integrity check for each packet -- both HBH and E2E -- PERC | |||
prevents splicing attacks.</t> | prevents splicing attacks.</t> | |||
</section> | </section> | |||
<section anchor="rtcp-attacks" numbered="true" toc="default"> | ||||
<section anchor="rtcp-attacks" title="RTCP Attacks"> | <name>RTCP Attacks</name> | |||
<t>PERC does not provide end-to-end protection of RTCP messages. This allows | <t>PERC does not provide E2E protection of RTCP messages. This allows | |||
a compromised Media Distributor to impact any message that might be | a compromised Media Distributor to impact any message that might be | |||
transmitted via RTCP, including media statistics, picture requests, or loss | transmitted via RTCP, including media statistics, picture requests, or loss | |||
indication. It is also possible for a compromised Media Distributor to forge | indication. It is also possible for a compromised Media Distributor to forge | |||
requests, such as requests to the Endpoint to send a new picture. Such | requests, such as requests to the endpoint to send a new picture. Such | |||
requests can consume significant bandwidth and impair conference performance.</t > | requests can consume significant bandwidth and impair conference performance.</t > | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="key-distributor-attacks" numbered="true" toc="default"> | ||||
<section anchor="key-distributor-attacks" title="Key Distributor Attacks"> | <name>Key Distributor Attacks</name> | |||
<t>As stated in <xref target="key_distributor"></xref>, the Key Distributor need | <t>As stated in <xref target="key_distributor" format="default"/>, the K | |||
s to be secured | ey Distributor needs to be secured, | |||
since exploiting the Key Server can allow an adversary to gain access to | since exploiting the Key Server can allow an adversary to gain access to | |||
the keying material for one or more conferences. Having access to that | the keying material for one or more conferences. Having access to that | |||
keying material would then allow the adversary to decrypt media sent from | keying material would then allow the adversary to decrypt media sent from | |||
any Endpoint in the conference.</t> | any endpoint in the conference.</t> | |||
<t>As a first line of defense, the Key Distributor authenticates every | <t>As a first line of defense, the Key Distributor authenticates every | |||
security association, both associations with Endpoints and Media | security association -- associations with both endpoints and Media | |||
Distributors. The Key Distributor knows which entities are authorized to | Distributors. The Key Distributor knows which entities are authorized to | |||
have access to which keys and inspection of certificates will substantially | have access to which keys, and inspection of certificates will substantially | |||
reduce the risk of providing keys to an adversary.</t> | reduce the risk of providing keys to an adversary.</t> | |||
<t>Both physical and network access to the Key Distributor should be severely | <t>Both physical and network access to the Key Distributor should be sev erely | |||
restricted. This may be more difficult to achieve when the Key Distributor | restricted. This may be more difficult to achieve when the Key Distributor | |||
is embedded within and Endpoint, for example. Nonetheless, consideration | is embedded within, for example, an endpoint. Nonetheless, consideration | |||
should be given to shielding the Key Distributor from unauthorized access | should be given to shielding the Key Distributor from unauthorized access | |||
or any access that is not strictly necessary for the support of an | or any access that is not strictly necessary for the support of an | |||
ongoing conference.</t> | ongoing conference.</t> | |||
<t>Consideration should be given to whether access to the keying material | <t>Consideration should be given to whether access to the keying materia l | |||
will be needed beyond the conclusion of a conference. If not needed, | will be needed beyond the conclusion of a conference. If not needed, | |||
the Key Distributor's policy should be to destroy the keying material | the Key Distributor's policy should be to destroy the keying material | |||
once the conference concludes or when keying material changes during | once the conference concludes or when keying material changes during | |||
the course of the conference. If keying material is needed beyond the | the course of the conference. If keying material is needed beyond the | |||
lifetime of the conference, further consideration should be given to | lifetime of the conference, further consideration should be given to | |||
protecting keying material from future exposure. While it might be | protecting keying material from future exposure. While it might seem | |||
obvious, it is worth stating to avoid any doubt that if an adversary were | obvious, it is worth making this point, to avoid any doubt that if an adversary | |||
were | ||||
to record the media packets transmitted during a conference and then | to record the media packets transmitted during a conference and then | |||
gain unauthorized access to the keying material left unsecured on the | gain unauthorized access to the keying material left unsecured on the | |||
Key Distributor even years later, the adversary could decrypt the | Key Distributor even years later, the adversary could decrypt the | |||
content every packet transmitted during the conference.</t> | content of every packet transmitted during the conference.</t> | |||
</section> | </section> | |||
<section anchor="endpoint-attacks" numbered="true" toc="default"> | ||||
<section anchor="endpoint-attacks" title="Endpoint Attacks"> | <name>Endpoint Attacks</name> | |||
<t>A Trusted Endpoint is so named because conference confidentiality relies | <t>A Trusted Endpoint is so named because conference confidentiality rel | |||
heavily on the security and integrity of the Endpoint. If an adversary | ies | |||
successfully exploits a vulnerability in an Endpoint, it might be possible | heavily on the security and integrity of the endpoint. If an adversary | |||
successfully exploits a vulnerability in an endpoint, it might be possible | ||||
for the adversary to obtain all of the keying material used in the | for the adversary to obtain all of the keying material used in the | |||
conference. With that keying material, an adversary could decrypt any | conference. With that keying material, an adversary could decrypt any | |||
of the media flows received from any other Endpoint, either in real-time | of the media flows received from any other endpoint, either in real time | |||
or at a later point in time (assuming the adversary makes a copy of the | or at a later point in time (assuming that the adversary makes a copy of the | |||
media packets).</t> | media packets).</t> | |||
<t>Additionally, if an adversary successfully exploits an Endpoint, the | <t>Additionally, if an adversary successfully exploits an endpoint, the | |||
adversary could inject media into the conference. One way an adversary | adversary could inject media into the conference. For example, an adversary | |||
could do that is by manipulating the RTP or SRTP software to transmit | could manipulate the RTP or SRTP software to transmit | |||
whatever media the adversary wishes to send. This could involve | whatever media the adversary wishes to send. | |||
re-use of the Endpoint's SSRC, a new SSRC, or the SSRC value of an existing | This could involve the reuse of the compromised endpoint's SSRC or, | |||
endpoint. This is made possible since all conference participants share | since all conference participants share the same KEK, | |||
the same KEK. Only a single SRTP cipher suite defined provides source | the use of a new SSRC or the SSRC value of another endpoint. | |||
Only a single SRTP cipher suite defined provides source | ||||
authentication properties that allow an endpoint to cryptographically | authentication properties that allow an endpoint to cryptographically | |||
assert that it sent a particular E2E protected packet (namely, TESLA | assert that it sent a particular E2E-protected packet (namely, Timed Efficient | |||
<xref target="RFC4383"></xref>), and its usage is presently not defined for PERC | Stream Loss-Tolerant Authentication (TESLA) | |||
. The suite | <xref target="RFC4383" format="default"/>), and its usage is presently not | |||
defined in PERC only allows an Endpoint to determine that whoever sent a | defined for PERC. The suite | |||
defined in PERC only allows an endpoint to determine that whoever sent a | ||||
packet had received the KEK.</t> | packet had received the KEK.</t> | |||
<t>However, attacks on the endpoint are not limited to the PERC-specific | <t>However, attacks on the endpoint are not limited to the PERC-specific | |||
software within the Endpoint. An attacker could inject media or record | software within the endpoint. An attacker could inject media or record | |||
media by manipulating the software that sits between the PERC-enabled | media by manipulating the software that sits between the PERC-enabled | |||
application and the hardware microphone of video camera, for example. | application and the hardware microphone of a video camera, for example. | |||
Likewise, an attacker could potentially access confidential media by | Likewise, an attacker could potentially access confidential media by | |||
accessing memory, cache, disk storage, etc. if the endpoint is no secured.</t> | accessing memory, cache, disk storage, etc. if the endpoint is not secured.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="iana-considerations" numbered="true" toc="default"> | ||||
<name>IANA Considerations</name> | ||||
<t>This document has no IANA actions.</t> | ||||
</section> | ||||
</middle> | ||||
<back> | ||||
<section anchor="iana-considerations" title="IANA Considerations"> | <displayreference target="I-D.ietf-perc-dtls-tunnel" to="PERC-DTLS"/> | |||
<t>There are no IANA considerations for this document.</t> | <references> | |||
</section> | <name>References</name> | |||
<references> | ||||
<name>Normative References</name> | ||||
<!-- draft-ietf-perc-double (RFC 8723; Published) --> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8723. | ||||
xml"/> | ||||
<section anchor="acknowledgments" title="Acknowledgments"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3711. | |||
<t>The authors would like to thank Mo Zanaty, Christian Oien, and Richard Barnes | xml"/> | |||
for invaluable input on this document. Also, we would like to acknowledge | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3550. | |||
Nermeen Ismail for serving on the initial versions of this document as | xml"/> | |||
a co-author. We would also like to acknowledge John Mattsson, Mats Naslund, | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119. | |||
and Magnus Westerlund for providing some of the text in the document, | xml"/> | |||
including much of the original text in the security considerations section.</t> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174. | |||
</section> | xml"/> | |||
</middle> | <!-- draft-ietf-perc-srtp-ekt-diet (RFC 8870) --> | |||
<reference anchor="RFC8870" target="https://www.rfc-editor.org/info/rfc8870"> | ||||
<front> | ||||
<title>Encrypted Key Transport for DTLS and Secure RTP</title> | ||||
<author initials="C" surname="Jennings" fullname="Cullen Jennings"> | ||||
<organization>company</organization> | ||||
</author> | ||||
<author initials="J" surname="Mattsson" fullname="John Mattsson"> | ||||
<organization>company</organization> | ||||
</author> | ||||
<author initials="D" surname="McGrew" fullname="David A. McGrew"> | ||||
<organization>company</organization> | ||||
</author> | ||||
<author initials="D" surname="Wing" fullname="Dan Wing"> | ||||
<organization>company</organization> | ||||
</author> | ||||
<author initials="F" surname="Andreasen" fullname="Flemming Andreasen"> | ||||
<organization>company</organization> | ||||
</author> | ||||
<date month="January" year="2021"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8870"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8870"/> | ||||
</reference> | ||||
<back> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6904. | |||
<references title="Normative References"> | xml"/> | |||
<?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf | </references> | |||
-perc-double.xml"?> | <references> | |||
<?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3711.xml | <name>Informative References</name> | |||
"?> | ||||
<?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3550.xml | ||||
"?> | ||||
<?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml | ||||
"?> | ||||
<?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml | ||||
"?> | ||||
<?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf | ||||
-perc-srtp-ekt-diet.xml"?> | ||||
<?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6904.xml | ||||
"?> | ||||
</references> | ||||
<references title="Informative References"> | ||||
<?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml-w3c/reference.W3C.CR-w | <reference anchor="W3C.CR-webrtc" target="https://www.w3.org/TR/webrtc/"> | |||
ebrtc-20180927.xml"?> | <front> | |||
<?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5764.xml | <title>WebRTC 1.0: Real-time Communication Between Browsers</title> | |||
"?> | <author initials="C." surname="Jennings" fullname="Cullen Jennings"> | |||
<?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7667.xml | <organization/> | |||
"?> | </author> | |||
<?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4353.xml | <author initials="H." surname="Boström" fullname="Henrik Boström"> | |||
"?> | <organization/> | |||
</author> | ||||
<author initials="J-I." surname="Bruaroey" fullname="Jan-Ivar Bruaroey"> | ||||
<organization/> | ||||
</author> | ||||
<date/> | ||||
</front> | ||||
<refcontent>W3C Proposed Recommendation</refcontent> | ||||
</reference> | ||||
<?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3261.xml | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5764. | |||
"?> | xml"/> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7667. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4353. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3261. | ||||
xml"/> | ||||
<?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf | <!-- draft-ietf-perc-dtls-tunnel (Expired) --> | |||
-perc-dtls-tunnel.xml"?> | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D.ietf-pe | |||
<?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4566.xml | rc-dtls-tunnel.xml"/> | |||
"?> | ||||
<?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4383.xml | ||||
"?> | ||||
<?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6464.xml | ||||
"?> | ||||
<?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5763.xml | ||||
"?> | ||||
<?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4566. | |||
-rtcweb-security-arch.xml"?> | xml"/> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4383. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6464. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5763. | ||||
xml"/> | ||||
<?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8224.xml | <!-- draft-ietf-rtcweb-security-arch (RFC 8827) --> | |||
"?> | <reference anchor="RFC8827" target="https://www.rfc-editor.org/info/rfc8827"> | |||
</references> | <front> | |||
<title>WebRTC Security Architecture</title> | ||||
<author initials='E.' surname='Rescorla' fullname='Eric Rescorla'> | ||||
<organization/> | ||||
</author> | ||||
<date month='January' year='2021'/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8827"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8827"/> | ||||
</reference> | ||||
</back> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8224. | |||
xml"/> | ||||
</references> | ||||
</references> | ||||
<section anchor="acknowledgments" numbered="false" toc="default"> | ||||
<name>Acknowledgments</name> | ||||
<t>The authors would like to thank <contact fullname="Mo Zanaty"/>, | ||||
<contact fullname="Christian Oien"/>, and <contact fullname="Richard | ||||
Barnes"/> for invaluable input on this document. Also, we would like to | ||||
acknowledge <contact fullname="Nermeen Ismail"/> for serving on the | ||||
initial draft versions of this document as a coauthor. We would also | ||||
like to acknowledge <contact fullname="John Mattsson"/>, <contact | ||||
fullname="Mats Naslund"/>, and <contact fullname="Magnus Westerlund"/> | ||||
for providing some of the text in the document, including much of the | ||||
original text in the Security Considerations section (<xref | ||||
target="attacks"/>).</t> | ||||
</section> | ||||
</back> | ||||
</rfc> | </rfc> | |||
End of changes. 179 change blocks. | ||||
787 lines changed or deleted | 946 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/ |