Algorithm used by BigInteger prime generator?
Andrew Haley
aph at pasanda.cygnus.co.uk
Thu Apr 22 07:44:11 PDT 1999
> From: Alexandre Oliva <oliva at dcc.unicamp.br>
> Date: 22 Apr 1999 11:09:10 -0300
>
> On Apr 22, 1999, Andrew Haley <aph at pasanda.cygnus.co.uk> wrote:
>
> > As far as I can see, what is intended is something like this:
>
> > if (candidate.isProbablePrime (certainty))
> > return candidate;
> > else
> > candidate = candidate.add (BigInteger.valueOf (2));
>
> Except that this may generate a prime with more than bitLength bits,
Did you not see my comment that "a real version should check for
overflows"?
> Furthermore, it doesn't generate randomly distributed primes
The specification doesn't require it to.
The technique of simply adding 2 until a prime is reached is pretty
much standard in crypto, and with crypto-sized BigIntegers the
deviation from a uniform distribution is insignificantly small.
If this is really unacceptable, a new random integer could be
generated with each iteration, which answers such objections, but it's
an extra run-time overhead.
> and I'm not sure this meets the requirement of O(certainty).
I don't understand this. Are you saying that isProbablePrime
(certainty) does not meet the requirement of O(certainty)?
> Nevertheless, the specification leaves room for a lot of different
> implementations, particularly in the use of rnd, which is unacceptable
> for WORA.
I see your point. However, the requirement that all implementations
return the same result means that implementors are prevented from
inventing a more efficient prime generator. In real-world crypto
applications, where random primes are frequently generated, this is
very bad news. In financial applications, it is not uncommon to use
hardware accelerators to generate random primes: it would be
impossible to use such hardware if the exact algorithm used to
generate primes was fixed.
Andrew.
More information about the kaffe
mailing list