From 39f4984f9fe7f5bf2165f568071698df9a8a59b6 Mon Sep 17 00:00:00 2001 From: Emil Lundberg Date: Wed, 4 Oct 2023 20:43:03 +0200 Subject: [PATCH 1/2] Retain autolinks to aaguid field of attested credential data --- index.bs | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/index.bs b/index.bs index 687032dc5..991a722f5 100644 --- a/index.bs +++ b/index.bs @@ -910,7 +910,7 @@ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "S and the data it emits. This includes such things as [=credential IDs=], [=credential key pairs=], [=signature counters=], etc. An [=attestation statement=] is provided within an [=attestation object=] during a [=registration=] ceremony. See also [[#sctn-attestation]] - and [Figure 6](#fig-attStructs). Whether or how the [=client=] conveys the [=attestation statement=] and [=AAGUID=] + and [Figure 6](#fig-attStructs). Whether or how the [=client=] conveys the [=attestation statement=] and [=authData/attestedCredentialData/aaguid=] portions of the [=attestation object=] to the [=[RP]=] is described by [=attestation conveyance=]. : Attestation Certificate @@ -2121,17 +2121,17 @@ a numbered step. If outdented, it (today) is rendered as a bullet in the midst o : {{AttestationConveyancePreference/none}} :: Replace potentially uniquely identifying information with non-identifying versions of the same: - 1. If the [=AAGUID=] in the [=attested credential data=] is 16 zero bytes, |credentialCreationData|.[=attestationObjectResult=].fmt is "packed", and "x5c" is absent from |credentialCreationData|.[=attestationObjectResult=], then [=self attestation=] is being used and no further action is needed. + 1. If the [=authData/attestedCredentialData/aaguid=] in the [=attested credential data=] is 16 zero bytes, |credentialCreationData|.[=attestationObjectResult=].fmt is "packed", and "x5c" is absent from |credentialCreationData|.[=attestationObjectResult=], then [=self attestation=] is being used and no further action is needed. 1. Otherwise - 1. Replace the [=AAGUID=] in the [=attested credential data=] with 16 zero bytes. + 1. Replace the [=authData/attestedCredentialData/aaguid=] in the [=attested credential data=] with 16 zero bytes. 1. Set the value of |credentialCreationData|.[=attestationObjectResult=].fmt to "none", and set the value of |credentialCreationData|.[=attestationObjectResult=].attStmt to be an empty [=CBOR=] map. (See [[#sctn-none-attestation]] and [[#sctn-generating-an-attestation-object]]). : {{AttestationConveyancePreference/indirect}} - :: The client MAY replace the [=AAGUID=] and [=attestation statement=] with a more privacy-friendly + :: The client MAY replace the [=authData/attestedCredentialData/aaguid=] and [=attestation statement=] with a more privacy-friendly and/or more easily verifiable version of the same data (for example, by employing an [=Anonymization CA=]). : {{AttestationConveyancePreference/direct}} or {{AttestationConveyancePreference/enterprise}} - :: Convey the [=authenticator=]'s [=AAGUID=] and [=attestation statement=], unaltered, to the [=[RP]=]. + :: Convey the [=authenticator=]'s [=/AAGUID=] and [=attestation statement=], unaltered, to the [=[RP]=]. 1. Let |attestationObject| be a new {{ArrayBuffer}}, created using |global|'s [=%ArrayBuffer%=], containing the @@ -3459,7 +3459,7 @@ Note: The {{AttestationConveyancePreference}} enumeration is deliberately not re : 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=]. - 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]=]. + 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]=]. @@ -4093,11 +4093,11 @@ considered more trustworthy than the rest of the authenticator. Each authenticator stores a credentials map, a [=map=] from ([=rpId=], [=public key credential source/userHandle=]) to [=public key credential source=]. -Additionally, each authenticator has an Authenticator Attestation GUID or AAGUID, which is a 128-bit identifier indicating the type (e.g. make and model) of the +Additionally, each authenticator has an Authenticator Attestation GUID or AAGUID, which is a 128-bit identifier indicating the type (e.g. make and model) of the authenticator. The AAGUID MUST be chosen by its maker to be identical across all substantially identical authenticators made by that maker, and different (with high probability) from the AAGUIDs of all other types of authenticators. The AAGUID for a given type of authenticator SHOULD be randomly generated to ensure this. The [=[RP]=] MAY use the AAGUID to infer certain properties of the authenticator, such as certification level -and strength of key protection, using information from other sources. The [=RP=] MAY use the AAGUID to attempt to identify the maker of the authenticator +and strength of key protection, using information from other sources. The [=RP=] MAY use the AAGUID to attempt to identify the maker of the authenticator without performing [=attestation=], but would be unable to trust that inference unless [=attestation=] is performed. The primary function of the authenticator is to provide [=WebAuthn signatures=], which are bound to various contextual data. These @@ -5072,9 +5072,9 @@ object=] for a credential. Its format is shown in not permitted, then |attFormat| is "none" and |attAaguid| is 16 zero bytes. Otherwise |attFormat| is an [=attestation statement format=] appropriate for this [=authenticator=] based on {{AuthenticationExtensionsDevicePublicKeyInputs/attestationFormats}}, and |attAaguid| is the [=authenticator's=] [=AAGUID=]. (Again, since the [=hardware-bound device key pair=] is specific to a particular authenticator, the attestation may be tied to hardware roots of trust.) + :: 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. [=Authenticators=] MUST NOT provide such an attestation unless the user agent or authenticator configuration expressly permits it for the requested [=RP ID=]. If not permitted, then |attFormat| is "none" and |attAaguid| is 16 zero bytes. Otherwise |attFormat| is an [=attestation statement format=] appropriate for this [=authenticator=] based on {{AuthenticationExtensionsDevicePublicKeyInputs/attestationFormats}}, and |attAaguid| is the [=authenticator's=] [=/AAGUID=]. (Again, since the [=hardware-bound device key pair=] is specific to a particular authenticator, the attestation may be tied to hardware roots of trust.) Note: CTAP2 does not currently provide for an enterpriseAttestation signal during an authenticatorGetAssertion call. Until that is changed, platform-managed enterprise attestation will not work in that context with CTAP2 [=authenticators=]. @@ -7319,7 +7319,7 @@ The weight that [=[RPS]=] give to the presence of a signature from a [=device-bo ##### AAGUIDs ##### {#sctn-device-publickey-attestation-aaguid} -The [=AAGUID=] included in the [=devicePubKey=] extension output, if non-zero, identifies the make or model of hardware that is storing the [=device-bound key=]. This is distinct from the [=AAGUID=] in the [=attested credential data=] of a [=multi-device credential=], which likely identifies something broader since such credentials are not bound to a single device. Thus the two AAGUIDs MAY be different in a single response and either, or both, may be zero depending on the options requested and authenticator behaviour. +The [=/AAGUID=] included in the [=devicePubKey=] extension output, if non-zero, identifies the make or model of hardware that is storing the [=device-bound key=]. This is distinct from the [=authData/attestedCredentialData/aaguid=] in the [=attested credential data=] of a [=multi-device credential=], which likely identifies something broader since such credentials are not bound to a single device. Thus the two AAGUIDs MAY be different in a single response and either, or both, may be zero depending on the options requested and authenticator behaviour. ##### Attestation calculations ##### {#sctn-device-publickey-attestation-calculations} @@ -7349,8 +7349,8 @@ The [=devicePubKey=] extension adds the following [=struct/item=] to [=credentia
: aaguid - :: The [=AAGUID=] of the [=device-bound key=]'s [=managing authenticator=]. - This MAY be different from the [=AAGUID=] in the [$credential record/attestationObject$], if any, of the containing [=credential record=]. + :: The [=/AAGUID=] of the [=device-bound key=]'s [=managing authenticator=]. + This MAY be different from the [=authData/attestedCredentialData/aaguid=] in the [$credential record/attestationObject$], if any, of the containing [=credential record=]. : dpk :: The public key portion of the [=device-bound key=]. From d36a4ddc987777eb6fe2eec43d9a88af1291db62 Mon Sep 17 00:00:00 2001 From: Emil Lundberg Date: Wed, 4 Oct 2023 20:43:17 +0200 Subject: [PATCH 2/2] Fix [=[RP]=] autolink --- index.bs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.bs b/index.bs index 991a722f5..5318a4b9c 100644 --- a/index.bs +++ b/index.bs @@ -4097,7 +4097,7 @@ Additionally, each authenticator has an Authenticator Attestation GUID or A authenticator. The AAGUID MUST be chosen by its maker to be identical across all substantially identical authenticators made by that maker, and different (with high probability) from the AAGUIDs of all other types of authenticators. The AAGUID for a given type of authenticator SHOULD be randomly generated to ensure this. The [=[RP]=] MAY use the AAGUID to infer certain properties of the authenticator, such as certification level -and strength of key protection, using information from other sources. The [=RP=] MAY use the AAGUID to attempt to identify the maker of the authenticator +and strength of key protection, using information from other sources. The [=[RP]=] MAY use the AAGUID to attempt to identify the maker of the authenticator without performing [=attestation=], but would be unable to trust that inference unless [=attestation=] is performed. The primary function of the authenticator is to provide [=WebAuthn signatures=], which are bound to various contextual data. These