diff options
Diffstat (limited to 'doc/rfc/rfc8827.txt')
-rw-r--r-- | doc/rfc/rfc8827.txt | 1899 |
1 files changed, 1899 insertions, 0 deletions
diff --git a/doc/rfc/rfc8827.txt b/doc/rfc/rfc8827.txt new file mode 100644 index 0000000..ee494dd --- /dev/null +++ b/doc/rfc/rfc8827.txt @@ -0,0 +1,1899 @@ + + + + +Internet Engineering Task Force (IETF) E. Rescorla +Request for Comments: 8827 Mozilla +Category: Standards Track January 2021 +ISSN: 2070-1721 + + + WebRTC Security Architecture + +Abstract + + This document defines the security architecture for WebRTC, a + protocol suite intended for use with real-time applications that can + be deployed in browsers -- "real-time communication on the Web". + +Status of This Memo + + This is an Internet Standards Track document. + + 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. + + Information about the current status of this document, any errata, + and how to provide feedback on it may be obtained at + https://www.rfc-editor.org/info/rfc8827. + +Copyright Notice + + Copyright (c) 2021 IETF Trust and the persons identified as the + document authors. All rights reserved. + + This document is subject to BCP 78 and the IETF Trust's Legal + Provisions Relating to IETF Documents + (https://trustee.ietf.org/license-info) 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. + + 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. + +Table of Contents + + 1. Introduction + 2. Terminology + 3. Trust Model + 3.1. Authenticated Entities + 3.2. Unauthenticated Entities + 4. Overview + 4.1. Initial Signaling + 4.2. Media Consent Verification + 4.3. DTLS Handshake + 4.4. Communications and Consent Freshness + 5. SDP Identity Attribute + 5.1. Offer/Answer Considerations + 5.1.1. Generating the Initial SDP Offer + 5.1.2. Generating an SDP Answer + 5.1.3. Processing an SDP Offer or Answer + 5.1.4. Modifying the Session + 6. Detailed Technical Description + 6.1. Origin and Web Security Issues + 6.2. Device Permissions Model + 6.3. Communications Consent + 6.4. IP Location Privacy + 6.5. Communications Security + 7. Web-Based Peer Authentication + 7.1. Trust Relationships: IdPs, APs, and RPs + 7.2. Overview of Operation + 7.3. Items for Standardization + 7.4. Binding Identity Assertions to JSEP Offer/Answer + Transactions + 7.4.1. Carrying Identity Assertions + 7.5. Determining the IdP URI + 7.5.1. Authenticating Party + 7.5.2. Relying Party + 7.6. Requesting Assertions + 7.7. Managing User Login + 8. Verifying Assertions + 8.1. Identity Formats + 9. Security Considerations + 9.1. Communications Security + 9.2. Privacy + 9.3. Denial of Service + 9.4. IdP Authentication Mechanism + 9.4.1. PeerConnection Origin Check + 9.4.2. IdP Well-Known URI + 9.4.3. Privacy of IdP-Generated Identities and the Hosting + Site + 9.4.4. Security of Third-Party IdPs + 9.4.4.1. Confusable Characters + 9.4.5. Web Security Feature Interactions + 9.4.5.1. Popup Blocking + 9.4.5.2. Third Party Cookies + 10. IANA Considerations + 11. References + 11.1. Normative References + 11.2. Informative References + Acknowledgements + Author's Address + +1. Introduction + + The Real-Time Communications on the Web (RTCWEB) Working Group + standardized protocols for real-time communications between Web + browsers, generally called "WebRTC" [RFC8825]. The major use cases + for WebRTC technology are real-time audio and/or video calls, Web + conferencing, and direct data transfer. Unlike most conventional + real-time systems (e.g., SIP-based [RFC3261] soft phones), WebRTC + communications are directly controlled by some Web server, via a + JavaScript (JS) API as shown in Figure 1. + + +----------------+ + | | + | Web Server | + | | + +----------------+ + ^ ^ + / \ + HTTP / \ HTTP + / \ + / \ + v v + JS API JS API + +-----------+ +-----------+ + | | Media | | + | Browser |<---------->| Browser | + | | | | + +-----------+ +-----------+ + + Figure 1: A Simple WebRTC System + + A more complicated system might allow for inter-domain calling, as + shown in Figure 2. The protocol to be used between 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 SIP or + something like the Extensible Messaging and Presence Protocol (XMPP) + [RFC6120]. + + +--------------+ +--------------+ + | | SIP, XMPP, ... | | + | Web Server |<-------------->| Web Server | + | | | | + +--------------+ +--------------+ + ^ ^ + | | + HTTP | | HTTP + | | + v v + JS API JS API + +-----------+ +-----------+ + | | Media | | + | Browser |<------------------->| Browser | + | | | | + +-----------+ +-----------+ + + Figure 2: A Multidomain WebRTC System + + This system presents a number of new security challenges, which are + analyzed in [RFC8826]. This document describes a security + architecture for WebRTC which addresses the threats and requirements + described in that document. + +2. Terminology + + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and + "OPTIONAL" in this document are to be interpreted as described in + BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all + capitals, as shown here. + +3. Trust Model + + The basic assumption of this architecture is that network resources + 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 user wishes to have enforced must be ultimately guaranteed by the + browser (or transitively by some property the browser verifies). + Conversely, if the browser is compromised, then no security + guarantees are possible. Note that there are cases (e.g., Internet + 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 trust the browser. + + 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 a functional system. Other network elements fall into two + categories: those which can be authenticated by the browser and thus + can be granted permissions to access sensitive resources, and those + which cannot be authenticated and thus are untrusted. + +3.1. Authenticated Entities + + There are two major classes of authenticated entities in the system: + + Calling services: Web sites whose origin we can verify (optimally + via HTTPS, but in some cases because we are on a topologically + restricted network, such as behind a firewall, and can infer + authentication from firewall behavior). + + Other users: WebRTC peers whose origin we can verify + cryptographically (optimally via DTLS-SRTP). + + Note that merely being authenticated does not make these entities + trusted. For instance, just because we can verify that + <https://www.example.org/> is owned by Dr. Evil does not mean that we + can trust Dr. Evil to access our camera and microphone. However, it + gives the user an opportunity to determine whether they wish to trust + Dr. Evil or not; after all, if they desire to contact Dr. Evil + (perhaps 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 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 first identify other elements before we can determine whether + and how much to trust them. Additionally, sometimes we need to + identify the communicating peer before we know what policies to + apply. + +3.2. Unauthenticated Entities + + Other than the above entities, we are not generally able to identify + other network elements; thus, we cannot trust them. This does not + mean 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 a system which is secure even if they do so. + +4. Overview + + This section describes a typical WebRTC session and shows how the + various security elements interact and what guarantees are provided + to 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 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 text where applicable. It's also important to + recognize the tension between security (or performance) and privacy. + The example shown here is aimed towards settings where we are more + concerned about secure calling than about privacy, but as we shall + see, there are settings where one might wish to make different + tradeoffs -- this architecture is still compatible with those + settings. + + For the purposes of this example, we assume the topology shown in the + figures below. This topology is derived from the topology shown in + Figure 1, but separates Alice's and Bob's identities from the process + of signaling. Specifically, Alice and Bob have relationships with + some Identity Provider (IdP) that supports a protocol (such as OpenID + Connect) that can be used to demonstrate their identity to other + parties. For instance, Alice might have an account with a social + network which she can then use to authenticate to other Web sites + without explicitly having an account with those sites; this is a + fairly conventional pattern on the Web. Section 7.1 provides an + overview of IdPs and the relevant terminology. Alice and Bob might + have relationships with different IdPs as well. Note: The IdP + mechanism described here has not seen wide adoption. See Section 7 + for more on the status of IdP-based authentication. + + This separation of identity provision and signaling isn't + particularly important in "closed world" cases where Alice and Bob + are users on the same social network and have identities based on + that domain (Figure 3). However, there are important settings where + that is not the case, such as federation (calls from one domain to + another; see Figure 4) and calling on untrusted sites, such as where + two users who have a relationship via a given social network want to + call each other on another, untrusted, site, such as a poker site. + + Note that the servers themselves are also authenticated by an + external identity service, the SSL/TLS certificate infrastructure + (not shown). As is conventional in the Web, all identities are + ultimately rooted in that system. For instance, when an IdP makes an + identity assertion, the Relying Party consuming that assertion is + able to verify because it is able to connect to the IdP via HTTPS. + + +----------------+ + | | + | Signaling | + | Server | + | | + +----------------+ + ^ ^ + / \ + HTTPS / \ HTTPS + / \ + / \ + v v + JS API JS API + +-----------+ +-----------+ + | | Media | | + Alice | Browser |<---------->| Browser | Bob + | | (DTLS+SRTP)| | + +-----------+ +-----------+ + ^ ^--+ +--^ ^ + | | | | + v | | v + +-----------+ | | +-----------+ + | |<--------+ | | + | IdP1 | | | IdP2 | + | | +------->| | + +-----------+ +-----------+ + + Figure 3: A Call with IdP-Based Identity + + Figure 4 shows essentially the same calling scenario but with a call + between two separate domains (i.e., a federated case), as in + Figure 2. As mentioned above, the domains communicate by some + unspecified protocol, and providing separate signaling and identity + allows for calls to be authenticated regardless of the details of the + inter-domain protocol. + + +----------------+ Unspecified +----------------+ + | | protocol | | + | Signaling |<----------------->| Signaling | + | Server | (SIP, XMPP, ...) | Server | + | | | | + +----------------+ +----------------+ + ^ ^ + | | + HTTPS | | HTTPS + | | + | | + v v + JS API JS API + +-----------+ +-----------+ + | | Media | | + Alice | Browser |<--------------------------->| Browser | Bob + | | DTLS+SRTP | | + +-----------+ +-----------+ + ^ ^--+ +--^ ^ + | | | | + v | | v + +-----------+ | | +-----------+ + | |<-------------------------+ | | + | IdP1 | | | IdP2 | + | | +------------------------>| | + +-----------+ +-----------+ + + Figure 4: A Federated Call with IdP-Based Identity + +4.1. Initial Signaling + + For simplicity, assume the topology in Figure 3. Alice and Bob are + both users of a common calling service; they both have approved the + calling service to make calls (we defer the discussion of device + access permissions until later). They are both connected to the + calling service via HTTPS and so know the origin with some level of + confidence. They also have accounts with some IdP. This sort of + identity service is becoming increasingly common in the Web + environment (with technologies such as Federated Google Login, + Facebook Connect, OAuth, 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 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 no identity service at all. + + 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 + 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 + callback that instantiates a PeerConnection object. This does not + require a security check: JS from any origin is allowed to get this + far. + + 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 + MediaStream with two MediaStreamTracks, one connected to an audio + input and one connected to a video input. At this point, the first + security check is required: untrusted origins are not allowed to + access the camera and microphone, so the browser prompts Alice for + permission. + + In the current W3C API, once some streams have been added, Alice's + browser + JS generates a signaling message [RFC8829] containing: + + * Media channel information + + * Interactive Connectivity Establishment (ICE) [RFC8445] candidates + + * A "fingerprint" attribute binding the communication to a key pair + [RFC5763]. Note that this key may simply be ephemerally generated + for this call or specific to this domain, and Alice may have a + large number of such keys. + + Prior to sending out the signaling message, the PeerConnection code + contacts the identity service and obtains an assertion binding + Alice's identity to her fingerprint. The exact details depend on the + identity service (though as discussed in Section 7 PeerConnection can + be agnostic to them), but for now it's easiest to think of as an + OAuth token. The assertion may bind other information to the + identity besides the fingerprint, but at minimum it needs to bind the + fingerprint. + + This message is sent to the signaling server, e.g., by fetch() + [fetch] or by WebSockets [RFC6455], over TLS [RFC8446]. The + signaling server processes the message from Alice's browser, + determines that this is a call to Bob, and sends a signaling message + to 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 Alice's identity. In this case, Alice has provided an + identity assertion and so Bob's browser contacts Alice's IdP (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 + to have IdPs with which the browser has a specific trust + relationship, as described in Section 7.1. This allows the browser + 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 this interface might also include her real name, a picture, etc. + The 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 + not part of the trusted UI. + + If Bob agrees, a PeerConnection is instantiated with the message from + 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 created, and a return signaling message containing media + information, ICE candidates, and a fingerprint is sent back to Alice + via the signaling service. If Bob has a relationship with an IdP, + the message will also come with an identity assertion. + + 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 + 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 merely by having the fingerprint in the message and having + that message received securely from the signaling server. Because + the far 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 federated, as shown in Figure 4, 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 it directly with Bob's IdP. + + 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 + of assurance. I.e., they simply have whatever information their + calling site claims about the caller/callee's identity. Moreover, + Alice might wish to make an anonymous call through an anonymous + calling site, in which case she would of course just not provide any + identity assertion and the calling site would mask her identity from + Bob. + +4.2. Media Consent Verification + + As described in [RFC8826], Section 4.2, media consent verification is + provided via ICE. Thus, Alice and Bob perform ICE checks with each + other. At the completion of these checks, they are ready to send + non-ICE data. + + 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 + 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 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 but + not attached to the signaling service to spoof these checks because + they do not have the ICE credentials. Bob has the same security + guarantees with respect to Alice. + +4.3. DTLS Handshake + + Once the requisite ICE checks have completed, Alice and Bob can set + up a secure channel or channels. This is performed via DTLS + [RFC6347] and DTLS-SRTP [RFC5763] keying for SRTP [RFC3711] for the + media channel and the Stream Control Transmission Protocol (SCTP) + over DTLS [RFC8261] for data channels. Specifically, Alice and Bob + perform a DTLS handshake on 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 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 DTLS handshake has + completed, the keys are exported [RFC5705] and used to key SRTP for + the media channels. + + 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 attacker. If Alice and Bob authenticated via their IdPs, + then they 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 + 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 + communications are secure against the signaling service as well + (i.e., that the signaling service cannot mount a passive attack on + the communications). + +4.4. Communications and Consent Freshness + + From a security perspective, everything from here on in is a little + anticlimactic: Alice and Bob exchange data protected by the keys + negotiated by DTLS. Because of the security guarantees discussed in + the previous sections, they know that the communications are + encrypted and authenticated. + + The one remaining security property we need to establish is "consent + freshness", i.e., allowing Alice to verify that Bob is still prepared + to receive her communications so that Alice does not continue to send + large traffic volumes to entities which went abruptly offline. ICE + specifies periodic Session Traversal Utilities for NAT (STUN) + keepalives but only if media is not flowing. Because the consent + issue is more difficult here, we require WebRTC implementations to + periodically send keepalives using the consent freshness mechanism + specified in [RFC7675]. If a keepalive fails and no new ICE channels + can be established, then the session is terminated. + +5. SDP Identity Attribute + + The SDP "identity" attribute is a session-level attribute that is + used by an endpoint to convey its identity assertion to its peer. + The identity-assertion value is encoded as base64, as described in + Section 4 of [RFC4648]. + + The procedures in this section are based on the assumption that the + identity assertion of an endpoint is bound to the fingerprints of the + endpoint. This does not preclude the definition of alternative means + of binding an assertion to the endpoint, but such means are outside + the scope of this specification. + + The semantics of multiple "identity" attributes within an offer or + answer are undefined. Implementations SHOULD only include a single + "identity" attribute in an offer or answer, and Relying Parties MAY + elect to ignore all but the first "identity" attribute. + + Name: identity + + Value: identity-assertion + + Usage Level: session + + Charset Dependent: no + + Default Value: N/A + + Syntax: + + identity-assertion = identity-assertion-value + *(SP identity-extension) + identity-assertion-value = base64 + identity-extension = extension-name [ "=" extension-value ] + extension-name = token + extension-value = 1*(%x01-09 / %x0b-0c / %x0e-3a / %x3c-ff) + ; byte-string from [RFC4566] + + <ALPHA and DIGIT as defined in [RFC4566]> + <base64 as defined in [RFC4566]> + + Example: + + a=identity:\ + eyJpZHAiOnsiZG9tYWluIjoiZXhhbXBsZS5vcmciLCJwcm90b2NvbCI6ImJvZ3Vz\ + In0sImFzc2VydGlvbiI6IntcImlkZW50aXR5XCI6XCJib2JAZXhhbXBsZS5vcmdc\ + IixcImNvbnRlbnRzXCI6XCJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3l6XCIsXCJz\ + aWduYXR1cmVcIjpcIjAxMDIwMzA0MDUwNlwifSJ9 + + | Note that long lines in the example are folded to meet the + | column width constraints of this document; the backslash ("\") + | at the end of a line, the carriage return that follows, and + | whitespace shall be ignored. + + This specification does not define any extensions for the attribute. + + The identity-assertion value is a JSON encoded string [RFC8259]. The + JSON object contains two keys: "assertion" and "idp". The + "assertion" key value contains an opaque string that is consumed by + the IdP. The "idp" key value contains a dictionary with one or two + further values that identify the IdP. See Section 7.6 for more + details. + +5.1. Offer/Answer Considerations + + This section defines the SDP offer/answer [RFC3264] considerations + for the SDP "identity" attribute. + + Within this section, 'initial offer' refers to the first offer in the + SDP session that contains an SDP "identity" attribute. + +5.1.1. Generating the Initial SDP Offer + + When an offerer sends an offer, in order to provide its identity + assertion to the peer, it includes an "identity" attribute in the + offer. In addition, the offerer includes one or more SDP + "fingerprint" attributes. The "identity" attribute MUST be bound to + all the "fingerprint" attributes in the session description. + +5.1.2. Generating an SDP Answer + + If the answerer elects to include an "identity" attribute, it follows + the same steps as those in Section 5.1.1. The answerer can choose to + include or omit an "identity" attribute independently, regardless of + whether the offerer did so. + +5.1.3. Processing an SDP Offer or Answer + + When an endpoint receives an offer or answer that contains an + "identity" attribute, the answerer can use the attribute information + to contact the IdP and verify the identity of the peer. If the + identity requires a third-party IdP as described in Section 7.1, then + that IdP will need to have been specifically configured. If the + identity verification fails, the answerer MUST discard the offer or + answer as malformed. + +5.1.4. Modifying the Session + + When modifying a session, if the set of fingerprints is unchanged, + then the sender MAY send the same "identity" attribute. In this + case, the established identity MUST be applied to existing DTLS + connections as well as new connections established using one of those + fingerprints. Note that [RFC8829], Section 5.2.1 requires that each + media section use the same set of fingerprints. If a new "identity" + attribute is received, then the receiver MUST apply that identity to + all existing connections. + + If the set of fingerprints changes, then the sender MUST either send + a new "identity" attribute or none at all. Because a change in + fingerprints also causes a new DTLS connection to be established, the + receiver MUST discard all previously established identities. + +6. Detailed Technical Description + +6.1. Origin and Web Security Issues + + The basic unit of permissions for WebRTC is the origin [RFC6454]. + Because the security of the origin depends on being able to + authenticate content from that origin, the origin can only be + securely established if data is transferred over HTTPS [RFC2818]. + Thus, clients MUST 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. + + Many Web browsers currently forbid by default any active mixed + content 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 executed unless the user overrides the error. Any + browser which enforces such a policy will also not permit access to + WebRTC functionality from mixed content pages (because they never + display mixed content). Browsers which allow active mixed content + MUST nevertheless disable WebRTC functionality in mixed content + settings. + + 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 + here is that the newly arrived insecure JS might redirect media to a + location controlled by the attacker. Implementations MUST either + choose to terminate the call or display a warning at that point. + + Also note that the security architecture depends on the keying + material not being available to move between origins. However, it is + assumed that the identity assertion can be passed to anyone that the + page cares to. + +6.2. Device Permissions Model + + Implementations MUST obtain explicit user consent prior to providing + access to the camera and/or microphone. Implementations MUST at + minimum support the following two permissions models for HTTPS + origins. + + * Requests for one-time camera/microphone access. + + * Requests for permanent access. + + Because HTTP origins cannot be securely established against network + attackers, implementations MUST refuse all permissions grants for + HTTP origins. + + In addition, they SHOULD support requests for access that promise + that media from this grant will be sent to a single communicating + peer (obviously there could be other requests for other peers), e.g., + "Call customerservice@example.org". The semantics of this request + are that the media stream from the camera and microphone will only be + routed through a connection which has been cryptographically verified + (through the IdP mechanism or an X.509 certificate in the DTLS-SRTP + handshake) as being associated with the stated identity. Note that + it is unlikely that browsers would have X.509 certificates, but + servers might. Browsers servicing such requests SHOULD clearly + indicate that 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 peers they are willing to communicate with, + e.g., "my mother" rather than "anyone on Facebook". Narrow + permissions grants allow the browser to do that enforcement. + + API Requirement: The API MUST provide a mechanism for the requesting + JS to relinquish the ability to see or modify the media (e.g., via + MediaStream.record()). Combined with secure authentication of the + communicating peer, this allows a user to be sure that the calling + site is not accessing or modifying their conversion. + + UI Requirement: The UI MUST clearly indicate when the user's camera + and microphone are in use. This indication MUST NOT be + suppressible by the JS and MUST clearly indicate how to terminate + device access, and provide a UI means to immediately stop camera/ + microphone input without the JS being able to prevent it. + + UI Requirement: If the UI indication of camera/microphone use is + displayed in the browser such that minimizing the browser window + would hide the indication, or the JS creating an overlapping + window would hide the indication, then the browser SHOULD stop + camera 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 notifications support, such as phones.) + + * Browsers MUST NOT permit permanent screen or application sharing + permissions to be installed as a response to a JS request for + permissions. Instead, they must require some other user action + such as a permissions setting or an application install experience + to grant permission to a site. + + * Browsers MUST provide a separate dialog request for screen/ + application sharing permissions even if the media request is made + at the same time as the request for camera and microphone + permissions. + + * The browser MUST indicate any windows which are currently being + shared in some unambiguous way. Windows which are not visible + MUST NOT be shared even if the application is being shared. If + the screen is being shared, then that MUST be indicated. + + Browsers MAY permit the formation of data channels without any direct + user approval. Because sites can always tunnel data through the + server, further restrictions on the data channel do not provide any + additional security. (See Section 6.3 for a related issue.) + + Implementations which support some form of direct user authentication + SHOULD also provide a policy by which a user can authorize calls only + to specific communicating peers. Specifically, the implementation + SHOULD provide the following interfaces/controls: + + * Allow future calls to this verified user. + + * Allow future calls to any verified user who is in my system + address book (this only works with address book integration, of + course). + + Implementations SHOULD also provide a different user interface + indication when calls are in progress to users whose identities are + directly verifiable. Section 6.5 provides more on this. + +6.3. Communications Consent + + Browser client implementations of WebRTC MUST implement ICE. Server + gateway implementations which operate only at public IP addresses + MUST implement either full ICE or ICE-Lite [RFC8445]. + + Browser implementations MUST verify reachability via ICE prior to + sending any non-ICE packets to a given destination. Implementations + MUST NOT provide the ICE transaction ID to JavaScript during the + lifetime of the transaction (i.e., during the period when the ICE + stack would accept a new response for that transaction). The JS MUST + NOT be permitted to control the local ufrag and password, though it + of course knows it. + + While continuing consent is required, the ICE [RFC8445], Section 11 + keepalives use STUN Binding Indications, which are one-way and + therefore not sufficient. The current WG consensus is to use ICE + Binding Requests for continuing consent freshness. ICE already + requires that implementations respond to such requests, so this + approach is maximally compatible. A separate document will profile + the ICE timers to be used; see [RFC7675]. + +6.4. IP Location Privacy + + A side effect of the default ICE behavior is that the peer learns + one's IP address, which leaks large amounts of location information. + This has negative privacy consequences in some circumstances. The + API requirements in this section are 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 site will learn at + least a user's server-reflexive address from any 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 other side of + the call. Hiding the user's IP address from the server requires some + sort of explicit privacy-preserving mechanism on the client (e.g., + Tor Browser <https://www.torproject.org/projects/torbrowser.html.en>) + and is out of scope for this specification. + + API Requirement: The API MUST provide a mechanism to allow the JS to + suppress ICE negotiation (though perhaps to allow candidate + gathering) until the user has decided to answer the call. (Note: + Determining when 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 they elect not to answer a call and also from learning + whether the user is online. + + API Requirement: The API MUST provide a mechanism for the calling + application JS to indicate that only TURN candidates are to be + used. This prevents the peer from learning one's IP address at + all. This mechanism MUST also permit suppression of the related + address field, since that leaks local addresses. + + API Requirement: The API MUST provide a mechanism for the calling + application to reconfigure an existing call to add non-TURN + candidates. Taken together, this and the previous requirement + allow ICE negotiation to start immediately on incoming call + notification, thus reducing post-dial delay, but also to avoid + disclosing the user's IP address until they have decided to + answer. They also allow users to completely hide their IP address + for the duration of the call. Finally, they allow a mechanism for + the user to optimize performance by reconfiguring to allow non- + TURN candidates during an active call if the user decides they no + longer need to hide their IP address. + + Note that some enterprises may operate proxies and/or NATs designed + to hide internal IP addresses from the outside world. WebRTC + provides no explicit mechanism to allow this function. Either such + enterprises 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 regardless of the site's preferences. + + 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 [RFC8828]. + +6.5. Communications Security + + Implementations MUST support SRTP [RFC3711]. Implementations MUST + support DTLS [RFC6347] and DTLS-SRTP [RFC5763] [RFC5764] for SRTP + keying. Implementations MUST support SCTP over DTLS [RFC8261]. + + All media channels MUST be secured via SRTP and the Secure Real-time + Transport Control Protocol (SRTCP). Media traffic MUST NOT be sent + over plain (unencrypted) RTP or RTCP; that is, implementations MUST + NOT negotiate cipher suites with NULL encryption modes. DTLS-SRTP + MUST be offered for every media channel. WebRTC implementations MUST + NOT offer SDP security descriptions [RFC4568] or select it if + offered. An SRTP Master Key Identifier (MKI) MUST NOT be used. + + All data channels MUST be secured via DTLS. + + All implementations MUST support DTLS 1.2 with the + TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 cipher suite and the P-256 + curve [FIPS186]. Earlier drafts of this specification required DTLS + 1.0 with the cipher suite TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, and + at the time of this writing some implementations do not support DTLS + 1.2; endpoints which support only DTLS 1.2 might encounter + interoperability issues. The DTLS-SRTP protection profile + SRTP_AES128_CM_HMAC_SHA1_80 MUST be supported for SRTP. + Implementations MUST favor cipher suites which support Forward + Secrecy (FS) over non-FS cipher suites and SHOULD favor Authenticated + Encryption with Associated Data (AEAD) over non-AEAD cipher suites. + Note: the IETF is in the process of standardizing DTLS 1.3 + [TLS-DTLS13]. + + Implementations MUST NOT implement DTLS renegotiation and MUST reject + it with a "no_renegotiation" alert if offered. + + Endpoints MUST NOT implement TLS False Start [RFC7918]. + + API Requirement: The API MUST generate a new authentication key pair + for every new call by default. This is intended to allow for + unlinkability. + + API Requirement: The API MUST provide a means to reuse a key pair + for calls. This can be used to enable key continuity-based + authentication, and could be used to amortize key generation + costs. + + API Requirement: Unless the user specifically configures an external + key pair, different key pairs MUST be used for each origin. (This + avoids creating a super-cookie.) + + API Requirement: When DTLS-SRTP is used, the API MUST NOT permit the + JS to obtain the negotiated keying material. This requirement + preserves the end-to-end security of the media. + + UI Requirements: A user-oriented client MUST provide an "inspector" + interface which allows the user to determine the "security + characteristics" of the media. + + The following properties SHOULD be displayed "up-front" in the + browser chrome, i.e., without requiring the user to ask for them: + + + * A client MUST provide a user interface through which a user may + determine the "security characteristics" for currently + displayed audio and video stream(s). + + * A client MUST provide a user interface through which a user may + determine the "security characteristics" for transmissions of + their microphone audio and camera video. + + * If the far endpoint was directly verified, either via a third- + party verifiable X.509 certificate or via a Web IdP mechanism + (see Section 7), the "security characteristics" MUST include + the verified information. X.509 identities and Web IdP + identities have similar semantics and should be displayed in a + similar way. + + The following properties are more likely to require some "drill- + down" from the user: + + + * The "security characteristics" MUST indicate the cryptographic + algorithms in use (for example, "AES-CBC"). + + * The "security characteristics" MUST indicate whether FS is + provided. + + * The "security characteristics" MUST include some mechanism to + allow an out-of-band verification of the peer, such as a + certificate fingerprint or a Short Authentication String (SAS). + These are compared by the peers to authenticate one another. + +7. Web-Based Peer Authentication + + 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 publication, it has not been widely adopted or implemented. + It appears in this document as a description of the state of the art + as of this writing. + + 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 + side without trusting the signaling service to which they are + connected. For instance, users may be making a call via a federated + system where they wish to get direct authentication of the other + 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 + identity on a site they do trust (such as a social network). + + Recently, a number of Web-based identity technologies (OAuth, + Facebook Connect, etc.) have been developed. While the details vary, + what these technologies share is that they have a 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 use the example.org + IdP to prove to others that Alice is alice@example.org. The + development of these technologies allows us to separate calling from + identity provision: Alice could call you on a poker site but identify + herself as alice@example.org. + + Whatever the underlying technology, the general principle is that the + party which is being authenticated is NOT the signaling site but + rather the user (and their browser). Similarly, the Relying Party is + the browser and not the signaling site. Thus, the browser MUST + generate the input to the IdP assertion process and display the + results of the verification process to the user in a way which cannot + be imitated by the calling site. + + The mechanisms defined in this document do not require the browser to + implement any particular identity protocol or to support any + particular IdP. Instead, this document provides a generic interface + which any IdP can implement. Thus, new IdPs and protocols can be + introduced without change to either the browser or the calling + service. This avoids the need to make a commitment to any particular + identity protocol, although browsers may opt to directly implement + some identity protocols in order to provide superior performance or + UI properties. + +7.1. Trust Relationships: IdPs, APs, and RPs + + Any federated identity protocol has three major participants: + + Authenticating Party (AP): The entity which is trying to establish + its identity. + + Identity Provider (IdP): The entity which is vouching for the AP's + identity. + + Relying Party (RP): The entity which is trying to verify the AP's + identity. + + The AP and the IdP have an account relationship of some kind: the AP + registers with the IdP and is able to subsequently authenticate + 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 + relationship with. This can either be something that the user + configures into the browser or that is configured at the calling site + and then provided to the PeerConnection by the Web application at the + calling site. The use case for having this information 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 browsers. + However, it should also be possible for the IdP information to simply + be provided by the calling application. + + At a high level, there are two kinds of IdPs: + + Authoritative: IdPs which have verifiable control of some section of + the identity space. For instance, in the realm of email, the + operator of "example.com" has complete control of the namespace + ending in "@example.com". Thus, "alice@example.com" is whoever + the operator says it is. Examples of systems with authoritative + IdPs include DNSSEC, an identity system for SIP (see [RFC8224]), + and Facebook Connect (Facebook identities only make sense within + the context of the Facebook system). + + Third-Party: IdPs which don't have control of their section of the + identity space but instead verify users' identities via some + unspecified mechanism and then attest to it. Because the IdP + doesn't actually control the namespace, RPs need to trust that the + IdP is correctly verifying AP identities, and there can + potentially be multiple IdPs attesting to the same section of the + identity space. Probably the best-known example of a third-party + IdP is SSL/TLS certificates, where there are a large number of + certificate authorities (CAs) all of whom can attest to any domain + name. + + 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 + identity mechanism can directly verify that the IdP indeed made the + relevant identity assertion (a function provided by the mechanisms in + this document), and any assertion it makes about an identity for + which it is authoritative is directly verifiable. Note that this + does not mean that the IdP might not lie, but that is a + trustworthiness judgement that the user can make at the time they + look at the identity. + + 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 explicit + trust anchor list in PKI-based SSL/TLS clients). The list of + trustable IdPs needs to be configured directly into the browser, + either by the user or potentially by the browser manufacturer. This + is a significant advantage of authoritative IdPs and implies that if + third-party IdPs are to be supported, the potential number needs to + be fairly small. + +7.2. Overview of Operation + + In order to provide security without trusting the calling site, the + PeerConnection component of the browser must interact directly with + the IdP. The details of the mechanism are described in the W3C API + specification, but the general idea is that the PeerConnection + component downloads JS from a specific location on the IdP dictated + by the IdP domain name. That JS (the "IdP proxy") runs in an + isolated security context within the browser, and the PeerConnection + talks to it via a secure message passing channel. + + Note that there are two logically separate functions here: + + * Identity assertion generation. + + * Identity assertion verification. + + 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 + function or the other. + + +--------------------------------------+ + | Browser | + | | + | +----------------------------------+ | + | | https://calling-site.example.com | | + | | | | + | | Calling JS Code | | + | | ^ | | + | +---------------|------------------+ | + | | API Calls | + | v | + | PeerConnection | + | ^ | + | | API Calls | + | +-----------|-------------+ | +---------------+ + | | v | | | | + | | IdP Proxy |<-------->| Identity | + | | | | | Provider | + | | https://idp.example.org | | | | + | +-------------------------+ | +---------------+ + | | + +--------------------------------------+ + + When the PeerConnection object wants to interact with the IdP, the + sequence of events is as follows: + + 1. The browser (the PeerConnection component) instantiates an IdP + proxy. This allows the IdP to load whatever JS is necessary into + the proxy. The resulting code runs in the IdP's security + context. + + 2. The IdP registers an object with the browser that conforms to the + API defined in [webrtc-api]. + + 3. The browser invokes methods on the object registered by the IdP + proxy to create or verify identity assertions. + + This approach allows us to decouple the browser from any particular + IdP; the browser need only know how to load 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 + assertions. The IdP provides whatever logic is necessary to bridge + the generic protocol to the IdP's specific requirements. Thus, a + single browser can support any number of identity protocols, + including being forward compatible with IdPs which did not exist at + the time the browser was written. + +7.3. Items for Standardization + + There are two parts to this work: + + * The precise information from the signaling message that must be + cryptographically bound to the user's identity and a mechanism for + carrying assertions in JavaScript Session Establishment Protocol + (JSEP) messages. This is specified in Section 7.4. + + * The interface to the IdP, which is defined in the companion W3C + WebRTC API specification [webrtc-api]. + + The WebRTC API specification also defines JavaScript interfaces that + the calling application can use to specify which IdP to use. That + API also provides access to the assertion-generation capability and + the status of the validation process. + +7.4. Binding Identity Assertions to JSEP Offer/Answer Transactions + + An identity assertion binds the user's identity (as asserted by the + IdP) to the SDP offer/answer exchange and specifically to the media. + In order to achieve this, the PeerConnection must provide the 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 single + "fingerprint" key, as shown below: + + { + "fingerprint": + [ + { "algorithm": "sha-256", + "digest": "4A:AD:B9:B1:3F:...:E5:7C:AB" }, + { "algorithm": "sha-1", + "digest": "74:E9:76:C8:19:...:F4:45:6B" } + ] + } + + The "fingerprint" value is an array of objects. Each object in the + array contains "algorithm" and "digest" values, which correspond + directly to the algorithm and digest values in the "fingerprint" + attribute of the SDP [RFC8122]. + + This object is encoded in a JSON [RFC8259] string for passing to the + IdP. The identity assertion returned by the IdP, which is encoded in + the "identity" attribute, is a JSON object that is encoded as + described in Section 7.4.1. + + 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 merely + treats it as an opaque value to be attested to. Thus, new parameters + can be added to the assertion without modifying the IdP. + +7.4.1. Carrying Identity Assertions + + Once an IdP has generated an assertion (see 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 identity assertion. The identity assertion produced by the + IdP is encoded into a UTF-8 JSON text, then base64-encoded [RFC4648] + to produce this string. For example: + + v=0 + o=- 1181923068 1181923196 IN IP4 ua1.example.com + s=example1 + c=IN IP4 ua1.example.com + a=fingerprint:sha-1 \ + 4A:AD:B9:B1:3F:82:18:3B:54:02:12:DF:3E:5D:49:6B:19:E5:7C:AB + a=identity:\ + eyJpZHAiOnsiZG9tYWluIjoiZXhhbXBsZS5vcmciLCJwcm90b2NvbCI6ImJvZ3Vz\ + In0sImFzc2VydGlvbiI6IntcImlkZW50aXR5XCI6XCJib2JAZXhhbXBsZS5vcmdc\ + IixcImNvbnRlbnRzXCI6XCJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3l6XCIsXCJz\ + aWduYXR1cmVcIjpcIjAxMDIwMzA0MDUwNlwifSJ9 + a=... + t=0 0 + m=audio 6056 RTP/SAVP 0 + a=sendrecv + ... + + | Note that long lines in the example are folded to meet the + | column width constraints of this document; the backslash ("\") + | at the end of a line, the carriage return that follows, and + | whitespace shall be ignored. + + The "identity" attribute attests to all "fingerprint" attributes in + the session description. It is therefore a session-level attribute. + + Multiple "fingerprint" values can be used to offer alternative + certificates for a peer. The "identity" attribute MUST include all + "fingerprint" values that are included in "fingerprint" attributes of + the session description. + + The RP browser MUST verify that the in-use certificate for a DTLS + connection is in the set of fingerprints returned from the IdP when + verifying an assertion. + +7.5. Determining the IdP URI + + In order to ensure that the IdP is under control of the domain owner + rather than someone who merely has an account on the domain owner's + server (e.g., in shared hosting scenarios), the IdP JavaScript is + hosted at a deterministic location based on the IdP's domain name. + Each IdP proxy instance is associated with two values: + + authority: The authority [RFC3986] at which the IdP's service is + hosted. + + protocol: The specific IdP protocol which the IdP is using. This is + a completely opaque IdP-specific string, but allows an IdP to + implement two protocols in parallel. This value may be the empty + string. If no value for protocol is provided, a value of + "default" is used. + + Each IdP MUST serve its initial entry page (i.e., the one loaded by + the IdP proxy) from a well-known URI [RFC8615]. The well-known URI + for an IdP proxy is formed from the following URI components: + + 1. The scheme, "https:". An IdP MUST be loaded using HTTPS + [RFC2818]. + + 2. The authority [RFC3986]. As noted above, the authority MAY + contain a non-default port number or userinfo sub-component. + Both are removed when determining if an asserted identity matches + the name of the IdP. + + 3. The path, starting with "/.well-known/idp-proxy/" and appended + with the IdP protocol. Note that the separator characters '/' + (%2F) and '\' (%5C) MUST NOT be permitted in the protocol field, + lest an attacker be able to direct requests outside of the + controlled "/.well-known/" prefix. Query and fragment values MAY + be used by including '?' or '#' characters. + + For example, for the IdP "identity.example.com" and the protocol + "example", the URL would be: + + https://identity.example.com/.well-known/idp-proxy/example + + 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 permitted to assert + and validate. I.e., the IdP is still regarded as authoritative for + the original domain. + +7.5.1. Authenticating Party + + How an AP determines the appropriate IdP domain is out of scope of + this specification. In general, however, the AP has some actual + account relationship with the IdP, as this identity is what the IdP + is attesting to. Thus, the AP somehow supplies the IdP information + to the browser. Some potential mechanisms include: + + * Provided by the user directly. + + * Selected from some set of IdPs known to the calling site (e.g., a + button that shows "Authenticate via Facebook Connect"). + +7.5.2. Relying Party + + Unlike the AP, the RP need not have any particular relationship with + the IdP. Rather, it needs to be able to process whatever assertion + is provided by the AP. As the assertion contains the IdP's identity + in the "idp" field of the JSON-encoded object (see Section 7.6), the + URI can be constructed directly from the assertion, and thus the RP + can directly verify the technical validity of the assertion with no + user interaction. Authoritative assertions need only be verifiable. + Third-party assertions also MUST be verified against local policy, as + described in Section 8.1. + +7.6. Requesting Assertions + + The input to the identity assertion generation process is the JSON- + encoded object described in Section 7.4 that contains the set of + certificate fingerprints the browser intends to use. This string is + treated as opaque from the perspective of the IdP. + + The browser also identifies the origin that the PeerConnection is run + in, which allows the IdP to make decisions based on who is requesting + the assertion. + + An application can optionally provide a user identifier hint when + specifying an IdP. This value is a hint that the IdP can use to + select amongst multiple identities, or to avoid providing assertions + for unwanted identities. The "username" is a string that has no + meaning to any entity other than the IdP; it can contain any data the + IdP needs in order to correctly generate an assertion. + + An identity assertion that is successfully provided by the IdP + consists of the following information: + + idp: The domain name of an IdP and the protocol string. This MAY + identify a different IdP or protocol from the one that generated + the assertion. + + assertion: An opaque value containing the assertion itself. This is + only interpretable by the identified IdP or the IdP code running + in the client. + + Figure 5 shows an example assertion formatted as JSON. In this case, + the message has presumably been digitally signed/MACed in some way + that the IdP can later verify it, but this is an implementation + detail and out of scope of this document. + + { + "idp":{ + "domain": "example.org", + "protocol": "bogus" + }, + "assertion": "{\"identity\":\"bob@example.org\", + \"contents\":\"abcdefghijklmnopqrstuvwyz\", + \"signature\":\"010203040506\"}" + } + + Figure 5: Example Assertion + + For use in signaling, the assertion is serialized into JSON, + base64-encoded [RFC4648], and used as the value of the "identity" + attribute. IdPs SHOULD ensure that any assertions they generate + cannot be interpreted in a different context. E.g., they should use + a distinct format or have separate cryptographic keys for assertion + generation and other purposes. Line breaks are inserted solely for + readability. + +7.7. Managing User Login + + In order to generate an identity assertion, the IdP needs proof of + the user's identity. It is common practice to authenticate users + (using passwords or multi-factor authentication), then use cookies + [RFC6265] or HTTP authentication [RFC7617] for subsequent exchanges. + + The IdP proxy is able to access cookies, HTTP authentication data, or + other persistent session data because it operates in the security + context of the IdP origin. Therefore, if a user is logged in, the + IdP could have all the information needed to generate an assertion. + + 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 acquire more + information before generating the assertion. If the IdP wants to + interact with the user before generating an assertion, the IdP proxy + can fail to generate an assertion and instead indicate a URL where + login should proceed. + + The application can then load the provided URL to enable the user to + enter credentials. The communication between the application and the + IdP is described in [webrtc-api]. + +8. Verifying Assertions + + The input to identity validation is the assertion string taken from a + decoded "identity" attribute. + + The IdP proxy verifies the assertion. Depending on the identity + protocol, the proxy might contact the IdP server or other servers. + For instance, an OAuth-based protocol will likely require using the + IdP as an oracle, whereas with a signature-based scheme it might be + able to verify the assertion without contacting the IdP, provided + that it has cached the relevant public key. + + Regardless of the mechanism, if verification succeeds, a successful + response from the IdP proxy consists of the following information: + + identity: The identity of the AP from the IdP's perspective. + Details of this are provided in Section 8.1. + + contents: The original unmodified string provided by the AP as input + to the assertion generation process. + + Figure 6 shows an example response, which is JSON-formatted. + + { + "identity": "bob@example.org", + "contents": "{\"fingerprint\":[ ... ]}" + } + + Figure 6: Example Verification Result + +8.1. Identity Formats + + The identity provided from the IdP to the RP browser MUST consist of + a string representing the user's identity. This string is in the + form "<user>@<domain>", where "user" consists of any character, and + domain is an internationalized domain name [RFC5890] encoded as a + sequence of U-labels. + + The PeerConnection API MUST check this string as follows: + + 1. If the "domain" portion of the string is equal to the domain name + of the IdP proxy, then the assertion is valid, as the IdP is + authoritative for this domain. Comparison of domain names is + done using the label equivalence rule defined in Section 2.3.2.4 + of [RFC5890]. + + 2. If the "domain" portion of the string is not equal to the domain + name of the IdP proxy, then the PeerConnection object MUST reject + the assertion unless both: + + 1. the IdP domain is trusted as an acceptable third-party IdP; + and + + 2. local policy is configured to trust this IdP domain for the + domain portion of the identity string. + + Any '@' or '%' characters in the "user" portion of the identity MUST + be escaped according to the "percent-encoding" rules defined in + Section 2.1 of [RFC3986]. Characters other than '@' and '%' MUST NOT + be percent-encoded. For example, with a "user" of "user@133" and a + "domain" of "identity.example.com", the resulting string will be + encoded as "user%40133@identity.example.com". + + Implementations are cautioned to take care when displaying user + identities containing escaped '@' characters. If such characters are + unescaped prior to display, implementations MUST distinguish between + the domain of the IdP proxy and any domain that might be implied by + the portion of the "<user>" portion that appears after the escaped + "@" sign. + +9. Security Considerations + + Much of the security analysis of RTCWEB is contained in [RFC8826] or + in the discussion of the particular issues above. In order to avoid + repetition, this section focuses on (a) residual threats that are not + addressed by this document and (b) threats produced by failure/ + misbehavior of one of the components in the system. + +9.1. Communications Security + + If HTTPS is not used to secure communications to the signaling + server, and the identity mechanism used in Section 7 is not used, + then any on-path attacker can replace the DTLS-SRTP fingerprints in + the handshake and thus substitute its own identity for that of either + endpoint. + + Even if HTTPS is used, the signaling server can potentially mount a + man-in-the-middle attack unless implementations have some mechanism + for independently verifying keys. The UI requirements in Section 6.5 + are designed to provide such a mechanism for motivated/security + conscious users, but are not suitable for general use. The identity + service mechanisms in Section 7 are more suitable for general use. + Note, however, that a malicious signaling service can strip off any + such identity assertions, though it cannot forge new ones. Note that + all of the third-party security mechanisms available (whether 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 + Web site itself. Users who wish to assure themselves of security + against a malicious IdP can only do so by verifying peer credentials + directly, e.g., by checking the peer's fingerprint against a value + delivered out of band. + + In order to protect against malicious content JavaScript, that + JavaScript MUST NOT be allowed to have direct access to -- or perform + computations with -- DTLS keys. For instance, if content JS were + able to compute digital signatures, then it would be possible for + content 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 a call protected under an ephemeral Diffie-Hellman (DH) + key controlled by the content JS, thus violating the security + guarantees otherwise provided by 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 with the WebCrypto API + [webcrypto]. The JS must 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 ability to perform any operations that depend + on secret information associated with the key. Operations that + depend on public information, such as exporting the public key, are + of course safe. + +9.2. Privacy + + The requirements in this document are intended to allow: + + * Users to participate in calls without revealing their location. + + * Potential callees to avoid revealing their location and even + presence status prior to agreeing to answer a call. + + However, these privacy protections come at a performance cost in + terms of using TURN relays and, in the latter case, delaying ICE. + Sites SHOULD make users aware of these tradeoffs. + + Note that the protections provided here assume a non-malicious + calling service. As the calling service always knows the user's + status and (absent the use of a technology like Tor) their IP + address, they can violate the user's privacy at will. Users who wish + privacy against the calling sites they are using must use separate + privacy-enhancing technologies such as Tor. Combined WebRTC/Tor + implementations SHOULD arrange to route the media as well as the + signaling through Tor. Currently this will produce very suboptimal + performance. + + Additionally, any identifier which persists across multiple calls is + potentially a problem for privacy, especially for anonymous calling + services. Such services SHOULD instruct the browser to use separate + DTLS keys for each call and also to use TURN throughout the call. + Otherwise, the other side will learn linkable information that would + allow them to correlate the browser across multiple calls. + Additionally, browsers SHOULD implement the privacy-preserving CNAME + generation mode of [RFC7022]. + +9.3. Denial of Service + + The consent mechanisms described in this document are intended to + mitigate denial-of-service (DoS) attacks in which an attacker uses + clients to send large amounts of traffic to a victim without the + consent of the victim. While these mechanisms are sufficient to + protect victims who have not implemented WebRTC at all, WebRTC + implementations need to be more careful. + + Consider the case of a call center which accepts calls via WebRTC. + An attacker proxies the call center's front-end and arranges for + multiple clients to initiate calls to the call center. Note that + this requires user consent in many cases, but because the data + channel does not need consent, they can use that directly. Since ICE + 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 + all. Preventing this attack requires that automated WebRTC + implementations implement sensible flow control and have the ability + to triage out (i.e., stop responding to ICE probes on) calls which + are behaving badly, and especially to be prepared to remotely + throttle the data channel in the absence of plausible audio and video + (which the attacker cannot control). + + Another related attack is for the signaling service to swap the ICE + candidates for the audio and video streams, thus forcing a browser to + send video to the sink that the other victim expects will contain + audio (perhaps it is only expecting audio!), potentially causing + overload. Muxing multiple media flows over a single transport makes + it harder to individually suppress a single flow by denying ICE + keepalives. Either media-level (RTCP) mechanisms must be used or the + implementation must deny responses entirely, thus terminating the + call. + + Yet another attack, suggested by Magnus Westerlund, is for the + 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' + browsers to get them to attempt a call to someone. It then + translates their offers into apparent answers to the victim, which + looks like large-scale parallel forking. The victim still responds + to ICE responses, and now the browsers all try to send media to the + victim. Implementations can defend themselves from this attack by + only responding to ICE Binding Requests for a limited number of + remote ufrags (this is the reason for the requirement that the JS not + be able to control the ufrag and password). [RFC8834], Section 13 + documents a number of potential RTCP-based DoS attacks and + countermeasures. + + Note that attacks based on confusing one end or the other about + consent are possible even in the face of the third-party identity + mechanism as long as major parts of the signaling messages are not + signed. On the other hand, signing the entire message severely + restricts the capabilities of the calling application, so there are + difficult tradeoffs here. + +9.4. IdP Authentication Mechanism + + This mechanism relies for its security on the IdP and on the + PeerConnection correctly enforcing the security invariants described + above. At a high level, the IdP is attesting that the user + identified in the assertion wishes to be associated with the + assertion. Thus, it must not be possible for arbitrary third parties + to get assertions tied to a user or to produce assertions that RPs + will accept. + +9.4.1. PeerConnection Origin Check + + Fundamentally, the IdP proxy is just a piece of HTML and JS loaded by + the browser, so nothing stops a Web attacker from creating their own + IFRAME, loading the IdP proxy HTML/JS, and requesting a signature + over their own keys rather than those generated in the browser. + However, that proxy would be in the attacker's origin, not the IdP's + origin. Only the browser itself can instantiate a context that + (a) is in the IdP's origin and (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 origin prior to issuing assertions. + + Note that this check only asserts that the browser (or some other + entity with access to the user's authentication data) attests to the + request and hence to the fingerprint. It does not demonstrate that + the browser has access to the associated private key, and therefore + an attacker can attach their own identity to another party's keying + material, thus making a call which comes from Alice appear to come + from the attacker. See [RFC8844] for defenses against this form of + attack. + +9.4.2. IdP Well-Known URI + + As described in Section 7.5, the IdP proxy HTML/JS landing page is + located at a well-known URI based on the IdP's domain name. This + requirement prevents an attacker who can write some resources at the + IdP (e.g., on one's Facebook wall) from being able to impersonate the + IdP. + +9.4.3. Privacy of IdP-Generated Identities and the Hosting Site + + Depending on the structure of the IdP's assertions, the calling 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 authenticating + to the site via the IdP in any case -- for instance, when the user + has logged in with Facebook Connect and is then authenticating their + call with a Facebook identity. However, in other cases, the user may + not have already revealed their identity to the site. In general, + IdPs SHOULD either verify that the user is willing to have their + identity revealed to the site (e.g., through the usual IdP + permissions dialog) or arrange that the identity information is only + available to known RPs (e.g., social graph adjacencies) but not to + the calling site. The "domain" field of the assertion request can be + used to check that the user has agreed to disclose their identity to + the calling site; because it is supplied by the PeerConnection it can + be trusted to be correct. + +9.4.4. Security of Third-Party IdPs + + As discussed above, each third-party IdP represents a new universal + trust point and therefore the number of these IdPs needs to be quite + limited. Most IdPs, even those which issue unqualified identities + such as Facebook, can be recast as authoritative IdPs (e.g., + 123456@facebook.com). However, in such cases, the user interface + implications are not entirely desirable. One intermediate approach + is to have special (potentially user configurable) UI for large + authoritative IdPs, thus allowing the user to instantly grasp that + the call is being authenticated by Facebook, Google, etc. + +9.4.4.1. Confusable Characters + + Because a broad range of characters are permitted in identity + strings, it may be possible for attackers to craft identities which + are confusable with other identities (see [RFC6943] for more on this + topic). This is a problem with any identifier space of this type + (e.g., email addresses). Those minting identifiers should avoid + mixed scripts and similar confusable characters. Those presenting + these identifiers to a user should consider highlighting cases of + mixed script usage (see [RFC5890], Section 4.4). Other best + practices are still in development. + +9.4.5. Web Security Feature Interactions + + A number of optional Web security features have the potential to + cause issues for this mechanism, as discussed below. + +9.4.5.1. Popup Blocking + + When popup blocking is in use, the IdP proxy is unable to generate + popup windows, dialogs, or any other form of user interactions. This + prevents the IdP proxy from being used to circumvent user + interaction. The "LOGINNEEDED" message allows the IdP proxy to + inform the calling site of a need for user login, providing the + information necessary to satisfy this requirement without resorting + to direct user interaction from the IdP proxy itself. + +9.4.5.2. Third Party Cookies + + Some browsers allow users to block third party cookies (cookies + associated with origins other than the top-level page) for privacy + reasons. Any IdP which uses cookies to persist logins will be broken + by third-party cookie blocking. One option is to accept this as a + limitation; another is to have the PeerConnection object disable + third-party cookie blocking for the IdP proxy. + +10. IANA Considerations + + This specification defines the "identity" SDP attribute per the + procedures of Section 8.2.4 of [RFC4566]. The required information + for the registration is included here: + + Contact Name: IESG (iesg@ietf.org) + + Attribute Name: identity + + Long Form: identity + + Type of Attribute: session + + Charset Considerations: This attribute is not subject to the charset + attribute. + + Purpose: This attribute carries an identity assertion, binding an + identity to the transport-level security session. + + Appropriate Values: See Section 5 of RFC 8827. + + Mux Category: NORMAL + + This section registers the "idp-proxy" well-known URI from [RFC8615]. + + URI suffix: idp-proxy + + Change controller: IETF + +11. References + +11.1. Normative References + + [FIPS186] National Institute of Standards and Technology (NIST), + "Digital Signature Standard (DSS)", NIST PUB 186-4, + DOI 10.6028/NIST.FIPS.186-4, July 2013, + <https://doi.org/10.6028/NIST.FIPS.186-4>. + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, + DOI 10.17487/RFC2119, March 1997, + <https://www.rfc-editor.org/info/rfc2119>. + + [RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, + DOI 10.17487/RFC2818, May 2000, + <https://www.rfc-editor.org/info/rfc2818>. + + [RFC3264] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model + with Session Description Protocol (SDP)", RFC 3264, + DOI 10.17487/RFC3264, June 2002, + <https://www.rfc-editor.org/info/rfc3264>. + + [RFC3711] Baugher, M., McGrew, D., Naslund, M., Carrara, E., and K. + Norrman, "The Secure Real-time Transport Protocol (SRTP)", + RFC 3711, DOI 10.17487/RFC3711, March 2004, + <https://www.rfc-editor.org/info/rfc3711>. + + [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform + Resource Identifier (URI): Generic Syntax", STD 66, + RFC 3986, DOI 10.17487/RFC3986, January 2005, + <https://www.rfc-editor.org/info/rfc3986>. + + [RFC4566] Handley, M., Jacobson, V., and C. Perkins, "SDP: Session + Description Protocol", RFC 4566, DOI 10.17487/RFC4566, + July 2006, <https://www.rfc-editor.org/info/rfc4566>. + + [RFC4568] Andreasen, F., Baugher, M., and D. Wing, "Session + Description Protocol (SDP) Security Descriptions for Media + Streams", RFC 4568, DOI 10.17487/RFC4568, July 2006, + <https://www.rfc-editor.org/info/rfc4568>. + + [RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data + Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006, + <https://www.rfc-editor.org/info/rfc4648>. + + [RFC5763] Fischl, J., Tschofenig, H., and E. Rescorla, "Framework + for Establishing a Secure Real-time Transport Protocol + (SRTP) Security Context Using Datagram Transport Layer + Security (DTLS)", RFC 5763, DOI 10.17487/RFC5763, May + 2010, <https://www.rfc-editor.org/info/rfc5763>. + + [RFC5764] McGrew, D. and E. Rescorla, "Datagram Transport Layer + Security (DTLS) Extension to Establish Keys for the Secure + Real-time Transport Protocol (SRTP)", RFC 5764, + DOI 10.17487/RFC5764, May 2010, + <https://www.rfc-editor.org/info/rfc5764>. + + [RFC5890] Klensin, J., "Internationalized Domain Names for + Applications (IDNA): Definitions and Document Framework", + RFC 5890, DOI 10.17487/RFC5890, August 2010, + <https://www.rfc-editor.org/info/rfc5890>. + + [RFC6347] Rescorla, E. and N. Modadugu, "Datagram Transport Layer + Security Version 1.2", RFC 6347, DOI 10.17487/RFC6347, + January 2012, <https://www.rfc-editor.org/info/rfc6347>. + + [RFC6454] Barth, A., "The Web Origin Concept", RFC 6454, + DOI 10.17487/RFC6454, December 2011, + <https://www.rfc-editor.org/info/rfc6454>. + + [RFC7022] Begen, A., Perkins, C., Wing, D., and E. Rescorla, + "Guidelines for Choosing RTP Control Protocol (RTCP) + Canonical Names (CNAMEs)", RFC 7022, DOI 10.17487/RFC7022, + September 2013, <https://www.rfc-editor.org/info/rfc7022>. + + [RFC7675] Perumal, M., Wing, D., Ravindranath, R., Reddy, T., and M. + Thomson, "Session Traversal Utilities for NAT (STUN) Usage + for Consent Freshness", RFC 7675, DOI 10.17487/RFC7675, + October 2015, <https://www.rfc-editor.org/info/rfc7675>. + + [RFC7918] Langley, A., Modadugu, N., and B. Moeller, "Transport + Layer Security (TLS) False Start", RFC 7918, + DOI 10.17487/RFC7918, August 2016, + <https://www.rfc-editor.org/info/rfc7918>. + + [RFC8122] Lennox, J. and C. Holmberg, "Connection-Oriented Media + Transport over the Transport Layer Security (TLS) Protocol + in the Session Description Protocol (SDP)", RFC 8122, + DOI 10.17487/RFC8122, March 2017, + <https://www.rfc-editor.org/info/rfc8122>. + + [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC + 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, + May 2017, <https://www.rfc-editor.org/info/rfc8174>. + + [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data + Interchange Format", STD 90, RFC 8259, + DOI 10.17487/RFC8259, December 2017, + <https://www.rfc-editor.org/info/rfc8259>. + + [RFC8261] Tuexen, M., Stewart, R., Jesup, R., and S. Loreto, + "Datagram Transport Layer Security (DTLS) Encapsulation of + SCTP Packets", RFC 8261, DOI 10.17487/RFC8261, November + 2017, <https://www.rfc-editor.org/info/rfc8261>. + + [RFC8445] Keranen, A., Holmberg, C., and J. Rosenberg, "Interactive + Connectivity Establishment (ICE): A Protocol for Network + Address Translator (NAT) Traversal", RFC 8445, + DOI 10.17487/RFC8445, July 2018, + <https://www.rfc-editor.org/info/rfc8445>. + + [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol + Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, + <https://www.rfc-editor.org/info/rfc8446>. + + [RFC8615] Nottingham, M., "Well-Known Uniform Resource Identifiers + (URIs)", RFC 8615, DOI 10.17487/RFC8615, May 2019, + <https://www.rfc-editor.org/info/rfc8615>. + + [RFC8825] Alvestrand, H., "Overview: Real-Time Protocols for + Browser-Based Applications", RFC 8825, + DOI 10.17487/RFC8825, January 2021, + <https://www.rfc-editor.org/info/rfc8825>. + + [RFC8826] Rescorla, E., "Security Considerations for WebRTC", + RFC 8826, DOI 10.17487/RFC8826, January 2021, + <https://www.rfc-editor.org/info/rfc8826>. + + [RFC8829] Uberti, J., Jennings, C., and E. Rescorla, Ed., + "JavaScript Session Establishment Protocol (JSEP)", + RFC 8829, DOI 10.17487/RFC8829, January 2021, + <https://www.rfc-editor.org/info/rfc8829>. + + [RFC8834] Perkins, C., Westerlund, M., and J. Ott, "Media Transport + and Use of RTP in WebRTC", RFC 8834, DOI 10.17487/RFC8834, + January 2021, <https://www.rfc-editor.org/info/rfc8834>. + + [RFC8844] Thomson, M. and E. Rescorla, "Unknown Key-Share Attacks on + Uses of TLS with the Session Description Protocol (SDP)", + RFC 8844, DOI 10.17487/RFC8844, January 2021, + <https://www.rfc-editor.org/info/rfc8844>. + + [webcrypto] + Watson, M., "Web Cryptography API", W3C Recommendation, 26 + January 2017, + <https://www.w3.org/TR/2017/REC-WebCryptoAPI-20170126/>. + + [webrtc-api] + Jennings, C., Boström, H., and J-I. Bruaroey, "WebRTC 1.0: + Real-time Communication Between Browsers", W3C Proposed + Recommendation, <https://www.w3.org/TR/webrtc/>. + +11.2. Informative References + + [fetch] van Kesteren, A., "Fetch", + <https://fetch.spec.whatwg.org/>. + + [RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, + A., Peterson, J., Sparks, R., Handley, M., and E. + Schooler, "SIP: Session Initiation Protocol", RFC 3261, + DOI 10.17487/RFC3261, June 2002, + <https://www.rfc-editor.org/info/rfc3261>. + + [RFC5705] Rescorla, E., "Keying Material Exporters for Transport + Layer Security (TLS)", RFC 5705, DOI 10.17487/RFC5705, + March 2010, <https://www.rfc-editor.org/info/rfc5705>. + + [RFC6120] Saint-Andre, P., "Extensible Messaging and Presence + Protocol (XMPP): Core", RFC 6120, DOI 10.17487/RFC6120, + March 2011, <https://www.rfc-editor.org/info/rfc6120>. + + [RFC6265] Barth, A., "HTTP State Management Mechanism", RFC 6265, + DOI 10.17487/RFC6265, April 2011, + <https://www.rfc-editor.org/info/rfc6265>. + + [RFC6455] Fette, I. and A. Melnikov, "The WebSocket Protocol", + RFC 6455, DOI 10.17487/RFC6455, December 2011, + <https://www.rfc-editor.org/info/rfc6455>. + + [RFC6943] Thaler, D., Ed., "Issues in Identifier Comparison for + Security Purposes", RFC 6943, DOI 10.17487/RFC6943, May + 2013, <https://www.rfc-editor.org/info/rfc6943>. + + [RFC7617] Reschke, J., "The 'Basic' HTTP Authentication Scheme", + RFC 7617, DOI 10.17487/RFC7617, September 2015, + <https://www.rfc-editor.org/info/rfc7617>. + + [RFC8224] Peterson, J., Jennings, C., Rescorla, E., and C. Wendt, + "Authenticated Identity Management in the Session + Initiation Protocol (SIP)", RFC 8224, + DOI 10.17487/RFC8224, February 2018, + <https://www.rfc-editor.org/info/rfc8224>. + + [RFC8828] Uberti, J. and G. Shieh, "WebRTC IP Address Handling + Requirements", RFC 8828, DOI 10.17487/RFC8828, January + 2021, <https://www.rfc-editor.org/info/rfc8828>. + + [TLS-DTLS13] + Rescorla, E., Tschofenig, H., and N. Modadugu, "The + Datagram Transport Layer Security (DTLS) Protocol Version + 1.3", Work in Progress, Internet-Draft, draft-ietf-tls- + dtls13-39, 2 November 2020, + <https://tools.ietf.org/html/draft-ietf-tls-dtls13-39>. + +Acknowledgements + + Bernard Aboba, Harald Alvestrand, Richard Barnes, Dan Druta, Cullen + Jennings, Hadriel Kaplan, Matthew Kaufman, Jim McEachern, Martin + Thomson, Magnus Westerlund. Matthew Kaufman provided the UI material + in Section 6.5. Christer Holmberg provided the initial version of + Section 5.1. + +Author's Address + + Eric Rescorla + Mozilla + + Email: ekr@rtfm.com |