rfc8827xml2.original.xml | rfc8827.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="US-ASCII"?> | <?xml version='1.0' encoding='utf-8'?> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" conse | |||
<!ENTITY RFC2119 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | nsus="true" docName="draft-ietf-rtcweb-security-arch-20" indexInclude="true" ipr | |||
.2119.xml"> | ="pre5378Trust200902" number="8827" prepTime="2021-01-16T18:38:47" scripts="Comm | |||
<!ENTITY RFC2818 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | on,Latin" sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="4" tocI | |||
.2818.xml"> | nclude="true" xml:lang="en"> | |||
<!ENTITY RFC3261 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <link href="https://datatracker.ietf.org/doc/draft-ietf-rtcweb-security-arch-2 | |||
.3261.xml"> | 0" rel="prev"/> | |||
<!ENTITY RFC3264 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <link href="https://dx.doi.org/10.17487/rfc8827" rel="alternate"/> | |||
.3264.xml"> | <link href="urn:issn:2070-1721" rel="alternate"/> | |||
<!ENTITY RFC3711 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.3711.xml"> | ||||
<!ENTITY RFC3986 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.3986.xml"> | ||||
<!ENTITY RFC4566 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.4566.xml"> | ||||
<!ENTITY RFC4568 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.4568.xml"> | ||||
<!ENTITY RFC4648 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.4648.xml"> | ||||
<!ENTITY RFC5246 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.5246.xml"> | ||||
<!ENTITY RFC5479 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.5479.xml"> | ||||
<!ENTITY RFC5705 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.5705.xml"> | ||||
<!ENTITY RFC5763 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.5763.xml"> | ||||
<!ENTITY RFC5764 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.5764.xml"> | ||||
<!ENTITY RFC5785 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.5785.xml"> | ||||
<!ENTITY RFC5890 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.5890.xml"> | ||||
<!ENTITY RFC6265 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.6265.xml"> | ||||
<!ENTITY RFC6347 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.6347.xml"> | ||||
<!ENTITY RFC6454 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.6454.xml"> | ||||
<!ENTITY RFC6455 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.6455.xml"> | ||||
<!ENTITY RFC6943 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.6943.xml"> | ||||
<!ENTITY RFC7022 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.7022.xml"> | ||||
<!ENTITY RFC6120 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.6120.xml"> | ||||
<!ENTITY RFC7617 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.7617.xml"> | ||||
<!ENTITY RFC7675 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.7675.xml"> | ||||
<!ENTITY RFC7918 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.7918.xml"> | ||||
<!ENTITY RFC8174 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.8174.xml"> | ||||
<!ENTITY RFC8122 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.8122.xml"> | ||||
<!ENTITY RFC8259 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.8259.xml"> | ||||
<!ENTITY RFC8261 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.8261.xml"> | ||||
<!ENTITY RFC8445 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.8445.xml"> | ||||
<!ENTITY I-D.ietf-rtcweb-overview SYSTEM "http://xml2rfc.ietf.org/public/rfc/bib | ||||
xml3/reference.I-D.ietf-rtcweb-overview.xml"> | ||||
<!ENTITY I-D.ietf-rtcweb-jsep SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml3 | ||||
/reference.I-D.ietf-rtcweb-jsep.xml"> | ||||
<!ENTITY I-D.ietf-rtcweb-security SYSTEM "http://xml2rfc.ietf.org/public/rfc/bib | ||||
xml3/reference.I-D.ietf-rtcweb-security.xml"> | ||||
<!ENTITY I-D.ietf-rtcweb-rtp-usage SYSTEM "http://xml2rfc.ietf.org/public/rfc/bi | ||||
bxml3/reference.I-D.ietf-rtcweb-rtp-usage.xml"> | ||||
<!ENTITY I-D.ietf-mmusic-sdp-uks SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibx | ||||
ml3/reference.I-D.ietf-mmusic-sdp-uks"> | ||||
]> | ||||
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> | ||||
<?rfc toc="yes" ?> | ||||
<?rfc symrefs="yes" ?> | ||||
<?rfc strict="yes" ?> | ||||
<?rfc compact="yes" ?> | ||||
<?rfc sortrefs="yes" ?> | ||||
<?rfc colonspace="yes" ?> | ||||
<?rfc rfcedstyle="no" ?> | ||||
<!-- Don't change this. It breaks stuff --> | ||||
<?rfc tocdepth="4"?> | ||||
<rfc category="std" docName="draft-ietf-rtcweb-security-arch-20" | ||||
ipr="pre5378Trust200902"> | ||||
<front> | <front> | |||
<title abbrev="WebRTC Sec. Arch.">WebRTC Security Architecture</title> | <title abbrev="WebRTC Sec. Arch.">WebRTC Security Architecture</title> | |||
<seriesInfo name="RFC" value="8827" stream="IETF"/> | ||||
<author fullname="Eric Rescorla" initials="E.K." surname="Rescorla"> | <author fullname="Eric Rescorla" initials="E." surname="Rescorla"> | |||
<organization>RTFM, Inc.</organization> | <organization showOnFrontPage="true">Mozilla</organization> | |||
<address> | <address> | |||
<postal> | ||||
<street>2064 Edgewood Drive</street> | ||||
<city>Palo Alto</city> | ||||
<region>CA</region> | ||||
<code>94303</code> | ||||
<country>USA</country> | ||||
</postal> | ||||
<phone>+1 650 678 2350</phone> | ||||
<email>ekr@rtfm.com</email> | <email>ekr@rtfm.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<date month="01" year="2021"/> | ||||
<date/> | <abstract pn="section-abstract"> | |||
<t indent="0" pn="section-abstract-1"> | ||||
<area>ART</area> | ||||
<workgroup>RTCWEB</workgroup> | ||||
<abstract> | ||||
<t> | ||||
This document defines the security architecture for WebRTC, a protocol | This document defines the security architecture for WebRTC, a protocol | |||
suite intended for use with real-time applications that can be deployed | suite intended for use with real-time applications that can be deployed | |||
in browsers - "real time communication on the Web". | in browsers -- "real-time communication on the Web". | |||
</t> | </t> | |||
</abstract> | </abstract> | |||
<boilerplate> | ||||
<section anchor="status-of-memo" numbered="false" removeInRFC="false" toc= | ||||
"exclude" pn="section-boilerplate.1"> | ||||
<name slugifiedName="name-status-of-this-memo">Status of This Memo</name | ||||
> | ||||
<t indent="0" pn="section-boilerplate.1-1"> | ||||
This is an Internet Standards Track document. | ||||
</t> | ||||
<t indent="0" pn="section-boilerplate.1-2"> | ||||
This document is a product of the Internet Engineering Task Force | ||||
(IETF). It represents the consensus of the IETF community. It has | ||||
received public review and has been approved for publication by | ||||
the Internet Engineering Steering Group (IESG). Further | ||||
information on Internet Standards is available in Section 2 of | ||||
RFC 7841. | ||||
</t> | ||||
<t indent="0" pn="section-boilerplate.1-3"> | ||||
Information about the current status of this document, any | ||||
errata, and how to provide feedback on it may be obtained at | ||||
<eref target="https://www.rfc-editor.org/info/rfc8827" brackets="non | ||||
e"/>. | ||||
</t> | ||||
</section> | ||||
<section anchor="copyright" numbered="false" removeInRFC="false" toc="excl | ||||
ude" pn="section-boilerplate.2"> | ||||
<name slugifiedName="name-copyright-notice">Copyright Notice</name> | ||||
<t indent="0" pn="section-boilerplate.2-1"> | ||||
Copyright (c) 2021 IETF Trust and the persons identified as the | ||||
document authors. All rights reserved. | ||||
</t> | ||||
<t indent="0" pn="section-boilerplate.2-2"> | ||||
This document is subject to BCP 78 and the IETF Trust's Legal | ||||
Provisions Relating to IETF Documents | ||||
(<eref target="https://trustee.ietf.org/license-info" brackets="none | ||||
"/>) in effect on the date of | ||||
publication of this document. Please review these documents | ||||
carefully, as they describe your rights and restrictions with | ||||
respect to this document. Code Components extracted from this | ||||
document must include Simplified BSD License text as described in | ||||
Section 4.e of the Trust Legal Provisions and are provided without | ||||
warranty as described in the Simplified BSD License. | ||||
</t> | ||||
<t indent="0" pn="section-boilerplate.2-3"> | ||||
This document may contain material from IETF Documents or IETF | ||||
Contributions published or made publicly available before November | ||||
10, 2008. The person(s) controlling the copyright in some of this | ||||
material may not have granted the IETF Trust the right to allow | ||||
modifications of such material outside the IETF Standards Process. | ||||
Without obtaining an adequate license from the person(s) | ||||
controlling the copyright in such materials, this document may not | ||||
be modified outside the IETF Standards Process, and derivative | ||||
works of it may not be created outside the IETF Standards Process, | ||||
except to format it for publication as an RFC or to translate it | ||||
into languages other than English. | ||||
</t> | ||||
</section> | ||||
</boilerplate> | ||||
<toc> | ||||
<section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" p | ||||
n="section-toc.1"> | ||||
<name slugifiedName="name-table-of-contents">Table of Contents</name> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="section-to | ||||
c.1-1"> | ||||
<li pn="section-toc.1-1.1"> | ||||
<t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref der | ||||
ivedContent="1" format="counter" sectionFormat="of" target="section-1"/>. <xref | ||||
derivedContent="" format="title" sectionFormat="of" target="name-introduction"> | ||||
Introduction</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.2"> | ||||
<t indent="0" keepWithNext="true" pn="section-toc.1-1.2.1"><xref der | ||||
ivedContent="2" format="counter" sectionFormat="of" target="section-2"/>. <xref | ||||
derivedContent="" format="title" sectionFormat="of" target="name-terminology">T | ||||
erminology</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.3"> | ||||
<t indent="0" pn="section-toc.1-1.3.1"><xref derivedContent="3" form | ||||
at="counter" sectionFormat="of" target="section-3"/>. <xref derivedContent="" f | ||||
ormat="title" sectionFormat="of" target="name-trust-model">Trust Model</xref></t | ||||
> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.3.2"> | ||||
<li pn="section-toc.1-1.3.2.1"> | ||||
<t indent="0" keepWithNext="true" pn="section-toc.1-1.3.2.1.1">< | ||||
xref derivedContent="3.1" format="counter" sectionFormat="of" target="section-3. | ||||
1"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-au | ||||
thenticated-entities">Authenticated Entities</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.3.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.3.2.2.1"><xref derivedContent= | ||||
"3.2" format="counter" sectionFormat="of" target="section-3.2"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-unauthenticated-entiti | ||||
es">Unauthenticated Entities</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.4"> | ||||
<t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" form | ||||
at="counter" sectionFormat="of" target="section-4"/>. <xref derivedContent="" f | ||||
ormat="title" sectionFormat="of" target="name-overview">Overview</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.4.2"> | ||||
<li pn="section-toc.1-1.4.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.4.2.1.1"><xref derivedContent= | ||||
"4.1" format="counter" sectionFormat="of" target="section-4.1"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-initial-signaling">Ini | ||||
tial Signaling</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.4.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.4.2.2.1"><xref derivedContent= | ||||
"4.2" format="counter" sectionFormat="of" target="section-4.2"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-media-consent-verifica | ||||
tion">Media Consent Verification</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.4.2.3"> | ||||
<t indent="0" pn="section-toc.1-1.4.2.3.1"><xref derivedContent= | ||||
"4.3" format="counter" sectionFormat="of" target="section-4.3"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-dtls-handshake">DTLS H | ||||
andshake</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.4.2.4"> | ||||
<t indent="0" pn="section-toc.1-1.4.2.4.1"><xref derivedContent= | ||||
"4.4" format="counter" sectionFormat="of" target="section-4.4"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-communications-and-con | ||||
sent-">Communications and Consent Freshness</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.5"> | ||||
<t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" form | ||||
at="counter" sectionFormat="of" target="section-5"/>. <xref derivedContent="" f | ||||
ormat="title" sectionFormat="of" target="name-sdp-identity-attribute">SDP Identi | ||||
ty Attribute</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.5.2"> | ||||
<li pn="section-toc.1-1.5.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.1.1"><xref derivedContent= | ||||
"5.1" format="counter" sectionFormat="of" target="section-5.1"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-offer-answer-considera | ||||
tions">Offer/Answer Considerations</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se | ||||
ction-toc.1-1.5.2.1.2"> | ||||
<li pn="section-toc.1-1.5.2.1.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.1.2.1.1"><xref derived | ||||
Content="5.1.1" format="counter" sectionFormat="of" target="section-5.1.1"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-generating | ||||
-the-initial-sdp-">Generating the Initial SDP Offer</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.5.2.1.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.1.2.2.1"><xref derived | ||||
Content="5.1.2" format="counter" sectionFormat="of" target="section-5.1.2"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-generating | ||||
-an-sdp-answer">Generating an SDP Answer</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.5.2.1.2.3"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.1.2.3.1"><xref derived | ||||
Content="5.1.3" format="counter" sectionFormat="of" target="section-5.1.3"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-processing | ||||
-an-sdp-offer-or-">Processing an SDP Offer or Answer</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.5.2.1.2.4"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.1.2.4.1"><xref derived | ||||
Content="5.1.4" format="counter" sectionFormat="of" target="section-5.1.4"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-modifying- | ||||
the-session">Modifying the Session</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.6"> | ||||
<t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" form | ||||
at="counter" sectionFormat="of" target="section-6"/>. <xref derivedContent="" f | ||||
ormat="title" sectionFormat="of" target="name-detailed-technical-descript">Detai | ||||
led Technical Description</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.6.2"> | ||||
<li pn="section-toc.1-1.6.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.6.2.1.1"><xref derivedContent= | ||||
"6.1" format="counter" sectionFormat="of" target="section-6.1"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-origin-and-web-securit | ||||
y-iss">Origin and Web Security Issues</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.6.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.6.2.2.1"><xref derivedContent= | ||||
"6.2" format="counter" sectionFormat="of" target="section-6.2"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-device-permissions-mod | ||||
el">Device Permissions Model</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.6.2.3"> | ||||
<t indent="0" pn="section-toc.1-1.6.2.3.1"><xref derivedContent= | ||||
"6.3" format="counter" sectionFormat="of" target="section-6.3"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-communications-consent | ||||
">Communications Consent</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.6.2.4"> | ||||
<t indent="0" pn="section-toc.1-1.6.2.4.1"><xref derivedContent= | ||||
"6.4" format="counter" sectionFormat="of" target="section-6.4"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-ip-location-privacy">I | ||||
P Location Privacy</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.6.2.5"> | ||||
<t indent="0" pn="section-toc.1-1.6.2.5.1"><xref derivedContent= | ||||
"6.5" format="counter" sectionFormat="of" target="section-6.5"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-communications-securit | ||||
y">Communications Security</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.7"> | ||||
<t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" form | ||||
at="counter" sectionFormat="of" target="section-7"/>. <xref derivedContent="" f | ||||
ormat="title" sectionFormat="of" target="name-web-based-peer-authenticati">Web-B | ||||
ased Peer Authentication</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.7.2"> | ||||
<li pn="section-toc.1-1.7.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.7.2.1.1"><xref derivedContent= | ||||
"7.1" format="counter" sectionFormat="of" target="section-7.1"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-trust-relationships-id | ||||
ps-ap">Trust Relationships: IdPs, APs, and RPs</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.7.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.7.2.2.1"><xref derivedContent= | ||||
"7.2" format="counter" sectionFormat="of" target="section-7.2"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-overview-of-operation" | ||||
>Overview of Operation</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.7.2.3"> | ||||
<t indent="0" pn="section-toc.1-1.7.2.3.1"><xref derivedContent= | ||||
"7.3" format="counter" sectionFormat="of" target="section-7.3"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-items-for-standardizat | ||||
ion">Items for Standardization</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.7.2.4"> | ||||
<t indent="0" pn="section-toc.1-1.7.2.4.1"><xref derivedContent= | ||||
"7.4" format="counter" sectionFormat="of" target="section-7.4"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-binding-identity-asser | ||||
tions">Binding Identity Assertions to JSEP Offer/Answer Transactions</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se | ||||
ction-toc.1-1.7.2.4.2"> | ||||
<li pn="section-toc.1-1.7.2.4.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.7.2.4.2.1.1"><xref derived | ||||
Content="7.4.1" format="counter" sectionFormat="of" target="section-7.4.1"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-carrying-i | ||||
dentity-assertion">Carrying Identity Assertions</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.7.2.5"> | ||||
<t indent="0" pn="section-toc.1-1.7.2.5.1"><xref derivedContent= | ||||
"7.5" format="counter" sectionFormat="of" target="section-7.5"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-determining-the-idp-ur | ||||
i">Determining the IdP URI</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se | ||||
ction-toc.1-1.7.2.5.2"> | ||||
<li pn="section-toc.1-1.7.2.5.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.7.2.5.2.1.1"><xref derived | ||||
Content="7.5.1" format="counter" sectionFormat="of" target="section-7.5.1"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-authentica | ||||
ting-party">Authenticating Party</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.7.2.5.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.7.2.5.2.2.1"><xref derived | ||||
Content="7.5.2" format="counter" sectionFormat="of" target="section-7.5.2"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-relying-pa | ||||
rty">Relying Party</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.7.2.6"> | ||||
<t indent="0" pn="section-toc.1-1.7.2.6.1"><xref derivedContent= | ||||
"7.6" format="counter" sectionFormat="of" target="section-7.6"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-requesting-assertions" | ||||
>Requesting Assertions</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.7.2.7"> | ||||
<t indent="0" pn="section-toc.1-1.7.2.7.1"><xref derivedContent= | ||||
"7.7" format="counter" sectionFormat="of" target="section-7.7"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-managing-user-login">M | ||||
anaging User Login</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.8"> | ||||
<t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="8" form | ||||
at="counter" sectionFormat="of" target="section-8"/>. <xref derivedContent="" f | ||||
ormat="title" sectionFormat="of" target="name-verifying-assertions">Verifying As | ||||
sertions</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.8.2"> | ||||
<li pn="section-toc.1-1.8.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.8.2.1.1"><xref derivedContent= | ||||
"8.1" format="counter" sectionFormat="of" target="section-8.1"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-identity-formats">Iden | ||||
tity Formats</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.9"> | ||||
<t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="9" form | ||||
at="counter" sectionFormat="of" target="section-9"/>. <xref derivedContent="" f | ||||
ormat="title" sectionFormat="of" target="name-security-considerations">Security | ||||
Considerations</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.9.2"> | ||||
<li pn="section-toc.1-1.9.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.9.2.1.1"><xref derivedContent= | ||||
"9.1" format="counter" sectionFormat="of" target="section-9.1"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-communications-securit | ||||
y-2">Communications Security</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.9.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.9.2.2.1"><xref derivedContent= | ||||
"9.2" format="counter" sectionFormat="of" target="section-9.2"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-privacy">Privacy</xref | ||||
></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.9.2.3"> | ||||
<t indent="0" pn="section-toc.1-1.9.2.3.1"><xref derivedContent= | ||||
"9.3" format="counter" sectionFormat="of" target="section-9.3"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-denial-of-service">Den | ||||
ial of Service</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.9.2.4"> | ||||
<t indent="0" pn="section-toc.1-1.9.2.4.1"><xref derivedContent= | ||||
"9.4" format="counter" sectionFormat="of" target="section-9.4"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-idp-authentication-mec | ||||
hanis">IdP Authentication Mechanism</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se | ||||
ction-toc.1-1.9.2.4.2"> | ||||
<li pn="section-toc.1-1.9.2.4.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.9.2.4.2.1.1"><xref derived | ||||
Content="9.4.1" format="counter" sectionFormat="of" target="section-9.4.1"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-peerconnec | ||||
tion-origin-check">PeerConnection Origin Check</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.9.2.4.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.9.2.4.2.2.1"><xref derived | ||||
Content="9.4.2" format="counter" sectionFormat="of" target="section-9.4.2"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-idp-well-k | ||||
nown-uri">IdP Well-Known URI</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.9.2.4.2.3"> | ||||
<t indent="0" pn="section-toc.1-1.9.2.4.2.3.1"><xref derived | ||||
Content="9.4.3" format="counter" sectionFormat="of" target="section-9.4.3"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-privacy-of | ||||
-idp-generated-id">Privacy of IdP-Generated Identities and the Hosting Site</xre | ||||
f></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.9.2.4.2.4"> | ||||
<t indent="0" pn="section-toc.1-1.9.2.4.2.4.1"><xref derived | ||||
Content="9.4.4" format="counter" sectionFormat="of" target="section-9.4.4"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-security-o | ||||
f-third-party-idp">Security of Third-Party IdPs</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn | ||||
="section-toc.1-1.9.2.4.2.4.2"> | ||||
<li pn="section-toc.1-1.9.2.4.2.4.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.9.2.4.2.4.2.1.1"><xref | ||||
derivedContent="9.4.4.1" format="counter" sectionFormat="of" target="section-9. | ||||
4.4.1"/>. <xref derivedContent="" format="title" sectionFormat="of" target="nam | ||||
e-confusable-characters">Confusable Characters</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.9.2.4.2.5"> | ||||
<t indent="0" pn="section-toc.1-1.9.2.4.2.5.1"><xref derived | ||||
Content="9.4.5" format="counter" sectionFormat="of" target="section-9.4.5"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-web-securi | ||||
ty-feature-intera">Web Security Feature Interactions</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn | ||||
="section-toc.1-1.9.2.4.2.5.2"> | ||||
<li pn="section-toc.1-1.9.2.4.2.5.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.9.2.4.2.5.2.1.1"><xref | ||||
derivedContent="9.4.5.1" format="counter" sectionFormat="of" target="section-9. | ||||
4.5.1"/>. <xref derivedContent="" format="title" sectionFormat="of" target="nam | ||||
e-popup-blocking">Popup Blocking</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.9.2.4.2.5.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.9.2.4.2.5.2.2.1"><xref | ||||
derivedContent="9.4.5.2" format="counter" sectionFormat="of" target="section-9. | ||||
4.5.2"/>. <xref derivedContent="" format="title" sectionFormat="of" target="nam | ||||
e-third-party-cookies">Third Party Cookies</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.10"> | ||||
<t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="10" fo | ||||
rmat="counter" sectionFormat="of" target="section-10"/>. <xref derivedContent="" | ||||
format="title" sectionFormat="of" target="name-iana-considerations">IANA Consid | ||||
erations</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.11"> | ||||
<t indent="0" pn="section-toc.1-1.11.1"><xref derivedContent="11" fo | ||||
rmat="counter" sectionFormat="of" target="section-11"/>. <xref derivedContent="" | ||||
format="title" sectionFormat="of" target="name-references">References</xref></t | ||||
> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.11.2"> | ||||
<li pn="section-toc.1-1.11.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.11.2.1.1"><xref derivedContent | ||||
="11.1" format="counter" sectionFormat="of" target="section-11.1"/>. <xref deri | ||||
vedContent="" format="title" sectionFormat="of" target="name-normative-reference | ||||
s">Normative References</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.11.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.11.2.2.1"><xref derivedContent | ||||
="11.2" format="counter" sectionFormat="of" target="section-11.2"/>. <xref deri | ||||
vedContent="" format="title" sectionFormat="of" target="name-informative-referen | ||||
ces">Informative References</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.12"> | ||||
<t indent="0" pn="section-toc.1-1.12.1"><xref derivedContent="" form | ||||
at="none" sectionFormat="of" target="section-appendix.a"/><xref derivedContent=" | ||||
" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgeme | ||||
nts</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.13"> | ||||
<t indent="0" pn="section-toc.1-1.13.1"><xref derivedContent="" form | ||||
at="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent=" | ||||
" format="title" sectionFormat="of" target="name-authors-address">Author's Addre | ||||
ss</xref></t> | ||||
</li> | ||||
</ul> | ||||
</section> | ||||
</toc> | ||||
</front> | </front> | |||
<middle> | <middle> | |||
<section anchor="sec.introduction" numbered="true" toc="include" removeInRFC | ||||
<section title="Introduction" anchor="sec.introduction"> | ="false" pn="section-1"> | |||
<t> | <name slugifiedName="name-introduction">Introduction</name> | |||
The Real-Time Communications on the Web (RTCWEB) working group | <t indent="0" pn="section-1-1"> | |||
The Real-Time Communications on the Web (RTCWEB) Working Group | ||||
standardized protocols for real-time communications between Web | standardized protocols for real-time communications between Web | |||
browsers, generally called "WebRTC" <xref target="I-D.ietf-rtcweb-overvi ew"/>. | browsers, generally called "WebRTC" <xref target="RFC8825" format="defau lt" sectionFormat="of" derivedContent="RFC8825"/>. | |||
The major use cases for WebRTC technology are real-time audio | The major use cases for WebRTC technology are real-time audio | |||
and/or video calls, Web conferencing, and direct data transfer. Unlike | and/or video calls, Web conferencing, and direct data transfer. Unlike | |||
most conventional real-time systems, (e.g., SIP-based <xref | most conventional real-time systems (e.g., SIP-based <xref target="RFC32 | |||
target="RFC3261"></xref> soft phones) WebRTC communications are directly | 61" format="default" sectionFormat="of" derivedContent="RFC3261"/> soft phones), | |||
WebRTC communications are directly | ||||
controlled by some Web server, via a JavaScript (JS) API as shown in | controlled by some Web server, via a JavaScript (JS) API as shown in | |||
<xref target="fig.simple"/>. | <xref target="fig.simple" format="default" sectionFormat="of" derivedCon tent="Figure 1"/>. | |||
</t> | </t> | |||
<figure title="A simple WebRTC system" anchor="fig.simple"> | <figure anchor="fig.simple" align="left" suppress-title="false" pn="figure | |||
<artwork><![CDATA[ | -1"> | |||
+----------------+ | <name slugifiedName="name-a-simple-webrtc-system">A Simple WebRTC System | |||
| | | </name> | |||
| Web Server | | <artwork name="" type="" align="left" alt="" pn="section-1-2.1"> | |||
| | | +----------------+ | |||
+----------------+ | | | | |||
^ ^ | | Web Server | | |||
/ \ | | | | |||
HTTP / \ HTTP | +----------------+ | |||
/ \ | ^ ^ | |||
/ \ | / \ | |||
v v | HTTP / \ HTTP | |||
JS API JS API | / \ | |||
+-----------+ +-----------+ | / \ | |||
| | Media | | | v v | |||
| Browser |<---------->| Browser | | JS API JS API | |||
| | | | | +-----------+ +-----------+ | |||
+-----------+ +-----------+ | | | Media | | | |||
]]></artwork> | | Browser |<---------->| Browser | | |||
| | | | | ||||
+-----------+ +-----------+ </artwork> | ||||
</figure> | </figure> | |||
<t> | <t indent="0" pn="section-1-3"> | |||
A more complicated system might allow for interdomain calling, as shown | A more complicated system might allow for inter-domain calling, as shown | |||
in <xref target="fig.multidomain"/>. The protocol to be used between | in <xref target="fig.multidomain" format="default" sectionFormat="of" de | |||
rivedContent="Figure 2"/>. The protocol to be used between | ||||
the domains is not standardized by WebRTC, but given the installed base | the domains is not standardized by WebRTC, but given the installed base | |||
and the form of the WebRTC API is likely to be something SDP-based like | and the form of the WebRTC API is likely to be something SDP-based like | |||
SIP or something like Extensible Messaging and Presence Protocol (XMPP) | SIP or something like the Extensible Messaging and Presence Protocol (XM | |||
<xref target="RFC6120"/>. | PP) | |||
<xref target="RFC6120" format="default" sectionFormat="of" derivedConten | ||||
t="RFC6120"/>. | ||||
</t> | </t> | |||
<figure title="A multidomain WebRTC system" anchor="fig.multidomain"> | <figure anchor="fig.multidomain" align="left" suppress-title="false" pn="f | |||
<artwork><![CDATA[ | igure-2"> | |||
+--------------+ +--------------+ | <name slugifiedName="name-a-multidomain-webrtc-system">A Multidomain Web | |||
| | SIP,XMPP,...| | | RTC System</name> | |||
| Web Server |<----------->| Web Server | | <artwork name="" type="" align="left" alt="" pn="section-1-4.1"> | |||
| | | | | +--------------+ +--------------+ | |||
+--------------+ +--------------+ | | | SIP, XMPP, ... | | | |||
^ ^ | | Web Server |<-------------->| Web Server | | |||
| | | | | | | | |||
HTTP | | HTTP | +--------------+ +--------------+ | |||
| | | ^ ^ | |||
v v | | | | |||
JS API JS API | HTTP | | HTTP | |||
+-----------+ +-----------+ | | | | |||
| | Media | | | v v | |||
| Browser |<---------------->| Browser | | JS API JS API | |||
| | | | | +-----------+ +-----------+ | |||
+-----------+ +-----------+ | | | Media | | | |||
]]></artwork> | | Browser |<------------------->| Browser | | |||
| | | | | ||||
+-----------+ +-----------+ </artwork> | ||||
</figure> | </figure> | |||
<t indent="0" pn="section-1-5"> | ||||
<t> | ||||
This system presents a number of new security challenges, which are | This system presents a number of new security challenges, which are | |||
analyzed in <xref target="I-D.ietf-rtcweb-security"/>. This document | analyzed in <xref target="RFC8826" format="default" sectionFormat="of" d erivedContent="RFC8826"/>. This document | |||
describes a security architecture for WebRTC which addresses the threats | describes a security architecture for WebRTC which addresses the threats | |||
and requirements described in that document. | and requirements described in that document. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="sec-term" numbered="true" toc="include" removeInRFC="false" | ||||
<section anchor="sec-term" title="Terminology"> | pn="section-2"> | |||
<t> | <name slugifiedName="name-terminology">Terminology</name> | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL | <t indent="0" pn="section-2-1">The key words "<bcp14>MUST</bcp14>", "<bcp1 | |||
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", | 4>MUST NOT</bcp14>", | |||
"MAY", and "OPTIONAL" in this document are to be interpreted as | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", | |||
described in BCP 14 <xref target="RFC2119"/> | "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", | |||
<xref target="RFC8174"/> when, and only when, they | "<bcp14>SHOULD NOT</bcp14>", | |||
appear in all capitals, as shown here. | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
</t> | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are | |||
to be interpreted as described in BCP 14 <xref target="RFC2119" format="defa | ||||
ult" sectionFormat="of" derivedContent="RFC2119"/> | ||||
<xref target="RFC8174" format="default" sectionFormat="of" derivedConten | ||||
t="RFC8174"/> when, and only when, they appear in all capitals, | ||||
as shown here.</t> | ||||
</section> | </section> | |||
<section anchor="sec.proposal.trusthierarchy" numbered="true" toc="include" | ||||
<section title="Trust Model" anchor="sec.proposal.trusthierarchy"> | removeInRFC="false" pn="section-3"> | |||
<t> | <name slugifiedName="name-trust-model">Trust Model</name> | |||
<t indent="0" pn="section-3-1"> | ||||
The basic assumption of this architecture is that network resources | The basic assumption of this architecture is that network resources | |||
exist in a hierarchy of trust, rooted in the browser, which serves as | exist in a hierarchy of trust, rooted in the browser, which serves as | |||
the user's Trusted Computing Base (TCB). Any security property which the | the user's Trusted Computing Base (TCB). Any security property which the | |||
user wishes to have enforced must be ultimately guaranteed by the | user wishes to have enforced must be ultimately guaranteed by the | |||
browser (or transitively by some property the browser | browser (or transitively by some property the browser | |||
verifies). Conversely, if the browser is compromised, then no security | verifies). Conversely, if the browser is compromised, then no security | |||
guarantees are possible. Note that there are cases (e.g., Internet | guarantees are possible. Note that there are cases (e.g., Internet | |||
kiosks) where the user can't really trust the browser that much. In | kiosks) where the user can't really trust the browser that much. In | |||
these cases, the level of security provided is limited by how much they | these cases, the level of security provided is limited by how much they | |||
trust the browser. | trust the browser. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-3-2"> | |||
Optimally, we would not rely on trust in any entities other than the | Optimally, we would not rely on trust in any entities other than the | |||
browser. However, this is unfortunately not possible if we wish to have | browser. However, this is unfortunately not possible if we wish to have | |||
a functional system. Other network elements fall into two categories: | a functional system. Other network elements fall into two categories: | |||
those which can be authenticated by the browser and thus can be granted | those which can be authenticated by the browser and thus can be granted | |||
permissions to access sensitive resources, and those which cannot be | permissions to access sensitive resources, and those which cannot be | |||
authenticated and thus are untrusted. | authenticated and thus are untrusted. | |||
</t> | </t> | |||
<section anchor="sec.proposal.authenticated" numbered="true" toc="include" | ||||
<section title="Authenticated Entities" anchor="sec.proposal.authenticated | removeInRFC="false" pn="section-3.1"> | |||
"> | <name slugifiedName="name-authenticated-entities">Authenticated Entities | |||
<t> | </name> | |||
<t indent="0" pn="section-3.1-1"> | ||||
There are two major classes of authenticated entities in the system: | There are two major classes of authenticated entities in the system: | |||
</t> | </t> | |||
<t> | <dl newline="false" spacing="normal" indent="3" pn="section-3.1-2"> | |||
<list style="symbols"> | <dt pn="section-3.1-2.1">Calling services:</dt> | |||
<t> | <dd pn="section-3.1-2.2">Web sites whose origin we can verify (optimal | |||
Calling services: Web sites whose origin we can verify (optimally | ly | |||
via HTTPS, but in some cases because we are on a topologically | via HTTPS, but in some cases because we are on a topologically | |||
restricted network, such as behind a firewall, and can infer | restricted network, such as behind a firewall, and can infer | |||
authentication from firewall behavior). | authentication from firewall behavior).</dd> | |||
</t> | <dt pn="section-3.1-2.3">Other users:</dt> | |||
<t> | <dd pn="section-3.1-2.4">WebRTC peers whose origin we can verify | |||
Other users: WebRTC peers whose origin we can verify | cryptographically (optimally via DTLS-SRTP).</dd> | |||
cryptographically (optimally via DTLS-SRTP). | </dl> | |||
</t> | <t indent="0" pn="section-3.1-3"> | |||
</list> | ||||
</t> | ||||
<t> | ||||
Note that merely being authenticated does not make these entities | Note that merely being authenticated does not make these entities | |||
trusted. For instance, just because we can verify that | trusted. For instance, just because we can verify that | |||
https://www.example.org/ is owned by Dr. Evil does not mean that we ca n | <https://www.example.org/> is owned by Dr. Evil does not mean th at we can | |||
trust Dr. Evil to access our camera and microphone. However, it gives | trust Dr. Evil to access our camera and microphone. However, it gives | |||
the user an opportunity to determine whether he wishes to trust | the user an opportunity to determine whether they wish to trust | |||
Dr. Evil or not; after all, if he desires to contact Dr. Evil (perhaps | Dr. Evil or not; after all, if they desire to contact Dr. Evil (perhap | |||
to arrange for ransom payment), it's safe to temporarily give him | s | |||
to arrange for ransom payment), it's safe to temporarily give them | ||||
access to the camera and microphone for the purpose of the call, but | access to the camera and microphone for the purpose of the call, but | |||
he doesn't want Dr. Evil to be able to access his camera and | they don't want Dr. Evil to be able to access their camera and | |||
microphone other than during the call. The point here is that we must | microphone other than during the call. The point here is that we must | |||
first identify other elements before we can determine whether and how | first identify other elements before we can determine whether and how | |||
much to trust them. Additionally, sometimes we need to identify the | much to trust them. Additionally, sometimes we need to identify the | |||
communicating peer before we know what policies to apply. | communicating peer before we know what policies to apply. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="sec.proposal.unauthenticated" numbered="true" toc="includ | ||||
<section title="Unauthenticated Entities" anchor="sec.proposal.unauthentic | e" removeInRFC="false" pn="section-3.2"> | |||
ated"> | <name slugifiedName="name-unauthenticated-entities">Unauthenticated Enti | |||
<t> | ties</name> | |||
<t indent="0" pn="section-3.2-1"> | ||||
Other than the above entities, we are not generally able to identify | Other than the above entities, we are not generally able to identify | |||
other network elements, thus we cannot trust them. This does not mean | other network elements; thus, we cannot trust them. This does not mea n | |||
that it is not possible to have any interaction with them, but it | that it is not possible to have any interaction with them, but it | |||
means that we must assume that they will behave maliciously and design | means that we must assume that they will behave maliciously and design | |||
a system which is secure even if they do so. | a system which is secure even if they do so. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
<!-- Not layered ? --> | <section anchor="sec.proposal.overview" numbered="true" toc="include" remove | |||
InRFC="false" pn="section-4"> | ||||
<section title="Overview" anchor="sec.proposal.overview"> | <name slugifiedName="name-overview">Overview</name> | |||
<!-- TODO: Federated --> | <t indent="0" pn="section-4-1"> | |||
<t> | ||||
This section describes a typical WebRTC session and shows how the | This section describes a typical WebRTC session and shows how the | |||
various security elements interact and what guarantees are provided to | various security elements interact and what guarantees are provided to | |||
the user. The example in this section is a "best case" scenario in which | the user. The example in this section is a "best case" scenario in which | |||
we provide the maximal amount of user authentication and media privacy | we provide the maximal amount of user authentication and media privacy | |||
with the minimal level of trust in the calling service. Simpler versions | with the minimal level of trust in the calling service. Simpler versions | |||
with lower levels of security are also possible and are noted in the | with lower levels of security are also possible and are noted in the | |||
text where applicable. It's also important to recognize the tension | text where applicable. It's also important to recognize the tension | |||
between security (or performance) and privacy. The example shown here is | between security (or performance) and privacy. The example shown here is | |||
aimed towards settings where we are more concerned about secure calling | aimed towards settings where we are more concerned about secure calling | |||
than about privacy, but as we shall see, there are settings where one | than about privacy, but as we shall see, there are settings where one | |||
might wish to make different tradeoffs--this architecture is still | might wish to make different tradeoffs -- this architecture is still | |||
compatible with those settings. | compatible with those settings. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-4-2"> | |||
For the purposes of this example, we assume the topology shown in the | For the purposes of this example, we assume the topology shown in the | |||
figures below. This topology is derived from the topology shown in <xref | figures below. This topology is derived from the topology shown in <xref | |||
target="fig.simple"/>, but separates Alice and Bob's identities from the | target="fig.simple" format="default" sectionFormat="of" derivedContent="Figure | |||
1"/>, but separates Alice's and Bob's identities from the | ||||
process of signaling. Specifically, Alice and Bob have relationships | process of signaling. Specifically, Alice and Bob have relationships | |||
with some Identity Provider (IdP) that supports a protocol (such as | with some Identity Provider (IdP) that supports a protocol (such as | |||
OpenID Connect) that can be used to demonstrate their identity to | OpenID Connect) that can be used to demonstrate their identity to | |||
other parties. For instance, Alice might have an account with a social | other parties. For instance, Alice might have an account with a social | |||
network which she can then use to authenticate to other web sites | network which she can then use to authenticate to other Web sites | |||
without explicitly having an account with those sites; this is a fairly | without explicitly having an account with those sites; this is a fairly | |||
conventional pattern on the Web. <xref | conventional pattern on the Web. <xref target="sec.trust-relationships" | |||
target="sec.trust-relationships"/> provides an overview of Identity | format="default" sectionFormat="of" derivedContent="Section 7.1"/> provides an o | |||
Providers and the relevant terminology. Alice and Bob might have | verview of IdPs | |||
and the relevant terminology. Alice and Bob might have | ||||
relationships with different IdPs as well. | relationships with different IdPs as well. | |||
Note: The IdP mechanism described here has not seen wide adoption. | ||||
See <xref target="sec.generic.idp" format="default" sectionFormat="of" d | ||||
erivedContent="Section 7"/> for more on the status of | ||||
IdP-based authentication. | ||||
</t> | </t> | |||
<t> | <t indent="0" pn="section-4-3"> | |||
This separation of identity provision and signaling isn't particularly | This separation of identity provision and signaling isn't particularly | |||
important in "closed world" cases where Alice and Bob are users on the | important in "closed world" cases where Alice and Bob are users on the | |||
same social network and have identities based on that domain (<xref | same social network and have identities based on that domain (<xref targ | |||
target="fig.proposal.idp"/>). However, there are important settings wher | et="fig.proposal.idp" format="default" sectionFormat="of" derivedContent="Figure | |||
e | 3"/>). However, there are important settings where | |||
that is not the case, such as federation (calls from one domain to | that is not the case, such as federation (calls from one domain to | |||
another; <xref target="fig.proposal-federated.idp"/>) and calling on | another; see <xref target="fig.proposal-federated.idp" format="default" sectionFormat="of" derivedContent="Figure 4"/>) and calling on | |||
untrusted sites, such as where two users who have a relationship via a | untrusted sites, such as where two users who have a relationship via a | |||
given social network want to call each other on another, untrusted, | given social network want to call each other on another, untrusted, | |||
site, such as a poker site. | site, such as a poker site. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-4-4"> | |||
Note that the servers themselves are also authenticated by an external | Note that the servers themselves are also authenticated by an external | |||
identity service, the SSL/TLS certificate infrastructure (not shown). | identity service, the SSL/TLS certificate infrastructure (not shown). | |||
As is conventional in the Web, all identities are ultimately rooted in | As is conventional in the Web, all identities are ultimately rooted in | |||
that system. For instance, when an IdP makes an identity assertion, the | that system. For instance, when an IdP makes an identity assertion, the | |||
Relying Party consuming that assertion is able to verify because it is | Relying Party consuming that assertion is able to verify because it is | |||
able to connect to the IdP via HTTPS. | able to connect to the IdP via HTTPS. | |||
</t> | </t> | |||
<figure title="A call with IdP-based identity" anchor="fig.proposal.idp"> | <figure anchor="fig.proposal.idp" align="left" suppress-title="false" pn=" | |||
<artwork><![CDATA[ | figure-3"> | |||
<name slugifiedName="name-a-call-with-idp-based-ident">A Call with IdP-B | ||||
ased Identity</name> | ||||
<artwork name="" type="" align="left" alt="" pn="section-4-5.1"> | ||||
+----------------+ | +----------------+ | |||
| | | | | | |||
| Signaling | | | Signaling | | |||
| Server | | | Server | | |||
| | | | | | |||
+----------------+ | +----------------+ | |||
^ ^ | ^ ^ | |||
/ \ | / \ | |||
HTTPS / \ HTTPS | HTTPS / \ HTTPS | |||
/ \ | / \ | |||
/ \ | / \ | |||
v v | v v | |||
JS API JS API | JS API JS API | |||
+-----------+ +-----------+ | +-----------+ +-----------+ | |||
| | Media | | | | | Media | | | |||
Alice | Browser |<---------->| Browser | Bob | Alice | Browser |<---------->| Browser | Bob | |||
| | (DTLS+SRTP)| | | | | (DTLS+SRTP)| | | |||
+-----------+ +-----------+ | +-----------+ +-----------+ | |||
^ ^--+ +--^ ^ | ^ ^--+ +--^ ^ | |||
| | | | | | | | | | |||
v | | v | v | | v | |||
+-----------+ | | +-----------+ | +-----------+ | | +-----------+ | |||
| |<--------+ | | | | |<--------+ | | | |||
| IdP1 | | | IdP2 | | | IdP1 | | | IdP2 | | |||
| | +------->| | | | | +------->| | | |||
+-----------+ +-----------+ | +-----------+ +-----------+ </artwork> | |||
]]></artwork> | ||||
</figure> | </figure> | |||
<t> | <t indent="0" pn="section-4-6"> | |||
<xref target="fig.proposal-federated.idp"/> shows essentially the same | <xref target="fig.proposal-federated.idp" format="default" sectionFormat | |||
="of" derivedContent="Figure 4"/> shows essentially the same | ||||
calling scenario but with a call between two separate domains (i.e., a | calling scenario but with a call between two separate domains (i.e., a | |||
federated case), as in <xref target="fig.multidomain"/>. As mentioned | federated case), as in <xref target="fig.multidomain" format="default" s | |||
above, the domains communicate by some unspecified protocol and | ectionFormat="of" derivedContent="Figure 2"/>. As mentioned | |||
above, the domains communicate by some unspecified protocol, and | ||||
providing separate signaling and identity allows for calls to be | providing separate signaling and identity allows for calls to be | |||
authenticated regardless of the details of the inter-domain protocol. | authenticated regardless of the details of the inter-domain protocol. | |||
</t> | </t> | |||
<figure title="A federated call with IdP-based identity" anchor="fig.propo | <figure anchor="fig.proposal-federated.idp" align="left" suppress-title="f | |||
sal-federated.idp"> | alse" pn="figure-4"> | |||
<artwork><![CDATA[ | <name slugifiedName="name-a-federated-call-with-idp-b">A Federated Call | |||
with IdP-Based Identity</name> | ||||
<artwork name="" type="" align="left" alt="" pn="section-4-7.1"> | ||||
+----------------+ Unspecified +----------------+ | +----------------+ Unspecified +----------------+ | |||
| | protocol | | | | | protocol | | | |||
| Signaling |<----------------->| Signaling | | | Signaling |<----------------->| Signaling | | |||
| Server | (SIP, XMPP, ...) | Server | | | Server | (SIP, XMPP, ...) | Server | | |||
| | | | | | | | | | |||
+----------------+ +----------------+ | +----------------+ +----------------+ | |||
^ ^ | ^ ^ | |||
| | | | | | |||
HTTPS | | HTTPS | HTTPS | | HTTPS | |||
| | | | | | |||
| | | | | | |||
v v | v v | |||
JS API JS API | JS API JS API | |||
+-----------+ +-----------+ | +-----------+ +-----------+ | |||
| | Media | | | | | Media | | | |||
Alice | Browser |<--------------------------->| Browser | Bob | Alice | Browser |<--------------------------->| Browser | Bob | |||
| | DTLS+SRTP | | | | | DTLS+SRTP | | | |||
+-----------+ +-----------+ | +-----------+ +-----------+ | |||
^ ^--+ +--^ ^ | ^ ^--+ +--^ ^ | |||
| | | | | | | | | | |||
v | | v | v | | v | |||
+-----------+ | | +-----------+ | +-----------+ | | +-----------+ | |||
| |<-------------------------+ | | | | |<-------------------------+ | | | |||
| IdP1 | | | IdP2 | | | IdP1 | | | IdP2 | | |||
| | +------------------------>| | | | | +------------------------>| | | |||
+-----------+ +-----------+ | +-----------+ +-----------+ </artwork> | |||
]]></artwork> | ||||
</figure> | </figure> | |||
<section numbered="true" toc="include" removeInRFC="false" pn="section-4.1 | ||||
<section title="Initial Signaling"> | "> | |||
<t> | <name slugifiedName="name-initial-signaling">Initial Signaling</name> | |||
For simplicity, assume the topology in <xref | <t indent="0" pn="section-4.1-1"> | |||
target="fig.proposal.idp"/>. Alice and Bob are both users of a common | For simplicity, assume the topology in <xref target="fig.proposal.idp" | |||
format="default" sectionFormat="of" derivedContent="Figure 3"/>. Alice and Bob | ||||
are both users of a common | ||||
calling service; they both have approved the calling service to make | calling service; they both have approved the calling service to make | |||
calls (we defer the discussion of device access permissions until | calls (we defer the discussion of device access permissions until | |||
later). They are both connected to the calling service via HTTPS and | later). They are both connected to the calling service via HTTPS and | |||
so know the origin with some level of confidence. They also have | so know the origin with some level of confidence. They also have | |||
accounts with some identity provider. This sort of identity service | accounts with some IdP. This sort of identity service | |||
is becoming increasingly common in the Web environment (with technolog ies | is becoming increasingly common in the Web environment (with technolog ies | |||
such as Federated Google Login, Facebook Connect, OAuth, | such as Federated Google Login, Facebook Connect, OAuth, | |||
OpenID, WebFinger), and is often provided as a side effect service of | OpenID, WebFinger), and is often provided as a side effect service of | |||
a user's ordinary accounts with some service. In this example, we show | a user's ordinary accounts with some service. In this example, we show | |||
Alice and Bob using a separate identity service, though the identity | Alice and Bob using a separate identity service, though the identity | |||
service may be the same entity as the calling service or there may be | service may be the same entity as the calling service or there may be | |||
no identity service at all. | no identity service at all. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-4.1-2"> | |||
Alice is logged onto the calling service and decides to call Bob. She | Alice is logged onto the calling service and decides to call Bob. She | |||
can see from the calling service that he is online and the calling | can see from the calling service that he is online and the calling | |||
service presents a JS UI in the form of a button next to Bob's name | service presents a JS UI in the form of a button next to Bob's name | |||
which says "Call". Alice clicks the button, which initiates a JS | which says "Call". Alice clicks the button, which initiates a JS | |||
callback that instantiates a PeerConnection object. This does not | callback that instantiates a PeerConnection object. This does not | |||
require a security check: JS from any origin is allowed to get this | require a security check: JS from any origin is allowed to get this | |||
far. | far. | |||
</t> | </t> | |||
<t indent="0" pn="section-4.1-3"> | ||||
<t> | ||||
Once the PeerConnection is created, the calling service JS needs to | Once the PeerConnection is created, the calling service JS needs to | |||
set up some media. Because this is an audio/video call, it creates a | set up some media. Because this is an audio/video call, it creates a | |||
MediaStream with two MediaStreamTracks, one connected to an audio | MediaStream with two MediaStreamTracks, one connected to an audio | |||
input and one connected to a video input. At this point the first | input and one connected to a video input. At this point, the first | |||
security check is required: untrusted origins are not allowed to | security check is required: untrusted origins are not allowed to | |||
access the camera and microphone, so the browser prompts Alice for | access the camera and microphone, so the browser prompts Alice for | |||
permission. | permission. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-4.1-4"> | |||
In the current W3C API, once some streams have been added, Alice's | In the current W3C API, once some streams have been added, Alice's | |||
browser + JS generates a signaling message <xref | browser + JS generates a signaling message <xref target="RFC8829" form | |||
target="I-D.ietf-rtcweb-jsep"/> containing: | at="default" sectionFormat="of" derivedContent="RFC8829"/> containing: | |||
</t> | </t> | |||
<t> | <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4 | |||
<list style="symbols"> | .1-5"> | |||
<t> | <li pn="section-4.1-5.1"> | |||
Media channel information | Media channel information | |||
</t> | </li> | |||
<t> | <li pn="section-4.1-5.2"> | |||
Interactive Connectivity Establishment (ICE) <xref | Interactive Connectivity Establishment (ICE) <xref target="RFC8445 | |||
target="RFC8445"/> candidates | " format="default" sectionFormat="of" derivedContent="RFC8445"/> candidates | |||
</t> | </li> | |||
<t> | <li pn="section-4.1-5.3"> | |||
A fingerprint attribute binding the communication to a key pair | A "fingerprint" attribute binding the communication to a key pair | |||
<xref target="RFC5763"/>. Note that this key may simply be | <xref target="RFC5763" format="default" sectionFormat="of" derived | |||
Content="RFC5763"/>. Note that this key may simply be | ||||
ephemerally generated for this call or specific to this domain, | ephemerally generated for this call or specific to this domain, | |||
and Alice may have a large number of such keys. | and Alice may have a large number of such keys. | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | <t indent="0" pn="section-4.1-6"> | |||
<t> | ||||
Prior to sending out the signaling message, the PeerConnection code | Prior to sending out the signaling message, the PeerConnection code | |||
contacts the identity service and obtains an assertion binding Alice's | contacts the identity service and obtains an assertion binding Alice's | |||
identity to her fingerprint. The exact details depend on the identity | identity to her fingerprint. The exact details depend on the identity | |||
service (though as discussed in <xref target="sec.generic.idp"/> | service (though as discussed in <xref target="sec.generic.idp" format= "default" sectionFormat="of" derivedContent="Section 7"/> | |||
PeerConnection can be agnostic to them), but for now it's easiest to | PeerConnection can be agnostic to them), but for now it's easiest to | |||
think of as an OAuth token. The assertion may bind other | think of as an OAuth token. The assertion may bind other | |||
information to the identity besides the fingerprint, but at minimum it | information to the identity besides the fingerprint, but at minimum it | |||
needs to bind the fingerprint. | needs to bind the fingerprint. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-4.1-7"> | |||
This message is sent to the signaling server, e.g., by XMLHttpRequest | This message is sent to the signaling server, e.g., by fetch() | |||
<xref target="XmlHttpRequest"/> or by WebSockets <xref | <xref target="fetch" format="default" sectionFormat="of" derivedConten | |||
target="RFC6455"/>, over TLS <xref target="RFC5246"/>. | t="fetch"/> or by WebSockets | |||
<xref target="RFC6455" format="default" sectionFormat="of" derivedCont | ||||
ent="RFC6455"/>, over TLS <xref target="RFC8446" format="default" sectionFormat= | ||||
"of" derivedContent="RFC8446"/>. | ||||
The signaling server processes the message from Alice's browser, | The signaling server processes the message from Alice's browser, | |||
determines that this is a call to Bob and sends a signaling message to | determines that this is a call to Bob, and sends a signaling message t o | |||
Bob's browser (again, the format is currently undefined). The JS on | Bob's browser (again, the format is currently undefined). The JS on | |||
Bob's browser processes it, and alerts Bob to the incoming call and to | Bob's browser processes it, and alerts Bob to the incoming call and to | |||
Alice's identity. In this case, Alice has provided an identity | Alice's identity. In this case, Alice has provided an identity | |||
assertion and so Bob's browser contacts Alice's identity provider | assertion and so Bob's browser contacts Alice's IdP | |||
(again, this is done in a generic way so the browser has no specific | (again, this is done in a generic way so the browser has no specific | |||
knowledge of the IdP) to verify the assertion. It is also possible | knowledge of the IdP) to verify the assertion. It is also possible | |||
to have IdPs with which the browser has a specific trustrelationship, | to have IdPs with which the browser has a specific trust relationship, | |||
as described in <xref target="sec.trust-relationships"/>. | as described in <xref target="sec.trust-relationships" format="default | |||
" sectionFormat="of" derivedContent="Section 7.1"/>. | ||||
This allows the browser | This allows the browser | |||
to display a trusted element in the browser chrome indicating that a | to display a trusted element in the browser chrome indicating that a | |||
call is coming in from Alice. If Alice is in Bob's address book, then | call is coming in from Alice. If Alice is in Bob's address book, then | |||
this interface might also include her real name, a picture, etc. The | this interface might also include her real name, a picture, etc. The | |||
calling site will also provide some user interface element (e.g., a | calling site will also provide some user interface element (e.g., a | |||
button) to allow Bob to answer the call, though this is most likely | button) to allow Bob to answer the call, though this is most likely | |||
not part of the trusted UI. | not part of the trusted UI. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-4.1-8"> | |||
If Bob agrees a PeerConnection is instantiated with the message from | If Bob agrees, a PeerConnection is instantiated with the message from | |||
Alice's side. Then, a similar process occurs as on Alice's browser: | Alice's side. Then, a similar process occurs as on Alice's browser: | |||
Bob's browser prompts him for device permission, the media streams are | Bob's browser prompts him for device permission, the media streams are | |||
created, and a return signaling message containing media information, | created, and a return signaling message containing media information, | |||
ICE candidates, and a fingerprint is sent back to Alice via the | ICE candidates, and a fingerprint is sent back to Alice via the | |||
signaling service. If Bob has a relationship with an IdP, the message | signaling service. If Bob has a relationship with an IdP, the message | |||
will also come with an identity assertion. | will also come with an identity assertion. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-4.1-9"> | |||
At this point, Alice and Bob each know that the other party wants to | At this point, Alice and Bob each know that the other party wants to | |||
have a secure call with them. Based purely on the interface provided | have a secure call with them. Based purely on the interface provided | |||
by the signaling server, they know that the signaling server claims | by the signaling server, they know that the signaling server claims | |||
that the call is from Alice to Bob. This level of security is provided | that the call is from Alice to Bob. This level of security is provided | |||
merely by having the fingerprint in the message and having that | merely by having the fingerprint in the message and having that | |||
message received securely from the signaling server. Because the far | message received securely from the signaling server. Because the far | |||
end sent an identity assertion along with their message, they know | end sent an identity assertion along with their message, they know | |||
that this is verifiable from the IdP as well. Note that if the call is | that this is verifiable from the IdP as well. Note that if the call is | |||
federated, as shown in <xref target="fig.proposal-federated.idp"/> | federated, as shown in <xref target="fig.proposal-federated.idp" forma t="default" sectionFormat="of" derivedContent="Figure 4"/>, | |||
then Alice is able to verify Bob's identity in a way that is not | then Alice is able to verify Bob's identity in a way that is not | |||
mediated by either her signaling server or Bob's. Rather, she verifies | mediated by either her signaling server or Bob's. Rather, she verifies | |||
it directly with Bob's IdP. | it directly with Bob's IdP. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-4.1-10"> | |||
Of course, the call works perfectly well if either Alice or Bob | Of course, the call works perfectly well if either Alice or Bob | |||
doesn't have a relationship with an IdP; they just get a lower level | doesn't have a relationship with an IdP; they just get a lower level | |||
of assurance. I.e., they simply have whatever information their | of assurance. I.e., they simply have whatever information their | |||
calling site claims about the caller/callee's identity. Moreover, | calling site claims about the caller/callee's identity. Moreover, | |||
Alice might wish to make an anonymous call through an anonymous | Alice might wish to make an anonymous call through an anonymous | |||
calling site, in which case she would of course just not provide any | calling site, in which case she would of course just not provide any | |||
identity assertion and the calling site would mask her identity from | identity assertion and the calling site would mask her identity from | |||
Bob. | Bob. | |||
</t> | </t> | |||
</section> | </section> | |||
<section numbered="true" toc="include" removeInRFC="false" pn="section-4.2 | ||||
<section title="Media Consent Verification"> | "> | |||
<t> | <name slugifiedName="name-media-consent-verification">Media Consent Veri | |||
As described in (<xref target="I-D.ietf-rtcweb-security"/>; Section | fication</name> | |||
4.2) media consent verification is provided via ICE. Thus, Alice and | <t indent="0" pn="section-4.2-1"> | |||
As described in <xref target="RFC8826" sectionFormat="comma" section=" | ||||
4.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8826#section-4. | ||||
2" derivedContent="RFC8826"/>, media consent verification is provided via ICE. | ||||
Thus, Alice and | ||||
Bob perform ICE checks with each other. At the completion of these | Bob perform ICE checks with each other. At the completion of these | |||
checks, they are ready to send non-ICE data. | checks, they are ready to send non-ICE data. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-4.2-2"> | |||
At this point, Alice knows that (a) Bob (assuming he is verified via | At this point, Alice knows that (a) Bob (assuming he is verified via | |||
his IdP) or someone else who the signaling service is claiming is Bob | his IdP) or someone else who the signaling service is claiming is Bob | |||
is willing to exchange traffic with her and (b) that either Bob is at | is willing to exchange traffic with her and (b) either Bob is at | |||
the IP address which she has verified via ICE or there is an attacker | the IP address which she has verified via ICE or there is an attacker | |||
who is on-path to that IP address detouring the traffic. Note that it | who is on-path to that IP address detouring the traffic. Note that it | |||
is not possible for an attacker who is on-path between Alice and Bob | is not possible for an attacker who is on-path between Alice and Bob | |||
but not attached to the signaling service to spoof these checks | but not attached to the signaling service to spoof these checks | |||
because they do not have the ICE credentials. Bob has the same | because they do not have the ICE credentials. Bob has the same | |||
security guarantees with respect to Alice. | security guarantees with respect to Alice. | |||
</t> | </t> | |||
</section> | </section> | |||
<section numbered="true" toc="include" removeInRFC="false" pn="section-4.3 | ||||
<section title="DTLS Handshake"> | "> | |||
<t> | <name slugifiedName="name-dtls-handshake">DTLS Handshake</name> | |||
<t indent="0" pn="section-4.3-1"> | ||||
Once the requisite ICE checks have completed, Alice and Bob can set | Once the requisite ICE checks have completed, Alice and Bob can set | |||
up a secure channel or channels. This is performed via DTLS <xref targ | up a secure channel or channels. This is performed via DTLS <xref targ | |||
et="RFC6347"/> | et="RFC6347" format="default" sectionFormat="of" derivedContent="RFC6347"/> | |||
and DTLS-SRTP <xref target="RFC5763"/> keying for SRTP | and DTLS-SRTP <xref target="RFC5763" format="default" sectionFormat="o | |||
<xref target="RFC3711"/> for the media channel and SCTP over DTLS | f" derivedContent="RFC5763"/> keying for SRTP | |||
<xref target="RFC8261"/> for data | <xref target="RFC3711" format="default" sectionFormat="of" derivedCont | |||
ent="RFC3711"/> for the media channel and | ||||
the Stream Control Transmission Protocol (SCTP) over DTLS | ||||
<xref target="RFC8261" format="default" sectionFormat="of" derivedCont | ||||
ent="RFC8261"/> for data | ||||
channels. Specifically, Alice and Bob perform a DTLS handshake on | channels. Specifically, Alice and Bob perform a DTLS handshake on | |||
every component which has been established by ICE. The total number of | every component which has been established by ICE. The total number of | |||
channels depends on the amount of muxing; in the most likely case we | channels depends on the amount of muxing; in the most likely case, we | |||
are using both RTP/RTCP mux and muxing multiple media streams on the | are using both RTP/RTCP mux and muxing multiple media streams on the | |||
same channel, in which case there is only one DTLS handshake. Once the | same channel, in which case there is only one DTLS handshake. Once the | |||
DTLS handshake has completed, the keys are exported <xref | DTLS handshake has completed, the keys are exported <xref target="RFC5 | |||
target="RFC5705"/> and used to key SRTP for the media channels. | 705" format="default" sectionFormat="of" derivedContent="RFC5705"/> and used to | |||
key SRTP for the media channels. | ||||
</t> | </t> | |||
<t> | <t indent="0" pn="section-4.3-2"> | |||
At this point, Alice and Bob know that they share a set of secure data | At this point, Alice and Bob know that they share a set of secure data | |||
and/or media channels with keys which are not known to any third-party | and/or media channels with keys which are not known to any third-party | |||
attacker. If Alice and Bob authenticated via their IdPs, then they | attacker. If Alice and Bob authenticated via their IdPs, then they | |||
also know that the signaling service is not mounting a | also know that the signaling service is not mounting a | |||
man-in-the-middle attack on their traffic. Even if they do not use an | man-in-the-middle attack on their traffic. Even if they do not use an | |||
IdP, as long as they have minimal trust in the signaling service not | IdP, as long as they have minimal trust in the signaling service not | |||
to perform a man-in-the-middle attack, they know that their | to perform a man-in-the-middle attack, they know that their | |||
communications are secure against the signaling service as well (i.e., | communications are secure against the signaling service as well (i.e., | |||
that the signaling service cannot mount a passive attack on the | that the signaling service cannot mount a passive attack on the | |||
communications). | communications). | |||
skipping to change at line 539 ¶ | skipping to change at line 703 ¶ | |||
and/or media channels with keys which are not known to any third-party | and/or media channels with keys which are not known to any third-party | |||
attacker. If Alice and Bob authenticated via their IdPs, then they | attacker. If Alice and Bob authenticated via their IdPs, then they | |||
also know that the signaling service is not mounting a | also know that the signaling service is not mounting a | |||
man-in-the-middle attack on their traffic. Even if they do not use an | man-in-the-middle attack on their traffic. Even if they do not use an | |||
IdP, as long as they have minimal trust in the signaling service not | IdP, as long as they have minimal trust in the signaling service not | |||
to perform a man-in-the-middle attack, they know that their | to perform a man-in-the-middle attack, they know that their | |||
communications are secure against the signaling service as well (i.e., | communications are secure against the signaling service as well (i.e., | |||
that the signaling service cannot mount a passive attack on the | that the signaling service cannot mount a passive attack on the | |||
communications). | communications). | |||
</t> | </t> | |||
</section> | </section> | |||
<section numbered="true" toc="include" removeInRFC="false" pn="section-4.4 | ||||
<section title="Communications and Consent Freshness"> | "> | |||
<t> | <name slugifiedName="name-communications-and-consent-">Communications an | |||
d Consent Freshness</name> | ||||
<t indent="0" pn="section-4.4-1"> | ||||
From a security perspective, everything from here on in is a little | From a security perspective, everything from here on in is a little | |||
anticlimactic: Alice and Bob exchange data protected by the keys | anticlimactic: Alice and Bob exchange data protected by the keys | |||
negotiated by DTLS. Because of the security guarantees discussed in | negotiated by DTLS. Because of the security guarantees discussed in | |||
the previous sections, they know that the communications are encrypted | the previous sections, they know that the communications are encrypted | |||
and authenticated. | and authenticated. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-4.4-2"> | |||
The one remaining security property we need to establish is "consent | The one remaining security property we need to establish is "consent | |||
freshness", i.e., allowing Alice to verify that Bob is still prepared | freshness", i.e., allowing Alice to verify that Bob is still prepared | |||
to receive her communications so that Alice does not continue to send | to receive her communications so that Alice does not continue to send | |||
large traffic volumes to entities which went abruptly offline. ICE | large traffic volumes to entities which went abruptly offline. ICE | |||
specifies periodic STUN keepalives but only if media is not flowing. | specifies periodic Session Traversal Utilities for NAT (STUN) keepaliv es but only if media is not flowing. | |||
Because the consent issue is more difficult here, we require WebRTC | Because the consent issue is more difficult here, we require WebRTC | |||
implementations to periodically send keepalives. As described in | implementations to periodically send keepalives using the | |||
Section 5.3, these keepalives MUST be based on the consent freshness | consent freshness | |||
mechanism specified in <xref target="RFC7675"/>. If a | mechanism specified in <xref target="RFC7675" format="default" section | |||
Format="of" derivedContent="RFC7675"/>. | ||||
If a | ||||
keepalive fails and no new ICE channels can be established, then the | keepalive fails and no new ICE channels can be established, then the | |||
session is terminated. | session is terminated. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="sec.sdp-id-attr" numbered="true" toc="include" removeInRFC= | ||||
<section title="SDP Identity Attribute" anchor="sec.sdp-id-attr"> | "false" pn="section-5"> | |||
<t> | <name slugifiedName="name-sdp-identity-attribute">SDP Identity Attribute</ | |||
The SDP 'identity' attribute is a session-level attribute that | name> | |||
<t indent="0" pn="section-5-1"> | ||||
The SDP "identity" attribute is a session-level attribute that | ||||
is used by an endpoint to convey its identity assertion to its | is used by an endpoint to convey its identity assertion to its | |||
peer. The identity assertion value is encoded as Base-64, as described | peer. The identity-assertion value is encoded as base64, as described | |||
in Section 4 of <xref target="RFC4648"/>. | in <xref target="RFC4648" sectionFormat="of" section="4" format="default | |||
" derivedLink="https://rfc-editor.org/rfc/rfc4648#section-4" derivedContent="RFC | ||||
4648"/>. | ||||
</t> | </t> | |||
<t> | <t indent="0" pn="section-5-2"> | |||
The procedures in this section are based on the assumption | The procedures in this section are based on the assumption | |||
that the identity assertion of an endpoint is bound to the | that the identity assertion of an endpoint is bound to the | |||
fingerprints of the endpoint. This does not preclude the definition of | fingerprints of the endpoint. This does not preclude the definition of | |||
alternative means of binding an assertion to the endpoint, but such | alternative means of binding an assertion to the endpoint, but such | |||
means are outside the scope of this specification. | means are outside the scope of this specification. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-5-3"> | |||
The semantics of multiple 'identity' attributes within an | The semantics of multiple "identity" attributes within an | |||
offer or answer are undefined. Implementations SHOULD only include a | offer or answer are undefined. Implementations <bcp14>SHOULD</bcp14> on | |||
single 'identity' attribute in an offer or answer and relying parties | ly include a | |||
MAY elect to ignore all but the first 'identity' attribute. | single "identity" attribute in an offer or answer, and Relying Parties | |||
</t> | <bcp14>MAY</bcp14> elect to ignore all but the first "identity" attribut | |||
<t> | e. | |||
<list style="hanging"> | ||||
<t hangText="Name:">identity</t> | ||||
<t hangText="Value:">identity-assertion</t> | ||||
<t hangText="Usage Level:">session</t> | ||||
<t hangText="Charset Dependent:">no</t> | ||||
<t hangText="Default Value:">N/A</t> | ||||
<t hangText="Name:">identity</t> | ||||
</list> | ||||
</t> | </t> | |||
<figure> | <dl newline="false" spacing="normal" indent="3" pn="section-5-4"> | |||
<artwork type="inline"><![CDATA[ | <dt pn="section-5-4.1">Name:</dt> | |||
Syntax: | <dd pn="section-5-4.2">identity</dd> | |||
<dt pn="section-5-4.3">Value:</dt> | ||||
identity-assertion = identity-assertion-value | <dd pn="section-5-4.4">identity-assertion</dd> | |||
*(SP identity-extension) | <dt pn="section-5-4.5">Usage Level:</dt> | |||
identity-assertion-value = base64 | <dd pn="section-5-4.6">session</dd> | |||
identity-extension = extension-name [ "=" extension-value ] | <dt pn="section-5-4.7">Charset Dependent:</dt> | |||
extension-name = token | <dd pn="section-5-4.8">no</dd> | |||
extension-value = 1*(%x01-09 / %x0b-0c / %x0e-3a / %x3c-ff) | <dt pn="section-5-4.9">Default Value:</dt> | |||
; byte-string from [RFC4566] | <dd pn="section-5-4.10">N/A</dd> | |||
</dl> | ||||
<ALPHA and DIGIT as defined in [RFC4566]> | <t indent="0" pn="section-5-5">Syntax:</t> | |||
<base64 as defined in [RFC4566]> | <sourcecode name="abnf-1" type="abnf" markers="false" pn="section-5-6"> | |||
identity-assertion = identity-assertion-value | ||||
Example: | *(SP identity-extension) | |||
identity-assertion-value = base64 | ||||
a=identity:\ | identity-extension = extension-name [ "=" extension-value ] | |||
eyJpZHAiOnsiZG9tYWluIjoiZXhhbXBsZS5vcmciLCJwcm90b2NvbCI6ImJvZ3Vz\ | extension-name = token | |||
In0sImFzc2VydGlvbiI6IntcImlkZW50aXR5XCI6XCJib2JAZXhhbXBsZS5vcmdc\ | extension-value = 1*(%x01-09 / %x0b-0c / %x0e-3a / %x3c-ff) | |||
IixcImNvbnRlbnRzXCI6XCJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3l6XCIsXCJz\ | ; byte-string from [RFC4566] | |||
aWduYXR1cmVcIjpcIjAxMDIwMzA0MDUwNlwifSJ9 | ||||
Note that long lines in the example are folded to meet the column | <ALPHA and DIGIT as defined in [RFC4566]> | |||
<base64 as defined in [RFC4566]> | ||||
</sourcecode> | ||||
<t indent="0" pn="section-5-7">Example:</t> | ||||
<sourcecode name="sdp-1" type="sdp" markers="false" pn="section-5-8"> | ||||
a=identity:\ | ||||
eyJpZHAiOnsiZG9tYWluIjoiZXhhbXBsZS5vcmciLCJwcm90b2NvbCI6ImJvZ3Vz\ | ||||
In0sImFzc2VydGlvbiI6IntcImlkZW50aXR5XCI6XCJib2JAZXhhbXBsZS5vcmdc\ | ||||
IixcImNvbnRlbnRzXCI6XCJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3l6XCIsXCJz\ | ||||
aWduYXR1cmVcIjpcIjAxMDIwMzA0MDUwNlwifSJ9</sourcecode> | ||||
<aside pn="section-5-9"> | ||||
<t indent="0" pn="section-5-9.1">Note that long lines in the example are | ||||
folded to meet the column | ||||
width constraints of this document; the backslash ("\") at the end of | width constraints of this document; the backslash ("\") at the end of | |||
a line, the carriage return that follows, and whitespace shall be ignored. | a line, the carriage return that follows, and whitespace shall be ignored.</t> | |||
</aside> | ||||
]]></artwork> | <t indent="0" pn="section-5-10"> | |||
</figure> | ||||
<t> | ||||
This specification does not define any extensions for the attribute. | This specification does not define any extensions for the attribute. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-5-11"> | |||
The identity-assertion value is a JSON <xref target="RFC8259"/> encoded | The identity-assertion value is a JSON encoded string | |||
string. The JSON object | <xref target="RFC8259" format="default" sectionFormat="of" derivedConte | |||
contains two keys: "assertion" and "idp". The <spanx style="verb">asser | nt="RFC8259"/>. The JSON object | |||
tion</spanx> key value contains | contains two keys: "assertion" and "idp". The "assertion" key value con | |||
an opaque string that is consumed by the IdP. The <spanx style="verb">i | tains | |||
dp</spanx> key value contains a | an opaque string that is consumed by the IdP. The "idp" key value conta | |||
ins a | ||||
dictionary with one or two further values that identify the IdP. See | dictionary with one or two further values that identify the IdP. See | |||
<xref target="sec.request-assert"/> for more details. | <xref target="sec.request-assert" format="default" sectionFormat="of" d | |||
</t> | erivedContent="Section 7.6"/> for more details. | |||
<section title="Offer/Answer Considerations" anchor="sec.sdp-id-attr-oa"> | </t> | |||
<t> | <section anchor="sec.sdp-id-attr-oa" numbered="true" toc="include" removeI | |||
This section defines the SDP Offer/Answer <xref target="RFC3264"/> co | nRFC="false" pn="section-5.1"> | |||
nsiderations for the SDP | <name slugifiedName="name-offer-answer-considerations">Offer/Answer Cons | |||
'identity' attribute. | iderations</name> | |||
</t> | <t indent="0" pn="section-5.1-1"> | |||
<t> | This section defines the SDP offer/answer <xref target="RFC3264" form | |||
at="default" sectionFormat="of" derivedContent="RFC3264"/> considerations for th | ||||
e SDP | ||||
"identity" attribute. | ||||
</t> | ||||
<t indent="0" pn="section-5.1-2"> | ||||
Within this section, 'initial offer' refers to the first offer in the | Within this section, 'initial offer' refers to the first offer in the | |||
SDP session that contains an SDP <spanx style="verb">identity</spanx> | SDP session that contains an SDP "identity" attribute. | |||
attribute. | </t> | |||
</t> | <section anchor="sec.sdp-id-attr-oa-inio" numbered="true" toc="include" | |||
<section title="Generating the Initial SDP Offer" anchor="sec.sdp-id-at | removeInRFC="false" pn="section-5.1.1"> | |||
tr-oa-inio"> | <name slugifiedName="name-generating-the-initial-sdp-">Generating the | |||
<t> | Initial SDP Offer</name> | |||
<t indent="0" pn="section-5.1.1-1"> | ||||
When an offerer sends an offer, in order to provide its | When an offerer sends an offer, in order to provide its | |||
identity assertion to the peer, it includes an 'identity' attribute i n | identity assertion to the peer, it includes an "identity" attribute i n | |||
the offer. In addition, the offerer includes one or more SDP | the offer. In addition, the offerer includes one or more SDP | |||
'fingerprint' attributes. The 'identity' attribute MUST be bound to | "fingerprint" attributes. The "identity" attribute <bcp14>MUST</bcp1 | |||
all the 'fingerprint' attributes in the session | 4> be bound to | |||
all the "fingerprint" attributes in the session | ||||
description. | description. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Generating of SDP Answer" anchor="sec.sdp-id-attr-oa-an | <section anchor="sec.sdp-id-attr-oa-ansa" numbered="true" toc="include" | |||
sa"> | removeInRFC="false" pn="section-5.1.2"> | |||
<t> | <name slugifiedName="name-generating-an-sdp-answer">Generating an SDP | |||
If the answerer elects to include an 'identity' attribute, it follo | Answer</name> | |||
ws | <t indent="0" pn="section-5.1.2-1"> | |||
the same steps as those in <xref target="sec.sdp-id-attr-oa-inio"/> | If the answerer elects to include an "identity" attribute, it follo | |||
. | ws | |||
The answerer can choose to include or omit an 'identity' attribute | the same steps as those in <xref target="sec.sdp-id-attr-oa-inio" f | |||
independently, | ormat="default" sectionFormat="of" derivedContent="Section 5.1.1"/>. | |||
The answerer can choose to include or omit an "identity" attribute | ||||
independently, | ||||
regardless of whether the offerer did so. | regardless of whether the offerer did so. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Processing an SDP Offer or Answer" anchor="sec.sdp-id-a | <section anchor="sec.sdp-id-attr-oa-offa" numbered="true" toc="include" | |||
ttr-oa-offa"> | removeInRFC="false" pn="section-5.1.3"> | |||
<t> | <name slugifiedName="name-processing-an-sdp-offer-or-">Processing an S | |||
When an endpoint receives an offer or answer that contains an 'iden | DP Offer or Answer</name> | |||
tity' | <t indent="0" pn="section-5.1.3-1"> | |||
attribute, the answerer can use the the attribute information to | When an endpoint receives an offer or answer that contains an "iden | |||
tity" | ||||
attribute, the answerer can use the attribute information to | ||||
contact the IdP and verify the identity of the peer. If the identit y | contact the IdP and verify the identity of the peer. If the identit y | |||
requires a third-party IdP as described in <xref target="sec.trust- relationships"/> | requires a third-party IdP as described in <xref target="sec.trust- relationships" format="default" sectionFormat="of" derivedContent="Section 7.1"/ >, | |||
then that IdP will need to have been specifically configured. | then that IdP will need to have been specifically configured. | |||
If the identity verification fails, the answerer MUST discard the | If the identity verification fails, the answerer <bcp14>MUST</bcp14 > discard the | |||
offer or answer as malformed. | offer or answer as malformed. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Modifying the Session" anchor="sec.sdp-id-attr-oa-modi" | <section anchor="sec.sdp-id-attr-oa-modi" numbered="true" toc="include" | |||
> | removeInRFC="false" pn="section-5.1.4"> | |||
<t> | <name slugifiedName="name-modifying-the-session">Modifying the Session | |||
</name> | ||||
<t indent="0" pn="section-5.1.4-1"> | ||||
When modifying a session, if the set of fingerprints is | When modifying a session, if the set of fingerprints is | |||
unchanged, then the sender MAY send the same 'identity' attribute. | unchanged, then the sender <bcp14>MAY</bcp14> send the same "identi | |||
In | ty" attribute. In | |||
this case, the established identity MUST be applied to existing DTL | this case, the established identity <bcp14>MUST</bcp14> be applied | |||
S | to existing DTLS | |||
connections as well as new connections established using one of tho se | connections as well as new connections established using one of tho se | |||
fingerprints. Note that <xref target="I-D.ietf-rtcweb-jsep"/>, Sect | fingerprints. Note that <xref target="RFC8829" sectionFormat="comma | |||
ion | " section="5.2.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc88 | |||
5.2.1 requires that each media section use the same set of | 29#section-5.2.1" derivedContent="RFC8829"/> requires that each media section us | |||
fingerprints for every media section. | e the same set of fingerprints. | |||
If a new identity attribute is received, then the receiver MUST | If a new "identity" attribute is received, then the receiver <bcp14 | |||
>MUST</bcp14> | ||||
apply that identity to all existing connections. | apply that identity to all existing connections. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-5.1.4-2"> | |||
If the set of fingerprints changes, then the sender MUST | If the set of fingerprints changes, then the sender <bcp14>MUST</bc | |||
either send a new 'identity' attribute or none at all. | p14> | |||
either send a new "identity" attribute or none at all. | ||||
Because a change in fingerprints also causes a new DTLS | Because a change in fingerprints also causes a new DTLS | |||
connection to be established, the receiver MUST discard | connection to be established, the receiver <bcp14>MUST</bcp14> disc ard | |||
all previously established identities. | all previously established identities. | |||
</t> | </t> | |||
</section> | ||||
</section> | </section> | |||
</section> | ||||
</section> | </section> | |||
<section anchor="sec.proposal.detailed" numbered="true" toc="include" remove | ||||
<section title="Detailed Technical Description" anchor="sec.proposal.detaile | InRFC="false" pn="section-6"> | |||
d"> | <name slugifiedName="name-detailed-technical-descript">Detailed Technical | |||
Description</name> | ||||
<section title="Origin and Web Security Issues" anchor="sec.proposal.origi | <section anchor="sec.proposal.origin" numbered="true" toc="include" remove | |||
n"> | InRFC="false" pn="section-6.1"> | |||
<t> | <name slugifiedName="name-origin-and-web-security-iss">Origin and Web Se | |||
The basic unit of permissions for WebRTC is the origin <xref | curity Issues</name> | |||
target="RFC6454"/>. Because the security of the origin depends on | <t indent="0" pn="section-6.1-1"> | |||
The basic unit of permissions for WebRTC is the origin <xref target="R | ||||
FC6454" format="default" sectionFormat="of" derivedContent="RFC6454"/>. Because | ||||
the security of the origin depends on | ||||
being able to authenticate content from that origin, the origin can | being able to authenticate content from that origin, the origin can | |||
only be securely established if data is transferred over HTTPS <xref | only be securely established if data is transferred over HTTPS <xref t | |||
target="RFC2818"/>. Thus, clients MUST treat HTTP and HTTPS origins as | arget="RFC2818" format="default" sectionFormat="of" derivedContent="RFC2818"/>. | |||
different permissions domains. Note: this follows directly from the | Thus, clients <bcp14>MUST</bcp14> treat HTTP and HTTPS origins as | |||
different permissions domains. Note: This follows directly from the | ||||
origin security model and is stated here merely for clarity. | origin security model and is stated here merely for clarity. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-6.1-2"> | |||
Many web browsers currently forbid by default any active mixed content | Many Web browsers currently forbid by default any active mixed content | |||
on HTTPS pages. That is, when JavaScript is loaded from an HTTP origin | on HTTPS pages. That is, when JavaScript is loaded from an HTTP origin | |||
onto an HTTPS page, an error is displayed and the HTTP content is not | onto an HTTPS page, an error is displayed and the HTTP content is not | |||
executed unless the user overrides the error. Any browser which | executed unless the user overrides the error. Any browser which | |||
enforces such a policy will also not permit access to WebRTC | enforces such a policy will also not permit access to WebRTC | |||
functionality from mixed content pages (because they never display | functionality from mixed content pages (because they never display | |||
mixed content). Browsers which allow active mixed content MUST | mixed content). Browsers which allow active mixed content <bcp14>MUST </bcp14> | |||
nevertheless disable WebRTC functionality in mixed content settings. | nevertheless disable WebRTC functionality in mixed content settings. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-6.1-3"> | |||
Note that it is possible for a page which was not mixed content to | Note that it is possible for a page which was not mixed content to | |||
become mixed content during the duration of the call. The major risk | become mixed content during the duration of the call. The major risk | |||
here is that the newly arrived insecure JS might redirect media to a | here is that the newly arrived insecure JS might redirect media to a | |||
location controlled by the attacker. Implementations MUST either | location controlled by the attacker. Implementations <bcp14>MUST</bcp 14> either | |||
choose to terminate the call or display a warning at that point. | choose to terminate the call or display a warning at that point. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-6.1-4"> | |||
Also note that the security architecture depends on the keying materia l | Also note that the security architecture depends on the keying materia l | |||
not being available to move between origins. But, it is assumed that | not being available to move between origins. However, it is assumed t hat | |||
the identity assertion can be passed to anyone that the page cares to. | the identity assertion can be passed to anyone that the page cares to. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="sec.proposal.device.permissions" numbered="true" toc="inc | ||||
<section title="Device Permissions Model" anchor="sec.proposal.device.perm | lude" removeInRFC="false" pn="section-6.2"> | |||
issions"> | <name slugifiedName="name-device-permissions-model">Device Permissions M | |||
<t> | odel</name> | |||
Implementations MUST obtain explicit user consent prior to providing | <t indent="0" pn="section-6.2-1"> | |||
access to the camera and/or microphone. Implementations MUST at | Implementations <bcp14>MUST</bcp14> obtain explicit user consent prior | |||
to providing | ||||
access to the camera and/or microphone. Implementations <bcp14>MUST</b | ||||
cp14> at | ||||
minimum support the following two permissions models for HTTPS | minimum support the following two permissions models for HTTPS | |||
origins. | origins. | |||
</t> | </t> | |||
<t> | <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-6 | |||
<list style="symbols"> | .2-2"> | |||
<t> | <li pn="section-6.2-2.1"> | |||
Requests for one-time camera/microphone access. | Requests for one-time camera/microphone access. | |||
</t> | </li> | |||
<t> | <li pn="section-6.2-2.2"> | |||
Requests for permanent access. | Requests for permanent access. | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | <t indent="0" pn="section-6.2-3"> | |||
<t> | ||||
Because HTTP origins cannot be securely established against network | Because HTTP origins cannot be securely established against network | |||
attackers, implementations MUST refuse all permissions grants for | attackers, implementations <bcp14>MUST</bcp14> refuse all permissions grants for | |||
HTTP origins. | HTTP origins. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-6.2-4"> | |||
In addition, they SHOULD support requests for access that promise that | In addition, they <bcp14>SHOULD</bcp14> support requests for access th | |||
at promise that | ||||
media from this grant will be sent to a single communicating peer | media from this grant will be sent to a single communicating peer | |||
(obviously there could be other requests for other peers), eE.g., | (obviously there could be other requests for other peers), e.g., | |||
"Call customerservice@example.org". The semantics of this request are | "Call customerservice@example.org". The semantics of this request are | |||
that the media stream from the camera and microphone will only be | that the media stream from the camera and microphone will only be | |||
routed through a connection which has been cryptographically verified | routed through a connection which has been cryptographically verified | |||
(through the IdP mechanism or an X.509 certificate in the DTLS-SRTP | (through the IdP mechanism or an X.509 certificate in the DTLS-SRTP | |||
handshake) as being associated with the stated identity. Note that it | handshake) as being associated with the stated identity. Note that it | |||
is unlikely that browsers would have X.509 certificates, but servers | is unlikely that browsers would have X.509 certificates, but servers | |||
might. Browsers servicing such requests SHOULD clearly indicate that | might. Browsers servicing such requests <bcp14>SHOULD</bcp14> clearly indicate that | |||
identity to the user when asking for permission. The idea behind this | identity to the user when asking for permission. The idea behind this | |||
type of permissions is that a user might have a fairly narrow list of | type of permissions is that a user might have a fairly narrow list of | |||
peers he is willing to communicate with, e.g., "my mother" rather than | peers they are willing to communicate with, e.g., "my mother" rather t han | |||
"anyone on Facebook". Narrow permissions grants allow the browser to | "anyone on Facebook". Narrow permissions grants allow the browser to | |||
do that enforcement. | do that enforcement. | |||
</t> | </t> | |||
<dl newline="false" spacing="normal" indent="3" pn="section-6.2-5"> | ||||
<t> | <dt pn="section-6.2-5.1">API Requirement:</dt> | |||
<list style="hanging"> | <dd pn="section-6.2-5.2"> | |||
<t hangText="API Requirement:"> | The API <bcp14>MUST</bcp14> provide a mechanism for the requesting | |||
The API MUST provide a mechanism for the requesting JS to | JS to | |||
relinquish the ability to see or modify the media (e.g., via | relinquish the ability to see or modify the media (e.g., via | |||
MediaStream.record()). Combined with secure authentication of the | MediaStream.record()). Combined with secure authentication of the | |||
communicating peer, this allows a user to be sure that the calling | communicating peer, this allows a user to be sure that the calling | |||
site is not accessing or modifying their conversion. | site is not accessing or modifying their conversion. | |||
</t> | </dd> | |||
</list> | </dl> | |||
</t> | <dl newline="false" spacing="normal" indent="3" pn="section-6.2-6"> | |||
<dt pn="section-6.2-6.1">UI Requirement:</dt> | ||||
<t> | <dd pn="section-6.2-6.2"> | |||
<list style="hanging"> | The UI <bcp14>MUST</bcp14> clearly indicate when the user's camera | |||
<t hangText="UI Requirement:"> | and microphone | |||
The UI MUST clearly indicate when the user's camera and microphone | are in use. This indication <bcp14>MUST NOT</bcp14> be suppressib | |||
are in use. This indication MUST NOT be suppressable by the JS | le by the JS | |||
and MUST clearly indicate how to terminate device access, and | and <bcp14>MUST</bcp14> clearly indicate how to terminate device a | |||
ccess, and | ||||
provide a UI means to immediately stop camera/microphone input | provide a UI means to immediately stop camera/microphone input | |||
without the JS being able to prevent it. | without the JS being able to prevent it. | |||
</t> | </dd> | |||
</list> | </dl> | |||
</t> | <dl newline="false" spacing="normal" indent="3" pn="section-6.2-7"> | |||
<dt pn="section-6.2-7.1">UI Requirement:</dt> | ||||
<t> | <dd pn="section-6.2-7.2"> | |||
<list style="hanging"> | If the UI indication of camera/microphone use is displayed in the | |||
<t hangText="UI Requirement:"> | ||||
If the UI indication of camera/microphone use are displayed in the | ||||
browser such that minimizing the browser window would hide the | browser such that minimizing the browser window would hide the | |||
indication, or the JS creating an overlapping window would hide | indication, or the JS creating an overlapping window would hide | |||
the indication, then the browser SHOULD stop camera and microphone | the indication, then the browser <bcp14>SHOULD</bcp14> stop camera | |||
input when the indication is hidden. [Note: this may not be | and microphone | |||
input when the indication is hidden. (Note: This may not be | ||||
necessary in systems that are non-windows-based but that have good | necessary in systems that are non-windows-based but that have good | |||
notifications support, such as phones.] | notifications support, such as phones.) | |||
</t> | </dd> | |||
</list> | </dl> | |||
</t> | <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-6 | |||
.2-8"> | ||||
<t> | <li pn="section-6.2-8.1"> | |||
<list style="symbols"> | Browsers <bcp14>MUST NOT</bcp14> permit permanent screen or applic | |||
<t> | ation sharing | |||
Browsers MUST NOT permit permanent screen or application sharing | ||||
permissions to be installed as a response to a JS request for | permissions to be installed as a response to a JS request for | |||
permissions. Instead, they must require some other user action | permissions. Instead, they must require some other user action | |||
such as a permissions setting or an application install experience | such as a permissions setting or an application install experience | |||
to grant permission to a site. | to grant permission to a site. | |||
</t> | </li> | |||
<t> | <li pn="section-6.2-8.2"> | |||
Browsers MUST provide a separate dialog request for | Browsers <bcp14>MUST</bcp14> provide a separate dialog request for | |||
screen/application sharing permissions even if the media request | screen/application sharing permissions even if the media request | |||
is made at the same time as camera and microphone. | is made at the same time as the request for camera and microphone | |||
</t> | permissions. | |||
</li> | ||||
<t> | <li pn="section-6.2-8.3"> | |||
The browser MUST indicate any windows which are currently being | The browser <bcp14>MUST</bcp14> indicate any windows which are cur | |||
shared in some unambiguous way. Windows which are not visible MUST | rently being | |||
NOT be shared even if the application is being shared. If the | shared in some unambiguous way. Windows which are not visible <bcp | |||
screen is being shared, then that MUST be indicated. | 14>MUST NOT</bcp14> be shared even if the application is being shared. If the | |||
</t> | screen is being shared, then that <bcp14>MUST</bcp14> be indicated | |||
</list> | . | |||
</t> | </li> | |||
</ul> | ||||
<t> | <t indent="0" pn="section-6.2-9"> | |||
Browsers MAY permit the formation of data channels without any direct | Browsers <bcp14>MAY</bcp14> permit the formation of data channels with | |||
out any direct | ||||
user approval. Because sites can always tunnel data through the | user approval. Because sites can always tunnel data through the | |||
server, further restrictions on the data channel do not provide any | server, further restrictions on the data channel do not provide any | |||
additional security. (See <xref | additional security. (See <xref target="sec.proposal.communications.c | |||
target="sec.proposal.communications.consent"/> for a related issue). | onsent" format="default" sectionFormat="of" derivedContent="Section 6.3"/> for a | |||
related issue.) | ||||
</t> | </t> | |||
<t> | <t indent="0" pn="section-6.2-10"> | |||
Implementations which support some form of direct user authentication | Implementations which support some form of direct user authentication | |||
SHOULD also provide a policy by which a user can authorize calls only | <bcp14>SHOULD</bcp14> also provide a policy by which a user can author ize calls only | |||
to specific communicating peers. Specifically, the implementation | to specific communicating peers. Specifically, the implementation | |||
SHOULD provide the following interfaces/controls: | <bcp14>SHOULD</bcp14> provide the following interfaces/controls: | |||
</t> | </t> | |||
<t> | <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-6 | |||
<list style="symbols"> | .2-11"> | |||
<t> | <li pn="section-6.2-11.1"> | |||
Allow future calls to this verified user. | Allow future calls to this verified user. | |||
</t> | </li> | |||
<t> | <li pn="section-6.2-11.2"> | |||
Allow future calls to any verified user who is in my system | Allow future calls to any verified user who is in my system | |||
address book (this only works with address book integration, of | address book (this only works with address book integration, of | |||
course). | course). | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | <t indent="0" pn="section-6.2-12"> | |||
<t> | Implementations <bcp14>SHOULD</bcp14> also provide a different user in | |||
Implementations SHOULD also provide a different user interface | terface | |||
indication when calls are in progress to users whose identities are | indication when calls are in progress to users whose identities are | |||
directly verifiable. <xref target="sec.proposal.comsec"/> provides | directly verifiable. <xref target="sec.proposal.comsec" format="defau lt" sectionFormat="of" derivedContent="Section 6.5"/> provides | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="sec.proposal.communications.consent" numbered="true" toc= | ||||
<section title="Communications Consent" anchor="sec.proposal.communication | "include" removeInRFC="false" pn="section-6.3"> | |||
s.consent"> | <name slugifiedName="name-communications-consent">Communications Consent | |||
</name> | ||||
<t> | <t indent="0" pn="section-6.3-1"> | |||
Browser client implementations of WebRTC MUST implement ICE. Server | Browser client implementations of WebRTC <bcp14>MUST</bcp14> implement | |||
gateway implementations which operate only at public IP addresses MUST | ICE. Server | |||
implement either full ICE or ICE-Lite <xref target="RFC8445"/>. | gateway implementations which operate only at public IP addresses <bcp | |||
14>MUST</bcp14> | ||||
implement either full ICE or ICE-Lite <xref target="RFC8445" format="d | ||||
efault" sectionFormat="of" derivedContent="RFC8445"/>. | ||||
</t> | </t> | |||
<t> | <t indent="0" pn="section-6.3-2"> | |||
Browser implementations MUST verify reachability via ICE prior to | Browser implementations <bcp14>MUST</bcp14> verify reachability via IC | |||
E prior to | ||||
sending any non-ICE packets to a given destination. Implementations | sending any non-ICE packets to a given destination. Implementations | |||
MUST NOT provide the ICE transaction ID to JavaScript during the | <bcp14>MUST NOT</bcp14> provide the ICE transaction ID to JavaScript d uring the | |||
lifetime of the transaction (i.e., during the period when the ICE | lifetime of the transaction (i.e., during the period when the ICE | |||
stack would accept a new response for that transaction). The JS MUST | stack would accept a new response for that transaction). The JS <bcp1 | |||
NOT be permitted to control the local ufrag and password, though it of | 4>MUST NOT</bcp14> be permitted to control the local ufrag and password, though | |||
it of | ||||
course knows it. | course knows it. | |||
</t> | </t> | |||
<t> <!-- FIXME: phrasing of first sentence still awkward --> | <t indent="0" pn="section-6.3-3"> | |||
While continuing consent is required, the ICE <xref | While continuing consent is required, the ICE <xref target="RFC8445" s | |||
target="RFC8445"/>; Section 10 keepalives use STUN Binding Indications | ectionFormat="comma" section="11" format="default" derivedLink="https://rfc-edit | |||
which are | or.org/rfc/rfc8445#section-11" derivedContent="RFC8445"/> keepalives use STUN Bi | |||
nding Indications, which are | ||||
one-way and therefore not sufficient. The current WG consensus is to | one-way and therefore not sufficient. The current WG consensus is to | |||
use ICE Binding Requests for continuing consent freshness. ICE already | use ICE Binding Requests for continuing consent freshness. ICE already | |||
requires that implementations respond to such requests, so this | requires that implementations respond to such requests, so this | |||
approach is maximally compatible. A separate document will profile the | approach is maximally compatible. A separate document will profile the | |||
ICE timers to be used; see <xref target="RFC7675"/>. | ICE timers to be used; see <xref target="RFC7675" format="default" sec tionFormat="of" derivedContent="RFC7675"/>. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="sec.proposal.ip.location.privacy" numbered="true" toc="in | ||||
<section title="IP Location Privacy" anchor="sec.proposal.ip.location.priv | clude" removeInRFC="false" pn="section-6.4"> | |||
acy"> | <name slugifiedName="name-ip-location-privacy">IP Location Privacy</name | |||
<t> | > | |||
<t indent="0" pn="section-6.4-1"> | ||||
A side effect of the default ICE behavior is that the peer learns | A side effect of the default ICE behavior is that the peer learns | |||
one's IP address, which leaks large amounts of location | one's IP address, which leaks large amounts of location | |||
information. This has negative privacy consequences in some | information. This has negative privacy consequences in some | |||
circumstances. The API requirements in this section are intended to | circumstances. The API requirements in this section are intended to | |||
mitigate this issue. Note that these requirements are not intended to | mitigate this issue. Note that these requirements are not intended to | |||
protect the user's IP address from a malicious site. In general, the | protect the user's IP address from a malicious site. In general, the | |||
site will learn at least a user's server reflexive address from any | site will learn at least a user's server-reflexive address from any | |||
HTTP transaction. Rather, these requirements are intended to allow a | HTTP transaction. Rather, these requirements are intended to allow a | |||
site to cooperate with the user to hide the user's IP address from the | site to cooperate with the user to hide the user's IP address from the | |||
other side of the call. Hiding the user's IP address from the server | other side of the call. Hiding the user's IP address from the server | |||
requires some sort of explicit privacy preserving mechanism on the | requires some sort of explicit privacy-preserving mechanism on the | |||
client (e.g., Tor Browser [https://www.torproject.org/projects/torbrow | client (e.g., Tor Browser <eref brackets="angle" target="https://www.t | |||
ser.html.en]) and | orproject.org/projects/torbrowser.html.en"/>) and | |||
is out of scope for this specification. | is out of scope for this specification. | |||
</t> | </t> | |||
<dl newline="false" spacing="normal" indent="3" pn="section-6.4-2"> | ||||
<t> | <dt pn="section-6.4-2.1">API Requirement:</dt> | |||
<list style="hanging"> | <dd pn="section-6.4-2.2"> | |||
<t hangText="API Requirement:"> | The API <bcp14>MUST</bcp14> provide a mechanism to allow the JS to | |||
The API MUST provide a mechanism to allow the JS to suppress ICE | suppress ICE | |||
negotiation (though perhaps to allow candidate gathering) until | negotiation (though perhaps to allow candidate gathering) until | |||
the user has decided to answer the call [note: determining when | the user has decided to answer the call. (Note: Determining when | |||
the call has been answered is a question for the JS.] This | the call has been answered is a question for the JS.) This | |||
enables a user to prevent a peer from learning their IP address if | enables a user to prevent a peer from learning their IP address if | |||
they elect not to answer a call and also from learning whether the | they elect not to answer a call and also from learning whether the | |||
user is online. | user is online. | |||
</t> | </dd> | |||
</list> | </dl> | |||
</t> | <dl newline="false" spacing="normal" indent="3" pn="section-6.4-3"> | |||
<dt pn="section-6.4-3.1">API Requirement:</dt> | ||||
<t> | <dd pn="section-6.4-3.2"> | |||
<list style="hanging"> | The API <bcp14>MUST</bcp14> provide a mechanism for the calling ap | |||
<t hangText="API Requirement:"> | plication JS to | |||
The API MUST provide a mechanism for the calling application JS to | ||||
indicate that only TURN candidates are to be used. This prevents | indicate that only TURN candidates are to be used. This prevents | |||
the peer from learning one's IP address at all. This mechanism | the peer from learning one's IP address at all. This mechanism | |||
MUST also permit suppression of the related address field, since | <bcp14>MUST</bcp14> also permit suppression of the related address field, since | |||
that leaks local addresses. | that leaks local addresses. | |||
</t> | </dd> | |||
</list> | </dl> | |||
</t> | <dl newline="false" spacing="normal" indent="3" pn="section-6.4-4"> | |||
<dt pn="section-6.4-4.1">API Requirement:</dt> | ||||
<t> | <dd pn="section-6.4-4.2"> | |||
<list style="hanging"> | The API <bcp14>MUST</bcp14> provide a mechanism for the calling ap | |||
<t hangText="API Requirement:"> | plication to | |||
The API MUST provide a mechanism for the calling application to | ||||
reconfigure an existing call to add non-TURN candidates. Taken | reconfigure an existing call to add non-TURN candidates. Taken | |||
together, this and the previous requirement allow ICE negotiation | together, this and the previous requirement allow ICE negotiation | |||
to start immediately on incoming call notification, thus reducing | to start immediately on incoming call notification, thus reducing | |||
post-dial delay, but also to avoid disclosing the user's IP | post-dial delay, but also to avoid disclosing the user's IP | |||
address until they have decided to answer. They also allow users | address until they have decided to answer. They also allow users | |||
to completely hide their IP address for the duration of the | to completely hide their IP address for the duration of the | |||
call. Finally, they allow a mechanism for the user to optimize | call. Finally, they allow a mechanism for the user to optimize | |||
performance by reconfiguring to allow non-TURN candidates during | performance by reconfiguring to allow non-TURN candidates during | |||
an active call if the user decides they no longer need to hide | an active call if the user decides they no longer need to hide | |||
their IP address | their IP address. | |||
</t> | </dd> | |||
</list> | </dl> | |||
</t> | <t indent="0" pn="section-6.4-5"> | |||
<t> | ||||
Note that some enterprises may operate proxies and/or NATs designed to | Note that some enterprises may operate proxies and/or NATs designed to | |||
hide internal IP addresses from the outside world. WebRTC provides no | hide internal IP addresses from the outside world. WebRTC provides no | |||
explicit mechanism to allow this function. Either such enterprises | explicit mechanism to allow this function. Either such enterprises | |||
need to proxy the HTTP/HTTPS and modify the SDP and/or the JS, or | need to proxy the HTTP/HTTPS and modify the SDP and/or the JS, or | |||
there needs to be browser support to set the "TURN-only" policy | there needs to be browser support to set the "TURN-only" policy | |||
regardless of the site's preferences. | regardless of the site's preferences. | |||
</t> | </t> | |||
<t indent="0" pn="section-6.4-6"> | ||||
Note: These requirements are intended to allow sites to conceal the | ||||
user's IP address from the peer. For guidance on concealing the | ||||
user's IP address from the calling site see <xref target="RFC8828" for | ||||
mat="default" sectionFormat="of" derivedContent="RFC8828"/>. | ||||
</t> | ||||
</section> | </section> | |||
<section anchor="sec.proposal.comsec" numbered="true" toc="include" remove | ||||
<section title="Communications Security" anchor="sec.proposal.comsec"> | InRFC="false" pn="section-6.5"> | |||
<t> | <name slugifiedName="name-communications-security">Communications Securi | |||
Implementations MUST support SRTP <xref target="RFC3711"/>. | ty</name> | |||
Implementations MUST support DTLS <xref target="RFC6347"/> and | <t indent="0" pn="section-6.5-1"> | |||
DTLS-SRTP <xref target="RFC5763"/><xref target="RFC5764"/> for SRTP | Implementations <bcp14>MUST</bcp14> support SRTP <xref target="RFC3711 | |||
keying. Implementations MUST support SCTP over DTLS <xref | " format="default" sectionFormat="of" derivedContent="RFC3711"/>. | |||
target="RFC8261"/>. | Implementations <bcp14>MUST</bcp14> support DTLS <xref target="RFC6347 | |||
" format="default" sectionFormat="of" derivedContent="RFC6347"/> and | ||||
DTLS-SRTP <xref target="RFC5763" format="default" sectionFormat="of" d | ||||
erivedContent="RFC5763"/> <xref target="RFC5764" format="default" sectionFormat= | ||||
"of" derivedContent="RFC5764"/> for SRTP | ||||
keying. Implementations <bcp14>MUST</bcp14> support SCTP over DTLS <xr | ||||
ef target="RFC8261" format="default" sectionFormat="of" derivedContent="RFC8261" | ||||
/>. | ||||
</t> | </t> | |||
<t> | <t indent="0" pn="section-6.5-2"> | |||
All media channels MUST be secured via SRTP and SRTCP. Media traffic | All media channels <bcp14>MUST</bcp14> be secured via SRTP and the | |||
MUST NOT | Secure Real-time Transport Control Protocol (SRTCP). Media traffic <b | |||
be sent over plain (unencrypted) RTP or RTCP; that is, implementations | cp14>MUST NOT</bcp14> | |||
MUST | be sent over plain (unencrypted) RTP or RTCP; that is, implementations | |||
NOT negotiate cipher suites with NULL encryption modes. DTLS-SRTP | <bcp14>MUST NOT</bcp14> negotiate cipher suites with NULL encryption modes. DT | |||
MUST be offered for every media channel. WebRTC implementations MUST | LS-SRTP | |||
NOT | <bcp14>MUST</bcp14> be offered for every media channel. WebRTC implem | |||
offer SDP Security Descriptions <xref target="RFC4568"/> or select it | entations <bcp14>MUST NOT</bcp14> | |||
if offered. | offer SDP security descriptions <xref target="RFC4568" format="default | |||
A SRTP MKI MUST NOT be used. | " sectionFormat="of" derivedContent="RFC4568"/> or select it if offered. | |||
An SRTP Master Key Identifier (MKI) <bcp14>MUST NOT</bcp14> be used. | ||||
</t> | </t> | |||
<t> | <t indent="0" pn="section-6.5-3"> | |||
All data channels MUST be secured via DTLS. | All data channels <bcp14>MUST</bcp14> be secured via DTLS. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-6.5-4"> | |||
All Implementations MUST support DTLS 1.2 with the | All implementations <bcp14>MUST</bcp14> support DTLS 1.2 with the | |||
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 cipher suite and the | TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 cipher suite and the | |||
<xref target="FIPS186">P-256 curve</xref>. | <xref target="FIPS186" format="default" sectionFormat="of" derivedCont ent="FIPS186">P-256 curve</xref>. | |||
Earlier drafts of this specification required | Earlier drafts of this specification required | |||
DTLS 1.0 with the cipher suite | DTLS 1.0 with the cipher suite | |||
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, and at the time of this | TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, and at the time of this | |||
writing some implementations do not support DTLS 1.2; | writing some implementations do not support DTLS 1.2; | |||
endpoints which support only DTLS 1.2 might encounter | endpoints which support only DTLS 1.2 might encounter | |||
interoperability issues. | interoperability issues. | |||
The DTLS-SRTP protection profile | The DTLS-SRTP protection profile | |||
SRTP_AES128_CM_HMAC_SHA1_80 MUST be supported for | SRTP_AES128_CM_HMAC_SHA1_80 <bcp14>MUST</bcp14> be supported for | |||
SRTP. | SRTP. | |||
Implementations | Implementations | |||
MUST favor cipher suites which support (Perfect Forward Secrecy) PFS | <bcp14>MUST</bcp14> favor cipher suites which support Forward Secrecy | |||
over non-PFS cipher suites and SHOULD favor AEAD over non-AEAD cipher | (FS) | |||
suites. | over non-FS cipher suites and <bcp14>SHOULD</bcp14> favor | |||
Authenticated Encryption with Associated Data (AEAD) over non-AEAD cip | ||||
her suites. | ||||
Note: the IETF is in the process of standardizing DTLS 1.3 | ||||
<xref target="I-D.ietf-tls-dtls13" format="default" sectionFormat="of" | ||||
derivedContent="TLS-DTLS13"/>. | ||||
</t> | </t> | |||
<t indent="0" pn="section-6.5-5"> | ||||
<t> | Implementations <bcp14>MUST NOT</bcp14> implement DTLS renegotiation a | |||
Implementations MUST NOT implement DTLS renegotiation and MUST reject | nd <bcp14>MUST</bcp14> reject | |||
it with a "no_renegotiation" alert if offered.</t> | it with a "no_renegotiation" alert if offered.</t> | |||
<t indent="0" pn="section-6.5-6"> | ||||
<t> | Endpoints <bcp14>MUST NOT</bcp14> implement TLS False Start <xref targ | |||
Endpoints MUST NOT implement TLS False Start <xref target="RFC7918"/>. | et="RFC7918" format="default" sectionFormat="of" derivedContent="RFC7918"/>.</t> | |||
</t> | <dl newline="false" spacing="normal" indent="3" pn="section-6.5-7"> | |||
<dt pn="section-6.5-7.1">API Requirement:</dt> | ||||
<t> | <dd pn="section-6.5-7.2"> | |||
<list style="hanging"> | The API <bcp14>MUST</bcp14> generate a new authentication key pair | |||
<t hangText="API Requirement:"> | for every new | |||
The API MUST generate a new authentication key pair for every new | ||||
call by default. This is intended to allow for unlinkability. | call by default. This is intended to allow for unlinkability. | |||
</t> | </dd> | |||
<t hangText="API Requirement:"> | <dt pn="section-6.5-7.3">API Requirement:</dt> | |||
The API MUST provide a means to reuse a key pair for calls. This | <dd pn="section-6.5-7.4"> | |||
The API <bcp14>MUST</bcp14> provide a means to reuse a key pair fo | ||||
r calls. This | ||||
can be used to enable key continuity-based authentication, and | can be used to enable key continuity-based authentication, and | |||
could be used to amortize key generation costs. | could be used to amortize key generation costs. | |||
</t> | </dd> | |||
<t hangText="API Requirement:"> | <dt pn="section-6.5-7.5">API Requirement:</dt> | |||
<dd pn="section-6.5-7.6"> | ||||
Unless | Unless | |||
the user specifically configures an external key pair, different | the user specifically configures an external key pair, different | |||
key pairs MUST be used for each origin. (This avoids creating a | key pairs <bcp14>MUST</bcp14> be used for each origin. (This avoid s creating a | |||
super-cookie.) | super-cookie.) | |||
</t> | </dd> | |||
<t hangText="API Requirement:"> | <dt pn="section-6.5-7.7">API Requirement:</dt> | |||
When DTLS-SRTP is used, the API MUST NOT permit the JS to obtain | <dd pn="section-6.5-7.8"> | |||
When DTLS-SRTP is used, the API <bcp14>MUST NOT</bcp14> permit the | ||||
JS to obtain | ||||
the negotiated keying material. This requirement preserves the | the negotiated keying material. This requirement preserves the | |||
end-to-end security of the media. | end-to-end security of the media. | |||
</t> | </dd> | |||
</list> | </dl> | |||
</t> | <dl newline="false" spacing="normal" indent="3" pn="section-6.5-8"> | |||
<dt pn="section-6.5-8.1">UI Requirements:</dt> | ||||
<t> | <dd pn="section-6.5-8.2"> | |||
<list style="hanging"> | A user-oriented client <bcp14>MUST</bcp14> provide an "inspector" | |||
<t hangText="UI Requirements: "> | interface which | |||
A user-oriented client MUST provide an "inspector" interface which | allows the user to determine the "security characteristics" of the | |||
allows the user to determine the security characteristics of the | ||||
media. | media. | |||
</t> | </dd> | |||
<t> | <dt pn="section-6.5-8.3"/> | |||
The following properties SHOULD be displayed "up-front" in the | <dd pn="section-6.5-8.4"> | |||
The following properties <bcp14>SHOULD</bcp14> be displayed "up-fr | ||||
ont" in the | ||||
browser chrome, i.e., without requiring the user to ask for them: | browser chrome, i.e., without requiring the user to ask for them: | |||
</t> | </dd> | |||
<t> | <dt pn="section-6.5-8.5"/> | |||
<list style="symbols"> | <dd pn="section-6.5-8.6"> | |||
<t> | <ul spacing="normal" bare="false" empty="false" indent="3" pn="secti | |||
A client MUST provide a user interface through which a user | on-6.5-8.6.1"> | |||
may determine the security characteristics for | <li pn="section-6.5-8.6.1.1"> | |||
currently-displayed audio and video stream(s) | A client <bcp14>MUST</bcp14> provide a user interface through | |||
</t> | which a user | |||
may determine the "security characteristics" for | ||||
<t> | currently displayed audio and video stream(s). | |||
A client MUST provide a user interface through which a user | </li> | |||
may determine the security characteristics for transmissions | <li pn="section-6.5-8.6.1.2"> | |||
A client <bcp14>MUST</bcp14> provide a user interface through | ||||
which a user | ||||
may determine the "security characteristics" for transmissions | ||||
of their microphone audio and camera video. | of their microphone audio and camera video. | |||
</t> | </li> | |||
<li pn="section-6.5-8.6.1.3"> | ||||
<t> | ||||
If the far endpoint was directly verified, either via a | If the far endpoint was directly verified, either via a | |||
third-party verifiable X.509 certificate or via a Web IdP | third-party verifiable X.509 certificate or via a Web IdP | |||
mechanism (see <xref target="sec.generic.idp"/>) the "security | mechanism (see <xref target="sec.generic.idp" format="default" | |||
characteristics" MUST include the verified information. X.509 | sectionFormat="of" derivedContent="Section 7"/>), the "security | |||
characteristics" <bcp14>MUST</bcp14> include the verified info | ||||
rmation. X.509 | ||||
identities and Web IdP identities have similar semantics and | identities and Web IdP identities have similar semantics and | |||
should be displayed in a similar way. | should be displayed in a similar way. | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | </dd> | |||
<t> | <dt pn="section-6.5-8.7"/> | |||
</t> | <dd pn="section-6.5-8.8"> | |||
<t> | ||||
The following properties are more likely to require some | The following properties are more likely to require some | |||
"drill-down" from the user: | "drill-down" from the user: | |||
</t> | </dd> | |||
<t> | <dt pn="section-6.5-8.9"/> | |||
<list style="symbols"> | <dd pn="section-6.5-8.10"> | |||
<t> | <ul spacing="normal" bare="false" empty="false" indent="3" pn="secti | |||
The "security characteristics" MUST indicate the cryptographic | on-6.5-8.10.1"> | |||
algorithms in use (For example: "AES-CBC".) | <li pn="section-6.5-8.10.1.1"> | |||
</t> | The "security characteristics" <bcp14>MUST</bcp14> indicate th | |||
e cryptographic | ||||
<t> | algorithms in use (for example, "AES-CBC"). | |||
The "security characteristics" MUST indicate whether PFS is | </li> | |||
<li pn="section-6.5-8.10.1.2"> | ||||
The "security characteristics" <bcp14>MUST</bcp14> indicate wh | ||||
ether FS is | ||||
provided. | provided. | |||
</t> | </li> | |||
<li pn="section-6.5-8.10.1.3"> | ||||
<t> | The "security characteristics" <bcp14>MUST</bcp14> include som | |||
The "security characteristics" MUST include some mechanism to | e mechanism to | |||
allow an out-of-band verification of the peer, such as a | allow an out-of-band verification of the peer, such as a | |||
certificate fingerprint or a Short Authentication String (SAS) . | certificate fingerprint or a Short Authentication String (SAS) . | |||
These are compared by the peers to authenticate one another. | These are compared by the peers to authenticate one another. | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | </dd> | |||
</list> | </dl> | |||
</t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="sec.generic.idp" numbered="true" toc="include" removeInRFC= | ||||
<section title="Web-Based Peer Authentication" anchor="sec.generic.idp"> | "false" pn="section-7"> | |||
<t> | <name slugifiedName="name-web-based-peer-authenticati">Web-Based Peer Auth | |||
entication</name> | ||||
<t indent="0" pn="section-7-1"> | ||||
NOTE: The mechanism described in this section was designed relatively | ||||
early in the RTCWEB process. In retrospect, the WG was too optimistic | ||||
about the enthusiasm for this kind of mechanism. At the time of publicat | ||||
ion, | ||||
it has not been widely adopted or implemented. It appears in this docume | ||||
nt | ||||
as a description of the state of the art as of this writing. | ||||
</t> | ||||
<t indent="0" pn="section-7-2"> | ||||
In a number of cases, it is desirable for the endpoint (i.e., the | In a number of cases, it is desirable for the endpoint (i.e., the | |||
browser) to be able to directly identify the endpoint on the other | browser) to be able to directly identify the endpoint on the other | |||
side without trusting the signaling service to which they are | side without trusting the signaling service to which they are | |||
connected. For instance, users may be making a call via a federated | connected. For instance, users may be making a call via a federated | |||
system where they wish to get direct authentication of the other | system where they wish to get direct authentication of the other | |||
side. Alternately, they may be making a call on a site which they | side. Alternately, they may be making a call on a site which they | |||
minimally trust (such as a poker site) but to someone who has an | minimally trust (such as a poker site) but to someone who has an | |||
identity on a site they do trust (such as a social network.) | identity on a site they do trust (such as a social network). | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-7-3"> | |||
Recently, a number of Web-based identity technologies (OAuth, | Recently, a number of Web-based identity technologies (OAuth, | |||
Facebook Connect etc.) have been developed. While the | Facebook Connect, etc.) have been developed. While the | |||
details vary, what these technologies share is that they have a | details vary, what these technologies share is that they have a | |||
Web-based (i.e., HTTP/HTTPS) identity provider which attests to Alice' s | Web-based (i.e., HTTP/HTTPS) IdP which attests to Alice's | |||
identity. For instance, if Alice has an account at example.org, Alice could | identity. For instance, if Alice has an account at example.org, Alice could | |||
use the example.org identity provider to prove to others that Alice is | use the example.org IdP to prove to others that Alice is | |||
alice@example.org. The development of these technologies allows us to | alice@example.org. The development of these technologies allows us to | |||
separate calling from identity provision: Alice could call you on a | separate calling from identity provision: Alice could call you on a | |||
poker site but identify herself as alice@example.org. | poker site but identify herself as alice@example.org. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-7-4"> | |||
Whatever the underlying technology, the general principle is that the | Whatever the underlying technology, the general principle is that the | |||
party which is being authenticated is NOT the signaling site but | party which is being authenticated is NOT the signaling site but | |||
rather the user (and their browser). Similarly, the relying party is | rather the user (and their browser). Similarly, the Relying Party is | |||
the browser and not the signaling site. Thus, the browser MUST | the browser and not the signaling site. Thus, the browser <bcp14>MUST | |||
</bcp14> | ||||
generate the input to the IdP assertion process and | generate the input to the IdP assertion process and | |||
display the results of the verification process to the user | display the results of the verification process to the user | |||
in a way which cannot be imitated by the calling site. | in a way which cannot be imitated by the calling site. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-7-5"> | |||
The mechanisms defined in this document do not require the browser to | The mechanisms defined in this document do not require the browser to | |||
implement any particular identity protocol or to support any | implement any particular identity protocol or to support any | |||
particular IdP. Instead, this document provides a generic interface | particular IdP. Instead, this document provides a generic interface | |||
which any IdP can implement. Thus, new IdPs and protocols can be | which any IdP can implement. Thus, new IdPs and protocols can be | |||
introduced without change to either the browser or the calling | introduced without change to either the browser or the calling | |||
service. This avoids the need to make a commitment to any particular | service. This avoids the need to make a commitment to any particular | |||
identity protocol, although browsers may opt to directly implement | identity protocol, although browsers may opt to directly implement | |||
some identity protocols in order to provide superior performance or UI | some identity protocols in order to provide superior performance or UI | |||
properties. | properties. | |||
</t> | </t> | |||
<section anchor="sec.trust-relationships" numbered="true" toc="include" re | ||||
<section title="Trust Relationships: IdPs, APs, and RPs" anchor="sec.tru | moveInRFC="false" pn="section-7.1"> | |||
st-relationships"> | <name slugifiedName="name-trust-relationships-idps-ap">Trust Relationshi | |||
<t> | ps: IdPs, APs, and RPs</name> | |||
<t indent="0" pn="section-7.1-1"> | ||||
Any federated identity protocol has three major participants: | Any federated identity protocol has three major participants: | |||
</t> | </t> | |||
<t> | <dl newline="false" spacing="normal" indent="3" pn="section-7.1-2"> | |||
<list style="hanging"> | <dt pn="section-7.1-2.1">Authenticating Party (AP):</dt> | |||
<t hangText="Authenticating Party (AP):"> | <dd pn="section-7.1-2.2"> | |||
The entity which is trying to establish its identity. | The entity which is trying to establish its identity. | |||
</t> | </dd> | |||
<t> | <dt pn="section-7.1-2.3">Identity Provider (IdP):</dt> | |||
</t> | <dd pn="section-7.1-2.4"> | |||
<t hangText="Identity Provider (IdP):"> | ||||
The entity which is vouching for the AP's identity. | The entity which is vouching for the AP's identity. | |||
</t> | </dd> | |||
<dt pn="section-7.1-2.5">Relying Party (RP):</dt> | ||||
<t> | <dd pn="section-7.1-2.6"> | |||
</t> | ||||
<t hangText="Relying Party (RP):"> | ||||
The entity which is trying to verify the AP's identity. | The entity which is trying to verify the AP's identity. | |||
</t> | </dd> | |||
</list> | </dl> | |||
</t> | <t indent="0" pn="section-7.1-3"> | |||
<t> | ||||
The AP and the IdP have an account relationship of some kind: the AP | The AP and the IdP have an account relationship of some kind: the AP | |||
registers with the IdP and is able to subsequently authenticate | registers with the IdP and is able to subsequently authenticate | |||
directly to the IdP (e.g., with a password). This means that the | directly to the IdP (e.g., with a password). This means that the | |||
browser must somehow know which IdP(s) the user has an account | browser must somehow know which IdP(s) the user has an account | |||
relationship with. This can either be something that the user | relationship with. This can either be something that the user | |||
configures into the browser or that is configured at the calling | configures into the browser or that is configured at the calling | |||
site and then provided to the PeerConnection by the Web application | site and then provided to the PeerConnection by the Web application | |||
at the calling site. The use case for having this information | at the calling site. The use case for having this information | |||
configured into the browser is that the user may "log into" the | configured into the browser is that the user may "log into" the | |||
browser to bind it to some identity. This is becoming common in new | browser to bind it to some identity. This is becoming common in new | |||
browsers. However, it should also be possible for the IdP | browsers. However, it should also be possible for the IdP | |||
information to simply be provided by the calling application. | information to simply be provided by the calling application. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-7.1-4"> | |||
At a high level there are two kinds of IdPs: | At a high level, there are two kinds of IdPs: | |||
</t> | </t> | |||
<t> | <dl newline="false" spacing="normal" indent="3" pn="section-7.1-5"> | |||
<list style="hanging"> | <dt pn="section-7.1-5.1">Authoritative:</dt> | |||
<t hangText="Authoritative: "> | <dd pn="section-7.1-5.2"> | |||
IdPs which have verifiable control of some section of the | IdPs which have verifiable control of some section of the | |||
identity space. For instance, in the realm of e-mail, the | identity space. For instance, in the realm of email, the | |||
operator of "example.com" has complete control of the namespace | operator of "example.com" has complete control of the namespace | |||
ending in "@example.com". Thus, "alice@example.com" is whoever | ending in "@example.com". Thus, "alice@example.com" is whoever | |||
the operator says it is. Examples of systems with authoritative | the operator says it is. Examples of systems with authoritative | |||
identity providers include DNSSEC, RFC 4474, and Facebook | IdPs include DNSSEC, an identity system for SIP | |||
(see <xref target="RFC8224" format="default" sectionFormat="of" | ||||
derivedContent="RFC8224"/>), and Facebook | ||||
Connect (Facebook identities only make sense within the context | Connect (Facebook identities only make sense within the context | |||
of the Facebook system). | of the Facebook system). | |||
</t> | </dd> | |||
<dt pn="section-7.1-5.3">Third-Party:</dt> | ||||
<t> | <dd pn="section-7.1-5.4"> | |||
</t> | ||||
<t hangText="Third-Party: "> | ||||
IdPs which don't have control of their section of the identity | IdPs which don't have control of their section of the identity | |||
space but instead verify user's identities via some unspecified | space but instead verify users' identities via some unspecified | |||
mechanism and then attest to it. Because the IdP doesn't | mechanism and then attest to it. Because the IdP doesn't | |||
actually control the namespace, RPs need to trust that the IdP | actually control the namespace, RPs need to trust that the IdP | |||
is correctly verifying AP identities, and there can potentially | is correctly verifying AP identities, and there can potentially | |||
be multiple IdPs attesting to the same section of the identity | be multiple IdPs attesting to the same section of the identity | |||
space. Probably the best-known example of a third-party identity | space. Probably the best-known example of a third-party IdP | |||
provider is SSL/TLS certificates, where there are a large number | is SSL/TLS certificates, where there are a large number of | |||
of | certificate authorities (CAs) all of whom can attest to any doma | |||
CAs all of whom can attest to any domain name. | in name. | |||
</t> | </dd> | |||
</list> | </dl> | |||
</t> | <t indent="0" pn="section-7.1-6"> | |||
<t> | ||||
If an AP is authenticating via an authoritative IdP, then the RP | If an AP is authenticating via an authoritative IdP, then the RP | |||
does not need to explicitly configure trust in the IdP at all. The | does not need to explicitly configure trust in the IdP at all. The | |||
identity mechanism can directly verify that the IdP indeed made the | identity mechanism can directly verify that the IdP indeed made the | |||
relevant identity assertion (a function provided by the mechanisms | relevant identity assertion (a function provided by the mechanisms | |||
in this document), and any assertion it makes about an identity for | in this document), and any assertion it makes about an identity for | |||
which it is authoritative is directly verifiable. Note that this | which it is authoritative is directly verifiable. Note that this | |||
does not mean that the IdP might not lie, but that is a | does not mean that the IdP might not lie, but that is a | |||
trustworthiness judgement that the user can make at the time he | trustworthiness judgement that the user can make at the time they | |||
looks at the identity. | look at the identity. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-7.1-7"> | |||
By contrast, if an AP is authenticating via a third-party IdP, the | By contrast, if an AP is authenticating via a third-party IdP, the | |||
RP needs to explicitly trust that IdP (hence the need for an | RP needs to explicitly trust that IdP (hence the need for an | |||
explicit trust anchor list in PKI-based SSL/TLS clients). The list | explicit trust anchor list in PKI-based SSL/TLS clients). The list | |||
of trustable IdPs needs to be configured directly into the browser, | of trustable IdPs needs to be configured directly into the browser, | |||
either by the user or potentially by the browser manufacturer. This | either by the user or potentially by the browser manufacturer. This | |||
is a significant advantage of authoritative IdPs and implies that if | is a significant advantage of authoritative IdPs and implies that if | |||
third-party IdPs are to be supported, the potential number needs to | third-party IdPs are to be supported, the potential number needs to | |||
be fairly small. | be fairly small. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="sec.overview" numbered="true" toc="include" removeInRFC=" | ||||
<section title="Overview of Operation" anchor="sec.overview"> | false" pn="section-7.2"> | |||
<t> | <name slugifiedName="name-overview-of-operation">Overview of Operation</ | |||
name> | ||||
<t indent="0" pn="section-7.2-1"> | ||||
In order to provide security without trusting the calling site, the | In order to provide security without trusting the calling site, the | |||
PeerConnection component of the browser must interact directly with | PeerConnection component of the browser must interact directly with | |||
the IdP. The details of the mechanism are described in the W3C API | the IdP. The details of the mechanism are described in the W3C API | |||
specification, but the general idea is that the PeerConnection | specification, but the general idea is that the PeerConnection | |||
component downloads JS from a specific location on the IdP dictated | component downloads JS from a specific location on the IdP dictated | |||
by the IdP domain name. That JS (the "IdP proxy") runs in an | by the IdP domain name. That JS (the "IdP proxy") runs in an | |||
isolated security context within the browser and the PeerConnection | isolated security context within the browser, and the PeerConnection | |||
talks to it via a secure message passing channel. | talks to it via a secure message passing channel. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-7.2-2"> | |||
Note that there are two logically separate functions here: | Note that there are two logically separate functions here: | |||
<list style="symbols"> | </t> | |||
<t> | <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-7 | |||
.2-3"> | ||||
<li pn="section-7.2-3.1"> | ||||
Identity assertion generation. | Identity assertion generation. | |||
</t> | </li> | |||
<t> | <li pn="section-7.2-3.2"> | |||
Identity assertion verification. | Identity assertion verification. | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | <t indent="0" pn="section-7.2-4"> | |||
<t> | The same IdP JS "endpoint" is used for both functions, but of course | |||
The same IdP JS "endpoint" is used for both functions but of course | ||||
a given IdP might behave differently and load new JS to perform one | a given IdP might behave differently and load new JS to perform one | |||
function or the other. | function or the other. | |||
</t> | </t> | |||
<figure> | <artwork name="" type="" align="left" alt="" pn="section-7.2-5"> | |||
<artwork><![CDATA[ | ||||
+--------------------------------------+ | +--------------------------------------+ | |||
| Browser | | | Browser | | |||
| | | | | | |||
| +----------------------------------+ | | | +----------------------------------+ | | |||
| | https://calling-site.example.com | | | | | https://calling-site.example.com | | | |||
| | | | | | | | | | |||
| | Calling JS Code | | | | | Calling JS Code | | | |||
| | ^ | | | | | ^ | | | |||
| +---------------|------------------+ | | | +---------------|------------------+ | | |||
| | API Calls | | | | API Calls | | |||
| v | | | v | | |||
| PeerConnection | | | PeerConnection | | |||
| ^ | | | ^ | | |||
| | API Calls | | | | API Calls | | |||
| +-----------|-------------+ | +---------------+ | | +-----------|-------------+ | +---------------+ | |||
| | v | | | | | | | v | | | | | |||
| | IdP Proxy |<-------->| Identity | | | | IdP Proxy |<-------->| Identity | | |||
| | | | | Provider | | | | | | | Provider | | |||
| | https://idp.example.org | | | | | | | https://idp.example.org | | | | | |||
| +-------------------------+ | +---------------+ | | +-------------------------+ | +---------------+ | |||
| | | | | | |||
+--------------------------------------+ | +--------------------------------------+ </artwork> | |||
]]></artwork> | <t indent="0" pn="section-7.2-6"> | |||
</figure> | ||||
<t> | ||||
When the PeerConnection object wants to interact with the IdP, the | When the PeerConnection object wants to interact with the IdP, the | |||
sequence of events is as follows: | sequence of events is as follows: | |||
<list style="numbers"> | </t> | |||
<t> | <ol spacing="normal" type="1" indent="adaptive" start="1" pn="section-7. | |||
2-7"> | ||||
<li pn="section-7.2-7.1" derivedCounter="1."> | ||||
The browser (the PeerConnection component) instantiates an IdP | The browser (the PeerConnection component) instantiates an IdP | |||
proxy. This allows the IdP to load whatever JS is necessary into | proxy. This allows the IdP to load whatever JS is necessary into | |||
the proxy. The resulting code runs in the IdP's security | the proxy. The resulting code runs in the IdP's security | |||
context. | context. | |||
</t> | </li> | |||
<t> | <li pn="section-7.2-7.2" derivedCounter="2."> | |||
The IdP registers an object with the browser that conforms to | The IdP registers an object with the browser that conforms to | |||
the API defined in <xref target="webrtc-api"/>. | the API defined in <xref target="webrtc-api" format="default" se | |||
</t> | ctionFormat="of" derivedContent="webrtc-api"/>. | |||
<t> | </li> | |||
<li pn="section-7.2-7.3" derivedCounter="3."> | ||||
The browser invokes methods on the object registered by the IdP | The browser invokes methods on the object registered by the IdP | |||
proxy to create or verify identity assertions. | proxy to create or verify identity assertions. | |||
</t> | </li> | |||
</list> | </ol> | |||
</t> | <t indent="0" pn="section-7.2-8"> | |||
<t> | ||||
This approach allows us to decouple the browser from any particular | This approach allows us to decouple the browser from any particular | |||
identity provider; the browser need only know how to load the IdP's | IdP; the browser need only know how to load the IdP's | |||
JavaScript--the location of which is determined based on the IdP's | JavaScript -- the location of which is determined based on the IdP's | |||
identity--and to call the generic API for requesting and verifying | identity -- and to call the generic API for requesting and verifying | |||
identity assertions. The IdP provides whatever logic is necessary to | identity assertions. The IdP provides whatever logic is necessary to | |||
bridge the generic protocol to the IdP's specific | bridge the generic protocol to the IdP's specific | |||
requirements. Thus, a single browser can support any number of | requirements. Thus, a single browser can support any number of | |||
identity protocols, including being forward compatible with IdPs | identity protocols, including being forward compatible with IdPs | |||
which did not exist at the time the browser was written. | which did not exist at the time the browser was written. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="sec.standardized" numbered="true" toc="include" removeInR | ||||
<section title="Items for Standardization" anchor="sec.standardized"> | FC="false" pn="section-7.3"> | |||
<t> | <name slugifiedName="name-items-for-standardization">Items for Standardi | |||
zation</name> | ||||
<t indent="0" pn="section-7.3-1"> | ||||
There are two parts to this work: | There are two parts to this work: | |||
</t> | </t> | |||
<t> | <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-7 | |||
<list style="symbols"> | .3-2"> | |||
<t> | <li pn="section-7.3-2.1"> | |||
The precise information from the signaling message that must be | The precise information from the signaling message that must be | |||
cryptographically bound to the user's identity and a mechanism | cryptographically bound to the user's identity and a mechanism | |||
for carrying assertions in JSEP messages. This is specified in | for carrying assertions in JavaScript Session Establishment | |||
<xref target="sec.jsep-binding"/>. | Protocol (JSEP) messages. This is specified in | |||
</t> | <xref target="sec.jsep-binding" format="default" sectionFormat=" | |||
of" derivedContent="Section 7.4"/>. | ||||
<t> | </li> | |||
<li pn="section-7.3-2.2"> | ||||
The interface to the IdP, which is defined in the companion W3C | The interface to the IdP, which is defined in the companion W3C | |||
WebRTC API specification <xref target="webrtc-api"/>. | WebRTC API specification <xref target="webrtc-api" format="defau | |||
</t> | lt" sectionFormat="of" derivedContent="webrtc-api"/>. | |||
</list> | </li> | |||
</t> | </ul> | |||
<t> | <t indent="0" pn="section-7.3-3"> | |||
The WebRTC API specification also defines JavaScript interfaces that | The WebRTC API specification also defines JavaScript interfaces that | |||
the calling application can use to specify which IdP to use. That | the calling application can use to specify which IdP to use. That | |||
API also provides access to the assertion-generation capability and | API also provides access to the assertion-generation capability and | |||
the status of the validation process. | the status of the validation process. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="sec.jsep-binding" numbered="true" toc="include" removeInR | ||||
<section title="Binding Identity Assertions to JSEP Offer/Answer Transac | FC="false" pn="section-7.4"> | |||
tions" anchor="sec.jsep-binding"> | <name slugifiedName="name-binding-identity-assertions">Binding Identity | |||
Assertions to JSEP Offer/Answer Transactions</name> | ||||
<t> | <t indent="0" pn="section-7.4-1"> | |||
An identity assertion binds the user's identity (as asserted by the | An identity assertion binds the user's identity (as asserted by the | |||
IdP) to the SDP offer/answer exchange and specifically to the | IdP) to the SDP offer/answer exchange and specifically to the | |||
media. In order to achieve this, the PeerConnection must provide the | media. In order to achieve this, the PeerConnection must provide the | |||
DTLS-SRTP fingerprint to be bound to the identity. This is provided | DTLS-SRTP fingerprint to be bound to the identity. This is provided | |||
as a JavaScript object (also known as a dictionary or hash) with a | as a JavaScript object (also known as a dictionary or hash) with a | |||
single <spanx style="verb">fingerprint</spanx> key, as shown below: | single "fingerprint" key, as shown below: | |||
</t> | </t> | |||
<figure> | <sourcecode name="json-1" type="json" markers="false" pn="section-7.4-2" | |||
<artwork><![CDATA[ | > | |||
{ | { | |||
"fingerprint": | "fingerprint": | |||
[ | [ | |||
{ "algorithm": "sha-256", | { "algorithm": "sha-256", | |||
"digest": "4A:AD:B9:B1:3F:...:E5:7C:AB" }, | "digest": "4A:AD:B9:B1:3F:...:E5:7C:AB" }, | |||
{ "algorithm": "sha-1", | { "algorithm": "sha-1", | |||
"digest": "74:E9:76:C8:19:...:F4:45:6B" } | "digest": "74:E9:76:C8:19:...:F4:45:6B" } | |||
] | ] | |||
} | }</sourcecode> | |||
]]></artwork> | <t indent="0" pn="section-7.4-3"> | |||
</figure> | The "fingerprint" value is an array of | |||
<t> | objects. Each object in the array contains "algorithm" and "digest" | |||
The <spanx style="verb">fingerprint</spanx> value is an array of | values, which correspond directly to | |||
objects. Each object in the array contains <spanx | the algorithm and digest values in the "fingerprint" attribute of th | |||
style="verb">algorithm</spanx> and <spanx | e SDP <xref target="RFC8122" format="default" sectionFormat="of" derivedContent= | |||
style="verb">digest</spanx> values, which correspond directly to | "RFC8122"/>. | |||
the algorithm and digest values in the <spanx | </t> | |||
style="verb">fingerprint</spanx> attribute of the SDP <xref | <t indent="0" pn="section-7.4-4"> | |||
target="RFC8122"/>. | This object is encoded in a <xref target="RFC8259" format="default" | |||
</t> | sectionFormat="of" derivedContent="RFC8259">JSON</xref> | |||
<t> | ||||
This object is encoded in a <xref target="RFC8259">JSON</xref> | ||||
string for passing to the IdP. The identity assertion returned by | string for passing to the IdP. The identity assertion returned by | |||
the IdP, which is encoded in the <spanx | the IdP, which is encoded in the "identity" attribute, is a JSON obj | |||
style="verb">identity</spanx> attribute, is a JSON object that is | ect that is | |||
encoded as described in <xref target="sec.carry-assertion"/>. | encoded as described in <xref target="sec.carry-assertion" format="d | |||
</t> | efault" sectionFormat="of" derivedContent="Section 7.4.1"/>. | |||
<t> | </t> | |||
<t indent="0" pn="section-7.4-5"> | ||||
This structure does not need to be interpreted by the IdP or the | This structure does not need to be interpreted by the IdP or the | |||
IdP proxy. It is consumed solely by the RP's browser. The IdP | IdP proxy. It is consumed solely by the RP's browser. The IdP | |||
merely treats it as an opaque value to be attested to. Thus, new | merely treats it as an opaque value to be attested to. Thus, new | |||
parameters can be added to the assertion without modifying the | parameters can be added to the assertion without modifying the | |||
IdP. | IdP. | |||
</t> | </t> | |||
<section anchor="sec.carry-assertion" numbered="true" toc="include" remo | ||||
<section title="Carrying Identity Assertions" anchor="sec.carry-assert | veInRFC="false" pn="section-7.4.1"> | |||
ion"> | <name slugifiedName="name-carrying-identity-assertion">Carrying Identi | |||
<t> | ty Assertions</name> | |||
Once an IdP has generated an assertion (see <xref | <t indent="0" pn="section-7.4.1-1"> | |||
target="sec.request-assert"/>), it is attached to the SDP | Once an IdP has generated an assertion (see <xref target="sec.requ | |||
offer/answer message. This is done by adding a new 'identity' | est-assert" format="default" sectionFormat="of" derivedContent="Section 7.6"/>), | |||
it is attached to the SDP | ||||
offer/answer message. This is done by adding a new "identity" | ||||
attribute to the SDP. The sole contents of this value is the | attribute to the SDP. The sole contents of this value is the | |||
identity assertion. The identity assertion produced by the IdP is | identity assertion. The identity assertion produced by the IdP is | |||
encoded into a UTF-8 JSON text, then <xref | encoded into a UTF-8 JSON text, then <xref target="RFC4648" format | |||
target="RFC4648">Base64-encoded</xref> to produce this string. | ="default" sectionFormat="of" derivedContent="RFC4648">base64-encoded</xref> to | |||
produce this string. | ||||
For example: | For example: | |||
</t> | </t> | |||
<figure> | <sourcecode name="sdp-1" type="sdp" markers="false" pn="section-7.4.1- | |||
<artwork><![CDATA[ | 2"> | |||
v=0 | v=0 | |||
o=- 1181923068 1181923196 IN IP4 ua1.example.com | o=- 1181923068 1181923196 IN IP4 ua1.example.com | |||
s=example1 | s=example1 | |||
c=IN IP4 ua1.example.com | c=IN IP4 ua1.example.com | |||
a=fingerprint:sha-1 \ | a=fingerprint:sha-1 \ | |||
4A:AD:B9:B1:3F:82:18:3B:54:02:12:DF:3E:5D:49:6B:19:E5:7C:AB | 4A:AD:B9:B1:3F:82:18:3B:54:02:12:DF:3E:5D:49:6B:19:E5:7C:AB | |||
a=identity:\ | a=identity:\ | |||
eyJpZHAiOnsiZG9tYWluIjoiZXhhbXBsZS5vcmciLCJwcm90b2NvbCI6ImJvZ3Vz\ | eyJpZHAiOnsiZG9tYWluIjoiZXhhbXBsZS5vcmciLCJwcm90b2NvbCI6ImJvZ3Vz\ | |||
In0sImFzc2VydGlvbiI6IntcImlkZW50aXR5XCI6XCJib2JAZXhhbXBsZS5vcmdc\ | In0sImFzc2VydGlvbiI6IntcImlkZW50aXR5XCI6XCJib2JAZXhhbXBsZS5vcmdc\ | |||
IixcImNvbnRlbnRzXCI6XCJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3l6XCIsXCJz\ | IixcImNvbnRlbnRzXCI6XCJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3l6XCIsXCJz\ | |||
aWduYXR1cmVcIjpcIjAxMDIwMzA0MDUwNlwifSJ9 | aWduYXR1cmVcIjpcIjAxMDIwMzA0MDUwNlwifSJ9 | |||
a=... | a=... | |||
t=0 0 | t=0 0 | |||
m=audio 6056 RTP/SAVP 0 | m=audio 6056 RTP/SAVP 0 | |||
a=sendrecv | a=sendrecv | |||
... | ...</sourcecode> | |||
<aside pn="section-7.4.1-3"> | ||||
Note that long lines in the example are folded to meet the column | <t indent="0" pn="section-7.4.1-3.1">Note that long lines in the exa | |||
mple are folded to meet the column | ||||
width constraints of this document; the backslash ("\") at the end of | width constraints of this document; the backslash ("\") at the end of | |||
a line, the carriage return that follows, and whitespace shall be ignored. | a line, the carriage return that follows, and whitespace shall be ignored.</t> | |||
</aside> | ||||
]]></artwork> | <t indent="0" pn="section-7.4.1-4"> | |||
</figure> | The "identity" attribute attests to all "fingerprint" attributes i | |||
<t> | n the session | |||
The 'identity' attribute attests to all <spanx | ||||
style="verb">fingerprint</spanx> attributes in the session | ||||
description. It is therefore a session-level attribute. | description. It is therefore a session-level attribute. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-7.4.1-5"> | |||
Multiple <spanx style="verb">fingerprint</spanx> values can be | Multiple "fingerprint" values can be | |||
used to offer alternative certificates for a peer. The <spanx | used to offer alternative certificates for a peer. The "identity" | |||
style="verb">identity</spanx> attribute MUST include all | attribute <bcp14>MUST</bcp14> include all | |||
fingerprint values that are included in <spanx | "fingerprint" values that are included in "fingerprint" attributes | |||
style="verb">fingerprint</spanx> attributes of the session | of the session | |||
description. | description. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-7.4.1-6"> | |||
The RP browser MUST verify that the in-use certificate for a DTLS | The RP browser <bcp14>MUST</bcp14> verify that the in-use certific | |||
ate for a DTLS | ||||
connection is in the set of fingerprints returned from the IdP | connection is in the set of fingerprints returned from the IdP | |||
when verifying an assertion. | when verifying an assertion. | |||
</t> | </t> | |||
</section> | ||||
</section> | </section> | |||
</section> | ||||
<section title="Determining the IdP URI" anchor="sec.idp-uri"> | <section anchor="sec.idp-uri" numbered="true" toc="include" removeInRFC="f | |||
<t> | alse" pn="section-7.5"> | |||
<name slugifiedName="name-determining-the-idp-uri">Determining the IdP U | ||||
RI</name> | ||||
<t indent="0" pn="section-7.5-1"> | ||||
In order to ensure that the IdP is under control of the domain | In order to ensure that the IdP is under control of the domain | |||
owner rather than someone who merely has an account on the | owner rather than someone who merely has an account on the | |||
domain owner's server (e.g., in shared hosting scenarios), the | domain owner's server (e.g., in shared hosting scenarios), the | |||
IdP JavaScript is hosted at a deterministic location based on | IdP JavaScript is hosted at a deterministic location based on | |||
the IdP's domain name. Each IdP proxy instance is associated | the IdP's domain name. Each IdP proxy instance is associated | |||
with two values: | with two values: | |||
</t> | </t> | |||
<t> | <dl newline="false" spacing="normal" indent="3" pn="section-7.5-2"> | |||
<list style="hanging"> | <dt pn="section-7.5-2.1">authority:</dt> | |||
<t hangText="Authority:"> | <dd pn="section-7.5-2.2"> | |||
The <xref target="RFC3986"> authority</xref> at which the | The <xref target="RFC3986" format="default" sectionFormat | |||
="of" derivedContent="RFC3986"> authority</xref> at which the | ||||
IdP's service is hosted. | IdP's service is hosted. | |||
</t> | </dd> | |||
<t hangText="protocol:"> | <dt pn="section-7.5-2.3">protocol:</dt> | |||
<dd pn="section-7.5-2.4"> | ||||
The specific IdP protocol which the IdP is using. This is a | The specific IdP protocol which the IdP is using. This is a | |||
completely opaque IdP-specific string, but allows an IdP to | completely opaque IdP-specific string, but allows an IdP to | |||
implement two protocols in parallel. This value may be the | implement two protocols in parallel. This value may be the | |||
empty string. If no value for protocol is provided, a value | empty string. If no value for protocol is provided, a value | |||
of "default" is used. | of "default" is used. | |||
</t> | </dd> | |||
</list> | </dl> | |||
</t> | <t indent="0" pn="section-7.5-3"> | |||
<t> | Each IdP <bcp14>MUST</bcp14> serve its initial entry page (i.e., | |||
Each IdP MUST serve its initial entry page (i.e., the one loaded | the one loaded | |||
by the IdP proxy) from a <xref target="RFC5785">well-known | by the IdP proxy) from a <xref target="RFC8615" format="default" | |||
URI</xref>. The well-known URI for an IdP proxy is formed from | sectionFormat="of" derivedContent="RFC8615">well-known | |||
URI</xref>. | ||||
The well-known URI for an IdP proxy is formed from | ||||
the following URI components: | the following URI components: | |||
<list style="numbers"> | </t> | |||
<t> | <ol spacing="normal" type="1" indent="adaptive" start="1" pn="section-7. | |||
The scheme, "https:". An IdP MUST be loaded using <xref | 5-4"> | |||
target="RFC2818">HTTPS</xref>. | <li pn="section-7.5-4.1" derivedCounter="1."> | |||
</t> | The scheme, "https:". An IdP <bcp14>MUST</bcp14> be loaded | |||
<t> | using <xref target="RFC2818" format="default" sectionFormat="of" derivedContent= | |||
The <xref target="RFC3986">authority</xref>. As noted above | "RFC2818">HTTPS</xref>. | |||
, | </li> | |||
the authority MAY contain a non-default port number or | <li pn="section-7.5-4.2" derivedCounter="2."> | |||
The <xref target="RFC3986" format="default" sectionFormat="o | ||||
f" derivedContent="RFC3986">authority</xref>. As noted above, | ||||
the authority <bcp14>MAY</bcp14> contain a non-default port | ||||
number or | ||||
userinfo sub-component. Both are removed when determining | userinfo sub-component. Both are removed when determining | |||
if an asserted identity matches the name of the IdP. | if an asserted identity matches the name of the IdP. | |||
</t> | </li> | |||
<t> | <li pn="section-7.5-4.3" derivedCounter="3."> | |||
The path, starting with "/.well-known/idp-proxy/" and | The path, starting with "/.well-known/idp-proxy/" and | |||
appended with the IdP protocol. Note that the separator | appended with the IdP protocol. Note that the separator | |||
characters '/' (%2F) and '\' (%5C) MUST NOT be permitted in | characters '/' (%2F) and '\' (%5C) <bcp14>MUST NOT</bcp14> b e permitted in | |||
the protocol field, lest an attacker be able to direct | the protocol field, lest an attacker be able to direct | |||
requests outside of the controlled "/.well-known/" prefix. | requests outside of the controlled "/.well-known/" prefix. | |||
Query and fragment values MAY be used by including '?' or | Query and fragment values <bcp14>MAY</bcp14> be used by incl uding '?' or | |||
'#' characters. | '#' characters. | |||
</t> | </li> | |||
</list> | </ol> | |||
<t indent="0" pn="section-7.5-5"> | ||||
For example, for the IdP "identity.example.com" and the protocol | For example, for the IdP "identity.example.com" and the protocol | |||
"example", the URL would be: | "example", the URL would be: | |||
</t> | </t> | |||
<figure> | <artwork align="left" pn="section-7.5-6">https://identity.example.com/.w | |||
<artwork><![CDATA[ | ell-known/idp-proxy/example</artwork> | |||
https://identity.example.com/.well-known/idp-proxy/example | <t indent="0" pn="section-7.5-7"> | |||
]]></artwork> | The IdP <bcp14>MAY</bcp14> redirect requests to this URL, but th | |||
</figure> | ey <bcp14>MUST</bcp14> retain | |||
<t> | the "https:" scheme. This changes the effective origin of the | |||
The IdP MAY redirect requests to this URL, but they MUST retain | ||||
the "https" scheme. This changes the effective origin of the | ||||
IdP, but not the domain of the identities that the IdP is | IdP, but not the domain of the identities that the IdP is | |||
permitted to assert and validate. I.e., the IdP is still | permitted to assert and validate. I.e., the IdP is still | |||
regarded as authoritative for the original domain. | regarded as authoritative for the original domain. | |||
</t> | </t> | |||
<section numbered="true" toc="include" removeInRFC="false" pn="section-7 | ||||
<section title="Authenticating Party"> | .5.1"> | |||
<t> | <name slugifiedName="name-authenticating-party">Authenticating Party</ | |||
name> | ||||
<t indent="0" pn="section-7.5.1-1"> | ||||
How an AP determines the appropriate IdP domain is out of | How an AP determines the appropriate IdP domain is out of | |||
scope of this specification. In general, however, the AP has | scope of this specification. In general, however, the AP has | |||
some actual account relationship with the IdP, as this | some actual account relationship with the IdP, as this | |||
identity is what the IdP is attesting to. Thus, the AP somehow | identity is what the IdP is attesting to. Thus, the AP somehow | |||
supplies the IdP information to the browser. Some potential | supplies the IdP information to the browser. Some potential | |||
mechanisms include: | mechanisms include: | |||
<list style="symbols"> | </t> | |||
<t> | <ul spacing="normal" bare="false" empty="false" indent="3" pn="section | |||
-7.5.1-2"> | ||||
<li pn="section-7.5.1-2.1"> | ||||
Provided by the user directly. | Provided by the user directly. | |||
</t> | </li> | |||
<t> | <li pn="section-7.5.1-2.2"> | |||
Selected from some set of IdPs known to the calling site. | Selected from some set of IdPs known to the calling site | |||
E.g., a button that shows "Authenticate via Facebook | (e.g., a button that shows "Authenticate via Facebook | |||
Connect" | Connect"). | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | </section> | |||
</section> | <section numbered="true" toc="include" removeInRFC="false" pn="section-7 | |||
.5.2"> | ||||
<section title="Relying Party"> | <name slugifiedName="name-relying-party">Relying Party</name> | |||
<t> | <t indent="0" pn="section-7.5.2-1"> | |||
Unlike the AP, the RP need not have any particular | Unlike the AP, the RP need not have any particular | |||
relationship with the IdP. Rather, it needs to be able to | relationship with the IdP. Rather, it needs to be able to | |||
process whatever assertion is provided by the AP. As the | process whatever assertion is provided by the AP. As the | |||
assertion contains the IdP's identity in the <spanx | assertion contains the IdP's identity in the "idp" field of th | |||
style="verb">idp</spanx> field of the JSON-encoded object (see | e JSON-encoded object (see | |||
<xref target="sec.request-assert"/>), the URI can be | <xref target="sec.request-assert" format="default" sectionForm | |||
at="of" derivedContent="Section 7.6"/>), the URI can be | ||||
constructed directly from the assertion, and thus the RP can | constructed directly from the assertion, and thus the RP can | |||
directly verify the technical validity of the assertion with | directly verify the technical validity of the assertion with | |||
no user interaction. Authoritative assertions need only be | no user interaction. Authoritative assertions need only be | |||
verifiable. Third-party assertions also MUST be verified | verifiable. Third-party assertions also <bcp14>MUST</bcp14> be | |||
against local policy, as described in <xref | verified | |||
target="sec.id-format"/>. | against local policy, as described in <xref target="sec.id-for | |||
</t> | mat" format="default" sectionFormat="of" derivedContent="Section 8.1"/>. | |||
</section> | </t> | |||
</section> | </section> | |||
</section> | ||||
<section title="Requesting Assertions" anchor="sec.request-assert"> | <section anchor="sec.request-assert" numbered="true" toc="include" removeI | |||
<t> | nRFC="false" pn="section-7.6"> | |||
The input to identity assertion is the JSON-encoded object | <name slugifiedName="name-requesting-assertions">Requesting Assertions</ | |||
described in <xref target="sec.jsep-binding"/> that contains the | name> | |||
<t indent="0" pn="section-7.6-1"> | ||||
The input to the identity assertion generation process is the JS | ||||
ON-encoded object | ||||
described in <xref target="sec.jsep-binding" format="default" se | ||||
ctionFormat="of" derivedContent="Section 7.4"/> that contains the | ||||
set of certificate fingerprints the browser intends to use. | set of certificate fingerprints the browser intends to use. | |||
This string is treated as opaque from the perspective of the | This string is treated as opaque from the perspective of the | |||
IdP. | IdP. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-7.6-2"> | |||
The browser also identifies the origin that the PeerConnection | The browser also identifies the origin that the PeerConnection | |||
is run in, which allows the IdP to make decisions based on who | is run in, which allows the IdP to make decisions based on who | |||
is requesting the assertion. | is requesting the assertion. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-7.6-3"> | |||
An application can optionally provide a user identifier hint | An application can optionally provide a user identifier hint | |||
when specifying an IdP. This value is a hint that the IdP can | when specifying an IdP. This value is a hint that the IdP can | |||
use to select amongst multiple identities, or to avoid providing | use to select amongst multiple identities, or to avoid providing | |||
assertions for unwanted identities. The <spanx | assertions for unwanted identities. The "username" is a string | |||
style="verb">username</spanx> is a string that has no meaning to | that has no meaning to | |||
any entity other than the IdP, it can contain any data the IdP | any entity other than the IdP; it can contain any data the IdP | |||
needs in order to correctly generate an assertion. | needs in order to correctly generate an assertion. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-7.6-4"> | |||
An identity assertion that is successfully provided by the IdP | An identity assertion that is successfully provided by the IdP | |||
consists of the following information: | consists of the following information: | |||
</t> | </t> | |||
<t> | <dl newline="false" spacing="normal" indent="3" pn="section-7.6-5"> | |||
<list style="hanging"> | <dt pn="section-7.6-5.1">idp:</dt> | |||
<t hangText="idp:"> | <dd pn="section-7.6-5.2"> | |||
The domain name of an IdP and the protocol string. This MAY | The domain name of an IdP and the protocol string. This <bc | |||
p14>MAY</bcp14> | ||||
identify a different IdP or protocol from the one that | identify a different IdP or protocol from the one that | |||
generated the assertion. | generated the assertion. | |||
</t> | </dd> | |||
<t hangText="assertion:"> | <dt pn="section-7.6-5.3">assertion:</dt> | |||
<dd pn="section-7.6-5.4"> | ||||
An opaque value containing the assertion itself. This is | An opaque value containing the assertion itself. This is | |||
only interpretable by the identified IdP or the IdP code | only interpretable by the identified IdP or the IdP code | |||
running in the client. | running in the client. | |||
</t> | </dd> | |||
</list> | </dl> | |||
</t> | <t indent="0" pn="section-7.6-6"> | |||
<t> | <xref target="fig.assert-ex" format="default" sectionFormat="of" | |||
<xref target="fig.assert-ex"/> shows an example assertion | derivedContent="Figure 5"/> shows an example assertion | |||
formatted as JSON. In this case, the message has presumably | formatted as JSON. In this case, the message has presumably | |||
been digitally signed/MACed in some way that the IdP can later | been digitally signed/MACed in some way that the IdP can later | |||
verify it, but this is an implementation detail and out of scope | verify it, but this is an implementation detail and out of scope | |||
of this document. </t> | of this document. </t> | |||
<figure anchor="fig.assert-ex" align="left" suppress-title="false" pn="f | ||||
<figure title="Example assertion" anchor="fig.assert-ex"> | igure-5"> | |||
<artwork><![CDATA[ | <name slugifiedName="name-example-assertion">Example Assertion</name> | |||
<sourcecode name="json-2" type="json" markers="false" pn="section-7.6- | ||||
7.1"> | ||||
{ | { | |||
"idp":{ | "idp":{ | |||
"domain": "example.org", | "domain": "example.org", | |||
"protocol": "bogus" | "protocol": "bogus" | |||
}, | }, | |||
"assertion": "{\"identity\":\"bob@example.org\", | "assertion": "{\"identity\":\"bob@example.org\", | |||
\"contents\":\"abcdefghijklmnopqrstuvwyz\", | \"contents\":\"abcdefghijklmnopqrstuvwyz\", | |||
\"signature\":\"010203040506\"}" | \"signature\":\"010203040506\"}" | |||
} | }</sourcecode> | |||
]]></artwork> | </figure> | |||
</figure> | <t indent="0" pn="section-7.6-8"> | |||
<t> | ||||
For use in signaling, the assertion is serialized into JSON, | For use in signaling, the assertion is serialized into JSON, | |||
<xref target="RFC4648">Base64-encoded</xref>, and used as the | <xref target="RFC4648" format="default" sectionFormat="of" deriv | |||
value of the <spanx style="verb">identity</spanx> attribute. | edContent="RFC4648">base64-encoded</xref>, and used as the | |||
IdPs SHOULD ensure that any assertions they | value of the "identity" attribute. | |||
IdPs <bcp14>SHOULD</bcp14> ensure that any assertions they | ||||
generate cannot be interpreted in a different context. E.g., | generate cannot be interpreted in a different context. E.g., | |||
they should use a distinct format or have separate cryptographic | they should use a distinct format or have separate cryptographic | |||
keys for assertion generation and other purposes. | keys for assertion generation and other purposes. | |||
Line breaks are inserted solely for | Line breaks are inserted solely for | |||
readability. | readability. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="sec.user-login" numbered="true" toc="include" removeInRFC | ||||
<section title="Managing User Login" anchor="sec.user-login"> | ="false" pn="section-7.7"> | |||
<t> | <name slugifiedName="name-managing-user-login">Managing User Login</name | |||
> | ||||
<t indent="0" pn="section-7.7-1"> | ||||
In order to generate an identity assertion, the IdP needs proof of | In order to generate an identity assertion, the IdP needs proof of | |||
the user's identity. It is common practice to authenticate user s | the user's identity. It is common practice to authenticate user s | |||
(using passwords or multi-factor authentication), then use <xref | (using passwords or multi-factor authentication), then use <xref | |||
target="RFC6265">Cookies</xref> or <xref target="RFC7617">HTTP | target="RFC6265" format="default" sectionFormat="of" derivedContent="RFC6265">c | |||
ookies</xref> or <xref target="RFC7617" format="default" sectionFormat="of" deri | ||||
vedContent="RFC7617">HTTP | ||||
authentication</xref> for subsequent exchanges. | authentication</xref> for subsequent exchanges. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-7.7-2"> | |||
The IdP proxy is able to access cookies, HTTP authentication or | The IdP proxy is able to access cookies, HTTP authentication dat | |||
a, or | ||||
other persistent session data because it operates in the securit y | other persistent session data because it operates in the securit y | |||
context of the IdP origin. Therefore, if a user is logged in, t he | context of the IdP origin. Therefore, if a user is logged in, t he | |||
IdP could have all the information needed to generate an | IdP could have all the information needed to generate an | |||
assertion. | assertion. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-7.7-3"> | |||
An IdP proxy is unable to generate an assertion if the user is | An IdP proxy is unable to generate an assertion if the user is | |||
not logged in, or the IdP wants to interact with the user to | not logged in, or the IdP wants to interact with the user to | |||
acquire more information before generating the assertion. If | acquire more information before generating the assertion. If | |||
the IdP wants to interact with the user before generating an | the IdP wants to interact with the user before generating an | |||
assertion, the IdP proxy can fail to generate an assertion and | assertion, the IdP proxy can fail to generate an assertion and | |||
instead indicate a URL where login should proceed. | instead indicate a URL where login should proceed. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-7.7-4"> | |||
The application can then load the provided URL to enable the | The application can then load the provided URL to enable the | |||
user to enter credentials. The communication between the | user to enter credentials. The communication between the | |||
application and the IdP is described in <xref | application and the IdP is described in <xref target="webrtc-api | |||
target="webrtc-api"/>. | " format="default" sectionFormat="of" derivedContent="webrtc-api"/>. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="sec.verify-assert" numbered="true" toc="include" removeInRF | ||||
<section title="Verifying Assertions" anchor="sec.verify-assert"> | C="false" pn="section-8"> | |||
<t> | <name slugifiedName="name-verifying-assertions">Verifying Assertions</name | |||
> | ||||
<t indent="0" pn="section-8-1"> | ||||
The input to identity validation is the assertion string taken | The input to identity validation is the assertion string taken | |||
from a decoded 'identity' attribute. | from a decoded "identity" attribute. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-8-2"> | |||
The IdP proxy verifies the assertion. Depending on the identity | The IdP proxy verifies the assertion. Depending on the identity | |||
protocol, the proxy might contact the IdP server or other | protocol, the proxy might contact the IdP server or other | |||
servers. For instance, an OAuth-based protocol will likely | servers. For instance, an OAuth-based protocol will likely | |||
require using the IdP as an oracle, whereas with a | require using the IdP as an oracle, whereas with a | |||
signature-based scheme might be able to verify the assertion | signature-based scheme it might be able to verify the assertion | |||
without contacting the IdP, provided that it has cached the | without contacting the IdP, provided that it has cached the | |||
relevant public key. | relevant public key. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-8-3"> | |||
Regardless of the mechanism, if verification succeeds, a | Regardless of the mechanism, if verification succeeds, a | |||
successful response from the IdP proxy consists of the following | successful response from the IdP proxy consists of the following | |||
information: | information: | |||
<list style="hanging"> | </t> | |||
<t hangText="identity:"> | <dl newline="false" spacing="normal" indent="3" pn="section-8-4"> | |||
<dt pn="section-8-4.1">identity:</dt> | ||||
<dd pn="section-8-4.2"> | ||||
The identity of the AP from the IdP's perspective. Details | The identity of the AP from the IdP's perspective. Details | |||
of this are provided in <xref target="sec.id-format"/>. | of this are provided in <xref target="sec.id-format" format= | |||
</t> | "default" sectionFormat="of" derivedContent="Section 8.1"/>. | |||
<t hangText="contents:"> | </dd> | |||
<dt pn="section-8-4.3">contents:</dt> | ||||
<dd pn="section-8-4.4"> | ||||
The original unmodified string provided by the AP as input | The original unmodified string provided by the AP as input | |||
to the assertion generation process. | to the assertion generation process. | |||
</t> | </dd> | |||
</list> | </dl> | |||
</t> | <t indent="0" pn="section-8-5"> | |||
<t> | <xref target="fig.verify-ex" format="default" sectionFormat="of" | |||
<xref target="fig.verify-ex"/> shows an example response, | derivedContent="Figure 6"/> shows an example response, | |||
which is JSON-formatted. | which is JSON-formatted. | |||
</t> | </t> | |||
<figure anchor="fig.verify-ex" align="left" suppress-title="false" pn="fig | ||||
<figure title="Example verification result" anchor="fig.verify-ex" | ure-6"> | |||
> | <name slugifiedName="name-example-verification-result">Example Verificat | |||
<artwork> | ion Result</name> | |||
<![CDATA[ | <sourcecode name="json-3" type="json" markers="false" pn="section-8-6.1" | |||
> | ||||
{ | { | |||
"identity": "bob@example.org", | "identity": "bob@example.org", | |||
"contents": "{\"fingerprint\":[ ... ]}" | "contents": "{\"fingerprint\":[ ... ]}" | |||
} | }</sourcecode> | |||
]]></artwork> | </figure> | |||
</figure> | <section anchor="sec.id-format" numbered="true" toc="include" removeInRFC= | |||
"false" pn="section-8.1"> | ||||
<section title="Identity Formats" anchor="sec.id-format"> | <name slugifiedName="name-identity-formats">Identity Formats</name> | |||
<t> | <t indent="0" pn="section-8.1-1"> | |||
The identity provided from the IdP to the RP browser MUST | The identity provided from the IdP to the RP browser <bcp14>MU | |||
ST</bcp14> | ||||
consist of a string representing the user's identity. This | consist of a string representing the user's identity. This | |||
string is in the form "<user>@<domain>", where <spanx | string is in the form "<user>@<domain>", where "us | |||
style="verb">user</spanx> consists of any character, | er" consists of any character, | |||
and domain is aninternationalized | and domain is an internationalized | |||
domain name <xref target="RFC5890"></xref> encoded as a sequen | domain name <xref target="RFC5890" format="default" sectionFor | |||
ce of U-labels. | mat="of" derivedContent="RFC5890"/> encoded as a sequence of U-labels. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-8.1-2"> | |||
The PeerConnection API MUST check this string as follows: | The PeerConnection API <bcp14>MUST</bcp14> check this string a | |||
<list style="numbers"> | s follows: | |||
<t> | </t> | |||
<ol spacing="normal" type="1" indent="adaptive" start="1" pn="section-8. | ||||
1-3"> | ||||
<li pn="section-8.1-3.1" derivedCounter="1."> | ||||
If the "domain" portion of the string is equal to the doma in | If the "domain" portion of the string is equal to the doma in | |||
name of the IdP proxy, then the assertion is valid, as the | name of the IdP proxy, then the assertion is valid, as the | |||
IdP is authoritative for this domain. Comparison of | IdP is authoritative for this domain. Comparison of | |||
domain names is done using the label equivalence rule | domain names is done using the label equivalence rule | |||
defined in Section 2.3.2.4 of <xref target="RFC5890"/>. | defined in <xref target="RFC5890" sectionFormat="of" secti | |||
</t> | on="2.3.2.4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc5890#se | |||
<t> | ction-2.3.2.4" derivedContent="RFC5890"/>. | |||
</li> | ||||
<li pn="section-8.1-3.2" derivedCounter="2."> | ||||
<t indent="0" pn="section-8.1-3.2.1"> | ||||
If the "domain" portion of the string is not equal to the | If the "domain" portion of the string is not equal to the | |||
domain name of the IdP proxy, then the PeerConnection | domain name of the IdP proxy, then the PeerConnection | |||
object MUST reject the assertion unless both: | object <bcp14>MUST</bcp14> reject the assertion unless bot | |||
<list style="numbers"> | h: | |||
<t> | </t> | |||
<ol spacing="normal" type="1" indent="adaptive" start="1" pn="sectio | ||||
n-8.1-3.2.2"> | ||||
<li pn="section-8.1-3.2.2.1" derivedCounter="1."> | ||||
the IdP domain is trusted as an acceptable third-party | the IdP domain is trusted as an acceptable third-party | |||
IdP; and | IdP; and | |||
</t> | </li> | |||
<t> | <li pn="section-8.1-3.2.2.2" derivedCounter="2."> | |||
local policy is configured to trust this IdP domain | local policy is configured to trust this IdP domain | |||
for the domain portion of the identity string. | for the domain portion of the identity string. | |||
</t> | </li> | |||
</list> | </ol> | |||
</t> | </li> | |||
</list> | </ol> | |||
</t> | <t indent="0" pn="section-8.1-4"> | |||
<t> | Any '@' or '%' characters in the "user" portion of the | |||
Any "@" or "%" characters in the "user" portion of the | identity <bcp14>MUST</bcp14> be escaped according to the "perc | |||
identity MUST be escaped according to the "Percent-Encoding" | ent-encoding" | |||
rules defined in Section 2.1 of <xref | rules defined in <xref target="RFC3986" sectionFormat="of" sec | |||
target="RFC3986"/>. Characters other than "@" and "%" MUST NOT | tion="2.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc3986#sect | |||
ion-2.1" derivedContent="RFC3986"/>. Characters other than '@' and '%' <bcp14>MU | ||||
ST NOT</bcp14> | ||||
be percent-encoded. For example, with a "user" of "user@133" a nd | be percent-encoded. For example, with a "user" of "user@133" a nd | |||
a "domain" of "identity.example.com", the resulting string wil l | a "domain" of "identity.example.com", the resulting string wil l | |||
be encoded as "user%40133@identity.example.com". | be encoded as "user%40133@identity.example.com". | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-8.1-5"> | |||
Implementations are cautioned to take care when displaying | Implementations are cautioned to take care when displaying | |||
user identities containing escaped "@" characters. If such | user identities containing escaped '@' characters. If such | |||
characters are unescaped prior to display, implementations | characters are unescaped prior to display, implementations | |||
MUST distinguish between the domain of the IdP proxy and any | <bcp14>MUST</bcp14> distinguish between the domain of the IdP proxy and any | |||
domain that might be implied by the portion of the | domain that might be implied by the portion of the | |||
"<user>" portion that appears after the escaped "@" | "<user>" portion that appears after the escaped "@" | |||
sign. | sign. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | ||||
</section> | <section anchor="sec.sec-cons" numbered="true" toc="include" removeInRFC="fa | |||
lse" pn="section-9"> | ||||
<section title="Security Considerations" anchor="sec.sec-cons"> | <name slugifiedName="name-security-considerations">Security Considerations | |||
<t> | </name> | |||
Much of the security analysis of this problem is contained in <xref | <t indent="0" pn="section-9-1"> | |||
target="I-D.ietf-rtcweb-security"/> or in the discussion of the | Much of the security analysis of RTCWEB is contained in <xref target=" | |||
RFC8826" format="default" sectionFormat="of" derivedContent="RFC8826"/> or in th | ||||
e discussion of the | ||||
particular issues above. In order to avoid repetition, this section | particular issues above. In order to avoid repetition, this section | |||
focuses on (a) residual threats that are not addressed by this | focuses on (a) residual threats that are not addressed by this | |||
document and (b) threats produced by failure/misbehavior of one of the | document and (b) threats produced by failure/misbehavior of one of the | |||
components in the system. | components in the system. | |||
</t> | </t> | |||
<section numbered="true" toc="include" removeInRFC="false" pn="section-9.1 | ||||
<section title="Communications Security"> | "> | |||
<t> | <name slugifiedName="name-communications-security-2">Communications Secu | |||
IF HTTPS is not used to secure communications to the signaling | rity</name> | |||
<t indent="0" pn="section-9.1-1"> | ||||
If HTTPS is not used to secure communications to the signaling | ||||
server, and the identity mechanism used in | server, and the identity mechanism used in | |||
<xref target="sec.generic.idp"/> is not used, | <xref target="sec.generic.idp" format="default" sectionFormat="of" d erivedContent="Section 7"/> is not used, | |||
then any on-path attacker can replace the DTLS-SRTP fingerprints | then any on-path attacker can replace the DTLS-SRTP fingerprints | |||
in the handshake and thus substitute its own identity for that | in the handshake and thus substitute its own identity for that | |||
of either endpoint. | of either endpoint. | |||
</t> | </t> | |||
<t indent="0" pn="section-9.1-2"> | ||||
<t> | ||||
Even if HTTPS is used, the signaling server can | Even if HTTPS is used, the signaling server can | |||
potentially mount a man-in-the-middle attack unless implementations | potentially mount a man-in-the-middle attack unless implementations | |||
have some mechanism for independently verifying keys. The UI | have some mechanism for independently verifying keys. The UI | |||
requirements in <xref target="sec.proposal.comsec"/> are designed to | requirements in <xref target="sec.proposal.comsec" format="default" sectionFormat="of" derivedContent="Section 6.5"/> are designed to | |||
provide such a mechanism for motivated/security conscious users, but | provide such a mechanism for motivated/security conscious users, but | |||
are not suitable for general use. The identity service mechanisms | are not suitable for general use. The identity service mechanisms | |||
in <xref target="sec.generic.idp"/> are more suitable for general | in <xref target="sec.generic.idp" format="default" sectionFormat="of " derivedContent="Section 7"/> are more suitable for general | |||
use. Note, however, that a malicious signaling service can strip off | use. Note, however, that a malicious signaling service can strip off | |||
any such identity assertions, though it cannot forge new ones. Note | any such identity assertions, though it cannot forge new ones. Note | |||
that all of the third-party security mechanisms available (whether | that all of the third-party security mechanisms available (whether | |||
X.509 certificates or a third-party IdP) rely on the security of the | X.509 certificates or a third-party IdP) rely on the security of the | |||
third party--this is of course also true of the user's connection to the | third party -- this is of course also true of the user's connection to the | |||
Web site itself. Users who wish to assure themselves of security | Web site itself. Users who wish to assure themselves of security | |||
against a malicious identity provider can only do so by verifying | against a malicious IdP can only do so by verifying | |||
peer credentials directly, e.g., by checking the peer's fingerprint | peer credentials directly, e.g., by checking the peer's fingerprint | |||
against a value delivered out of band. | against a value delivered out of band. | |||
</t> | </t> | |||
<t indent="0" pn="section-9.1-3"> | ||||
<t> | ||||
In order to protect against malicious content JavaScript, that | In order to protect against malicious content JavaScript, that | |||
JavaScript MUST NOT be allowed to have direct access to---or perform | JavaScript <bcp14>MUST NOT</bcp14> be allowed to have direct | |||
computations with---DTLS keys. For instance, if content JS were able | access to -- or perform | |||
computations with -- DTLS keys. For instance, if content JS were abl | ||||
e | ||||
to compute digital signatures, then it would be possible for content | to compute digital signatures, then it would be possible for content | |||
JS to get an identity assertion for a browser's generated key and | JS to get an identity assertion for a browser's generated key and | |||
then use that assertion plus a signature by the key to authenticate | then use that assertion plus a signature by the key to authenticate | |||
a call protected under an ephemeral Diffie-Hellman (DH) key controll ed by the content | a call protected under an ephemeral Diffie-Hellman (DH) key controll ed by the content | |||
JS, thus violating the security guarantees otherwise provided by the | JS, thus violating the security guarantees otherwise provided by the | |||
IdP mechanism. Note that it is not sufficient merely to deny the | IdP mechanism. Note that it is not sufficient merely to deny the | |||
content JS direct access to the keys, as some have suggested doing | content JS direct access to the keys, as some have suggested doing | |||
with the WebCrypto API <xref target="webcrypto"/>. The JS must | with the WebCrypto API <xref target="webcrypto" format="default" sec tionFormat="of" derivedContent="webcrypto"/>. The JS must | |||
also not be allowed to perform operations that would be valid for a | also not be allowed to perform operations that would be valid for a | |||
DTLS endpoint. By far the safest approach is simply to deny the | DTLS endpoint. By far the safest approach is simply to deny the | |||
ability to perform any operations that depend on secret information | ability to perform any operations that depend on secret information | |||
associated with the key. Operations that depend on public | associated with the key. Operations that depend on public | |||
information, such as exporting the public key are of course safe. | information, such as exporting the public key, are of course safe. | |||
</t> | </t> | |||
</section> | </section> | |||
<section numbered="true" toc="include" removeInRFC="false" pn="section-9.2 | ||||
<section title="Privacy"> | "> | |||
<t> | <name slugifiedName="name-privacy">Privacy</name> | |||
<t indent="0" pn="section-9.2-1"> | ||||
The requirements in this document are intended to allow: | The requirements in this document are intended to allow: | |||
</t> | </t> | |||
<t> | <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-9 | |||
<list style="symbols"> | .2-2"> | |||
<t> | <li pn="section-9.2-2.1"> | |||
Users to participate in calls without revealing their location. | Users to participate in calls without revealing their location. | |||
</t> | </li> | |||
<t> | <li pn="section-9.2-2.2"> | |||
Potential callees to avoid revealing their location and even | Potential callees to avoid revealing their location and even | |||
presence status prior to agreeing to answer a call. | presence status prior to agreeing to answer a call. | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | <t indent="0" pn="section-9.2-3"> | |||
<t> | ||||
However, these privacy protections come at a performance cost in | However, these privacy protections come at a performance cost in | |||
terms of using TURN relays and, in the latter case, delaying | terms of using TURN relays and, in the latter case, delaying | |||
ICE. Sites SHOULD make users aware of these tradeoffs. | ICE. Sites <bcp14>SHOULD</bcp14> make users aware of these tradeoffs | |||
</t> | . | |||
<t> | </t> | |||
<t indent="0" pn="section-9.2-4"> | ||||
Note that the protections provided here assume a non-malicious | Note that the protections provided here assume a non-malicious | |||
calling service. As the calling service always knows the users | calling service. As the calling service always knows the user's | |||
status and (absent the use of a technology like Tor) their IP | status and (absent the use of a technology like Tor) their IP | |||
address, they can violate the users privacy at will. Users who wish | address, they can violate the user's privacy at will. Users who wis h | |||
privacy against the calling sites they are using must use separate | privacy against the calling sites they are using must use separate | |||
privacy enhancing technologies such as Tor. Combined WebRTC/Tor | privacy-enhancing technologies such as Tor. Combined WebRTC/Tor | |||
implementations SHOULD arrange to route the media as well as the | implementations <bcp14>SHOULD</bcp14> arrange to route the media as | |||
well as the | ||||
signaling through Tor. Currently this will produce very suboptimal | signaling through Tor. Currently this will produce very suboptimal | |||
performance. | performance. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-9.2-5"> | |||
Additionally, any identifier which persists across multiple calls is | Additionally, any identifier which persists across multiple calls is | |||
potentially a problem for privacy, especially for anonymous calling | potentially a problem for privacy, especially for anonymous calling | |||
services. Such services SHOULD instruct the browser to use separate | services. Such services <bcp14>SHOULD</bcp14> instruct the browser t o use separate | |||
DTLS keys for each call and also to use TURN throughout the | DTLS keys for each call and also to use TURN throughout the | |||
call. Otherwise, the other side will learn linkable information that | call. Otherwise, the other side will learn linkable information that | |||
would allow them to correlate the browser across multiple calls. | would allow them to correlate the browser across multiple calls. | |||
Additionally, browsers SHOULD implement the privacy-preserving CNAME | Additionally, browsers <bcp14>SHOULD</bcp14> implement the privacy-p | |||
generation mode of <xref target="RFC7022"/>. | reserving CNAME | |||
</t> | generation mode of <xref target="RFC7022" format="default" sectionFo | |||
</section> | rmat="of" derivedContent="RFC7022"/>. | |||
</t> | ||||
<section title="Denial of Service"> | </section> | |||
<t> | <section numbered="true" toc="include" removeInRFC="false" pn="section-9.3 | |||
"> | ||||
<name slugifiedName="name-denial-of-service">Denial of Service</name> | ||||
<t indent="0" pn="section-9.3-1"> | ||||
The consent mechanisms described in this document are intended to | The consent mechanisms described in this document are intended to | |||
mitigate denial of service attacks in which an attacker uses clients | mitigate denial-of-service (DoS) attacks in which an attacker uses c lients | |||
to send large amounts of traffic to a victim without the consent of | to send large amounts of traffic to a victim without the consent of | |||
the victim. While these mechanisms are sufficient to protect victims | the victim. While these mechanisms are sufficient to protect victims | |||
who have not implemented WebRTC at all, WebRTC implementations need | who have not implemented WebRTC at all, WebRTC implementations need | |||
to be more careful. | to be more careful. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-9.3-2"> | |||
Consider the case of a call center which accepts calls via | Consider the case of a call center which accepts calls via | |||
WebRTC. An attacker proxies the call center's front-end and arranges | WebRTC. An attacker proxies the call center's front-end and arranges | |||
for multiple clients to initiate calls to the call center. Note that | for multiple clients to initiate calls to the call center. Note that | |||
this requires user consent in many cases but because the data | this requires user consent in many cases, but because the data | |||
channel does not need consent, he can use that directly. Since ICE | channel does not need consent, they can use that directly. Since ICE | |||
will complete, browsers can then be induced to send large amounts of | will complete, browsers can then be induced to send large amounts of | |||
data to the victim call center if it supports the data channel at | data to the victim call center if it supports the data channel at | |||
all. Preventing this attack requires that automated WebRTC | all. Preventing this attack requires that automated WebRTC | |||
implementations implement sensible flow control and have the ability | implementations implement sensible flow control and have the ability | |||
to triage out (i.e., stop responding to ICE probes on) calls which | to triage out (i.e., stop responding to ICE probes on) calls which | |||
are behaving badly, and especially to be prepared to remotely | are behaving badly, and especially to be prepared to remotely | |||
throttle the data channel in the absence of plausible audio and | throttle the data channel in the absence of plausible audio and | |||
video (which the attacker cannot control). | video (which the attacker cannot control). | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-9.3-3"> | |||
Another related attack is for the signaling service to swap the ICE | Another related attack is for the signaling service to swap the ICE | |||
candidates for the audio and video streams, thus forcing a browser | candidates for the audio and video streams, thus forcing a browser | |||
to send video to the sink that the other victim expects will contain | to send video to the sink that the other victim expects will contain | |||
audio (perhaps it is only expecting audio!) potentially causing | audio (perhaps it is only expecting audio!), potentially causing | |||
overload. Muxing multiple media flows over a single transport makes | overload. Muxing multiple media flows over a single transport makes | |||
it harder to individually suppress a single flow by denying ICE | it harder to individually suppress a single flow by denying ICE | |||
keepalives. Either media-level (RTCP) mechanisms must be used or the | keepalives. Either media-level (RTCP) mechanisms must be used or the | |||
implementation must deny responses entirely, thus terminating the | implementation must deny responses entirely, thus terminating the | |||
call. | call. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-9.3-4"> | |||
Yet another attack, suggested by Magnus Westerlund, is for the | Yet another attack, suggested by Magnus Westerlund, is for the | |||
attacker to cross-connect offers and answers as follows. It induces | attacker to cross-connect offers and answers as follows. It induces | |||
the victim to make a call and then uses its control of other users | the victim to make a call and then uses its control of other users' | |||
browsers to get them to attempt a call to someone. It then | browsers to get them to attempt a call to someone. It then | |||
translates their offers into apparent answers to the victim, which | translates their offers into apparent answers to the victim, which | |||
looks like large-scale parallel forking. The victim still responds | looks like large-scale parallel forking. The victim still responds | |||
to ICE responses and now the browsers all try to send media to the | to ICE responses, and now the browsers all try to send media to the | |||
victim. Implementations can defend themselves from this attack by | victim. Implementations can defend themselves from this attack by | |||
only responding to ICE Binding Requests for a limited number of | only responding to ICE Binding Requests for a limited number of | |||
remote ufrags (this is the reason for the requirement that the JS | remote ufrags (this is the reason for the requirement that the JS | |||
not be able to control the ufrag and password). | not be able to control the ufrag and password). | |||
</t> | <xref target="RFC8834" sectionFormat="comma" section="13" format="de | |||
<t> | fault" derivedLink="https://rfc-editor.org/rfc/rfc8834#section-13" derivedConten | |||
<xref target="I-D.ietf-rtcweb-rtp-usage"/> Section 13 documents a nu | t="RFC8834"/> documents a number | |||
mber | ||||
of potential RTCP-based DoS attacks and countermeasures. | of potential RTCP-based DoS attacks and countermeasures. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-9.3-5"> | |||
Note that attacks based on confusing one end or the other about | Note that attacks based on confusing one end or the other about | |||
consent are possible even in the face of the third-party identity | consent are possible even in the face of the third-party identity | |||
mechanism as long as major parts of the signaling messages are not | mechanism as long as major parts of the signaling messages are not | |||
signed. On the other hand, signing the entire message severely | signed. On the other hand, signing the entire message severely | |||
restricts the capabilities of the calling application, so there are | restricts the capabilities of the calling application, so there are | |||
difficult tradeoffs here. | difficult tradeoffs here. | |||
</t> | </t> | |||
</section> | </section> | |||
<section numbered="true" toc="include" removeInRFC="false" pn="section-9.4 | ||||
<section title="IdP Authentication Mechanism"> | "> | |||
<t> | <name slugifiedName="name-idp-authentication-mechanis">IdP Authenticatio | |||
n Mechanism</name> | ||||
<t indent="0" pn="section-9.4-1"> | ||||
This mechanism relies for its security on the IdP and on the | This mechanism relies for its security on the IdP and on the | |||
PeerConnection correctly enforcing the security invariants described | PeerConnection correctly enforcing the security invariants described | |||
above. At a high level, the IdP is attesting that the user | above. At a high level, the IdP is attesting that the user | |||
identified in the assertion wishes to be associated with the | identified in the assertion wishes to be associated with the | |||
assertion. Thus, it must not be possible for arbitrary third parties | assertion. Thus, it must not be possible for arbitrary third parties | |||
to get assertions tied to a user or to produce assertions that RPs | to get assertions tied to a user or to produce assertions that RPs | |||
will accept. | will accept. | |||
</t> | </t> | |||
<section anchor="sec.pc-origin" numbered="true" toc="include" removeInRF | ||||
<section title="PeerConnection Origin Check" anchor="sec.pc-origin"> | C="false" pn="section-9.4.1"> | |||
<t> | <name slugifiedName="name-peerconnection-origin-check">PeerConnection | |||
Origin Check</name> | ||||
<t indent="0" pn="section-9.4.1-1"> | ||||
Fundamentally, the IdP proxy is just a piece of HTML and JS loaded | Fundamentally, the IdP proxy is just a piece of HTML and JS loaded | |||
by the browser, so nothing stops a Web attacker from creating | by the browser, so nothing stops a Web attacker from creating | |||
their own IFRAME, loading the IdP proxy HTML/JS, and requesting a | their own IFRAME, loading the IdP proxy HTML/JS, and requesting a | |||
signature over his own keys rather than those generated in | signature over their own keys rather than those generated in | |||
the browser. However, that proxy would be in the | the browser. However, that proxy would be in the | |||
attacker's origin, not the IdP's origin. Only the | attacker's origin, not the IdP's origin. Only the | |||
browser itself can instantiate a context that (a) is in the IdP's | browser itself can instantiate a context that (a) is in the IdP's | |||
origin and | origin and | |||
(b) exposes the correct API surface. Thus, the IdP proxy on | (b) exposes the correct API surface. Thus, the IdP proxy on | |||
the sender's side MUST ensure that it is running in the IdP's orig | the sender's side <bcp14>MUST</bcp14> ensure that it is running in | |||
in | the IdP's origin | |||
prior to issuing assertions. | prior to issuing assertions. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-9.4.1-2"> | |||
Note that this check only asserts that the browser (or some other | Note that this check only asserts that the browser (or some other | |||
entity with access to the user's authentication data) attests to | entity with access to the user's authentication data) attests to | |||
the request and hence to the fingerprint. It does not demonstrate | the request and hence to the fingerprint. It does not demonstrate | |||
that the browser has access to the associated private | that the browser has access to the associated private | |||
key, and therefore an attacker can attach their own identity | key, and therefore an attacker can attach their own identity | |||
to another party's keying material, thus making a call which | to another party's keying material, thus making a call which | |||
comes from Alice appear to come from the attacker. | comes from Alice appear to come from the attacker. | |||
See <xref target="I-D.ietf-mmusic-sdp-uks"/> for defenses against this | See <xref target="RFC8844" format="default" sectionFormat="of" der ivedContent="RFC8844"/> for defenses against this | |||
form of attack. | form of attack. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="sec.sec-idp-uri" numbered="true" toc="include" removeIn | ||||
<section title="IdP Well-known URI" anchor="sec.sec-idp-uri"> | RFC="false" pn="section-9.4.2"> | |||
<t> | <name slugifiedName="name-idp-well-known-uri">IdP Well-Known URI</name | |||
As described in <xref target="sec.idp-uri"/> the IdP proxy HTML/JS | > | |||
<t indent="0" pn="section-9.4.2-1"> | ||||
As described in <xref target="sec.idp-uri" format="default" sectio | ||||
nFormat="of" derivedContent="Section 7.5"/>, the IdP proxy HTML/JS | ||||
landing page is located at a well-known URI based on the IdP's | landing page is located at a well-known URI based on the IdP's | |||
domain name. This requirement prevents an attacker who can write | domain name. This requirement prevents an attacker who can write | |||
some resources at the IdP (e.g., on one's Facebook wall) from | some resources at the IdP (e.g., on one's Facebook wall) from | |||
being able to impersonate the IdP. | being able to impersonate the IdP. | |||
</t> | </t> | |||
</section> | </section> | |||
<section numbered="true" toc="include" removeInRFC="false" pn="section-9 | ||||
<section title="Privacy of IdP-generated identities and the hosting si | .4.3"> | |||
te"> | <name slugifiedName="name-privacy-of-idp-generated-id">Privacy of IdP- | |||
<t> | Generated Identities and the Hosting Site</name> | |||
<t indent="0" pn="section-9.4.3-1"> | ||||
Depending on the structure of the IdP's assertions, the calling | Depending on the structure of the IdP's assertions, the calling | |||
site may learn the user's identity from the perspective of the | site may learn the user's identity from the perspective of the | |||
IdP. In many cases this is not an issue because the user is | IdP. In many cases, this is not an issue because the user is | |||
authenticating to the site via the IdP in any case, for instance | authenticating to the site via the IdP in any case -- for instance | |||
, | ||||
when the user has logged in with Facebook Connect and is then | when the user has logged in with Facebook Connect and is then | |||
authenticating their call with a Facebook identity. However, in | authenticating their call with a Facebook identity. However, in | |||
other case, the user may not have already revealed their identity | other cases, the user may not have already revealed their identity | |||
to the site. In general, IdPs SHOULD either verify that the user | to the site. In general, IdPs <bcp14>SHOULD</bcp14> either verify | |||
that the user | ||||
is willing to have their identity revealed to the site (e.g., | is willing to have their identity revealed to the site (e.g., | |||
through the usual IdP permissions dialog) or arrange that the | through the usual IdP permissions dialog) or arrange that the | |||
identity information is only available to known RPs (e.g., social | identity information is only available to known RPs (e.g., social | |||
graph adjacencies) but not to the calling site. The "domain" field | graph adjacencies) but not to the calling site. The "domain" field | |||
of the assertion request can be used to check that the user has | of the assertion request can be used to check that the user has | |||
agreed to disclose their identity to the calling site; because it | agreed to disclose their identity to the calling site; because it | |||
is supplied by the PeerConnection it can be trusted to be correct. | is supplied by the PeerConnection it can be trusted to be correct. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="sec.sec-third-party" numbered="true" toc="include" remo | ||||
<section title="Security of Third-Party IdPs" anchor="sec.sec-third-pa | veInRFC="false" pn="section-9.4.4"> | |||
rty"> | <name slugifiedName="name-security-of-third-party-idp">Security of Thi | |||
<t> | rd-Party IdPs</name> | |||
<t indent="0" pn="section-9.4.4-1"> | ||||
As discussed above, each third-party IdP represents a new | As discussed above, each third-party IdP represents a new | |||
universal trust point and therefore the number of these IdPs needs | universal trust point and therefore the number of these IdPs needs | |||
to be quite limited. Most IdPs, even those which issue unqualified | to be quite limited. Most IdPs, even those which issue unqualified | |||
identities such as Facebook, can be recast as authoritative IdPs | identities such as Facebook, can be recast as authoritative IdPs | |||
(e.g., 123456@facebook.com). However, in such cases, the user | (e.g., 123456@facebook.com). However, in such cases, the user | |||
interface implications are not entirely desirable. One | interface implications are not entirely desirable. One | |||
intermediate approach is to have special (potentially user | intermediate approach is to have special (potentially user | |||
configurable) UI for large authoritative IdPs, thus allowing the | configurable) UI for large authoritative IdPs, thus allowing the | |||
user to instantly grasp that the call is being authenticated by | user to instantly grasp that the call is being authenticated by | |||
Facebook, Google, etc. | Facebook, Google, etc. | |||
</t> | </t> | |||
<section numbered="true" toc="include" removeInRFC="false" pn="section | ||||
<section title="Confusable Characters"> | -9.4.4.1"> | |||
<t> | <name slugifiedName="name-confusable-characters">Confusable Characte | |||
rs</name> | ||||
<t indent="0" pn="section-9.4.4.1-1"> | ||||
Because a broad range of characters are permitted in identity | Because a broad range of characters are permitted in identity | |||
strings, it may be possible for attackers to craft identities | strings, it may be possible for attackers to craft identities | |||
which are confusable with other identities (see | which are confusable with other identities (see | |||
<xref target="RFC6943"/> for more on this topic). This is | <xref target="RFC6943" format="default" sectionFormat="of" deriv edContent="RFC6943"/> for more on this topic). This is | |||
a problem with any identifier space of this type | a problem with any identifier space of this type | |||
(e.g., e-mail addresses). | (e.g., email addresses). | |||
Those minting identifers should avoid mixed scripts and similar | Those minting identifiers should avoid mixed scripts and similar | |||
confusable characters. Those presenting these identifiers to a | confusable characters. Those presenting these identifiers to a | |||
user should consider highlighting cases of mixed script usage | user should consider highlighting cases of mixed script usage | |||
(see <xref target="RFC5890"/>, section 4.4). Other best practice | (see <xref target="RFC5890" sectionFormat="comma" section="4.4" | |||
s are still in development. | format="default" derivedLink="https://rfc-editor.org/rfc/rfc5890#section-4.4" de | |||
</t> | rivedContent="RFC5890"/>). Other best practices are still in development. | |||
</section> | </t> | |||
</section> | </section> | |||
</section> | ||||
<section title="Web Security Feature Interactions"> | <section numbered="true" toc="include" removeInRFC="false" pn="section-9 | |||
<t> | .4.5"> | |||
<name slugifiedName="name-web-security-feature-intera">Web Security Fe | ||||
ature Interactions</name> | ||||
<t indent="0" pn="section-9.4.5-1"> | ||||
A number of optional Web security features have the potential to | A number of optional Web security features have the potential to | |||
cause issues for this mechanism, as discussed below. | cause issues for this mechanism, as discussed below. | |||
</t> | </t> | |||
<section anchor="sec.popup-blocking" numbered="true" toc="include" rem | ||||
<section title="Popup Blocking" anchor="sec.popup-blocking"> | oveInRFC="false" pn="section-9.4.5.1"> | |||
<t> | <name slugifiedName="name-popup-blocking">Popup Blocking</name> | |||
When popup blocking is in use, the IdP proxy is unable to genera | <t indent="0" pn="section-9.4.5.1-1"> | |||
te popup windows, dialogs or | When popup blocking is in use, the IdP proxy is unable to genera | |||
te popup windows, dialogs, or | ||||
any other form of user interactions. This prevents the IdP | any other form of user interactions. This prevents the IdP | |||
proxy from being used to circumvent user interaction. The | proxy from being used to circumvent user interaction. The | |||
"LOGINNEEDED" message allows the IdP proxy to inform the calling | "LOGINNEEDED" message allows the IdP proxy to inform the calling | |||
site of a need for user login, providing the information | site of a need for user login, providing the information | |||
necessary to satisfy this requirement without resorting to | necessary to satisfy this requirement without resorting to | |||
direct user interaction from the IdP proxy itself. | direct user interaction from the IdP proxy itself. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="sec.3rd-party-cookies" numbered="true" toc="include" | ||||
<section title="Third Party Cookies" anchor="sec.3rd-party-cookies"> | removeInRFC="false" pn="section-9.4.5.2"> | |||
<t> | <name slugifiedName="name-third-party-cookies">Third Party Cookies</ | |||
name> | ||||
<t indent="0" pn="section-9.4.5.2-1"> | ||||
Some browsers allow users to block third party cookies (cookies | Some browsers allow users to block third party cookies (cookies | |||
associated with origins other than the top level page) for | associated with origins other than the top-level page) for | |||
privacy reasons. Any IdP which uses cookies to persist logins | privacy reasons. Any IdP which uses cookies to persist logins | |||
will be broken by third-party cookie blocking. One option is to | will be broken by third-party cookie blocking. One option is to | |||
accept this as a limitation; another is to have the | accept this as a limitation; another is to have the | |||
PeerConnection object disable third-party cookie blocking for | PeerConnection object disable third-party cookie blocking for | |||
the IdP proxy. | the IdP proxy. | |||
</t> | </t> | |||
</section> | ||||
</section> | </section> | |||
</section> | </section> | |||
</section> | </section> | |||
</section> | ||||
<section title="IANA Considerations" anchor="sec.iana-cons"> | <section anchor="sec.iana-cons" numbered="true" toc="include" removeInRFC="f | |||
<t> | alse" pn="section-10"> | |||
This specification defines the <spanx style="verb">identity</spanx> | <name slugifiedName="name-iana-considerations">IANA Considerations</name> | |||
SDP attribute per the procedures of Section 8.2.4 of <xref | <t indent="0" pn="section-10-1"> | |||
target="RFC4566"/>. The required information for the registration is | This specification defines the "identity" | |||
SDP attribute per the procedures of <xref target="RFC4566" sectionForm | ||||
at="of" section="8.2.4" format="default" derivedLink="https://rfc-editor.org/rfc | ||||
/rfc4566#section-8.2.4" derivedContent="RFC4566"/>. The required information fo | ||||
r the registration is | ||||
included here: | included here: | |||
<list style="hanging"> | ||||
<t hangText="Contact Name:">IESG (iesg@ietf.org)</t> | ||||
<t hangText="Attribute Name:">identity</t> | ||||
<t hangText="Long Form:">identity</t> | ||||
<t hangText="Type of Attribute:">session-level</t> | ||||
<t hangText="Charset Considerations:">This attribute is not subject | ||||
to the charset attribute.</t> | ||||
<t hangText="Purpose:">This attribute carries an identity assertion, | ||||
binding an identity to the transport-level security session.</t> | ||||
<t hangText="Appropriate Values:">See <xref | ||||
target="sec.sdp-id-attr"/> of RFCXXXX [[Editor Note: This | ||||
document.]]</t> | ||||
<t hangText="Mux Category:">NORMAL.</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
This section reqisters the <spanx style="verb">idp-proxy</spanx> well- | ||||
known | ||||
URI from <xref target="RFC5785"/>. | ||||
<list style="hanging"> | ||||
<t hangText="URI suffix:">idp-proxy</t> | ||||
<t hangText="Change controller:">IETF</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="Acknowledgements"> | ||||
<t> | ||||
Bernard Aboba, Harald Alvestrand, Richard Barnes, Dan Druta, Cullen | ||||
Jennings, Hadriel Kaplan, Matthew Kaufman, Jim McEachern, Martin | ||||
Thomson, Magnus Westerland. Matthew Kaufman provided the UI material in | ||||
<xref target="sec.proposal.comsec"/>. Christer Holmberg provided | ||||
the initial version of <xref target="sec.sdp-id-attr-oa"/>. | ||||
</t> | </t> | |||
</section> | <dl newline="false" spacing="normal" indent="3" pn="section-10-2"> | |||
<dt pn="section-10-2.1">Contact Name:</dt> | ||||
<section title="Changes"> | <dd pn="section-10-2.2">IESG (iesg@ietf.org)</dd> | |||
<t> [RFC Editor: Please remove this section prior to publication.]</t> | <dt pn="section-10-2.3">Attribute Name:</dt> | |||
<section title="Changes since -15"> | <dd pn="section-10-2.4">identity</dd> | |||
<t>Rewrite the Identity section in more conventional offer/answer format | <dt pn="section-10-2.5">Long Form:</dt> | |||
.</t> | <dd pn="section-10-2.6">identity</dd> | |||
<t>Clarify rules on changing identities.</t> | <dt pn="section-10-2.7">Type of Attribute:</dt> | |||
</section> | <dd pn="section-10-2.8">session</dd> | |||
<dt pn="section-10-2.9">Charset Considerations:</dt> | ||||
<section title="Changes since -11"> | <dd pn="section-10-2.10">This attribute is not subject | |||
<t> | to the charset attribute.</dd> | |||
Update discussion of IdP security model | <dt pn="section-10-2.11">Purpose:</dt> | |||
</t> | <dd pn="section-10-2.12">This attribute carries an identity assertion, | |||
binding an identity to the transport-level security session.</dd> | ||||
<t> | <dt pn="section-10-2.13">Appropriate Values:</dt> | |||
Replace "domain name" with RFC 3986 Authority | <dd pn="section-10-2.14">See <xref target="sec.sdp-id-attr" format="defa | |||
</t> | ult" sectionFormat="of" derivedContent="Section 5"/> of RFC 8827.</dd> | |||
<dt pn="section-10-2.15">Mux Category:</dt> | ||||
<t> | <dd pn="section-10-2.16">NORMAL</dd> | |||
Clean up discussion of how to generate IdP URI. | </dl> | |||
</t> | <t indent="0" pn="section-10-3"> | |||
This section registers the "idp-proxy" well-known | ||||
<t> | URI from <xref target="RFC8615" format="default" sectionFormat="of" de | |||
Remove obsolete text about null cipher suites. | rivedContent="RFC8615"/>. | |||
</t> | </t> | |||
<dl newline="false" spacing="normal" indent="3" pn="section-10-4"> | ||||
<t> | <dt pn="section-10-4.1">URI suffix:</dt> | |||
Remove obsolete appendixes about older IdP systems | <dd pn="section-10-4.2">idp-proxy</dd> | |||
</t> | <dt pn="section-10-4.3">Change controller:</dt> | |||
<dd pn="section-10-4.4">IETF</dd> | ||||
<t> | </dl> | |||
Require support for ECDSA, PFS, and AEAD | ||||
</t> | ||||
</section> | ||||
<section title="Changes since -10"> | ||||
<t> | ||||
Update cipher suite profiles. | ||||
</t> | ||||
<t> | ||||
Rework IdP interaction based on implementation experience in | ||||
Firefox. | ||||
</t> | ||||
</section> | ||||
<section title="Changes since -06"> | ||||
<t> | ||||
Replaced RTCWEB and RTC-Web with WebRTC, except when referring to the | ||||
IETF WG | ||||
</t> | ||||
<t> | ||||
Forbade use in mixed content as discussed in Orlando. | ||||
</t> | ||||
<t> | ||||
Added a requirement to surface NULL ciphers to the top-level. | ||||
</t> | ||||
<t> | ||||
Tried to clarify SRTP versus DTLS-SRTP. | ||||
</t> | ||||
<t> | ||||
Added a section on screen sharing permissions. | ||||
</t> | ||||
<t> | ||||
Assorted editorial work. | ||||
</t> | ||||
</section> | ||||
<section title="Changes since -05"> | ||||
<t> | ||||
The following changes have been made since the -05 draft. | ||||
</t> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t> | ||||
Response to comments from Richard Barnes | ||||
</t> | ||||
<t> | ||||
More explanation of the IdP security properties and the federation | ||||
use case. | ||||
</t> | ||||
<t> | ||||
Editorial cleanup. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="Changes since -03"> | ||||
<t> | ||||
Version -04 was a version control mistake. Please ignore. | ||||
</t> | ||||
<t> | ||||
The following changes have been made since the -04 draft. | ||||
</t> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t> | ||||
Move origin check from IdP to RP per discussion in YVR. | ||||
</t> | ||||
<t> | ||||
Clarified treatment of X.509-level identities. | ||||
</t> | ||||
<t> | ||||
Editorial cleanup. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="Changes since -03"> | ||||
</section> | ||||
<section title="Changes since -02"> | ||||
<t> | ||||
The following changes have been made since the -02 draft. | ||||
</t> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t> | ||||
Forbid persistent HTTP permissions. | ||||
</t> | ||||
<t> | ||||
Clarified the text in S 5.4 to clearly refer to requirements on | ||||
the API to provide functionality to the site. | ||||
</t> | ||||
<t> | ||||
Fold in the IETF portion of draft-rescorla-rtcweb-generic-idp | ||||
</t> | ||||
<t> | ||||
Retarget the continuing consent section to assume Binding Requests | ||||
</t> | ||||
<t> | ||||
Added some more privacy and linkage text in various places. | ||||
</t> | ||||
<t> | ||||
Editorial improvements | ||||
</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
</section> | </section> | |||
</middle> | </middle> | |||
<back> | <back> | |||
<displayreference target="I-D.ietf-tls-dtls13" to="TLS-DTLS13"/> | ||||
<references pn="section-11"> | ||||
<name slugifiedName="name-references">References</name> | ||||
<references pn="section-11.1"> | ||||
<name slugifiedName="name-normative-references">Normative References</na | ||||
me> | ||||
<reference anchor="FIPS186" quoteTitle="true" target="https://doi.org/10 | ||||
.6028/NIST.FIPS.186-4" derivedAnchor="FIPS186"> | ||||
<front> | ||||
<title>Digital Signature Standard (DSS)</title> | ||||
<author> | ||||
<organization showOnFrontPage="true">National Institute of Standar | ||||
ds and Technology (NIST)</organization> | ||||
</author> | ||||
<date year="2013" month="July"/> | ||||
</front> | ||||
<seriesInfo name="NIST PUB" value="186-4"/> | ||||
<seriesInfo name="DOI" value="10.6028/NIST.FIPS.186-4"/> | ||||
</reference> | ||||
<reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2 | ||||
119" quoteTitle="true" derivedAnchor="RFC2119"> | ||||
<front> | ||||
<title>Key words for use in RFCs to Indicate Requirement Levels</tit | ||||
le> | ||||
<author initials="S." surname="Bradner" fullname="S. Bradner"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="1997" month="March"/> | ||||
<abstract> | ||||
<t indent="0">In many standards track documents several words are | ||||
used to signify the requirements in the specification. These words are often ca | ||||
pitalized. This document defines these words as they should be interpreted in IE | ||||
TF documents. This document specifies an Internet Best Current Practices for th | ||||
e Internet Community, and requests discussion and suggestions for improvements.< | ||||
/t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="BCP" value="14"/> | ||||
<seriesInfo name="RFC" value="2119"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC2119"/> | ||||
</reference> | ||||
<reference anchor="RFC2818" target="https://www.rfc-editor.org/info/rfc2 | ||||
818" quoteTitle="true" derivedAnchor="RFC2818"> | ||||
<front> | ||||
<title>HTTP Over TLS</title> | ||||
<author initials="E." surname="Rescorla" fullname="E. Rescorla"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2000" month="May"/> | ||||
<abstract> | ||||
<t indent="0">This memo describes how to use Transport Layer Secur | ||||
ity (TLS) to secure Hypertext Transfer Protocol (HTTP) connections over the Inte | ||||
rnet. This memo provides information for the Internet community.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="2818"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC2818"/> | ||||
</reference> | ||||
<reference anchor="RFC3264" target="https://www.rfc-editor.org/info/rfc3 | ||||
264" quoteTitle="true" derivedAnchor="RFC3264"> | ||||
<front> | ||||
<title>An Offer/Answer Model with Session Description Protocol (SDP) | ||||
</title> | ||||
<author initials="J." surname="Rosenberg" fullname="J. Rosenberg"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="H." surname="Schulzrinne" fullname="H. Schulzrinne | ||||
"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2002" month="June"/> | ||||
<abstract> | ||||
<t indent="0">This document defines a mechanism by which two entit | ||||
ies can make use of the Session Description Protocol (SDP) to arrive at a common | ||||
view of a multimedia session between them. In the model, one participant offer | ||||
s the other a description of the desired session from their perspective, and the | ||||
other participant answers with the desired session from their perspective. Thi | ||||
s offer/answer model is most useful in unicast sessions where information from b | ||||
oth participants is needed for the complete view of the session. The offer/answ | ||||
er model is used by protocols like the Session Initiation Protocol (SIP). [STAN | ||||
DARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="3264"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC3264"/> | ||||
</reference> | ||||
<reference anchor="RFC3711" target="https://www.rfc-editor.org/info/rfc3 | ||||
711" quoteTitle="true" derivedAnchor="RFC3711"> | ||||
<front> | ||||
<title>The Secure Real-time Transport Protocol (SRTP)</title> | ||||
<author initials="M." surname="Baugher" fullname="M. Baugher"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="D." surname="McGrew" fullname="D. McGrew"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="M." surname="Naslund" fullname="M. Naslund"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="E." surname="Carrara" fullname="E. Carrara"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="K." surname="Norrman" fullname="K. Norrman"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2004" month="March"/> | ||||
<abstract> | ||||
<t indent="0">This document describes the Secure Real-time Transpo | ||||
rt Protocol (SRTP), a profile of the Real-time Transport Protocol (RTP), which c | ||||
an provide confidentiality, message authentication, and replay protection to the | ||||
RTP traffic and to the control traffic for RTP, the Real-time Transport Control | ||||
Protocol (RTCP). [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="3711"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC3711"/> | ||||
</reference> | ||||
<reference anchor="RFC3986" target="https://www.rfc-editor.org/info/rfc3 | ||||
986" quoteTitle="true" derivedAnchor="RFC3986"> | ||||
<front> | ||||
<title>Uniform Resource Identifier (URI): Generic Syntax</title> | ||||
<author initials="T." surname="Berners-Lee" fullname="T. Berners-Lee | ||||
"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="R." surname="Fielding" fullname="R. Fielding"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="L." surname="Masinter" fullname="L. Masinter"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2005" month="January"/> | ||||
<abstract> | ||||
<t indent="0">A Uniform Resource Identifier (URI) is a compact seq | ||||
uence of characters that identifies an abstract or physical resource. This spec | ||||
ification defines the generic URI syntax and a process for resolving URI referen | ||||
ces that might be in relative form, along with guidelines and security considera | ||||
tions for the use of URIs on the Internet. The URI syntax defines a grammar tha | ||||
t is a superset of all valid URIs, allowing an implementation to parse the commo | ||||
n components of a URI reference without knowing the scheme-specific requirements | ||||
of every possible identifier. This specification does not define a generative | ||||
grammar for URIs; that task is performed by the individual specifications of eac | ||||
h URI scheme. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="STD" value="66"/> | ||||
<seriesInfo name="RFC" value="3986"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC3986"/> | ||||
</reference> | ||||
<reference anchor="RFC4566" target="https://www.rfc-editor.org/info/rfc4 | ||||
566" quoteTitle="true" derivedAnchor="RFC4566"> | ||||
<front> | ||||
<title>SDP: Session Description Protocol</title> | ||||
<author initials="M." surname="Handley" fullname="M. Handley"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="V." surname="Jacobson" fullname="V. Jacobson"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="C." surname="Perkins" fullname="C. Perkins"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2006" month="July"/> | ||||
<abstract> | ||||
<t indent="0">This memo defines the Session Description Protocol ( | ||||
SDP). SDP is intended for describing multimedia sessions for the purposes of se | ||||
ssion announcement, session invitation, and other forms of multimedia session in | ||||
itiation. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="4566"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC4566"/> | ||||
</reference> | ||||
<reference anchor="RFC4568" target="https://www.rfc-editor.org/info/rfc4 | ||||
568" quoteTitle="true" derivedAnchor="RFC4568"> | ||||
<front> | ||||
<title>Session Description Protocol (SDP) Security Descriptions for | ||||
Media Streams</title> | ||||
<author initials="F." surname="Andreasen" fullname="F. Andreasen"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="M." surname="Baugher" fullname="M. Baugher"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="D." surname="Wing" fullname="D. Wing"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2006" month="July"/> | ||||
<abstract> | ||||
<t indent="0">This document defines a Session Description Protocol | ||||
(SDP) cryptographic attribute for unicast media streams. The attribute describ | ||||
es a cryptographic key and other parameters that serve to configure security for | ||||
a unicast media stream in either a single message or a roundtrip exchange. The | ||||
attribute can be used with a variety of SDP media transports, and this document | ||||
defines how to use it for the Secure Real-time Transport Protocol (SRTP) unicas | ||||
t media streams. The SDP crypto attribute requires the services of a data secur | ||||
ity protocol to secure the SDP message. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="4568"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC4568"/> | ||||
</reference> | ||||
<reference anchor="RFC4648" target="https://www.rfc-editor.org/info/rfc4 | ||||
648" quoteTitle="true" derivedAnchor="RFC4648"> | ||||
<front> | ||||
<title>The Base16, Base32, and Base64 Data Encodings</title> | ||||
<author initials="S." surname="Josefsson" fullname="S. Josefsson"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2006" month="October"/> | ||||
<abstract> | ||||
<t indent="0">This document describes the commonly used base 64, b | ||||
ase 32, and base 16 encoding schemes. It also discusses the use of line-feeds i | ||||
n encoded data, use of padding in encoded data, use of non-alphabet characters i | ||||
n encoded data, use of different encoding alphabets, and canonical encodings. [ | ||||
STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="4648"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC4648"/> | ||||
</reference> | ||||
<reference anchor="RFC5763" target="https://www.rfc-editor.org/info/rfc5 | ||||
763" quoteTitle="true" derivedAnchor="RFC5763"> | ||||
<front> | ||||
<title>Framework for Establishing a Secure Real-time Transport Proto | ||||
col (SRTP) Security Context Using Datagram Transport Layer Security (DTLS)</titl | ||||
e> | ||||
<author initials="J." surname="Fischl" fullname="J. Fischl"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="H." surname="Tschofenig" fullname="H. Tschofenig"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="E." surname="Rescorla" fullname="E. Rescorla"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2010" month="May"/> | ||||
<abstract> | ||||
<t indent="0">This document specifies how to use the Session Initi | ||||
ation Protocol (SIP) to establish a Secure Real-time Transport Protocol (SRTP) s | ||||
ecurity context using the Datagram Transport Layer Security (DTLS) protocol. It | ||||
describes a mechanism of transporting a fingerprint attribute in the Session De | ||||
scription Protocol (SDP) that identifies the key that will be presented during t | ||||
he DTLS handshake. The key exchange travels along the media path as opposed to | ||||
the signaling path. The SIP Identity mechanism can be used to protect the integ | ||||
rity of the fingerprint attribute from modification by intermediate proxies. [S | ||||
TANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="5763"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC5763"/> | ||||
</reference> | ||||
<reference anchor="RFC5764" target="https://www.rfc-editor.org/info/rfc5 | ||||
764" quoteTitle="true" derivedAnchor="RFC5764"> | ||||
<front> | ||||
<title>Datagram Transport Layer Security (DTLS) Extension to Establi | ||||
sh Keys for the Secure Real-time Transport Protocol (SRTP)</title> | ||||
<author initials="D." surname="McGrew" fullname="D. McGrew"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="E." surname="Rescorla" fullname="E. Rescorla"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2010" month="May"/> | ||||
<abstract> | ||||
<t indent="0">This document describes a Datagram Transport Layer S | ||||
ecurity (DTLS) extension to establish keys for Secure RTP (SRTP) and Secure RTP | ||||
Control Protocol (SRTCP) flows. DTLS keying happens on the media path, independ | ||||
ent of any out-of-band signalling channel present. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="5764"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC5764"/> | ||||
</reference> | ||||
<reference anchor="RFC5890" target="https://www.rfc-editor.org/info/rfc5 | ||||
890" quoteTitle="true" derivedAnchor="RFC5890"> | ||||
<front> | ||||
<title>Internationalized Domain Names for Applications (IDNA): Defin | ||||
itions and Document Framework</title> | ||||
<author initials="J." surname="Klensin" fullname="J. Klensin"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2010" month="August"/> | ||||
<abstract> | ||||
<t indent="0">This document is one of a collection that, together, | ||||
describe the protocol and usage context for a revision of Internationalized Dom | ||||
ain Names for Applications (IDNA), superseding the earlier version. It describe | ||||
s the document collection and provides definitions and other material that are c | ||||
ommon to the set. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="5890"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC5890"/> | ||||
</reference> | ||||
<reference anchor="RFC6347" target="https://www.rfc-editor.org/info/rfc6 | ||||
347" quoteTitle="true" derivedAnchor="RFC6347"> | ||||
<front> | ||||
<title>Datagram Transport Layer Security Version 1.2</title> | ||||
<author initials="E." surname="Rescorla" fullname="E. Rescorla"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="N." surname="Modadugu" fullname="N. Modadugu"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2012" month="January"/> | ||||
<abstract> | ||||
<t indent="0">This document specifies version 1.2 of the Datagram | ||||
Transport Layer Security (DTLS) protocol. The DTLS protocol provides communicat | ||||
ions privacy for datagram protocols. The protocol allows client/server applicat | ||||
ions to communicate in a way that is designed to prevent eavesdropping, tamperin | ||||
g, or message forgery. The DTLS protocol is based on the Transport Layer Securi | ||||
ty (TLS) protocol and provides equivalent security guarantees. Datagram semanti | ||||
cs of the underlying transport are preserved by the DTLS protocol. This documen | ||||
t updates DTLS 1.0 to work with TLS version 1.2. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="6347"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC6347"/> | ||||
</reference> | ||||
<reference anchor="RFC6454" target="https://www.rfc-editor.org/info/rfc6 | ||||
454" quoteTitle="true" derivedAnchor="RFC6454"> | ||||
<front> | ||||
<title>The Web Origin Concept</title> | ||||
<author initials="A." surname="Barth" fullname="A. Barth"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2011" month="December"/> | ||||
<abstract> | ||||
<t indent="0">This document defines the concept of an "origin", wh | ||||
ich is often used as the scope of authority or privilege by user agents. Typica | ||||
lly, user agents isolate content retrieved from different origins to prevent mal | ||||
icious web site operators from interfering with the operation of benign web site | ||||
s. In addition to outlining the principles that underlie the concept of origin, | ||||
this document details how to determine the origin of a URI and how to serialize | ||||
an origin into a string. It also defines an HTTP header field, named "Origin", | ||||
that indicates which origins are associated with an HTTP request. [STANDARDS- | ||||
TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="6454"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC6454"/> | ||||
</reference> | ||||
<reference anchor="RFC7022" target="https://www.rfc-editor.org/info/rfc7 | ||||
022" quoteTitle="true" derivedAnchor="RFC7022"> | ||||
<front> | ||||
<title>Guidelines for Choosing RTP Control Protocol (RTCP) Canonical | ||||
Names (CNAMEs)</title> | ||||
<author initials="A." surname="Begen" fullname="A. Begen"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="C." surname="Perkins" fullname="C. Perkins"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="D." surname="Wing" fullname="D. Wing"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="E." surname="Rescorla" fullname="E. Rescorla"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2013" month="September"/> | ||||
<abstract> | ||||
<t indent="0">The RTP Control Protocol (RTCP) Canonical Name (CNAM | ||||
E) is a persistent transport-level identifier for an RTP endpoint. While the Sy | ||||
nchronization Source (SSRC) identifier of an RTP endpoint may change if a collis | ||||
ion is detected or when the RTP application is restarted, its RTCP CNAME is mean | ||||
t to stay unchanged, so that RTP endpoints can be uniquely identified and associ | ||||
ated with their RTP media streams.</t> | ||||
<t indent="0">For proper functionality, RTCP CNAMEs should be uniq | ||||
ue within the participants of an RTP session. However, the existing guidelines | ||||
for choosing the RTCP CNAME provided in the RTP standard (RFC 3550) are insuffic | ||||
ient to achieve this uniqueness. RFC 6222 was published to update those guideli | ||||
nes to allow endpoints to choose unique RTCP CNAMEs. Unfortunately, later inves | ||||
tigations showed that some parts of the new algorithms were unnecessarily compli | ||||
cated and/or ineffective. This document addresses these concerns and replaces R | ||||
FC 6222.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="7022"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC7022"/> | ||||
</reference> | ||||
<reference anchor="RFC7675" target="https://www.rfc-editor.org/info/rfc7 | ||||
675" quoteTitle="true" derivedAnchor="RFC7675"> | ||||
<front> | ||||
<title>Session Traversal Utilities for NAT (STUN) Usage for Consent | ||||
Freshness</title> | ||||
<author initials="M." surname="Perumal" fullname="M. Perumal"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="D." surname="Wing" fullname="D. Wing"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="R." surname="Ravindranath" fullname="R. Ravindrana | ||||
th"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="T." surname="Reddy" fullname="T. Reddy"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="M." surname="Thomson" fullname="M. Thomson"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2015" month="October"/> | ||||
<abstract> | ||||
<t indent="0">To prevent WebRTC applications, such as browsers, fr | ||||
om launching attacks by sending traffic to unwilling victims, periodic consent t | ||||
o send needs to be obtained from remote endpoints.</t> | ||||
<t indent="0">This document describes a consent mechanism using a | ||||
new Session Traversal Utilities for NAT (STUN) usage.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="7675"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC7675"/> | ||||
</reference> | ||||
<reference anchor="RFC7918" target="https://www.rfc-editor.org/info/rfc7 | ||||
918" quoteTitle="true" derivedAnchor="RFC7918"> | ||||
<front> | ||||
<title>Transport Layer Security (TLS) False Start</title> | ||||
<author initials="A." surname="Langley" fullname="A. Langley"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="N." surname="Modadugu" fullname="N. Modadugu"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="B." surname="Moeller" fullname="B. Moeller"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2016" month="August"/> | ||||
<abstract> | ||||
<t indent="0">This document specifies an optional behavior of Tran | ||||
sport Layer Security (TLS) client implementations, dubbed "False Start". It aff | ||||
ects only protocol timing, not on-the-wire protocol data, and can be implemented | ||||
unilaterally. A TLS False Start reduces handshake latency to one round trip.</ | ||||
t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="7918"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC7918"/> | ||||
</reference> | ||||
<reference anchor="RFC8122" target="https://www.rfc-editor.org/info/rfc8 | ||||
122" quoteTitle="true" derivedAnchor="RFC8122"> | ||||
<front> | ||||
<title>Connection-Oriented Media Transport over the Transport Layer | ||||
Security (TLS) Protocol in the Session Description Protocol (SDP)</title> | ||||
<author initials="J." surname="Lennox" fullname="J. Lennox"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="C." surname="Holmberg" fullname="C. Holmberg"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2017" month="March"/> | ||||
<abstract> | ||||
<t indent="0">This document specifies how to establish secure conn | ||||
ection-oriented media transport sessions over the Transport Layer Security (TLS) | ||||
protocol using the Session Description Protocol (SDP). It defines the SDP prot | ||||
ocol identifier, 'TCP/TLS'. It also defines the syntax and semantics for an SDP | ||||
'fingerprint' attribute that identifies the certificate that will be presented | ||||
for the TLS session. This mechanism allows media transport over TLS connections | ||||
to be established securely, so long as the integrity of session descriptions is | ||||
assured.</t> | ||||
<t indent="0">This document obsoletes RFC 4572 by clarifying the u | ||||
sage of multiple fingerprints.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8122"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8122"/> | ||||
</reference> | ||||
<reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8 | ||||
174" quoteTitle="true" derivedAnchor="RFC8174"> | ||||
<front> | ||||
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</ti | ||||
tle> | ||||
<author initials="B." surname="Leiba" fullname="B. Leiba"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2017" month="May"/> | ||||
<abstract> | ||||
<t indent="0">RFC 2119 specifies common key words that may be used | ||||
in protocol specifications. This document aims to reduce the ambiguity by cla | ||||
rifying that only UPPERCASE usage of the key words have the defined special mea | ||||
nings.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="BCP" value="14"/> | ||||
<seriesInfo name="RFC" value="8174"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8174"/> | ||||
</reference> | ||||
<reference anchor="RFC8259" target="https://www.rfc-editor.org/info/rfc8 | ||||
259" quoteTitle="true" derivedAnchor="RFC8259"> | ||||
<front> | ||||
<title>The JavaScript Object Notation (JSON) Data Interchange Format | ||||
</title> | ||||
<author initials="T." surname="Bray" fullname="T. Bray" role="editor | ||||
"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2017" month="December"/> | ||||
<abstract> | ||||
<t indent="0">JavaScript Object Notation (JSON) is a lightweight, | ||||
text-based, language-independent data interchange format. It was derived from t | ||||
he ECMAScript Programming Language Standard. JSON defines a small set of format | ||||
ting rules for the portable representation of structured data.</t> | ||||
<t indent="0">This document removes inconsistencies with other spe | ||||
cifications of JSON, repairs specification errors, and offers experience-based i | ||||
nteroperability guidance.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="STD" value="90"/> | ||||
<seriesInfo name="RFC" value="8259"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8259"/> | ||||
</reference> | ||||
<reference anchor="RFC8261" target="https://www.rfc-editor.org/info/rfc8 | ||||
261" quoteTitle="true" derivedAnchor="RFC8261"> | ||||
<front> | ||||
<title>Datagram Transport Layer Security (DTLS) Encapsulation of SCT | ||||
P Packets</title> | ||||
<author initials="M." surname="Tuexen" fullname="M. Tuexen"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="R." surname="Stewart" fullname="R. Stewart"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="R." surname="Jesup" fullname="R. Jesup"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="S." surname="Loreto" fullname="S. Loreto"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2017" month="November"/> | ||||
<abstract> | ||||
<t indent="0">The Stream Control Transmission Protocol (SCTP) is a | ||||
transport protocol originally defined to run on top of the network protocols IP | ||||
v4 or IPv6. This document specifies how SCTP can be used on top of the Datagram | ||||
Transport Layer Security (DTLS) protocol. Using the encapsulation method descr | ||||
ibed in this document, SCTP is unaware of the protocols being used below DTLS; h | ||||
ence, explicit IP addresses cannot be used in the SCTP control chunks. As a con | ||||
sequence, the SCTP associations carried over DTLS can only be single-homed.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8261"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8261"/> | ||||
</reference> | ||||
<reference anchor="RFC8445" target="https://www.rfc-editor.org/info/rfc8 | ||||
445" quoteTitle="true" derivedAnchor="RFC8445"> | ||||
<front> | ||||
<title>Interactive Connectivity Establishment (ICE): A Protocol for | ||||
Network Address Translator (NAT) Traversal</title> | ||||
<author initials="A." surname="Keranen" fullname="A. Keranen"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="C." surname="Holmberg" fullname="C. Holmberg"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="J." surname="Rosenberg" fullname="J. Rosenberg"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2018" month="July"/> | ||||
<abstract> | ||||
<t indent="0">This document describes a protocol for Network Addre | ||||
ss Translator (NAT) traversal for UDP-based communication. This protocol is cal | ||||
led Interactive Connectivity Establishment (ICE). ICE makes use of the Session | ||||
Traversal Utilities for NAT (STUN) protocol and its extension, Traversal Using R | ||||
elay NAT (TURN).</t> | ||||
<t indent="0">This document obsoletes RFC 5245.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8445"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8445"/> | ||||
</reference> | ||||
<reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8 | ||||
446" quoteTitle="true" derivedAnchor="RFC8446"> | ||||
<front> | ||||
<title>The Transport Layer Security (TLS) Protocol Version 1.3</titl | ||||
e> | ||||
<author initials="E." surname="Rescorla" fullname="E. Rescorla"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2018" month="August"/> | ||||
<abstract> | ||||
<t indent="0">This document specifies version 1.3 of the Transport | ||||
Layer Security (TLS) protocol. TLS allows client/server applications to commun | ||||
icate over the Internet in a way that is designed to prevent eavesdropping, tamp | ||||
ering, and message forgery.</t> | ||||
<t indent="0">This document updates RFCs 5705 and 6066, and obsole | ||||
tes RFCs 5077, 5246, and 6961. This document also specifies new requirements fo | ||||
r TLS 1.2 implementations.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8446"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8446"/> | ||||
</reference> | ||||
<reference anchor="RFC8615" target="https://www.rfc-editor.org/info/rfc8 | ||||
615" quoteTitle="true" derivedAnchor="RFC8615"> | ||||
<front> | ||||
<title>Well-Known Uniform Resource Identifiers (URIs)</title> | ||||
<author initials="M." surname="Nottingham" fullname="M. Nottingham"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2019" month="May"/> | ||||
<abstract> | ||||
<t indent="0">This memo defines a path prefix for "well-known loca | ||||
tions", "/.well-known/", in selected Uniform Resource Identifier (URI) schemes.< | ||||
/t> | ||||
<t indent="0">In doing so, it obsoletes RFC 5785 and updates the U | ||||
RI schemes defined in RFC 7230 to reserve that space. It also updates RFC 7595 | ||||
to track URI schemes that support well-known URIs in their registry.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8615"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8615"/> | ||||
</reference> | ||||
<reference anchor="RFC8825" target="https://www.rfc-editor.org/info/rfc8 | ||||
825" quoteTitle="true" derivedAnchor="RFC8825"> | ||||
<front> | ||||
<title>Overview: Real-Time Protocols for Browser-Based Applications< | ||||
/title> | ||||
<author initials="H." surname="Alvestrand" fullname="Harald T. Alves | ||||
trand"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="January" year="2021"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8825"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8825"/> | ||||
</reference> | ||||
<reference anchor="RFC8826" target="https://www.rfc-editor.org/info/rfc8 | ||||
826" quoteTitle="true" derivedAnchor="RFC8826"> | ||||
<front> | ||||
<title>Security Considerations for WebRTC</title> | ||||
<author initials="E." surname="Rescorla" fullname="Eric Rescorla"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="January" year="2021"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8826"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8826"/> | ||||
</reference> | ||||
<reference anchor="RFC8829" target="https://www.rfc-editor.org/info/rfc8 | ||||
829" quoteTitle="true" derivedAnchor="RFC8829"> | ||||
<front> | ||||
<title>JavaScript Session Establishment Protocol (JSEP)</title> | ||||
<author initials="J." surname="Uberti" fullname="Justin Uberti"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="C." surname="Jennings" fullname="Cullen Jennings"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="E." surname="Rescorla" fullname="Eric Rescorla" ro | ||||
le="editor"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="January" year="2021"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8829"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8829"/> | ||||
</reference> | ||||
<reference anchor="RFC8834" target="https://www.rfc-editor.org/info/rfc8 | ||||
834" quoteTitle="true" derivedAnchor="RFC8834"> | ||||
<front> | ||||
<title>Media Transport and Use of RTP in WebRTC</title> | ||||
<author initials="C." surname="Perkins" fullname="Colin Perkins"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="M." surname="Westerlund" fullname="Magnus Westerlu | ||||
nd"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="J." surname="Ott" fullname="Jörg Ott"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="January" year="2021"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8834"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8834"/> | ||||
</reference> | ||||
<reference anchor="RFC8844" target="https://www.rfc-editor.org/info/rfc8 | ||||
844" quoteTitle="true" derivedAnchor="RFC8844"> | ||||
<front> | ||||
<title>Unknown Key-Share Attacks on Uses of TLS with the Session Des | ||||
cription Protocol (SDP)</title> | ||||
<author initials="M" surname="Thomson" fullname="Martin Thomson"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="E" surname="Rescorla" fullname="Eric Rescorla"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="January" year="2021"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8844"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8844"/> | ||||
</reference> | ||||
<reference anchor="webcrypto" target="https://www.w3.org/TR/2017/REC-Web | ||||
CryptoAPI-20170126/" quoteTitle="true" derivedAnchor="webcrypto"> | ||||
<front> | ||||
<title>Web Cryptography API</title> | ||||
<author initials="M" surname="Watson" fullname="Mark Watson"> | ||||
</author> | ||||
<date month="January" year="2017" day="26"/> | ||||
</front> | ||||
<refcontent>W3C Recommendation</refcontent> | ||||
</reference> | ||||
<reference anchor="webrtc-api" target="https://www.w3.org/TR/webrtc/" qu | ||||
oteTitle="true" derivedAnchor="webrtc-api"> | ||||
<front> | ||||
<title>WebRTC 1.0: Real-time Communication Between Browsers</title> | ||||
<author initials="C." surname="Jennings" fullname="Cullen Jennings"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="H." surname="Boström" fullname="Henrik Boström"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="J-I." surname="Bruaroey" fullname="Jan-Ivar Bruaro | ||||
ey"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date/> | ||||
</front> | ||||
<refcontent>W3C Proposed Recommendation</refcontent> | ||||
</reference> | ||||
</references> | ||||
<references pn="section-11.2"> | ||||
<name slugifiedName="name-informative-references">Informative References | ||||
</name> | ||||
<reference anchor="fetch" target="https://fetch.spec.whatwg.org/" quoteT | ||||
itle="true" derivedAnchor="fetch"> | ||||
<front> | ||||
<title>Fetch</title> | ||||
<author initials="A." surname="van Kesteren"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="RFC3261" target="https://www.rfc-editor.org/info/rfc3 | ||||
261" quoteTitle="true" derivedAnchor="RFC3261"> | ||||
<front> | ||||
<title>SIP: Session Initiation Protocol</title> | ||||
<author initials="J." surname="Rosenberg" fullname="J. Rosenberg"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="H." surname="Schulzrinne" fullname="H. Schulzrinne | ||||
"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="G." surname="Camarillo" fullname="G. Camarillo"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="A." surname="Johnston" fullname="A. Johnston"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="J." surname="Peterson" fullname="J. Peterson"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="R." surname="Sparks" fullname="R. Sparks"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="M." surname="Handley" fullname="M. Handley"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="E." surname="Schooler" fullname="E. Schooler"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2002" month="June"/> | ||||
<abstract> | ||||
<t indent="0">This document describes Session Initiation Protocol | ||||
(SIP), an application-layer control (signaling) protocol for creating, modifying | ||||
, and terminating sessions with one or more participants. These sessions includ | ||||
e Internet telephone calls, multimedia distribution, and multimedia conferences. | ||||
[STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="3261"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC3261"/> | ||||
</reference> | ||||
<reference anchor="RFC5705" target="https://www.rfc-editor.org/info/rfc5 | ||||
705" quoteTitle="true" derivedAnchor="RFC5705"> | ||||
<front> | ||||
<title>Keying Material Exporters for Transport Layer Security (TLS)< | ||||
/title> | ||||
<author initials="E." surname="Rescorla" fullname="E. Rescorla"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2010" month="March"/> | ||||
<abstract> | ||||
<t indent="0">A number of protocols wish to leverage Transport Lay | ||||
er Security (TLS) to perform key establishment but then use some of the keying m | ||||
aterial for their own purposes. This document describes a general mechanism for | ||||
allowing that. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="5705"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC5705"/> | ||||
</reference> | ||||
<reference anchor="RFC6120" target="https://www.rfc-editor.org/info/rfc6 | ||||
120" quoteTitle="true" derivedAnchor="RFC6120"> | ||||
<front> | ||||
<title>Extensible Messaging and Presence Protocol (XMPP): Core</titl | ||||
e> | ||||
<author initials="P." surname="Saint-Andre" fullname="P. Saint-Andre | ||||
"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2011" month="March"/> | ||||
<abstract> | ||||
<t indent="0">The Extensible Messaging and Presence Protocol (XMPP | ||||
) is an application profile of the Extensible Markup Language (XML) that enables | ||||
the near-real-time exchange of structured yet extensible data between any two o | ||||
r more network entities. This document defines XMPP's core protocol methods: se | ||||
tup and teardown of XML streams, channel encryption, authentication, error handl | ||||
ing, and communication primitives for messaging, network availability ("presence | ||||
"), and request-response interactions. This document obsoletes RFC 3920. [STAN | ||||
DARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="6120"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC6120"/> | ||||
</reference> | ||||
<reference anchor="RFC6265" target="https://www.rfc-editor.org/info/rfc6 | ||||
265" quoteTitle="true" derivedAnchor="RFC6265"> | ||||
<front> | ||||
<title>HTTP State Management Mechanism</title> | ||||
<author initials="A." surname="Barth" fullname="A. Barth"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2011" month="April"/> | ||||
<abstract> | ||||
<t indent="0">This document defines the HTTP Cookie and Set-Cookie | ||||
header fields. These header fields can be used by HTTP servers to store state ( | ||||
called cookies) at HTTP user agents, letting the servers maintain a stateful ses | ||||
sion over the mostly stateless HTTP protocol. Although cookies have many histor | ||||
ical infelicities that degrade their security and privacy, the Cookie and Set-Co | ||||
okie header fields are widely used on the Internet. This document obsoletes RFC | ||||
2965. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="6265"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC6265"/> | ||||
</reference> | ||||
<reference anchor="RFC6455" target="https://www.rfc-editor.org/info/rfc6 | ||||
455" quoteTitle="true" derivedAnchor="RFC6455"> | ||||
<front> | ||||
<title>The WebSocket Protocol</title> | ||||
<author initials="I." surname="Fette" fullname="I. Fette"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="A." surname="Melnikov" fullname="A. Melnikov"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2011" month="December"/> | ||||
<abstract> | ||||
<t indent="0">The WebSocket Protocol enables two-way communication | ||||
between a client running untrusted code in a controlled environment to a remote | ||||
host that has opted-in to communications from that code. The security model us | ||||
ed for this is the origin-based security model commonly used by web browsers. T | ||||
he protocol consists of an opening handshake followed by basic message framing, | ||||
layered over TCP. The goal of this technology is to provide a mechanism for bro | ||||
wser-based applications that need two-way communication with servers that does n | ||||
ot rely on opening multiple HTTP connections (e.g., using XMLHttpRequest or < | ||||
iframe>s and long polling). [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="6455"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC6455"/> | ||||
</reference> | ||||
<reference anchor="RFC6943" target="https://www.rfc-editor.org/info/rfc6 | ||||
943" quoteTitle="true" derivedAnchor="RFC6943"> | ||||
<front> | ||||
<title>Issues in Identifier Comparison for Security Purposes</title> | ||||
<author initials="D." surname="Thaler" fullname="D. Thaler" role="ed | ||||
itor"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2013" month="May"/> | ||||
<abstract> | ||||
<t indent="0">Identifiers such as hostnames, URIs, IP addresses, a | ||||
nd email addresses are often used in security contexts to identify security prin | ||||
cipals and resources. In such contexts, an identifier presented via some protoc | ||||
ol is often compared using some policy to make security decisions such as whethe | ||||
r the security principal may access the resource, what level of authentication o | ||||
r encryption is required, etc. If the parties involved in a security decision u | ||||
se different algorithms to compare identifiers, then failure scenarios ranging f | ||||
rom denial of service to elevation of privilege can result. This document provi | ||||
des a discussion of these issues that designers should consider when defining id | ||||
entifiers and protocols, and when constructing architectures that use multiple p | ||||
rotocols.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="6943"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC6943"/> | ||||
</reference> | ||||
<reference anchor="RFC7617" target="https://www.rfc-editor.org/info/rfc7 | ||||
617" quoteTitle="true" derivedAnchor="RFC7617"> | ||||
<front> | ||||
<title>The 'Basic' HTTP Authentication Scheme</title> | ||||
<author initials="J." surname="Reschke" fullname="J. Reschke"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2015" month="September"/> | ||||
<abstract> | ||||
<t indent="0">This document defines the "Basic" Hypertext Transfer | ||||
Protocol (HTTP) authentication scheme, which transmits credentials as user-id/ | ||||
password pairs, encoded using Base64.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="7617"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC7617"/> | ||||
</reference> | ||||
<reference anchor="RFC8224" target="https://www.rfc-editor.org/info/rfc8 | ||||
224" quoteTitle="true" derivedAnchor="RFC8224"> | ||||
<front> | ||||
<title>Authenticated Identity Management in the Session Initiation P | ||||
rotocol (SIP)</title> | ||||
<author initials="J." surname="Peterson" fullname="J. Peterson"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="C." surname="Jennings" fullname="C. Jennings"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="E." surname="Rescorla" fullname="E. Rescorla"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="C." surname="Wendt" fullname="C. Wendt"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2018" month="February"/> | ||||
<abstract> | ||||
<t indent="0">The baseline security mechanisms in the Session Init | ||||
iation Protocol (SIP) are inadequate for cryptographically assuring the identity | ||||
of the end users that originate SIP requests, especially in an interdomain cont | ||||
ext. This document defines a mechanism for securely identifying originators of | ||||
SIP requests. It does so by defining a SIP header field for conveying a signatu | ||||
re used for validating the identity and for conveying a reference to the credent | ||||
ials of the signer.</t> | ||||
<t indent="0">This document obsoletes RFC 4474.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8224"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8224"/> | ||||
</reference> | ||||
<reference anchor="RFC8828" target="https://www.rfc-editor.org/info/rfc8 | ||||
828" quoteTitle="true" derivedAnchor="RFC8828"> | ||||
<front> | ||||
<title>WebRTC IP Address Handling Requirements</title> | ||||
<author initials="J" surname="Uberti" fullname="Justin Uberti"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="G" surname="Shieh" fullname="Guo-wei Shieh"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="January" year="2021"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8828"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8828"/> | ||||
</reference> | ||||
<reference anchor="I-D.ietf-tls-dtls13" quoteTitle="true" target="https: | ||||
//tools.ietf.org/html/draft-ietf-tls-dtls13-39" derivedAnchor="TLS-DTLS13"> | ||||
<front> | ||||
<title>The Datagram Transport Layer Security (DTLS) Protocol Version | ||||
1.3</title> | ||||
<author initials="E." surname="Rescorla" fullname="Eric Rescorla"> | ||||
<organization showOnFrontPage="true">RTFM, Inc.</organization> | ||||
</author> | ||||
<author initials="H." surname="Tschofenig" fullname="Hannes Tschofen | ||||
ig"> | ||||
<organization showOnFrontPage="true">Arm Limited</organization> | ||||
</author> | ||||
<author initials="N." surname="Modadugu" fullname="Nagendra Modadugu | ||||
"> | ||||
<organization showOnFrontPage="true">Google, Inc.</organization> | ||||
</author> | ||||
<date month="November" day="2" year="2020"/> | ||||
<abstract> | ||||
<t indent="0"> This document specifies Version 1.3 of the Datagr | ||||
am Transport Layer | ||||
Security (DTLS) protocol. DTLS 1.3 allows client/server applications | ||||
to communicate over the Internet in a way that is designed to prevent | ||||
eavesdropping, tampering, and message forgery. | ||||
<references title="Normative References"> | The DTLS 1.3 protocol is intentionally based on the Transport Layer | |||
&RFC2119; | Security (TLS) 1.3 protocol and provides equivalent security | |||
&RFC2818; | guarantees with the exception of order protection/non-replayability. | |||
&RFC3264; | Datagram semantics of the underlying transport are preserved by the | |||
&RFC3711; | DTLS protocol. | |||
&RFC3986; | ||||
&RFC4566; | ||||
&RFC4568; | ||||
&RFC4648; | ||||
&RFC5246; | ||||
&RFC5763; | ||||
&RFC5764; | ||||
&RFC5785; | ||||
&RFC5890; | ||||
&RFC6347; | ||||
&RFC6454; | ||||
&RFC7022; | ||||
&RFC7675; | ||||
&RFC7918; | ||||
&RFC8174; | ||||
&RFC8122; | ||||
&RFC8259; | ||||
&RFC8261; | ||||
&RFC8445; | ||||
&I-D.ietf-rtcweb-overview; | ||||
&I-D.ietf-rtcweb-security; | ||||
&I-D.ietf-rtcweb-rtp-usage; | ||||
&I-D.ietf-mmusic-sdp-uks; | ||||
&I-D.ietf-rtcweb-jsep; | ||||
<reference anchor="webcrypto"> | ||||
<front> | ||||
<title>Web Cryptography API</title> | ||||
<author fullname="W3C editors" | ||||
surname="Dahl, Sleevi"> | ||||
<organization>W3C</organization> | ||||
</author> | ||||
<date day="25" month="June" year="2013" /> | ||||
</front> | ||||
<annotation>Available at | ||||
http://www.w3.org/TR/WebCryptoAPI/</annotation> | ||||
</reference> | ||||
<reference anchor="webrtc-api"> | ||||
<front> | ||||
<title>WebRTC 1.0: Real-time Communication Between Browsers</title> | ||||
<author fullname="W3C editors" | ||||
surname="Bergkvist, Burnett, Jennings, Narayanan"> | ||||
<organization>W3C</organization> | ||||
</author> | ||||
<date day="4" month="October" year="2011" /> | ||||
</front> | ||||
<annotation>Available at | ||||
http://dev.w3.org/2011/webrtc/editor/webrtc.html</annotation> | ||||
</reference> | ||||
<reference anchor="FIPS186"> | ||||
<front> | ||||
<title>Digital Signature Standard (DSS)</title> | ||||
<author > | ||||
<organization>National Institute of Standards and Technology (NIST)< | ||||
/organization> | ||||
</author> | ||||
<date year="2013" month="July"/> | ||||
</front> | ||||
<seriesInfo name="NIST PUB 186-4" value=""/> | ||||
</reference> | ||||
</references> | ||||
<references title="Informative References"> | ||||
&RFC7617; | ||||
&RFC3261; | ||||
&RFC5705; | ||||
&RFC6455; | ||||
&RFC6265; | ||||
&RFC6943; | ||||
&RFC6120; | ||||
<reference anchor="XmlHttpRequest"> | ||||
<front> | ||||
<title>XMLHttpRequest Level 2</title> | ||||
<author initials="A." surname="van Kesteren"> | ||||
<organization></organization> | ||||
</author> | ||||
<date day="17" month="January" year="2012"/> | ||||
</front> | ||||
<format target="http://www.w3.org/TR/XMLHttpRequest/" type="TXT"/> | ||||
</reference> | ||||
</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-ietf-tls-dtls13-39"/> | ||||
<format type="TXT" target="https://www.ietf.org/internet-drafts/draft- | ||||
ietf-tls-dtls13-39.txt"/> | ||||
<refcontent>Work in Progress</refcontent> | ||||
</reference> | ||||
</references> | ||||
</references> | </references> | |||
<section numbered="false" toc="include" removeInRFC="false" pn="section-appe | ||||
ndix.a"> | ||||
<name slugifiedName="name-acknowledgements">Acknowledgements</name> | ||||
<t indent="0" pn="section-appendix.a-1"> | ||||
<contact fullname="Bernard Aboba"/>, <contact fullname="Harald A | ||||
lvestrand"/>, <contact fullname="Richard Barnes"/>, <contact fullname="Dan Druta | ||||
"/>, <contact fullname="Cullen Jennings"/>, <contact fullname="Hadriel K | ||||
aplan"/>, <contact fullname="Matthew Kaufman"/>, <contact fullname="Jim McEacher | ||||
n"/>, | ||||
<contact fullname="Martin Thomson"/>, <contact fullname="Magnus | ||||
Westerlund"/>. <contact fullname="Matthew Kaufman"/> provided the UI material i | ||||
n | ||||
<xref target="sec.proposal.comsec" format="default" sectionFormat="of" d | ||||
erivedContent="Section 6.5"/>. <contact fullname="Christer Holmberg"/> provided | ||||
the initial version of <xref target="sec.sdp-id-attr-oa" format="default | ||||
" sectionFormat="of" derivedContent="Section 5.1"/>. | ||||
</t> | ||||
</section> | ||||
<section anchor="authors-addresses" numbered="false" removeInRFC="false" toc | ||||
="include" pn="section-appendix.b"> | ||||
<name slugifiedName="name-authors-address">Author's Address</name> | ||||
<author fullname="Eric Rescorla" initials="E." surname="Rescorla"> | ||||
<organization showOnFrontPage="true">Mozilla</organization> | ||||
<address> | ||||
<email>ekr@rtfm.com</email> | ||||
</address> | ||||
</author> | ||||
</section> | ||||
</back> | </back> | |||
</rfc> | </rfc> | |||
End of changes. 332 change blocks. | ||||
1520 lines changed or deleted | 2818 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/ |