[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Is my DH exchange secure?



[Please don't quote entire messages.  It's a good way to make sure
your words afterwards get read by far fewer people.]

   The one precaution I did not take is: (from discussion above)

[looking for number of small order]

   Does the careful choosing of n and g eliminate this problem, or do I need
   to modify my Diffie-Hellman code to check g^a for short order? How do you
   check a number for short order?

If you wish to use generators mod p, proper choice of the prime will
minimize the problem; the generator has nothing to do with it.  All
generators are symmetric, or, more precisely, the automorphism group
takes each generator to every other.  Picking the prime p so that
p=2q+1 and q prime will reduce the number of elements with small order
to 2, namely 1 and -1.

In the more general case, let p=kq+1, where q is the large prime
factor of p-1 necessary for security.  Now the order of an element x
must divide p-1, so if it's not of order q or larger, i.e. safe, then
it must be of order k.  So calculate x^k (mod p) and see if it's equal
to 1.  If it is, then x has small order.

On the other hand, the tests for small order can be minimized by using
a generator of the subgroup of size q inside the group mod p, rather
than a generator of the full group.  Let p=kq+1 and let g be a
generator of Z/pZ (notation for the group of integers modulo p).  Then
g^k has order q in Z/pZ.  Since g generates the group, kq is the
smallest positive integer t such that g^t = 1 (mod p).  g^(kq) =
(g^k)^q, so g^k has order q.

Now if you use h=g^k as the base for the D-H exchange, the only h^x
with small order happens when x=0.  One can simply make the range of
the random numbers from 1 to q-1.  Because h has order q, and since q
is prime, every h^x except x=0 will also have order q.  Therefore
there are no "bad" values for x.  They have been removed by
construction in advance.

Eric