rfc9807v2.txt | rfc9807.txt | |||
---|---|---|---|---|
skipping to change at line 171 ¶ | skipping to change at line 171 ¶ | |||
passwords and offline dictionary attacks upon the compromise of a | passwords and offline dictionary attacks upon the compromise of a | |||
server and leakage of its credential file. In the latter case, the | server and leakage of its credential file. In the latter case, the | |||
attacker learns a mapping of a client's password under a one-way | attacker learns a mapping of a client's password under a one-way | |||
function and uses such a mapping to validate potential guesses for | function and uses such a mapping to validate potential guesses for | |||
the password. It is crucially important for the password protocol to | the password. It is crucially important for the password protocol to | |||
use an unpredictable one-way mapping. Otherwise, the attacker can | use an unpredictable one-way mapping. Otherwise, the attacker can | |||
pre-compute a deterministic list of mapped passwords leading to | pre-compute a deterministic list of mapped passwords leading to | |||
almost instantaneous leakage of passwords upon server compromise. | almost instantaneous leakage of passwords upon server compromise. | |||
This document describes OPAQUE, an aPAKE protocol that is secure | This document describes OPAQUE, an aPAKE protocol that is secure | |||
against pre-computation attacks (as defined in [JKX18Full]). OPAQUE | against pre-computation attacks (as defined in [JKX18]). OPAQUE | |||
provides forward secrecy with respect to password leakage while also | provides forward secrecy with respect to password leakage while also | |||
hiding the password from the server, even during password | hiding the password from the server, even during password | |||
registration. OPAQUE allows applications to increase the difficulty | registration. OPAQUE allows applications to increase the difficulty | |||
of offline dictionary attacks via iterated hashing or other key- | of offline dictionary attacks via iterated hashing or other key- | |||
stretching schemes. OPAQUE is also extensible, allowing clients to | stretching schemes. OPAQUE is also extensible, allowing clients to | |||
safely store and retrieve arbitrary application data on servers using | safely store and retrieve arbitrary application data on servers using | |||
only their password. | only their password. | |||
OPAQUE is defined and proven as the composition of three | OPAQUE is defined and proven as the composition of three | |||
functionalities: an Oblivious Pseudorandom Function (OPRF), a key | functionalities: an Oblivious Pseudorandom Function (OPRF), a key | |||
skipping to change at line 2007 ¶ | skipping to change at line 2007 ¶ | |||
only the correct password can unlock the private key while at the | only the correct password can unlock the private key while at the | |||
same time avoiding potential offline guessing attacks. This general | same time avoiding potential offline guessing attacks. This general | |||
composability property provides great flexibility and enables a | composability property provides great flexibility and enables a | |||
variety of OPAQUE instantiations, from optimized performance to | variety of OPAQUE instantiations, from optimized performance to | |||
integration with existing authenticated key exchange protocols such | integration with existing authenticated key exchange protocols such | |||
as TLS. | as TLS. | |||
10.1. Notable Design Differences | 10.1. Notable Design Differences | |||
The specification as written here differs from the original | The specification as written here differs from the original | |||
cryptographic design in [JKX18Full] and the corresponding CFRG | cryptographic design in [JKX18] and the corresponding CFRG document | |||
document [Krawczyk20], both of which were used as input to the CFRG | [Krawczyk20], both of which were used as input to the CFRG PAKE | |||
PAKE competition. This section describes these differences, | competition. This section describes these differences, including | |||
including their motivation and explanation as to why they preserve | their motivation and explanation as to why they preserve the provable | |||
the provable security of OPAQUE based on [JKX18Full]. | security of OPAQUE based on [JKX18]. | |||
The following list enumerates important functional differences that | The following list enumerates important functional differences that | |||
were made as part of the protocol specification process to address | were made as part of the protocol specification process to address | |||
application or implementation considerations. | application or implementation considerations. | |||
* Clients construct envelope contents without revealing the password | * Clients construct envelope contents without revealing the password | |||
to the server, as described in Section 5, whereas the servers | to the server, as described in Section 5, whereas the servers | |||
construct envelopes in [JKX18Full]. This change adds to the | construct envelopes in [JKX18]. This change adds to the security | |||
security of the protocol. [JKX18Full] considered the case where | of the protocol. [JKX18] considered the case where the envelope | |||
the envelope was constructed by the server for reasons of | was constructed by the server for reasons of compatibility with | |||
compatibility with previous Universal Composability (UC) security | previous Universal Composability (UC) security modeling. [HJKW23] | |||
modeling. [HJKW23] analyzes the registration phase as specified | analyzes the registration phase as specified in this document. | |||
in this document. This change was made to support registration | This change was made to support registration flows where the | |||
flows where the client chooses the password and wishes to keep it | client chooses the password and wishes to keep it secret from the | |||
secret from the server, and it is compatible with the variant in | server, and it is compatible with the variant in [JKX18] that was | |||
[JKX18Full] that was originally analyzed. | originally analyzed. | |||
* Envelopes do not contain encrypted credentials. Instead, | * Envelopes do not contain encrypted credentials. Instead, | |||
envelopes contain information used to derive client private key | envelopes contain information used to derive client private key | |||
material for the AKE. This change improves the assumption behind | material for the AKE. This change improves the assumption behind | |||
the protocol by getting rid of equivocality and random key | the protocol by getting rid of equivocality and random key | |||
robustness for the encryption function. The random-key robustness | robustness for the encryption function. The random-key robustness | |||
property defined in Section 2.2 is only needed for the MAC | property defined in Section 2.2 is only needed for the MAC | |||
function. This change was made for two reasons. First, it | function. This change was made for two reasons. First, it | |||
reduces the number of bytes stored in envelopes, which is a | reduces the number of bytes stored in envelopes, which is a | |||
helpful improvement for large applications of OPAQUE with many | helpful improvement for large applications of OPAQUE with many | |||
skipping to change at line 2079 ¶ | skipping to change at line 2079 ¶ | |||
security analysis (it can be simulated with a random output). | security analysis (it can be simulated with a random output). | |||
This change was made to support more application use cases for | This change was made to support more application use cases for | |||
OPAQUE, such as the use of OPAQUE for end-to-end encrypted | OPAQUE, such as the use of OPAQUE for end-to-end encrypted | |||
backups; see [WhatsAppE2E]. | backups; see [WhatsAppE2E]. | |||
* The AKE protocol describes a 3-message protocol where the third | * The AKE protocol describes a 3-message protocol where the third | |||
message includes client authentication material that the server is | message includes client authentication material that the server is | |||
required to verify. This change (from the original 2-message | required to verify. This change (from the original 2-message | |||
protocol) was made to provide explicit client authentication and | protocol) was made to provide explicit client authentication and | |||
full forward security. The 3-message protocol is analyzed in | full forward security. The 3-message protocol is analyzed in | |||
[JKX18Full]. | [JKX18]. | |||
* The protocol admits optional application-layer client and server | * The protocol admits optional application-layer client and server | |||
identities. In the absence of these identities, the client and | identities. In the absence of these identities, the client and | |||
server are authenticated against their public keys. Binding | server are authenticated against their public keys. Binding | |||
authentication to identities is part of the AKE part of OPAQUE. | authentication to identities is part of the AKE part of OPAQUE. | |||
The type of identities and their semantics are application- | The type of identities and their semantics are application- | |||
dependent and independent of the protocol analysis. This change | dependent and independent of the protocol analysis. This change | |||
was made to simplify client and server interfaces to the protocol | was made to simplify client and server interfaces to the protocol | |||
by removing the need to specify additional identities alongside | by removing the need to specify additional identities alongside | |||
their corresponding public authentication keys when not needed. | their corresponding public authentication keys when not needed. | |||
skipping to change at line 2110 ¶ | skipping to change at line 2110 ¶ | |||
and indexing into the registration record storage called the | and indexing into the registration record storage called the | |||
credential_identifier. This allows clients to change their | credential_identifier. This allows clients to change their | |||
application-layer identity (client_identity) without inducing | application-layer identity (client_identity) without inducing | |||
server-side changes, e.g., by changing an email address associated | server-side changes, e.g., by changing an email address associated | |||
with a given account. This mechanism is part of the derivation of | with a given account. This mechanism is part of the derivation of | |||
OPRF keys via a single PRF. As long as the derivation of | OPRF keys via a single PRF. As long as the derivation of | |||
different OPRF keys from a single PRF has different PRF inputs, | different OPRF keys from a single PRF has different PRF inputs, | |||
the protocol is secure. The choice of such inputs is up to the | the protocol is secure. The choice of such inputs is up to the | |||
application. | application. | |||
* [JKX18Full] comments on a defense against offline dictionary | * [JKX18] comments on a defense against offline dictionary attacks | |||
attacks upon server compromise or honest-but-curious servers. The | upon server compromise or honest-but-curious servers. The authors | |||
authors suggest implementing the OPRF phase as a threshold OPRF | suggest implementing the OPRF phase as a threshold OPRF [TOPPSS], | |||
[TOPPSS], effectively forcing an attacker to act online or control | effectively forcing an attacker to act online or control at least | |||
at least t key shares (of the total n), where t is the threshold | t key shares (of the total n), where t is the threshold number of | |||
number of shares necessary to recombine the secret OPRF key. Only | shares necessary to recombine the secret OPRF key. Only then | |||
then would an attacker be able to run an offline dictionary | would an attacker be able to run an offline dictionary attack. | |||
attack. This implementation only affects the server and changes | This implementation only affects the server and changes nothing | |||
nothing for the client. Furthermore, if the threshold OPRF | for the client. Furthermore, if the threshold OPRF servers | |||
servers holding these keys are separate from the authentication | holding these keys are separate from the authentication server, | |||
server, then recovering all n shares would still not suffice to | then recovering all n shares would still not suffice to run an | |||
run an offline dictionary attack without access to the client | offline dictionary attack without access to the client record | |||
record database. However, this mechanism is out of scope for this | database. However, this mechanism is out of scope for this | |||
document. | document. | |||
The following list enumerates notable differences and refinements | The following list enumerates notable differences and refinements | |||
from the original cryptographic design in [JKX18Full] and the | from the original cryptographic design in [JKX18] and the | |||
corresponding CFRG document [Krawczyk20] that were made to make this | corresponding CFRG document [Krawczyk20] that were made to make this | |||
specification suitable for interoperable implementations. | specification suitable for interoperable implementations. | |||
* [JKX18Full] used a generic prime-order group for the DH-OPRF and | * [JKX18] used a generic prime-order group for the DH-OPRF and HMQV | |||
HMQV operations, and includes necessary prime-order subgroup | operations, and includes necessary prime-order subgroup checks | |||
checks when receiving attacker-controlled values over the wire. | when receiving attacker-controlled values over the wire. This | |||
This specification instantiates the prime-order group used for 3DH | specification instantiates the prime-order group used for 3DH | |||
using prime-order groups based on elliptic curves as described in | using prime-order groups based on elliptic curves as described in | |||
Section 2.1 of [RFC9497]. This specification also delegates OPRF | Section 2.1 of [RFC9497]. This specification also delegates OPRF | |||
group choice and operations to Section 4 of [RFC9497]. As such, | group choice and operations to Section 4 of [RFC9497]. As such, | |||
the prime-order group as used in the OPRF and 3DH as specified in | the prime-order group as used in the OPRF and 3DH as specified in | |||
this document both adhere to the requirements in [JKX18Full]. | this document both adhere to the requirements in [JKX18]. | |||
* [JKX18Full] specified DH-OPRF (see Appendix B) to instantiate the | * Appendix B of [JKX18] specified DH-OPRF to instantiate the OPRF | |||
OPRF functionality in the protocol. A critical part of DH-OPRF is | functionality in the protocol. A critical part of DH-OPRF is the | |||
the hash-to-group operation, which was not instantiated in the | hash-to-group operation, which was not instantiated in the | |||
original analysis. However, the requirements for this operation | original analysis. However, the requirements for this operation | |||
were included. This specification instantiates the OPRF | were included. This specification instantiates the OPRF | |||
functionality based on Section 3.3.1 of [RFC9497], which is | functionality based on Section 3.3.1 of [RFC9497], which is | |||
identical to the DH-OPRF functionality in [JKX18Full] and, | identical to the DH-OPRF functionality in [JKX18] and, concretely, | |||
concretely, uses the hash-to-curve functions in [RFC9380]. All | uses the hash-to-curve functions in [RFC9380]. All hash-to-curve | |||
hash-to-curve methods in [RFC9380] are compliant with the | methods in [RFC9380] are compliant with the requirement in | |||
requirement in [JKX18Full], namely, that the output be a member of | [JKX18], namely, that the output be a member of the prime-order | |||
the prime-order group. | group. | |||
* [JKX18Full] and [Krawczyk20] both used HMQV as the AKE for the | * [JKX18] and [Krawczyk20] both used HMQV as the AKE for the | |||
protocol. However, this document fully specifies 3DH instead of | protocol. However, this document fully specifies 3DH instead of | |||
HMQV (though a sketch for how to instantiate OPAQUE using HMQV is | HMQV (though a sketch for how to instantiate OPAQUE using HMQV is | |||
included in Appendix B.1). Since 3DH satisfies the essential | included in Appendix B.1). Since 3DH satisfies the essential | |||
requirements for the AKE protocol as described in [JKX18Full] and | requirements for the AKE protocol as described in [JKX18] and | |||
[Krawczyk20], as recalled in Section 10.2, this change preserves | [Krawczyk20], as recalled in Section 10.2, this change preserves | |||
the overall security of the protocol. 3DH was chosen for its | the overall security of the protocol. 3DH was chosen for its | |||
simplicity and ease of implementation. | simplicity and ease of implementation. | |||
* The DH-OPRF and HMQV instantiation of OPAQUE as shown in Figure 12 | * The DH-OPRF and HMQV instantiation of OPAQUE as shown in Figure 12 | |||
[JKX18Full] uses a different transcript than that which is | [JKX18] uses a different transcript than that which is described | |||
described in this specification. In particular, the key exchange | in this specification. In particular, the key exchange transcript | |||
transcript specified in Section 6.4 is a superset of the | specified in Section 6.4 is a superset of the transcript as | |||
transcript as defined in [JKX18Full]. This was done to align with | defined in [JKX18]. This was done to align with best practices, | |||
best practices, like what is done for key exchange protocols like | like what is done for key exchange protocols like TLS 1.3 | |||
TLS 1.3 [RFC8446]. | [RFC8446]. | |||
* Neither [JKX18Full] nor [Krawczyk20] included wire format details | * Neither [JKX18] nor [Krawczyk20] included wire format details for | |||
for the protocol, which is essential for interoperability. This | the protocol, which is essential for interoperability. This | |||
specification fills this gap by including such wire format details | specification fills this gap by including such wire format details | |||
and corresponding test vectors; see Appendix C. | and corresponding test vectors; see Appendix C. | |||
10.2. Security Analysis | 10.2. Security Analysis | |||
Jarecki et al. [JKX18Full] proved the security of OPAQUE (modulo the | Jarecki et al. [JKX18] proved the security of OPAQUE (modulo the | |||
design differences outlined in Section 10.1) in a strong aPAKE model | design differences outlined in Section 10.1) in a strong aPAKE model | |||
that ensures security against precomputation attacks and is | that ensures security against precomputation attacks and is | |||
formulated in the UC framework [Canetti01] under the random oracle | formulated in the UC framework [Canetti01] under the random oracle | |||
model. This assumes security of the OPRF function and the underlying | model. This assumes security of the OPRF function and the underlying | |||
key exchange protocol. | key exchange protocol. | |||
OPAQUE's design builds on a line of work initiated in the seminal | OPAQUE's design builds on a line of work initiated in the seminal | |||
paper of Ford and Kaliski [FK00] and is based on the HPAKE protocol | paper of Ford and Kaliski [FK00] and is based on the HPAKE protocol | |||
of Xavier Boyen [Boyen09] and the (1,1)-PPSS protocol from Jarecki et | of Xavier Boyen [Boyen09] and the (1,1)-PPSS protocol from Jarecki et | |||
al. [JKKX16]. None of these papers considered security against | al. [JKKX16]. None of these papers considered security against | |||
skipping to change at line 2206 ¶ | skipping to change at line 2206 ¶ | |||
authenticated protocols, e.g., HMQV, but not all of them. We also | authenticated protocols, e.g., HMQV, but not all of them. We also | |||
note that key exchange protocols based on shared keys do not satisfy | note that key exchange protocols based on shared keys do not satisfy | |||
the KCI requirement, hence they are not considered in the OPAQUE | the KCI requirement, hence they are not considered in the OPAQUE | |||
setting. We note that KCI is needed to ensure a crucial property of | setting. We note that KCI is needed to ensure a crucial property of | |||
OPAQUE. Even upon compromise of the server, the attacker cannot | OPAQUE. Even upon compromise of the server, the attacker cannot | |||
impersonate the client to the server without first running an | impersonate the client to the server without first running an | |||
exhaustive dictionary attack. Another essential requirement from AKE | exhaustive dictionary attack. Another essential requirement from AKE | |||
protocols for use in OPAQUE is to provide forward secrecy (against | protocols for use in OPAQUE is to provide forward secrecy (against | |||
active attackers). | active attackers). | |||
In [JKX18Full], security is proven for one instance (i.e., one key) | In [JKX18], security is proven for one instance (i.e., one key) of | |||
of the OPAQUE protocol, and without batching. There is currently no | the OPAQUE protocol, and without batching. There is currently no | |||
security analysis available for the OPAQUE protocol described in this | security analysis available for the OPAQUE protocol described in this | |||
document in a setting with multiple server keys or batching. | document in a setting with multiple server keys or batching. | |||
As stated in Section 9.1, incorporating client_identity adds domain | As stated in Section 9.1, incorporating client_identity adds domain | |||
separation, particularly against servers that choose the same OPRF | separation, particularly against servers that choose the same OPRF | |||
key for multiple clients. The client_identity as input to the OPRF | key for multiple clients. The client_identity as input to the OPRF | |||
also acts as a key identifier that would be required for a proof of | also acts as a key identifier that would be required for a proof of | |||
the protocol in the multi-key setting; the OPAQUE analysis in | the protocol in the multi-key setting; the OPAQUE analysis in [JKX18] | |||
[JKX18Full] assumes single server-key instances. Adding | assumes single server-key instances. Adding server_identity to the | |||
server_identity to the OPRF input provides domain separation for | OPRF input provides domain separation for clients that reuse the same | |||
clients that reuse the same client_identity across different server | client_identity across different server instantiations. | |||
instantiations. | ||||
10.3. Identities | 10.3. Identities | |||
AKE protocols generate keys that need to be uniquely and verifiably | AKE protocols generate keys that need to be uniquely and verifiably | |||
bound to a pair of identities. In the case of OPAQUE, those | bound to a pair of identities. In the case of OPAQUE, those | |||
identities correspond to client_identity and server_identity. Thus, | identities correspond to client_identity and server_identity. Thus, | |||
it is essential for the parties to agree on such identities, | it is essential for the parties to agree on such identities, | |||
including an agreed bit representation of these identities as needed. | including an agreed bit representation of these identities as needed. | |||
Note that the method of transmission of client_identity from client | Note that the method of transmission of client_identity from client | |||
skipping to change at line 2539 ¶ | skipping to change at line 2538 ¶ | |||
Hellman Protocol", Cryptology ePrint Archive, Paper | Hellman Protocol", Cryptology ePrint Archive, Paper | |||
2005/176, 2005, <https://eprint.iacr.org/2005/176>. | 2005/176, 2005, <https://eprint.iacr.org/2005/176>. | |||
[JKKX16] Jarecki, S., Kiayias, A., Krawczyk, H., and J. Xu, | [JKKX16] Jarecki, S., Kiayias, A., Krawczyk, H., and J. Xu, | |||
"Highly-Efficient and Composable Password-Protected Secret | "Highly-Efficient and Composable Password-Protected Secret | |||
Sharing (Or: How to Protect Your Bitcoin Wallet Online)", | Sharing (Or: How to Protect Your Bitcoin Wallet Online)", | |||
2016 IEEE European Symposium on Security and Privacy | 2016 IEEE European Symposium on Security and Privacy | |||
(EuroS&P), pp. 276-291, DOI 10.1109/EuroSP.2016.30, 2016, | (EuroS&P), pp. 276-291, DOI 10.1109/EuroSP.2016.30, 2016, | |||
<https://doi.org/10.1109/EuroSP.2016.30>. | <https://doi.org/10.1109/EuroSP.2016.30>. | |||
[JKX18Full] | [JKX18] Jarecki, S., Krawczyk, H., and J. Xu, "OPAQUE: An | |||
Jarecki, S., Krawczyk, H., and J. Xu, "OPAQUE: An | ||||
Asymmetric PAKE Protocol Secure Against Pre-Computation | Asymmetric PAKE Protocol Secure Against Pre-Computation | |||
Attacks", Cryptology ePrint Archive, Paper 2018/163, 2018, | Attacks", Cryptology ePrint Archive, Paper 2018/163, 2018, | |||
<https://eprint.iacr.org/2018/163>. | <https://eprint.iacr.org/2018/163>. | |||
[keyagreement] | [keyagreement] | |||
Barker, E., Chen, L., Roginsky, A., Vassilev, A., and R. | Barker, E., Chen, L., Roginsky, A., Vassilev, A., and R. | |||
Davis, "Recommendation for Pair-Wise Key-Establishment | Davis, "Recommendation for Pair-Wise Key-Establishment | |||
Schemes Using Discrete Logarithm Cryptography", | Schemes Using Discrete Logarithm Cryptography", | |||
DOI 10.6028/nist.sp.800-56ar3, NIST SP 800-56Ar3, April | DOI 10.6028/nist.sp.800-56ar3, NIST SP 800-56Ar3, April | |||
2018, <https://doi.org/10.6028/nist.sp.800-56ar3>. | 2018, <https://doi.org/10.6028/nist.sp.800-56ar3>. | |||
End of changes. 18 change blocks. | ||||
63 lines changed or deleted | 61 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |