« previous | Tuesday, April 23, 2013 | next »
Encoding Plain-Text on Elliptic Curves
Using
for
large makes it easy to encode messages:
if
for primes
, then
You'd like to do the same on an elliptic curve. e.g.
- 1 ⟼ first point on curve
- 2 ⟼ second point on curve
- …
Unfortunately, there is no known poly-time algorithm for enumerating points on an elliptic curve over a finite field.
N. Koblitz came up with the following trick:
To transmit
, add a few digits and use square roots.
Consider
over
, where
.
According to Hasse's Theorem, The number of points
on
satisfies
, so there are about a million points on this curve.
Can we efficiently encode
as points on
? What about
?
Koblitz proposed adding a few (
) digits:
In our cose, let's just add a single digit 0:
Now is there a
with
? Compute legendre symbol
: YES
Decoding: If you see
, then your message is just
.
Note, when encoding
as elements of
for
, there were just 2 failures. When encoding on an elliptic curve, how many failures are there?
Koblitz's Heuristic
Since exactly half the elements of
are squares, a random
results in
with probability approx. 50%
So then, among all 193120–193129, we'll find at least one with probability
Thus, the general trick is to encode
as points on
with
, add on
extra digits, and pick the last
digits randomly
with probability at least
, you've encoded successfully.
Elliptic Curve Analogues of Cryptosystems
El Gamal
Formerly worked over
and was based on the discrete log problem.
Elliptic Curve El Gamal is defined over
and is based on the elliptic curve discrete log, an even harder problem than discrete log! Thus the fancier cryptosystem allows for smaller keys
Public |
Private
|
= large prime
|
|
= (nonsingular) elliptic curve
|
= number of points on
|
= point on
|
|
To sign a message (or message hash)
, the signer does this:
- pick a random
with
and compute
.
- compute

- send

Note: step 1 performed an elliptic curve operation, namely computing
as a point on the elliptic curve. Everyithing else is integer arithmetic
To verify the signature, the verifier does this:
- downloads
and 
- compute
and ![{\displaystyle V_{2}=[m]\,A}](https://wikimedia.org/api/rest_v1/media/math/render/svg/0d3a9d78298628e2262e03f8fa0cbe33c94aa3e7)
- Accept if
.
Bracket arithmetic is mod
because
has
points, and thus forms a group of order
Therefore, the points eventually wrap around if multiplied by a number greater than
:
.
Note: verifier only performs elliptic curve operations
Proof. Check that a valid signature indeed implies
:
Q.E.D.
Now if an evil party knew
, they could forge signatures. However, finding
appears to boild down to solving
for
, which is the elliptic curve discrete log problem.
Practice final is up on the course website!