Key Management Based on Ownership of Multiple Authenticators in Public Key Authentication
Abstract.
Public key authentication (PKA) has been deployed in various services to provide stronger authentication to users. In PKA, a user manages private keys on her devices called authenticators, and services bind the corresponding public keys to her account. To protect private keys, a user uses authenticators which never export private keys outside. On the other hand, a user regularly uses multiple authenticators like PCs and smartphones. She replaces some of her authenticators according to their lifecycle, such as purchasing new devices and losing devices. It is a burden for a user to register, update and revoke public keys in many services every time she registers new accounts with services and replaces some of her authenticators. To ease the burden, we propose a mechanism where users and services manage public keys based on the owner of authenticators and users can access services with PKA using any of their authenticators. We introduce a key pair called an Ownership Verification Key (OVK), which consists of the private key (OVSK) and the corresponding public key (OVPK). All authenticators owned by a user derive the same OVSK from the pre-shared secret called the seed. Services verify the ownership of the authenticators using the corresponding OVPK to determine whether binding the requested public key to her account. To protect user privacy while maintaining convenience, authenticators generate a different OVK for each service from the seed independently. We demonstrate the feasibility through the Proof of Concept implementation, show that our proposed mechanism achieves some security goals, and discuss how the mechanism mitigates threats not completely handled.
1. Introduction
Password authentication has long been essential for remote access to services that require user authentication (Morris and Thompson, 1979), but there remain many problems with it (Bonneau et al., 2012). Phishing, for example, is a problem caused by asking users to present their passwords every time they use a service (Anti-Phising Working Group, 2021). It is also a problem that users use the same password for many services or use short passwords because they don’t want to remember many complex passwords (Adams and Sasse, 1999; Gaw and Felten, 2006).
Public key authentication is an alternative to password authentication for stronger authentication. Public key authentication assumes that only a user has a private key, and a service has the corresponding public key. A service authenticates a user in the following three steps. First, the service sends a random number called a challenge to the user. Second, she signs the challenge by the private key corresponding to the public key registered with the service. Third, the service verifies the signature by any one of the public keys bound to her account.
Services have to manage the binding of public keys to a user’s account. Services trust this binding based on several models, where trusted third parties ensure the binding (e.g., Individual Number Card in Japan (Cabinet Office, Government of Japan, 2022) and WebPKI (Boeyen et al., 2008)) and where they receive keys from users directly via trusted channels (e.g., FIDO (FIDO, 2021) and SSH (Lonvick and Ylonen, 2006)). This study will focus on the last model.
Users have to manage private keys corresponding to registered public keys on their devices. We call these devices authenticators. Authenticators, such as Yubikey (Yubico, 2021) and Keychain (Apple, 2021), store key pairs in secure storage where corresponding private keys cannot be exported nor easily accessed by the outside of the authenticator. Operations using keys stored in secure storage require local authentication by authenticators, like PIN or biometrics. This study assumes that users use authenticators having secure storage.
An authenticator has a mechanism called attestation (Powers, 2018) that proves that an operation is done surely by the authenticator. An attestation includes information about the manufacturer of the authenticator which generates the attestation, the model name of the authenticator, and results of the operation done by the authenticator, such as the public key of a generated key pair. Attestations are signed by the attestation key embedded in an authenticator by its manufacturer so that services can validate whether received attestations are generated by the authenticator. During account registration, an authenticator sends a public key, an attestation about the public key, and the certificate of the attestation key. Services can determine the trustworthiness of the received public key and the authenticator that stores the corresponding private key by verifying the attestation with the certificates received from the manufacturer of the authenticator.
Public key authentication (PKA) is stronger than password authentication for the following reason. First, PKA is resistant to data breaches on services because attackers cannot sign in to services with only public keys. Second, PKA can be phishing resistant when an authenticator verifies whether the requested service is the same as the service accessed previously without interaction with a user. Lastly, users don’t have to use weak private keys for convenience, because authenticators, not users, remember and manage these keys. Besides, Malicious services cannot correlate their account using registered public keys because authenticators generate different public keys for each service.
However, public key authentication has the problem that users can only use authenticators storing private keys corresponding to registered public keys when accessing services. Given the following two concerns, it is a burden for users to register, update and revoke public keys in many services. First, users usually have multiple authenticators such as smartphones, PCs, and tablets. They have to register multiple public keys with their authenticators, but simply registering public keys with each of all authenticators annoys users (Ghorbani Lyastani et al., 2020). Second, users add, replace, and throw away their authenticators according to the lifecycles of the authenticators. Once such an event occurs, users need to update and revoke registered public keys in many services. Currently, users can manage registered public keys on services via an authenticated session. If an attacker steals an authenticator and revokes the public keys of authenticators held by a legitimate user before the user revokes the public key of the stolen authenticator, the user may become inaccessible.
The purpose of this study is that users can access services with public key authentication using any owned authenticators without explicitly registering public keys. To realize this purpose, we propose the mechanism where users and services manage public keys based on the owner of authenticators storing the corresponding private keys. We introduce a key pair, called an Ownership Verification Key (OVK). A user proves the ownership of authenticators by the private key of an OVK (Ownership Verification Secret Key; OVSK). A service verifies the possession of the authenticators by the public key of the OVK (Ownership Verification Public Key; OVPK). All authenticators owned by a user can derive an OVSK from a seed pre-shared among them. A service manages the corresponding OVPK by binding it to her account. A service binds public keys signed by the OVSK to her account if verification by the OVPK is successful. To protect user privacy while maintaining convenience, authenticators generate a different OVK for each service from the seed independently. Users and services update OVKs according to the lifecycles of users’ authenticators. When a user changes a set of her authenticators, she updates an OVSK, and services update an OVPK bound to her accounts.
The main contribution of this paper is that users and services can manage public keys based on the owner of the authenticators storing the corresponding private keys to facilitate their key management in public key authentication. We implemented the Proof of Concept and confirmed that key management works as expected for typical use cases. We analyzed the proposed mechanism to find threats with threat modeling and evaluated what measures our proposal takes against the found threats. We confirmed that our proposal achieves some security goals such as that services cannot correlate accounts and can correctly bind public keys to accounts. We discussed how our proposal mitigates threats for which measures are not sufficient.
The following is the structure of this paper. Section 2 describes related work. Section 3 describes the key management using OVK. Section 4 describes the implementation of the Proof of Concept and use cases using the Proof of Concept. Section 5 describes evaluation with threat modeling. Section 6 discusses the proposal. Finally, Section 7 summarizes this paper.
2. Related Work
Nishimura (Nishimura et al., 2020) proposes sharing private keys among authenticators that users own. Authenticators verify the owner of other authenticators to determine whether sharing private keys or not. To verify the owner, a trusted third party issues certificates to authenticators. However, this approach weakens the authentication level of public key authentication because authenticators export private keys from secure storage. This approach also weakens the trustworthiness of a registered public key because services cannot verify attestations. Besides, reliance on a trusted third party has a large management cost and the impact like a certificate authority in WebPKI if it becomes untrustworthy.
James (Conners and Zappala, 2019) introduces certificate chains like TLS client authentication to FIDO public keys so that FIDO is capable of registering multiple authenticators and recovering accounts. When a user registers a new public key generated in her authenticator with a service, she requests a certificate authority to issue the certificate binding the public key to her account of the service. The authenticator sends the certificate to the service and the service can verify the owner of the public key by checking the subject of the certificate. However, this approach has the problem that it is not clear how a certificate authority authenticates users using multiple authenticators in addition to the same problem due to a trusted third party as (Nishimura et al., 2020).
Oogami (Oogami et al., 2020) proposes the mechanism in which users register a new FIDO public key of an authenticator via authenticated sessions established by the registered public key of other authenticators. Public keys have high assurance because users use registered authenticators every time users register a new public key of an authenticator. However, users have to keep multiple authenticators at the same time when registering a new public key, so that users cannot register a new public key when they have only unregistered authenticators.
Frymann (Frymann et al., 2020) and Lundberg (Lundberg and Nilsson, 2021) propose a mechanism for account recovery when losing registered authenticators that users use daily. In this mechanism, a user has two authenticators. One is for daily use by users, called the main authenticator. The other is for backup use by users, called the backup authenticator. The user deposits the backup authenticator in a vault. The main authenticator receives the seed for deriving public keys from the backup authenticator in advance. On behalf of the backup authenticator, the main authenticator generates a different public key of the backup authenticator for each service and registers the public key whose corresponding private key the backup authenticator can only derive. The user can access services with the backup authenticator when losing the main authenticator. As a result, this approach prevents services from correlating their account based on the registered public keys. However, services cannot verify the attestation of the public key of the backup authenticator during registration. Besides, when attackers gain control of the backup authenticator, they sign in with the backup authenticator and can revoke the public key of the main authenticator, and the user cannot sign in with the main authenticator.
Identity Federations using OpenID Connect (Sakimura et al., 2014) or SAML (OASIS Security Services TC, 2005) allow users to reduce the number of services where users register public keys. However, users still register public keys with several services. Besides, there are also privacy issues where the service authenticating users, called an Identity Provider, can know what services they are using.
3. Key Management with an Ownership Verification Key
3.1. Overview
We propose the mechanism where a user and a service manage keys for authentication based on a public key cryptographic key pair called an Ownership Verification Key (OVK). An OVK is derived by all authenticators of a user to prove that the private key corresponding to the public key to be registered is stored in her owned authenticator. The public key of the OVK (Ownership Verification Public Key; OVPK) is registered with the service via the trusted channel established when registering a new account. The service binds the OVPK to her account. The private key of the OVK (Ownership Verification Secret Key; OVSK) is used for signing the public key to be registered. The service binds the public key to her account if verification by the OVPK is successful.
Fig. 1 illustrates how a user registers a public key when she has two authenticators (A and B). She shares an OVSK among Authenticators A and B in advance. When she registers a new account using Authenticator A, she attaches a public key for Authenticator A and an OVPK to the service. Then she seamlessly registers a new public key for Authenticator B by signing the public key with the OVSK whose corresponding OVPK has been already registered with Authenticator A. The service verifies the signature by the registered OVPK and, if succeeded, binds the public key to her account.

