## Elliptic Curves

### July 28, 2009

Elliptic curves are a mathematical oddity. Originally derived from elliptic integrals that measure the area under an ellipse, elliptic curves have relationships to algebra, geometry, and number theory. Elliptic curves featured in the proof of Fermat’s last theorem and are used today in integer factorization and cryptography. We’ll see applications of elliptic curves in future exercises; the task today is to work out the basic arithmetic of elliptic curves. The simple definition of an elliptic curve is that it provides all the solutions to a generalized cubic equation.

The standard form of an elliptic curve is *y*^{2} = *x*^{3} + *ax* + *b*; we can also write E_{a,b}. Any formula that is cubic in two variables can be rewritten into this form via suitable transformations. In addition to the *x*,*y* points defined by the formula, an elliptic curve includes a “point at infinity,” denoted by ∞, analogous to an artist’s “vanishing point” that allows him to depict a three-dimensional image on a two-dimensional canvas. We will consider only elliptic curves where the discriminant 4*a*^{3} + 27*b*^{2} is non-zero, meaning that the elliptic curve has no cusps or self-intersections.

The standard operation on an elliptic curve is the addition of two points, as shown in the diagram; this is, of course, different from vector addition of two points on a plane. Geometrically, points *P* and *Q* can be added by projecting a line between them and finding the “third point” *R* where the line intersects the curve, which is the negative of the point *P* + *Q*, as shown in the drawing by Jean Brette shown at right. Further, the point at infinity is the identity element for addition, so that *P* + ∞ = ∞ + *P* = *P* for any point *P* on an elliptic curve. Addition is both associative and commutative.

The addition law on elliptic curves is:

Given points

P_{1}= (x_{1},y_{1}) andP_{2}= (x_{2},y_{2}), the pointP_{3}= (x_{3},y_{3}) =P_{1}+ P_{2}, where pointsP_{1},P_{2}andP_{3}lie on an elliptic curvey^{2}=x^{3}+ax+bwith non-zero discriminant 4a^{3}+ 27b^{2}, can be calculated as

x_{3}=s^{2}–x_{1}–x_{2}

y_{3}=y_{1}+s(x_{3}–x_{1})where the slope

sis

s= (3x_{1}^{2}+ a) / (2y_{1})if

P_{1}=P_{2}and

s= (y_{1}–y_{2}) / (x_{1}–x_{2})otherwise.

The slope of the line connecting two points on an elliptic curve is calculated in the normal way, the difference in the rise divided by the difference in the run, except that if the two points are identical, the line “connecting” the two points is the tangent to the curve. Subtraction is addition of the negative, where the negative of (*x*,*y*) is (*x*,*-y*). Multiplication on an elliptic curve is just repeated addition, as it is with regular arithmetic.

We’ve been discussing elliptic curves over the real numbers, but the formulas work perfectly well on a finite field containing integers relative to a modulus. The division in the calculation of the slope is multiplication by the modular inverse, so the modulus must be prime. Our earlier exercise on modular arithmetic will be helpful.

A simple example may make things clear. Consider the elliptic curve *y*^{2} ≡ *x*^{3} + 4*x* + 4 (mod 5). There are eight points on the curve: (0,2), (0,3), (1,2), (1,3), (2,0), (4,2), (4,3) and ∞; these points can be computed by substituting 0, 1, 2, 3 and 4 for *x* and computing the modular square root. Note that when *x* = 3 there are no solutions because 27 + 12 + 4 ≡ 43 ≡ 3 (mod 5) has no square roots, and when *x* = 2 there is only one solution, 8 + 8 + 4 ≡ 20 ≡ 0 (mod 5), and the square root of 0 is 0 regardless of the modulus. The sum of the points (1,2) and (4,3) is (4,2), the negative of the point (1,2) is (1,3), double the point (1,2) is (2,0), 3 times the point (1,2) is (1,3), 4 times the point (1,2) is ∞, and 5 times the point (1,2) is (1,2), whence the cycle repeats.

Your task is to write a library of functions for elliptic curves on a finite field. Your library should provide functions for addition, negation, subtraction, doubling, and multiplication; you may wish to represent a normal point as a triple (*x* *y* 1) and the point at infinity as the triple (0 1 0). When you are finished, you are welcome to read or run a suggested solution, or to post your solution or discuss the exercise in the comments below.