Subject: [Cfrg] password-based key exchange

From: "Dan Harkins" <[email-masked]>
Date: Tue, 20 Dec 2011 13:38:09 -0800 (PST)

Hello,

  I proposed a new TLS ciphersuite using a zero knowledge proof at
IETF 82 in Taipei. The draft is here:

       http://tools.ietf.org/html/draft-harkins-tls-pwd-01

At the TLS WG meeting I was requested to ask people on the CFRG list
with expertise in this field to take a look at it. So here I am, asking.
If someone has some spare cycles this holiday season, if you just gotta
get away from the relatives, or you are just feeling in the giving mood,
please take a look and comment. Any analysis on this would be greatly
appreciated. (I tried to do a formal proof but I cannot, and that's
what's prompting this).

  I can describe the key exchange broadly here. There are subtle
differences in the draft-- like one side keeps a salted version of the
password and communicates the salt during a HELLO message-- that don't
affect the exchange. It is symmetric so I can describe it from one side's
perspective. The side being described is "local" and the other side is
"peer", it goes like this:

Given: local ID, peer ID, password, an agreed-upon set of domain
parameters defining a finite field group (it works will elliptic
curve crypto too) and using two function:

  - E = HashToElement(d) which takes some data, d, and hashes into
    the finite field to return an element, E.
  - x = H(y) returns a random stream, x, given some input, y.

The key exchange works like this:

1. PE = HashToElement(local_ID | peer_ID | password)
   gets a "password element"

   There is an ordering defined in the draft to ensure that the IDs
   are put in the same order on each side.

2. generate 2 random numbers between 0 and the order of the group, q:

   0 < local_rand, local_mask < q

3. compute a scalar and an element:
   local_scalar = (local_rand + local_mask) mod q
   local_element = 1/(PE^local_mask) mod p

   where p is the prime and q is the order. Send local_scalar and
   local_element to other side

4. receive peer_scalar and peer_element from other side

5. compute shared key, K

   K = (PE^peer_scalar * peer_element)^local_rand mod p =
       (PE^(peer_rand + peer_mask) * PE^(-peer_mask))^local_rand mod p =
       PE^(peer_rand*local_rand) mod p

6. compute a confirmation

   local_confirm = H(K, local_scalar | local_element |
                     peer_scalar | peer_element)

   send confirmation to peer

7. receive peer's confirmation, calculate verifier

   verifier = H(K, peer_scalar | peer_element | local_scalar |
                local_element)

   if verifier equals peer's confirmation the peer is authenticated.

The peer does the same thing but from its perspective it is "local"
and the side described above is "peer".

  Thank you in advance for any analysis that can be provided on this
exchange.

  regards,

  Dan.

---

From: "Scott Fluhrer (sfluhrer)" <[email-masked]>
Date: Tue, 20 Dec 2011 14:17:33 -0800

One minor comment (which might be totally obvious):

> -----Original Message-----
> From: [email-masked] [mailto:[email-masked]] On Behalf
Of
> Dan Harkins
> Sent: Tuesday, December 20, 2011 4:38 PM
> To: [email-masked]
> Cc: [email-masked]
> Subject: [Cfrg] password-based key exchange
> 
> 
>   Hello,
> 

You probably should have an explicit test and rejection for K = 1
('point at infinity' for EC groups)...

> _______________________________________________
> Cfrg mailing list
> [email-masked]
> http://www.irtf.org/mailman/listinfo/cfrg

---

From: "Dan Harkins" <[email-masked]>
Date: Tue, 20 Dec 2011 14:56:53 -0800 (PST)

Hello,

On Tue, December 20, 2011 1:52 pm, Adam Back wrote:
> I noticed no reference to SRP nor TLS-SRP draft.  It seems this draft
> duplicates the functionality?  Note SRP can also operate in elliptic
> curves
> and SRP is specified in IEEE P1363 standard.

  Correct, there is no reference to TLS-SRP.

> There is no reference to the specific password authenticated key exchange
> that I saw.  Is it an existing one, or one that you designed?  I ask
> because
> its harder than it looks to design EKE / AKE related protocols and some of
> the early ones were broken, and others had their design security eroded.
> SRP has at least been published for quite some time.

  It's one I designed. It's been incorporated into 802.11 and will be part
of the forthcoming -2012 version of that standard. It is also an EAP
method (RFC 5931). The difficulty in designing these sorts of protocols
is acknowledged and is, in fact, the whole basis for this request.

  regards,

  Dan.