Let
,
, and
be real numbers with
and
.
Recall that the ``log to the base
'' function
characterized by
We use the
That is, given
sage: log(19683.0) 9.88751059801299 sage: log(3.0) 1.09861228866811 sage: log(19683.0) / log(3.0) 9.00000000000000SAGE can quickly compute a numerical approximation for
The discrete log problem is the analogue of computing
but
where both
and
are elements of a finite group.
As far as we know, finding discrete logarithms in
when
is large is
``very difficult'' in practice. Over the years, many people have been
very motivated to try. For example, if Nikita's captors could
efficiently solve Problem 3.1.2, then they could read the
messages she exchanges with Michael. Unfortunately, we have no formal
proof that computing discrete logarithms on a classical computer is
difficult. Also, Peter
Shor [#!shor!#] showed that if one could build a
sufficiently complicated quantum computer, it
could solve the discrete logarithm problem in time bounded by a
polynomial function of the number of digits of
.
It is easy to give an inefficient algorithm that solves the discrete
log problem. Simply try
,
,
, etc., until we find an
exponent
such that
. For example, suppose
,
,
and
. Working modulo
we have
so
This draws the continuous plot.
sage.: show(plot(log, 0.1,10, rgbcolor=(0,0,1)))
This draws the discrete plot.
sage: p = 53 sage: R = Integers(p) sage: a = R.multiplicative_generator() sage: v = [(a^n, n) for n in range(p-1)] sage: v.sort() sage: G = plot(point(v,pointsize=50,rgbcolor=(0,0,1))) sage: H = plot(line(v,rgbcolor=(0.5,0.5,0.5))) sage.: show(G + H)
William 2007-06-01