draft-ietf-rtcweb-security-arch-10.txt | draft-ietf-rtcweb-security-arch-11.txt | |||
---|---|---|---|---|
RTCWEB E. Rescorla | RTCWEB E. Rescorla | |||
Internet-Draft RTFM, Inc. | Internet-Draft RTFM, Inc. | |||
Intended status: Standards Track July 4, 2014 | Intended status: Standards Track March 7, 2015 | |||
Expires: January 5, 2015 | Expires: September 8, 2015 | |||
WebRTC Security Architecture | WebRTC Security Architecture | |||
draft-ietf-rtcweb-security-arch-10 | draft-ietf-rtcweb-security-arch-11 | |||
Abstract | Abstract | |||
The Real-Time Communications on the Web (RTCWEB) working group is | The Real-Time Communications on the Web (RTCWEB) working group is | |||
tasked with standardizing protocols for enabling real-time | tasked with standardizing protocols for enabling real-time | |||
communications within user-agents using web technologies (commonly | communications within user-agents using web technologies (commonly | |||
called "WebRTC"). This document defines the security architecture | called "WebRTC"). This document defines the security architecture | |||
for WebRTC. | for WebRTC. | |||
Status of this Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on January 5, 2015. | This Internet-Draft will expire on September 8, 2015. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2014 IETF Trust and the persons identified as the | Copyright (c) 2015 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
skipping to change at page 2, line 19 | skipping to change at page 2, line 19 | |||
modifications of such material outside the IETF Standards Process. | modifications of such material outside the IETF Standards Process. | |||
Without obtaining an adequate license from the person(s) controlling | Without obtaining an adequate license from the person(s) controlling | |||
the copyright in such materials, this document may not be modified | the copyright in such materials, this document may not be modified | |||
outside the IETF Standards Process, and derivative works of it may | outside the IETF Standards Process, and derivative works of it may | |||
not be created outside the IETF Standards Process, except to format | not be created outside the IETF Standards Process, except to format | |||
it for publication as an RFC or to translate it into languages other | it for publication as an RFC or to translate it into languages other | |||
than English. | than English. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
3. Trust Model . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 3. Trust Model . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
3.1. Authenticated Entities . . . . . . . . . . . . . . . . . . 6 | 3.1. Authenticated Entities . . . . . . . . . . . . . . . . . 5 | |||
3.2. Unauthenticated Entities . . . . . . . . . . . . . . . . . 6 | 3.2. Unauthenticated Entities . . . . . . . . . . . . . . . . 6 | |||
4. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 4. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
4.1. Initial Signaling . . . . . . . . . . . . . . . . . . . . 9 | 4.1. Initial Signaling . . . . . . . . . . . . . . . . . . . . 8 | |||
4.2. Media Consent Verification . . . . . . . . . . . . . . . . 11 | 4.2. Media Consent Verification . . . . . . . . . . . . . . . 10 | |||
4.3. DTLS Handshake . . . . . . . . . . . . . . . . . . . . . . 12 | 4.3. DTLS Handshake . . . . . . . . . . . . . . . . . . . . . 11 | |||
4.4. Communications and Consent Freshness . . . . . . . . . . . 12 | 4.4. Communications and Consent Freshness . . . . . . . . . . 11 | |||
5. Detailed Technical Description . . . . . . . . . . . . . . . . 13 | 5. Detailed Technical Description . . . . . . . . . . . . . . . 12 | |||
5.1. Origin and Web Security Issues . . . . . . . . . . . . . . 13 | 5.1. Origin and Web Security Issues . . . . . . . . . . . . . 12 | |||
5.2. Device Permissions Model . . . . . . . . . . . . . . . . . 13 | 5.2. Device Permissions Model . . . . . . . . . . . . . . . . 12 | |||
5.3. Communications Consent . . . . . . . . . . . . . . . . . . 15 | 5.3. Communications Consent . . . . . . . . . . . . . . . . . 15 | |||
5.4. IP Location Privacy . . . . . . . . . . . . . . . . . . . 16 | 5.4. IP Location Privacy . . . . . . . . . . . . . . . . . . . 15 | |||
5.5. Communications Security . . . . . . . . . . . . . . . . . 17 | 5.5. Communications Security . . . . . . . . . . . . . . . . . 16 | |||
5.6. Web-Based Peer Authentication . . . . . . . . . . . . . . 18 | 5.6. Web-Based Peer Authentication . . . . . . . . . . . . . . 18 | |||
5.6.1. Trust Relationships: IdPs, APs, and RPs . . . . . . . 19 | 5.6.1. Trust Relationships: IdPs, APs, and RPs . . . . . . . 19 | |||
5.6.2. Overview of Operation . . . . . . . . . . . . . . . . 21 | 5.6.2. Overview of Operation . . . . . . . . . . . . . . . . 20 | |||
5.6.3. Items for Standardization . . . . . . . . . . . . . . 22 | 5.6.3. Items for Standardization . . . . . . . . . . . . . . 22 | |||
5.6.4. Binding Identity Assertions to JSEP Offer/Answer | 5.6.4. Binding Identity Assertions to JSEP Offer/Answer | |||
Transactions . . . . . . . . . . . . . . . . . . . . . 22 | Transactions . . . . . . . . . . . . . . . . . . . . 22 | |||
5.6.4.1. Input to Assertion Generation Process . . . . . . 22 | 5.6.4.1. Carrying Identity Assertions . . . . . . . . . . 23 | |||
5.6.4.2. Carrying Identity Assertions . . . . . . . . . . . 23 | 5.6.4.2. a=identity Attribute . . . . . . . . . . . . . . 23 | |||
5.6.4.3. a=identity Attribute . . . . . . . . . . . . . . . 24 | 5.6.5. Determining the IdP URI . . . . . . . . . . . . . . . 24 | |||
5.6.5. IdP Interaction Details . . . . . . . . . . . . . . . 24 | 5.6.5.1. Authenticating Party . . . . . . . . . . . . . . 25 | |||
5.6.5.1. General Message Structure . . . . . . . . . . . . 24 | 5.6.5.2. Relying Party . . . . . . . . . . . . . . . . . . 25 | |||
5.6.5.2. Errors . . . . . . . . . . . . . . . . . . . . . . 25 | 5.6.6. Requesting Assertions . . . . . . . . . . . . . . . . 25 | |||
5.6.5.3. IdP Proxy Setup . . . . . . . . . . . . . . . . . 26 | 5.6.7. Managing User Login . . . . . . . . . . . . . . . . . 27 | |||
5.6.5.4. Verifying Assertions . . . . . . . . . . . . . . . 30 | 5.7. Verifying Assertions . . . . . . . . . . . . . . . . . . 27 | |||
6. Security Considerations . . . . . . . . . . . . . . . . . . . 31 | 5.7.1. Identity Formats . . . . . . . . . . . . . . . . . . 28 | |||
6.1. Communications Security . . . . . . . . . . . . . . . . . 31 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 28 | |||
6.2. Privacy . . . . . . . . . . . . . . . . . . . . . . . . . 32 | 6.1. Communications Security . . . . . . . . . . . . . . . . . 29 | |||
6.3. Denial of Service . . . . . . . . . . . . . . . . . . . . 33 | 6.2. Privacy . . . . . . . . . . . . . . . . . . . . . . . . . 30 | |||
6.4. IdP Authentication Mechanism . . . . . . . . . . . . . . . 34 | 6.3. Denial of Service . . . . . . . . . . . . . . . . . . . . 30 | |||
6.4.1. PeerConnection Origin Check . . . . . . . . . . . . . 34 | 6.4. IdP Authentication Mechanism . . . . . . . . . . . . . . 31 | |||
6.4.2. IdP Well-known URI . . . . . . . . . . . . . . . . . . 35 | 6.4.1. PeerConnection Origin Check . . . . . . . . . . . . . 32 | |||
6.4.3. Privacy of IdP-generated identities and the | 6.4.2. IdP Well-known URI . . . . . . . . . . . . . . . . . 32 | |||
hosting site . . . . . . . . . . . . . . . . . . . . . 35 | 6.4.3. Privacy of IdP-generated identities and the hosting | |||
6.4.4. Security of Third-Party IdPs . . . . . . . . . . . . . 36 | site . . . . . . . . . . . . . . . . . . . . . . . . 32 | |||
6.4.5. Web Security Feature Interactions . . . . . . . . . . 36 | 6.4.4. Security of Third-Party IdPs . . . . . . . . . . . . 33 | |||
6.4.5.1. Popup Blocking . . . . . . . . . . . . . . . . . . 36 | 6.4.5. Web Security Feature Interactions . . . . . . . . . . 33 | |||
6.4.5.2. Third Party Cookies . . . . . . . . . . . . . . . 36 | 6.4.5.1. Popup Blocking . . . . . . . . . . . . . . . . . 33 | |||
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 36 | 6.4.5.2. Third Party Cookies . . . . . . . . . . . . . . . 33 | |||
8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 37 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 34 | |||
9. Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 | 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 34 | |||
9.1. Changes since -06 . . . . . . . . . . . . . . . . . . . . 37 | 9. Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 | |||
9.2. Changes since -05 . . . . . . . . . . . . . . . . . . . . 37 | 9.1. Changes since -10 . . . . . . . . . . . . . . . . . . . . 34 | |||
9.3. Changes since -03 . . . . . . . . . . . . . . . . . . . . 37 | 9.2. Changes since -06 . . . . . . . . . . . . . . . . . . . . 34 | |||
9.4. Changes since -03 . . . . . . . . . . . . . . . . . . . . 38 | 9.3. Changes since -05 . . . . . . . . . . . . . . . . . . . . 35 | |||
9.5. Changes since -02 . . . . . . . . . . . . . . . . . . . . 38 | 9.4. Changes since -03 . . . . . . . . . . . . . . . . . . . . 35 | |||
10. References . . . . . . . . . . . . . . . . . . . . . . . . . . 38 | 9.5. Changes since -03 . . . . . . . . . . . . . . . . . . . . 35 | |||
10.1. Normative References . . . . . . . . . . . . . . . . . . . 38 | 9.6. Changes since -02 . . . . . . . . . . . . . . . . . . . . 35 | |||
10.2. Informative References . . . . . . . . . . . . . . . . . . 40 | 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 36 | |||
Appendix A. Example IdP Bindings to Specific Protocols . . . . . 41 | 10.1. Normative References . . . . . . . . . . . . . . . . . . 36 | |||
A.1. BrowserID . . . . . . . . . . . . . . . . . . . . . . . . 41 | 10.2. Informative References . . . . . . . . . . . . . . . . . 38 | |||
A.2. OAuth . . . . . . . . . . . . . . . . . . . . . . . . . . 44 | Appendix A. Example IdP Bindings to Specific Protocols . . . . . 38 | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 45 | A.1. BrowserID . . . . . . . . . . . . . . . . . . . . . . . . 39 | |||
A.2. OAuth . . . . . . . . . . . . . . . . . . . . . . . . . . 42 | ||||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 43 | ||||
1. Introduction | 1. Introduction | |||
The Real-Time Communications on the Web (WebRTC) working group is | The Real-Time Communications on the Web (WebRTC) working group is | |||
tasked with standardizing protocols for real-time communications | tasked with standardizing protocols for real-time communications | |||
between Web browsers. The major use cases for WebRTC technology are | between Web browsers. The major use cases for WebRTC technology are | |||
real-time audio and/or video calls, Web conferencing, and direct data | real-time audio and/or video calls, Web conferencing, and direct data | |||
transfer. Unlike most conventional real-time systems, (e.g., SIP- | transfer. Unlike most conventional real-time systems, (e.g., SIP- | |||
based[RFC3261] soft phones) WebRTC communications are directly | based[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 | |||
skipping to change at page 6, line 4 | skipping to change at page 5, line 27 | |||
browser (or transitively by some property the browser verifies). | browser (or transitively by some property the browser verifies). | |||
Conversely, if the browser is compromised, then no security | 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 | these cases, the level of security provided is limited by how much | |||
they trust the browser. | they trust the browser. | |||
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 | browser. However, this is unfortunately not possible if we wish to | |||
have a functional system. Other network elements fall into two | have a functional system. Other network elements fall into two | |||
categories: those which can be authenticated by the browser and thus | categories: those which can be authenticated by the browser and thus | |||
are partly trusted--though to the minimum extent necessary--and those | are partly trusted--though to the minimum extent necessary--and those | |||
which cannot be authenticated and thus are untrusted. | which cannot be authenticated and thus are untrusted. | |||
3.1. Authenticated Entities | 3.1. Authenticated Entities | |||
There are two major classes of authenticated entities in the system: | There are two major classes of authenticated entities in the system: | |||
o Calling services: Web sites whose origin we can verify (optimally | o Calling services: Web sites whose origin we can verify (optimally | |||
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). | |||
o Other users: WebRTC peers whose origin we can verify | ||||
o Other users: WebRTC peers whose origin we can verify | ||||
cryptographically (optimally via DTLS-SRTP). | cryptographically (optimally via DTLS-SRTP). | |||
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.evil.org/ is owned by Dr. Evil does not mean that we can | https://www.evil.org/ is owned by Dr. Evil does not mean that we can | |||
trust Dr. Evil to access our camera and microphone. However, it | trust Dr. Evil to access our camera and microphone. However, it | |||
gives the user an opportunity to determine whether he wishes to trust | gives the user an opportunity to determine whether he wishes to trust | |||
Dr. Evil or not; after all, if he desires to contact Dr. Evil | Dr. Evil or not; after all, if he desires to contact Dr. Evil | |||
(perhaps to arrange for ransom payment), it's safe to temporarily | (perhaps to arrange for ransom payment), it's safe to temporarily | |||
give him access to the camera and microphone for the purpose of the | give him access to the camera and microphone for the purpose of the | |||
skipping to change at page 6, line 49 | skipping to change at page 6, line 24 | |||
3.2. Unauthenticated Entities | 3.2. Unauthenticated Entities | |||
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 | other network elements, thus we cannot trust them. This does not | |||
mean that it is not possible to have any interaction with them, but | 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 | it means that we must assume that they will behave maliciously and | |||
design a system which is secure even if they do so. | design a system which is secure even if they do so. | |||
4. Overview | 4. Overview | |||
This section describes a typical RTCWeb 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 | various security elements interact and what guarantees are provided | |||
to the user. The example in this section is a "best case" scenario | to the user. The example in this section is a "best case" scenario | |||
in which we provide the maximal amount of user authentication and | in which we provide the maximal amount of user authentication and | |||
media privacy with the minimal level of trust in the calling service. | media privacy with the minimal level of trust in the calling service. | |||
Simpler versions with lower levels of security are also possible and | Simpler versions with lower levels of security are also possible and | |||
are noted in the text where applicable. It's also important to | are noted in the text where applicable. It's also important to | |||
recognize the tension between security (or performance) and privacy. | recognize the tension between security (or performance) and privacy. | |||
The example shown here is aimed towards settings where we are more | The example shown here is aimed towards settings where we are more | |||
concerned about secure calling than about privacy, but as we shall | concerned about secure calling than about privacy, but as we shall | |||
see, there are settings where one might wish to make different | see, there are settings where one might wish to make different | |||
skipping to change at page 9, line 43 | skipping to change at page 8, line 45 | |||
4.1. Initial Signaling | 4.1. Initial Signaling | |||
For simplicity, assume the topology in Figure 3. Alice and Bob are | For simplicity, assume the topology in Figure 3. Alice and Bob are | |||
both users of a common calling service; they both have approved the | both users of a common calling service; they both have approved the | |||
calling service to make calls (we defer the discussion of device | calling service to make calls (we defer the discussion of device | |||
access permissions till later). They are both connected to the | access permissions till later). They are both connected to the | |||
calling service via HTTPS and so know the origin with some level of | calling service via HTTPS and so know the origin with some level of | |||
confidence. They also have accounts with some identity provider. | confidence. They also have accounts with some identity provider. | |||
This sort of identity service is becoming increasingly common in the | This sort of identity service is becoming increasingly common in the | |||
Web environment in technologies such (BrowserID, Federated Google | Web environment (with technologies such as BrowserID, Federated | |||
Login, Facebook Connect, OAuth, OpenID, WebFinger), and is often | Google Login, Facebook Connect, OAuth, OpenID, WebFinger), and is | |||
provided as a side effect service of a user's ordinary accounts with | often provided as a side effect service of a user's ordinary accounts | |||
some service. In this example, we show Alice and Bob using a | with some service. In this example, we show Alice and Bob using a | |||
separate identity service, though the identity service may be the | separate identity service, though the identity service may be the | |||
same entity as the calling service or there may be no identity | same entity as the calling service or there may be no identity | |||
service at all. | service at all. | |||
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. | |||
can see from the calling service that he is online and the calling | She can see from the calling service that he is online and the | |||
service presents a JS UI in the form of a button next to Bob's name | calling service presents a JS UI in the form of a button next to | |||
which says "Call". Alice clicks the button, which initiates a JS | Bob's name which says "Call". Alice clicks the button, which | |||
callback that instantiates a PeerConnection object. This does not | initiates a JS callback that instantiates a PeerConnection object. | |||
require a security check: JS from any origin is allowed to get this | This does not require a security check: JS from any origin is allowed | |||
far. | to get this far. | |||
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. | |||
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 [I-D.ietf-rtcweb-jsep] | browser + JS generates a signaling message [I-D.ietf-rtcweb-jsep] | |||
containing: | containing: | |||
o Media channel information | o Media channel information | |||
o Interactive Connectivity Establishment (ICE) [RFC5245] candidates | o Interactive Connectivity Establishment (ICE) [RFC5245] candidates | |||
o A fingerprint attribute binding the communication to a key pair | o A fingerprint attribute binding the communication to a key pair | |||
[RFC5763]. Note that this key may simply be ephemerally generated | [RFC5763]. Note that this key may simply be ephemerally generated | |||
for this call or specific to this domain, and Alice may have a | for this call or specific to this domain, and Alice may have a | |||
large number of such keys. | large number of such keys. | |||
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 | contacts the identity service and obtains an assertion binding | |||
Alice's identity to her fingerprint. The exact details depend on the | Alice's identity to her fingerprint. The exact details depend on the | |||
identity service (though as discussed in Section 5.6 PeerConnection | identity service (though as discussed in Section 5.6 PeerConnection | |||
can be agnostic to them), but for now it's easiest to think of as a | can be agnostic to them), but for now it's easiest to think of as a | |||
skipping to change at page 10, line 39 | skipping to change at page 9, line 44 | |||
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 | contacts the identity service and obtains an assertion binding | |||
Alice's identity to her fingerprint. The exact details depend on the | Alice's identity to her fingerprint. The exact details depend on the | |||
identity service (though as discussed in Section 5.6 PeerConnection | identity service (though as discussed in Section 5.6 PeerConnection | |||
can be agnostic to them), but for now it's easiest to think of as a | can be agnostic to them), but for now it's easiest to think of as a | |||
BrowserID assertion. The assertion may bind other information to the | BrowserID assertion. The assertion may bind other information to the | |||
identity besides the fingerprint, but at minimum it needs to bind the | identity besides the fingerprint, but at minimum it needs to bind the | |||
fingerprint. | fingerprint. | |||
This message is sent to the signaling server, e.g., by XMLHttpRequest | This message is sent to the signaling server, e.g., by XMLHttpRequest | |||
[XmlHttpRequest] or by WebSockets [RFC6455]. preferably over TLS | [XmlHttpRequest] or by WebSockets [RFC6455]. preferably over TLS | |||
[RFC5246]. The signaling server processes the message from Alice's | [RFC5246]. The signaling server processes the message from Alice's | |||
browser, determines that this is a call to Bob and sends a signaling | browser, determines that this is a call to Bob and sends a signaling | |||
message to Bob's browser (again, the format is currently undefined). | 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 | 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 | call and to Alice's identity. In this case, Alice has provided an | |||
identity assertion and so Bob's browser contacts Alice's identity | identity assertion and so Bob's browser contacts Alice's identity | |||
provider (again, this is done in a generic way so the browser has no | provider (again, this is done in a generic way so the browser has no | |||
specific knowledge of the IdP) to verify the assertion. This allows | specific knowledge of the IdP) to verify the assertion. This allows | |||
the browser to display a trusted element in the browser chrome | 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 | indicating that a call is coming in from Alice. If Alice is in Bob's | |||
skipping to change at page 12, line 34 | skipping to change at page 11, line 38 | |||
in-the-middle attack on their traffic. Even if they do not use an | 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 | communications are secure against the signaling service as well | |||
(i.e., that the signaling service cannot mount a passive attack on | (i.e., that the signaling service cannot mount a passive attack on | |||
the communications). | the communications). | |||
4.4. Communications and Consent Freshness | 4.4. Communications and Consent Freshness | |||
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 | the previous sections, they know that the communications are | |||
encrypted and authenticated. | encrypted and authenticated. | |||
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 keepalizes but only if media is not flowing. | specifies periodic STUN keepalives but only if media is not flowing. | |||
Because the consent issue is more difficult here, we require RTCWeb | Because the consent issue is more difficult here, we require WebRTC | |||
implementations to periodically send keepalives. As described in | implementations to periodically send keepalives. As described in | |||
Section 5.3, these keepalives MUST be based on the consent freshness | Section 5.3, these keepalives MUST be based on the consent freshness | |||
mechanism specified in [I-D.muthu-behave-consent-freshness]. If a | mechanism specified in [I-D.muthu-behave-consent-freshness]. 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. | |||
5. Detailed Technical Description | 5. Detailed Technical Description | |||
5.1. Origin and Web Security Issues | 5.1. Origin and Web Security Issues | |||
The basic unit of permissions for WebRTC is the origin [RFC6454]. | The basic unit of permissions for WebRTC is the origin [RFC6454]. | |||
Because the security of the origin depends on being able to | Because the security of the origin depends on being able to | |||
authenticate content from that origin, the origin can only be | authenticate content from that origin, the origin can only be | |||
securely established if data is transferred over HTTPS [RFC2818]. | securely established if data is transferred over HTTPS [RFC2818]. | |||
Thus, clients MUST treat HTTP and HTTPS origins as different | Thus, clients MUST treat HTTP and HTTPS origins as different | |||
permissions domains. [Note: this follows directly from the origin | permissions domains. [Note: this follows directly from the origin | |||
security model and is stated here merely for clarity.] | security model and is stated here merely for clarity.] | |||
Many web browsers currently forbid by default any active mixed | Many web browsers currently forbid by default any active mixed | |||
content on HTTPS pages. That is, when JavaScript is loaded from an | 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 | HTTP origin onto an HTTPS page, an error is displayed and the HTTP | |||
content is not executed unless the user overrides the error. Any | content is not executed unless the user overrides the error. Any | |||
browser which enforces such a policy will also not permit access to | browser which enforces such a policy will also not permit access to | |||
WebRTC functionality from mixed content pages (because they never | WebRTC functionality from mixed content pages (because they never | |||
display mixed content). Browsers which allow active mixed content | display mixed content). Browsers which allow active mixed content | |||
MUST nevertheless disable WebRTC functionality in mixed content | MUST nevertheless disable WebRTC functionality in mixed content | |||
skipping to change at page 14, line 47 | skipping to change at page 14, line 4 | |||
and microphone are in use. This indication MUST NOT be | and microphone are in use. This indication MUST NOT be | |||
suppressable by the JS and MUST clearly indicate how to terminate | suppressable by the JS and MUST clearly indicate how to terminate | |||
device access, and provide a UI means to immediately stop camera/ | device access, and provide a UI means to immediately stop camera/ | |||
microphone input without the JS being able to prevent it. | microphone input without the JS being able to prevent it. | |||
UI Requirement: If the UI indication of camera/microphone use are | UI Requirement: If the UI indication of camera/microphone use are | |||
displayed in the browser such that minimizing the browser window | displayed in the browser such that minimizing the browser window | |||
would hide the indication, or the JS creating an overlapping | would hide the indication, or the JS creating an overlapping | |||
window would hide the indication, then the browser SHOULD stop | window would hide the indication, then the browser SHOULD stop | |||
camera and microphone input when the indication is hidden. [Note: | camera and microphone input when the indication is hidden. [Note: | |||
this may not be necessary in systems that are non-windows-based | this may not be necessary in systems that are non-windows-based | |||
but that have good notifications support, such as phones.] | but that have good notifications support, such as phones.] | |||
[[OPEN ISSUE: This section does not have WG consensus. Because | [[OPEN ISSUE: This section does not have WG consensus. Because | |||
screen/application sharing presents a more significant risk than | screen/application sharing presents a more significant risk than | |||
camera and microphone access (see the discussion in | camera and microphone access (see the discussion in | |||
[I-D.ietf-rtcweb-security] S 4.1.1), we require a higher level of | [I-D.ietf-rtcweb-security] S 4.1.1), we require a higher level of | |||
user consent. | user consent. | |||
o Browsers MUST not permit permanent screen or application sharing | o 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. | |||
skipping to change at page 15, line 26 | skipping to change at page 14, line 34 | |||
o The browser MUST indicate any windows which are currently being | o The browser MUST indicate any windows which are currently being | |||
shared in some unambiguous way. Windows which are not visible | shared in some unambiguous way. Windows which are not visible | |||
MUST not be shared even if the application is being shared. If | MUST not be shared even if the application is being shared. If | |||
the screen is being shared, then that MUST be indicated. | the screen is being shared, then that MUST be indicated. | |||
-- END OF OPEN ISSUE]] | -- END OF OPEN ISSUE]] | |||
Clients MAY permit the formation of data channels without any direct | Clients MAY permit the formation of data channels without 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. (though see Section 5.3 for a related issue). | additional security. (though see Section 5.3 for a related issue). | |||
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 | SHOULD also provide a policy by which a user can authorize calls only | |||
to specific communicating peers. Specifically, the implementation | to specific communicating peers. Specifically, the implementation | |||
SHOULD provide the following interfaces/controls: | SHOULD provide the following interfaces/controls: | |||
o Allow future calls to this verified user. | o Allow future calls to this verified user. | |||
o Allow future calls to any verified user who is in my system | o 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). | |||
Implementations SHOULD also provide a different user interface | Implementations SHOULD also provide a different user interface | |||
indication when calls are in progress to users whose identities are | indication when calls are in progress to users whose identities are | |||
directly verifiable. Section 5.5 provides more on this. | directly verifiable. Section 5.5 provides more on this. | |||
5.3. Communications Consent | 5.3. Communications Consent | |||
skipping to change at page 16, line 8 | skipping to change at page 15, line 19 | |||
MUST implement either full ICE or ICE-Lite [RFC5245]. | MUST implement either full ICE or ICE-Lite [RFC5245]. | |||
Browser implementations MUST verify reachability via ICE prior to | Browser implementations MUST verify reachability via ICE 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 | MUST NOT provide the ICE transaction ID to JavaScript during 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 MUST | |||
NOT be permitted to control the local ufrag and password, though it | NOT be permitted to control the local ufrag and password, though it | |||
of course knows it. | of course knows it. | |||
While continuing consent is required, that ICE [RFC5245]; Section 10 | While continuing consent is required, the ICE [RFC5245]; Section 10 | |||
keepalives STUN Binding Indications are one-way and therefore not | keepalives use STUN Binding Indications which are one-way and | |||
sufficient. The current WG consensus is to use ICE Binding Requests | therefore not sufficient. The current WG consensus is to use ICE | |||
for continuing consent freshness. ICE already requires that | Binding Requests for continuing consent freshness. ICE already | |||
implementations respond to such requests, so this approach is | requires that implementations respond to such requests, so this | |||
maximally compatible. A separate document will profile the ICE | approach is maximally compatible. A separate document will profile | |||
timers to be used; see [I-D.muthu-behave-consent-freshness]. | the ICE timers to be used; see [I-D.muthu-behave-consent-freshness]. | |||
5.4. IP Location Privacy | 5.4. IP Location Privacy | |||
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 information. | one's IP address, which leaks large amounts of location information. | |||
This has negative privacy consequences in some circumstances. The | This has negative privacy consequences in some circumstances. The | |||
API requirements in this section are intended to mitigate this issue. | API requirements in this section are intended to mitigate this issue. | |||
Note that these requirements are NOT intended to protect the user's | 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 | IP address from a malicious site. In general, the site will learn at | |||
least a user's server reflexive address from any HTTP transaction. | least a user's server reflexive address from any HTTP transaction. | |||
skipping to change at page 17, line 32 | skipping to change at page 16, line 42 | |||
[I-D.ietf-tsvwg-sctp-dtls-encaps]. | [I-D.ietf-tsvwg-sctp-dtls-encaps]. | |||
All media channels MUST be secured via SRTP. Media traffic MUST NOT | All media channels MUST be secured via SRTP. Media traffic MUST NOT | |||
be sent over plain (unencrypted) RTP; that is, implementations MUST | be sent over plain (unencrypted) RTP; that is, implementations MUST | |||
NOT negotiate cipher suites with NULL encryption modes. DTLS-SRTP | NOT negotiate cipher suites with NULL encryption modes. DTLS-SRTP | |||
MUST be offered for every media channel. WebRTC implementations MUST | MUST be offered for every media channel. WebRTC implementations MUST | |||
NOT offer SDES or select it if offered. | NOT offer SDES or select it if offered. | |||
All data channels MUST be secured via DTLS. | All data channels MUST be secured via DTLS. | |||
All implementations MUST implement both DTLS 1.2 and DTLS 1.0, with | All implementations MUST implement DTLS 1.0, with the cipher suite | |||
the cipher suites TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 and | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA and the DTLS-SRTP protection | |||
TLS_DHE_RSA_WITH_AES_128_CBC_SHA and the DTLS-SRTP protection profile | profile SRTP_AES128_CM_HMAC_SHA1_80. Implementations SHOULD | |||
SRTP_AES128_CM_HMAC_SHA1_80. Implementations SHOULD favor cipher | implement DTLS 1.2 with the TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 | |||
suites which support PFS over non-PFS cipher suites and GCM over CBC | cipher suite. Implementations SHOULD favor cipher suites which | |||
cipher suites. [[OPEN ISSUE: Should we require ECDHE? Waiting for | support PFS over non-PFS cipher suites and GCM over CBC cipher | |||
TLS WG Consensus.]] | suites. [[OPEN ISSUE: Should we require ECDSA? Waiting for WG | |||
Consensus.]] | ||||
API Requirement: The API MUST provide a mechanism to indicate that a | API Requirement: The API MUST provide a mechanism to indicate that a | |||
fresh DTLS key pair is to be generated for a specific call. This | fresh DTLS key pair is to be generated for a specific call. This | |||
is intended to allow for unlinkability. Note that there are also | is intended to allow for unlinkability. Note that there are also | |||
settings where it is attractive to use the same keying material | settings where it is attractive to use the same keying material | |||
repeatedly, especially those with key continuity-based | repeatedly, especially those with key continuity-based | |||
authentication. Unless the user specifically configures an | authentication. Unless the user specifically configures an | |||
external key pair, different key pairs MUST be used for each | external key pair, different key pairs MUST be used for each | |||
origin. (This avoids creating a super-cookie.) | origin. (This avoids creating a super-cookie.) | |||
API Requirement: When DTLS-SRTP is used, the API MUST NOT permit the | API Requirement: When DTLS-SRTP is used, the API MUST NOT permit the | |||
JS to obtain the negotiated keying material. This requirement | JS to obtain the negotiated keying material. This requirement | |||
preserves the end-to-end security of the media. | preserves the end-to-end security of the media. | |||
UI Requirements: A user-oriented client MUST provide an | UI Requirements: A user-oriented client MUST provide an "inspector" | |||
"inspector" interface which allows the user to determine the | interface which allows the user to determine the security | |||
security characteristics of the media. | characteristics of the media. | |||
The following properties SHOULD be displayed "up-front" in the | The following properties SHOULD be displayed "up-front" 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: | |||
* A client MUST provide a user interface through which a user may | * A client MUST provide a user interface through which a user may | |||
determine the security characteristics for currently-displayed | determine the security characteristics for currently-displayed | |||
audio and video stream(s) | audio and video stream(s) | |||
* A client MUST provide a user interface through which a user may | * A client MUST provide a user interface through which a user may | |||
determine the security characteristics for transmissions of | determine the security characteristics for transmissions of | |||
their microphone audio and camera video. | their microphone audio and camera video. | |||
* The "security characteristics" MUST include an indication as to | * The "security characteristics" MUST include an indication as to | |||
whether the cryptographic keys were delivered out-of-band (from | whether the cryptographic keys were delivered out-of-band (from | |||
a server) or were generated as a result of a pairwise | a server) or were generated as a result of a pairwise | |||
negotiation. | negotiation. | |||
* If the far endpoint was directly verified, either via a third- | * If the far endpoint was directly verified, either via a third- | |||
party verifiable X.509 certificate or via a Web IdP mechanism | party verifiable X.509 certificate or via a Web IdP mechanism | |||
(see Section 5.6) the "security characteristics" MUST include | (see Section 5.6) the "security characteristics" MUST include | |||
the verified information. X.509 identities and Web IdP | the verified information. X.509 identities and Web IdP | |||
identities have similar semantics and should be displayed in a | identities have similar semantics and should be displayed in a | |||
similar way. | similar way. | |||
The following properties are more likely to require some "drill- | The following properties are more likely to require some "drill- | |||
down" from the user: | down" from the user: | |||
skipping to change at page 18, line 36 | skipping to change at page 18, line 6 | |||
party verifiable X.509 certificate or via a Web IdP mechanism | party verifiable X.509 certificate or via a Web IdP mechanism | |||
(see Section 5.6) the "security characteristics" MUST include | (see Section 5.6) the "security characteristics" MUST include | |||
the verified information. X.509 identities and Web IdP | the verified information. X.509 identities and Web IdP | |||
identities have similar semantics and should be displayed in a | identities have similar semantics and should be displayed in a | |||
similar way. | similar way. | |||
The following properties are more likely to require some "drill- | The following properties are more likely to require some "drill- | |||
down" from the user: | down" from the user: | |||
* The "security characteristics" MUST indicate the cryptographic | * The "security characteristics" MUST indicate the cryptographic | |||
algorithms in use (For example: "AES-CBC" or "Null Cipher".) | algorithms in use (For example: "AES-CBC" or "Null Cipher".) | |||
However, if Null ciphers are used, that MUST be presented to | However, if Null ciphers are used, that MUST be presented to | |||
the user at the top-level UI. | the user at the top-level UI. | |||
* The "security characteristics" MUST indicate whether PFS is | * The "security characteristics" MUST indicate whether PFS is | |||
provided. | provided. | |||
* The "security characteristics" MUST include some mechanism to | * The "security characteristics" MUST include some 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 an SAS. | certificate fingerprint or an SAS. | |||
5.6. Web-Based Peer Authentication | 5.6. Web-Based Peer Authentication | |||
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 identity the endpoint on the other | browser) to be able to directly identify the endpoint on the other | |||
side without trusting only 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.) | |||
Recently, a number of Web-based identity technologies (OAuth, | Recently, a number of Web-based identity technologies (OAuth, | |||
BrowserID, Facebook Connect), etc. have been developed. While the | BrowserID, Facebook Connect etc.) have been developed. While the | |||
details vary, what these technologies share is that they have a Web- | details vary, what these technologies share is that they have a Web- | |||
based (i.e., HTTP/HTTPS) identity provider which attests to your | based (i.e., HTTP/HTTPS) identity provider which attests to your | |||
identity. For instance, if I have an account at example.org, I could | identity. For instance, if I have an account at example.org, I could | |||
use the example.org identity provider to prove to others that I was | use the example.org identity provider to prove to others that I was | |||
alice@example.org. The development of these technologies allows us | alice@example.org. The development of these technologies allows us | |||
to separate calling from identity provision: I could call you on | to separate calling from identity provision: I could call you on | |||
Poker Galaxy but identify myself as alice@example.org. | Poker Galaxy but identify myself as alice@example.org. | |||
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 MUST | |||
securely generate the input to the IdP assertion process and MUST | securely generate the input to the IdP assertion process and MUST | |||
securely display the results of the verification process to the user | securely 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. | |||
skipping to change at page 19, line 48 | skipping to change at page 19, line 20 | |||
Authenticating Party (AP): The entity which is trying to establish | Authenticating Party (AP): The entity which is trying to establish | |||
its identity. | its identity. | |||
Identity Provider (IdP): The entity which is vouching for the AP's | Identity Provider (IdP): The entity which is vouching for the AP's | |||
identity. | identity. | |||
Relying Party (RP): The entity which is trying to verify the AP's | Relying Party (RP): The entity which is trying to verify the AP's | |||
identity. | identity. | |||
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 site | configures into the browser or that is configured at the calling site | |||
and then provided to the PeerConnection by the Web application at the | and then provided to the PeerConnection by the Web application at the | |||
calling site. The use case for having this information configured | calling site. The use case for having this information configured | |||
into the browser is that the user may "log into" the browser to bind | 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. | it to some identity. This is becoming common in new browsers. | |||
However, it should also be possible for the IdP information to simply | However, it should also be possible for the IdP information to simply | |||
be provided by the calling application. | be provided by the calling application. | |||
At a high level there are two kinds of IdPs: | At a high level there are two kinds of IdPs: | |||
Authoritative: IdPs which have verifiable control of some section | Authoritative: IdPs which have verifiable control of some section | |||
of the identity space. For instance, in the realm of e-mail, the | of the identity space. For instance, in the realm of e-mail, 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 Connect | identity providers include DNSSEC, RFC 4474, and Facebook Connect | |||
(Facebook identities only make sense within the context of the | (Facebook identities only make sense within the context of the | |||
Facebook system). | Facebook system). | |||
Third-Party: IdPs which don't have control of their section of the | Third-Party: IdPs which don't have control of their section of the | |||
identity space but instead verify user's identities via some | identity space but instead verify user's identities via some | |||
unspecified mechanism and then attest to it. Because the IdP | unspecified mechanism and then attest to it. Because the IdP | |||
doesn't actually control the namespace, RPs need to trust that the | doesn't actually control the namespace, RPs need to trust that the | |||
IdP is correctly verifying AP identities, and there can | IdP is correctly verifying AP identities, and there can | |||
potentially be multiple IdPs attesting to the same section of the | potentially 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 | |||
identity provider is SSL certificates, where there are a large | identity provider is SSL certificates, where there are a large | |||
number of CAs all of whom can attest to any domain name. | number of CAs all of whom can attest to any domain name. | |||
If an AP is authenticating via an authoritative IdP, then the RP does | If an AP is authenticating via an authoritative IdP, then the RP does | |||
skipping to change at page 21, line 37 | skipping to change at page 21, line 18 | |||
| +----------------------------------+ | | | +----------------------------------+ | | |||
| | https://calling-site.example.com | | | | | https://calling-site.example.com | | | |||
| | | | | | | | | | |||
| | Calling JS Code | | | | | Calling JS Code | | | |||
| | ^ | | | | | ^ | | | |||
| +---------------|------------------+ | | | +---------------|------------------+ | | |||
| | API Calls | | | | API Calls | | |||
| v | | | v | | |||
| PeerConnection | | | PeerConnection | | |||
| ^ | | | ^ | | |||
| | MessageChannel | | | | API Calls | | |||
| +-----------|-------------+ | +---------------+ | | +-----------|-------------+ | +---------------+ | |||
| | v | | | | | | | v | | | | | |||
| | IdP Proxy |<-------->| Identity | | | | IdP Proxy |<-------->| Identity | | |||
| | | | | Provider | | | | | | | Provider | | |||
| | https://idp.example.org | | | | | | | https://idp.example.org | | | | | |||
| +-------------------------+ | +---------------+ | | +-------------------------+ | +---------------+ | |||
| | | | | | |||
+--------------------------------------+ | +--------------------------------------+ | |||
When the PeerConnection object wants to interact with the IdP, the | When the PeerConnection object wants to interact with the IdP, the | |||
skipping to change at page 21, line 49 | skipping to change at page 21, line 30 | |||
| | v | | | | | | | v | | | | | |||
| | IdP Proxy |<-------->| Identity | | | | IdP Proxy |<-------->| Identity | | |||
| | | | | Provider | | | | | | | Provider | | |||
| | https://idp.example.org | | | | | | | https://idp.example.org | | | | | |||
| +-------------------------+ | +---------------+ | | +-------------------------+ | +---------------+ | |||
| | | | | | |||
+--------------------------------------+ | +--------------------------------------+ | |||
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: | |||
1. The browser (the PeerConnection component) instantiates an IdP | 1. The browser (the PeerConnection component) instantiates an IdP | |||
proxy with its source at the IdP. This allows the IdP to load | proxy. This allows the IdP to load whatever JS is necessary into | |||
whatever JS is necessary into the proxy, which runs in the IdP's | the proxy. The resulting code runs in the IdP's security | |||
security context. The browser uses a MessageChannel | context. | |||
[WebMessaging] to interact with the IdP proxy. | 2. The IdP registers an object with the browser that conforms to the | |||
2. Once the IdP is ready, the IdP proxy uses the MessageChannel to | API defined in [webrtc-api]. | |||
notify the browser that it is ready. | ||||
3. The browser and IdP proxy communicate using the MessageChannel | 3. The browser invokes methods on the object registered by the IdP | |||
using a standardized message exchange to create or verify | proxy to create or verify identity assertions. | |||
identity assertions. | ||||
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 | identity provider; the browser need only know how to load the IdP's | |||
JavaScript--which is deterministic from the IdP's identity--and the | JavaScript--the location of which is determined based on the IdP's | |||
generic protocol for requesting and verifying assertions. The IdP | identity--and to call the generic API for requesting and verifying | |||
provides whatever logic is necessary to bridge the generic protocol | identity assertions. The IdP provides whatever logic is necessary to | |||
to the IdP's specific requirements. Thus, a single browser can | bridge the generic protocol to the IdP's specific requirements. | |||
support any number of identity protocols, including being forward | Thus, a single browser can support any number of identity protocols, | |||
compatible with IdPs which did not exist at the time the browser was | including being forward compatible with IdPs which did not exist at | |||
written. | the time the browser was written. | |||
5.6.3. Items for Standardization | 5.6.3. Items for Standardization | |||
In order to make this work, we must standardize the following items: | There are two parts to this work: | |||
o The precise information from the signaling message that must be | o The precise information from the signaling message that must be | |||
cryptographically bound to the user's identity and a mechanism for | cryptographically bound to the user's identity and a mechanism for | |||
carrying assertions in JSEP messages. Section 5.6.4 | carrying assertions in JSEP messages. This is specified in | |||
o The interface to the IdP. Section 5.6.5 specifies a specific | Section 5.6.4. | |||
protocol mechanism which allows the use of any identity protocol | ||||
without requiring specific further protocol support in the browser | ||||
o The JavaScript interfaces which the calling application can use to | ||||
specify the IdP to use to generate assertions and to discover what | ||||
assertions were received. | ||||
The first two items are defined in this document. The final one is | o The interface to the IdP, which is defined in the companion W3C | |||
defined in the companion W3C WebRTC API specification [webrtc-api]. | WebRTC API specification [webrtc-api]. | |||
5.6.4. Binding Identity Assertions to JSEP Offer/Answer Transactions | 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. | ||||
5.6.4.1. Input to Assertion Generation Process | 5.6.4. Binding Identity Assertions to JSEP Offer/Answer Transactions | |||
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/exchange transaction and specifically to the | IdP) to the SDP offer/exchange transaction 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 "fingerprint" key, as shown below: | single "fingerprint" key, as shown below: | |||
{ | { | |||
"fingerprint": [ { | "fingerprint": [ { | |||
skipping to change at page 23, line 20 | skipping to change at page 22, line 46 | |||
"algorithm": "sha-1", | "algorithm": "sha-1", | |||
"digest": "74:E9:76:C8:19:...:F4:45:6B" | "digest": "74:E9:76:C8:19:...:F4:45:6B" | |||
} ] | } ] | |||
} | } | |||
The "fingerprint" value is an array of objects. Each object in the | The "fingerprint" value is an array of objects. Each object in the | |||
array contains "algorithm" and "digest" values, which correspond | array contains "algorithm" and "digest" values, which correspond | |||
directly to the algorithm and digest values in the "a=fingerprint" | directly to the algorithm and digest values in the "a=fingerprint" | |||
line of the SDP [RFC4572]. | line of the SDP [RFC4572]. | |||
Note: 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. | ||||
This object is encoded in a JSON [RFC4627] string for passing to the | This object is encoded in a JSON [RFC4627] string for passing to the | |||
IdP. | IdP. | |||
5.6.4.2. Carrying Identity Assertions | 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. | ||||
5.6.4.1. Carrying Identity Assertions | ||||
Once an IdP has generated an assertion, it is attached to the SDP | Once an IdP has generated an assertion, it is attached to the SDP | |||
message. This is done by adding a new a-line to the SDP, of the form | message. This is done by adding a new identity attribute to the SDP. | |||
a=identity. The sole contents of this value are a base-64 encoded | The sole contents of this value are a base-64 encoded [RFC4648] | |||
[RFC4648] identity assertion. For example: | identity assertion. For example: | |||
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 | |||
... | ... | |||
Each identity attribute should be paired (and attests to) with an | The identity attribute attests to all "a=fingerprint" attributes in | |||
"a=fingerprint" attribute and therefore can exist either at the | the session description. It is therefore a session-level attribute. | |||
session or media level. Multiple identity attributes may appear at | ||||
either level, though it is RECOMMENDED that implementations not do | ||||
this, because it becomes very unclear what security claim that they | ||||
are making and the UI guidelines above become unclear. Browsers MAY | ||||
choose refuse to display any identity indicators in the face of | ||||
multiple identity attributes with different identities but SHOULD | ||||
process multiple attributes with the same identity as described | ||||
above. | ||||
Multiple "a=fingerprint" values can be used to offer alternative | Multiple "a=fingerprint" values can be used to offer alternative | |||
certificates for a peer. The "a=identity" attribute MUST include all | certificates for a peer. The "a=identity" attribute MUST include all | |||
fingerprint values that are included in "a=fingerprint" lines. This | fingerprint values that are included in "a=fingerprint" lines. | |||
ensures that the in-use certificate for a DTLS connection is in the | ||||
set of fingerprints returned from the IdP when verifying an | ||||
assertion. This MUST be enforced by an RP by ensuring that all | ||||
"a=fingerprint" attributes for a given media section are present in | ||||
the "VERIFY" response (see Section 5.6.5.4). | ||||
5.6.4.3. a=identity Attribute | 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. | ||||
5.6.4.2. a=identity Attribute | ||||
The identity attribute is session level only. It contains an | The identity attribute is session level only. It contains an | |||
identity assertion, encoded as a base-64 string [RFC4648]. | identity assertion, encoded as a base-64 string [RFC4648]. | |||
The syntax of this SDP attribute is defined using Augmented BNF | The syntax of this SDP attribute is defined using Augmented BNF | |||
[RFC5234]: | [RFC5234]: | |||
identity-attribute = "identity:" identity-assertion | identity-attribute = "identity:" identity-assertion | |||
[ SP identity-extension | [ SP identity-extension | |||
*(";" [ SP ] identity-extension) ] | *(";" [ SP ] identity-extension) ] | |||
identity-assertion = base64 | identity-assertion = base64 | |||
base64 = 1*(ALPHA / DIGIT / "+" / "/" / "=" ) | base64 = 1*(ALPHA / DIGIT / "+" / "/" / "=" ) | |||
identity-extension = extension-att-name [ "=" extension-att-value ] | identity-extension = extension-att-name [ "=" extension-att-value ] | |||
extension-att-name = token | extension-att-name = token | |||
extension-att-value = 1*(%x01-09 / %x0b-0c / %x0e-3a / %x3c-ff) | extension-att-value = 1*(%x01-09 / %x0b-0c / %x0e-3a / %x3c-ff) | |||
; byte-string from [RFC4566] omitting ";" | ; byte-string from [RFC4566] omitting ";" | |||
No extensions are defined for this attribute. | No extensions are defined for this attribute. | |||
5.6.5. IdP Interaction Details | The identity assertion is a JSON [RFC4627] encoded dictionary that | |||
contains two values. The "assertion" attribute contains an opaque | ||||
5.6.5.1. General Message Structure | string that is consumed by the IdP. The "idp" attribute is a | |||
dictionary with one or two further values that identify the IdP, as | ||||
Messages between the PeerConnection object and the IdP proxy are | described in Section 5.6.5. | |||
JavaScript objects, shown in examples using JSON [RFC4627]. For | ||||
instance, the PeerConnection would request a signature with the | ||||
following "SIGN" message: | ||||
{ | ||||
"type": "SIGN", | ||||
"id": "1", | ||||
"origin": "https://calling-site.example.com", | ||||
"message": "012345678abcdefghijkl" | ||||
} | ||||
All messages MUST contain a "type" field which indicates the general | ||||
meaning of the message. | ||||
All requests from the PeerConnection object MUST contain an "id" | ||||
field which MUST be unique within the scope of the interaction | ||||
between the browser and the IdP instance. Responses from the IdP | ||||
proxy MUST contain the same "id" in response, which allows the | ||||
PeerConnection to correlate requests and responses, in case there are | ||||
multiple requests/responses outstanding to the same proxy. | ||||
All requests from the PeerConnection object MUST contain an "origin" | ||||
field containing the origin of the JS which initiated the PC (i.e., | ||||
the URL of the calling site). This origin value can be used by the | ||||
IdP to make access control decisions. For instance, an IdP might | ||||
only issue identity assertions for certain calling services in the | ||||
same way that some IdPs require that relying Web sites have an API | ||||
key before learning user identity. | ||||
Any message-specific data is carried in a "message" field. Depending | ||||
on the message type, this may either be a string or any JavaScript | ||||
object that can be conveyed in a message channel. This includes any | ||||
object that is able to be serialized to JSON. | ||||
5.6.5.2. Errors | ||||
If an error occurs, the IdP sends a message of type "ERROR". The | ||||
message MAY have an "error" field containing freeform text data which | ||||
containing additional information about what happened. For instance: | ||||
{ | ||||
"type": "ERROR", | ||||
"id": "1", | ||||
"error": "Signature verification failed" | ||||
} | ||||
Figure 5: Example error | ||||
5.6.5.3. IdP Proxy Setup | ||||
In order to perform an identity transaction, the PeerConnection must | ||||
first create an IdP proxy. While the details of this are specified | ||||
in the W3C API document, from the perspective of this specification, | ||||
however, the relevant facts are: | ||||
o The JS runs in the IdP's security context with the base page | ||||
retrieved from the URL specified in Section 5.6.5.3.1. | ||||
o The usual browser sandbox isolation mechanisms MUST be enforced | ||||
with respect to the IdP proxy. The IdP cannot be provided with | ||||
escalated privileges. | ||||
o JS running in the IdP proxy MUST be able to send and receive | ||||
messages to the PeerConnection and the PC and IdP proxy are able | ||||
to verify the source and destination of these messages. | ||||
o The IdP proxy is unable to interact with the user. This includes | ||||
the creation of popup windows and dialogs. | ||||
Initially the IdP proxy is in an unready state; the IdP JS must be | ||||
loaded and there may be several round trips to the IdP server to load | ||||
and prepare necessary resources. | ||||
When the IdP proxy is ready to receive commands, it delivers a | ||||
"READY" message. As this message is unsolicited, it contains only | ||||
the "type": | ||||
{ "type":"READY" } | ||||
Once the PeerConnection object receives the ready message, it can | ||||
send commands to the IdP proxy. | ||||
5.6.5.3.1. Determining the IdP URI | 5.6.5. Determining the IdP URI | |||
In order to ensure that the IdP is under control of the domain owner | 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 | rather than someone who merely has an account on the domain owner's | |||
server (e.g., in shared hosting scenarios), the IdP JavaScript is | server (e.g., in shared hosting scenarios), the IdP JavaScript is | |||
hosted at a deterministic location based on the IdP's domain name. | hosted at a deterministic location based on the IdP's domain name. | |||
Each IdP proxy instance is associated with two values: | Each IdP proxy instance is associated with two values: | |||
domain name: The IdP's domain name | domain name: The IdP's domain name | |||
protocol: The specific IdP protocol which the IdP is using. This is | protocol: The specific IdP protocol which the IdP is using. This is | |||
a completely opaque IdP-specific string, but allows an IdP to | a completely opaque IdP-specific string, but allows an IdP to | |||
implement two protocols in parallel. This value may be the empty | implement two protocols in parallel. This value may be the empty | |||
string. | 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 | Each IdP MUST serve its initial entry page (i.e., the one loaded by | |||
the IdP proxy) from a well-known URI [RFC5785]. The well-known URI | the IdP proxy) from a well-known URI [RFC5785]. The well-known URI | |||
for an IdP proxy is formed from the following URI components: | for an IdP proxy is formed from the following URI components: | |||
1. The scheme, "https:". An IdP MUST be loaded using HTTPS | 1. The scheme, "https:". An IdP MUST be loaded using HTTPS | |||
[RFC2818]. | [RFC2818]. | |||
2. The authority, which is the IdP domain name. The authority MAY | 2. The authority, which is the IdP domain name. The authority MAY | |||
contain a non-default port number. Any port number is removed | contain a non-default port number. Any port number is removed | |||
when determining if an asserted identity matches the name of the | when determining if an asserted identity matches the name of the | |||
IdP. The authority MUST NOT include a userinfo sub-component. | IdP. The authority MUST NOT include a userinfo sub-component. | |||
3. The path, starting with "/.well-known/idp-proxy/" and appended | 3. The path, starting with "/.well-known/idp-proxy/" and appended | |||
with the IdP protocol. Note that the separator characters '/' | with the IdP protocol. Note that the separator characters '/' | |||
(%2F) and '\' (%5C) MUST NOT be permitted in the protocol field, | (%2F) and '\' (%5C) MUST NOT be permitted in the protocol field, | |||
lest an attacker be able to direct requests outside of the | lest an attacker be able to direct requests outside of the | |||
controlled "/.well-known/" prefix. Query and fragment values MAY | controlled "/.well-known/" prefix. Query and fragment values MAY | |||
be used by including '?' or '#' characters. | be used by including '?' or '#' characters. | |||
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: | |||
https://example.com/.well-known/idp-proxy/example | https://example.com/.well-known/idp-proxy/example | |||
5.6.5.3.1.1. Authenticating Party | 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. | ||||
5.6.5.1. Authenticating Party | ||||
How an AP determines the appropriate IdP domain is out of scope of | How an AP determines the appropriate IdP domain is out of scope of | |||
this specification. In general, however, the AP has some actual | this specification. In general, however, the AP has some actual | |||
account relationship with the IdP, as this identity is what the IdP | account relationship with the IdP, as this identity is what the IdP | |||
is attesting to. Thus, the AP somehow supplies the IdP information | is attesting to. Thus, the AP somehow supplies the IdP information | |||
to the browser. Some potential mechanisms include: | to the browser. Some potential mechanisms include: | |||
o Provided by the user directly. | o Provided by the user directly. | |||
o Selected from some set of IdPs known to the calling site. E.g., a | o Selected from some set of IdPs known to the calling site. E.g., a | |||
button that shows "Authenticate via Facebook Connect" | button that shows "Authenticate via Facebook Connect" | |||
5.6.5.3.1.2. Relying Party | 5.6.5.2. Relying Party | |||
Unlike the AP, the RP need not have any particular relationship with | Unlike the AP, the RP need not have any particular relationship with | |||
the IdP. Rather, it needs to be able to process whatever assertion | 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, | is provided by the AP. As the assertion contains the IdP's identity, | |||
the URI can be constructed directly from the assertion, and thus the | the URI can be constructed directly from the assertion, and thus the | |||
RP can directly verify the technical validity of the assertion with | RP can 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 against | verifiable. Third-party assertions also MUST be verified against | |||
local policy, as described in Section 5.6.5.4.1. | local policy, as described in Section 5.7.1. | |||
5.6.5.3.2. Requesting Assertions | 5.6.6. Requesting Assertions | |||
In order to request an assertion, the PeerConnection sends a "SIGN" | The input to identity assertion is the JSON-encoded object described | |||
message. Aside from the mandatory fields, this message has a | in Section 5.6.4 that contains the set of certificate fingerprints | |||
"message" field containing a string. The string contains a JSON- | the browser intends to use. This string is treated as opaque from | |||
encoded object containing certificate fingerprints but are treated as | the perspective of the IdP. | |||
opaque from the perspective of the IdP. | ||||
An application can optionally provide a user identifier when | 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 | specifying an IdP. This value is a hint that the IdP can use to | |||
select amongst multiple identities, or to avoid providing assertions | select amongst multiple identities, or to avoid providing assertions | |||
for unwanted identities. The user identifier hint is passed to the | for unwanted identities. The "username" is a string that has no | |||
IdP in a "username" field alongside the "message". The "username" is | meaning to any entity other than the IdP, it can contain any data the | |||
a string that has no meaning to any entity other than the IdP, it can | IdP needs in order to correctly generate an assertion. | |||
contain any data the IdP needs in order to correctly generate an | ||||
assertion. | ||||
A successful response to a "SIGN" message contains a "message" field | An identity assertion that is successfully provided by the IdP | |||
which is a JavaScript dictionary consisting of two fields: | 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. | ||||
idp: A dictionary containing the domain name of the provider and the | ||||
protocol string. | ||||
assertion: An opaque value containing the assertion itself. This is | assertion: An opaque value containing the assertion itself. This is | |||
only interpretable by the IdP or its proxy. | only interpretable by the identified IdP or the IdP code running | |||
in the client. | ||||
Figure 6 shows an example transaction, with the message "abcde..." | Figure 5 shows an example assertion formatted as JSON. In this case, | |||
(remember, the messages are opaque at this layer) being signed and | the message has presumably been digitally signed/MACed in some way | |||
bound to identity "ekr@example.org". In this case, the message has | that the IdP can later verify it, but this is an implementation | |||
presumably been digitally signed/MACed in some way that the IdP can | detail and out of scope of this document. Line breaks are inserted | |||
later verify it, but this is an implementation detail and out of | solely for readability. | |||
scope of this document. Line breaks are inserted solely for | ||||
readability. | ||||
PeerConnection -> IdP proxy: | { | |||
{ | "idp":{ | |||
"type": "SIGN", | "domain": "example.org", | |||
"id": "1", | "protocol": "bogus" | |||
"origin": "https://calling-service.example.com/", | }, | |||
"message": "abcdefghijklmnopqrstuvwyz", | "assertion": "{\"identity\":\"bob@example.org\", | |||
"username": "bob" | \"contents\":\"abcdefghijklmnopqrstuvwyz\", | |||
} | \"signature\":\"010203040506\"}" | |||
} | ||||
IdPProxy -> PeerConnection: | Figure 5: Example assertion | |||
{ | ||||
"type": "SUCCESS", | ||||
"id": "1", | ||||
"message": { | ||||
"idp":{ | ||||
"domain": "example.org", | ||||
"protocol": "bogus" | ||||
}, | ||||
"assertion": "{\"identity\":\"bob@example.org\", | ||||
\"contents\":\"abcdefghijklmnopqrstuvwyz\", | ||||
\"signature\":\"010203040506\"}" | ||||
} | ||||
} | ||||
Figure 6: Example assertion request | ||||
The "message" structure is serialized into JSON, base64-encoded | For use in signaling, the assertion is serialized into JSON, | |||
[RFC4648], and placed in an "a=identity" attribute. | base64-encoded [RFC4648], and used as the value of the "a=identity" | |||
attribute. | ||||
5.6.5.3.3. Managing User Login | 5.6.7. Managing User Login | |||
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 users | the user's identity. It is common practice to authenticate users | |||
(using passwords or multi-factor authentication), then use Cookies | (using passwords or multi-factor authentication), then use Cookies | |||
[RFC6265] or HTTP authentication [RFC2617] for subsequent exchanges. | [RFC6265] or HTTP authentication [RFC2617] for subsequent exchanges. | |||
The IdP proxy is able to access cookies, HTTP authentication or other | The IdP proxy is able to access cookies, HTTP authentication or other | |||
persistent session data because it operates in the security context | persistent session data because it operates in the security context | |||
of the IdP origin. Therefore, if a user is logged in, the IdP could | of the IdP origin. Therefore, if a user is logged in, the IdP could | |||
have all the information needed to generate an assertion. | have all the information needed to generate an assertion. | |||
An IdP proxy is unable to generate an assertion if the user is not | 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 | logged in, or the IdP wants to interact with the user to acquire more | |||
information before generating the assertion. If the IdP wants to | information before generating the assertion. If the IdP wants to | |||
interact with the user before generating an assertion, the IdP proxy | interact with the user before generating an assertion, the IdP proxy | |||
can respond with a "LOGINNEEDED" message. | can fail to generate an assertion and instead indicate a URL where | |||
login should proceed. | ||||
IdPProxy -> PeerConnection: | ||||
{ | ||||
"type": "LOGINNEEDED", | ||||
"id": "1", | ||||
"error": "...a message explaining the reason for failure...", | ||||
"loginUrl": "https://example.org/login?context=e982606f4fd5" | ||||
} | ||||
Figure 7: User interaction needed response | ||||
The "loginUrl" field of the "LOGINNEEDED" response contains a URL. | ||||
The PeerConnection provides an error event (or similar) to the | ||||
calling site that includes this URL. | ||||
A calling site is then able to load the provided URL in an IFRAME in | ||||
order to trigger the required user interactions. Once any user | ||||
interactions are complete, the IFRAME MUST send a postMessage | ||||
[WebMessaging] to its containing window indicating completion. Any | ||||
message is sufficient for this purpose, the "source" parameter | ||||
identifies the originating IFRAME. | ||||
In all other respects, "LOGINNEEDED" can be treated as an "ERROR" | The application can then load the provided URL to enable the user to | |||
message. | enter credentials. The communication between the application and the | |||
IdP is described in [webrtc-api]. | ||||
5.6.5.4. Verifying Assertions | 5.7. Verifying Assertions | |||
In order to verify an assertion, an RP sends a "VERIFY" message to | The input to identity validation is the assertion string taken from a | |||
the IdP proxy containing the assertion supplied by the AP in the | decoded a=identity attribute. | |||
"message" field. | ||||
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 servers. | protocol, the proxy might contact the IdP server or other servers. | |||
For instance, an OAuth-based protocol will likely require using the | For instance, an OAuth-based protocol will likely require using the | |||
IdP as an oracle, whereas with BrowserID the IdP proxy can likely | IdP as an oracle, whereas with a signature-based scheme might be able | |||
verify the signature on the assertion without contacting the IdP, | to verify the assertion without contacting the IdP, provided that it | |||
provided that it has cached the IdP's public key. | has cached the relevant public key. | |||
Regardless of the mechanism, if verification succeeds, a successful | Regardless of the mechanism, if verification succeeds, a successful | |||
response from the IdP proxy MUST contain a message field consisting | response from the IdP proxy consists of the following information: | |||
of a object with the following fields: | ||||
identity: The identity of the AP from the IdP's perspective. | identity: The identity of the AP from the IdP's perspective. | |||
Details of this are provided in Section 5.6.5.4.1. | Details of this are provided in Section 5.7.1. | |||
contents: The original unmodified string provided by the AP in the | ||||
original SIGN request. | ||||
Figure 8 shows an example transaction. Line breaks are inserted | contents: The original unmodified string provided by the AP as input | |||
solely for readability. | to the assertion generation process. | |||
PeerConnection -> IdP Proxy: | Figure 6 shows an example response formatted as JSON for illustrative | |||
{ | purposes. | |||
"type": "VERIFY", | ||||
"id": 2, | ||||
"origin": "https://calling-service.example.com/", | ||||
"message": "{\"identity\":\"bob@example.org\", | ||||
\"contents\":\"abcdefghijklmnopqrstuvwyz\", | ||||
\"signature\":\"010203040506\"}" | ||||
} | ||||
IdP Proxy -> PeerConnection: | { | |||
{ | "identity": "bob@example.org", | |||
"type": "SUCCESS", | "contents": "{\"fingerprint\":[ ... ]}" | |||
"id": 2, | } | |||
"message": { | ||||
"identity": "bob@example.org", | ||||
"contents": "abcdefghijklmnopqrstuvwyz" | ||||
} | ||||
} | ||||
Figure 8: Example verification request | Figure 6: Example verification result | |||
5.6.5.4.1. Identity Formats | 5.7.1. Identity Formats | |||
Identities passed from the IdP proxy to the PeerConnection are passed | The identity provided from the IdP to the RP browser MUST consist of | |||
in the "identity" field. This field MUST consist of a string | a string representing the user's identity. This string is in the | |||
representing the user's identity. This string is in the form | form "<user>@<domain>", where "user" consists of any character except | |||
"<user>@<domain>", where "user" consists of any character except '@', | '@', and domain is an internationalized domain name [RFC5890]. | |||
and domain is an internationalized domain name [RFC5890]. | ||||
The PeerConnection API MUST check this string as follows: | The PeerConnection API MUST check this string as follows: | |||
1. If the domain portion of the string is equal to the domain name | 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 | of the IdP proxy, then the assertion is valid, as the IdP is | |||
authoritative for this domain. Comparison of domain names is | authoritative for this domain. Comparison of domain names is | |||
done using the label equivalence rule defined in Section 2.3.2.4 | done using the label equivalence rule defined in Section 2.3.2.4 | |||
of [RFC5890]. | of [RFC5890]. | |||
2. If the domain portion of the string is not equal to the domain | 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 | name of the IdP proxy, then the PeerConnection object MUST reject | |||
the assertion unless: | the assertion unless: | |||
1. the IdP domain is trusted as an acceptable third-party IdP; | 1. the IdP domain is trusted as an acceptable third-party IdP; | |||
and | and | |||
2. local policy is configured to trust this IdP domain for the | 2. local policy is configured to trust this IdP domain for the | |||
RHS of the identity string. | domain portion of the identity string. | |||
Sites which have identities that do not fit into the RFC822 style | Sites that have identities that do not fit into the RFC822 style (for | |||
(for instance, identifiers that are simple numeric values, or values | instance, identifiers that are simple numeric values, or values that | |||
that contain '@' characters) SHOULD convert them to this form by | contain '@' characters) SHOULD convert them to this form by escaping | |||
escaping illegal characters and appending their IdP domain (e.g., | illegal characters and appending their IdP domain (e.g., | |||
user%40133@identity.example.com), thus ensuring that they are | user%40133@identity.example.com), thus ensuring that they are | |||
authoritative for the identity. | authoritative for the identity. | |||
6. Security Considerations | 6. Security Considerations | |||
Much of the security analysis of this problem is contained in | Much of the security analysis of this problem is contained in | |||
[I-D.ietf-rtcweb-security] or in the discussion of the particular | [I-D.ietf-rtcweb-security] or in the discussion of the particular | |||
issues above. In order to avoid repetition, this section focuses on | issues above. In order to avoid repetition, this section focuses on | |||
(a) residual threats that are not addressed by this document and (b) | (a) residual threats that are not addressed by this document and (b) | |||
threats produced by failure/misbehavior of one of the components in | threats produced by failure/misbehavior of one of the components in | |||
skipping to change at page 32, line 36 | skipping to change at page 29, line 46 | |||
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 MUST NOT be allowed to have direct access to---or perform | |||
computations with---DTLS keys. For instance, if content JS were able | computations with---DTLS keys. For instance, if content JS were able | |||
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 a | then use that assertion plus a signature by the key to authenticate a | |||
call protected under an ephemeral DH key controlled by the content | call protected under an ephemeral DH key controlled 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. [webcrypto]. The JS must also not be allowed | with the WebCrypto API. [webcrypto]. The JS must also not be | |||
to perform operations that would be valid for a DTLS endpoint. By | allowed to perform operations that would be valid for a DTLS | |||
far the safest approach is simply to deny the ability to perform any | endpoint. By far the safest approach is simply to deny the ability | |||
operations that depend on secret information associated with the key. | to perform any operations that depend on secret information | |||
Operations that depend on public information, such as exporting the | associated with the key. Operations that depend on public | |||
public key are of course safe. | information, such as exporting the public key are of course safe. | |||
6.2. Privacy | 6.2. Privacy | |||
The requirements in this document are intended to allow: | The requirements in this document are intended to allow: | |||
o Users to participate in calls without revealing their location. | o Users to participate in calls without revealing their location. | |||
o Potential callees to avoid revealing their location and even | o 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. | |||
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 ICE. | terms of using TURN relays and, in the latter case, delaying ICE. | |||
Sites SHOULD make users aware of these tradeoffs. | Sites SHOULD make users aware of these tradeoffs. | |||
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 users | |||
status and (absent the use of a technology like Tor) their IP | status and (absent the use of a technology like Tor) their IP | |||
skipping to change at page 33, line 34 | skipping to change at page 30, line 45 | |||
6.3. Denial of Service | 6.3. Denial of Service | |||
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 attacks in which an attacker uses clients | |||
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. | |||
Consider the case of a call center which accepts calls via RTCWeb. | Consider the case of a call center which accepts calls via WebRTC. | |||
An attacker proxies the call center's front-end and arranges for | An attacker proxies the call center's front-end and arranges for | |||
multiple clients to initiate calls to the call center. Note that | multiple clients to initiate calls to the call center. Note that | |||
this requires user consent in many cases but because the data channel | this requires user consent in many cases but because the data channel | |||
does not need consent, he can use that directly. Since ICE will | does not need consent, he can use that directly. Since ICE will | |||
complete, browsers can then be induced to send large amounts of data | 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. | to the victim call center if it supports the data channel at all. | |||
Preventing this attack requires that automated WebRTC implementations | Preventing this attack requires that automated WebRTC implementations | |||
implement sensible flow control and have the ability to triage out | implement sensible flow control and have the ability to triage out | |||
(i.e., stop responding to ICE probes on) calls which are behaving | (i.e., stop responding to ICE probes on) calls which are behaving | |||
badly, and especially to be prepared to remotely throttle the data | badly, and especially to be prepared to remotely throttle the data | |||
skipping to change at page 34, line 45 | skipping to change at page 32, line 8 | |||
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. | |||
6.4.1. PeerConnection Origin Check | 6.4.1. PeerConnection Origin Check | |||
Fundamentally, the IdP proxy is just a piece of HTML and JS loaded by | Fundamentally, the IdP proxy is just a piece of HTML and JS loaded by | |||
the browser, so nothing stops a Web attacker o from creating their | the browser, so nothing stops a Web attacker from creating their own | |||
own IFRAME, loading the IdP proxy HTML/JS, and requesting a | IFRAME, loading the IdP proxy HTML/JS, and requesting a signature. | |||
signature. In order to prevent this attack, we require that all | In order to prevent this attack, we require that all signatures be | |||
signatures be tied to a specific origin ("rtcweb://...") which cannot | tied to a specific origin ("rtcweb://...") which cannot be produced | |||
be produced by content JavaScript. Thus, while an attacker can | by content JavaScript. Thus, while an attacker can instantiate the | |||
instantiate the IdP proxy, they cannot send messages from an | IdP proxy, they cannot send messages from an appropriate origin and | |||
appropriate origin and so cannot create acceptable assertions. I.e., | so cannot create acceptable assertions. I.e., the assertion request | |||
the assertion request must have come from the browser. This origin | must have come from the browser. This origin check is enforced on | |||
check is enforced on the relying party side, not on the | the relying party side, not on the authenticating party side. The | |||
authenticating party side. The reason for this is to take the burden | reason for this is to take the burden of knowing which origins are | |||
of knowing which origins are valid off of the IdP, thus making this | valid off of the IdP, thus making this mechanism extensible to other | |||
mechanism extensible to other applications besides WebRTC. The IdP | applications besides WebRTC. The IdP simply needs to gather the | |||
simply needs to gather the origin information (from the posted | origin information (from the posted message) and attach it to the | |||
message) and attach it to the assertion. | assertion. | |||
Note that although this origin check is enforced on the RP side and | Note that although this origin check is enforced on the RP side and | |||
not at the IdP, it is absolutely imperative that it be done. The | not at the IdP, it is absolutely imperative that it be done. The | |||
mechanisms in this document rely on the browser enforcing access | mechanisms in this document rely on the browser enforcing access | |||
restrictions on the DTLS keys and assertion requests which do not | restrictions on the DTLS keys and assertion requests which do not | |||
come with the right origin may be from content JS rather than from | come with the right origin may be from content JS rather than from | |||
browsers, and therefore those access restrictions cannot be assumed. | browsers, and therefore those access restrictions cannot be assumed. | |||
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 the | entity with access to the user's authentication data) attests to the | |||
request and hence to the fingerprint. It does not demonstrate that | request and hence to the fingerprint. It does not demonstrate that | |||
the browser has access to the associated private key. However, | the browser has access to the associated private key. However, | |||
attaching one's identity to a key that the user does not control does | attaching one's identity to a key that the user does not control does | |||
not appear to provide substantial leverage to an attacker, so a proof | not appear to provide substantial leverage to an attacker, so a proof | |||
of possession is omitted for simplicity. | of possession is omitted for simplicity. | |||
6.4.2. IdP Well-known URI | 6.4.2. IdP Well-known URI | |||
As described in Section 5.6.5.3.1 the IdP proxy HTML/JS landing page | As described in Section 5.6.5 the IdP proxy HTML/JS landing page is | |||
is located at a well-known URI based on the IdP's domain name. This | 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 | 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 (e.g., on one's Facebook wall) from being able to impersonate the | |||
IdP. | IdP. | |||
6.4.3. Privacy of IdP-generated identities and the hosting site | 6.4.3. Privacy of IdP-generated identities and the hosting site | |||
Depending on the structure of the IdP's assertions, the calling 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 | 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 | 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 | the site via the IdP in any case, for instance when the user has | |||
skipping to change at page 36, line 46 | skipping to change at page 34, line 10 | |||
reasons. Any IdP which uses cookies to persist logins will be broken | 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 | by third-party cookie blocking. One option is to accept this as a | |||
limitation; another is to have the PeerConnection object disable | limitation; another is to have the PeerConnection object disable | |||
third-party cookie blocking for the IdP proxy. | third-party cookie blocking for the IdP proxy. | |||
7. IANA Considerations | 7. IANA Considerations | |||
This specification defines the "identity" SDP attribute per the | This specification defines the "identity" SDP attribute per the | |||
procedures of Section 8.2.4 of [RFC4566]. The required information | procedures of Section 8.2.4 of [RFC4566]. The required information | |||
for the registration is included here: | for the registration is included here: | |||
Contact Name: Eric Rescorla (ekr@rftm.com) | Contact Name: Eric Rescorla (ekr@rftm.com) | |||
Attribute Name: identity | Attribute Name: identity | |||
Long Form: identity | Long Form: identity | |||
Type of Attribute: session-level | Type of Attribute: session-level | |||
Charset Considerations: This attribute is not subject to the charset | Charset Considerations: This attribute is not subject to the charset | |||
attribute. | attribute. | |||
Purpose: This attribute carries an identity assertion, binding an | Purpose: This attribute carries an identity assertion, binding an | |||
identity to the transport-level security session. | identity to the transport-level security session. | |||
Appropriate Values: See Section 5.6.4.3 of RFCXXXX [[Editor Note: | ||||
Appropriate Values: See Section 5.6.4.2 of RFCXXXX [[Editor Note: | ||||
This document. | This document. | |||
8. Acknowledgements | 8. Acknowledgements | |||
Bernard Aboba, Harald Alvestrand, Richard Barnes, Dan Druta, Cullen | Bernard Aboba, Harald Alvestrand, Richard Barnes, Dan Druta, Cullen | |||
Jennings, Hadriel Kaplan, Matthew Kaufman, Jim McEachern, Martin | Jennings, Hadriel Kaplan, Matthew Kaufman, Jim McEachern, Martin | |||
Thomson, Magnus Westerland. Matthew Kaufman provided the UI material | Thomson, Magnus Westerland. Matthew Kaufman provided the UI material | |||
in Section 5.5. | in Section 5.5. | |||
9. Changes | 9. Changes | |||
9.1. Changes since -06 | 9.1. Changes since -10 | |||
Update cipher suite profiles. | ||||
Rework IdP interaction based on implementation experience in Firefox. | ||||
9.2. Changes since -06 | ||||
Replaced RTCWEB and RTC-Web with WebRTC, except when referring to the | Replaced RTCWEB and RTC-Web with WebRTC, except when referring to the | |||
IETF WG | IETF WG | |||
Forbade use in mixed content as discussed in Orlando. | Forbade use in mixed content as discussed in Orlando. | |||
Added a requirement to surface NULL ciphers to the top-level. | Added a requirement to surface NULL ciphers to the top-level. | |||
Tried to clarify SRTP versus DTLS-SRTP. | Tried to clarify SRTP versus DTLS-SRTP. | |||
Added a section on screen sharing permissions. | Added a section on screen sharing permissions. | |||
Assorted editorial work. | Assorted editorial work. | |||
9.2. Changes since -05 | 9.3. Changes since -05 | |||
The following changes have been made since the -05 draft. | The following changes have been made since the -05 draft. | |||
o Response to comments from Richard Barnes | o Response to comments from Richard Barnes | |||
o More explanation of the IdP security properties and the federation | o More explanation of the IdP security properties and the federation | |||
use case. | use case. | |||
o Editorial cleanup. | o Editorial cleanup. | |||
9.3. Changes since -03 | 9.4. Changes since -03 | |||
Version -04 was a version control mistake. Please ignore. | Version -04 was a version control mistake. Please ignore. | |||
The following changes have been made since the -04 draft. | The following changes have been made since the -04 draft. | |||
o Move origin check from IdP to RP per discussion in YVR. | o Move origin check from IdP to RP per discussion in YVR. | |||
o Clarified treatment of X.509-level identities. | o Clarified treatment of X.509-level identities. | |||
o Editorial cleanup. | o Editorial cleanup. | |||
9.4. Changes since -03 | 9.5. Changes since -03 | |||
9.5. Changes since -02 | 9.6. Changes since -02 | |||
The following changes have been made since the -02 draft. | The following changes have been made since the -02 draft. | |||
o Forbid persistent HTTP permissions. | o Forbid persistent HTTP permissions. | |||
o Clarified the text in S 5.4 to clearly refer to requirements on | o Clarified the text in S 5.4 to clearly refer to requirements on | |||
the API to provide functionality to the site. | the API to provide functionality to the site. | |||
o Fold in the IETF portion of draft-rescorla-rtcweb-generic-idp | o Fold in the IETF portion of draft-rescorla-rtcweb-generic-idp | |||
o Retarget the continuing consent section to assume Binding Requests | o Retarget the continuing consent section to assume Binding Requests | |||
o Added some more privacy and linkage text in various places. | o Added some more privacy and linkage text in various places. | |||
o Editorial improvements | o Editorial improvements | |||
10. References | 10. References | |||
10.1. Normative References | 10.1. Normative References | |||
[I-D.ietf-avtcore-6222bis] | [I-D.ietf-avtcore-6222bis] | |||
Begen, A., Perkins, C., Wing, D., and E. Rescorla, | Begen, A., Perkins, C., Wing, D., and E. Rescorla, | |||
"Guidelines for Choosing RTP Control Protocol (RTCP) | "Guidelines for Choosing RTP Control Protocol (RTCP) | |||
Canonical Names (CNAMEs)", draft-ietf-avtcore-6222bis-06 | Canonical Names (CNAMEs)", draft-ietf-avtcore-6222bis-06 | |||
skipping to change at page 38, line 38 | skipping to change at page 36, line 18 | |||
[I-D.ietf-avtcore-6222bis] | [I-D.ietf-avtcore-6222bis] | |||
Begen, A., Perkins, C., Wing, D., and E. Rescorla, | Begen, A., Perkins, C., Wing, D., and E. Rescorla, | |||
"Guidelines for Choosing RTP Control Protocol (RTCP) | "Guidelines for Choosing RTP Control Protocol (RTCP) | |||
Canonical Names (CNAMEs)", draft-ietf-avtcore-6222bis-06 | Canonical Names (CNAMEs)", draft-ietf-avtcore-6222bis-06 | |||
(work in progress), July 2013. | (work in progress), July 2013. | |||
[I-D.ietf-rtcweb-rtp-usage] | [I-D.ietf-rtcweb-rtp-usage] | |||
Perkins, C., Westerlund, M., and J. Ott, "Web Real-Time | Perkins, C., Westerlund, M., and J. Ott, "Web Real-Time | |||
Communication (WebRTC): Media Transport and Use of RTP", | Communication (WebRTC): Media Transport and Use of RTP", | |||
draft-ietf-rtcweb-rtp-usage-15 (work in progress), | draft-ietf-rtcweb-rtp-usage-22 (work in progress), | |||
May 2014. | February 2015. | |||
[I-D.ietf-rtcweb-security] | [I-D.ietf-rtcweb-security] | |||
Rescorla, E., "Security Considerations for WebRTC", | Rescorla, E., "Security Considerations for WebRTC", draft- | |||
draft-ietf-rtcweb-security-06 (work in progress), | ietf-rtcweb-security-08 (work in progress), February 2015. | |||
January 2014. | ||||
[I-D.ietf-tsvwg-sctp-dtls-encaps] | [I-D.ietf-tsvwg-sctp-dtls-encaps] | |||
Tuexen, M., Stewart, R., Jesup, R., and S. Loreto, "DTLS | Tuexen, M., Stewart, R., Jesup, R., and S. Loreto, "DTLS | |||
Encapsulation of SCTP Packets", | Encapsulation of SCTP Packets", draft-ietf-tsvwg-sctp- | |||
draft-ietf-tsvwg-sctp-dtls-encaps-04 (work in progress), | dtls-encaps-09 (work in progress), January 2015. | |||
May 2014. | ||||
[I-D.muthu-behave-consent-freshness] | [I-D.muthu-behave-consent-freshness] | |||
Perumal, M., Wing, D., R, R., and T. Reddy, "STUN Usage | Perumal, M., Wing, D., R, R., and T. Reddy, "STUN Usage | |||
for Consent Freshness", | for Consent Freshness", draft-muthu-behave-consent- | |||
draft-muthu-behave-consent-freshness-04 (work in | freshness-04 (work in progress), July 2013. | |||
progress), July 2013. | ||||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
[RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, May 2000. | [RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, May 2000. | |||
[RFC3711] Baugher, M., McGrew, D., Naslund, M., Carrara, E., and K. | [RFC3711] Baugher, M., McGrew, D., Naslund, M., Carrara, E., and K. | |||
Norrman, "The Secure Real-time Transport Protocol (SRTP)", | Norrman, "The Secure Real-time Transport Protocol (SRTP)", | |||
RFC 3711, March 2004. | RFC 3711, March 2004. | |||
skipping to change at page 39, line 41 | skipping to change at page 37, line 16 | |||
JavaScript Object Notation (JSON)", RFC 4627, July 2006. | JavaScript Object Notation (JSON)", RFC 4627, July 2006. | |||
[RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data | [RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data | |||
Encodings", RFC 4648, October 2006. | Encodings", RFC 4648, October 2006. | |||
[RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax | [RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax | |||
Specifications: ABNF", STD 68, RFC 5234, January 2008. | Specifications: ABNF", STD 68, RFC 5234, January 2008. | |||
[RFC5245] Rosenberg, J., "Interactive Connectivity Establishment | [RFC5245] Rosenberg, J., "Interactive Connectivity Establishment | |||
(ICE): A Protocol for Network Address Translator (NAT) | (ICE): A Protocol for Network Address Translator (NAT) | |||
Traversal for Offer/Answer Protocols", RFC 5245, | Traversal for Offer/Answer Protocols", RFC 5245, April | |||
April 2010. | 2010. | |||
[RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | |||
(TLS) Protocol Version 1.2", RFC 5246, August 2008. | (TLS) Protocol Version 1.2", RFC 5246, August 2008. | |||
[RFC5763] Fischl, J., Tschofenig, H., and E. Rescorla, "Framework | [RFC5763] Fischl, J., Tschofenig, H., and E. Rescorla, "Framework | |||
for Establishing a Secure Real-time Transport Protocol | for Establishing a Secure Real-time Transport Protocol | |||
(SRTP) Security Context Using Datagram Transport Layer | (SRTP) Security Context Using Datagram Transport Layer | |||
Security (DTLS)", RFC 5763, May 2010. | Security (DTLS)", RFC 5763, May 2010. | |||
[RFC5764] McGrew, D. and E. Rescorla, "Datagram Transport Layer | [RFC5764] McGrew, D. and E. Rescorla, "Datagram Transport Layer | |||
Security (DTLS) Extension to Establish Keys for the Secure | Security (DTLS) Extension to Establish Keys for the Secure | |||
Real-time Transport Protocol (SRTP)", RFC 5764, May 2010. | Real-time Transport Protocol (SRTP)", RFC 5764, May 2010. | |||
[RFC5785] Nottingham, M. and E. Hammer-Lahav, "Defining Well-Known | [RFC5785] Nottingham, M. and E. Hammer-Lahav, "Defining Well-Known | |||
Uniform Resource Identifiers (URIs)", RFC 5785, | Uniform Resource Identifiers (URIs)", RFC 5785, April | |||
April 2010. | 2010. | |||
[RFC5890] Klensin, J., "Internationalized Domain Names for | [RFC5890] Klensin, J., "Internationalized Domain Names for | |||
Applications (IDNA): Definitions and Document Framework", | Applications (IDNA): Definitions and Document Framework", | |||
RFC 5890, August 2010. | RFC 5890, August 2010. | |||
[RFC6454] Barth, A., "The Web Origin Concept", RFC 6454, | [RFC6454] Barth, A., "The Web Origin Concept", RFC 6454, December | |||
December 2011. | 2011. | |||
[WebMessaging] | [WebMessaging] | |||
Hickson, "HTML5 Web Messaging", May 2012, | Hickson, , "HTML5 Web Messaging", May 2012, | |||
<http://www.w3.org/TR/2012/CR-webmessaging-20120501/>. | <http://www.w3.org/TR/2012/CR-webmessaging-20120501/>. | |||
[webcrypto] | [webcrypto] | |||
Dahl, Sleevi, "Web Cryptography API", June 2013. | Dahl, Sleevi, , "Web Cryptography API", June 2013. | |||
Available at http://www.w3.org/TR/WebCryptoAPI/ | Available at http://www.w3.org/TR/WebCryptoAPI/ | |||
[webrtc-api] | [webrtc-api] | |||
Bergkvist, Burnett, Jennings, Narayanan, "WebRTC 1.0: | Bergkvist, Burnett, Jennings, Narayanan, , "WebRTC 1.0: | |||
Real-time Communication Between Browsers", October 2011. | Real-time Communication Between Browsers", October 2011. | |||
Available at | Available at http://dev.w3.org/2011/webrtc/editor/ | |||
http://dev.w3.org/2011/webrtc/editor/webrtc.html | webrtc.html | |||
10.2. Informative References | 10.2. Informative References | |||
[I-D.ietf-rtcweb-jsep] | [I-D.ietf-rtcweb-jsep] | |||
Uberti, J. and C. Jennings, "Javascript Session | Uberti, J., Jennings, C., and E. Rescorla, "Javascript | |||
Establishment Protocol", draft-ietf-rtcweb-jsep-06 (work | Session Establishment Protocol", draft-ietf-rtcweb-jsep-08 | |||
in progress), February 2014. | (work in progress), October 2014. | |||
[RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., | [RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., | |||
Leach, P., Luotonen, A., and L. Stewart, "HTTP | Leach, P., Luotonen, A., and L. Stewart, "HTTP | |||
Authentication: Basic and Digest Access Authentication", | Authentication: Basic and Digest Access Authentication", | |||
RFC 2617, June 1999. | RFC 2617, June 1999. | |||
[RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, | [RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, | |||
A., Peterson, J., Sparks, R., Handley, M., and E. | A., Peterson, J., Sparks, R., Handley, M., and E. | |||
Schooler, "SIP: Session Initiation Protocol", RFC 3261, | Schooler, "SIP: Session Initiation Protocol", RFC 3261, | |||
June 2002. | June 2002. | |||
[RFC5705] Rescorla, E., "Keying Material Exporters for Transport | [RFC5705] Rescorla, E., "Keying Material Exporters for Transport | |||
Layer Security (TLS)", RFC 5705, March 2010. | Layer Security (TLS)", RFC 5705, March 2010. | |||
[RFC6265] Barth, A., "HTTP State Management Mechanism", RFC 6265, | [RFC6265] Barth, A., "HTTP State Management Mechanism", RFC 6265, | |||
April 2011. | April 2011. | |||
[RFC6455] Fette, I. and A. Melnikov, "The WebSocket Protocol", | [RFC6455] Fette, I. and A. Melnikov, "The WebSocket Protocol", RFC | |||
RFC 6455, December 2011. | 6455, December 2011. | |||
[XmlHttpRequest] | [XmlHttpRequest] | |||
van Kesteren, A., "XMLHttpRequest Level 2", January 2012. | van Kesteren, A., "XMLHttpRequest Level 2", January 2012. | |||
Appendix A. Example IdP Bindings to Specific Protocols | Appendix A. Example IdP Bindings to Specific Protocols | |||
[[TODO: These still need some cleanup.]] | [[TODO: These still need some cleanup.]] | |||
This section provides some examples of how the mechanisms described | This section provides some examples of how the mechanisms described | |||
in this document could be used with existing authentication protocols | in this document could be used with existing authentication protocols | |||
such as BrowserID or OAuth. Note that this does not require browser- | such as BrowserID or OAuth. Note that this does not require browser- | |||
level support for either protocol. Rather, the protocols can be fit | level support for either protocol. Rather, the protocols can be fit | |||
into the generic framework. (Though BrowserID in particular works | into the generic framework. (Though BrowserID in particular works | |||
better with some client side support). | better with some client side support). | |||
A.1. BrowserID | A.1. BrowserID | |||
skipping to change at page 45, line 35 | skipping to change at page 43, line 35 | |||
IdP. | IdP. | |||
Author's Address | Author's Address | |||
Eric Rescorla | Eric Rescorla | |||
RTFM, Inc. | RTFM, Inc. | |||
2064 Edgewood Drive | 2064 Edgewood Drive | |||
Palo Alto, CA 94303 | Palo Alto, CA 94303 | |||
USA | USA | |||
Phone: +1 650 678 2350 | Phone: +1 650 678 2350 | |||
Email: ekr@rtfm.com | Email: ekr@rtfm.com | |||
End of changes. 139 change blocks. | ||||
430 lines changed or deleted | 346 lines changed or added | |||
This html diff was produced by rfcdiff 1.42. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |