椭圆曲线的加密算法解析和程序设计—基于python语言

摘要

在信息时代来临的今天,信息资源的使用给人类带来了极大的收益,然而,在不断出现的大量的信息泄漏事件中,我们必须面对这一挑战。现在,人们已经养成了通过网络进行数据文件通信的习惯,方便的同时,数据和图片也会受到黑客之类的恶意攻击,造成数据错误、误传、篡改。随着网络密码技术的出现,网络的安全得到了很大的保护,以 DES为基础的对称加密和解密算法 RSA为基础的数字加密技术的出现,使网络的信息安全得到了进一步的发展。在此基础上,提出了一种基于 DES和 RSA的加密和解密算法。三种基于 python的算法,实现了 DES与 RSA的新型混合算法。

关键词:python语言;椭圆曲线;加密算法

Abstract

With the advent of the information society, the use of information resources has brought great benefits to people. However, the occurrence of many information leakage accidents has forced us to face the test of information security. At present, it has become our habit to transmit data files on the Internet for communication. In addition to convenience, some data images are likely to be attacked by hackers and other malicious persecutors during the transmission process, resulting in data mistransmission, mistransmission, and even Content has been modified or intercepted. The birth of network cryptography has greatly ensured the security of network transmission. The birth of data encryption composed of symmetric encryption and decryption algorithm DES and asymmetric encryption algorithm RSA greatly enriched the content of network cryptography and ensured network data transmission. security. The encryption and decryption algorithms in this paper include three implementations. In addition to the basic base64 algorithm call implementation, the focus is on the DES algorithm and the RSA algorithm. Three algorithms are designed based on python , and a new hybrid algorithm of DES  and RSA  is implemented.

Key words: python language; elliptic curve; encryption algorithm

目录

前言

1从平行线谈起

2射影平面坐标系

3椭圆曲线

4椭圆曲线上的加法

5密码学中的椭圆曲线

6椭圆曲线上简单的加密/解密

7椭圆曲线在软件注册保护的应用

参考文献

致谢

前言

与 RSA (Ron Rivest, Adi Shamir, Len Adleman)类似, ECC (椭圆曲线加密编码)也是一种公开的密钥算法。目前,国内对 ECC进行了详尽的研究(我还没有发现)。有几个简单的介绍,但都是粗略的介绍,我还是没能完全理解 ECC的精髓(或许是我的悟性不高)。几天前我在国外的网站上看到了一些资料,读了之后,对 ECC的了解也不多。所以,我想将自己对 ECC的理解整理出来,和你们一起分享。当然, ECC博大精深,我对 ECC的理解还很浅薄,其中肯定有很多错误,请各位专家指点,我会认真聆听,并改正。我会把这篇文章做成一篇连载,我会把它写得更好一些。本文的重点放在了理论上,并没有涉及到代码的实现。这需要你的数学基础。如果你能了解 RSA的运算法则,并且知道它的公钥运算法则。像《近世代数基础》、《初等数论》这样的书籍,你最好先看一遍,这样有助于你更好地了解这篇文章。不要害怕,我会尽力使语言变得平易近人,希望这篇文章可以作为学习英语口语的一块踏脚石。人工智能、大数据、云计算等技术已进入人们的日常生活,为人们的日常生活提供了极大的方便。而 Python是"解释型"的语言,它具有很好的易读性和简单的语法,它可以引导学生走进编程领域。算法是软件的灵魂,没有它,就无法进行编程。通过对计算机编程的基本步骤和方法的介绍,有助于使学生了解计算机编程的中心位置。本文从 Python的实际问题入手,对算法和编程的策略进行了分析。

Python是初中信息技术课程的重要组成部分,也是一个很大的难题。通过对三个教师的授课,作者发现在一些问题上有一些问题。精英化与大众化化的差异;一名是一名高级信息学的奥赛导师,她的授课风格和“信息竞赛”差不多,但经过这段时间的学习,她发现信息学的精英化教学并不适用于 Python。因为参与竞赛的同学均为优秀生,学习能力极强;但是目前,作为一种普及的义务教育教科书,学生的素质和能力参差不齐,因此,精英式的教学方式明显不适应 Python的流行。第二,教科书式教学与教科书教学的不同;一名新来的教师,没有教过电脑语言,一上来就是死记硬背,让学生们一头雾水,根据学生的反映,编程并不“有趣”,也不“有用”。只需要输入老师的代码,然后输出结果,就会停止思考和学习,这对学生的思维能力没有任何的影响。因此,教科书的处理很重要。

1从平行线谈起

  两条平行的直线,永远都不会交叉。但是现在,这种说法却受到了挑战。平行的线条是否会在遥远的距离上交叉?事实上,谁也没有见过。因此,“平行线,永远不会相交”,这只是一个假定(你们可以想象一下,我们中学时学过的平行公理,并没有被证明)。既然可以假定两条平行的直线永远不会交叉,那么就可以假定它们是在遥远的距离上交叉的。也就是,两条平行的直线在 P∞的方向交叉(闭上你们的眼睛,想象一下 P∞无限远点, P∞会不会太梦幻了,事实上,这并不是数学训练人的脑力,而是训练人的想象力)。用图表来了解:

 

  当 P∞点出现在一条直线上时,它的优点就是,所有的直线都是相交的。这样,直线的平行线和交叉是一体的。为了区分无限远点,将原始平面上的点称为普通点。

这里有一些关于无限点的特性。

▲在 L上,仅有一个无限远点。(可以从定义中得到)

▲两个平面上的一系列互相平行的直线都有一个共同的无限远点。(可以从定义中得到)

▲在一个平面上,任意两条线相交,L2都有不同的无限远点。(如果L1与L2有一个共同的无限点 P,那么L1与L2有两个交点 A, P,所以假定是不正确的。)

所有的无限点组成了一条无限的直线。(你可以想象这条线)

▲所有的无限远点和所有普通点组成了一个投影平面。

2射影平面坐标系

  射影平面坐标系统是对一般平面的直角坐标系统的一种扩充。我们知道,在一般的平面直角坐标系统中,没有为无限远点设计座标,也不能代表无限远点。射影平面坐标系统是用来代表无限远点的,当然,它也可以用来描述古老的普通点(在数学上也是“向下兼容”)。

  在一般平面的直角座标系中, A的座标(x、 y)作以下修改:

  令x=X/Z ,y=Y/Z(Z≠0);则A点可以表示为(X:Y:Z)。

  在此基础上,得到了一个具有三个参数的坐标系统。

例2.1:在新的座标系统中,找出点(1、2)的座标。

在(Z:2 Z: Z)和 Z=0的情况下, Z=0。也就是(1:2:1)(2:4:2)(1.2:2.4:1.2)等形(Z:2 Z: Z)、 Z=0的座标,都是在新座标系统中(1、2)的座标。

我们还可以得出一个等式 aX+ bY+ cZ=0,这是为什么呢?注意:在一个直角坐标系统中,通常的线性方程为 ax+ by+ c=0)。新的坐标系统是不是可以代表无限的距离?首先,我们来看看无限远的位置。从前面的部分我们可以看出,无限远点就是两条平行的直线相交。所以,怎样才能得到两条线的交点呢?这是初中阶段的一门学问,也就是将两条直线上的方程式串联起来。对于一条平行的直线,其方程式为: aX+ bY+c1Z=0;(c1≠c2);

(干嘛?注意:可以从斜度上看,由于平行的坡度是一样的);

把两个方程式联立起来,并进行求解。有c2Z=c1Z=-(aX+ bY),

因此,无限远点的表达方式(X: Y:0)。请注意,一般情况下 Z=0,无限远的 Z=0,所以这条无限远的直线就是 Z=0。

例2.2:在平行直线L1中, X+2 Y+3 Z=0和L2: X+2 Y+ Z=0的无限点。

答案:由于L1=0, X+2 Y=0;因此,坐标是(-2 Y: Y:0), Y=0。也就是(-2:1:0)(-4:2:0)(-2.4:1.2:0)等形,例如(-2 Y: Y:0), Y=0,均代表该无限远点。

  看来这个新的坐标体系能够表示射影平面上所有的点,我们就把这个能够表示射影平面上所有点的坐标体系叫做射影平面坐标系。

练习:

1、求点A(2,4) 在射影平面坐标系下的坐标。

2、求射影平面坐标系下点(4.5:3:0.5),在普通平面直角坐标系下的坐标。

3、求直线X+Y+Z=0上无穷远点的坐标。

4、判断:直线aX+bY+cZ=0上的无穷远点 和 无穷远直线与直线aX+bY=0的交点,是否是同一个点?

3椭圆曲线

  前一节,我们建立了一个射影面坐标系统,在此部分,我们将在此基础上,建立一个椭圆曲线方程。由于我们都知道,在座标上的曲线可以用公式表达(例如:单位圆的方程式是x2+y2=1)。椭圆曲线是一条曲线,而自然的椭圆曲线又有一条方程.

关于椭圆曲线的界定:

  一条椭圆曲线是由等式Y2Z+a1XYZ+a3YZ2=X3+a2X2Z+a4XZ2+a6Z3-------------[3-1]中的所有点的集合。

详细说明:

Y2Z+a1XYZ+a3YZ2=X3+a2X2Z+a4XZ2+a6Z3是 Weierstrass (维尔斯特拉斯, Karl Theodor Wilhelm Weierstrass,1815年-1897)。

▲这条椭圆形的弧度,并非椭圆形。这是因为,椭圆曲线的方程式,就像是一个椭圆的圆周,我从来没有见过,而椭圆线的积分(如果密度是1),就不可能得到了。有没有人知道这个方程式,就是因为它的名字。

让我们来看一下椭圆曲线。

  

 让我们来看一下椭圆曲线

▲“非奇异”和“光滑”,在数学上是指 Fx (x, y, z)和 Fy (x, y, z)不能同时为0。如果你没有学习高级数学,那么就可以用以下的方式来解释,在任何一个条件下,都有一个切线。

以下两个方程虽然是等式[3-1],但没有一个是椭圆形的。

  

 以下两个方程虽然是等式[3-1],但没有一个是椭圆形的。

因为他们没有切线(0:0:1),也就是原点。

▲在椭圆曲线上存在一个0^0的无限远点,这是由于该点符合公式[3-1]。

在椭圆曲线上,已知无限远点。我们可以将椭圆曲线放在一般的直角坐标系统中。由于一般的平面直角坐标系统仅有无限远的距离。在一般平面的直角坐标系中,我们得到了一个由椭圆曲线上的一般点组成的曲线方程,然后用一个无限远点 O∞(0:1:0),这不是一个椭圆曲线吗?

  设x= X/Z、 Y= Y/Z,由公式[3-1]代数而得:

Y2+A1XY+A3Y=X3+A2X2+A4X+A6

即,一条平滑的、符合等式[3-2]的曲线,再加上一个无限远点 O∞,构成了一条椭圆曲线。为便于计算、表达和理解,以后将会以[3-2]的形式来讨论椭圆曲线。

在这个部分结束时,我们将讨论一个关于椭圆曲线的切线的斜度。

从椭圆曲线的定义可知,椭圆曲线是平滑的,因此椭圆曲线上的普通点均为切线。而切线中最主要的参量为 k。

例3.1:求椭圆曲线方程y2+a1xy+a3y=x3+a2x2+a4x+a6的正切线的斜率 k。

  解:令F(x,y)= y2+a1xy+a3y-x3-a2x2-a4x-a6

  求偏导数