Users and services update OVKs according to the lifecycles of users’ authenticators. When a user changes a set of her authenticators, she updates an OVK in her all authenticators and notifies services of updating the OVPK. To make an updating message, registered authenticators sign the new OVPK to be updated by the previous OVSK whose corresponding OVPK is now registered with services. Services update an OVPK bound to her account based on the most trustworthy updating message and re-bind public keys to her account based on the new OVPK. A user can still sign in with authenticators that have notified services of the new OVPK. To invalidate the authenticators that are no longer in use, services revoke the public key corresponding to the authenticators that are not bounded to the new OVPK.

Fig, 2 illustrates how a user updates an OVK when she has had two authenticators (A and B) and registered them with a service and replaces Authenticator A with Authenticator C because of losing Authenticator A. After losing Authenticator A, she shares a new OVSK between Authenticators B and C. Authenticator B derives the new OVK () and signs the new OVPK () by the previous OVSK () to make an updating message. Authenticator B notifies the service of the new OVPK () by sending the updating message. The service evaluates the message received from Authenticator B as the most trustworthy and binds the new OVPK to her account. It re-binds the public key for Authenticator B to her account because B has sent the most trustworthy message and revokes the public key for Authenticator A because A has sent no messages. Then she can seamlessly register a new public key for Authenticator C by signing the public key with the new OVSK () whose corresponding OVPK () has been already registered by Authenticator B.
The following is the structure of this section. Section 3.2 describes how to derive an OVK among authenticators. We introduce a pre-shared secret called a seed to derive an OVK. Section 3.3 describes how to share a seed among authenticators. Section 3.4 describes how services verify the trustworthiness of an OVK requested to be registered. Section 3.5 describes how to update an OVK after sharing a new seed.
3.2. Deriving an OVK from a Shared Secret
In this section, we describe how to derive an OVK from the pre-shared secret, called the seed. We assume that the seed has been shared among all authenticators owned by the same user. We also explain how to register public keys using an OVK.
3.2.1. Requirement
We define the requirements in such a way that our proposal does not interfere with what public key authentication described in Section 1, which we call PKA, can achieve during public key registration (Rolf Lindemann, 2018; FIDO Alliance, 2021).
First, our proposed method should not rely on trusted third parties for proving the owner of authenticators except for verifying attestations and establishing secure channels. In PKA, users can register public keys via a trusted channel established when registering a new account or established by registered authenticators.
Second, our proposed method must prevent services from correlating their account by using the proof of the owner of authenticators. In PKA, users can register different public keys with each service to protect user privacy against services seeking to correlate their accounts based on registered public keys.
Third, in our proposed method, services should verify the attestation of the public key requested to be registered. Services can calculate the trustworthiness of the public key by verifying the attestation generated by the authenticator that has the corresponding private key.
Finally, our proposed method should minimize the number of times a user operates multiple authenticators at the same time for convenience. Operating multiple authenticators at the same time whenever registering a new public key annoys a user.
3.2.2. Deriving an OVK
We explain our proposal using Fig. 3, which shows a case where a user has two authenticators, A and B. A user registers a new account with service using Authenticator A at first, and then she accesses the service using Authenticator B. Note that we assume that messages between authenticators and the service have protected in terms of service authentication, confidentiality, and integrity (e.g., via TLS).

