区块链-椭圆曲线加密法(ECC)

目录:http://www.javashuo.com/article/p-nitsjfvy-ey.html算法

椭圆曲线生成公钥:http://www.javashuo.com/article/p-sdyzmxka-gs.html函数

椭圆曲线加密法(Elliptic Curve Cryptography)简称ECC。一种创建公开公钥加密算法,基于椭圆曲线数学。测试

secp256k1曲线

比特币中使用的是secp256k1曲线。通常的椭圆曲线表示位:加密

                                                  y^2=x^3+a*x^2+b.net

其中a,b为系数。当参数a=0,b=7时,获得函数blog

                                                      y^2=x^3+7ip

这个方程产生的曲线就是secp256k1曲线。get

图示以下:(能够到此测试:https://www.desmos.com/calculator/0mnue7w8lk数学

           

椭圆曲线时连续的,不适合加密,因此须要把椭圆曲线变成离散的点。把椭圆曲线定义在有限域上。class

什么是有限域?

在抽象代数中,域是一种可进行加、减、乘和除运算的代数结构。是一个能够在其上进行加法、减法、乘法和除法运算而结果不会超出域的集合。若有理数集合、实数集合都是域,但整数集合不是(使用除法获得的分数或小数已超出整数集合)。若是域F只包含有限个元素,则称其为有限域。有限域中元素的个数称为有限域的阶

给出一个有限域Fp,其中有p个元素(p是质数)0,1,2,3····p-2,p-1。

Fp加法:a+b=c(mod p)

Fp乘法:a*b=c(mod p)

Fp除法:a/b=c(mod p)

椭圆曲线运算

加法(测试:https://www.desmos.com/calculator/0mnue7w8lk

过曲线上的点A,B画一条直线,找到与椭圆曲线的交点,交点关于x轴的对称点定义位A+B。

          

A,B重合时

将曲线在A点的切线与椭圆曲线的交点管于x轴的对称点定义位A+A,即2A。

正负运算 

A点的关于x轴的对称点就称为-A。

无穷远点 

若是将A与-A相加,过A与-A的直线平行于y轴,能够认为直线与椭圆曲线相交与无穷远点。

综上,若是给定椭圆曲线一点G,能够求出2G(G+G),3G(2G+G)····。当给出G时,已知x,求出xG并不困难,可是反之,已知xG时,求x时很是困难的。

椭圆曲线生成公钥:http://www.javashuo.com/article/p-sdyzmxka-gs.html