探秘ECC背后的美妙数学世界

探秘ECC背后的美妙数学世界

 

一、 背景

 

各种加解密算法一直是热爱信息安全的人们执着探索的目标。随着信息时代的高速发展,计算机的各类指标的不断提升,很多曾经“坚不可摧”的加密算法已经能够被先进的科学技术在可观的时间内推演出很不错的解密方法。对于信息安全工作者们来说,一方面,各种解法如雨后春笋般的冒出,让人感到很有成就感和满足感;另一方面,这一现象又会导致居心叵测的人用以不法的行为当中,对整个网络空间安全以及人们生活中的各种安全造成很大的威胁。因此,加解密算法也在不断的更新迭代中。在我的认知范围中,RSA算法在很长一段时间属于各类加密算法中的佼佼者,深受各国家政府以及一些企业的青睐。而在最近的几年里,频频出现RSA算法被破解的新闻报道。1024位的密钥似乎已经不再能保证“完全安全”,而如果要提高其绝对安全性,就只能再增长密钥长度。但是,密钥越长,其加解密所耗用的时间也越长。因此,要根据所保护信息的敏感程度与攻击者破解所要花费的代价值不值得以及系统所要求的反应时间来综合考虑,尤其对于商业信息领域更是如此。因此,我一直在想,人们是否已经在探索另外的加密算法,使得我们能够更好地规避RSA带来的“密钥长度”问题,即能够以更短的密钥长度实现和RSA算法等同的安全性。于是,带着这个问题,利用搜索引擎,我接触到了ECC,即椭圆加密算法,从此进入到一个全新的,神秘而又美妙的数学原理造就的强大算法世界中,并对ECC的数学原理有了一个较为明晰的认识和理解。

 

二、 ECC初探

 

首先,让我们看一下官方对ECC的解释:椭圆曲线密码学(英语:Elliptic curve cryptography,缩写为ECC),一种建立公开密钥加密的演算法,基于椭圆曲线数学。椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的。这是百度对ECC的定义。但我觉得这种定义并不是很清楚。于是,我查阅了很多文献,借鉴了很多博客,最终我想从“什么是ECC”、“为什么使用ECC”、“什么是椭圆曲线”、“阿贝尔群”让读者对ECC的“表面”有一个清楚的认识。

 

(1)什么是ECC

 

ECC是Elliptic Curve Cryptography(椭圆曲线密码学)的缩写,是一种基于椭圆曲线数学的公开密钥加密算法,其本质是利用离散对数问题实现加密。
    ECC的主要优势,是在使用更小的密钥的同时,提供更快的性能和更高等级的安全。

 

(2)为什么使用ECC

  

我们已经知道了什么是EEC,那么,ECC有什么优势,让我们有底气去取代RSA呢?这是因为:RSA的解决分解整数问题需要亚指数时间复杂度的算法,而目前已知计算椭圆曲线离散对数问题(ECDLP)的最好方法都需要全指数时间复杂度。这意味着在椭圆曲线系统中我们只需要使用相对于RSA短得多的密钥就可以达到与其相同的安全强度。例如,一般认为160比特的椭圆曲线密钥提供的安全强度与1024比特RSA密钥相当。使用短的密钥的好处在于加解密速度快、节省能源、节省带宽、存储空间。

 

(3)什么是椭圆曲线

 

(a)   引入射影平面

  

要了解什么是椭圆曲线,我觉得先从射影平面讲起,能让我们对椭圆曲线的印象更深刻。古希腊数学家欧几里得的《几何原本》提出了五条公设:1.由任意一点到任意一点可作直线;  2.一条有限直线可以继续延长;  3.以任意点为心及任意的距离可以画圆;  4.凡直角都相等;  5.同一平面内一条直线a和另外两条直线b、c相交,若在a某一侧的两个内角的和小于两直角,则b、c两直线经无限延长后在该侧相交。《几何原本》只有在第29个命题“一条直线与两条平行直线相交,则所成的内错角相等,同位角相等,且同旁内角之和等于两直角”中才用到第五公设,即《几何原本》中可不依靠第五公设而推出前28命题。因此,一些数学家提出,第五公设能不能不作为公设,而作为定理?能不能依靠前四个公设来证明第五公设?这就是几何发展史上最著名的,争论了长达两千多年的关于“平行线理论”的讨论。

1820年,俄国喀山大学罗巴切夫斯基用“至少可以找到两条相异的直线,且都通过P点,并不与直线R相交”代替第五公设,然后与欧氏几何的前四个公设结合成一个公理系统,他经过细致深入的推理过程中,得出了一个又一个在直觉上匪夷所思,但在逻辑上毫无矛盾的几何体系。

