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>.