LGTM to experiment

Thanks for working on this!
I agree with Anne's concerns about fingerprinting risks with shipping this,
as well as +Alex Russell <slightly...@chromium.org>'s concerns
<https://infrequently.org/2022/03/cache-and-prizes/> about the risk of this
devolving into "playing favorites". But these issues would only be worth
solving if we see that the benefits of a single-keyed cache for pervasive
resources are significant. So I think running a short-term experiment to
measure those benefits (while acknowledging and monitoring the risks) is
the right way to go about this.


On Wed, Apr 27, 2022 at 11:30 AM Adam Rice <ri...@chromium.org> wrote:

> What is an 'off-by-default experiment'? Is that a dev trial flag?
>
>
> Just an ordinary experiment, behind a flag which is off-by-default. So
> most users get the default behaviour (no single-keyed cache), except for
> those in the experimental group.
>
> On Wed, 27 Apr 2022 at 00:50, Joe Medley <jmed...@google.com> wrote:
>
>> What is an 'off-by-default experiment'? Is that a dev trial flag?
>> Joe Medley | Technical Writer, Chrome DevRel | jmed...@google.com |
>> 816-678-7195 <(816)%20678-7195>
>> *If an API's not documented it doesn't exist.*
>>
>>
>> On Tue, Apr 26, 2022 at 4:59 AM Daisuke Enomoto <denom...@chromium.org>
>> wrote:
>>
>>> Contact emails
>>>
>>> ri...@chromium.org, nidhij...@chromium.org, denom...@chromium.org
>>>
>>> Explainer
>>>
>>>
>>> https://docs.google.com/document/d/1pvaMg7J5beBXD7trzHJH_MDULc_wRHLx40MFYAmjknE/edit
>>>
>>> Specification
>>>
>>> N/A (because there are no web-exposed changes)
>>>
>>> Summary
>>>
>>> This limited experiment measures how much "pervasive payloads"
>>> contribute to the performance impact of the split HTTP cache in each Chrome
>>> channel over a three-week period. Pervasive payloads are those third-party
>>> payloads included on at least 500 sites and fetched at least 10M times in a
>>> month, based on Chrome's analysis (payload list included below). This
>>> experiment further measures the impact on Core Web Vitals metrics of
>>> restoring pervasive payloads (and only pervasive payloads) to a
>>> single-keyed cache regime. The privacy benefits of the split HTTP cache are
>>> preserved.
>>>
>>> Blink component
>>>
>>> Blink>Network
>>> <https://bugs.chromium.org/p/chromium/issues/list?q=component:Blink%3ENetwork>
>>>
>>> Motivation
>>>
>>> Browsers split HTTP caches based on the top-frame visited origin
>>> (“double-keyed” or "triple-keyed" caching) to prevent sites from tracking
>>> users via a timing attack on a cross-site client cache.
>>>
>>> Chrome’s analysis estimates that split caching results in a 3% increase
>>> in cache misses, i.e. fetches for which a payload exists in the cache of
>>> the user's device, but is unavailable to the page because it was fetched by
>>> the user while loading a page from a different origin. This results in
>>> approximately 4% more total bytes being fetched over the network.
>>>
>>> Our analysis further revealed that many of the redundant fetches caused
>>> by split caching were for common payloads associated with displaying user
>>> content (libraries, fonts, widgets, ads) or common payloads that assist in
>>> operating online businesses (analytics). The delayed arrival of these
>>> common payloads resulted in visible "jank" for users, impacting performance
>>> metrics like LCP <https://web.dev/lcp>, FCP <https://web.dev/fcp> and
>>> CLS <https://web.dev/cls/>. This jank has been associated with negative
>>> effects to online business' engagement and conversion rates. Furthermore,
>>> delayed loads of analytics and ads payloads can result in missed ads
>>> impressions and dropped analytics hits.
>>>
>>> Initial public proposal
>>>
>>> This experiment sends a list to Chrome of 100 <URL, hash> pairs whose
>>> payloads are considered pervasive (the "pervasive payloads list"). During
>>> the three-week experiment period, if Chrome fetches a payload that matches
>>> both the URL and its hash on the pervasive payloads list, it is inserted
>>> into a local single-keyed cache. This payload is then available for use by
>>> Chrome when loading pages on other sites that include the matching URL. All
>>> other fetches for URLs not on the pervasive payloads list are cached
>>> according to the existing split HTTP cache.
>>>
>>> The hash covers the payload body and most response headers, except for
>>> those which change on every response.
>>>
>>> To ensure we do not degrade the privacy profile of any users during this
>>> experiment, only users with third-party cookies currently enabled will be
>>> eligible for the experiment. We will compare the experience of users in
>>> experiment and control arms according to total bytes loaded and page
>>> performance metrics like the Core Web Vitals <https://web.dev/vitals>.
>>>
>>> The pervasive payloads list was produced by crawling the web and
>>> aggregating the most commonly referenced third-party resource URLs included
>>> in HTML content. We then used pseudonymous URL-keyed metrics from Chrome to
>>> estimate the traffic to sites and the number of impressions of third-party
>>> resources. Individually identifiable browsing or search histories were not
>>> used in the creation of the pervasive payload list (for more information
>>> about Chrome's data collection policies and privacy policies, see
>>> google.com/chrome/privacy). The resulting list was further filtered for
>>> any URLs that might contain PII (e.g. URLs with extensive or opaque query
>>> parameters). The list was also manually reviewed to ensure it included only
>>> payloads reasonably expected to be pervasive; the manual review did not
>>> result in any payloads being removed.
>>>
>>> The privacy properties of the split HTTP cache are considered essential
>>> to users and this proposal intends to maintain those properties,
>>> specifically by maintaining split HTTP caching for all payloads not on the
>>> pervasive payloads list.
>>>
>>> API semantics are unchanged. User-facing functionality is unchanged
>>> (though we expect performance to be slightly improved).
>>>
>>> The list of the top 100 Pervasive URLs for use in this experiment is
>>> pending internal reviews and will be shared on this thread upon approval.
>>> Future directions
>>>
>>> This experiment is the first step in a path exploring improved handling
>>> of pervasive payloads in the browser cache. We outline the intended future
>>> functionality here to clarify the intentions behind the current experiment.
>>> The overview below is not complete or final and subsequent parts of the
>>> design and implementation will be presented and discussed in further
>>> Intents to Experiment and Prototype.
>>>
>>> At a high level, a future improvement to the handling of pervasive
>>> payloads may involve:
>>>
>>>
>>>    -
>>>
>>>    Assembling a list of pervasive payloads that meets the following
>>>    criteria:
>>>    -
>>>
>>>       Maintains the privacy of user browsing histories in its creation
>>>       -
>>>
>>>       Fairly represents pervasive payloads as they have been chosen by
>>>       developers on the web, not payloads selected or favored by any 
>>> particular
>>>       library or browser vendor.
>>>       -
>>>
>>>          This experiment will initially use a static list of predefined
>>>          URLs assembled as described in the 'Initial public proposal' 
>>> section above
>>>          -
>>>
>>>          A future implementation will likely dynamically update the
>>>          payloads list on, for example, a weekly cadence.
>>>          -
>>>
>>>    Implementing shared caching for pervasive payloads that meets the
>>>    following criteria:
>>>    -
>>>
>>>       Materially improves load times and responsiveness for web users
>>>       (under study in this experiment)
>>>       -
>>>
>>>       Does not create a new tracking vector based on cache timing
>>>       attacks
>>>       -
>>>
>>>       Does not require users to fetch payloads before the browser knows
>>>       they will need it (i.e. we don't plan to bundle payloads with browser
>>>       installs or updates)
>>>       -
>>>
>>>       Does not increase local storage required by browser installs or
>>>       caches
>>>
>>>
>>> To privately and fairly assemble the list of pervasive payloads, we are
>>> exploring the use of Private Heavy Hitters
>>> <https://www.tensorflow.org/federated/tutorials/private_heavy_hitters>.
>>> To implement a privacy-preserving shared cache after the deprecation of
>>> third-party cookies, we are exploring adding a measure of randomness to the
>>> observed presence or absence of a pervasive payload in the shared cache.
>>>
>>> However, this work is only worthwhile if it results in materially
>>> improved load times for real users. This Intent to Experiment covers only
>>> whether or not we should attempt to measure the performance gains that
>>> might be realized if pervasive payloads were placed in a shared cache,
>>> as one data point among others that will contribute to discussions about
>>> future steps for the proposal.
>>>
>>> TAG review
>>>
>>> None yet.
>>>
>>> TAG review status
>>>
>>> N/A
>>>
>>> Risks
>>> Interoperability and Compatibility
>>>
>>> Chrome's compliance with the relevant standards is unchanged. Caching
>>> behavior differs between browsers so interoperability will not be affected.
>>>
>>> The list of popular payloads is specifically chosen to minimize
>>> compatibility risks.
>>>
>>>
>>> Gecko: No signal
>>>
>>> WebKit: No signal
>>>
>>> Web developers: No signals
>>>
>>> Other signals:
>>>
>>> WebView application risks
>>>
>>> Does this intent deprecate or change behavior of existing APIs, such
>>> that it has potentially high risk for Android WebView-based applications? No
>>>
>>>
>>> Debuggability
>>>
>>> There is no developer-exposed API for this feature, so most DevTools
>>> support is not relevant. It would be useful to indicate whether a resource
>>> was served from the single-keyed cache in the network tab, however this
>>> will not be implemented in the initial experiment.
>>>
>>> Security and privacy
>>>
>>> Single-keyed caching introduces global state shared between different
>>> browsing contexts. A shared cache can introduce information leaks based on
>>> cache probing (https://xsleaks.dev/docs/attacks/cache-probing/),
>>> including XS-Search (https://xsleaks.dev/docs/attacks/xs-search/) in
>>> applications which conditionally load a single-keyed-cache eligible
>>> resource based on authenticated user state. The state of the cache, queried
>>> across different contexts, could also be used as a fingerprint, permitting
>>> user tracking; however, in this case, we believe this does not provide
>>> tracking capabilities beyond those of third-party cookies.
>>>
>>> To protect users during this experiment, we limit the experiment
>>> population to those users with third-party cookies enabled. Recognizing
>>> that third-party cookies will eventually be switched off for most users
>>> <https://privacysandbox.com/>, we are developing protections such as
>>> slightly randomizing cache hit/miss checks, disallowing eviction, or
>>> guaranteeing attempts to read from the cache reliably populate that cache
>>> entry. These protections will be proposed and incorporated before any
>>> future optimizations are launched.
>>>
>>> For the purposes of the current experiment, we will be using the same
>>> implementation of single-keyed caching that Chrome used before the HTTP
>>> cache was partitioned in M77 (
>>> https://chromestatus.com/feature/5730772021411840).
>>>
>>> To summarize, the security and privacy restrictions on this experiment
>>> are as follows:
>>>
>>>
>>>    1.
>>>
>>>    We will exclude users that have third-party cookies disabled.
>>>    2.
>>>
>>>    Only a small percentage of users will be included in the experiment,
>>>    reducing the likelihood and impact of any attacks abusing the 
>>> single-keyed
>>>    cache.
>>>    3.
>>>
>>>    We will strictly limit the duration of the experiment on each
>>>    channel to 3 weeks.
>>>    4.
>>>
>>>    We will only serve pervasive resources from the single-keyed cache.
>>>    5.
>>>
>>>    We can turn off the experiment immediately (independent of browser
>>>    updates) if any other threats appear.
>>>
>>>
>>> Is this feature fully tested by web-platform-tests
>>> <https://chromium.googlesource.com/chromium/src/+/master/docs/testing/web_platform_tests.md>
>>> ?
>>>
>>> This behavior is specific to Chrome and not part of any standard, so it
>>> will not be tested in web platform tests.
>>>
>>> Flag name
>>>
>>> CacheTransparency
>>>
>>> Requires code in //chrome?
>>>
>>> No, but the list of popular payloads and the mechanism for distributing
>>> it to the browser will be Chrome-specific.
>>>
>>> Tracking bug
>>>
>>> https://bugs.chromium.org/p/chromium/issues/detail?id=1309002
>>>
>>> Launch bug
>>>
>>> https://bugs.chromium.org/p/chromium/issues/detail?id=1309353
>>>
>>> Estimated milestones
>>>
>>> M103 for off-by-default experiment
>>>
>>> Link to entry on the Chrome Platform Status
>>>
>>> https://chromestatus.com/feature/5768521127559168
>>>
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "blink-dev" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to blink-dev+unsubscr...@chromium.org.
>>> To view this discussion on the web visit
>>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAA5e6990s-e4aYUnYK5%2BqzQpAyFzJa42y%2B%3D_MAnL19z%3DqemnWg%40mail.gmail.com
>>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAA5e6990s-e4aYUnYK5%2BqzQpAyFzJa42y%2B%3D_MAnL19z%3DqemnWg%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>> --
> You received this message because you are subscribed to the Google Groups
> "blink-dev" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to blink-dev+unsubscr...@chromium.org.
> To view this discussion on the web visit
> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAC_ixdxOWMezzpzGQayKanKuGUe1tfEpBqwLNuq%3DOpuJRwV%2BMQ%40mail.gmail.com
> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAC_ixdxOWMezzpzGQayKanKuGUe1tfEpBqwLNuq%3DOpuJRwV%2BMQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"blink-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to blink-dev+unsubscr...@chromium.org.
To view this discussion on the web visit 
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAL5BFfVjrBb1u%3DsDwJ4cDrkT09QuBKF4wxqO5puu9zXwbrg%2BWw%40mail.gmail.com.

Reply via email to