用matlab画椭圆曲线方程,椭圆曲线入门详解
转载请注明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显示一下,点的分布与顺序都是杂乱无章
用matlab画椭圆曲线方程,椭圆曲线入门详解相关推荐
- 用Matlab画外接矩形——Regionprops函数详解:度量图像区域属性
Regionprops:用途是get the properties of region,即用来度量图像区域属性的函数. 语法:STATS = regionprops(L,properties) 描述: ...
- MATLAB绘制平面填充图入门详解
一.引言 在画图的时候,为了让图形更加清晰突出,往往需要对某一条或几条曲线围成的区域进行填冲颜色,以得到填充图.对于平面图形的填充,可以matlab的命令fill和area等实现. 二.fill命令的 ...
- MATLAB程序设计之循环结构入门详解
一.引言 Matlab可以类似C/C++语言或者Python语言一样可以编写程序以完成某些功能.Matlab程序包含三大程序结构,分别是顺序结构.选择结构和循环结构.本文主要给出了Matlab程序的循 ...
- Matlab S-Function函数入门详解
Matlab S-Function函数入门详解 Part I: 所谓s函数是system Function的简称, 用它来写自己的simulink模块. s函数可以用matlab.C.C++.Fort ...
- FFmpeg入门详解之121:颜色空间转换RGB和YUV的原理与实战
5.颜色空间转换RGB和YUV的原理与实战 三种颜色空间模型:RGB.YUV.HSV 一.概述 颜色通常用三个独立的属性来描述,三个独立变量综合作用,自然就构成一个空间坐标,这就是颜色空间. 但被描述 ...
- C# Windows 窗体编程入门详解
C# Windows 窗体编程入门详解 基于Web的B/S架构应用程序近年来确实非常流行,B/S易于部署.易于维护的特点使Web应用程序开发得到了前所未有的发展.但是,Web应用程序的缺点是,它们有时 ...
- matlab对图像操作函数的详解(笔记1)
matlab对图像操作函数的详解 一. 读写图像文件 1. imread imread函数用于读入各种图像文件,如:a=imread('e:\w01.tif') 注:计算机E盘上要有w01相应的.ti ...
- linux 日志按大小切割_nginx入门详解(六)- 日志切割
上一章讲解了nginx的目录加密功能,本章重点介绍nginx的日志切割. 笨办法学linux:nginx入门详解(五)- 目录加密zhuanlan.zhihu.com 在第二章,我们探讨了nginx ...
- python怎么安装myqr模块-python二维码操作:对QRCode和MyQR入门详解
python是所有编程语言中模块最丰富的 生活中常见的二维码功能在使用python第三方库来生成十分容易 三个大矩形是定位图案,用于标记二维码的大小.这三个定位图案有白边,通过这三个矩形就可以标识一个 ...
最新文章
- MySQL体系结构之物理文件
- VMware助青年时报构建安全高效应用平台
- php 比较,PHP类型比较
- 关于“svn: Can't connect to host '*.*.*.*': 由于连接方在一段时间后没有正确答复或连接”的解决方法...
- 如何在Java中使ArrayList只读?
- stm32 I2C架构
- web端log4net输出错误日志到mysql
- Java Spring MVC分层设计
- js Date 日期函数
- java导出excel_Java导出excel【复制粘贴直接用】
- .config文件与.xml文件的关系
- linux能不能装小狼毫输入法,小狼毫输入法如何设置?
- VMWare 装mac os x 一个必备优化神器 beamoff
- Hybrid Astar 算法剖析和实现(三)
- 解决linux下 firefox 浏览器 视频无法播放问题
- Google ----- 展示搜索的艺术!
- cube 设置滴答定时器_基于STM32CubeMX的定时器设置
- vue table表格中身份证隐藏中间几位
- 麒麟合盛(APUS)李涛:APUS云重新定义“云联邦”
- 【原创】PHP扩展开发入门