首页 > 编程知识 正文

matlab中如何画椭圆,matlab如何画椭圆曲线

时间:2023-05-05 10:51:07 阅读:239425 作者:2115

转载请注明http://blog.csdn.net/boksic 如有疑问欢迎留言

如果不知道数学上的群、循环群等概念,可以先了解ElGamal加密算法 后再回过来椭圆曲线加密

这两个算法有共通之处,都是在离散问题难解群上的加密算法,椭圆曲线是进一步的加深

首先,什么是椭圆曲线

椭圆曲线(Elliptic curve)

叫椭圆曲线只是因为方程跟椭圆的曲线积分比较相似

椭圆曲线方程可以统一为

当然还有要求

至于长什么样,绘个图看看

用matlab写了一个模拟程序,可以控制a,b变化,显示曲线的图像。

clear;clc;figure(1);

a=0;

b=0;

h_text1=uicontrol('Style','text','String','a','Position',[50 20 50 20]);

h_text1=uicontrol('Style','text','String','b','Position',[50 0 50 20]);

ezplot(strcat('x+',num2str(a),'*y'));

h_slider1=uicontrol('Style','slider','Position',[100 20 200 20],...

'Max',10,'Min',-10,'callback',['a=num2str(get(gcbo,''value''));',...

'ezplot(strcat(num2str(b),''+x^3+'',num2str(a),''*x-y^2''))']);

%h_text2=uicontrol('Style','text','String','b');

h_slider2=uicontrol('Style','slider','Position',[100 0 200 20],...

'Max',10,'Min',-10,'callback',['b=num2str(get(gcbo,''value''));',...

'ezplot(strcat(num2str(b),''+x^3+'',num2str(a),''*x-y^2''))']);

再直观一点

(不得不说在这方面,Mathematica比Matlab要方便强力太多,用MATLAB做这个图像速度慢代码长步骤复杂效果烂)

b=0,a在[-20,20]上变动时的图像

a=-6,b在[-20,20]上变动时的图像

Plot3D[{(x^3+y*x)^0.5,-(x^3+y*x)^0.5},{x,-7,7},{y,-20,20}]

Plot3D[{(x^3-6x+y)^0.5,-(x^3-6x+y)^0.5},{x,-7,7},{y,20,-20}]

"受ElGamal密码启发,在其它离散对数问题难解的群中,同样可以构成ELGamal密码。于是人们开始寻找其它离散问题难解的群。研究发现,有限域GF(p)上的椭圆曲线的解点构成交换群,而且离散对数问题是难解的。于是可在此群上建立ELGamal密码,并称为椭圆曲线密码。"

解点交换群

为了构成加法交换群,需要定义元素、单位元、逆元素、加法

解点

设p是大于3的素数,且4a3+27b2 ≠0 mod p ,称

y^2 =x^3 +ax+b ,a,b∈GF(p)

为GF(p)上的椭圆曲线。

由椭圆曲线可得到一个同余方程:

y^2 =x^3 +ax+b    mod p

其解为一个二元组,x,y∈GF(p),将此二元组描画到椭圆曲线上便为一个点,于是又称其为解点。

单位元

引进一个无穷点O(∞,∞),简记为0,作为0元素。

O(∞,∞)+O(∞,∞)=0+0=0 。

并定义对于所有的解点P(x ,y)有

P(x ,y)+O=O+ P(x ,y)=P(x ,y)

逆元素

任何解点R(x ,y)的逆就是 R(x ,-y)。

加法

P(x1 ,y1)+Q(x2 ,y2)=R(x3 ,y3)

(提醒一下,这里的运算都是模运算,值都是整数,像除法是模逆运算)

定义s = (yP ? yQ)/(xP ?xQ),即PQ线的斜率

总共3种情况

1.一般情况下 R = P + Q = (xR, ? yR)其中

2.如果xP = xQ,yP = ?yQ(包括yP =yQ = 0的情形)

结果R就是无穷远点0

3 尽管xP = xQ但yP = yQ ≠ 0那么R =P +P = 2P = (xR,?yR)有

加法的几何意义

设P和Q是椭圆曲线的两个点,则连接P和Q的直线与椭圆曲线的另一交点关于横轴的对称点即为R点。在该群中P + Q + R = 0

椭圆曲线交换群实例

对于标准方程y^2=x^3+ax+b (mod p) 设定基本参数

p=31,a=2,b=17

随便找一个在曲线上(即满足该方程)的点P=(10,13)

然后按照上面提到的公式来逐一计算2P,3P,4P.....

我用的Python来计算(调用的mod_inv是模下的除运算,代码可参看前面的文章):

px,py=10,13

x,y=px,py

a,b=2,17

p=31

for i in range(p+20):

if(x==px and y==py):

x3=(9*x**4-8*x*y**2+6*a*x**2+a**2)

*mod_inv(4*y**2,p)%p

y3=((3*x**2+a)*(x-x3)*mod_inv(2*y,p)-y)%p

elif(x==px):

x3,y3=0,0

elif(x==0 and y==0):

x3,y3=px,py

else:

x3=(((y-py)*mod_inv(x-px,p))**2-x-px)%p

y3=((y-py)*(px-x3)*mod_inv(x-px,p)-py)%p

str = "%dP= (%d,%d)"%(i+2,x3,y3)

print str,

x,y=x3,y3

可以得到

2P= (21,19) 3P= (19,30) 4P= (27,10)

5P= (29,25) 6P= (24,1) 7P= (30,13)

8P= (22,18) 9P= (8,24) 10P= (20,11)

11P= (6,11) 12P= (23,27) 13P= (12,23)

14P= (3,22) 15P= (7,23) 16P= (1,19)

17P= (17,2) 18P= (9,12) 19P= (13,15)

20P= (5,11) 21P= (5,20) 22P= (13,16)

23P= (9,19) 24P= (17,29) 25P= (1,12)

26P= (7,8) 27P= (3,9) 28P= (12,8)

29P= (23,4) 30P= (6,20) 31P= (20,20)

32P= (8,7) 33P= (22,13) 34P= (30,18)

35P= (24,30) 36P= (29,6) 37P= (27,21)

38P= (19,1) 39P= (21,12) 40P= (10,18)

41P= (0,0) 42P= (10,13)

matlab显示一下,点的分布与顺序都是杂乱无章

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。