On Fri, Mar 3, 2023 at 8:08 AM Rick Byers <rby...@chromium.org> wrote:

> LGTM3
>
> On Wed, Mar 1, 2023 at 7:35 PM Nina Satragno <nsatra...@chromium.org>
> wrote:
>
>> Hey Rick!
>>
>> On Mon, Feb 27, 2023 at 6:14 PM Rick Byers <rby...@chromium.org> wrote:
>>
>>> Hi Nina,
>>> Seems pretty solid to me, just a few questions inline.
>>>
>>> On Wed, Feb 22, 2023 at 5:15 PM Nina Satragno <nsatra...@chromium.org>
>>> wrote:
>>>
>>>> *Contact emails*
>>>> nsatra...@chromium.org, identity-...@chromium.org
>>>>
>>>> *Explainer*
>>>>
>>>> https://github.com/w3c/webauthn/wiki/Explainer:-WebAuthn-Large-Blob-Extension
>>>>
>>>
>>> *Specification*
>>>> https://www.w3.org/TR/webauthn-2/#sctn-large-blob-extension
>>>>
>>>> *Summary*
>>>> The WebAuthn large blob extension allows relying parties to store
>>>> opaque data associated with a credential. This is useful for authentication
>>>> schemes involving storing certificates on authenticators.
>>>>
>>>
>>> Sorry if it should be obvious, but can you say a little more about
>>> the utility? How are such certificates expected to be used? The explainer
>>> doesn't describe the developer/user benefits of this feature.
>>>
>>
>> It's not obvious at all! I added an example use cases
>> <https://github.com/w3c/webauthn/wiki/Explainer:-WebAuthn-Large-Blob-Extension#example-use-cases>
>>  section
>> with two I could conjure: offline SSH authentication in the context of SSO,
>> and E2E messaging.
>>
>
> Makes sense, thank you!
>
>>
>>
>>> Do you know of any specific RPs who are looking to deploy such features?
>>> What value does it bring them or their users?
>>>
>>>
>> During the prototype period, we had a handful of developers reach out to
>> ask for availability & file bugs (e.g. crbug.com/1282491,
>> crbug.com/1312802, crbug.com/1312788). We also had a couple large RPs
>> express interest privately.
>>
>
> Perfect, thanks.
>
>
>> When we're the first engine to ship, the API owners are tasked with
>>> making an risk vs. moving the web forward tradeoff evaluation and it's not
>>> clear to me from the explainer exactly how this "moves the web forward".
>>> Maybe worth adding a few sentences to the explainer?
>>>
>>> *Blink component*
>>>> Blink>WebAuthentication
>>>>
>>>> *Search tags*
>>>> webauthn, large blob, blobs
>>>>
>>>> *TAG review*
>>>> https://github.com/w3ctag/design-reviews/issues/820
>>>>
>>>> *TAG review status*
>>>> Pending
>>>>
>>>> *Risks*
>>>>
>>>> *Interoperability and Compatibility*
>>>> Low. This feature has long been part of the WebAuthn L2 recommended
>>>> standard <https://www.w3.org/TR/webauthn-2/#sctn-large-blob-extension>.
>>>> It is supported by production CTAP 2.1 security keys as well as recent
>>>> enough versions of the Windows WebAuthn API.
>>>>
>>>> Gecko: No signal (
>>>> https://github.com/mozilla/standards-positions/issues/750)
>>>>
>>>>
>>>> WebKit: No signal (
>>>> https://github.com/WebKit/standards-positions/issues/139)
>>>>
>>>
>>> Looks like that's in-development now (though Ricky does say they want to
>>> study the privacy and security properties a little more).
>>>
>>> Web developers: Positive. We had a few developers reach out about
>>>> availability, e.g. crbug.com/1282491.
>>>>
>>>> Other signals: Microsoft has shipped the OS-level large blob API, see
>>>> https://github.com/microsoft/webauthn/blob/master/webauthn.h
>>>>
>>>> *Ergonomics*
>>>> WebAuthn is already an asynchronous API with a "long" time to get a
>>>> response (in the order of seconds) since it needs user interaction. Adding
>>>> this feature will not impact the "normal" webauthn flow. For relying
>>>> parties (i.e. websites) using it, it won't significantly affect 
>>>> performance.
>>>>
>>>
>>> Can you say a little bit about storage limits? This is to be stored on
>>> the authenticator itself, right? Is there a max size per credential or RP?
>>>
>>
>> We are limiting the pre-compression size of each blob to 2kb.
>>
>> The storage capacity depends on the authenticator. Phones will
>> essentially have "unlimited" storage, while security keys will have
>> comparatively little. The key I have on my desk reports a max size of 1kb
>> (post-compression). The way we've seen this storage implemented in security
>> keys is as a shared space for all RPs that is dedicated to large blobs (so
>> filling it does not stop the creation of new resident credentials).
>>
>
> Nice. Is this detail of the space being reserved for large blobs (and to
> breaking only other large blobs when exhausted) something worth  covering
> in the "SHOULD" clause in the spec? I don't have a strong opinion, just
> trying to reduce the risk of this feature leading to any perception of
> unreliability of passkeys generally.
>

For security keys, there is a minimum size
<https://fidoalliance.org/specs/fido-v2.1-rd-20201208/fido-client-to-authenticator-protocol-v2.1-rd-20201208.html#getinfo-maxserializedlargeblobarray>
specified
that implies the availability of at least 1kb of dedicated space, but there
is technically nothing stopping authenticators from sharing space outside
that minimum. I don't think this will be a problem in practice, but I
have opened
an issue against CTAP
<https://github.com/fido-alliance/fido-2-specs/issues/1377> to clarify this
(regrettably, the repository for CTAP is closed source).


>
> There are a lot more phones out there than security keys out there.
>>
>>
>>> To what extent should we worry about one RP taking up all the space and
>>> breaking functionality of other RPs? Are there any mechanisms to
>>> minimize this, or at least for us to monitor whether this is a problem in
>>> practice, and if so which origins are the biggest users?
>>>
>>
>> If a website tries to write a large blob when the storage is full, Chrome
>> will report the failure to write back to the relying party which can handle
>> this error.
>>
>> Users can go to chrome settings (chrome://settings/securityKeys) to
>> manage the storage for their security keys. Deleting a credential will
>> remove its accompanying large blob. Additionally, visiting the settings
>> page for a security key will trigger a "garbage collection" for the edge
>> case where a user might have deleted a credential using a tool that does
>> not know about large blobs, which would otherwise leave an orphaned blob.
>>
>> I'll go ahead and add a histogram to the large blob operation result so
>> we can measure failure conditions (like the storage being full). However,
>> I'm not sure if there would be a lot of value in adding RP-keyed metrics.
>> Using the full storage doesn't necessarily mean they're abusing the API.
>> Perhaps we can revisit if we see high numbers of failures due to the
>> storage being full.
>>
>
> SGTM
>
>
>>
>>
>>> Is there any sort of space reclamation protocol for unused credentials?
>>> Do we expose the space used per RP in our user UI?
>>>
>>>
>> We don't show the space used per RP. This might be somewhat tricky to
>> communicate, as we would know the post-compression space, which is not what
>> the RPs see. My recommendation here is to wait and see if this becomes a
>> problem first, and if it does, augment this UI surface.
>>
>
> Agreed, thanks.
>
>
>>
>> --
>>
>> I filed bugs for the metrics
>> <https://bugs.chromium.org/p/chromium/issues/detail?id=1420691> and max
>> size limiting
>> <https://bugs.chromium.org/p/chromium/issues/detail?id=1420688> I talked
>> about as action items.
>>
>> Hopefully this answers all your questions.
>> Cheers!
>>
>>
>>> *Activation*
>>>> This feature can't be polyfilled since it relies on hardware support.
>>>> Large blob is a fairly simple feature, only exposing a way to query for
>>>> support, write, and read blobs. Integration with existing frameworks
>>>> exercising webauthn should be straightforward.
>>>>
>>>> *Security*
>>>> The implementation requires compressing and uncompressing arbitrary
>>>> data. This is done in the data decoder service
>>>> <https://source.chromium.org/chromium/chromium/src/+/master:services/data_decoder/gzipper.h>,
>>>> which runs in a sandboxed process. This implementation feature was
>>>> security-reviewed
>>>> <https://chromium-review.googlesource.com/c/chromium/src/+/2464011>.
>>>>
>>>> *WebView application risks*
>>>> None.
>>>>
>>>> *Debuggability*
>>>> Developers can use the devtools webauthn tab
>>>> <https://developers.google.com/web/tools/chrome-devtools/webauthn> to
>>>> debug this feature. Support can be toggled on or off to simulate
>>>> authenticator capabilities.
>>>>
>>>
>>> *Will this feature be supported on all six Blink platforms (Windows,
>>>> Mac, Linux, Chrome OS, Android, and Android WebView)?*
>>>> No.
>>>>
>>>> This feature will be supported on Mac, Linux, Windows (< 10 19h1; >=
>>>> 11), & Chrome OS. Windows >= 10 19h1 relies on a high-level API. Support on
>>>> that high level API landed on Windows 11. Similarly, the android webauthn
>>>> implementation relies on a higher level API that does not support this
>>>> feature.
>>>>
>>>> *Is this feature fully tested by web-platform-tests?*
>>>> Yes. https://wpt.fyi/webauthn, see large-blob
>>>>
>>>> *Flag name*
>>>> enable-experimental-web-platform-features
>>>>
>>>> *Requires code in //chrome?*
>>>> No.
>>>>
>>>> *Tracking bug*
>>>> https://bugs.chromium.org/p/chromium/issues/detail?id=1114875
>>>>
>>>> *Measurement*
>>>> None.
>>>>
>>>> *Non-OSS dependencies*
>>>> On Windows, for security keys the API depends on a version >= 3 of the 
>>>> WebAuthn
>>>> API <https://github.com/microsoft/webauthn/blob/master/webauthn.h>.
>>>> This is currently present on recent enough versions of Windows 11. On
>>>> Android, for security keys the API depends on the Google Play Services
>>>> implementation of FIDO. At the moment, Play Services does not support CTAP
>>>> 2.1, which is required for this feature. On Mac & Linux, support for
>>>> security keys is provided by Chrome. On all desktop platforms, support for
>>>> hybrid (i.e. phone/tablet) authenticators does not depend on the OS.
>>>>
>>>> *Sample links*
>>>> https://webauthn-large-blob.glitch.me
>>>>
>>>> *Estimated milestones*
>>>> M113
>>>>
>>>> *Anticipated spec changes*
>>>> None.
>>>>
>>>> *Link to entry on the Chrome Platform Status*
>>>> https://chromestatus.com/feature/5657899357437952
>>>>
>>>> *Links to previous Intent discussions*
>>>> Intent to prototype:
>>>> https://groups.google.com/a/chromium.org/g/blink-dev/c/t_9QdJ7hcls/m/CAAOGBIVBgAJ
>>>>
>>>> --
>>>> Nina Satragno
>>>> she/they
>>>>
>>>> --
>>>> 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/CAB0jio%3DVeazm9pRoLcLm62XhHZEdPmBMoOFEwatDukkijXSmhQ%40mail.gmail.com
>>>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAB0jio%3DVeazm9pRoLcLm62XhHZEdPmBMoOFEwatDukkijXSmhQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>>
>>
>> --
>> Nina Satragno
>> she/they
>>
>

-- 
Nina Satragno
she/they

-- 
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/CAB0jiomTypMiGkbtFHf98zrLN60XCdX28kO1cCYr-_ox6Fn%2BgQ%40mail.gmail.com.

Reply via email to