Fx(x,y)= a1y-3x2-2a2x-a4

Fy(x,y)= 2y+a1x +a3

  则导数为:f'(x)=- Fx(x,y)/ Fy(x,y)=-( a1y-3x2-2a2x-a4)/(2y+a1x +a3)

= (3x2+2a2x+a4-a1y) /(2y+a1x +a3)

  所以k=(3x2+2a2x+a4-a1y) /(2y+a1x +a3)  ------------------------[3-3]

  看不懂解题过程没有关系,记住结论[3-3]就可以了。

练习:

      1、将给出图例的椭圆曲线方程Y2Z=X3-XZ2 和Y2Z=X3+XZ2+Z3转换成普通平面直角坐标系上的方程。

4椭圆曲线上的加法

  在前面的章节里,我们看到了一个椭圆形的图形,但是它们似乎没有任何的关系。我们能否建立一条与实数轴线相仿的操作定律?天才的数学家们发现了这个计算定律由于最近几个世纪的数学引入了群、环和域的概念,使代数的操作得到了很好的统一。比如,数学家们归纳了一般加法的基本特点,然后给出了加群(又称阿贝尔),即 Abel (Abel)。在椭圆曲线上的加法与实数的相加并无多大差别。这可能是一种数学上的抽象。有关群和群的特定概念,请参阅现代代数的数学书籍。

操作规则:在椭圆曲线上,任意选取 P、 Q点(P和 Q点相交,作 P点的切线),与椭圆曲线的 R′相交, R′与 Y轴相交。我们给出了 P+ Q= R的公式。(如图)

  法则详解:

“+”并不是实数中的常规加法,它是一种简单的加法,它有普通加法的特性,但它的计算规则和一般的加法有很大的区别。

从这条定律可知,在椭圆曲线的无限远点 O∞和椭圆曲线上 P点的直线相交, P′在 y轴上的平行直线与 P相交,因此,有一个无限远点 O∞+ P= P。在这种情况下,无限远点 O∞的功能等同于一般的加法(0+2=2),我们将无限远点 O∞叫做0元。同时,我们将 P′称作 P的负元(简称为负 P,用- P表示)。

(参见下图)

▲从这条定律得出:若在椭圆曲线上,有三个点 A, B, C点,在同一条线上,它们之和为0,也就是 A+ B+ C= O∞

▲把 k个同样的点 P相加,我们把它称为 kP。P+ P+ P=2 P+ P=3 P。

 接着,利用 P和 Q点的座标(x1、y1)、(x2、y2),得到 R= P+ Q的座标(x4、y4)。

例4.1:求椭圆曲线方程y2+a1xy+a3y=x3+a2x2+a4x+a6,在普通点 P (x1,y1), Q (x2,y2)的座标。

解:1)首先求出- R (x3,y3)

由于 P、 Q、- R三个点是共线的,所以把 y= kx+ b的共线方程设为 y= kx+ b

如果 P= Q (P, Q的两个点不一致),那么

直线的坡度 k=(Y1-Y2)/(X1-X2)

如果 P= Q (P, Q)的两个点是一致的,那么这条线就是椭圆曲线的一条切线。

k=(3x2+2a2x+a4-a1y)/(2 y+a1x+a3)

那么 P、 Q、- R三个点的坐标就是一个方程式:

y2+a1xy+a3y=x3+a2x2+a4x+a6    -----------------[1]

y=(kx+b)                     -----------------[2]

的解。

  将[2],代入[1] 有

(kx+b)2+a1x(kx+b)+a3(kx+b) =x3+a2x2+a4x+a6    --------[3]

  对[3]化为一般方程,根据三次方程根与系数关系(当三次项系数为1时;-x1x2x3 等于常数项系数, x1x2+x2x3+x3x1等于一次项系数,-(x1+x2+x3)等于二次项系数。)

  所以-(x1+x2+x3)=a2-ka1-k2

x3=k2+ka1+a2+x1+x2;---------------------求出点-R的横坐标

  因为k=(y1-y3)/(x1-x3) 故

y3=y1-k(x1-x3);-------------------------------求出点-R的纵坐标

  (2)利用-R求R

  显然有 x4=x3= k2+ka1+a2+x1+x2; ------------求出点R的横坐标

  而y3 y4 为 x=x4时 方程y2+a1xy+a3y=x3+a2x2+a4x+a6的解

  化为一般方程y2+(a1x+a3)y-(x3+a2x2+a4x+a6)=0 , 根据二次方程根与系数关系得:

-(a1x+a3)=y3+y4

  故y4=-y3-(a1x+a3)=k(x1-x4)-y1-(a1x4+a3); ---------------求出点R的纵坐标

  即:

x4=k2+ka1+a2+x1+x2;

y4=k(x1-x4)-y1-a1x4-a3;

  在这一部分结束时,我们要提醒你的是,先前的图片也许会让你觉得椭圆曲线与x轴对称有关。实际上,椭圆曲线在x轴上是不对称的。如下图的y2-xy=x3+1

5密码学中的椭圆曲线

  我们已经基本了解了椭圆曲线,这令人欣喜。但是,请注意,先前所讲的椭圆曲线是连续的,不能用于加密;因此,我们需要将椭圆曲线转化为一个不连续的点。

让我们来看看,为何椭圆曲线是连续的?这是因为,椭圆曲线上的点,是一个实数(这条椭圆形的曲线,被定义在一个实数区上),它是连续的,这就造成了一条曲线的连续性。所以,我们将椭圆曲线定义为一个有限区域(正如它的名字所说,它是一个仅包含有限个元素的区域)。

域的概念来源于我们的有理数,实数的操作,具体的定义,可以参照现代代数中的数字。也就是说,在这个领域里,每个元素都有自己的加法、乘法、除法、单位元(1)、零元(0),并且满足交换率和分配率。

接下来,我们给出一个仅包含有限元素的有限区域 Fp。

  

Fp中只有p(p为素数)个元素0,1,2 …… p-2,p-1;

Fp的相加(a+ b)定律为 a+ b c (mod p);也就是说,(a+ c)× p的剩余与 c÷ p的剩余是一样的。

Fp的(a* b)定律为 a xb c (modp);

Fp的除法(a÷ b)定律为 a/b c (mod p);也就是 axb-1. c (modp);(b-1亦为0至p-1的整数,但符合 bxb-1 (mod p);具体的计算方法,请参阅我的其他论文。

Fp的元为1,零元为0。

与此同时,并非所有的椭圆曲线都适用于加密。y2=x3+ ax+ b是一种最简单的椭圆曲线,可以用来进行加密。现在我们在 Fp上定义y2=x3+ ax+ b的曲线:

选取两个不负整数 a, b,它们都满足以下条件(p是质数)

4a3+27b2=0 (mod p)

那么,满足以下等式的全部点(x、 y),并与无限远点 O∞相加,就形成了一个椭圆曲线。

y2=x3+ax+b  (mod p)

在这里, x, y是从0到p-1的一个整数,用 Ep (a, b)表示这个椭圆曲线。

我们来看看y2=x3+ x+1 (mod23)的图片

  你不相信吗?为什么这个椭圆形的弧度,会变成这样?

在不同的数域中,椭圆曲线表现出不同的外形,但其实质仍然是一个椭圆曲线。比如,在正常温度下,水是液态;在零度以下,水结成冰块,凝固;当气温升高到100摄氏度时,水就会重新变为蒸汽。但是,它的实质还是H2O。

Fp上的椭圆曲线虽然也有加法,但却无法用几何来解释。但是,加法规则和实数域是类似的,请大家自己去比较。

1.无限远点 O∞为0元素,有 O∞+ O∞= O∞, O∞+ P= P

2. P (x, y)的负元素为(x,- y)。

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  若P≠Q,则k=(y2-y1)/(x2-x1)

  例5.1 已知E23(1,1)上两点P(3,10),Q(9,7),求1)-P,2)P+Q,3) 2P。

  解 1)  –P的值为(3,-10)

