This document describes the requirements of "private mode" for Web browsers.
This is a proposed Working Draft, whose ultimate disposition is currently indeterminate.
## Introduction Many Web browsers have "privacy" modes (a.k.a. "Incognito" or "Private Browsing"), but their purpose, capabilities and limitations are often misunderstood. In part, this is because privacy on the Web is a complex and constantly changing topic; however, it is does not help that existing privacy modes have subtle differences in their implementation (even between versions of one browser). This confusion has caused some to question whether privacy mode should be included in browsers at all, because a privacy-related feature that is confusing can do much more harm than good. This specification takes an opposing position; the logical thing to do when there are several slightly different and changing versions of a feature that adds value yet causes confusion is to standardize that feature, so as to align implementations (thereby avoiding confusion), as well as to provide a platform for building additional functionality upon. In particular, standardizing a definition of "privacy mode" that is technically specific and reflecting of best practice allows us to "level up" expectations of privacy on the Web; if enough users turn privacy mode on by default, Web sites will be engineered to be usable with these settings, allowing more people to use privacy mode, and so on. Furthermore, having implementations align their behavior when in privacy mode brings more protection against privacy-defeating attacks like fingerprinting. ## What is Privacy Mode? Privacy mode is a distinct signal from the user that they are prioritizing privacy over other factors. This explicitly includes usability and compatibility with existing Web sites, although where feasible, they should not be impacted. A browser in privacy mode will do everything it can to: * Keep communication private from other users on the same machine, including those using the browser afterwards ("Process Privacy"), * Keep communication private from intervening networks and other observers with network access ("Network Privacy"), * Prevent the server from connecting activity to a user's Personally Identifying Information unless explicitly provided ("Server Privacy"), * Fail in situations when someone might be trying to subvert these goals, and * Gain the user's informed consent when it cannot meet these goals. ### Informed Consent In practice, a browser might not be able to meet all of the goals above, or may choose not to provide the implied level of privacy that they offer. An implementation can still achieve conformance by gaining the user's informed consent when some requirements of this specification are not met. Note that informed consent is only acceptable when a requirement explicitly allows it. _Informed consent_ in this specification means that the nature of the potential loss of privacy has been explained to the user before it occurs but in the same browsing session, and the user has taken explicit action to proceed despite this. There are several ways to achieve this, each having different privacy and user experience characteristics. This specification does not mandate any particular approach, but notes a few options: * Modal dialog boxes are the most obvious way to obtain informed consent, but they are often "clicked through" and forgotten. * Explicitly dropping out of private mode when a user chooses to proceed has the benefit of reinforcing the risks to the user, and making them visible beyond the moment the user makes a decision. * It is permissible to inform the user of unaddressed privacy requirements when the browser first enters private mode, upon the assumption that their continued use of private mode constitutes informed consent. * Describing unaddressed requirements in documentation or release notes is not adequate to achieve informed consent. Of course, refusing to violate the requirements of private mode (a.k.a. "hard failure") is the most effective way to assure privacy. I.e., user agents are not required to give the user the option of giving informed consent. ### Trust and Intermediaries TBD
## Process Privacy Maintaining process privacy means assuring that no recoverable information about the user's activity remains on the system once the private browsing session is terminated. Of course, this cannot be guaranteed, since a compromised system might monitor the users' behavior (e.g., using a key logger). However, if a non-hostile environment is assumed, process privacy can be maintained. Browsers in private mode MUST make all state associated with the browsing session unavailable after it terminates. This includes the HTTP cache, AppCache, LocalStorage, history, cookie store, password and form-filling facilities, and similar facilities. Browsers in private mode SHOULD NOT use persistent storage (e.g., disk), and SHOULD avoid having session state "swapped out" to persistent storage when possible. Browsers in private mode MUST NOT log information about the browsing session. ## Network Privacy Maintaining network privacy means assuring that end-to-end encryption is used wherever possible. Since the IP addresses of sites themselves compromise sensitive data, these also need to be obfuscated, although it is recognized that this likely won't be a default configuration for many browsers in private mode (i.e., they'll always need to gain informed consent for this concern). ### TCP/IP Browsers in private mode MUST obfuscate TCP/IP traffic to prevent an attacker with passive access to the network from identifying what Web site(s) are being accessed, or gain the user's informed consent. Practically, this means that the browser needs to use a proxy network like Tor in private browsing mode, or notify the user that it cannot. ### DNS Browsers in private mode MUST encrypt DNS requests to prevent an attacker with passive access to the network from identifying what Web site(s) are being accessed, or gain the user's informed consent. Practically, this means that the browser needs to use some form of DNS encryption, or offload DNS lookups onto a trusted intermediary via an encrypted connection. ### TLS Browsers in private mode MUST NOT allow a certificate failure to be ignored by the user; all failures are considered "hard" in private mode (even if the user has given informed consent). Browsers in private mode MUST negotiate ciphersuites with forward secrecy, and MUST NOT accept other ciphersuites while in private mode, unless the user has given informed consent. Browsers MUST NOT send unencrypted TLS SNI, unless the user has given informed consent. Practically, this means that SNI can only be sent when the connection is already encrypted (e.g., through a proxy). ### HTTP Browsers MUST NOT allow access to a Web site with the http:// URL scheme without the user's informed consent. Browsers MAY automatically probe a corresponding https:// URL to determine its support for HSTS, and redirect to https:// where appropriate. Browsers in private mode MUST use a minimum of HTTP/1.1 for requests, and SHOULD use HTTP/2. Browsers in private mode sending HTTP/1.1 requests SHOULD obfuscate traffic patterns, using techniques like padding (in chunk-extensions or header fields) and segmented requests (using Range requests). ## Server Privacy Maintaining server privacy means limiting its ability to identify the user, through "fingerprinting" the client, or associating the user's behavior on one site with that on another (using a mechanism like cookies). ### HTTP Upon entering private mode, browsers MUST NOT use previously-established HTTP connections. Browsers in private mode MUST emit a User-Agent request header field in all requests. It MUST have the field-value "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.16) Gecko/20080702 Firefox/2.0.0.16". Browsers in private mode MUST emit an Accept-Encoding request header field with the value "gzip". Browsers in private mode MUST NOT emit any of the following request header fields: Accept, Accept-Language, Accept-Charset, If-None-Match, Keep-Alive, UA-Color, UA-Media, UA-Pixels, UA-Resolution, UA-Windowpixels. Other headers SHOULD NOT be emitted unless they are necessary for protocol operation. Browsers in private mode MUST emit request header fields in alphabetic order. #### HTTP/1.1 When using HTTP/1.1, browsers in private mode MUST emit the request-line in the following form: method SP request-uri SP "HTTP/1.1" CLRF When using HTTP/1.1, browsers in private mode MUST emit header fields in the following form: field-name ":" SP field-value CLRF and comma separated field-values MUST all occur in the same header-field, in this form: field-name ":" SP field-value COMMA SP field-value CLRF A typical HTTP/1.1 request from a browser in private mode would thus look like this (long header wrapped for illustrative purposes only): GET /thing HTTP/1.1 Accept-Encoding: gzip Host: www.example.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.16) Gecko/20080702 Firefox/2.0.0.16 ### Cookies Browsers in private mode MUST NOT store or emit "third party" cookies. This document defines these as cookies whose allowed scope does not include the URL of the current navigation context. ### JavaScript APIs Browsers in private mode that support HTML5 canvas MUST always consider the canvas element's bitmap's [origin-clean flag](http://www.whatwg.org/specs/web-apps/current-work/multipage/scripting.html#concept-canvas-origin-clean) to be 'false', unless the user provides informed consent. ### User eXperience Browsers in private mode SHOULD disable extensions that have unknown security properties. Browsers in private mode MUST NOT make requests that are not directly attributable to user behavior (i.e., loading a page and its assets, along with requests caused by scripts loaded by the page). In particular, additional "services" such as spell check, translation, malware prevention, etc. ought not be enabled, unless their use does not leak information about user behavior.