That makes sense, thank you for the answers.
LGTM2
On Wednesday, June 25, 2025 at 9:42:19 AM UTC-4 Slobodan Pejic wrote:
Hi Vladimir,
Thanks for the questions:
1. How *do* you avoid replay attacks in this case? If a
device is uniquely identified by a key that is only
challenged by 2FA (like SMS) on the first try, what
prevents a person-in-the-middle from learning this key
and using it later?
The clientDataJSON
<https://www.w3.org/TR/webauthn-2/#dom-authenticatorresponse-clientdatajson>
contains
a challenge
<https://www.w3.org/TR/webauthn-2/#dom-collectedclientdata-challenge>
field: WebAuthn
passes clientDataJSON (or rather a hash of the
clientDataJSON) to the authenticator for signing. The browser
bound key also signs the clientDataJSON containing the
challenge. On another transaction a person-in-the-middle does
not have access to the browser bound private key needed to
sign over the challenge. The relying party can protect
against replay attacks by providing a random challenge,
checking the challenge matches, and verifying the signature.
2. There is some discussion to switching to a device
bound key if WebAuthn supports that. Is the possibility
of shared devices considered an acceptable risk?
Specifically, SMS 2FA is "your phone number" which can be
reasonably thought as your and yours alone, but a device
like a desktop is commonly shared device (e.g. library
computer). Or is the device key something that changes
based on login or some other criteria?
Browser bound keys are associated to the tuple (a passkey, a
browser instance, a device) in the Chrome profile, so a
separate os login would produce a different browser bound key
for the same passkey, and different browser bound keys would
be provided for different passkeys in the same profile. If
someone is at a library computer, they first need access to
the passkey before the matching browser bound key. Secure
Payment Confirmation requires userVerification
<https://w3c.github.io/webauthn/#dom-publickeycredentialrequestoptions-userverification>
(see
SPC spec
<https://w3c.github.io/secure-payment-confirmation/#sctn-steps-to-respond-to-a-payment-request>)
when
invoking WebAuthn (e.g., on Android enter the lock screen
pin/fingerprint, on MacOS provide your fingerprint), so the
user must be present to use an existing passkey before the
browser bound key would be used to sign the transaction. A
different passkey would yield a different browser bound key;
however, even if an attacker managed to use a browser bound
key on the same library computer with an attacker controlled
passkey, then relying parties can detect the mismatch (on top
of not recognizing the attacker's passkey).
To be clear, if WebAuthn introduces a form of device-binding,
Chrome will continue to provide browser bound keys (i.e.,
there is no code or spec to switch browser bound key provider
to WebAuthn). When or if WebAuthn supports device binding we
would re-evaluate the need/requirements for browser bound
keys in the web payments working group.
On Tue, Jun 24, 2025 at 9:55 PM Vladimir Levin
<vmp...@chromium.org> wrote:
On Tuesday, June 10, 2025 at 2:47:10 PM UTC-4
Chromestatus wrote:
Contact emails slobo...@chromium.org,
smcgr...@chromium.org, rous...@chromium.org
Explainer
https://github.com/w3c/secure-payment-confirmation/issues/271
<https://github.com/w3c/secure-payment-confirmation/issues/271>
In the explainer you mention the following:
> It is worth noting that this proposal is in some ways
re-inventing the wheel of what already exists and/or will
exist in WebAuthn. In particular, it means that we have
to be careful to avoid all the traps/problems with
signatures that WebAuthn already has solved (e.g.,
challenges to avoid replay attacks, choice of signing
algorithms, quantum-proofing, etc). Where possible, we
should look to write the spec relying on WebAuthn
concepts, even if the actual key creation and storage
does not use WebAuthn authenticators.
I don't follow WebAuthn progress closely, so the
questions I have may be naive, but bear with with me.
1. How *do* you avoid replay attacks in this case? If a
device is uniquely identified by a key that is only
challenged by 2FA (like SMS) on the first try, what
prevents a person-in-the-middle from learning this key
and using it later?
2. There is some discussion to switching to a device
bound key if WebAuthn supports that. Is the possibility
of shared devices considered an acceptable risk?
Specifically, SMS 2FA is "your phone number" which can be
reasonably thought as your and yours alone, but a device
like a desktop is commonly shared device (e.g. library
computer). Or is the device key something that changes
based on login or some other criteria?
Thanks!
Vlad
Specification
https://w3c.github.io/secure-payment-confirmation/#sctn-browser-bound-key-store
<https://w3c.github.io/secure-payment-confirmation/#sctn-browser-bound-key-store>
Design docs
https://github.com/w3c/secure-payment-confirmation/issues/271
<https://github.com/w3c/secure-payment-confirmation/issues/271>
https://github.com/w3c/secure-payment-confirmation/pull/286
<https://github.com/w3c/secure-payment-confirmation/pull/286>
https://github.com/w3c/secure-payment-confirmation/pull/296
<https://github.com/w3c/secure-payment-confirmation/pull/296>
Summary
Adds an additional cryptographic signature over
Secure Payment Confirmation assertions and credential
creation. The corresponding private key is not synced
across devices. This helps web developers meet
requirements for device binding for payment transactions.
Blink component Blink>Payments
<https://issues.chromium.org/issues?q=customfield1222907:%22Blink%3EPayments%22>
TAG review
https://github.com/w3ctag/design-reviews/issues/1097
<https://github.com/w3ctag/design-reviews/issues/1097>
TAG review status Pending
Risks
Interoperability and Compatibility
Browser bound keys are an additive feature for Secure
Payment Confirmation, the risk is that other browser
do not implement it.
/Gecko/: No signal
(https://github.com/mozilla/standards-positions/issues/570
<https://github.com/mozilla/standards-positions/issues/570>)
Firefox have never finalized their view on SPC, so we
updated the original SPC issue with a note on this
additional capability.
/WebKit/: No signal
(https://github.com/WebKit/standards-positions/issues/30
<https://github.com/WebKit/standards-positions/issues/30>)
Safari have never finalized their view on SPC, so we
updated the original SPC issue with a note on this
additional capability.
/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?
Debuggability
Web developers should be able to inspect the new
signature output which is defined in WebIDL, thus no
changes are needed in devtools.
Will this feature be supported on all six Blink
platforms (Windows, Mac, Linux, ChromeOS, Android,
and Android WebView)? No
Browser bound keys add to Secure Payment Confirmation
which is supported only on Android, Windows, and Mac.
Is this feature fully tested by web-platform-tests
<https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_platform_tests.md>?
No
Web platform tests depend on the availability of a
software implementation. Whether software
implementation of BBK would be permitted is an open
issue:
https://github.com/w3c/secure-payment-confirmation/issues/288
<https://github.com/w3c/secure-payment-confirmation/issues/288>.
DevTrial instructions
https://docs.google.com/document/d/1Wgx8MQG4GsdPErGPya7iMCbhw5NiSrLrNIoDPq2_P2s/edit?usp=sharing
<https://docs.google.com/document/d/1Wgx8MQG4GsdPErGPya7iMCbhw5NiSrLrNIoDPq2_P2s/edit?usp=sharing>
Flag name on about://flags
enable-secure-payment-confirmation-browser-bound-key
Finch feature name
SecurePaymentConfirmationBrowserBoundKeys
Rollout plan Will ship enabled for all users
Requires code in //chrome? False
Tracking bug
https://issues.chromium.org/issues/377278827
<https://issues.chromium.org/issues/377278827>
Measurement Browser bound keys are an additive to
Secure Payment Confirmation: The Secure Payment
Confirmation UseCounter will be used.
Availability expectation Secure Payment Confirmation
(and Browser Bound Keys) are only in Chromium
browsers for the foreseeable future.
Non-OSS dependencies
Does the feature depend on any code or APIs outside
the Chromium open source repository and its
open-source dependencies to function?
No
Sample links
https://rsolomakhin.github.io/pr/spc-sync
<https://rsolomakhin.github.io/pr/spc-sync>
Estimated milestones Shipping on Android 139 DevTrial
on Android 135
Anticipated spec changes
Open questions about a feature may be a source of
future web compat or interop issues. Please list open
issues (e.g. links to known github issues in the
project for the feature specification) whose
resolution may introduce web compat/interop risk
(e.g., changing to naming or structure of the API in
a non-backward-compatible way).
Link to entry on the Chrome Platform Status
https://chromestatus.com/feature/5106102997614592?gate=5080941065928704
<https://chromestatus.com/feature/5106102997614592?gate=5080941065928704>
Links to previous Intent discussions Intent to
Prototype:
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/68093084.170a0220.15e62e.01e5.GAE%40google.com
<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/68093084.170a0220.15e62e.01e5.GAE%40google.com>
This intent message was generated by Chrome Platform
Status <https://chromestatus.com>.
--
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 visit
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/065caa09-a757-44d2-ae7c-507d50d6c12bn%40chromium.org
<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/065caa09-a757-44d2-ae7c-507d50d6c12bn%40chromium.org?utm_medium=email&utm_source=footer>.