2)  k=(7-10)/(9-3)=-1/2,2的乘法逆元为12 因为2*12≡1 (mod 23)

k≡-1*12 (mod 23) 故 k=11。

x=112-3-9=109≡17 (mod 23);

y=11[3-(-6)]-10=89≡20 (mod 23)

     故P+Q的坐标为(17,20)

3)  k=[3(32)+1]/(2*10)=1/4≡6 (mod 23)

x=62-3-3=30≡20 (mod 23)

y=6(3-7)-10=-34≡12 (mod 23)

     故2P的坐标为(7,12)

    

  最后,我们来谈谈椭圆曲线上的几个点的阶次。

如果在椭圆曲线上有一个 P,有一个极小的正整数 n,所以这个数乘以 nP= O∞,那么 n就是 P的一个阶次,当 n不存在时,我们把它叫做无穷阶。

实际上,在有限区域上,椭圆曲线上的所有点都有一个阶次 n (参见现代代数的书)。

练习:

1.确定E11 (1、6)上的全部点。

2.知道在E11 (1、6)上的 G (2、7),并将2 G至13 G的全部数值计算出来。

6椭圆曲线上简单的加密/解密

  公开的关键算法往往建立在一个复杂的数学问题之上。例如, RSA就是这样的:如果有两个素数可以很容易地相乘,那么 n就很难分解了。那么,在这个椭圆曲线上,到底是怎样的困难?

我们来看看下面的方程:

K= kG [这里 K、 G是 Ep (a、 b)上的点, k是比 n小(n为 G的阶次)的整数]

我们可以很容易地看出,只要给 k和 G,就可以用加法定律来求 K;但是,对于 K和 G来说,想要得到 k是比较困难的。

因此,在使用椭圆曲线加密算法时,遇到了一些困难。我们将 G点称作基点, k (k< n, n是 G的基点),即私有密钥, K是公共密钥。

下面,我们将介绍一种使用椭圆曲线进行加密通讯的程序:

1、用户 A选择一个椭圆曲线 Ep (a、 b),在椭圆曲线上一点,将其作为基本点 G。

2、用户 A选择专用的 key k,产生 publickey K= kG。

3、用户 A向用户 B发送 Ep (a、 b)以及 K、 G。

4、当用户 B接收到该信息时,向 Ep (a, b)上的一点 M进行编码(在此不讨论编码方法),并且生成一个随机整数 r (r< n)。

5、用户 B对C1= M+ rK进行运算,C2= rG。

6、用户 B向用户 A发送C1和C2。

7、当用户 A接收到该信息时,将C1-kC2进行运算,得到 M点。因为

          C1-kC2=M+rK-k(rG)=M+rK-r(kG)=M

   再对点M进行解码就可以得到明文。

  在这个加密通信中,如果有一个偷窥者H ,他只能看到Ep(a,b)、K、G、C1、C2 而通过K、G 求k 或通过C2、G求r 都是相对困难的。因此,H无法得到A、B间传送的明文信息。

 在密码学中,一条 Fp上的一条椭圆曲线,通常有六个参数:

T=(p、 a、 b、 G、 n、 h)。

(p, a, b用来求一条椭圆曲线, G是一个基点, n是 G的一个阶次, h是一个椭圆曲线上的点数 m和 n的除法。)

这些参数的选取将会对密码的安全产生直接的影响。参数的数值通常需要符合下列条件:

1、 p当然是大的比较保险,但是如果大的话,运算速度就会降低,大约200比特就能达到普通的安全性需求;

