RFC 8236
J-PAKE: Password-Authenticated Key Exchange by Juggling
RFC 8236: J-PAKE: Password-Authenticated Key Exchange by Juggling ๐โจ
Okay bestie, let's get into it ๐ This one is an Independent Submission written by F. Hao, Ed. from Newcastle University (UK), dated September 2017. It's Informational, which means it's published for us to read and learn from, not a mandatory Internet Standard ๐ธ It obsoletes nothing and updates nothing, so it's a totally standalone doc ๐ฆ The ISSN is 2070-1721 if you ever need to look it up ๐
Here's the vibe: J-PAKE is a way for two people to set up a secure, end-to-end channel over an insecure network using just a shared password ๐ No PKI, no trusted third party, nothing extra. Lowkey iconic ๐ญ
Status of This Memo ๐
This doc is not an Internet Standards Track spec, it's just being shared for info ๐ It's a contribution to the RFC Series, independent of any other stream. The RFC Editor chose to publish it at their discretion and makes no claims about whether you should implement or deploy it ๐ Documents approved by the RFC Editor aren't candidates for any level of Internet Standard, so check Section 2 of RFC 7841 for the deets โจ
For the current status, errata, and how to send feedback, head to http://www.rfc-editor.org/info/rfc8236 ๐ง
Copyright Notice ๐
Copyright (c) 2017 IETF Trust and the persons identified as the document authors. All rights reserved ๐
This doc is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) as in effect on the publication date. Please read those carefully, because they spell out your rights and restrictions ๐ซถ
1. Introduction โจ
Okay so PAKE (Password-Authenticated Key Exchange) is the whole genre here ๐ The goal is to set up secure comms between two remote parties using only their shared password, no PKI or trusted third party needed [BM92]. The first ever PAKE was EKE (Encrypted Key Exchange), proposed by Steven Bellovin and Michael Merritt in 1992 [BM92] ๐
Other famous PAKEs include SPEKE (Simple Password Exponential Key Exchange) by David Jablon in 1996 [Jab96], and SRP (Secure Remote Password) by Tom Wu in 1998 [Wu98]. SRP got revised a bunch of times to fix security and efficiency problems ๐ญ The big one, SRP-6, is specified in [RFC5054] ๐ฅ
This document specifies J-PAKE (Password-Authenticated Key Exchange by Juggling), designed by Feng Hao and Peter Ryan in 2008 [HR08] ๐ฆ Why is it so cool? Let me count the ways ๐
First, J-PAKE has security proofs, and EKE, SPEKE and SRP-6 don't have equivalent ones ๐ Second, it's built totally differently from every other PAKE and runs on a well-established Zero Knowledge Proof primitive, the Schnorr NIZK proof [RFC8235] ๐ง Third, it uses clever engineering tricks to optimise the ZKP use, so it's efficient enough for real life ๐ธ Fourth, it works generically in both finite field and elliptic curve settings (basically DSA and ECDSA-like groups) ๐
Unlike SPEKE, it doesn't need an extra primitive to hash passwords onto an elliptic curve โจ Unlike SPAKE2 [AP05] and SESPAKE [SOAA15], it doesn't need a trusted setup (the so-called common reference model) to define generators whose discrete log must be unknown ๐ Finally, it's been used at a big scale in the real world: Firefox sync [MOZILLA], Pale Moon sync [PALEMOON], and Google Nest products [ABM15] ๐ญ It's also in widely used open source libraries like OpenSSL [BOINC], Network Security Services (NSS) [MOZILLA_NSS], and Bouncy Castle [BOUNCY] ๐ Since 2015 it's been in Thread [THREAD] as a standard key agreement mechanism for IoT applications, and it's also in ISO/IEC 11770-4:2017 [ISO.11770-4] ๐
1.1. Requirements Language ๐
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here ๐
1.2. Notation ๐ง
Here's the notation we're working with, bestie ๐
- Alice: the assumed identity of the prover in the protocol ๐ธ
- Bob: the assumed identity of the verifier in the protocol ๐ธ
- s: a low-entropy secret shared between Alice and Bob ๐
- a | b: a divides b ๐
- a || b: concatenation of a and b ๐
- [a, b]: the interval of integers between and including a and b ๐
- H: a secure cryptographic hash function ๐
- p: a large prime ๐ฆ
- q: a large prime divisor of p-1, i.e., q | p-1 ๐ฆ
- *Zp**: a multiplicative group of integers modulo p ๐ฆ
- Gq: a subgroup of Zp* with prime order q ๐ฆ
- g: a generator of Gq โจ
- g^d: g raised to the power of d โจ
- a mod b: a modulo b โจ
- Fp: a finite field of p elements, where p is a prime ๐
- E(Fp): an elliptic curve defined over Fp ๐
- G: a generator of the subgroup over E(Fp) with prime order n ๐
- n: the order of G ๐
- h: the cofactor of the subgroup generated by G, which is equal to the order of the elliptic curve divided by n ๐
- P x [b]: multiplication of a point P with a scalar b over E(Fp) ๐
- KDF(a): Key Derivation Function with input a ๐
- MAC(MacKey, MacData): MAC function with MacKey as the key and MacData as the input data ๐
2. J-PAKE over Finite Field ๐
2.1. Protocol Setup ๐ธ
When you run J-PAKE over a finite field, you can use the same group parameters as DSA [FIPS186-4] ๐ฆ So let p and q be two large primes such that q | p-1. Let Gq be a subgroup of Zp* with prime order q, and let g be a generator for Gq ๐ Any non-identity element in Gq can be a generator ๐ซถ Alice and Bob both agree on (p, q, g), which can be hard-wired into the software code ๐ฅ They can also use the method in NIST FIPS 186-4, Appendix A [FIPS186-4] to generate (p, q, g) โจ DSA group parameters are only an example though, and other cryptographically suitable multiplicative groups work too, like the ones defined in [RFC4419] ๐ A group setting that provides 128-bit security or above is RECOMMENDED, hmm, wait, let me be precise: the original says it is recommended, so here it is: a group setting that provides 128-bit security or above is recommended ๐ The security proof of J-PAKE depends on the Decisional Diffie-Hellman (DDH) problem being intractable in the group you pick ๐ง
Next up, s is a secret value derived from a low-entropy password shared between Alice and Bob ๐ The value of s is REQUIRED to fall within [1, q-1] ๐ญ (Note that s must not be 0 for any non-empty secret ๐) This range is a necessary condition in [HR08] for proving "on-line dictionary attack resistance", because s, s+q, s+2q, ... are all treated as equivalent values as far as the protocol spec is concerned ๐ง In a practical implementation you can get s by taking a cryptographic hash of the password and wrapping the result modulo q ๐ Or you can treat the password as an octet string and convert it to an integer modulo q using the method in Section 2.3.8 of [SEC1] ๐ธ Either way, one MUST ensure s is not equal to 0 modulo q ๐จ
Heads up, bestie: that last bit is a MUST, so don't skip it! ๐
(This is part 1 of 4. More parts are coming, so stay tuned ๐ฆโจ)
2.2. Two-Round Key Exchange
okay so ROUND 1 is where the vibes start ๐ Alice picks an ephemeral private key x1 uniformly at random from [0, q-1] and another one, x2, uniformly at random from [1, q-1]. Bob does the same thing with x3 and x4 ๐ซถ
- Alice -> Bob:
g1 = g^x1 mod p,g2 = g^x2 mod pand ZKPs for x1 and x2 - Bob -> Alice:
g3 = g^x3 mod p,g4 = g^x4 mod pand ZKPs for x3 and x4
in this round the sender must send zero knowledge proofs to show they actually know the ephemeral private keys ๐ the go-to move is the Schnorr NIZK proof [RFC8235] โจ say you want to prove you know the exponent for D = g^d mod p. the generated Schnorr NIZK proof will contain {UserID, V = g^v mod p, r = v - d * c mod q}, where UserID is the unique identifier for the prover, v is a number chosen uniformly at random from [0, q-1], and c = H(g || V || D || UserID).
now the "uniqueness" of UserID is defined from the user's perspective -- so like, if Alice is talking to a bunch of different people, she shall give each one a unique identity ๐ when Alice gets a Schnorr NIZK proof, she shall check that the prover's UserID is a valid identity and is different from her own identity ๐ and during the J-PAKE exchange, each party shall make sure the other party has been consistently using the same identity the whole way through. all the nitty gritty about generating and verifying the Schnorr NIZK proof lives in [RFC8235] ๐
when round 1 wraps up, Alice verifies the received ZKPs as specified in [RFC8235] and also checks that g4 != 1 mod p. Bob does the mirror version: he verifies the ZKPs and checks that g2 != 1 mod p. if any of these checks fails, this session should be aborted ๐
Round 2:
- Alice -> Bob:
A = (g1*g3*g4)^(x2*s) mod pand a ZKP for x2*s - Bob -> Alice:
B = (g1*g2*g3)^(x4*s) mod pand a ZKP for x4*s
in round 2 the Schnorr NIZK proof is made the same way as last round, except the generator is different ๐ฆ for Alice it's (g1*g3*g4) instead of g, and for Bob it's (g1*g2*g3) instead of g. since any non-identity element in Gq can work as a generator, Alice and Bob just need to make sure g1*g3*g4 != 1 mod p and g1*g2*g3 != 1 mod p. with overwhelming probability these inequalities are statistically guaranteed, even when the user is talking to an adversary (aka an active attack) ๐ญ but for absolute guarantee, the receiving party shall explicitly check if these inequalities hold, and abort the session if a check fails ๐ฅ
when the second round finishes, Alice and Bob verify the received ZKPs. if the verification fails, the session is aborted. otherwise, the two parties compute the common key material like this:
- Alice computes
Ka = (B/g4^(x2*s))^x2 mod p - Bob computes
Kb = (A/g2^(x4*s))^x4 mod p
and here's the payoff โจ Ka = Kb = g^((x1+x3)*x2*x4*s) mod p. Let K denote the same key material held by both parties. using K as input, Alice and Bob apply a Key Derivation Function (KDF) to derive a common session key k. if the secure communication that follows uses a symmetric cipher in an authenticated mode (say AES-GCM), then one key is enough, i.e., k = KDF(K). otherwise, the session key should comprise an encryption key (for confidentiality) and a MAC key (for integrity), i.e., k = k_enc || k_mac, where k_enc = KDF(K || "JPAKE_ENC") and k_mac = KDF(K || "JPAKE_MAC"). the exact choice of KDF is left to specific applications to define ๐ธ
2.3. Computational Cost
the cost is estimated by counting modular exponentiations, since those are the biggest cost factors ๐งฎ it takes one exponentiation to generate a Schnorr NIZK proof and two to verify it [RFC8235]. for Alice, that's 8 exponentiations in the first round, 4 in the second round, and 2 in the final session key computation. so that's 14 modular exponentiations in total ๐ by symmetry, Bob's cost is exactly the same โจ
3. J-PAKE over Elliptic Curve
3.1. Protocol Setup
J-PAKE works basically the same way in the elliptic curve (EC) setting, except the underlying multiplicative group over a finite field gets swapped out for an additive group over an elliptic curve ๐ฆ the EC version is specified here for completeness.
when J-PAKE runs over an elliptic curve, it may use the same EC parameters as ECDSA [FIPS186-4]. the FIPS 186-4 standard [FIPS186-4] defines three kinds of curves suitable for ECDSA: pseudorandom curves over prime fields, pseudorandom curves over binary fields, and special curves over binary fields called Koblitz curves or anomalous binary curves. all the curves that work for ECDSA can also be used for J-PAKE. however, for illustration purposes, only curves over prime fields are described in this document. typically those curves include NIST P-256, P-384, and P-521. when choosing a curve, a level of 128-bit security or above is recommended ๐ Let E(Fp) be an elliptic curve defined over a finite field Fp, where p is a large prime. Let G be a generator for the subgroup over E(Fp) of prime order n. the NIST curves are only used as an example here. other secure curves such as Curve25519 are also suitable for implementation ๐ the security proof of J-PAKE relies on the assumption that the DDH problem is intractable in the considered group.
as before, let s denote the shared secret between Alice and Bob. the value of s falls within [1, n-1]. in particular, note that s MUST not be equal to 0 mod n โ ๏ธ
3.2. Two-Round Key Exchange
Round 1: Alice selects ephemeral private keys x1 and x2 uniformly at random from [1, n-1]. Bob similarly selects ephemeral private keys x3 and x4 uniformly at random from [1, n-1] ๐
- Alice -> Bob:
G1 = G x [x1],G2 = G x [x2]and ZKPs for x1 and x2 - Bob -> Alice:
G3 = G x [x3],G4 = G x [x4]and ZKPs for x3 and x4
when this round finishes, Alice and Bob verify the received ZKPs as specified in [RFC8235]. for example, to prove knowledge of the discrete logarithm of D = G x [d] with respect to the base point G, the ZKP contains {UserID, V = G x [v], r = v - d * c mod n}, where UserID is the unique identifier for the prover, v is a number chosen uniformly at random from [1, n-1], and c = H(G || V || D || UserID) ๐ง
the verifier shall check that the prover's UserID is a valid identity and is different from its own identity. if the ZKP verification fails, the session is aborted ๐
Round 2:
- Alice -> Bob:
A = (G1 + G3 + G4) x [x2*s]and a ZKP for x2*s - Bob -> Alice:
B = (G1 + G2 + G3) x [x4*s]and a ZKP for x4*s
when the second round finishes, Alice and Bob verify the received ZKPs. the ZKPs are computed the same way as in the previous round, except the generator is different ๐ for Alice the new generator is G1 + G3 + G4, and for Bob it's G1 + G2 + G3. Alice and Bob shall check that these new generators are not points at infinity. if any of these checks fails, the session is aborted. otherwise, the two parties compute the common key material like so:
- Alice computes
Ka = (B - (G4 x [x2*s])) x [x2] - Bob computes
Kb = (A - (G2 x [x4*s])) x [x4]
ta-da ๐ Ka = Kb = G x [(x1+x3)*(x2*x4*s)]. Let K denote the same key material held by both parties. using K as input, Alice and Bob apply a Key Derivation Function (KDF) to derive a common session key k.
3.3. Computational Cost
in the EC setting, the cost of J-PAKE is estimated by counting scalar multiplications over the elliptic curve ๐ it takes one multiplication to generate a Schnorr NIZK proof and one to verify it [RFC8235]. for Alice, that's 6 multiplications in the first round, 3 in the second round, and 2 in the final session key computation. so that's 11 multiplications in total. by symmetry, Bob's cost is exactly the same ๐
4. Three-Pass Variant
the two-round J-PAKE protocol is completely symmetric, which makes the security analysis way simpler ๐ง in practice though, one party usually starts the conversation and the other party responds. in that case the protocol finishes in three passes instead of two rounds. the two-round J-PAKE protocol can be trivially changed to three passes without losing security. let's use the finite field setting as an example, and assume Alice initiates the key exchange. the three-pass variant goes like this:
- Alice -> Bob:
g1 = g^x1 mod p,g2 = g^x2 mod p, ZKPs for x1 and x2. - Bob -> Alice:
g3 = g^x3 mod p,g4 = g^x4 mod p,B = (g1*g2*g3)^(x4*s) mod p, ZKPs for x3, x4, and x4*s. - Alice -> Bob:
A = (g1*g3*g4)^(x2*s) mod pand a ZKP for x2*s.
both parties compute the session keys in exactly the same way as before โจ
5. Key Confirmation ๐
Okay so the two-round J-PAKE protocol (or the three-pass variant) gives you a cryptographic guarantee that only the authenticated party who used the same password at the other end can compute the same session key ๐. Right now the authentication is only implicit โจ. The key confirmation is implicit too [Stinson06]. Both parties can use the derived key straight away to start secure communication by encrypting messages in an authenticated mode ๐. Only the party with the same derived session key can decrypt and read those messages.
For explicit authentication, you need an additional key confirmation procedure ๐ฆ. This gives you explicit assurance that the other party has actually derived the same key. Once that's done, the key confirmation is explicit [Stinson06] ๐ .
In J-PAKE, explicit key confirmation is recommended whenever the network bandwidth allows it ๐ธ. It's so worth it because you get explicit and immediate confirmation that the two parties derived the same key, which means they're authenticated to each other. This lets a practical J-PAKE implementation effectively detect online dictionary attacks (if any) and stop them by setting a threshold for consecutively failed connection attempts ๐.
There are several methods for achieving explicit key confirmation ๐. They work for all key exchange protocols, not just J-PAKE. In general, it is recommended that a different key from the session key be used for key confirmation, say k' = KDF(K || "JPAKE_KC") ๐ง. The advantage is that the session key stays indistinguishable from random after the key confirmation process. (Honestly though, this perceived advantage is subtle and only theoretical ๐.) Two explicit key confirmation methods are presented here.
The first method is based on the one used in the SPEKE protocol [Jab96] ๐. Say Alice initiates the key confirmation. Alice sends Bob H(H(k')), which Bob will verify. If the verification succeeds, Bob sends back H(k') to Alice, who will verify it too. This procedure takes two rounds, as shown below.
Alice -> Bob: H(H(k'))Bob -> Alice: H(k')
This needs two rounds instead of one because the second message depends on the first. If both parties try to send the first message at the same time without an agreed order, they can't tell whether the message they receive is a genuine challenge or a replayed message ๐ญ, and they may end up in a deadlock ๐.
The second method is based on the unilateral key confirmation scheme specified in NIST SP 800-56A Revision 1 [BJS07] ๐. Alice and Bob send each other a MAC tag, and each verifies the tag they receive. This can be completed in one round โญ.
In the finite field setting, it works like this:
o Alice -> Bob: MacTagAlice = MAC(k', "KC_1_U" || Alice || Bob || g1
|| g2 || g3 || g4)
o Bob -> Alice: MacTagBob = MAC(k', "KC_1_U" || Bob || Alice || g3
|| g4 || g1 || g2)
In the EC setting, the key confirmation works basically the same way ๐.
o Alice -> Bob: MacTagAlice = MAC(k', "KC_1_U" || Alice || Bob || G1
|| G2 || G3 || G4)
o Bob -> Alice: MacTagBob = MAC(k', "KC_1_U" || Bob || Alice || G3
|| G4 || G1 || G2)
The second method assumes an additional secure MAC function (for example, one may use HMAC) and is a bit more complex than the first method ๐ซถ. But it can be completed within one round, and it preserves the overall symmetry of the protocol implementation โจ. That's why the second method is RECOMMENDED ๐.
6. Security Considerations ๐ก๏ธ
A PAKE protocol is designed to provide two functions in one protocol execution ๐ . The first is zero-knowledge authentication of a password. It's called "zero knowledge" because at the end of the protocol, the two communicating parties learn nothing more than one bit of information: whether the passwords supplied at the two ends are equal ๐คซ. So a PAKE protocol is naturally resistant against phishing attacks ๐ฃ. The second function is session key establishment, if the two passwords are equal. The session key protects the confidentiality and integrity of the subsequent communication ๐ฅ.
More concretely, a secure PAKE protocol shall satisfy the following security requirements [HR10] ๐.
- Offline dictionary attack resistance: It does not leak any information that allows a passive or active attacker to perform an offline exhaustive search of the password.
- Forward secrecy: It produces session keys that remain secure even when the password is later disclosed.
- Known-key security: It prevents a disclosed session key from affecting the security of other sessions.
- Online dictionary attack resistance: It limits an active attacker to testing only one password per protocol execution.
First, a PAKE protocol must resist offline dictionary attacks ๐. A password is inherently weak. It typically has only about 20-30 bits of entropy, and that level of security is subject to exhaustive search ๐ฌ. So in the PAKE protocol, the communication must not reveal any data that lets an attacker learn the password through offline exhaustive search.
Second, a PAKE protocol must provide forward secrecy ๐ฆ. The key exchange is authenticated based on a shared password, but there is no guarantee on the long-term secrecy of the password. A secure PAKE scheme shall protect past session keys even when the password is later disclosed. This property also implies that if an attacker knows the password but only passively observes the key exchange, they cannot learn the session key ๐ง.
Third, a PAKE protocol must provide known-key security ๐ธ. A session key lasts throughout the session. An exposed session key must not cause any global impact on the system or affect the security of other sessions.
Finally, a PAKE protocol must resist online dictionary attacks ๐. If the attacker is directly engaging in the key exchange, there's no way to stop them from trying a random guess of the password. Still, a secure PAKE scheme should minimize the effect of the online attack. In the best case, the attacker can only guess exactly one password per impersonation attempt. Consecutively failed attempts can be easily detected, and the subsequent attempts shall be thwarted accordingly ๐ซ. It is recommended that the false authentication counter be handled so that any error (one that causes the session to fail during the key exchange or key confirmation) leads to incrementing the false authentication counter ๐ข.
It has been proven in [HR10] that J-PAKE satisfies all four requirements, based on the assumptions that the Decisional Diffie-Hellman problem is intractable and the underlying Schnorr NIZK proof is secure ๐จ.
An independent study that proves the security of J-PAKE in a model with algebraic adversaries and random oracles can be found in [ABM15] ๐. By comparison, EKE is known to have the problem of leaking partial information about the password to a passive attacker, so it does not satisfy the first requirement [Jas96] ๐ค. For SPEKE and SRP-6, an attacker may be able to test more than one password in one online dictionary attack (see [Zha04] and [Hao10]), so they do not satisfy the fourth requirement in the strict theoretical sense ๐ค. Furthermore, SPEKE is found vulnerable to an impersonation attack and a key-malleability attack [HS14] ๐ฑ. These two attacks affect the SPEKE protocol specified in Jablon's original 1996 paper [Jab96], as well as the D26 draft of IEEE P1363.2 and the ISO/IEC 11770-4:2006 standard. As a result, the specification of SPEKE in ISO/IEC 11770-4:2006 has been revised to address the identified problems ๐.
7. IANA Considerations ๐ท
This document does not require any IANA actions ๐ฐ.
8. References ๐
8.1. Normative References ๐
[ABM15] Abdalla, M., Benhamouda, F., and P. MacKenzie, "Security of the J-PAKE Password-Authenticated Key Exchange Protocol", 2015 IEEE Symposium on Security and Privacy, DOI 10.1109/sp.2015.41, May 2015.
[BM92] Bellovin, S. and M. Merrit, "Encrypted Key Exchange: Password-based Protocols Secure against Dictionary Attacks", IEEE Symposium on Security and Privacy, DOI 10.1109/risp.1992.213269, May 1992.
[HR08] Hao, F. and P. Ryan, "Password Authenticated Key Exchange by Juggling", Lecture Notes in Computer Science, pp. 159-171, from 16th Security Protocols Workshop (SPW '08), DOI 10.1007/978-3-642-22137-8_23, 2011.
[HR10] Hao, F. and P. Ryan, "J-PAKE: Authenticated Key Exchange Without PKI", Transactions on Computational Science XI, pp. 192-206, DOI 10.1007/978-3-642-17697-5_10, 2010.
[HS14] Hao, F. and S. Shahandashti, "The SPEKE Protocol Revisited", Security Standardisation Research, pp. 26-38, DOI 10.1007/978-3-319-14054-4_2, December 2014.
[Jab96] Jablon, D., "Strong Password-Only Authenticated Key Exchange", ACM SIGCOMM Computer Communication Review, Vol. 26, pp. 5-26, DOI 10.1145/242896.242897, October 1996.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, <https://www.rfc-editor.org/info/rfc2119>.
[RFC5054] Taylor, D., Wu, T., Mavrogiannopoulos, N., and T. Perrin, "Using the Secure Remote Password (SRP) Protocol for TLS Authentication", RFC 5054, DOI 10.17487/RFC5054, November 2007, <https://www.rfc-editor.org/info/rfc5054>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, <https://www.rfc-editor.org/info/rfc8174>.
[RFC8235] Hao, F., Ed., "Schnorr Non-interactive Zero Knowledge Proof", RFC 8235, DOI 10.17487/RFC8235, September 2017, <https://www.rfc-editor.org/info/rfc8235>.
[SEC1] "Standards for Efficient Cryptography. SEC 1: Elliptic Curve Cryptography", SECG SEC1-v2, May 2009, <http://www.secg.org/sec1-v2.pdf>.
[Stinson06] Stinson, D., "Cryptography: Theory and Practice", 3rd Edition, CRC, 2006.
[Wu98] Wu, T., "The Secure Remote Password Protocol", Internet Society Symposium on Network and Distributed System Security, March 1998.
8.2. Informative References โจ
Okay bestie, these are the informative references, aka the sources that back up the spec without being required reading ๐๐ซถ
- [AP05] Abdalla, M. and D. Pointcheval, "Simple Password-Based Encrypted Key Exchange Protocols", Topics in Cryptology CT-RSA, DOI 10.1007/978-3-540-30574-3_14, 2005.
- [BJS07] Barker, E., Johnson, D., and M. Smid, "Recommendation for Pair-Wise Key Establishment Schemes Using Discrete Logarithm Cryptography (Revised)", NIST Special Publication 800-56A, March 2007,
http://csrc.nist.gov/publications/nistpubs/800-56A/SP800-56A_Revision1_Mar08-2007.pdf. - [BOINC] BOINC, "Index of /android-boinc/libssl/crypto/jpake", February 2011,
http://boinc.berkeley.edu/android-boinc/libssl/crypto/jpake/. - [BOUNCY] Bouncy Castle Cryptography Library, "org.bouncycastle.crypto.agreement.jpake (Bouncy Castle Library 1.57 API Specification)", May 2017,
https://www.bouncycastle.org/docs/docs1.5on/org/bouncycastle/crypto/agreement/jpake/package-summary.html. - [FIPS186-4] National Institute of Standards and Technology, "Digital Signature Standard (DSS)", FIPS PUB 186-4, DOI 10.6028/NIST.FIPS.186-4, July 2013,
http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf. - [Hao10] Hao, F., "On Small Subgroup Non-Confinement Attacks", IEEE Conference on Computer and Information Technology, DOI 10.1109/CIT.2010.187, 2010.
- [ISO.11770-4] ISO/IEC, "Information technology -- Security techniques -- Key management -- Part 4: Mechanisms based on weak secrets", (under development), July 2017,
https://www.iso.org/standard/67933.html. - [Jas96] Jaspan, B., "Dual-Workfactor Encrypted Key Exchange: Efficiently Preventing Password Chaining and Dictionary Attacks", USENIX Symposium on Security, July 1996.
- [MOZILLA] Mozilla Wiki, "Services/KeyExchange", August 2011,
https://wiki.mozilla.org/index.php?title=Services/KeyExchange&oldid=343704. - [MOZILLA_NSS] Mozilla Central, "jpake.c - DXR", August 2016,
https://dxr.mozilla.org/mozilla-central/source/security/nss/lib/freebl/jpake.c. - [PALEMOON] Moonchild Productions, "Pale Moon Sync",
https://www.palemoon.org/sync/. - [RFC4419] Friedl, M., Provos, N., and W. Simpson, "Diffie-Hellman Group Exchange for the Secure Shell (SSH) Transport Layer Protocol", RFC 4419, DOI 10.17487/RFC4419, March 2006,
https://www.rfc-editor.org/info/rfc4419. - [SOAA15] Smyshlyaev, S., Oshkin, I., Alekseev, E., and L. Ahmetzyanova, "On the Security of One Password Authenticated Key Exchange Protocol", 2015,
http://eprint.iacr.org/2015/1237.pdf. - [THREAD] Thread, "Thread Commissioning", White Paper, July 2015,
https://portal.threadgroup.org/DesktopModules/Inventures_Document/FileDownload.aspx?ContentID=658. - [Zha04] Zhang, M., "Analysis of the SPEKE Password-Authenticated Key Exchange Protocol", IEEE Communications Letters, Vol. 8, pp. 63-65, DOI 10.1109/lcomm.2003.822506, January 2004.
Acknowledgements ๐
The editor would like to thank Dylan Clarke, Siamak Shahandashti, Robert Cragie, Stanislav Smyshlyaev, and Russ Housley for many useful comments. This work is supported by EPSRC First Grant (EP/J011541/1) and ERC Starting Grant (No. 306994). ๐ธ
Author's Address ๐
Feng Hao (editor) Newcastle University (UK) Urban Sciences Building, School of Computing, Newcastle University Newcastle Upon Tyne United Kingdom
Phone: +44 (0)191-208-6384 Email: feng.hao@ncl.ac.uk
๐ฆ where this page comes from
- ietf: rfc8236 2017-09
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms