Re: [Cfrg] 40 bit loop and DragonFly

"Igoe, Kevin M." <kmigoe@nsa.gov> Mon, 06 January 2014 16:47 UTC

Return-Path: <kmigoe@nsa.gov>
X-Original-To: cfrg@ietfa.amsl.com
Delivered-To: cfrg@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id C81361AE0DC for <cfrg@ietfa.amsl.com>; Mon, 6 Jan 2014 08:47:00 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -7.438
X-Spam-Level:
X-Spam-Status: No, score=-7.438 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_HI=-5, RP_MATCHES_RCVD=-0.538] autolearn=ham
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 2jq1HavSABqH for <cfrg@ietfa.amsl.com>; Mon, 6 Jan 2014 08:46:58 -0800 (PST)
Received: from nsa.gov (emvm-gh1-uea08.nsa.gov [63.239.67.9]) by ietfa.amsl.com (Postfix) with ESMTP id 057F11AE05B for <cfrg@irtf.org>; Mon, 6 Jan 2014 08:46:57 -0800 (PST)
X-TM-IMSS-Message-ID: <653a6d5600065939@nsa.gov>
Received: from MSHT-GH1-UEA02.corp.nsa.gov ([10.215.227.181]) by nsa.gov ([63.239.67.9]) with ESMTP (TREND IMSS SMTP Service 7.1; TLSv1/SSLv3 AES128-SHA (128/128)) id 653a6d5600065939 ; Mon, 6 Jan 2014 11:45:56 -0500
Received: from MSMR-GH1-UEA01.corp.nsa.gov (10.215.225.4) by MSHT-GH1-UEA02.corp.nsa.gov (10.215.227.181) with Microsoft SMTP Server (TLS) id 14.2.342.3; Mon, 6 Jan 2014 11:46:47 -0500
Received: from MSMR-GH1-UEA03.corp.nsa.gov ([10.215.224.3]) by MSMR-GH1-UEA01.corp.nsa.gov ([10.215.225.4]) with mapi id 14.02.0342.003; Mon, 6 Jan 2014 11:46:47 -0500
From: "Igoe, Kevin M." <kmigoe@nsa.gov>
To: "'Scott Fluhrer (sfluhrer)'" <sfluhrer@cisco.com>, "'cfrg@irtf.org'" <cfrg@irtf.org>
Thread-Topic: 40 bit loop and DragonFly
Thread-Index: Ac8Jtz8QHBqZuWIRSrC0AhG0eZjDKgAnaYVwACaLG2A=
Date: Mon, 06 Jan 2014 16:46:46 +0000
Message-ID: <3C4AAD4B5304AB44A6BA85173B4675CABA9A0B90@MSMR-GH1-UEA03.corp.nsa.gov>
References: <3C4AAD4B5304AB44A6BA85173B4675CABA99F80C@MSMR-GH1-UEA03.corp.nsa.gov> <A113ACFD9DF8B04F96395BDEACB340420B77D4CC@xmb-rcd-x04.cisco.com>
In-Reply-To: <A113ACFD9DF8B04F96395BDEACB340420B77D4CC@xmb-rcd-x04.cisco.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-originating-ip: [10.215.224.46]
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
Subject: Re: [Cfrg] 40 bit loop and DragonFly
X-BeenThere: cfrg@irtf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: Crypto Forum Research Group <cfrg.irtf.org>
List-Unsubscribe: <http://www.irtf.org/mailman/options/cfrg>, <mailto:cfrg-request@irtf.org?subject=unsubscribe>
List-Archive: <http://www.irtf.org/mail-archive/web/cfrg/>
List-Post: <mailto:cfrg@irtf.org>
List-Help: <mailto:cfrg-request@irtf.org?subject=help>
List-Subscribe: <http://www.irtf.org/mailman/listinfo/cfrg>, <mailto:cfrg-request@irtf.org?subject=subscribe>
X-List-Received-Date: Mon, 06 Jan 2014 16:47:01 -0000

For the record, some observations:

1) We will often need to try more than one x until we find 
one where f = x**3+a*x*b is a quadratic residue mod p (probability 
(1/2)**k that it takes k tries).  Requiring that we always pass 
through the loop
     { update x; 
       calculate f; 
      check if f is a quadratic residue; } 
a fixed number of times (I suggested 40) masks how many steps 
were actually need to find an x for which f is a QR.

2) Since computing a Jacobi symbol is faster than exponentiation, 
I like your idea of blinded calculation of the Jacobi symbol.  
to see whether or not a given f is a QR. It's nice that the client 
and server can use independent blinding factors and still arrive 
at the same result.

3) When 2^k | p-1 for k>1, some square root calculations are 
faster than others, but taking the square root of the blinded
f should mask that just fine. 

