Re: [Cfrg] Status of DragonFly

Rene Struik <> Thu, 13 December 2012 19:12 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 86E0421F880F for <>; Thu, 13 Dec 2012 11:12:15 -0800 (PST)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -3.599
X-Spam-Status: No, score=-3.599 tagged_above=-999 required=5 tests=[AWL=-0.001, BAYES_00=-2.599, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-1]
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id 4jzn3V0n+wTK for <>; Thu, 13 Dec 2012 11:12:00 -0800 (PST)
Received: from ( []) by (Postfix) with ESMTP id 5746E21F871D for <>; Thu, 13 Dec 2012 11:12:00 -0800 (PST)
Received: by with SMTP id x2so2370620iad.13 for <>; Thu, 13 Dec 2012 11:12:00 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=20120113; h=message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-type; bh=tXPjjasxVTOrEvQkIidRPcex6XIJqSGQY4QoWHj3DwY=; b=m+QDVe3mPQYyiNbhsxidaq+dj7VUzoI7Aj9xcmxO7acISJ1PqreQwjF2KNs+guwD0U 1UySYiTBwJr5kg01emzK8nL+dr5hEg5vBUp9CAI9e9JhOPM3iS2GhmnE+EZ6WErVLP5x HzyIE7QAaWAmU+Mv0b04+0k0dkFHx5X0Stf6qV2+4lwoc9npPM3ST9jPPdkLKRzVJaWk tAJOsO8retUS+z3TrhKJdaZ/EX5dsB8pfjqgSlBnVnraI1GO3W6zCiSDseOaBmBJNbbA g2F3xIrc1EINXjJhawzJa4FFau525bmAM8m5M+zFnfslijAGFP9OCHHKnlO77/gPxJrr 2L1A==
Received: by with SMTP id no7mr2820986igc.18.1355425919871; Thu, 13 Dec 2012 11:11:59 -0800 (PST)
Received: from [] ( []) by with ESMTPS id yf6sm1958347igb.0.2012. (version=TLSv1/SSLv3 cipher=OTHER); Thu, 13 Dec 2012 11:11:59 -0800 (PST)
Message-ID: <>
Date: Thu, 13 Dec 2012 14:11:47 -0500
From: Rene Struik <>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/17.0 Thunderbird/17.0
MIME-Version: 1.0
To: "Igoe, Kevin M." <>
References: <>
In-Reply-To: <>
Content-Type: multipart/alternative; boundary="------------030500070005090701000905"
Cc: Dan Harkins <>, "" <>
Subject: Re: [Cfrg] Status of DragonFly
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: Crypto Forum Research Group <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Thu, 13 Dec 2012 19:12:15 -0000

Hi Kevin:

I do share some of your timing attack concerns. Unless I missed 
something here, your suggested fix does not seem to work, however:

Suppose A and B use ECDH with as generator the point G(p):= pG, where 
p:=kdf(..) {I use small-case p ("password") rather than capital-case X 
below (so as to separate scalars and elliptic curve points)}. Now, 
suppose A and B exchange X:=xG(p) where p is the correct password and 
where Y:= y G(p'), where p' is any guess for p by B (or just takes 
p":=1). Then A (the legitimate party holding password p) computes Ka:= 
(xy) G(p')= (xy p') G and B computes Kb:=(yx) G(p)= (yxp) G. In other 
words, Ka:= p' K, Kb:= p K, where K:= (xy)G. So, Ka:= (p'/p) Kb. Now, 
once A sends B a key confirmation message, B can just cycle through the 
password space, compute a candidate key that A could have computed and 
check the validity of his guess via verification of the key confirmation 
message just received.

As to implementing Dragonfly, one has to be careful in case of active 
attacks: as an example, if one uses multiple-point multiplications, one 
may end up at the point of infinity as intermediate point in the 
computation, thus forcing implementations to use exception handling 
routines for point addition/doubling along the entire computational path 
(Note: if one hits the point at infinity, this exposes the password 
used, thus leaking the entire password in an observable way). If one 
does not use multiple-point multiplications, this attack seems much 
harder but requires two full scalar multiplications (rather than one 
scalar multiplication as, e.g., SPEKE requires).

Best regards, Rene

A possible fix is to use the KDF to generate a random X, 1<X<q, where q 
is the size of the cryptographic
subgroup of the curve, and take PE = X*G, where G is the generator of 
the cryptographic subgroup.  For
most cryptographic curves,  q  is very, very close to 2^n, so it is VERY 
unlikely that more than 1 call to the
KDF will be needed.

On 12/13/2012 1:42 PM, Igoe, Kevin M. wrote:
> I'd like the reading list's input on DragonFly (hereafter called DF), 
> Dan Harkins' Password Authenticated
> Key Exchange design (draft-irtf-cfrg-dragonfly-00).  I'd like to point 
> out that draft-harkins-tls-pwd-03
> is a proposal to useDF in  TLS that differs slightly from the CFRG draft.
> Here is where I believe we stand:
>  1. Confidentiality: The proof that the confidentiality of the key
>     generated by the DF
>     protocol is reducible to the standard Diffie-Hellmann problem is
>     quite straight
>     forward, so the resulting shared secret value is at least as
>     secure as with  standard DH/ECDH.
>  2. Authentication: Obviously the system can be no more secure than
>     the password
>     being used. I believe the most viable attack is to guess a
>     password, use this password
>     to initiate the  DF protocol with the endpoint being attacked, and
>     see if it works.
>     Monitoring the system logs should easily detect such an attack.
>  3. Timing: I'm particularly concerned about the method used to
>     generate the PE (password
>     dependent base point) in the ECDH case. Inside a while loop,
>     several parameters,
>      including the identities of the two endpoints, the shared
>     password, and a counter are
>     passed to a KDF to produce an n-bit output, where the curve is mod
>     an n-bit prime p.
>     The resulting n-bit value X is checked to see if 0 <= X < p and
>     X^3+a*X+b is a quadratic
>     residue mod p (an event of probability ½).  If both these tests
>     are passed, the while
>     loop is exited and X is used as the x-coordinate of our PE.
>     The problem I see with (3) is that the number of times through the
>     loop gives an opponent a
>     check  on any putative value for the password.  E.g.  if their
>     current guess for the password
>     takes many passes through the while loop to generate the PE, but
>     they observe that the DF response
>      time is inconsistent with that, they have eliminated that guess
>     for the password.
> When DF is applied to TLS in as described in draft-harkins-tls-pwd-03, 
> two nonces are used as
> inputs to the KDF, which has two consequences:
>  1. the PE MUST be computed online
>  2. each DF exchange gives an independent timing check on the password.
> The opponent can passively sit back, monitoring the timing of DF 
> exchanges on various links until
> they stumble across one where the timings match up with the timings 
> associated with one of the
> passwords they are testing. They've now are able to bypass the 
> authentication provided by DF.
> A possible fix is to use the KDF to generate a random X, 1<X<q, where 
> q is the size of the cryptographic
> subgroup of the curve, and take PE = X*G, where G is the generator of 
> the cryptographic subgroup.  For
> most cryptographic curves,  q  is very, very close to 2^n, so it is 
> VERY unlikely that more than 1 call to the
> KDF will be needed.
> Another fix would be to require PE generation be done offline, which 
> would eliminate any possibility of
> using nonces in the DF protocol.  One could, however, mix the nonces 
> in after the completion to the
> DF based Diffie-Hellmann exchange.
> ----------------+--------------------------------------------------
> Kevin M. Igoe   | "We can't solve problems by using the same kind
> _kmigoe@nsa.gov_ <>  | of thinking we used when 
> we created them."
>                 |              - Albert Einstein -
> ----------------+--------------------------------------------------
> _______________________________________________
> Cfrg mailing list

email: | Skype: rstruik
cell: +1 (647) 867-5658 | US: +1 (415) 690-7363