On Fri, 2010-03-26 at 19:48 -0700, Scott Fluhrer (sfluhrer) wrote: > > > -----Original Message----- > > From: ipsec-boun...@ietf.org [mailto:ipsec-boun...@ietf.org] On Behalf > > Of Joy Latten > > Sent: Friday, March 26, 2010 5:25 PM > > To: mlepin...@bbn.com; k...@bbn.com > > Cc: ipsec@ietf.org; avaga...@redhat.com > > Subject: [IPsec] Question about RFC 5114 > > > > Hi, > > > > I am looking to implement modp groups 22, 23, and 24 into IKE but have > > a > > question. > > > > RFC 5114 gives the prime, p, the generator, g and a subgroup, q, with a > > specific size... > > > > Because prior rfcs for modp groups did not specify a "q", I was not > > sure > > if this was a new constant or just stating a size requirement? > > q is the order of the generator. For the previous (traditional) MODP groups > (1,2,5,14-18), we have q=(p-1)/2 > > > So I took a look at NIST 800-56A. In particular, > > > > 5.6.1 Private/Public Key Pair Generation > > > > 5.6.1.1 FFC Key Pair Generation > > For the FFC schemes, each static and ephemeral private key and public > > key shall be generated using an Approved method and the selected valid > > domain parameters (p, q, g{, SEED,pgenCounter}) (see Appendix B of FIPS > > 186-3). > > ... > > > > I then took a look at FIPS 186-3, Appendix B, which documents 2 methods > > for finite field cryptography (FFC) key pair generation. > > For example, one method is "Key Pair Generation Using Extra Random > > Bits". It actually states that "q" is an input and it is used to do an > > additional computation to compute "x". > > > > I am somewhat confused, are the modp groups 22, 23 & 24 suppose to use > > one of these new methods and that is why "q" is given in rfc 5114? > > Or am I to ignore this and just continue with existing way > > where "q" is not used and there aren't any additional computations > > to compute x. > > Short answer: it doesn't really matter; the old way is safe (for DH). > > Longer answer: FIPS 186-3 was written about generating values for DSA, not > DH. Now, for DSA, there is a known weakness if the exponents you use are > biased; these algorithms used in FIPS 186-3 were designed to make sure that > the exponents are unbiased (or close enough not to matter). DH doesn't have > similar issues, and so these steps aren't required (although they wouldn't > hurt either). > > Now, you don’t need to use the same exponent size that you would use for the > same size traditional groups; for example, RFC3526 suggests an exponent of > between 220-320 bits for group 14; for group 24, there's no point in an > exponent greater than 256 bits. This is because the exponent is essentially > taken "mod q" by the algorithm, and so making it larger than q gives you more > work without giving any benefit. Note that when FIPS 186-3 talks about using > "extra random bits", they reduce the larger value so that it is <q (step 6 of > B.1.1). > > > On the other hand, NIST SP 800-56A also asks you to validate the peer public > value (section 5.6.2.4), and this also uses q as an input. Here's why that > really does matter for groups 22-24 (and not so much for groups 1,2,5,14-18): > > - If you reuse DH exponents, and you don't validate the peer's public value, > then there is a way for an attacker to determine the value of your exponent > modulo r, where r is a small factor of (p-1)/q. > - This attack involves sending illegal peer public values as a part of the > IKE exchange, and seeing what keying material the unit comes up with. > Because these values are illegal, validating the values foils the attack. > - This takes O(r) time on the attacker's part, which is why r can't be too > large. > > For the traditional groups, (p-1)/q == 2, and so r=2 is the only one the > attacker can use (hence the attacker would be able to determine the lsbit of > your exponent via this attack, but nothing else). It turns out that there's > a short cut to test on the peer public value in this case (compute the > Legendre symbol), but even if you don't, the attacker gets minimal > information. > > For these new groups, (p-1)/q is quite large, and in all three cases, has a > number of small factors (now, NIST could have defined groups where (p-1)/q > has 2 as the only small factor; they declined to do so). For example, for > group 23 (which is the worse of the three), (p-1)/q == 2 * 3 * 3 * 5 * 43 * > 73 * 157 * 387493 * 605921 * 5213881177 * 3528910760717 * > 83501807020473429349 * C489 (where C489 is a 489 digit composite number with > no small factors). The attacker could use this (again, if you don't validate > the peer value) to effective cut your exponent size by about 137 bits with > using only O(2**42) time); if you used 224 bit exponents, then the attacker > would cut the work used to find the rest of the exponent to about O(2**44) > time. Obviously, this is not acceptable. >
Thanks so much for the detail. It has helped greatly. I did take a look at NIST SP 800-56A section 5.6.2.4 for validating the public value. I am in learning mode, so I found the 2nd step confusing... 1. Verify that 2 <= y <= p - 2 2. Verify that y^q = 1 (mod p) Are the parenthesis around "mod p" correct? This is how it is in the NIST doc. Thanks!! regards, Joy _______________________________________________ IPsec mailing list IPsec@ietf.org https://www.ietf.org/mailman/listinfo/ipsec