The two authenticators agree in advance on the following parameters and the identifier of service ().
-
•
s: The seed value shared among authenticators (\scriptsize1⃝)
-
•
N: The number of authenticators sharing the same seed (equal to the number of her authenticators)
-
•
The public key cryptographic algorithm for an OVK
-
•
KDF: The key derivation function that takes a seed and a random value as inputs and outputs pseudorandom numbers of the length required for an OVSK
-
•
MAC: The message authentication code function that takes an OVSK as a key
First, the user registers a new account with service using Authenticator A. Authenticator A generates a new key pair () and an attestation of the public key (\scriptsize2⃝ in Fig. 3). At the same time, Authenticator A derives an OVPK and the corresponding metadata and registers them in addition to the public key () with service . The derivation consists of the following three steps.
-
\scriptsize\theenumi⃝
Generate a random number ().
-
\scriptsize\theenumi⃝
Calculate an OVSK () and the corresponding OVPK (). If the authenticator cannot derive validate OVSK using the random number (), start over from \scriptsize3⃝.
-
\scriptsize\theenumi⃝
Register and the corresponding metadata consisting the following three values.
-
•
: The generated random number
-
•
: The message authentication code ()
-
•
N
-
•
Now, the user has registered a new account with service . The service binds the public key (), , and the corresponding metadata () to the new account.
Second, the user access service using unregistered Authenticator B. When the service returns a challenge for public key authentication by replying to an authentication request, it also returns the metadata ( and ). Authenticator B starts on seamless registration of a new public key because B has no public key for signing in to service . Authenticator B generates a new key pair () and the attestation of the public key (\scriptsize8⃝ in Fig. 3). Authenticator B signs the public key () by so that service verifies whether the owner of Authenticator B storing the corresponding private key () is the same as the owner of registered authenticators. To derive from the received metadata, the following two steps are performed.
-
\scriptsize\theenumi⃝
Derive using the received metadata in the same way as \scriptsize4⃝.
-
\scriptsize\theenumi⃝
Verify the received metadata using the derived . If this verification failed, the derived OVSK or the received metadata is not for service .
Service registers the public key () if the attestation (\scriptsize8⃝) and the signature (\scriptsize9⃝) is valid and the number of the registered public keys is not more than N.
3.2.3. Different OVKs per Service
Authenticators can derive different OVKs per service because of generating different random numbers (R) per service. Fig. 4 shows a situation where the user registers with Services and . It is impossible to determine the seed value of an OVSK because of the properties of a key derivation function (KDF). By using a different random number for each service ( for Service and for Service ), authenticators can register unlinkable OVPKs with different services.

Authenticators only need to remember the value of the seed. This is because authenticators store random numbers R to services in a verifiable format. Moreover, even though the number of registered services increases, a user does not have to operate multiple authenticators to share a new OVSK. This is convenience for a user.
3.3. Sharing a Seed among Authenticators
In this section, we describe how to share a seed among authenticators of a user.
3.3.1. Requirement
A user operates multiple authenticators and makes them communicate to share a seed. There are various kinds of short-range communication protocols (e.g., Bluetooth, NFC, and generating and reading QR codes), each of which has its different characteristics in the security of the communication channel. We define the following requirement to be independent of specific communication protocols.
-
•
Assuming no security features of communication channels
This requires that attackers cannot calculate a seed using only the information that authenticators send to the channel (resistance to eavesdropping). This also requires that authenticators can validate whether the received information is generated by the legitimate authenticator to be resistant to tampering.
3.3.2. Two Authenticators
Fig. 5 shows the case where a user has two authenticators. Two authenticators agree on the same seed based on the Diffie-Hellman key agreement algorithm. They encrypt DH public keys using an authenticated encryption based on a password set by the user to ensure the confidentiality of DH public keys and verify the authenticity.

The authenticators agree on the following parameters in advance.
-
•
pw: The password set by the user (\scriptsize1⃝)
-
•
DH: A Diffie-hellman key agreement algorithm
-
•
The list of authenticated encryption algorithms for encrypting DH public keys (Each algorithm has assigned an identifier)
-
•
The list of password-based encryption algortihms (Each algorithm has assigned an identifier)
First, the user operates Authenticator A.
-
\scriptsize\theenumi⃝
Generate a DH key pair ().
-
\scriptsize\theenumi⃝
Generate a random number called a Content Encryption Key ().
-
\scriptsize\theenumi⃝
Encrypt the DH public key () using . Authenticator A determines the authenticated encryption algorithm from the list.
-
\scriptsize\theenumi⃝
Encrypt using the password (pw). Authenticator A determines the password-based algorithm from the list.
Authenticator A sends the generated ciphertexts and the algorithm identifiers (at \scriptsize4⃝ and \scriptsize5⃝) to Authenticator B.
In the same way, Authenticator B generates a DH key pair ( at \scriptsize6⃝) and a random number ( at \scriptsize7⃝), encrypts the DH public key () using , and encrypts using the password (pw). Note that is not necessarily the same as generated by Authenticator A.
Authenticator A receives the ciphertexts from Authenticator B.
-
\scriptsize\theenumi⃝
Decrypt a received CEK () using the password (pw). Authenticator A identifies the password-based algorithm by the received identifier.
-
\scriptsize\theenumi⃝
Decrypt a received DH public key () using the decrypted CEK (). Authenticator A identifies the authenticated encryption algorithm by the received identifier.
-
\scriptsize\theenumi⃝
Agree the same seed using the Diffie-hellman key agreement algorithm.
3.3.3. Three or More Authenticators
When a user has three or more authenticators, the authenticators share a seed like the situation in Fig. 6. Fig. 6 uses the algorithm (Steiner et al., 1996). All authenticators agree on the following parameters in advance in addition to the agreement for two authenticators.
-
•
Each authenticator identifier (These identifiers are temporary identifiers used only to share a seed)
-
•
The partner authenticator identifier of each authenticator (Each authenticator receives calculated DH public keys from the same authenticator, called the partner authenticator, every step. The user assigns identifiers without overlap.)

