elliptic
https://www.cnblogs.com/qcblog/p/8998045.html
http://www.doc88.com/p-0971398500383.html
https://wenku.baidu.com/view/65d4db50be23482fb4da4c13.html
一、概述
椭圆曲线加密算法依赖于椭圆曲线理论,后者理论涵盖的知识比较深广,而且涉及数论中比较深奥的问题。经过数学家几百年的研究积累,已经有很多重要的成果,一些很棘手的数学难题依赖椭圆曲线理论得以解决(比如费马大定理)。
本文涉及的椭圆曲线知识只是抽取与密码学相关的很小的一个角落,涉及到很浅的理论的知识,同时也是一点比较肤浅的总结和认识,重点是利用椭圆曲线结合数学技巧阐述加密算法的过程和原理。
本文特意构造有比较多的实例方便理解其过程和原理。
二、椭圆曲线
椭圆曲线方程来源于椭圆积分,后者来最初来源于计算椭圆周长的问题,有一段时间的历史了,在欧拉时期就开始研究。椭圆周长没有精确的初等函数的公式表示,只有近似的公式表示,精确的椭圆周长可以用不定积分表示。
现在一般将形如如下形式的积分定义为椭圆积分:
𝑓
其中𝑅
是其两个参数的有理函数,𝑃是一个无重根的3或4阶多项式,而𝑐是一个常数。椭圆曲线方程与𝑃
表现形式比较相像。
数学上的椭圆曲线一般由如下形式给出:
𝐸
,其中判别式Δ(𝐸
椭圆曲线都是关于X轴对称的曲线。
典型的椭圆曲线如:𝑦2=𝑥3−4𝑥2+16
,其图像为:
更多的椭圆曲线图像:
限定Δ
不为零有特殊的意义。如果判别式Δ(𝐸等于零,由三次方程判别式判定理可知,方程𝑥3+𝑎𝑥2+𝑏𝑥+𝑐=0
存在二重根或者三重根,曲线表现为"自相交"或者有“尖点”。
两个典型的例子是:
𝐶
𝐶
𝐶
有三重根,表现为有"尖点";𝐶
有二重根,表现为“自相交”,它们都不是椭圆曲线,其图像分别如下:
在密码学中用到的椭圆曲线方程一般限定为:
𝐸
,其中4𝑎3+27𝑏2≠0
。
也即是这里的二次项系数为0。
三、椭圆曲线算术
椭圆曲线上可以定义一些很有意思的特殊运算规则。一般来说会定义两种运算:加法和数乘运算。加法运算是点与点之间的运算;数乘运算基于加法运算,重复的加法运算就是数乘。
1、实数域的加法运算
1.1、加法运算的几何解释
已知椭圆曲线上两个不同的点𝑃
和𝑄,则这两个点之和𝑅=𝑃可以通过如下操作得到:过𝑃、𝑄两点做直线𝐿,与椭圆曲线相交于第三点,该点关于X轴的对称点即是所求的𝑅
点。椭圆曲线的这种加法运算有比较明确的几何含义。如下所示:
以这种比较奇特的规则来定义加法运算会让人觉得比较怪异,其思想很可能是借鉴于求椭圆曲线有理解的方法(没有去严格考据)。
求椭圆曲线有理解考虑的问题是寻找有理点(𝑥,𝑦)
使其满足椭圆曲线方程。其求解过程是在有限的已知有理点的集合中,选两个点𝑃,作直线与椭圆曲线相交与第三点个有理点𝑄3。此时如果再利用𝑃三个点中的任意两点作直线不能在产生新的有理解(因为他们本身是已经在一条直线上,不会产生新的交点),但是考虑𝑄3关于X轴对称的点𝑄′3必定也是有理点,于是可以利用𝑄3′与𝑃或者𝑄3′与𝑃
继续做直线与椭圆曲线相交得到新的有理解,对新的交点再取对称点,以此迭代下去。由此利用交点的对称点作直线来生成新的交点,进而可逐步求解满足椭圆曲线的有理解。
椭圆曲线加法运算的规则中“取交点的对称点”正是与上述求解过程及其相似。
对于加法运算也有另外一种描述:若椭圆曲线上三个点在同一直线上,则他们的和为𝑂
,也即是𝑃,其中的𝑂
是无穷远点或者零点。
更完整的椭圆曲线加法运算规则如下:
1、𝑂+𝑂=𝑂
,对任意的𝑃,有𝑃;𝑂
看做零点,对加法运算没有实际贡献(类似于四则运算加法运算中的0)。
2、𝑃
的负元是关于X中对称的点−𝑃(而不是关于原点对称),𝑃。过𝑃和−𝑃的直线与X轴垂直,实际上可以看做它与椭圆曲线相交于无穷远点(射影平面,也即是在欧式平面上添加了无穷远点和无穷远直线的平面),因此将也将𝑂
视作无穷远点。
3、计算𝑃
和𝑄的和是通过做过𝑃和𝑄两点的直线,与椭圆曲线相交于第三点,再取该点关于X轴的对称点以此作为𝑃
之和,正如上面的几何图形展示的那样。
4、计算𝑃
点(𝑃)的两倍时,是做该点的切线,再取交点𝑆关于X轴的对称点−𝑆,也即是2𝑃
容易验证,对于椭圆曲线上的点和𝑂
点组成的集合,以及集合上定义的二元加法运算,构成一个Abel群。单位元是𝑂点,𝑃的逆元是𝑃
,封闭性,结合性以及交换性也是显然满足的。
1.2、加法运算的代数解释
几何解释更直观,代数解释更有利于数值计算。
过曲线上𝑃
和𝑄(𝑥𝑄,𝑦𝑄)两点(𝑃和𝑄
不互为负元)做直线,求与曲线的第三个交点的问题是很容易用代数的方法来描述的。
也即是求:
{𝑦2=𝑥3+𝑎𝑥+𝑏𝑦−𝑦𝑝=𝑘(𝑥−𝑥𝑝)(1)(2)
其中斜率𝑘=𝑦𝑄−𝑦𝑃
。
将(2)代入(1)再利用次数对齐的方式容易求得第三个交点的对称点也即𝑃
之和𝑅(𝑥𝑅,𝑦𝑅)
为:
𝑥𝑅=𝑘2−𝑥𝑃
𝑦𝑅=−𝑦𝑃
如果需要计算倍乘,可以让多个点自身重复相加得到。例如𝑃
,当𝑦𝑃
时,代数描述为:
𝑥𝑅=(3𝑥2𝑃
𝑦𝑅=(3𝑥2𝑃
2、模素数P的加法运算
密码学中普遍采用的是有限域上的椭圆曲线,也即是变元和系数均在有限域中取值的椭圆曲线。使用模素数𝑝
的有限域𝑍,将模运算引入到椭圆曲线算术中,变量和系数从集合0,1,2,...,𝑝−1
中取值而非是在实数上取值。
此时讨论椭圆曲线形式如下:
𝑦2mod𝑝=(𝑥3+𝑎𝑥+𝑏)mod𝑝
其中(4𝑎3+27𝑏2)mod𝑝≠0mod𝑝
,变量和系数均在𝑍
中取值。
将满足上式的所有非负整数对和𝑂
点记为集合𝐸,这是一个有限的离散点集。由此可知集合中的点分布在(0,0)到(𝑝−1,𝑝−1)的象限中,集合中的点有可能刚好也在椭圆曲线上,更多的可能是在椭圆曲线外。例如点(13,7)是满足𝑦2mod23=(𝑥3+𝑥+1)mod23的点,但是(13,7)
并不在椭圆曲线上。
实际上,集合𝐸
与模𝑝
的加法运算构成循环阿贝尔群,其生成元,阶和生成子群问题在本节后面会讨论。
对于较小的素数𝑝
,完全可以暴力穷举找出集合𝐸中的点。比如参数𝑎=1,𝑏=3,𝑝=23,𝐸
有27个点(包含O点),暴力穷举这些点分别为(第八节给出了一些分析椭圆曲线问题的demo实现):
(0,7) (6,15) (15,9)
(0,16) (7,10) (15,14)
(2,6) (7,13) (19,2)
(2,17) (10,1) (19,21)
(4,5) (10,22) (21,4)
(4,18) (12,8) (21,19)
(5,8) (12,15) (22,1)
(5,15) (14,1) (22,22)
(6,8) (14,22) O
𝐸
上的加法规则和实数域上的加法基本一致,只是多加了模运算。但是模𝑝
的加法没有显而易见的几何解释,只有代数描述。
求解(𝑥𝑅,𝑦𝑅)
的代数表达式为:
𝑥𝑅=(𝜆2−𝑥𝑃
𝑦𝑅=(𝜆(𝑥𝑃
其中
𝜆=⎧⎩⎨⎪⎪(𝑦𝑄−𝑦𝑃
例如𝑎=1,𝑏=1,𝑝=23,𝑃
,求𝑅=𝑃
.
此时𝑃
,计算𝜆=(𝑦𝑄−𝑦𝑃