随着计算机性能的提高,市面上的加密技术愈来愈不安全,1024位的RSA私钥加密已经能够破解,目前有效的手段只是将1024位换成2048位,但随着技术的进步,RSA算法的破解难度会愈来愈低,所以须要用更安全的加密算法来代替,下面咱们来介绍更为安全的ECC公钥加密算法
什么是ECC
ECC是Elliptic Curve Cryptography(椭圆曲线密码学)的缩写,是一种基于椭圆曲线数学的公开密钥加密算法,其本质是利用离散对数问题实现加密。
ECC的主要优点,是在使用更小的密钥的同时,提供更快的性能和更高等级的安全。
什么是椭圆曲线
Wolfram MathWorld(线上数学百科全书,http://mathworld.wolfram.com) 给出了很是精准的定义:
一条椭圆曲线就是一组被 y^2 = x^3 + ax + b 定义的且知足 4a^3 + 27b^2 ≠ 0 的点集。
4a^3 + 27b^2 ≠ 0 这个限定条件是为了保证曲线不包含奇点(在数学中是指曲线上任意一点都存在切线)。
椭圆曲线示例图:算法
不一样的椭圆曲线对应不一样的形状(b=1,a从2到-3)
左(带锐点):y^2 = x^3 右(曲线自交):y^2 = x^3 -3x + 2 都不是有效的椭圆曲线
阿贝尔群的概念是抽象代数的基本概念之一,是一种代数结构,由一个集合以及一个二元运算所组成。
若是一个集合或者运算是群的话,就必须知足如下条件(+ 表示二元运算):
一、封闭性(closure),若是a和b被包含于群,那么a+b也必定是群的元素;
二、结合律(associativity);
三、存在一个单位元(identity element)0,0与任意元素运算不改变其值的元素,即 a+0 = 0+a = a;
四、每一个元素都存在一个逆元(inverse);
五、交换律(commutativity),即 a+b = b+a;安全
咱们能够在椭圆曲线上定义一个群:
一、群中的元素就是椭圆曲线上的点;
二、单位元就是无穷处的点0;
三、相反数P,是关于X轴对称的另外一边的点;
四、二元运算规则定义以下:取一条直线上的三点(这条直线和椭圆曲线相交的三点),P, Q, R(皆非零),他们的总和等于0,
P+Q+R=0。网络
若是P, Q, R在一条直线上的话,他们知足:ide
P+(Q+R)=Q+(P+R)=R+(P+Q)=⋯=0。
当P,Q点为同一点时,P=Q,知足: 性能
这样,咱们能够直观的证实:+运算符是符合交换律和结合律的,这是一个阿贝尔群。
由于阿贝尔群知足交换律和结合律,因此点P和点-R的二元运算结果必会在曲线上,即P+P+P的结果必会在曲线上的另外一点Q,
以此类推,能够得出得出:区块链
Q=kP(k个相同的点P进行二元运算(数乘),记作kP)
前文中有提到离散对数问题,咱们熟悉的RSA算法,是基于大数的质因数分解,即对两个质数相乘容易,而将其合数分解很难的这个特色进行加密。
而ECC算法是在有限域Fp定义公式:Q=kP,已知大数k和点P的状况下,很容易求点Q,可是已知的点P、点Q,却很难求得k,这就是经典的离散对数问题,ECC算法正是利用该特色进行加密,点Q为公钥,大数k为私钥,点P为基点,和RSA最大的实际区别,主要是密钥长度编码
描述一条Fp上的椭圆曲线,经常使用到六个参量:T=(p,a,b,n,x,y)。
(p 、a 、b) 用来肯定一条椭圆曲线,p为素数域内点的个数,a和b是其内的两个大数;
x,y为G基点的坐标,也是两个大数;
n为点G基点的阶;
以上六个量就能够描述一条椭圆曲线,有时候咱们还会用到h(椭圆曲线上全部点的个数p与n相除的整数部分)。
如今咱们描述一个利用椭圆曲线进行加密通讯的过程:
一、选定一条椭圆曲线 Ep(a,b) 并取椭圆曲线上一点,做为基点P。
二、选择一个大数k做为私钥,并生成公钥 Q=kP。
三、将 Ep(a,b) 和点Q、P传给用户。
四、用户接到信息后 ,将待传输的明文编码到Ep(a,b)上的一点M,并产生一个随机整数r。
五、公钥加密(密文C是一个点对):
C={rP, M+rQ}
六、私钥解密(M + rQ - k(rP) ,解密结果就是点M),公式以下:加密
M + rQ - k(rP) = M + r(kP) - k(rP) = M
七、对点M进行解码就能够获得明文
假设在加密过程当中,有一个第三者H,H只能知道椭圆曲线 Ep(a,b)、公钥Q、基点P、密文点C,而经过公钥Q、基点P求私钥k或者经过密文点C、基点P求随机数r都是很是困难的,所以得以保证数据传输的安全。spa
由于在安全性、加解密性能、网络消耗方面有较大优点,ECC加密算法大有取代RSA成为下一代主流加密算法的趋势。现在ECC应用范围很广,在TLS、区块链(比特币、以太坊等等)、SM2国密算法、证书、银行政府机构等许多方面都有大量应用。3d