FYI, I'll be on vacation for the next week, so I won't be able to actually
think about this, but thanks for the detailed response.

On Thu, Oct 3, 2024 at 11:37 AM Ari Chivukula <aric...@chromium.org> wrote:

> Divided Jeffrey's email to separate questions verbatim (italic font). Our
> responses are below the question (bold font).
>
>
> 1. https://github.com/WICG/trust-token-api/issues/106 says that adtech
> services want to redeem tokens without needing to get changes made on the
> top-level site. The request seems to say that it's the adtech origin that's
> directly called from the top-level site, but I think this change would
> allow redemptions anywhere down the tree of ad-related frames?
>
> Yes, this change would allow redemptions anywhere down the tree of frames
> regardless of origin unless explicit Permissions-Policies/allow-attributes
> block them (7).
>
>   * Is there any risk of an ad redeeming tokens to interfere with other
> ads?
> https://github.com/WICG/trust-token-api?tab=readme-ov-file#private-state-token-exhaustion
> says only 1 token is redeemed per top-level page visit, which prevents the
> ad from deliberately using up the user's tokens, but it could still race to
> prevent any other ad from knowing to trust the user.
>
> Yes, an ad redeeming a token may interfere with other origins'
> capabilities, as that redemption operation associates the issuer with the
> top level origin. And this counts towards the issuer limit. At most 2
> issuers per top level origin is allowed. See step 4 in algorithm (1).
> Associating an issuer with the top level origin occupies a slot. Once an ad
> redeems a token, only one issuer slot is left for all others in the same
> top level page.
>
> Following a successful redemption, a redemption record (3) is stored, step
> 14 in algorithm (2). Redemption records are keyed by (issuer, toplevel)
> origin pair. Any other origin in the page trying to redeem a token from the
> same issuer will get this cached redemption record.
>
> Put another way, ads can’t ‘use up’ tokens that other ads on the page want
> to redeem, because those other ads would just re-use the same redemption
> record.
>
> The explainer text is not in the best shape, created issue #307
> <https://github.com/WICG/trust-token-api/issues/307> to fix this.
>
> 2. This intent also expands which origins can _issue_ tokens, but I don't
> see the justification for that in the issue. What circumstances need that?
>
> Yes, you are correct that the particular request cited here is pertaining
> to redemption operations. However, we are aware that many anti-fraud
> vendors are only embedded in 3p contexts, without necessarily having script
> access on the top-level site. Vendors who currently rely on third-party
> cookies to establish and convey trust will need commensurate permissions on
> both redemption and issuance sides.
>
> There's some privacy impact from using this API. The tight default
> permission policy meant that top-level sites had to explicitly ask to
> expose their users to that privacy impact. Without it, shouldn't we expect
> lots of embedded resources to try to learn whatever information they can
> using this API? Why is that extra risk good for users overall?
>
> We see this is a key tradeoff that many third-party cookie replacement
> APIs have to contend with. Given the widespread reliance on third-party
> cookies, it may not be practical to have anti-fraud vendors to work with
> every publisher/page to update their permission policy for the frames they
> have. Usefulness of the signal depends on its availability.
>
> Further, the extra risk is actually very small: it's not going to affect
> users' privacy if anyone can learn that they've visited 2 particular
> issuers and the 6 bits those issuers want to convey about them. In fact,
> the privacy risk is decreased by allowing 3p issuers to send that
> information, because it limits the inference about which sites a user has
> actively visited.
>
> Note that the information embedded resources can learn are constrained by
> limiting information content stored in a token (4) and limiting the number
> of issuers per page (5). Additionally, PST issuers are expected to register
> on GitHub
> <https://github.com/GoogleChrome/private-tokens/blob/main/PST-Registration.md>
> with some transparency on how they’re using the tokens.
>
> I don't find the "the top-level origin could call hasPrivateToken up to
> twice before any other JavaScript is included" mitigation plausible: folks
> often don't control the order of their Javascript that closely. It seems
> more likely that sites would just explicitly set the permission policy to
> the origins they trust to pick their issuers: is there a reason that's not
> an adequate defense?
>
> Permission policy can certainly be used, but it does not prevent
> third-party scripts embedded on the top-level context from picking their
> own issuers. The hasPrivateToken method overcomes that issue.
>
> For the general case, the JS API method mitigates most cases, but we have
> heard that folks would like a more explicit way of doing this, either as a
> meta tag or header that can be sent by the server since the JS inclusion
> order and complexities with single page sites means that this is a little
> fragile if it's not the earliest executed JS.
>
> While we could add a new meta-tag/header feature to control issuance
> origins and then change the policy to default to *, given the low usage and
> (in our estimation) the low risk of changing the policy default we would
> prefer to pursue this change and follow up if requested by clients.
>
> But then you've still just switched the burden from sites that want to
> delegate use of this API, to sites that need to defend against hostile use
> of the API. Can you share any analysis of why you think attacks will be
> much less likely than uses, or some other reason that it's good for users
> and sites to switch that burden?
>
> While it could be viewed as a “burden switch”, the fundamental privacy
> properties of PSTs mentioned above are such that the vast majority of sites
> shouldn’t have cause to be concerned. For sites that are looking to prevent
> any cross site communication, the permission policy remains available.
> References
>
> 1.
> https://wicg.github.io/trust-token-api/#append-private-state-token-redemption-request-headers
>
> 2. https://wicg.github.io/trust-token-api/#handle-a-redeem-response
>
> 3. https://wicg.github.io/trust-token-api/#redemption-record
>
> 4. https://wicg.github.io/trust-token-api/#limit-encoded-info
>
> 5. https://wicg.github.io/trust-token-api/#per-issuer-limits
>
> 6. https://github.com/WICG/trust-token-api/issues/106
>
> 7.
> https://developer.mozilla.org/en-US/docs/Web/HTTP/Permissions_Policy#allowlists
>
> 8. https://chromestatus.com/metrics/feature/timeline/popularity/3276
>
> ~ Ari Chivukula (Their/There/They're)
>
>
> On Wed, Oct 2, 2024 at 4:51 PM Ari Chivukula <aric...@chromium.org> wrote:
>
>> These are good questions! Sorry for the delay in replying, now that TPAC
>> has passed we should have something soon.
>>
>> ~ Ari Chivukula (Their/There/They're)
>>
>>
>> On Wed, Sep 11, 2024 at 3:52 PM Jeffrey Yasskin <jyass...@chromium.org>
>> wrote:
>>
>>> This Intent makes me realize that my mental model of Private State
>>> Tokens wasn't correct. I'd been thinking of users going to a site that
>>> trusts them, having that site issue some tokens, and then going to another
>>> site which would redeem a token to increase its trust. In both cases, the
>>> sites could rely on third-parties to handle the tokens, but the sites have
>>> intentional relationships with their service providers and so could enable
>>> them in the top-level Permission Policy.
>>>
>>> This Intent implies that something else is going on, maybe multiple
>>> things.
>>>
>>> 1. https://github.com/WICG/trust-token-api/issues/106 says that adtech
>>> services want to redeem tokens without needing to get changes made on the
>>> top-level site. The request seems to say that it's the adtech origin that's
>>> directly called from the top-level site, but I think this change would
>>> allow redemptions anywhere down the tree of ad-related frames?
>>>   * Is there any risk of an ad redeeming tokens to interfere with other
>>> ads?
>>> https://github.com/WICG/trust-token-api?tab=readme-ov-file#private-state-token-exhaustion
>>> says only 1 token is redeemed per top-level page visit, which prevents the
>>> ad from deliberately using up the user's tokens, but it could still race to
>>> prevent any other ad from knowing to trust the user.
>>> 2. This intent also expands which origins can _issue_ tokens, but I
>>> don't see the justification for that in the issue. What circumstances need
>>> that?
>>>
>>> There's some privacy impact from using this API. The tight default
>>> permission policy meant that top-level sites had to explicitly ask to
>>> expose their users to that privacy impact. Without it, shouldn't we expect
>>> lots of embedded resources to try to learn whatever information they can
>>> using this API? Why is that extra risk good for users overall?
>>>
>>> I don't find the "the top-level origin could call hasPrivateToken up to
>>> twice before any other JavaScript is included" mitigation plausible: folks
>>> often don't control the order of their Javascript that closely. It seems
>>> more likely that sites would just explicitly set the permission policy to
>>> the origins they trust to pick their issuers: is there a reason that's not
>>> an adequate defense?
>>>
>>> But then you've still just switched the burden from sites that want to
>>> delegate use of this API, to sites that need to defend against hostile use
>>> of the API. Can you share any analysis of why you think attacks will be
>>> much less likely than uses, or some other reason that it's good for users
>>> and sites to switch that burden?
>>>
>>> Thanks,
>>> Jeffrey
>>>
>>> On Mon, Sep 9, 2024 at 5:58 AM Ari Chivukula <aric...@chromium.org>
>>> wrote:
>>>
>>>> Contact emails
>>>>
>>>> aric...@chromium.org, kaustub...@chromium.org, sval...@chromium.org,
>>>> ayk...@google.com, nick...@google.com
>>>>
>>>> Specification
>>>>
>>>> https://github.com/WICG/trust-token-api/pull/306
>>>>
>>>> Summary
>>>>
>>>> Access to the Private State Token API
>>>> <https://wicg.github.io/trust-token-api/> is gated by Permissions
>>>> Policy <https://www.w3.org/TR/permissions-policy/> features. We
>>>> proposed to update the default allowlist
>>>> <https://w3c.github.io/webappsec-permissions-policy/#policy-controlled-feature-default-allowlist>
>>>> for both `private-state-token-issuance
>>>> <https://wicg.github.io/trust-token-api/#policy-controlled-feature-private-state-token-issuance>`
>>>> and `private-state-token-redemption
>>>> <https://wicg.github.io/trust-token-api/#policy-controlled-feature-private-state-token-redemption>`
>>>> features from self to * (wildcard).
>>>>
>>>>
>>>> Blink component
>>>>
>>>> Blink>StorageAccessAPI
>>>> <https://bugs.chromium.org/p/chromium/issues/list?q=component:Blink%3EStorageAccessAPI>
>>>>
>>>>
>>>> Motivation
>>>>
>>>> The Private State Tokens API <https://wicg.github.io/trust-token-api/>
>>>> has received recurring feedback from developers
>>>> <https://github.com/WICG/trust-token-api/issues/106> that the current
>>>> requirement to have first-party sites opt-in to allow third-parties to
>>>> invoke token issuance and redemption operations is not practical. This is
>>>> especially true for use cases where embeds don’t have first-party script
>>>> access to either execute the operations directly in first-party context, or
>>>> to enable the permission policies on the relevant frames. Current default
>>>> requires every site to update permission policy for iframes that embed
>>>> invalid traffic (IVT) detection scripts.Since scale and coverage are of
>>>> essence for IVT detection that rely on identifying outlier patterns; the
>>>> need for coordination with first-parties places a high cost for successful
>>>> adoption.
>>>>
>>>> TAG review
>>>>
>>>> https://github.com/w3ctag/design-reviews/issues/990
>>>>
>>>> Compatibility
>>>>
>>>> This will not break any existing Private State Token API usage as it
>>>> only increases permissiveness. As usage increases, sites may need to
>>>> consider the need to mitigate issuer exhaustion
>>>> <https://wicg.github.io/trust-token-api/#issuer-exhaustion>.
>>>>
>>>> Competing scripts might race to call hasPrivateToken to ensure their
>>>> preferred issuer enters the issuerAssociations
>>>> <https://wicg.github.io/trust-token-api/#issuerassociations> map
>>>> <https://infra.spec.whatwg.org/#ordered-map> before the issuer of
>>>> others given a limit of two per top-level origin
>>>> <https://html.spec.whatwg.org/multipage/webappapis.html#concept-environment-top-level-origin>.
>>>> To control this process, the top-level origin
>>>> <https://html.spec.whatwg.org/multipage/webappapis.html#concept-environment-top-level-origin>
>>>> could call hasPrivateToken up to twice before any other JavaScript is
>>>> included to ensure their preferred issuers are available.
>>>>
>>>> Few enough websites
>>>> <https://chromestatus.com/metrics/feature/timeline/popularity/3277>
>>>> are using the API that we believe we can broaden the default permission set
>>>> and not open any concerning new avenues of attack.
>>>>
>>>>
>>>> Interoperability
>>>>
>>>> Gecko: Position Requested
>>>> <https://github.com/mozilla/standards-positions/issues/1066>
>>>>
>>>> WebKit: Position Requested
>>>> <https://github.com/WebKit/standards-positions/issues/391>
>>>>
>>>> Web developers: Positive
>>>> <https://github.com/WICG/trust-token-api/issues/106>
>>>>
>>>> Debuggability
>>>>
>>>> Storage written can be examined in devtools.
>>>>
>>>> Is this feature fully tested by web-platform-tests?
>>>>
>>>> Yes
>>>> <https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/web_tests/external/wpt/trust-tokens/>
>>>>
>>>> Tracking bug
>>>>
>>>> https://issues.chromium.org/353738486
>>>>
>>>> Link to entry on the Chrome Platform Status
>>>>
>>>> https://chromestatus.com/feature/5205548434456576
>>>>
>>>> --
>>>> 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/CAGpy5DL2enC2Q1vYBb%2BKA-O3aYW-a3bcvpWnU12NdAvQT6eUcg%40mail.gmail.com
>>>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAGpy5DL2enC2Q1vYBb%2BKA-O3aYW-a3bcvpWnU12NdAvQT6eUcg%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/CANh-dXk9f78PkydAgJOKnfpgD4zYDiOajmETdQs6WARS50cSaw%40mail.gmail.com.

Reply via email to