The user operates authenticators according to the following steps. In each step, encryption means that an authenticator generates a CEK, encrypts a DH public key using the CEK, and encrypts the CEK using the password set by a user.
- Step1:
-
Generate a DH key pair on each authenticator.
- Step2:
-
-
•:
Authenticator A sends the DH public key () to Authenticator B with encryption.
-
•:
B sends the DH public key () to C with encryption.
-
•:
C sends the DH public key () to A with encryption.
-
•:
- Step3:
-
-
•:
Authenticator A sends the calculated DH public value () using its DH private key () and received DH public key () to Authenticator B with encryption.
-
•:
B sends the calculated DH public value () using its DH private key () and received DH public key () to C with encryption.
-
•:
C sends the calculated DH public value () using its DH private key () and received DH public key () to A with encryption.
-
•:
- Step4:
-
-
•:
Authenticator A calculates the DH public value () and agrees the same seed.
-
•:
B calculates the DH public value () and agrees the same seed.
-
•:
C calculates the DH public value () and agrees the same seed.
-
•:
When a user has more than three authenticators (: the number of her authenticators), she processes the above Step1 to Step with repeating the above Step3.
3.4. Verifying the Trustworthiness of an OVK
Because a service binds public keys to an account by an OVK, the trustworthiness of public keys can never be higher than the trustworthiness of the OVK. We propose how a service verifies the trustworthiness of an OVK.
A service can evaluate the trustworthiness of an OVK using the following two criteria.
- Criterion1:
-
Whether an OVK is derived as described in Section 3.2
- Criterion2:
-
Whether a seed is securely stored in all authenticators
The proposed verification mechanism depends on the attestation mechanism that authenticators already have. Authenticators send an OVPK as well as the attestation of the OVPK at \scriptsize5⃝ on Fig. 3.

Fig. 7 extracts the registration flow of an OVPK from Fig. 3 and describes more details about attestations of public keys. An attestation private key () is embedded in an authenticator by its manufacturer. A certificate for the attestation public key () is issued by the manufacturer. The authenticator signs the public key generated at \scriptsize2⃝ and the information about the public key by using and sends them to a service.
The authenticator also signs a derived OVPK by to notify the service that the OVPK is derived from the seed stored in the authenticator as described in Section 3.2.2. The service can verify the attestation of the OVPK based on the trusted policy about what authenticators comply with Section 3.2. The service can validate Criterion1.
Moreover, an attestation of an OVPK contains the OVPK itself and model names of the other authenticators sharing the same seed. An authenticator gets the model names of the other authenticators by receiving the attestation of their DH public key while sharing the seed at \scriptsize2⃝ on Fig. 5 (Fig. 8). A service can verify whether they store the seed securely based on the trusted policy about what authenticator model has secure storage and stores the seed in the storage. The service can validate Criterion2.

3.5. Re-sharing a New Seed and Updating an OVK
A user updates a set of her authenticators according to lifecycles of the authenticators, such as theft or loss. We propose a mechanism where a user can revoke an OVPK registered with a service and update a new OVPK in the service.
3.5.1. Assumption
We assume the following for this proposal.
-
(1)
Attackers can operate the seed and the private keys corresponding to registered public keys stored in a stolen authenticator.
-
(2)
It takes time for attackers to gain control of a stolen authenticator.
Assumption 2 is reasonable when authenticators protect the seed and private keys by local authentication like PIN or biometric. In Section 6.4, we consider the case where authenticators have no local authentication, or where local authentication is immediately passed.
3.5.2. Overview
Authenticators share a new seed as described in Section 3.3. They hold the previous seed along with a new one without erasing the previous one. They notify a service of updating an OVK by sending an updating message described in Section 3.5.3 when a user signs in for the first time after re-sharing the new seed. The service that receives updating messages waits for some period (OVK migration period) and accepts the new OVPK from the most trustworthy updating message. A service calculates the trustworthiness of each updating message in the way described in Section 3.5.4. The service re-binds public keys to the user’s account by verifying with the new OVPK and revokes the public key bound only to the previous OVPK.
3.5.3. An Updating Message for a New OVK
We describe how an authenticator generates an updating message for a new OVK in Fig. 9.

-
\scriptsize\theenumi⃝
The authenticator receives the metadata from the service to derive OVKs from seeds. There are two kinds of received metadata. The first one is the metadata () for the previously registered OVK (). The second one is the metadata () for OVK () candidates that other authenticators have registered as new OVKs. The authenticator receives the second one as a list because attackers can also generate a malicious updating message derived from a seed by using a stolen authenticator.
-
\scriptsize\theenumi⃝
The authenticator derives the previously registered OVK () from the received metadata () and the previous seed () as described in Section 3.2. The authenticator uses the same key derivation function (KDF) as the one used in Section 3.2. The authenticator verifies whether the derived OVK () is legitimate by comparing calculated MAC value with . If the verification fails, the authenticator aborts this update process.
-
\scriptsize\theenumi⃝
The authenticator derives the new OVK () from the received metadata () and the newly shared seed (). If the metadata is not an empty list, the authenticator derives the new OVK from the legitimate metadata () with which the authenticator can verify the MAC value (). If the metadata is an empty list or the metadata has no legitimate metadata, the authenticator generates a new random value () and then derives a new OVK. Note that the previously registered OVK () is not used to derive the new OVK (), but used to generate an updating message.
-
\scriptsize\theenumi⃝
The authenticator signs the new OVPK () by the OVSK () corresponding to the previously registered OVPK (). The authenticator sends the signature as an updating message when signing in. Because the updating message is signed by the private key corresponding to the registered public key, the service can identify the authenticator sending the updating message.
In the above explanation, we assume that authenticators have two shared seeds. However, authenticators may have more than two seeds because users change their authenticators many times. Users replace their authenticators when purchasing new devices and may lose their authenticators more than once. We explain that authenticators can generate the correct updating message even when they have more than two seeds. Authenticators select the latest seed as the new seed. As the seed corresponds to registered OVPK, authenticators can select the seed successfully by verifying the MAC value of the received metadata. From the above, authenticators can send a legitimate updating message to services even when they have more than two seeds.
3.5.4. Evaluating the Trustworthiness of an Updating Message
When a service receives an updating message from a registered authenticator, it enters the OVK migration period. In this migration period, no authenticators can register a new public key by the registered OVK. If the same updating message comes from more than half of the registered authenticators during the period, the service trusts the message. Otherwise, the service trusts the updating message sent from the most registered authenticators at the end of the period. If there is more than one message sent by the most registered authenticators, the service trusts the earliest received message.
3.5.5. Reducing the Number of Seed Held by Authenticators
As described in Section 3.2.3, an authenticator can derive many different OVKs for different services from a seed. An authenticator can update OVKs multiple times without consuming a lot of storage space. However, the secure storage space that an authenticator has is limited. Therefore, we propose two methods for limiting the number of seeds that an authenticator holds.
-
(1)
Set a limit on the number of seeds that an authenticator holds. If the number of seeds exceeds the limit, it deletes the oldest seed with the consent of the user.
-
(2)
Set an expiration date for a seed. If an authenticator has a seed that is about to expire, it prompts a user to share a new seed and update OVKs. It deletes any seed that has expired.
The first method is easier to implement because a user decides whether to delete seeds. The first method does not require a user to renew OVKs periodically, even though she continues to use the same authenticators. On the other hand, in the second method, since a seed has an expiration date, OVKs also have the same expiration date. This means that a service can know when to update a seed. In the second method, a service can send security notifications to reduce operational risks such as forgetting to update OVKs.
Both have their advantages, and both can reduce disadvantages by setting limits to a large value in the first method or a longer expiration date in the second method. The choice of either method depends on a user’s preference or the limitations of authenticators.
4. Proof of Concept and Use Cases
We implement the Proof of Concept (PoC) to demonstrate the feasibility that our proposal allows users to access services with multiple authenticators. We implement the PoC using JavaScript. In the PoC implementation, one browser window is treated as one authenticator, so that we can emulate multiple authenticators on the same device. Note that the PoC stores seed, private keys, and the attestation key in not secure storage. The source code is available on GitHub 111https://github.com/hatake5051/ovk-poc.
4.1. Implementation Detail
4.1.1. Implementation of an Authenticator
Fig. 10 illustrates the implementation of an authenticator based on data flow diagrams (Bruza and van der Weide, 1993). In this figure, an ellipse represents a process, an entity between an upper line and a lower line represents a data store, and an arrow represents data flow.