4) That just leaves multiplying sqrt((r**2)*f ) = r*sqrt(f)
by (1/r) => need to calculate 1/r, which can be done either 
by an exponentiation or by the extended Euclidean algorithm.
Since the extended Euclidean algorithm is variable time, it 
might leak information about r, so exponentiating by p-2 is 
the safer alternative.  Fortunately, this only has to be done
once, not "40" times.

------------------------------------------------------------

I believe there aren't any insurmountable issues associated 
with DragonFly, but that doesn't mean Dan and the RG don't 
have some work to do.  


> -----Original Message-----
> From: Scott Fluhrer (sfluhrer) [mailto:sfluhrer@cisco.com]
> Sent: Sunday, January 05, 2014 3:36 PM
> To: Igoe, Kevin M.; 'cfrg@irtf.org'
> Subject: RE: 40 bit loop and DragonFly
> 
> 
> 
> > -----Original Message-----
> > From: Cfrg [mailto:cfrg-bounces@irtf.org] On Behalf Of Igoe, Kevin M.
> > Sent: Saturday, January 04, 2014 8:41 PM
> > To: 'cfrg@irtf.org'
> > Subject: [Cfrg] 40 bit loop and DragonFly
> >
> > Scott Fluhrer wrote:
> >
> > I think we agree that what Dan specified in the draft is broken.
> > However, I believe that's because Dan got it wrong (and I was busy
> > elsewhere, and did not review the draft).
> >
> > I believe my suggestion is an improvement (but still needs caution;
> > the checking if x^3+ax+b is a QR must be done in constant time, or in
> > random time via blinding; I believe that in this case blinding is
> easier).
> >
> > Now, I believe the issue is 'did Kevin endorse my suggestion, or did
> > he endorse Dan's implementation?'
> > ---------------------------------
> >
> > Actually I had something more like the process outlined below in
> mind.
> 
> Both your procedure and mine look good.
> 
> The only thing (and I think we ought to be explicit about it) is that
> the various operations need to run in constant time; we need to
> explicitly state that the modular additions and multiplications need to
> be run in time independent of the values being added and multiplied.
> The only exception in either of our proposals is the Legendre symbol
> computation, and that's true IF you are using blinding like I
> suggested; that's safe because the time it takes is not correlated with
> any value we need to keep secret.
> 
> This might be fairly obvious; however I don't know if we want to omit
> obvious precautions.
> 
> >
> > First an elementary (and somewhat obscure)fact:
> >
> >   For any prime p = 3 mod 4 and any non-zero f in Z/p, let
> >             r = f**((p+1)/4).
> >   If f is a quadratic residue mod p (i.e. has a square root mod p),
> >   then r**2 = f, otherwise r**2 = -f.
> >
> > (This is easy to see since
> >              r**2 = f**((p+1)/2) mod p
> >                   = f * f**((p-1)/2) mod p and f**((p-1)/2) = 1 mod p
> > if f has a square root mod p and is
> > -1 otherwise).
> >
> > Aside from cases of vanishingly small probability (e.g f = 0, 1 or
> > -1), the time to do this exponentiation  depends upon two publicly
> > known values, the modulus p and the exponent ((p+1)/4), and not upon
> > the secret values x and f.  I'd advise using Montgomery arithmetic as
> > this is a very efficient and methodical technique for doing mod p
> arithmetic.
> >
> > So what had I envisioned is something like this (in pythonese):
> >
> > Bad = []
> > Good = []
> > for t in range(40):
> >     x  = one_way_update(x)
> >     f  = x**3 + a*x + b mod p
> >     r  = f**((p+1)/4)
> >     f1 = r**2
> >     if f1 == f:
> >         Good.append( (x,r) )
> >     else:
> >         Bad.append( (x,r) )
> >
> > if len(Good) == 0:
> >     raise ValueError
> > else:
> >     return Good[0]
> >
> >
> > Observations:
> >  - This should be consant in time and memory usage.
> >  - Prob of hitting the error condition is 2**-40 ~= 10**-12.
> >  - The 40 could be increased if the RG deems that to be prudent.
> >
> >
> > Potential IPR issues:
> > Certicom has granted permission to the IETF to use the NIST curves,
> > and at least two of these, P256 and P384, have p = 3 mod 4.  Not
> being
> > a patent lawyer, I have no idea what impact the Certicom patents have
> > on the use of newer families of curves, such as Edwards curves.
> > RFC 6090 outlines elliptic curve technology which predates the
> > Certicom patents.
> > _______________________________________________
> > Cfrg mailing list
> > Cfrg@irtf.org
> > http://www.irtf.org/mailman/listinfo/cfrg