2、 P≠ n* h;

3、 pt=1,1<20;

4、4a3+27b2=0 (mod p);

5、 n是一个质子;

6、 h<4。

7椭圆曲线在软件注册保护的应用

  我们知道,把公钥密码算法用作软件登记的优点在于, Cracker很难用追踪验证算法获得一个注册机器。以下,对使用 Fp (a、 b)椭圆曲线进行软件登记的方法进行概述。

按照以下方式,软件编写人员创建一个登记机(也被称作签名处理)

1、选择 Ep (a、 b)的一条椭圆曲线,以及 G的基本点;

2、选择私有密钥 k (K< n, n是 G的阶次),并且公开密钥 K= kG通过基点 G来计算;

3、生成 R= rG的任意整数 r (r< n);

4、以用户名称和 R的坐标值x, y为参数,计算 SHA (与MD5相似)的安全哈希(Secure Hash Algorithm Secure Hash Algorithm Secure Hash Algorithm),也就是 Hash= SHA (用户名称, x, y);

5、计算 sn r- Hash* k (mod n)

6、将 sn和 Hash作为用户名称的序列号

该软件的验证程序是这样的:(在该软件中存储了椭圆曲线 Ep (a、 b)以及基点 G、公开的 Key K)

1、从用户输入的序号中,抽取 sn和 hash;

2、计算点 R. sn* G+ Hash* K (mod p),如果 sn和 Hash是对的,则该点的值与在软件作者签署程序中 R (x, y)点的坐标相等,

因为

sn≡r-Hash*k (mod n)

   所以

sn*G + Hash*K

=(r-Hash*k)*G+Hash*K

=rG-Hash*kG+Hash*K

=rG- Hash*K+ Hash*K

=rG=R ;

3、以用户名称、点 R的座值x、 y为参量,并求出 H= SHA (用户名称、 x、 y);

