diff --git a/index.bs b/index.bs
index 2d1ac4c56..eeee21bde 100644
--- a/index.bs
+++ b/index.bs
@@ -2234,9 +2234,7 @@ a numbered step. If outdented, it (today) is rendered as a bullet in the midst o
-1. Throw a "{{NotAllowedError}}" {{DOMException}}. In order to prevent information leak that could identify the
- user without [=user consent|consent=], this step MUST NOT be executed before |lifetimeTimer| has expired. See
- [[#sctn-make-credential-privacy]] for details.
+1. Throw a "{{NotAllowedError}}" {{DOMException}}.
During the above process, the user agent SHOULD show some UI to the user to guide them in the process of selecting and
authorizing an authenticator. When |options|.{{CredentialCreationOptions/mediation}}
is set to {{CredentialMediationRequirement/conditional}}, prominent modal UI should not be shown unless credential creation was previously consented to via means determined by the user agent.
@@ -2683,9 +2681,7 @@ When this method is invoked, the user agent MUST execute the following algorithm
1. Return |constructAssertionAlg| and terminate this algorithm.
-1. Throw a "{{NotAllowedError}}" {{DOMException}}. In order to prevent information leak that could identify the
- user without [=user consent|consent=], this step MUST NOT be executed before |lifetimeTimer| has expired. See
- [[#sctn-assertion-privacy]] for details.
+1. Throw a "{{NotAllowedError}}" {{DOMException}}.
@@ -3871,7 +3867,7 @@ Note: The {{AttestationConveyancePreference}} enumeration is deliberately not re
:: The [=[RP]=] wants to receive the [=attestation statement=] as generated by the [=authenticator=].
: enterprise
- :: The [=[RP]=] wants to receive an [=attestation statement=] that may include uniquely identifying information. This is intended for controlled deployments within an enterprise where the organization wishes to tie registrations to specific authenticators. User agents MUST NOT provide such an attestation unless the user agent or authenticator configuration permits it for the requested [=RP ID=].
+ :: The [=[RP]=] wants to receive an enterprise attestation, which is an [=attestation statement=] that may include information which uniquely identifies the authenticator. This is intended for controlled deployments within an enterprise where the organization wishes to tie registrations to specific authenticators. User agents MUST NOT provide such an attestation unless the user agent or authenticator configuration permits it for the requested [=RP ID=].
If permitted, the user agent SHOULD signal to the authenticator (at [invocation time](#CreateCred-InvokeAuthnrMakeCred)) that enterprise attestation is requested, and convey the resulting [=/AAGUID=] and [=attestation statement=], unaltered, to the [=[RP]=].
@@ -4486,6 +4482,7 @@ Note: The {{PublicKeyCredentialHint}} enumeration is deliberately not referenced
[=rpIdHash=]
in |authData| is the SHA-256 hash of the [=RP ID=] expected by the [=[RP]=].
-1. Verify that the [=UP=] bit of the [=flags=]
in |authData| is set, unless |options|.{{CredentialCreationOptions/mediation}}
is set to {{CredentialMediationRequirement/conditional}}.
+1. If |options|.{{CredentialCreationOptions/mediation}}
is not set to {{CredentialMediationRequirement/conditional}},
+ verify that the [=UP=] bit of the [=flags=]
in |authData| is set.
1. If the [=[RP]=] requires [=user verification=] for this registration,
verify that the [=authData/flags/UV=] bit of the [=flags=]
in |authData| is set.
@@ -6388,7 +6386,7 @@ implementable by [=authenticators=] with limited resources (e.g., secure element
[=attestation trust path=].
-### Packed Attestation Statement Certificate Requirements ### {#sctn-packed-attestation-cert-requirements}
+### Certificate Requirements for Packed Attestation Statements ### {#sctn-packed-attestation-cert-requirements}
The attestation certificate MUST have the following fields/extensions:
@@ -6427,7 +6425,7 @@ The firmware of a particular authenticator model MAY be differentiated using the
For example, the following is an attestation certificate containing the above extension OIDs as well as required fields:
~~~ pem
------BEGIN CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
MIIBzTCCAXOgAwIBAgIUYHS3FJEL/JTfFqafuAHvlAS+hDYwCgYIKoZIzj0EAwIw
QTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC1dlYkF1dGhuIFdHMRwwGgYDVQQDDBNF
eGFtcGxlIEF0dGVzdGF0aW9uMCAXDTI0MDEwMzE3NDUyMVoYDzIwNTAwMTA2MTc0
@@ -6438,7 +6436,7 @@ YH9yMOOcci3nr+Q/jOBaWVERo0cwRTAhBgsrBgEEAYLlHAEBBAQSBBDNjDlcJu3u
3mU7AHl9A8o8MBIGCysGAQQBguUcAQEFBAMCASowDAYDVR0TAQH/BAIwADAKBggq
hkjOPQQDAgNIADBFAiA3k3aAUVtLhDHLXOgY2kRnK2hrbRgf2EKdTDLJ1Ds/RAIh
AOmIblhI3ALCHOaO0IO7YlMpw/lSTvFYv3qwO3m7H8Dc
------END CERTIFICATE-----
+-----END CERTIFICATE-----
~~~
The attributes above are structured within this certificate as such:
@@ -6458,6 +6456,10 @@ The attributes above are structured within this certificate as such:
2A -- Firmware version: 42
~~~
+### Certificate Requirements for Enterprise Packed Attestation Statements ### {#sctn-enterprise-packed-attestation-cert-requirements}
+
+The Extension OID `1.3.6.1.4.1.45724.1.1.2` ( `id-fido-gen-ce-sernum` ) MAY additionally be present in packed attestations for enterprise use. If present, this extension MUST indicate a unique octet string value per device against a particular AAGUID. This value MUST remain constant through factory resets, but MAY be distinct from any other serial number or other hardware identifier associated with the device. This extension MUST NOT be marked as critical, and the corresponding value is encoded as an OCTET STRING. This extension MUST NOT be present in non-enterprise attestations.
+
## TPM Attestation Statement Format ## {#sctn-tpm-attestation}
This attestation statement format is generally used by authenticators that use a Trusted Platform Module as their cryptographic
@@ -6544,8 +6546,8 @@ engine.
- Verify that `extraData` is set to the hash of |attToBeSigned| using the hash algorithm employed in "alg".
- Verify that `attested` contains a `TPMS_CERTIFY_INFO` structure as specified in [[!TPMv2-Part2]] section 10.12.3,
whose `name` field contains a valid Name for |pubArea|,
- as computed using the algorithm in the `nameAlg` field of |pubArea| using the procedure specified in [[!TPMv2-Part1]]
- section 16.
+ as computed using the procedure specified in [[!TPMv2-Part1]]
+ section 16. Note that the hash algorithm is included within the attested `name` field of the TPMS_CERTIFY_INFO structure.
- Verify that |x5c| is present.
- Note that the remaining fields in the "Standard Attestation Structure" [[!TPMv2-Part1]]
section 31.2, i.e., `qualifiedSigner`, `clockInfo` and `firmwareVersion` are ignored.
@@ -8832,8 +8834,8 @@ credential|credentials=] listed by the [=[RP]=] in {{PublicKeyCredentialCreation
If the above cases are distinguishable, information is leaked by which a malicious [=[RP]=] could identify the user by probing for
which [=public key credential|credentials=] are available. For example, one such information leak is if the client returns a
failure response as soon as an excluded [=authenticator=] becomes available. In this case - especially if the excluded
-[=authenticator=] is a [=platform authenticator=] - the [=[RP]=] could detect that the [=ceremony=] was canceled before the
-timeout and before the user could feasibly have canceled it manually, and thus conclude that at least one of the [=public key
+[=authenticator=] is a [=platform authenticator=] - the [=[RP]=] could detect that the [=ceremony=] was canceled
+before the user could feasibly have canceled it manually, and thus conclude that at least one of the [=public key
credential|credentials=] listed in the {{PublicKeyCredentialCreationOptions/excludeCredentials}} parameter is available to the user.
The above is not a concern, however, if the user has [=user consent|consented=] to create a new credential before a
@@ -8852,12 +8854,18 @@ key credential|credential=] is listed by the [=[RP]=] in {{PublicKeyCredentialRe
- A named [=public key credential|credential=] is available, but the user does not [=user consent|consent=] to use it.
If the above cases are distinguishable, information is leaked by which a malicious [=[RP]=] could identify the user by probing
-for which [=public key credential|credentials=] are available. For example, one such information leak is if the client returns a
-failure response as soon as the user denies [=user consent|consent=] to proceed with an [=authentication ceremony=]. In this
-case the [=[RP]=] could detect that the [=ceremony=] was canceled by the user and not the timeout, and thus conclude that at least
+for which [=public key credential|credentials=] are available.
+For example, one such information leak may happen if the client displays instructions and controls
+for canceling or proceeding with the [=authentication ceremony=]
+only after discovering an [=authenticator=] that [=contains=] a named [=credential=].
+In this case, if the [=[RP]=] is aware of this [=client=] behavior,
+the [=[RP]=] could detect that the [=ceremony=] was canceled by the user and not the timeout, and thus conclude that at least
one of the [=public key credential|credentials=] listed in the {{PublicKeyCredentialRequestOptions/allowCredentials}} parameter is
available to the user.
+This concern may be addressed by displaying controls allowing the user to cancel an [=authentication ceremony=] at any time,
+regardless of whether any named [=credentials=] are available.
+
### Privacy Between Operating System Accounts ### {#sctn-os-account-privacy}