SeedGenerator implements Section 3.2. Seed stores shared seeds. The bit length of each seed is 256. We statically define the following parameters required in Section 3.2 and a service identifier as the origin of the service URL.
- •
- •
- •
SeedNegotiator implements Section 3.3 except for encrypting and decrypting a DH public key by a CEK and a CEK by a password, and sending and receiving ciphertexts. Device implements these exceptions instead of SeedNegotiator. SeedNegotiator stores an ephemeral private key for the DH key agreement algorithm in EDH.
EDH stores the seed calculated as a result of the key agreement in Seed and deletes the ephemeral private key. We statically define the following parameters required in Section 3.3. We also use JSON Web Encryption Compact Serialization (Jones and Hildebrand, 2015) to serialize ciphertexts and algorithm identifiers.
- •
- •
- •
SeedUpdater implements Section 3.5. Only this process and SeedGenerator can access Seed.
Device is the process of generating key pairs and attestations and managing them based on an OVK. Credential stores generated key pairs. Attestation stores the attestation private key and the certificate of the corresponding attestation public key. Negotiating stores data used for Section 3.3 like a password. Device generates an attestation for these type of keys: public keys stored in Credential, OVPKs generated by SeedGenerator, and DH public keys calculated by SeedNegotiator.
UI is the process of communicating ciphertexts generated by Device with other authenticators and interacting with a user. We use reading and generating QR codes as the communication channel among authenticators used for Section 3.3. FetchAPI communicates with a service via a secure channel established by TLS.
4.1.2. Implementation of a Service
Fig. 11 illustrates the implementation of a service based on data flow diagrams.