4、 H= Hash,即成功登记。如果 H≠ Hash,那么就不能进行登记(为何?说明了 R和 Hash之间的相关性。

这是一个简单的比较。

作者的签名使用了椭圆曲线 Ep (a、 b)、 G的基本点、私人的 key k和 r。

在软件验证中使用了:椭圆曲线 Ep (a、 b)、 G基、 Key K。

Cracker只有在 Ep (a, b),在 G处暴露了 kG,然后用 k= kG,得到 k之后, Cracker才能创建一个注册机器。而且,想要得到 k是一件非常困难的事情。

以下是一种常见的软件保护方法,请您仔细阅读,并回答 Cracker需要的参数,以及 Cracker要创建的注册程序。

按照以下方式,软件编写人员创建一个登记机(也被称作签名处理)

1、选择 Ep (a、 b)的一条椭圆曲线,以及 G的基本点;

2、选择私有密钥 k (k< n),将公钥 K= kG的基点计算出来;

3、生成 R (x, y)= rG的任意整数 r (r< n);

4、将用户名作为参数,计算 Hash= SHA (用户名);

5、计算 x′= x (modn)

6、计算 sn (hash+ x′* k)/r (mod n)

7、在用户名称 Username中使用 sn和x′的序列编号

该软件的验证程序是这样的:(在该软件中存储了椭圆曲线 Ep (a、 b)以及基点 G、公开的 Key K)

1、从用户输入的序列号中,提取sn以及x’;

2、将用户名作为参数,计算Hash=SHA(username);

3、计算 R=(Hash*G+x’*K)/sn,如果sn、Hash正确,其值等于软件作者签名过程中点R(x,y),因为

sn≡(Hash+x’*k)/r (mod n)

   所以

(Hash*G+x’*K)/sn

=(Hash*G+x’*K)/[(Hash+x’*k)/r]

=(Hash*G+x’*K)/[(Hash*G+x’*k*G)/(rG)]

=rG*[(Hash*G+x’*K)/(Hash*G+x’*K)]

=rG=R (mod p)

4、v≡x (mod n)

5、如果v=x’ 则注册成功。如果v≠x’ ,则注册失败。

参考文献

[1]基于多离散对数问题的公钥密码的分析[J]. 苏盛辉,孙国栋.  电子学报. 2018(01)

[2]无双线性对的动态口令认证与密钥协商方案[J]. 马立林,王侃民.  软件. 2017(07)

[3]RSA加密解密算法的分析与实现[J]. 杨奕成.  通讯世界. 2017(02)

[4]基于离散对数的数字签名标准对比研究[J]. 冯泽宇,巩博儒,赵运磊.  计算机工程. 2016(01)

[5]基于二进制域上的ECC标量乘法算法[J]. 王平平,陆正福.  六盘水师范学院学报. 2015(01)

[6]最优素数域的优化蒙哥马利算法:设计、分析与实现[J]. 刘哲,王伊蕾,徐秋亮.  密码学报. 2014(02)

[7]素数域GF(P)上椭圆曲线快速标量乘算法的研究[J]. 赖忠喜,林君焕,张占军.  计算机工程与应用. 2015(04)

[8]椭圆曲线在密码中的应用:过去,现在,将来…[J]. 张方国.  山东大学学报(理学版). 2013(05)

[9]椭圆曲线密码体制安全性分析[J]. 李殿伟,王正义,赵俊阁.  计算机技术与发展. 2012(04)

[10]素数域上椭圆曲线快速实现技术研究[J]. 白忠建,杨浩淼,张文科.  通信技术. 2011(12)

[11]Koblitz曲线上改进的ECDSA算法[J]. 尹灿,卢忱.  电子科技. 2011(02)

[12]一种基于椭圆曲线加密系统的设计与实现[J]. 赵辉,史蕊.  河南大学学报(自然科学版). 2011(01)

[13]椭圆曲线密码体制的安全性探讨及其研究现状[J]. 徐尚信,赵建斌.  信息与电脑(理论版). 2010(03)

[14]GF(3m)椭圆曲线群快速算术运算研究[J]. 端木庆峰,王衍波,张凯泽,雷凤宇.  计算机科学. 2009(05)

[15]RSA算法的内在特性、破解与防范措施[J]. 周绯菲,鲁士文.  天津大学学报. 2006(S1)

[16]椭圆曲线密码体制中有限域算法的分析[J]. 沈晓红,徐敏.  中国科技信息. 2006(21)

[17]有限域F2m的上椭圆曲线密码系统的破解[J]. 孟春岩.  太原师范学院学报(自然科学版). 2006(01)

致谢

多分欣喜,多份感慨,这是在论文正式完结之际,对我的内心情绪的确切表述。欣喜的是,一年多来的辛勤劳动总算是有了一个结果,也算是对的求学生涯有了一个交代;令人感慨的是,论文的写作艰难和写成之后自己仍然的不满意。回首之前,这一切还历历在目。我知道,论文的写作和经历已经成为我人生的又一笔宝贵的财富。

回首着自己的学习生涯,很快就接近了尾声,我的学习生涯也即将画上一个圆满的句号,但是我想说的是,学生生涯的终点永远不是学习的终点,学习是永远没有尽头的,在以后的生活中,我会将继续用我业余空闲的时间,孜孜不倦的努力的继续学习。

我首先要感谢指导我论文写作的老师。从论文的定题到初稿的完成,老师指出论文中的一些错误,并对论文的内容提出了一些很好的建议,让我少走了不少错路。

我还要感谢我人生路上的朋友,正是因为他们对我的支持让我对学习和生活更加有信心,也要感谢我学习期间的好友们,他们在我论文的写作期间给了不少良好的建议,让我是受益匪浅,是他们的睿智给我得到启发,他们的帮助让我很是难忘。谢谢你们了!

你可能感兴趣的:(python,网络,算法)