Alright! , so we’ve talked about D-H and RSA , and those we’re sort of easy to follow , you didn’t need to know a lot of math to sort of grasp the the idea , I think that would be a fair statement.

Well things are a little bit steeper when facing ECC , to say the least , it’s got multiple properties and there’s a lot more math in it . I want to divide these series into 3 parts because I am discovering it myself as I go.

Why Elliptic Curve?

ECC is a public key based , such as RSA , but it is sort of represented in an algebraic structure , ECC offers the same security than RSA but at a smaller footprint , also it’s less cpu intensive so it’s ideal for mobile devices and faster acting networks.

image RSA vs ECC

What’s an Eliptic Curve?

By definition :

In mathematics, an elliptic curve is a plane algebraic curve defined by an equation of the form. that is non-singular; that is, it has no cusps or self-intersections.

So it really a curve where all the points (x,y coordinates) satisfy an equation , it is really that simple , well not that simple.

How does it look and what’s the equation?

Well the nice way to represent it is something like:


The equation that all points in this Curve should satisfy would be something like


y ** 2 = x ** 3 + ax +b

So in theory , if you make a list of a lot of “y” coordinates (real numbers) and apply that equation to all of them , you should obtain a curve looking sort of like that.

Now for most of this work I’ve been using :

I highly recommend these .

Let’s make a Curve!

Before we plot a list of points of real numbers that honour the equation let’s clarify that when the fact that the equation suggest y square , means that the negative and positive Y axis of the curve will be the same, that is that if a point exists in y:4 it will also exit in y:-4 , you can see it in the curve above:


Cool , so now let’s see if this thing is true , the following code is what I’ve used in jupyter to get thee graphs I’m showing here

I’ll go step by step:

f(x) = x ** 3 + 3x + 4

This is the most important part really , remember the equation that defined the curve? So this is one side of it , as you can see “a = 3” and “b = 4” , these parameters are called domain parameters , and they decide a various attributes of the curve.

Also , the equation has to return something else than 0 , so we can sort of graph it out hence:

if res > 0 

One more thing , notice that the result of the equation has to be square rooted becase y was square , so we do the following:


So what does this look like?


Yea ok , it isn’t great but it sort of resemble the curve we were looking at before.

Matplotlib comes with a really fancy function called contour , which accepts an equation , so we can do the following:

And this turns into this:


One final property of this curve:

This is probably the most important property of this curve , and it is that if a line intersects two points in the curve it will always intersect a third.

This is very important , since that third point will be the representation of the public key , remember that all this hassle is to create public keys from a private key , that at this point are massive prime numbers.


So you see how one line crossing two points in the curve (P,Q) always intersects another (R).

To sum up today’s article

  • Points in a curve satisfy an equation
  • Based on the equation knowing “X” you will ultimately know “Y”
  • The curve is identical on the Y axis
  • If a line can intersect two points in the curve will also intersect a third one
  • Domain parameters affect various attributes of a given curve
  • Use Jupyter!