目录:http://www.javashuo.com/article/p-nitsjfvy-ey.html算法
椭圆曲线生成公钥:http://www.javashuo.com/article/p-sdyzmxka-gs.html函数
椭圆曲线加密法(Elliptic Curve Cryptography)简称ECC。一种创建公开公钥加密算法,基于椭圆曲线数学。测试
比特币中使用的是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时很是困难的。