Elliptic curves

Elliptic curves are defined by two parameters . We say a point belongs to an elliptic curve if:

The good thing about elliptic curves is that you can define an operation and a neutral element noted . The points of the curve and this operation form a group . If you take the addition of points and has a geometric interpretation:

image

The point is . To add two different points, you find the line that crosses the 2 points. Elliptic curves guarantee that this line will intersect the curve at a third point, then reflect that point over the axis and you get . The inverse of , noted is the reflection we mentioned, the "third point". There are some special cases: when you take a point and its inverse, and when you take the same point twice . This cases form a vertical line that doesn't intersect a third point. Here, we say this line intersects with the point at infinity . This point is the neutral element of .

When adding a point with itself a number of times, we'll use the following notation: .

Curves over finite fields

We are interested in curves where . We'll note the points in the curve . Here, when we plot the points for a specific curve, things get more caotic:

image

This apparent randomness is what makes elliptic curves useful. For certain combinations of , , and , their group has a difficult discrete logarithm problem. We've seen in the last section why this is useful.

Projective coordinates

When we express the coordinates as , we have to introduce this awkard point that has no actual coordinates. When implementing the curve operation, this leads to bad performance and coding practices. Most implementations of curve operations use projective coordinates instead. This points are represented by such that:

The operations are adjusted accordingly. Each point , has infinite representatives in projective coordinates. If you take the one such that , you're just using affine coordinates. Now we can represent the element as any point .

Families of curves

The curves defined by the equation we've seen so far are said to be in Short weierstrass form. Any elliptic curve can be expressed like this. But there are some more specific families of curves. Some curves can be written in the Montgomery form. Some curves can be written in Edwards form. This curves have additional properties. This properties allow to code faster operations or have more secure groups.

Pairing

The points form a group of order . That is, with different points inside it. A pairing is an operation between two points , that returns an element in :

Do not get confused, we have two different finite fields. is the field where the coordinates of the points live. is the field where things end up after the pairing, this field has the same order as the group of the curve. The pairing has a property called bilinearity:

This property is crazy. It states that adding with itself one more time, is equivalent to multiplying with itself in one more time. It mixes two different worlds. The main algorithm for computing pairings is divided in two steps the Miller loop and the final exponentiation. Most optimizations efforts use properties of specific curves in order to reduce the size of the loop or the exponentiation.

TODO: talk about G1, G2, and field extensions. Maybe do a chapter specific to curves, and keep this more simple.