这种几何学被称为罗巴切夫斯基几何,简称罗氏几何。从罗氏几何学中,可以得出这样一个结论:逻辑上不矛盾的一些公理都有可能提供一种几何学。现存非欧几何的类型可以概括如下:1.坚持第五公设,引出欧几里得几何;2.“可以引最少两条平行线”为公设,引出罗氏几何(双曲几何);3.“一条平行线也不能引”为公设,引出黎曼几何(椭圆几何)。具体如下图所示:

 

 

左图:双曲几何,即罗氏几何;中图:欧几里德几何;右图:椭圆几何,即黎曼几何。了解非欧式几何,就可以理解平行线的交点。

定义:平行线相交于无穷远点P∞,使平面上所有直线都统一为有唯一的交点。性质:1.一条直线只有一个无穷远点;一对平行线有公共的无穷远点;2.任何两条不平行的直线有不同的无穷远点(否则会造成有两个交点);3.平面上全体无穷远点构成一条无穷远直线。

 

射影平面:平面上全体无穷远点与全体平常点构成射影平面。

射影平面点:对普通平面上点(x,y),令x=X/Z,y=Y/Z,Z≠0,则投影为射影平面上的点(X:Y:Z)。

例如,求点(1,2)在新的坐标体系下的坐标:
∵X/Z=1 ,Y/Z=2(Z≠0);

∴X=Z,Y=2Z ∴坐标为(Z:2Z:Z);Z≠0;

即(1:2:1)(2:4:2)(1.2:2.4:1.2)等形如(Z:2Z:Z),Z≠0的坐标都是(1,2)在新的坐标体系下的坐标。

(2) 求平行线L1:X+2Y+3Z=0 与L2:X+2Y+Z=0 相交的无穷远点
∵ L1∥L2 所以有Z=0, X+2Y=0;

∴坐标为(-2Y:Y:0),Y≠0;

即(-2:1:0)(-4:2:0)(-2.4:1.2:0)等形如(-2Y:Y:0),Y≠0。

 

(b)认识椭圆曲线

 

有了前面的射影平面的基础,人们对椭圆曲线有了一个总体的概括:一条椭圆曲线是在射影平面上满足威尔斯特拉斯方程所有点的集合,其数学表达为:Y2Z+a1XYZ+a3​YZ2=X3+a2​X2Z+a4XZ2+a6Z3

结合射影平面的知识,我们不难得出,椭圆曲线满足以下三个规律:

1.椭圆曲线方程是一个齐次方程;

2.曲线上的每个点都必须是非奇异的(光滑的),偏导数FX(X,Y,Z)、FY(X,Y,Z)、FZ(X,Y,Z)不同为0;

3.圆曲线的形状,并不是椭圆的。只是因为椭圆曲线的描述方程,类似于计算一个椭圆周长的方程故得名。

现在,对于上面的方程和普通平面上的点(x,y),我们x=X/Z,y=Y/Z,z≠0,能得到一下化简后的等式:

y2+a1xy+a3y=x3+a2​x2+a4x+a6​,进一步化简,便能得到椭圆曲线的一般表达式:E:y=x3+ax+b其中:(1)Δ=16(4a3+27b)0,是用来保证曲线是光滑的,即曲线的所有点都没有两个或者两个以上的不同的切线;(2)a,b∈ K,K 为E的基础域。

 文字叙述似乎不是太直观,下面我们来看看椭圆曲线和非椭圆曲线的示例图:

椭圆曲线:

 

 

 

非椭圆曲线:

 

上面两个方程为什么不是椭圆曲线呢?这是因为他们在原点没有切线,不满足椭圆曲线每个点都必须是光滑的。

(4)阿贝尔群

这一部分十分重要,对于后面(第三部分)深入理解ECC有着决定性的作用。

我们已经看到了椭圆曲线的图像,但点与点之间好像没有什么联系。那我们能不能建立一个类似于在实数轴上加法的运算法则呢?这就要定义椭圆曲线的加法群,这里需要用到近世代数中的阿贝尔群。

在数学中,群是一种代数结构,由一个集合以及一个二元运算所组成。已知集合和运算(G,*)如果是群则必须满足如下要求:

封闭性: a,bG,ab ∈ G;

结合性: a,b,cG ,有 (ab)c = a (b*c);

单位元: ョe∈G, a G,有e*a = a*e = a;

逆元: a G ,ョb∈G 使得 a*b = b*a = e;

交换性: a,bG,a*b = b*a;

在椭圆曲线也可以定义阿贝尔群。

 

三、 ECC深度剖析

现在,我们对ECC的理论支持有了比较深刻的认知,但我们还没有了解到ECC是如何将这些基础理论运用到具体实践中的。这就需要我们对ECC进行深度的剖析。下面我将从“有限域椭圆曲线”、“有限域椭圆曲线点的阶”、“椭圆曲线算术”、“椭圆曲线实现秘钥协商”以及“椭圆曲线实现加解密”五个方面详尽地对ECC背后的数学原理进行解释。

(1)    有限域椭圆曲线

椭圆曲线是连续的,并不适合用于加密;所以,我们必须把椭圆曲线变成离散的点,我们要把椭圆曲线定义在有限域上。
    我们给出一个有限域Fp,Fp中有p(p为质数)个元素0,1,2,…, p-2,p-1;Fp的加法是a+b≡c(mod p);Fp的乘法是a×b≡c(mod p);Fp的除法是a÷b≡c (mod p),即 a×b-1≡c (mod p),b-1也是一个0到p-1之间的整数,但满足b×b-1≡1 (mod p);Fp的单位元是1,零元是 0;Fp域内运算满足交换律、结合律、分配律。

椭圆曲线Ep(a,b),p为质数,x,y∈[0,p-1],有

y2=x3+ax+b (mod p);

选择两个满足下列约束条件的小于p的非负整数a、b,有

4a3+27b2≠0 (mod p);

Fp上的椭圆曲线同样有加法:1.无穷远点 O∞是零元,有O∞+ O∞= O∞,O∞+P=P;2.P(x,y)的负元是 (x,-y mod p)= (x,p-y) ,有P+(-P)= O∞;3.P(x1,y1),Q(x2,y2)的和R(x3,y3) 有如下关系:x3≡k2-x1-x2 (mod p),y3≡k(x1-x3)-y1(mod p);若P=Q 则 k=(3x2+a)/2y1)mod p;若P≠Q,则k=(y2-y1)/(x2-x1) mod p。

例:椭圆曲线已知E23(1,1)上两点P(3,10),Q(9,7),求(1)-P,(2)P+Q;(3)2P。

    解:

(1)-P=(3,-10 mod 23)=(3,13);

(2)k=(7-10)/(9-3)=-2-1 mod 23;

2*2-1=1 mod 23;2-1=12;

K=-12 mod 23=11;

P+Q=(112-3-9 mod 23,11*(3-(-6))mod 23)=(17,20);

(3)k=7*5-1 mod 23;

5*5-1=1 mod 23;5-1=14;

k*14 mod 23=6;

2P=(62-3-3 mod 23,6*(3-7)-10 mod 23)=(7,12).

 

(2)    有限域椭圆曲线点的阶

如果椭圆曲线上一点P,存在最小的正整数n使得数乘nP=O∞ ,则将n称为P的阶。若n不存在,则P是无限阶的。

 

计算可得27P=-P=(3,13),所以28P=O ∞ P的阶为2。这些点做成了一个循环阿贝尔群,其中生成元为P,阶数为29。显然点的分布与顺序都是杂乱无章的。

 

(3)椭圆曲线算术

椭圆曲线算术是以阿贝尔群为理论支撑的,这也是我在第二部分介绍阿贝尔群的主要原因。椭圆曲线上可以定义一些很有意思的特殊运算规则。一般来说会定义两种运算:加法和数乘运算。加法运算是点与点之间的运算;数乘运算基于加法运算,重复的加法运算就是数乘。

(a)      实数域的加法运算

已知椭圆曲线上两个不同的点P和Q,则这两个点之和R=P+Q可以通过如下操作得到:过P、Q两点做直线L,与椭圆曲线相交于第三点,该点关于X轴的对称点即是所求的R点。椭圆曲线的这种加法运算有比较明确的几何含义。如下所示:

 

求椭圆曲线有理解考虑的问题是寻找有理点(x,y)使其满足椭圆曲线方程。其求解过程是在有限的已知有理点的集合中,选两个点P1,P2,作直线与椭圆曲线相交与第三点个有理点Q3。此时如果再利用P1,P2,Q3三个点中的任意两点作直线不能在产生新的有理解(因为他们本身是已经在一条直线上,不会产生新的交点),但是考虑Q3关于X轴对称的点Q3′必定也是有理点,于是可以利用Q3′与P1或者Q3′与P2继续做直线与椭圆曲线相交得到新的有理解,对新的交点再取对称点,以此迭代下去。由此利用交点的对称点作直线来生成新的交点,进而可逐步求解满足椭圆曲线的有理解。

椭圆曲线加法运算的规则中“取交点的对称点”正是与上述求解过程及其相似。

对于加法运算也有另外一种描述:若椭圆曲线上三个点在同一直线上,则他们的和为O,也即是P+Q+R′=O,其中的O是无穷远点或者零点。

更完整的椭圆曲线加法运算规则如下:

1、O+O=O,对任意的P,有P+O=P;O看做零点,对加法运算没有实际贡献(类似于四则运算加法运算中的0)。

2、P=(x,y)的负元是关于X中对称的点P=(x,y),P+(P)=O。过P和P的直线与X轴垂直,实际上可以看作它与椭圆曲线相交于无穷远点(射影平面,也即是在欧式平面上添加了无穷远点和无穷远直线的平面),因此将也将O视作无穷远点。

3、计算P和Q的和是通过做过P和Q两点的直线,与椭圆曲线相交于第三点,再取该点关于X轴的对称点以此作为P,Q之和,正如上面的几何图形展示的那样。

4、计算P点(P≠O)的两倍时,是做该点的切线,再取交点S关于X轴的对称点S,也即是2P=P+P=S

容易验证,对于椭圆曲线上的点和O点组成的集合,以及集合上定义的二元加法运算,构成一个阿贝尔群。单位元是O点, P(x,y)的逆元是P(x,−y),封闭性,结合性以及交换性也是显然满足的。

 

 

(b)模素数P的加法运算

密码学中普遍采用的是有限域上的椭圆曲线,也即是变元和系数均在有限域中取值的椭圆曲线。使用模素数p的有限域Zp,将模运算引入到椭圆曲线算术中,变量和系数从集合0,1,2,...,p−1中取值而非是在实数上取值。

此时讨论椭圆曲线形式如下:

y2  mod p=(x3+ax+b) mod p,

其中(4a3+27b2) mod p≠0 mod p,变量和系数均在Zp中取值。

将满足上式的所有非负整数对和O点记为集合Ep(a,b),这是一个有限的离散点集。由此可知集合中的点分布在(0,0)到(p−1,p−1)的象限中,集合中的点有可能刚好也在椭圆曲线上,更多的可能是在椭圆曲线外。例如点(13,7)是满足y2 mod 23=(x3+x+1) mod 23的点,但是(13,7)并不在椭圆曲线上。

对于较小的素数p,完全可以暴力穷举找出集合Ep(a,b)中的点。比如参数a=1,b=3,p=23,E23(1,3)有27个点(包含O点),暴力穷举这些点分别为:
(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);

求解(xR,yR)的代数表达式为:

xR=(λ2−xR−xQ) mod p;
yR=(λ(xP−xR)−yP) mod p.

(当P≠Q,λ=((yQ−yP)/xQ−xP)) mod p;

当P=Q,λ=((3x2p+a)/2yp)) mod p;)

例如a=1,b=1,p=23,P(3,10),Q(13,16),求R=P+Q.

此时P≠Q,计算λ=((yQyP)/xQxP)) mod p=(1610133) mod 23=(6×101) mod 23.

令x≡101(mod 23),由于10≡10(mod 23),所以10x≡1(mod 23),利用扩展欧几里德算法求得x=7,λ=(6×7) mod 23= 19.
所以xR=(λ2
xPxQ) mod p=(192313) mod 23=345 mod 23=0;yR=(λ(xPxR)yP) mod p=(19×(30)10) mod 23=47 mod 23=1.所以R=(0,1).

实际上E23(1,1)中共有28个点(包含无穷远点O),以P(3,10)开始的所有倍乘点:P,2P,3P...27P,28P可以暴力计算得出:       P=(3,10);2P=(7,12);3P=(19,5);4P=(17,3);5P=(9,16);6P=(12,4);7P=(11,3);8P=(13,16);9P=(0,1);10P=(6,4);11P=(18,20);12P=(5,4);13P=(1,7);14P=(4,0);;15P=(1,16);16P=(5,19);17P=(18,3);18P=(6,19);19P=(0,22);20P=(13,7);21P=(11,20);22P=(12,19);23P=(9,7);24P=(17,20);25P=(19,18);26P=(7,11)27P=(3,13);28P=O.

 

(5)椭圆曲线实现秘钥协商

现在,了解并学习了椭圆曲线算术,可以正式进入到ECC加解密实践中了!在加解密之前,一般都会经过严密的秘钥协商。ECC的秘钥协商实现如下:

(a)原理和流程

利用模p有限域上椭圆曲线算术规则可以用来实现秘钥协商,其流程如下:(1)小刘和小勋会共享一些椭圆曲线的参数信息:(p,a,b,G,n,h),其中a,b确定了椭圆曲线方程,p确定了模p的有限域,G是中的生成元,用于生成子群,要求G的阶n应该尽量大,G的阶是使得nG=O成立的最小的整数,也即是(n−1)G所代表的点与G点的横坐标刚好相同,协因子h一般等于1。(2)小刘选择小于n整数nA,然后计算PA=nA×G,将PA发送给小勋。(3)同理,小勋也选择小于n整数nB,然后计算PB=nB×G,将PB发送给小刘。(4)小刘通过如下计算得出协商的秘钥: KA=nA×PB;小勋通过如下计算得出协商的秘钥: KB=nB×PB,容易证明, KA=KB

因为KA=nA×PB=nA×(nB×G)=nB×(nA×G)=KB,由此小刘和小勋计算得到相同的秘钥,达到秘钥协商的目的。

 

(b)实例

 

参数a=0,b=4,椭圆曲线方程为y2=x34.p=211,G=(2,2),因为240G=(2,209),所以n=241.

小刘选择nA=151,PA=151G=(62,59);

小勋选择nB=171,PB=171G=(209,153);

他们协商的秘钥K=151PB=171PA=151(209,153)=171(62,59)=(95,194)=(151171%n)G=34G.

(6)椭圆曲线实现加解密

我已经带着你们来到探索ECC美妙数学世界的最后一道门前了——ECC加解密!让我们一起去了解并尝试它吧!

(a)原理和流程

利用椭圆曲线来进行加密和解密也是与RSA一定程度的类似,每一个用户都有属于自己的公钥和私钥。私钥就是用户选定的数字n,私钥自己保存;公钥就是由P=nG,计算出来的点,公钥公开。

假设小刘与小勋进行加密通信,其加密的流程如下:

(1)小刘首先将明文消息转换(编码)为Ep(a,b)中的Pm(x,y),然后随机选定一个正整数k,并且利用小勋的公钥PB通过如下计算出密文:

Cm={kG,Pm+kPB}。因此,密文实际上是有两个点组成。

(2)小勋收到密文Cm,利用自己的私钥nB进行如下计算,可以解密得到明文:Pm+kPB−nB(kG)=Pm+k(nBG)−nB(kG)=Pm。也就是用第二个点Pm+kPB减去第一个点kG与自己的私钥n之积。

 

(b)实例

   设参数a=0,b=4,p=199,G=(2,2),椭圆曲线方程为y2=x34,小勋选定的私钥为nB=119,其公钥PB=119G=(183,173)。小刘希望将消息Pm=(76,66)加密后发送给小勋,于是小刘随机选定正整数k=133,并通过小勋的公钥加密得到密文:Cm={133(2,2),(76,66)+133(183,173)}={(40,147),(180,163)},小勋收到密文消息利用自己的私钥nB=119进行解密:Pm+kPB-nB(kG)=(180,163)119(40,147)=(180,163)(98,52)=(76,66)=Pm

由此,小勋顺利解密得到明文消息,小刘与小勋之间完成加密通信。

 

四、 总结

我相信在阅读了上面三个部分的内容后,读者已经对ECC有了比较深刻的认识,并且对其背后那繁杂却又美妙的数学世界产生了浓厚的兴趣。需要说明的是,以上三个部分的内容,相互之间具有很强的逻辑关联性,因为这些文字正好对应了我对ECC的探索过程。从最初的只知道“椭圆曲线算法”这个概念,到慢慢查阅文章学习、逐渐了解ECC的特点和优势,再到潜下心来,钻研ECC所涉及的数学知识和原理,这个过程是缓慢的,但又是愉悦的;开始是迷茫的,但结果是圆满的。在这个漫长的“ECC剖析及其映射的数学世界的探索”经历中,我见证了一个新兴高效加解密算法的崛起,攻克了一个个数论方面的计算和逻辑上的难题,更重要的是,我感受到了人类无与伦比的智慧和超越万物的创造力,正因为这些智慧火花的碰撞和创造力的凝集,以ECC为代表的新兴算法才能产生,千千万万造福整个人类的科技发明才能产生。最后,我希望自己能够在以后的日子里,继续在前人智慧结晶的基础上去探索,去创造,去实现更高的人生价值。也希望读到这篇报告的你,能够有所感悟,有所行动。让我们携起手来,共同奋斗,去创造一个更安全、更和谐、更美妙的世界!

posted @ 2021-11-05 11:37  北邮SMK  阅读(310)  评论(0)    收藏  举报