The goal of the Universal Authentication Framework is to provide
a unified and extensible authentication mechanism that supplants
passwords while avoiding the shortcomings of current alternative
authentication approaches.
This approach is designed to allow
the relying party to choose the best available authentication
mechanism for a particular end user or interaction, while
preserving the option to leverage
emerging device security capabilities in the future without
requiring additional integration effort.
This document describes the FIDO architecture in detail, it
defines the flow and content of all UAF protocol messages and
presents the rationale behind the design choices.
Status of This Document
This section describes the status of this document at the time of its publication.
Other documents may supersede this document. A list of current FIDO Alliance publications and the
latest revision of this technical report can be found in the FIDO Alliance specifications index at
https://www.fidoalliance.org/specifications/.
This document was published by the FIDO Alliance as a Proposed Standard.
If you wish to make comments regarding this document, please
Contact Us.
All comments are welcome.
Implementation of certain elements of this Specification may require licenses under third party intellectual
property rights, including without limitation, patent rights. The FIDO Alliance, Inc. and its Members
and any other contributors to the Specification are not, and shall not be held, responsible in any manner
for identifying or failing to identify any or all such third party intellectual property rights.
THIS FIDO ALLIANCE SPECIFICATION IS PROVIDED “AS IS” AND WITHOUT ANY
WARRANTY OF ANY KIND, INCLUDING, WITHOUT LIMITATION, ANY EXPRESS OR IMPLIED
WARRANTY OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A
PARTICULAR PURPOSE.
This document has been reviewed by FIDO Aliance Members
and is endorsed as a Proposed Standard.
It is a stable document and may be used as reference material or cited from another
document. FIDO Alliance's role in making the Recommendation is to draw attention to the
specification and to promote its widespread deployment.
Type names, attribute names and element names are written as code.
String literals are enclosed in “”, e.g. “UAF-TLV”.
In formulas we use “|” to denote byte wise concatenation
operations.
The notation base64url refers to "Base 64 Encoding with URL and Filename
Safe Alphabet" [RFC4648] without padding.
Following [WebIDL-ED], dictionary members are optional unless
they are explicitly marked as required.
WebIDL dictionary members MUST NOT have a value of null — i.e.,
there are no declarations of nullable dictionary members in this specification.
Unless otherwise specified, if a WebIDL dictionary member
is DOMString, it MUST NOT be empty.
Unless otherwise specified, if a WebIDL dictionary member is a List,
it MUST NOT be an empty list.
UAF specific terminology used in this document is defined in
[FIDOGlossary].
All diagrams, examples, notes in this specification are non-normative.
Note
Note: Certain dictionary members need to be present in order to
comply with FIDO requirements. Such members are marked in the
WebIDL definitions found in this document, as
required. The keyword required has been
introduced by [WebIDL-ED], which is a work-in-progress. If you
are using a WebIDL parser which implements [WebIDL], then you
may remove the keyword required from your WebIDL and
use other means to ensure those fields are present.
1.1 Key Words
The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL
NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and
“OPTIONAL” in this document are to be interpreted as described in [RFC2119].
2. Overview
This section is non-normative.
The goal of this Universal Authentication Framework is to
provide a unified and extensible authentication mechanism that
supplants passwords while avoiding the shortcomings of current
alternative authentication approaches.
The design goal of the protocol is to enable Relying Parties
to leverage the diverse and heterogeneous set of security
capabilities available on end users' devices via a single,
unified protocol.
This approach is designed to allow the
FIDO Relying Parties to choose the best available authentication
mechanism for a particular end user or interaction, while
preserving the option for a relying party to leverage
emerging device security capabilities in the future, without
requiring additional integration effort.
2.1 Scope
This document describes FIDO architecture in detail and defines
the UAF protocol as a network protocol. It defines the flow and
content of all UAF messages and presents the rationale behind
the design choices.
Particular application-level bindings are outside the scope of
this document. This document is not intended to answer
questions such as:
What does an HTTP binding look like for UAF?
How can a web application communicate to FIDO UAF Client?
How can FIDO UAF Client communicate to FIDO enabled Authenticators?
The following diagram depicts the entities involved in UAF
protocol.
Fig. 1The UAF Architecture
Of these entities, only these three directly create and/or
process UAF protocol messages:
FIDO Server, running on the relying party's infrastructure
FIDO UAF Client, part of the user agent and running on the FIDO user
device
FIDO Authenticator, integrated into the FIDO user device
It is assumed in this document that a FIDO Server has access to
the UAF Authenticator Metadata [FIDOMetadataStatement] describing
all the authenticators it will interact with.
2.3 Protocol Conversation
The core UAF protocol consists of four conceptual conversations
between a FIDO UAF Client and FIDO Server.
Registration: UAF allows the relying party to register a FIDO
Authenticator with the user's account at the relying party. The
relying party can specify a policy for supporting various FIDO
Authenticator types. A FIDO UAF Client will only register existing
authenticators in accordance with that policy.
Authentication: UAF allows the relying party to prompt the end
user to authenticate using a previously registered FIDO
Authenticator. This authentication can be invoked any time, at
the relying party's discretion.
Transaction Confirmation: In addition to providing a general
authentication prompt, UAF offers support for prompting the
user to confirm a specific transaction.
This prompt includes
the ability to communicate additional information to the client
for display to the end user, using the client's transaction confirmation display.
The goal of this additional authentication operation is to enable relying parties to ensure
that the user is confirming a specified set of the transaction
details (instead of authenticating a session to the user agent).
Deregistration: The relying party can trigger the deletion of
the account-related authentication key material.
Although this document defines the FIDO Server as the initiator
of requests, in a real world deployment the first UAF operation
will always follow a user agent's (e.g. HTTP) request
to a relying party.
The following diagram shows the message flows for
registration.
Fig. 2UAF Registration Message Flow
Note
The client application should use the appropriate API
to inform the FIDO UAF Client of the results of the
operation (see section 2.3.1 in [UAFAppAPIAndTransport]) in order
to allow the FIDO UAF Client to do some "housekeeping" tasks.
2.3.2 Authentication
The following diagram depicts the message flows for the
authentication operation.
Fig. 3Authentication Message Flow
Note
The client application should use the appropriate API
to inform the FIDO UAF Client of the results of the
operation (see section 2.3.1 in [UAFAppAPIAndTransport]) in order
to allow FIDO UAF Client to do some "housekeeping" tasks.
2.3.3 Transaction Confirmation
The following figure depicts the transaction confirmation
message flow.
Fig. 4Transaction Confirmation Message Flow
Note
The client application should use the appropriate API
to inform the FIDO UAF Client of the results of the
operation (see section 2.3.1 in [UAFAppAPIAndTransport]) in order
to allow the FIDO UAF Client to do some "housekeeping" tasks.
2.3.4 Deregistration
The following diagram depicts the deregistration message flow.
Fig. 5Deregistration Message Flow
Note
The client application should use the appropriate API
to inform the FIDO UAF Client of the results of the
operation (see section 2.3.1 in [UAFAppAPIAndTransport]) in order
to allow the FIDO UAF Client to do some "housekeeping" tasks.
3. Protocol Details
This section is normative.
This section provides a detailed description of operations
supported by the UAF Protocol.
Support of all protocol elements is
mandatory for conforming software, unless stated otherwise.
All string literals in this specification are constructed from
Unicode codepoints within the set U+0000..U+007F.
Unless otherwise specified, protocol messages are transferred
with a UTF-8 content encoding.
Note
All data used in this protocol must be exchanged using a secure
transport protocol (such as TLS/HTTPS) established between the FIDO UAF Client
and the relying party in order to follow the assumptions made in [FIDOSecRef];
details are specified in section 4.1.7TLS Protected Communication.
The notation base64url(byte[8..64]) reads as 8-64 bytes of data
encoded in base64url, "Base 64 Encoding with URL and Filename
Safe Alphabet" [RFC4648] without padding.
The notation string[5] reads as five unicode characters, represented as a
UTF-8 [RFC3629] encoded string of the type indicated in the declaration, typically a
WebIDL [WebIDL-ED] DOMString.
As the UTF-8 representation has variable length, the
maximum byte length of string[5] is string[4*5].
All strings are case-sensitive unless stated otherwise.
This document uses WebIDL [WebIDL-ED] to define UAF protocol messages.
Implementations MUST serialize the UAF protocol messages for
transmission using UTF-8 encoded JSON [RFC4627].
3.1 Shared Structures and Types
This section defines types and structures shared by various
operations.
3.1.1 Version Interface
Represents a generic version with major and minor fields.
If the element is missing or empty in the request,
the FIDO UAF Client MUST set it to the FacetID of the caller.
If the appID present in the message is identical to
the FacetID of the caller, the FIDO UAF Client
MUST accept it.
If it is an URI with HTTPS protocol scheme, the
FIDO UAF Client MUST use it to load the list of
trusted facet identifiers from the specified
URI. The FIDO UAF Client MUST only accept the
request, if the facet identifier of the caller
matches one of the trusted facet identifiers in the
list returned from dereferencing this URI.
Note
The new key pair that the authenticator generates will be
associated with this application identifier.
Security Relevance: The application identifier is used
by the FIDO UAF Client to verify the eligibility of an application
to trigger the use of a specific UAuth.Key. See [FIDOAppIDAndFacets]
serverData of type DOMString
string[1..1536].
A session identifier created by the relying party.
Note
The relying party can opaquely store things like expiration times for the registration
session, protocol version used and other useful information
in serverData. This data is opaque to FIDO UAF Clients. FIDO Servers may
reject a response that is lacking this data or is containing unauthorized
modifications to it.
Each authenticator MUST have an AAID to identify UAF
enabled authenticator models globally. The AAIDMUST uniquely identify
a specific authenticator model within the range of all UAF-enabled
authenticator models made by all authenticator vendors,
where authenticators of a specific model must share identical security
characteristics within the model (see
Security Considerations).
The AAID is a string with format "V#M", where
"#" is a separator
"V" indicates the authenticator Vendor Code. This code
consists of 4 hexadecimal digits.
"M" indicates the authenticator Model Code. This code consists
of 4 hexadecimal digits.
HEXDIG is case insensitive, i.e. "03EF" and "03ef" are
identical.
The FIDO Alliance is responsible for assigning authenticator
vendor Codes.
Authenticator vendors are responsible for assigning authenticator model codes
to their authenticators. Authenticator vendors MUST assign
unique AAIDs to authenticators with different security
characteristics.
AAIDs are unique and each of them must relate to a distinct
authentication metadata file ([FIDOMetadataStatement])
Note
Adding new firmware/software
features, or changing the underlying hardware protection
mechanisms will typically change the security characteristics
of an authenticator and hence would require a new AAID to be used.
Refer to ([FIDOMetadataStatement]) for more details.
3.1.5 KeyID typedef
typedef DOMStringKeyID;
base64url(byte[32...2048])
KeyID is a unique identifier (within the scope of an AAID) used
to refer to a specific UAuth.Key. It is generated by the
authenticator and registered with a FIDO Server.
The (AAID, KeyID ) tuple MUST uniquely identify an
authenticator's registration for a relying party. Whenever a
FIDO Server wants to provide specific information to a
particular authenticator it MUST use the (AAID, KeyID) tuple.
KeyIDMUST be base64url encoded within the UAF message (see
above).
During step-up authentication and deregistration operations, the FIDO Server SHOULD
provide the KeyID back to the authenticator for the latter to locate the appropriate
user authentication key, and perform the necessary operation with it.
Roaming authenticators which don't have internal storage
for, and cannot rely on any ASM to store, generated key
handles SHOULD provide the key handle as part of the AuthenticatorRegistrationAssertion.assertion.KeyID
during the registration operation (see also
section ServerData and KeyHandle)
and get the key handle back from the FIDO Server during the
step-up authentication (in the
MatchCriteria dictionary which
is part of the policy) or deregistration operations
(see [UAFAuthnrCommands] for more details).
Note
The exact structure and content of a KeyID is
specific to the authenticator implementation.
3.1.6 ServerChallenge typedef
typedef DOMStringServerChallenge;
base64url(byte[8...64])
ServerChallenge is a server-provided random challenge. Security
Relevance: The challenge is used by the FIDO Server to verify
whether an incoming response is new, or has already been
processed. See section Replay Attack Protection for more
details.
The ServerChallengeSHOULD be mixed into the entropy pool of the
authenticator. Security Relevance: The FIDO Server SHOULD
provide a challenge containing strong cryptographic randomness
whenever possible. See section Server Challenge
and Random Numbers.
Note
The minimum challenge length of 8 bytes follows the requirement
in [SP800-63] and is equivalent to the 20 decimal digits as
required in [RFC6287].
Note
The maximum length has been defined such that SHA-512 output can
be used without truncation.
Note
The mixing of multiple sources of randomness is
recommended to improve the quality of the random numbers
generated by the authenticator, as described in [RFC4086].
The value is determined by the FIDO UAF Client and it depends on the
calling application. See [FIDOAppIDAndFacets] for more details.
Security Relevance: The facetID is determined
by the FIDO UAF Client and
verified against the list of trusted facets retrieved by dereferencing the appID of
the calling application.
channelBinding of type required ChannelBinding
Contains the TLS information to be sent by the FIDO
Client to the FIDO Server, binding the TLS channel to
the FIDO operation.
3.1.8 TLS ChannelBinding dictionary
ChannelBinding contains channel binding information [RFC5056].
Note
Security
Relevance:The channel binding may be verified by the FIDO Server in order
to detect and prevent MITM attacks.
At this time, the following channel binding methods are supported:
If data related to any of the channel binding
methods, described here, is available to the FIDO UAF
Client (i.e. included in this dictionary), it MUST be
used according to the relevant specification .
All channel binding methods described here MUST be supported by the FIDO Server. The FIDO Server MAY
reject operations if the channel binding cannot be verified successfully.
Note
If channel binding data is accessible to the web
browser or client application, it must be relayed to
the FIDO UAF Client in order to follow the assumptions
made in [FIDOSecRef].
If channel binding data is accessible to the web server,
it must be relayed to the FIDO Server in order to follow the
assumptions made in [FIDOSecRef]. The FIDO Server
relies on the web server to provide
accurate channel binding information.
The field serverEndPointMUST be set
to the base64url-encoded hash of the TLS server
certificate if this is available. The hash function MUST be
selected as follows:
if the certificate's signatureAlgorithm uses a single hash
function and that hash function is either MD5 [RFC1321] or
SHA-1 [RFC6234], then use SHA-256 [FIPS180-4];
if the certificate's signatureAlgorithm uses
a single hash function and that hash function is
neither MD5 nor SHA-1, then use the hash function
associated with the certificate'ssignatureAlgorithm;
if the certificate's signatureAlgorithm uses
no hash functions, or uses multiple hash functions,
then this channel binding type's channel bindings
are undefined at this time (updates to this channel
binding type may occur to address this issue if it
ever arises)
This field MUST be absent if the TLS server certificate is not available to the
processing entity (e.g., the FIDO UAF Client) or the hash function
cannot be determined as described.
tlsServerCertificate of type DOMString
This field MUST be absent if the TLS server
certificate is not available to the FIDO UAF Client.
This field MUST be set to the base64url-encoded,
DER-encoded TLS server certificate, if this data is
available to the FIDO UAF Client.
tlsUnique of type DOMString
MUST be set to the base64url-encoded TLS channel
Finished structure. It MUST, however, be absent, if this
data is not available to the FIDO UAF Client [RFC5929].
The use of the tlsUnique is deprecated as the security of the tls-unqiue
channel binding type [RFC5929] is broken, see [TLSAUTH].
cid_pubkey of type DOMString
MUST be absent if the client TLS stack doesn't provide TLS ChannelID
[ChannelID] information to the processing entity (e.g., the web
browser or client application).
MUST be set to "unused" if TLS ChannelID information is supported by
the client-side TLS stack but has not been signaled by the TLS
(web) server.
Otherwise, it MUST be set to the base64url-encoded serialized
[RFC4627] JwkKey structure using UTF-8 encoding.
3.1.9 JwkKey dictionary
JwkKey is a dictionary representing a JSON Web Key encoding of
an elliptic curve public key [JWK].
This public key is the ChannelID public
key minted by the client TLS stack for the particular relying party.
[ChannelID] stipulates using only a particular elliptic curve, and the particular
coordinate type.
kty of type required DOMString, defaulting to "EC"
Denotes the key type used for Channel ID. At this
time only elliptic curve is supported by [ChannelID], so it
MUST be set to "EC" [JWA].
crv of type required DOMString, defaulting to "P-256"
Denotes the elliptic curve on which this public
key is defined. At this time only the NIST curve secp256r1 is supported by
[ChannelID], so the crv parameter MUST be set to "P-256".
x of type required DOMString
Contains the base64url-encoding of the x coordinate
of the public key (big-endian, 32-byte value).
y of type required DOMString
Contains the base64url-encoding of the y coordinate
of the public key (big-endian, 32-byte value).
3.1.10 Extension dictionary
FIDO extensions can appear in several places, including
the UAF protocol messages, authenticator commands, or in the
assertion signed by the authenticator.
Each extension has an identifier, and the namespace for
extension identifiers is FIDO UAF global (i.e. doesn't
depend on the message where the extension is present).
Extensions can be defined in a way such that a processing
entity which doesn't understand the meaning of a specific
extension MUST abort processing, or they can be specified
in a way that unknown extension can (safely) be ignored.
Extension processing rules are defined in each section
where extensions are allowed.
Contains arbitrary data with a semantics agreed
between server and client. Binary data is base64url-encoded.
This field MAY be empty.
fail_if_unknown of type required boolean
Indicates whether unknown extensions
must be ignored (false) or must lead to an
error (true).
A value of false indicates that unknown extensions MUST be ignored
A value of true indicates that unknown extensions MUST result in an error.
Note
The FIDO UAF Client might (a) process an extension or (b) pass the
extension through to the ASM. Unknown extensions must be passed through.
The ASM might (a) process an extension or (b) pass the
extension through to the FIDO authenticator. Unknown extensions must be passed through.
The FIDO authenticator must handle the extension or ignore it
(only if it doesn't know how to handle it andfail_if_unknown is not set). If the FIDO authenticator doesn't understand the
meaning of the extension and fail_if_unknown is set, it must generate an error
(see definition of fail_if_unknown above).
When passing through an extension to the next entity, the fail_if_unknown flag
must be preserved (see [UAFASM] [UAFAuthnrCommands]).
FIDO protocol messages are not signed. If the security
depends on an extension being known or processed, then such extension
should be accompanied by a related (and signed) extension in the authenticator
assertion (e.g. TAG_UAFV1_REG_ASSERTION,
TAG_UAFV1_AUTH_ASSERTION). If the security has been increased (e.g.
the FIDO authenticator according to the description in the metadata statement accepts
multiple fingers but in this specific case indicates that the finger used at registration
was also used for authentication) there is no need to mark the extension as
fail_if_unknown (i.e. tag 0x3E12 should be used [UAFAuthnrCommands]).
If the security has been degraded (e.g. the FIDO authenticator according to the
description in the metadata statement accepts only the finger used at registration for
authentication but in this specific case indicates that a different finger was used
for authentication) the extension must be marked as fail_if_unknown
(i.e. tag 0x3E11 must be used [UAFAuthnrCommands]).
3.1.11 MatchCriteria dictionary
Represents the matching criteria to
be used in the server policy.
The MatchCriteria object is considered to match an authenticator, if
all fields in the object are considered to match (as indicated
in the particular fields).
List of AAIDs, causing matching to be restricted to certain AAIDs.
The field m.aaidMAY be combined with (one or more of) m.keyIDs,
m.attachmentHint, m.authenticatorVersion,
and m.exts, but m.aaidMUST NOT be combined with any other match criteria field.
If m.aaid is not provided -
at least m.authenticationAlgorithms and
m.assertionSchemesMUST be provided.
The match succeeds if at least one AAID entry in this array
matches AuthenticatorInfo.aaid [UAFASM].
The vendorID causing matching to be restricted to
authenticator models of the given vendor. The first 4 characters of
the AAID are the vendorID (see AAID)).
The match succeeds if at least one entry
in this array matches the first 4
characters of the AuthenticatorInfo.aaid [UAFASM].
Note
This field corresponds to the first 4
characters of MetadataStatement.aaid [FIDOMetadataStatement].
A list of authenticator KeyIDs causing matching to be
restricted to a given set of KeyID instances. (see TAG_KEYID in
[UAFRegistry]).
This match succeeds if at least one entry in this array matches.
Note
This field corresponds to AppRegistration.keyIDs [UAFASM].
userVerification of type unsigned long
A set of 32 bit flags which may be set if
matching should be restricted by the user verification method (see
[FIDORegistry]).
Note
The match with AuthenticatorInfo.userVerification
([UAFASM]) succeeds, if the following condition
holds (written in Java):
if (
// They are equal
(AuthenticatorInfo.userVerification == MatchCriteria.userVerification) ||
// USER_VERIFY_ALL is not set in both of them and they have at least one common bit set
(
((AuthenticatorInfo.userVerification & USER_VERIFY_ALL) == 0) &&
((MatchCriteria.userVerification & USER_VERIFY_ALL) == 0) &&
((AuthenticatorInfo.userVerification & MatchCriteria.userVerification) != 0)
)
)
Note
This field value can be derived from MetadataStatement.userVerificationDetails
as follows:
if MetadataStatement.userVerificationDetails contains
multiple entries, then:
if one or more entries MetadataStatement.userVerificationDetails[i]
contain multiple entries, then: stop, direct derivation is not possible. Must generate
MatchCriteria object by providing a list of matching AAIDs.
if all entries MetadataStatement.userVerificationDetails[i] only contain
a single entry, then: combine all entries
MetadataStatement.userVerificationDetails[0][0].userVerification to
MetadataStatement.userVerificationDetails[N-1][0].userVerification into
a single value using a bitwise OR operation.
if MetadataStatement.userVerificationDetails contains
a single entry, then: combine all entries
MetadataStatement.userVerificationDetails[0][0].userVerification to
MetadataStatement.userVerificationDetails[0][N-1].userVerification into
a single value using a bitwise OR operation and (if multiple bit flags have been set) additionally set the flag
USER_VERIFY_ALL.
This method doesn't allow matching authenticators
implementing complex combinations of user verification methods, such as
PIN AND (Fingerprint OR Speaker Recognition) (see above derivation rules).
If such specific match rules are required, they need to be specified by providing
the AAIDs of the matching authenticators.
keyProtection of type unsigned short
A set of 16 bit flags which may be set if
matching should be restricted by the key protections used (see
[FIDORegistry]).
This match succeeds, if at least one of the bit flags matches the
value of AuthenticatorInfo.keyProtection [UAFASM].
A set of 16 bit flags which may be set if
matching should be restricted by the matcher protection (see
[FIDORegistry]).
The match succeeds if at least one of the bit flags matches the
value of AuthenticatorInfo.matcherProtection [UAFASM].
Note
This field corresponds to the
MetadataStatement.matcherProtection metadata
statement. See [FIDOMetadataStatement].
attachmentHint of type unsigned long
A set of 32 bit flags which may be set if matching
should be restricted by the authenticator attachment
mechanism (see [FIDORegistry]).
This field is considered to match, if at least one
of the bit flags matches the value of AuthenticatorInfo.attachmentHint [UAFASM].
Note
This field corresponds to the
MetadataStatement.attachmentHint metadata
statement.
tcDisplay of type unsigned short
A set of 16 bit flags which may be set if matching
should be restricted by the transaction confirmation
display availability and type. (see [FIDORegistry]).
This match succeeds if at least one of the bit flags matches the
value of AuthenticatorInfo.tcDisplay [UAFASM].
Note
This field corresponds to the
MetadataStatement.tcDisplay metadata statement. See [FIDOMetadataStatement].
authenticationAlgorithms of type array of unsigned short
An array containing values of
supported authentication algorithm TAG values (see
[FIDORegistry], prefix ALG_SIGN) if
matching should be restricted by the supported
authentication algorithms. This field MUST be present,
if field aaid is missing.
This match succeeds if at least one entry in this array matches
the AuthenticatorInfo.authenticationAlgorithm [UAFASM].
Note
This field corresponds to the
MetadataStatement.authenticationAlgorithm metadata statement. See [FIDOMetadataStatement].
assertionSchemes of type array of DOMString
A list of supported assertion
schemes if matching should be restricted by the supported schemes. This field MUST be present,
if field aaid is missing.
This match succeeds if at least one entry in this array matches
AuthenticatorInfo.assertionScheme [UAFASM].
Note
This field corresponds to the
MetadataStatement.assertionScheme metadata
statement. See [FIDOMetadataStatement].
attestationTypes of type array of unsigned short
An array containing the preferred attestation
TAG values (see [UAFRegistry], prefix TAG_ATTESTATION).
The order of items MUST
be preserved. The most-preferred attestation type comes first.
This match succeeds if at least one entry in this array matches
one entry in AuthenticatorInfo.attestationTypes [UAFASM].
Note
This field corresponds to the
MetadataStatement.attestationTypes metadata statement. See [FIDOMetadataStatement].
authenticatorVersion of type unsigned short
Contains an authenticator version number, if matching should be
restricted by the authenticator version in use.
This match succeeds if the value is lower or equal to
the field AuthenticatorVersion included
in TAG_UAFV1_REG_ASSERTION or TAG_UAFV1_AUTH_ASSERTION or
a corresponding value in the case of a different assertion scheme.
Note
Since the semantic of the authenticatorVersion depends
on the AAID, the field authenticatorVersion should always be
combined with a single aaid
in MatchCriteria.
This field corresponds to the
MetadataStatement.authenticatorVersion metadata
statement. See [FIDOMetadataStatement].
The use of authenticatorVersion in the policy is deprecated since there is no standardized way
for the FIDO Client to learn the authenticatorVersion.
The authenticatorVersion is included in the auhentication assertion and hence
can still be evaluated in the FIDO Server.
accepted of type array of array of required MatchCriteria
This field is a two-dimensional array describing the
required authenticator characteristics for the server to accept
either a FIDO registration, or authentication operation for a particular purpose.
This two-dimensional array can be seen as a list of sets. List elements
(i.e. the sets) are alternatives (OR condition).
All elements
within a set MUST be combined:
The first array index indicates OR conditions (i.e. the list).
Any set of authenticator(s) satisfying these MatchCriteria in
the first index is acceptable to the server for
this operation.
Sub-arrays of MatchCriteria in the second index (i.e. the set)
indicate that multiple authenticators (i.e. each set element)
MUST be registered or authenticated to be accepted by the server.
The MatchCriteria array represents ordered preferences by the
server. Servers MUST put their preferred authenticators
first, and FIDO UAF Clients SHOULD respect those preferences,
either by presenting authenticator
options to the user in the same order, or by offering to
perform the operation using only the highest-preference authenticator(s).
Note
This list MUST NOT be empty. If the FIDO Server accepts any authenticator, it can follow the example below.
Any authenticator that matches
any of MatchCriteria contained
in the field disallowed MUST be excluded from
eligibility for the operation, regardless of whether
it matches any MatchCriteria present in the accepted list, or not.
3.2 Processing Rules for the Server Policy
This section is normative.
The FIDO UAF Client MUST follow the following rules while parsing server
policy:
During registration:
Policy.accepted is a list of combinations. Each combination
indicates a list of criteria for authenticators that the server
wants the user to register.
Follow the priority of items in Policy.accepted[][]. The lists
are ordered with highest priority first.
Choose the combination whose criteria best match the features of the
currently available authenticators
Collect information about available authenticators
Ignore authenticators which match the Policy.disallowed criteria
Match collected information with the matching criteria imposed
in the policy (see MatchCriteria
dictionary for more details on matching)
Guide the user to register the authenticators specified in the
chosen combination
During authentication and transaction confirmation:
Note
Policy.accepted is a list of combinations. Each
combination indicates a set of criteria which is enough to completely
authenticate the current pending operation
Follow the priority of items in Policy.accepted[][]. The lists
are ordered with highest priority first.
Choose the combination whose criteria best match the features of the
currently available authenticators
Collect information about available authenticators
Ignore authenticators which meet the Policy.disallowed criteria
Match collected information with the matching criteria described
in the policy
Guide the user to authenticate with the authenticators specified
in the chosen combination
A pending operation will be approved by the server only after all
criteria of a single combination are entirely met
3.2.1 Examples
This section is non-normative.
Example 2: Policy matching either a FPS-, or Face
Recognition-based Authenticator
Combining these two bit-flags and the flag USER_VERIFY_ALL (USER_VERIFY_ALL = 1024) into
a single userVerification value would
match authenticators implementing FPS and Face Recognition as a mandatory combination of user
verification methods.
Example 4: Policy matching authenticators
implementing FPS and Face Recognition as mandatory combination of
user verification methods.
The UAF protocol includes multiple versioned constructs:
UAF protocol version, the
version of Key Registration Data and Signed Data objects
(identified by their respective tags, see [UAFRegistry]), and
the ASM version, see [UAFASM].
Note
The Key Registration Data and Signed Data objects have to be parsed
and verified by the FIDO Server. This verification is only
possible if the FIDO Server understands their encoding and the
content. Each UAF protocol version supports a set of
Key Registration Data and SignedData object versions (called Assertion Schemes).
Similarly each of the ASM versions supports a set Assertion Scheme versions.
As a consequence the FIDO UAF Client MUST select the authenticators
which will generate the appropriately versioned constructs.
For version negotiation the FIDO UAF Client MUST perform the following steps:
Create a set (FC_Version_Set) of version pairs,
ASM version (asmVersion) and UAF Protocol version (upv) and add all pairs
supported by the FIDO UAF Client into FC_Version_Set
e.g. [{upv1, asmVersion1}, {upv2, asmVersion1}, ...]
Note
The ASM versions are retrieved from the AuthenticatorInfo.asmVersion field.
The UAF protocol version is derived from the related AuthenticatorInfo.assertionScheme field.
Intersect FC_Version_Set with the set of upv included in UAF
Message (i.e. keep only those pairs where the upv value is also
contained in the UAF Message).
Select authenticators which are allowed by the UAF Message Policy.
For each authenticator:
Construct a set (Authnr_Version_Set) of version pairs
including authenticator supported asmVersion and the
compatible upv(s).
e.g. [{upv1, asmVersion1}, {upv2, asmVersion1}, ...]
Intersect Authnr_Version_Set with FC_Version_Set
and select highest version pair from it.
Take the pair where the upv is highest. In all these
pairs leave only the one with highest asmVersion.
Use the remaining version pair with this authenticator
Note
Each version consists of major and minor fields.
In order to compare two versions - compare the Major fields and if they are equal
compare the Minor fields.
Each UAF message contains a version field upv. UAF Protocol
version negotiation is always between FIDO UAF Client and FIDO
Server.
A possible implementation optimization is to have the RP web
application itself preemptively convey to the FIDO Server the UAF
protocol version(s) (UPV) supported by the FIDO Client. This
allows the FIDO Server to craft its UAF messages using the
UAF version most preferred by both the FIDO client and server.
3.4 Registration Operation
Note
The Registration operation allows the FIDO Server and the FIDO
Authenticator to agree on an authentication key.
Fig. 6UAF Registration Sequence Diagram
The steps 11a and 11b and 12 to 13 are not always necessary
as the related data could be cached.
The following diagram depicts the cryptographic data flow for
the registration sequence.
The FIDO UAF Client computes the FinalChallengeParams (FCH) from
the ServerChallenge and some other values
and sends the AppID, the FCH and the
Username to the authenticator.
The authenticator creates a Key Registration Data object (e.g. TAG_UAFV1_KRD,
see [UAFAuthnrCommands]) containing the hash of FCH, the newly
generated user public key (UAuth.pub) and some other values and
signs it (see section Authenticator Attestation
for more details). This KRD object is then
cryptographically verified by the FIDO Server.
3.4.1 Registration Request Message
UAF Registration request message is represented as an array of dictionaries.
The array MUST contain exactly one dictionary.
The request is defined as
RegistrationRequest dictionary.