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.
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!