StartAuthn accepts authentication requests from a user. It receives the account name of the user and responds with a challenge bound to the account and, if registered, public keys, an OVPK, and the metadata of OVPK.
Register accepts requests for registering a new account and a new public key bound to an account as described in Section 3.2. When registering a new account, a user sends a new public key, an OVPK, and the metadata of the OVPK. The user also sends an attestation of the public key and, if requested, an attestation of the OVPK. A service verifies attestations to determine whether it accepts the registration.
Authn accepts challenge responses for authentication. We use elliptic curve digital signature algorithm (Daniel R. L. Brown, 2009) with secp256r1 (Daniel R. L. Brown, 2010) for authentication. It also receives an updating message as described in Section 3.5. Update processes updating OVKs.
CredManager manages the bindings of public keys and OVPKs to accounts. Creds stores public keys bound to OVPKs. OVKM stores OVPKs and the corresponding metadata bound to accounts. Updating stores updating messages when processing updating OVPKs.
4.2. Use Cases
Using the PoC in the following scenario, we confirm that our proposal allows authenticators to share a seed, derive an OVK, register a new public key with an OVK seamlessly, and update a registered OVPK.
-
(1)
Three Authenticator A, B, and C share a seed.
-
(2)
With Authenticator A, the user registers a new public key and an OVPK with Service 1 during account registration.
-
(3)
With Authenticator B and C, she seamlessly registers new public keys with Service 1.
-
(4)
With Authenticator B, she registers a new public key and an OVPK with Service 2 during account registration.
-
(5)
With Authenticator C (not A), she seamlessly registers a new public key with Service 2.
-
(6)
Two Authenticator A and B updates a new seed (Assuming that Authenticator C is lost).
-
(7)
With Authenticator A, she notifies Service 1 of updating a new OVPK. At this time, it is still possible to sign in to Service 1 with Authenticator C.
-
(8)
With Authenticator B, she notifies Service 1 of updating the same new OVPK as the one notified with Authenticator A. At this time, Service 1 updates an OVPK bound to her account, so that it is impossible to sign in to Service 1 with Authenticator C.
-
(9)
With Authenticator B, she notifies Service 2 of updating a new OVPK. At this time, it is still possible to sign in to Service 2 with Authenticator C. After finishing the migration period, Service 2 updates an OVPK bound to her account and revokes the public key of Authenticator C. Then, with Authenticator A, she can seamlessly register a new public key with Service 2.
5. Evaluation with Threat Analysis
We evaluate our proposal by analyzing the PoC described in Section 4 based on threat modeling (Shostack, 2014; Rolf Lindemann, 2018).
5.1. Security Requirement
5.1.1. Assets to be Protected
We enumerate the assets to be protected in this proposal.
-
(1)
Private keys stored in authenticators
-
(2)
Public keys managed by services
-
(3)
The attestation key stored in each authenticator
-
(4)
The key signing attestation certificates managed by each authenticator manufacturer
-
(5)
The trusted root certificate and policy for services to validate attestations
-
(6)
The TLS private key managed by services
-
(7)
The trusted root certificate and policy for authenticators to validate TLS certificates
-
(8)
The seed stored in authenticators
-
(9)
The OVPK and corresponding metadata stored in services
-
(10)
The ephemeral DH private key generated by authenticators for sharing a seed
-
(11)
The temporary password stored in authenticators for sharing a seed
5.1.2. Security Goals
We enumerate the goals to achive in our proposal. We define the following goals while referring to goals in (Rolf Lindemann, 2018).
- SG-1:
-
Strong User Authentication: Services can authenticate users based on public key authentication.
- SG-2:
-
Unlinkability: Services cannot correlate their accounts.
- SG-3:
-
Credential Binding: Services can bind public keys to legitimate accounts.
- SG-4:
-
Attestable Properties: Services and authenticators can validate public keys by verifying attestations.
- SG-5:
-
Forgery Resistance: Be resilient from attempting to modify intercepted communications to masquerade as legitimate users.
5.1.3. Security Assumptions
We enumerate the assumptions about the environment where our proposal works.
- SA-1:
-
The processes and data stores surrounded by the trusted boundary represented by the inner dotted line in Fig. 10 are isolated from other processes on the authenticator. The authenticator requires local authentication before accessing these processes and data stores.
- SA-2:
-
The cryptographic algorithms used can achieve the objectives of each algorithm.
- SA-3:
-
A service can correctly validate the certificate chain of attestations.
- SA-4:
-
A service and an authenticator can establish a secure channel for service authentication, confidentiality for message, and integrity for messages (like TLS).
5.2. Threat Analysis
We enumerate the threats on data flow diagrams described in Section 4, and explain what goals listed in Section 5.1.2 each threat violates and what measures our proposal takes.
5.2.1. Threats on an Authenticator
In Fig. 10, a dotted line represents a trusted boundary. We focus on data flows across trusted boundaries and enumerate the threats in each of them.
First, threats arising between a user and UI include the following.
- Homograph Mis-Registration:
-
A malicious service pretends a legitimate service to make the user believes it is legitimate. It prompts the user to register a new public key seamlessly, and sends metadata stolen from other services. The malicious service correlates OVPKs by whether the user requests a new public key registration or not. This threat violates SG-2 because the malicious service can correlate different OVPKs generated for different services. Our proposal addresses this threat because authenticators verify the MAC value of the received metadata. The data protected by the MAC value contains the identifier of the service that the authenticator communicates. Because Assumption SA-4 allows authenticators to trust the communicating service identifier, authenticators can detect spoofing of services by malicious actors.
- User Verification By-pass:
-
An attacker can operate the authenticator, or an attacker can bypass the local authentication of the authenticator to operate it. This threat violates SG-1 because the attacker can masquerade as the legitimate user. Our proposal addresses this threat by transferring it to SA-1. We consider the case where this SA-1 assumption is not satisfied during the OVK update in Section 6.4.
Threats arising between a service and FetchAPI include the following.
- Service Verification Error:
-
The authenticator cannot properly authenticate services, thus it cannot correctly identify services. As a result, an attacker can eavesdrop and tamper with the communication channel. This threat violates SG-1 and SG-5 because the attacker can hijack the authenticated session. This threat also violates SG-2 because the authenticator fails to address the threat Homograph Mis-Registration described above. Our proposal addresses this threat by transferring it to SA-4.
Threats arising between another authenticator and UI include the following.
- Malicious Authenticator Linking:
-
An attacker’s authenticator participates in sharing a seed. The attacker gets the seed value itself. The attacker can use this authenticator to register a new public key with any service that a legitimate user has registered. This threat violates SG-3. Our proposal addresses this threat because a user protects sharing a seed with a password. Users are required to use passwords that are not guessable during sharing a seed.
- Weak Authenticator:
-
A user allows a weak authenticator to participate in sharing a seed. The weak authenticator does not securely protect a seed, so, when an attacker compromises the weak authenticator, the seed may be leaked. This threat violates SG-3 because the attacker can register a new public key of the attacker’s authenticator by generating the OVK with the compromised seed. Our proposal addresses this threat because each authenticator validates the security properties of other authenticators through attestations when sharing a seed.
Threats arising between Device and UI include the following.
- Malicious Authenticator:
-
A user uses a malicious authenticator. Because a user cannot rely on the malicious authenticators, this threat violates any goals. It is difficult for users to determine whether it is a legitimate authenticator from a trusted manufacturer. Our proposal addresses this threat because services maintain a list of attestation certificates of trusted manufacturers.
Threats to the authenticator include the following.
- Side Channel Attack:
-
Access to the data store that is not described in Fig. 10 compromises assets to be protected. This threat violates SG-1 if key pairs are compromised and SG-2 and SG-3 if seeds are compromised. This threat also arises another threat like Malicious Authenticator Linking if a temporary password for sharing a seed is compromised. Our proposal addresses this threat by transferring it to SA-1.
- Bad Cryptography Primitives:
-
An authenticator uses a compromised cryptographic algorithm or a weak pseudo-random number generator in the process. This threat violates SG-3 if an attacker derives the OVK. This threat also violates SG-2 if an attacker gets the seed. Our proposal addresses this threat by transferring it to SA-2.
5.2.2. Threat on a Service
In Fig. 11, we focus on data flows across trusted boundaries and enumerate the threats in each of them.
Threats arising between an authenticator and StartAuthn include the following.
- Linking OVPK:
-
An attacker can obtain the OVPK and metadata associated with the account. The attacker receives OVPKs and corresponding metadata from many services and attempts to derive corresponding OVSKs. The attacker also attempts to correlate collected OVPKs by checking whether OVPKs are derived from the same seed. This threat violates SG-2 and SG-3. Our proposal addresses this threat by transferring it to SA-2.
Threats arising between an authenticator and Register include the following.
- Malicious Authenticator Registration:
-
An attacker attempts to register a new public key of his authenticator to a legitimate user account. This threat violates SG-3. Our proposal addresses this threat because an attacker cannot get the OVSK corresponding to the OVPK bound to the account. An attacker cannot also get the seed corresponding to the OVPK. The service can verify that trusted authenticators store a seed and OVSKs by verifying OVPK attestations. Even if a seed is compromised, our proposal mitigates this threat because the number of authenticators that can be registered is restricted. After a user registers public keys of her all authenticators an attacker cannot register his public keys.
Threats arising between an authenticator and Authn include the following.
- Updating Malicious OVPK:
-
An attacker attempts to update to an OVPK derived from the seed held by his authenticator. This threat violates SG-3 because the attacker can register his public keys. This threat also violates SG-1 because the attacker can revoke the user’s public keys. Our proposal addresses this threat because an attacker cannot know the seed corresponding to the registered OVPK. We consider the case where this SA-1 assumption is not satisfied during updating an OVK in Section 6.4. We disscuss whether our proposal mitigates this threat even if the seed is compromised in Section 6.4.
6. Discussion
6.1. Deriving an OVK
We confirm that our proposal achieves the requirements of Section 3.2.1. First, a user registers an OVK during new account registration where a service can trust information received from a user. A service can verify the owner of the authenticator storing a private key corresponding to the public key to be registered without a trusted third party. Note that attestation and the safety of communications rely on a trusted third party. Second, malicious services cannot correlate their accounts with sharing OVPKs and corresponding metadata because the security property of a key derivation function makes it impossible to derive a seed from an OVPK and the corresponding metadata. Besides, a malicious service cannot correlate the user’s account by checking whether a user can use the OVPK and the metadata of another service to request a new public key registration. This is because authenticators verify the MAC value of the received metadata to determine whether the received metadata is for the service. Third, an authenticator generates an attestation of the public key to be registered. A service can verify the attestation to evaluate the trustworthiness of the public key requested to be registered. Finally, once authenticators of a user share a seed, they derive an OVK per service independently. She does not have to operate multiple authenticators whenever registering a new public key.
6.2. Sharing a Seed
We confirm that our proposal achieves the requirements of Section 3.3.1. Only authenticators having a password can participate in sharing a seed. Only authenticators having a password can decrypt the ciphertexts generated by other authenticators having the same password. They can also verify the integrity of received ciphertexts by a password. A user enters a password directly into each authenticator so that the password does not flow on the communication channel where authenticators share a seed. Because a long enough password allows an attacker to take an extremely long time to decrypt ciphertexts and a secure encryption algorithm prevents him from compromising ciphertexts, it is difficult for the attacker to compromise the password and participate in sharing a seed before the sharing is complete. Besides, because the assumption that a DH key agreement algorithm is secure against eavesdropping prevents an attacker from deriving a seed from decrypted ciphertexts including DH public keys, an attacker cannot compromise a seed. From the above, without assuming the security of the communication channel, we can prevent the leakage of the seed by eavesdropping and tampering.
6.3. The Trustworthiness of a Key for Authentication
A service considers the next two to determine whether it trusts a key for authentication. One is the trustworthiness of the key itself. The other is the trustworthiness of the binding of a public key to an account. A service evaluates the former by verifying that a trusted authenticator stores a private key and that a used cryptographic algorithm has not been compromised. To verify that, a service verifies the attestation of a public key.
A service evaluates the latter by verifying whether the private key corresponding to the public key bound to an account is stored in the authenticator owned by the user having the account. This trustworthiness depends on how a user registers the public key. For example, in (Oogami et al., 2020), a user registers a new public key via an authenticated session established by a registered public key. In our proposal (Section 3.2 and Section 3.3), a user registers a new public key with an OVK derived from the seed shared among authenticators. In the former method, a public key has high assurance because a user uses registered authenticators every time she registers a new public key. The method is not convenient because she has to have a registered authenticator for registering a new one. The latter method (our proposal) is convenient because, once she has shared a seed, a user must have only an authenticator to append a new public key to a service. A public key does not have high assurance if the seed can be compromised.
To make a public key higher assurance in our proposal, We propose a method for a service to verify the trustworthiness of an OVPK (Section 3.4). By verifying an attestation of an OVPK to be registered, a service can evaluate whether the seed deriving the OVPK is stored securely on the authenticator communicating with the service. By verifying an attestation of a DH public key when sharing a seed, authenticators can evaluate whether the other authenticators store the seed securely. A service can also verify whether all authenticators securely store the seed deriving the registered OVPK by verifying an attestation of the OVPK. This is because the attestation includes the model names of all authenticators storing the seed. A service can verify whether they store the seed securely based on the trusted policy about what authenticator model has secure storage and stores the seed in the storage.
6.4. Updating an OVK
A service calculates the trustworthiness of an updating message and selects the OVK of the most trusted message as the new OVK. A service considers the number of registered authenticators sending the same updating message as the trustworthiness of the updating message. We consider that the trustworthiness of all registered authenticators before the OVK migration period is equal. This is because it is difficult for a service to determine whether an authenticator is stolen or held by a legitimate user. Based on the assumption that it takes time for an attacker to gain control of a stolen authenticator (Assumption 2 in Section 3.5.1), a service selects the earlier sent message when two or more updating messages have the same and most trustworthiness.
We discuss what attacks the proposed method prevents when an attacker can operate the seed and the private key with a stolen authenticator (Assumption 1 in Section 3.5.1). In our proposal, the number of registered authenticators is limited to , which is in the metadata sent when an OVK registration. Note that an attacker can increase the number of registered authenticators by registering public keys in the way described in Section 3.2 before sending updating messages.
We disscuss cases based on the following numbers.
-
•
: the number of authenticators sent when an OVK registration
-
•
: the number of registered authenticators owned by a legitimate user before an OVK migration period
-
•
: the number of registered authenticators controlled by an attacker before an OVK migration period
In the case of , the service trusts the authenticator that sends updating messages earlier. Therefore, in the case of , if the attacker sends an updating message earlier (Assumption 2 in Section 3.5.1 is broken), the service trusts the OVK sending from the authenticator stolen by the attacker and revokes the public key whose corresponding private key is held by the authenticator of the legitimate user.
In the case of , if or , then a legitimate user can update an OVK and prevent the attacker from updating an OVK because public keys whose corresponding private keys is stored in stolen authenticators are correctly revoked.
7. Conclusion
We introduce a key pair called an Ownership Verification Key (OVK) and propose the mechanism where users and services manage public keys based on the owner of authenticators storing the corresponding private keys. The mechanism allows users to access services with any of their authenticators without registering each of their public keys explicitly.
A user can derive the private key of an OVK (OVSK) on her authenticators from the seed sharing among the authenticators. A service binds the public key of OVK (OVPK) to a user’s account. A service binds a public key signed by an OVSK to the user’s account bound to the corresponding OVPK. When a user changes a set of her authenticators, she updates an OVSK, and a service updates an OVPK binding to her accounts based on the most trustworthy updating message.
We implemented the Proof of Concept and confirmed that key management works as expected for typical use cases. With threat modeling, we evaluated what measures our proposal takes against the threats. We confirmed that our proposal achieves some security goals, such as that services cannot correlate accounts and can correctly bind public keys to accounts. We discussed how our proposal mitigates threats for which measures are not sufficient.
Future work includes a model where, in updating an OVK, the trustworthiness of each authenticator having the private key corresponding to a registered public key differs. For example, when a service receives a message that some authenticator is not trustworthy from the registered email address, the service reduces the trustworthiness of the authenticator.
References
- (1)
- Adams and Sasse (1999) Anne Adams and Martina Angela Sasse. 1999. Users Are Not the Enemy. Commun. ACM 42, 12 (dec 1999), 40–46. https://doi.org/10.1145/322796.322806
- Anti-Phising Working Group (2021) Anti-Phising Working Group. 2021. Phishing Activity Trends Report 3rd Quarter 2021. {https://docs.apwg.org/reports/apwg_trends_report_q3_2021.pdf}
- Apple (2021) Apple. 2021. Keychain data protection. https://support.apple.com/guide/security/keychain-data-protection-secb0694df1a/web
- Boeyen et al. (2008) Sharon Boeyen, Stefan Santesson, Tim Polk, Russ Housley, Stephen Farrell, and David Cooper. 2008. Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile. RFC 5280. https://doi.org/10.17487/RFC5280
- Bonneau et al. (2012) Joseph Bonneau, Cormac Herley, Paul C. van Oorschot, and Frank Stajano. 2012. The Quest to Replace Passwords: A Framework for Comparative Evaluation of Web Authentication Schemes. In 2012 IEEE Symposium on Security and Privacy. 553–567. https://doi.org/10.1109/SP.2012.44
- Bruza and van der Weide (1993) P. D. Bruza and Th.P. van der Weide. 1993. The Semantics of Data Flow Diagrams. In In Proceedings of the International Conference on Management of Data. McGraw-Hill Publishing Company, 66–78.
- Cabinet Office, Government of Japan (2022) Cabinet Office, Government of Japan. 2022. Social Security and Tax Number System. https://www.cao.go.jp/bangouseido/foreigners/english.html
- Conners and Zappala (2019) James S. Conners and Daniel Zappala. 2019. Let’s Authenticate: Automated Cryptographic Authentication for the Web with Simple Account Recovery. In Who Are You?! Adventures in Authentication Workshop (WAY ’19). Santa Clara, California, USA, 1–6.
- Daniel R. L. Brown (2009) Daniel R. L. Brown. 2009. SEC 1: Elliptic Curve Cryptography. Technical Report. Standards for Efficient Cryptography Group. {https://www.secg.org/sec1-v2.pdf}
- Daniel R. L. Brown (2010) Daniel R. L. Brown. 2010. SEC 2: Recommended Elliptic Curve Domain Parameters. Technical Report. Standards for Efficient Cryptography Group. {https://www.secg.org/sec2-v2.pdf}
- FIDO (2021) FIDO. 2021. How FIDO Workds. https://fidoalliance.org/how-fido-works/
- FIDO Alliance (2021) FIDO Alliance. 2021. FIDO: Fast Identity Online Alliance Privacy Principles Policy. https://media.fidoalliance.org/wp-content/uploads/2021/02/FIDO-Privacy-Principles.pdf
- Frymann et al. (2020) Nick Frymann, Daniel Gardham, Franziskus Kiefer, Emil Lundberg, Mark Manulis, and Dain Nilsson. 2020. Asynchronous Remote Key Generation: An Analysis of Yubico’s Proposal for W3C WebAuthn. Association for Computing Machinery, New York, NY, USA, 939–954. https://doi.org/10.1145/3372297.3417292
- Gaw and Felten (2006) Shirley Gaw and Edward W. Felten. 2006. Password Management Strategies for Online Accounts. In Proceedings of the Second Symposium on Usable Privacy and Security (Pittsburgh, Pennsylvania, USA) (SOUPS ’06). Association for Computing Machinery, New York, NY, USA, 44–55. https://doi.org/10.1145/1143120.1143127
- Ghorbani Lyastani et al. (2020) Sanam Ghorbani Lyastani, Michael Schilling, Michaela Neumayr, Michael Backes, and Sven Bugiel. 2020. Is FIDO2 the Kingslayer of User Authentication? A Comparative Usability Study of FIDO2 Passwordless Authentication. In 2020 IEEE Symposium on Security and Privacy. 268–285. https://doi.org/10.1109/SP40000.2020.00047
- Housley and Schaad (2002) Russ Housley and Jim Schaad. 2002. Advanced Encryption Standard (AES) Key Wrap Algorithm. RFC 3394. https://doi.org/10.17487/RFC3394
- Jones and Hildebrand (2015) Michael Jones and Joe Hildebrand. 2015. JSON Web Encryption (JWE). RFC 7516. https://doi.org/10.17487/RFC7516
- Krawczyk et al. (1997) Dr. Hugo Krawczyk, Mihir Bellare, and Ran Canetti. 1997. HMAC: Keyed-Hashing for Message Authentication. RFC 2104. https://doi.org/10.17487/RFC2104
- Lonvick and Ylonen (2006) Chris M. Lonvick and Tatu Ylonen. 2006. The Secure Shell (SSH) Authentication Protocol. RFC 4252. https://doi.org/10.17487/RFC4252
- Lundberg and Nilsson (2021) Emil Lundberg and Dain Nilsson. 2021. Asynchronous delegated key generation without shared secrets (DRAFT). {https://github.com/Yubico/webauthn-recovery-extension}
- Moriarty et al. (2017) Kathleen Moriarty, Burt Kaliski, and Andreas Rusch. 2017. PKCS #5: Password-Based Cryptography Specification Version 2.1. RFC 8018. https://doi.org/10.17487/RFC8018
- Morris and Thompson (1979) Robert Morris and Ken Thompson. 1979. Password Security: A Case History. Commun. ACM 22, 11 (nov 1979), 594–597. https://doi.org/10.1145/359168.359172
- National Institute of Standards and Technology (2001) National Institute of Standards and Technology. 2001. Advanced Encryption Standard (AES). Technical Report. {https://doi.org/10.6028/NIST.FIPS.197}
- National Institute of Standards and Technology (2007) National Institute of Standards and Technology. 2007. Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC. Technical Report. {https://doi.org/10.6028/NIST.SP.800-38D}
- National Institute of Standards and Technology (2015) National Institute of Standards and Technology. 2015. Secure Hash Standard (SHS). Technical Report.
- Nishimura et al. (2020) Hideo Nishimura et al. 2020. Secure Authentication Key Sharing between Personal Mobile Devices Based on Owner Identity. Journal of Information Processing 28 (2020).
- OASIS Security Services TC (2005) OASIS Security Services TC. 2005. Security Assertion Markup Language (SAML) v2.0. http://docs.oasis-open.org/security/saml/v2.0/sstc-saml-approved-errata-2.0.pdf
- Oogami et al. (2020) Wataru Oogami et al. 2020. Multiple Authenticators for Reducing Account-Recovery Needs for FIDO-Enabled Consumer Accounts. https://fidoalliance.org/white-paper-multiple-authenticators-for-reducing-account-recovery-needs-for-fido-enabled-consumer-accounts/
- Powers (2018) Adam Powers. 2018. FIDO TechNotes: The Truth about Attestation. https://fidoalliance.org/fido-technotes-the-truth-about-attestation/
- Rolf Lindemann (2018) Rolf Lindemann. 2018. FIDO Security Reference. https://fidoalliance.org/specs/fido-v2.0-id-20180227/fido-security-ref-v2.0-id-20180227.html
- Sakimura et al. (2014) N. Sakimura et al. 2014. Final: OpenID Connect Core 1.0 incorporating errata set 1. {https://openid.net/specs/openid-connect-core-1_0.html}
- Shostack (2014) Adam Shostack. 2014. Threat Modeling: Designing for Security (1st ed.). Wiley Publishing.
- Steiner et al. (1996) Michael Steiner, Gene Tsudik, and Michael Waidner. 1996. Diffie-Hellman Key Distribution Extended to Group Communication. In Proceedings of the 3rd ACM Conference on Computer and Communications Security (New Delhi, India) (CCS ’96). Association for Computing Machinery, New York, NY, USA, 31–37. https://doi.org/10.1145/238168.238182
- Yubico (2021) Yubico. 2021. Yubico Product Documentation. https://docs.yubico.com/