前置知识
关于椭圆曲线的前置知识有:椭圆方程、有限界的椭圆方程、椭圆方程点的几何运算定义、椭圆方程的阶、定义方程的5个参数、计算kG的标量算法。
这些需要在其他地方先了解一下,本文章不做过多阐述。
椭圆曲线并不是真的是椭圆方程,例如E:y2=x3-2x+4的椭圆曲线方程,大致的示意几何图(并不一定点是对应的,这只是大概的示意图)如下图:
因为这种图形是连续的,我们给他加上mod运算,让他变成离散的点,这样更难破解。
椭圆方程实例
这是在bc库中存在的一个真实的用例。
如下图定义的曲线名称,是指给出固定的方程定义的5个参数(G没算进来),这些参数可以确定唯一一个曲线方程。
各参数含义:
p :即mod运算的具体值
a、b: 即椭圆曲线方程中的a和b值
n(代码中可能写成order): 即椭圆曲线方程的阶数,n阶代表,经过nG运算后得到的值是-G,即-G=nG
h(代码中可能写成cofactor):即椭圆曲线方程的所有点m和n的比值的整数部分,即m/n
G:G点即起始点,这个点一般是随机选取得到的。
加解密原理
建立基于椭圆曲线的加密机制,需要找到类似RSA质因子分解或其他求离散对数这样的难题。而椭圆曲线上的已知G和xG求x,是非常困难的,此即为椭圆曲线上的的离散对数问题。
此处x即为私钥,xG即为公钥。
椭圆曲线加密算法原理如下:
签名验签原理
椭圆曲线签名算法,即ECDSA。