转载请注明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画椭圆曲线方程,椭圆曲线入门详解相关推荐

  1. 用Matlab画外接矩形——Regionprops函数详解:度量图像区域属性

    Regionprops:用途是get the properties of region,即用来度量图像区域属性的函数. 语法:STATS = regionprops(L,properties) 描述: ...

  2. MATLAB绘制平面填充图入门详解

    一.引言 在画图的时候,为了让图形更加清晰突出,往往需要对某一条或几条曲线围成的区域进行填冲颜色,以得到填充图.对于平面图形的填充,可以matlab的命令fill和area等实现. 二.fill命令的 ...

  3. MATLAB程序设计之循环结构入门详解

    一.引言 Matlab可以类似C/C++语言或者Python语言一样可以编写程序以完成某些功能.Matlab程序包含三大程序结构,分别是顺序结构.选择结构和循环结构.本文主要给出了Matlab程序的循 ...

  4. Matlab S-Function函数入门详解

    Matlab S-Function函数入门详解 Part I: 所谓s函数是system Function的简称, 用它来写自己的simulink模块. s函数可以用matlab.C.C++.Fort ...

  5. FFmpeg入门详解之121:颜色空间转换RGB和YUV的原理与实战

    5.颜色空间转换RGB和YUV的原理与实战 三种颜色空间模型:RGB.YUV.HSV 一.概述 颜色通常用三个独立的属性来描述,三个独立变量综合作用,自然就构成一个空间坐标,这就是颜色空间. 但被描述 ...

  6. C# Windows 窗体编程入门详解

    C# Windows 窗体编程入门详解 基于Web的B/S架构应用程序近年来确实非常流行,B/S易于部署.易于维护的特点使Web应用程序开发得到了前所未有的发展.但是,Web应用程序的缺点是,它们有时 ...

  7. matlab对图像操作函数的详解(笔记1)

    matlab对图像操作函数的详解 一. 读写图像文件 1. imread imread函数用于读入各种图像文件,如:a=imread('e:\w01.tif') 注:计算机E盘上要有w01相应的.ti ...

  8. linux 日志按大小切割_nginx入门详解(六)- 日志切割

    上一章讲解了nginx的目录加密功能,本章重点介绍nginx的日志切割. 笨办法学linux:nginx入门详解(五)- 目录加密​zhuanlan.zhihu.com 在第二章,我们探讨了nginx ...

  9. python怎么安装myqr模块-python二维码操作:对QRCode和MyQR入门详解

    python是所有编程语言中模块最丰富的 生活中常见的二维码功能在使用python第三方库来生成十分容易 三个大矩形是定位图案,用于标记二维码的大小.这三个定位图案有白边,通过这三个矩形就可以标识一个 ...

最新文章

  1. MySQL体系结构之物理文件
  2. VMware助青年时报构建安全高效应用平台
  3. php 比较,PHP类型比较
  4. 关于“svn: Can't connect to host '*.*.*.*': 由于连接方在一段时间后没有正确答复或连接”的解决方法...
  5. 如何在Java中使ArrayList只读?
  6. stm32 I2C架构
  7. web端log4net输出错误日志到mysql
  8. Java Spring MVC分层设计
  9. js Date 日期函数
  10. java导出excel_Java导出excel【复制粘贴直接用】
  11. .config文件与.xml文件的关系
  12. linux能不能装小狼毫输入法,小狼毫输入法如何设置?
  13. VMWare 装mac os x 一个必备优化神器 beamoff
  14. Hybrid Astar 算法剖析和实现(三)
  15. 解决linux下 firefox 浏览器 视频无法播放问题
  16. Google ----- 展示搜索的艺术!
  17. cube 设置滴答定时器_基于STM32CubeMX的定时器设置
  18. vue table表格中身份证隐藏中间几位
  19. 麒麟合盛(APUS)李涛:APUS云重新定义“云联邦”
  20. 【原创】PHP扩展开发入门

热门文章

  1. 机器学习笔记 - YOLOv7 论文简述与推理
  2. 当计算机遇上经济学:如何量化你的投资并获得第一桶金
  3. 海康摄像头恢复出厂监控录像视频恢复
  4. matlab处理各种数据、文件
  5. 免费的网页截屏API有哪些?
  6. NLP学习实践天池新人赛打卡第一天
  7. java 支持哪些字体_java有哪些字体
  8. pv 、uv、ip、vv、cv分别是什么
  9. STM32固件库(Standard Peripheral Libraries )官网下载方法
  10. SpringBoot + Element UI 楠橘星后台管理系统一键打包部署教程文档