椭圆曲线加密(ECC)
什么是椭圆曲线加密(ECC)?
比特币使用椭圆曲线算法生成公钥和私钥,选择的是secp256k1曲线。与RSA(Ron Rivest,Adi Shamir,Len Adleman三位天才的名字)一样,ECC(Elliptic Curves Cryptography,椭圆曲线加密)也属于公开密钥算法。 一、从平行线谈起 平行线,永不相交。没有人怀疑把:)不过到了近代这个结论遭到了质疑。平行线会不会在很远很远的地方相交了?事实上没有人见到过。所以“平行线,永不相交”只是假设(大家想想初中学习的平行公理,是没有证明的)。既然可以假设平行线永不相交,也可以假设平行线在很远很远的地方相交了。即平行线相交于无穷远点P∞(请大家闭上眼睛,想象一下那个无穷远点P∞,P∞是不是很虚幻,其实与其说数学锻炼人的抽象能力,还不如说是锻炼人的想象力)。给个图帮助理解一下: 直线上出现P∞点,所带来的好处是所有的直线都相交了,且只有一个交点。这就把直线的平行与相交统一了。为与无穷远点相区别把原来平面上的点叫做平常点。 以下是无穷远点的几个性质。 ▲直线L上的无穷远点只能有一个。(从定义可直接得出) 二、射影平面坐标系 射影平面坐标系是对普通平面直角坐标系(就是我们初中学到的那个笛卡儿平面直角坐标系)的扩展。我们知道普通平面直角坐标系没有为无穷远点设计坐标,不能表示无穷远点。为了表示无穷远点,产生了射影平面坐标系,当然射影平面坐标系同样能很好的表示旧有的平常点(数学也是“向下兼容”的)。 我们对普通平面直角坐标系上的点A的坐标(x,y)做如下改造: 例2.1:求点(1,2)在新的坐标体系下的坐标。 我们也可以得到直线的方程aX+bY+cZ=0(想想为什么?提示:普通平面直角坐标系下直线一般方程是ax+by+c=0)。新的坐标体系能够表示无穷远点么?那要让我们先想想无穷远点在哪里。根据上一节的知识,我们知道无穷远点是两条平行直线的交点。那么,如何求两条直线的交点坐标?这是初中的知识,就是将两条直线对应的方程联立求解。平行直线的方程是:aX+bY+c1Z =0; aX+bY+c2Z =0 (c1≠c2); 将二方程联立,求解。有c2Z= c1Z= -(aX+bY),∵c1≠c2 ∴Z=0 ∴aX+bY=0; 例2.2:求平行线L1:X+2Y+3Z=0 与L2:X+2Y+Z=0 相交的无穷远点。 看来这个新的坐标体系能够表示射影平面上所有的点,我们就把这个能够表示射影平面上所有点的坐标体系叫做射影平面坐标系。 练习: 三、椭圆曲线 上一节,我们建立了射影平面坐标系,这一节我们将在这个坐标系下建立椭圆曲线方程。因为我们知道,坐标中的曲线是可以用方程来表示的(比如:单位圆方程是x2+y2=1)。椭圆曲线是曲线,自然椭圆曲线也有方程。 椭圆曲线的定义: 定义详解: ▲ Y2Z+a1XYZ+a3YZ2 = X3+a2X2Z+a4XZ2+a6Z3是Weierstrass方程(维尔斯特拉斯,Karl Theodor Wilhelm Weierstrass,1815-1897),是一个齐次方程。 ▲ 椭圆曲线的形状,并不是椭圆的。只是因为椭圆曲线的描述方程,类似于计算一个椭圆周长的方程(计算椭圆周长的方程,我没有见过,而对椭圆线积分(设密度为1)是求不出来的。谁知道这个方程,请告诉我呀^_^),故得名。 我们来看看椭圆曲线是什么样的。 ▲ 所谓“非奇异”或“光滑”的,在数学中是指曲线上任意一点的偏导数Fx(x,y,z),Fy(x,y,z),Fz(x,y,z)不能同时为0。如果你没有学过高等数学,可以这样理解这个词,即满足方程的任意一点都存在切线。 下面两个方程都不是椭圆曲线,尽管他们是方程[3-1]的形式。 因为他们在(0:0:1)点处(即原点)没有切线。 ▲椭圆曲线上有一个无穷远点O∞(0:1:0),因为这个点满足方程[3-1]。 知道了椭圆曲线上的无穷远点。我们就可以把椭圆曲线放到普通平面直角坐标系上了。因为普通平面直角坐标系只比射影平面坐标系少无穷远点。我们在普通平面直角坐标系上,求出椭圆曲线上所有平常点组成的曲线方程,再加上无穷远点O∞(0:1:0),不就构成椭圆曲线了么? 我们设x=X/Z ,y=Y/Z代入方程[3-1]得到: 也就是说满足方程[3-2]的光滑曲线加上一个无穷远点O∞,组成了椭圆曲线。为了方便运算,表述,以及理解,今后论述椭圆曲线将主要使用[3-2]的形式。 本节的最后,我们谈一下求椭圆曲线一点的切线斜率问题。 例3.1:求椭圆曲线方程y2+a1xy+a3y=x3+a2x2+a4x+a6上,平常点A(x,y)的切线的斜率k。 看不懂解题过程没有关系,记住结论[3-3]就可以了。 练习: 四、椭圆曲线上的加法 上一节,我们已经看到了椭圆曲线的图象,但点与点之间好象没有什么联系。我们能不能建立一个类似于在实数轴上加法的运算法则呢?天才的数学家找到了这一运算法则 自从近世纪代数学引入了群、环、域的概念,使得代数运算达到了高度的统一。比如数学家总结了普通加法的主要特征,提出了加群(也叫交换群,或Abel(阿贝尔)群),在加群的眼中。实数的加法和椭圆曲线的上的加法没有什么区别。这也许就是数学抽象把:)。关于群以及加群的具体概念请参考近世代数方面的数学书。 运算法则:任意取椭圆曲线上两点P、Q (若P、Q两点重合,则做P点的切线)做直线交于椭圆曲线的另一点R’,过R’做y轴的平行线交于R。我们规定P+Q=R。(如图) 法则详解: ▲根据这个法则,可以知道椭圆曲线无穷远点O∞与椭圆曲线上一点P的连线交于P’,过P’作y轴的平行线交于P,所以有 无穷远点 O∞+ P = P 。这样,无穷远点 O∞的作用与普通加法中零的作用相当(0+2=2),我们把无穷远点 O∞ 称为 零元。同时我们把P’称为P的负元(简称,负P;记作,-P)。(参见下图) ▲根据这个法则,可以得到如下结论 :如果椭圆曲线上的三个点A、B、C,处于同一条直线上,那么他们的和等于零元,即A+B+C= O∞ ▲k个相同的点P相加,我们记作kP。如下图:P+P+P = 2P+P = 3P。 下面,我们利用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)的和R(x4,y4)的坐标。 因此P,Q,-R三点的坐标值就是方程组: 将[2],代入[1] 有 (2)利用-R求R 本节的最后,提醒大家注意一点,以前提供的图像可能会给大家产生一种错觉,即椭圆曲线是关于x轴对称的。事实上,椭圆曲线并不一定关于x轴对称。如下图的y2-xy=x3+1 五、密码学中的椭圆曲线 我们现在基本上对椭圆曲线有了初步的认识,这是值得高兴的。但请大家注意,前面学到的椭圆曲线是连续的,并不适合用于加密;所以,我们必须把椭圆曲线变成离散的点。 让我们想一想,为什么椭圆曲线为什么连续?是因为椭圆曲线上点的坐标,是实数的(也就是说前面讲到的椭圆曲线是定义在实数域上的),实数是连续的,导致了曲线的连续。因此,我们要把椭圆曲线定义在有限域上(顾名思义,有限域是一种只有由有限个元素组成的域)。 域的概念是从我们的有理数,实数的运算中抽象出来的,严格的定义请参考近世代数方面的数。简单的说,域中的元素同有理数一样,有自己得加法、乘法、除法、单位元(1),零元(0),并满足交换率、分配率。 下面,我们给出一个有限域Fp,这个域只有有限个元素。 同时,并不是所有的椭圆曲线都适合加密。y2=x3+ax+b是一类可以用来加密的椭圆曲线,也是最为简单的一类。下面我们就把y2=x3+ax+b 这条曲线定义在Fp上: 选择两个满足下列条件的小于p(p为素数)的非负整数a、b 我们看一下y2=x3+x+1 (mod 23)的图像 是不是觉得不可思议?椭圆曲线,怎么变成了这般模样,成了一个一个离散的点? Fp上的椭圆曲线同样有加法,但已经不能给以几何意义的解释。不过,加法法则和实数域上的差不多,请读者自行对比。 1. 无穷远点 O∞是零元,有O∞+ O∞= O∞,O∞+P=P 例5.1 已知E23(1,1)上两点P(3,10),Q(9,7),求1)-P,2)P+Q,3) 2P。 练习: 六、椭圆曲线上简单的加密/解密 公开密钥算法总是要基于一个数学上的难题。比如RSA 依据的是:给定两个素数p、q 很容易相乘得到n,而对n进行因式分解却相对困难。那椭圆曲线上有什么难题呢? 考虑如下等式: 现在我们描述一个利用椭圆曲线进行加密通信的过程: 1、用户A选定一条椭圆曲线Ep(a,b),并取椭圆曲线上一点,作为基点G。 在这个加密通信中,如果有一个偷窥者H ,他只能看到Ep(a,b)、K、G、C1、C2 而通过K、G 求k 或通过C2、G求r 都是相对困难的。因此,H无法得到A、B间传送的明文信息。 密码学中,描述一条Fp上的椭圆曲线,常用到六个参量: 这几个参量取值的选择,直接影响了加密的安全性。参量值一般要求满足以下几个条件: 1、p 当然越大越安全,但越大,计算速度会变慢,200位左右可以满足一般安全要求; 七、椭圆曲线在软件注册保护的应用 我们知道将公开密钥算法作为软件注册算法的好处是Cracker很难通过跟踪验证算法得到注册机。下面,将简介一种利用Fp(a,b)椭圆曲线进行软件注册的方法。 软件作者按如下方法制作注册机(也可称为签名过程) 1、选择一条椭圆曲线Ep(a,b),和基点G; 软件验证过程如下:(软件中存有椭圆曲线Ep(a,b),和基点G,公开密钥K) 1、从用户输入的序列号中,提取sn以及Hash; 简单对比一下两个过程: 练习: 软件作者按如下方法制作注册机(也可称为签名过程) 软件验证过程如下:(软件中存有椭圆曲线Ep(a,b),和基点G,公开密钥K) 主要参考文献 张禾瑞,《近世代数基础》,高等教育出版社,1978 原文链接:http://8btc.com/article-138-1.html |
椭圆曲线加密(ECC)相关推荐
- 转载:Openssl生成rsa和椭圆曲线加密公钥密钥创建根ca签名https服务器证书签名...
转载:Openssl生成rsa和椭圆曲线加密公钥密钥创建根ca签名https服务器证书签名 Openssl生成rsa和椭圆曲线加密公钥密钥创建根ca签名https服务器证书签名 July 20, 20 ...
- 椭圆曲线加密和签名算法
简述 椭圆曲线密码学,简称ECC.是一种建立公开加密的算法,也就是非对称加密.和RSA类似.被公认在给定密钥长度下最安全的加密算法.应用范围很广,主要的三个技术TLS.PGP.SSH都在使用它,特别是 ...
- 椭圆曲线加密(Elliptic Curve Cryptography, ECC)
近年来,国内外的科研人员面向设备资源受到限制的多种场景提出了很多基于ECC的认证密钥协商协议.虽然各协议应用场景不尽相同,但解决的问题和最终的目标都较为类似,可以归纳为在性能开销尽可能小的前提下,安全 ...
- 椭圆曲线加密(ECC)elliptic curves cryptography
前言 ECC英文全称"Ellipse Curve Cryptography" 与传统的基于大质数因子分解困难性的加密方法不同,ECC通过椭圆曲线方程式的性质产生密钥 ECC164位 ...
- 椭圆曲线加密算法ECC
目录 ECC加密算法 一.相关数学基础 二.ECC安全性原理 三.算法详细流程 四.特点及安全性 推荐: https://blog.csdn.net/sitebus/article/details/8 ...
- python椭圆曲线加密算法_ECC椭圆曲线加密学习笔记
0x00 前言 之前做题的时候遇到一个ECC相关的题目,学习了好几篇大佬的文章ECC的剖析文章,学习之后也记录一下,写一遍加强自己的巩固. 此文章严格意义上来讲应该算是读书笔记,在总结过程中观摩了很多 ...
- 【安全】椭圆曲线加密算法(ECC)深入理解
背景 由于在实际的项目中使用到了基于ECDH的秘钥协商算法,所以对背后基于椭圆曲线密码学(ECC-Elliptic Curve Cryptography)进行了较为深入的学习,本篇文章主要分享一下几点 ...
- 椭圆曲线加密与NSA后门考古
本文主要介绍椭圆曲线的基本原理以及基于椭圆曲线的密码学实现,包括ECC加密.ECDH秘钥交换以及ECDSA签名算法,并介绍其中潜在的一些安全问题.其中分析了两个ECC实现相关的真实案例,分别是索尼PS ...
- 椭圆曲线密码学(ECC)简介
这一节要聊的是 ECC ( Elliptic Curve Cryptography ),也就是椭圆曲线密码学.跟 RSA 一样,ECC 也属于公开密钥加密,ECC 算法也是用来生成公钥的私钥的.本节我 ...
最新文章
- 【计算机视觉】EmguCV学习笔记(3)ROI区域图像叠加以及初级图像混合
- 【c语言】蓝桥杯算法训练 连接字符串
- js继承之借用构造函数继承
- Java 序列化的一些简 单总结
- 如何通过Fiori后台调试的方式找到gateway系统的ID
- 3.Java 面试题整理(线程篇)
- java websocket
- L1-053 电子汪-PAT团体程序设计天梯赛GPLT
- 软考程序员java_软考程序员难吗?
- Java实现万年历【升级版】
- python汽车租赁系统django
- ctf入门——实验吧
- python图片压缩原理_LZ77无损压缩算法原理详解(结合图片和简单代码)
- 微信小程序播放音乐(仿QQ音乐)
- 小程序动画-循环放大缩小的动画(一闪一闪的)
- memcache数据组织
- 设计美学 第三章 设计美的文化差异
- 关于直接下载第三方IPA应用分发平台之蒲公英的研究
- HTML编辑器自动过滤代码怎么办,KesionCMS X1百度编辑器过滤html代码的修复方法
- 在国内考是考CISP还是CISSP呢?
热门文章
- swust oj 971
- axios 官方指南翻译
- 【Flink】学习笔记-20200302更新
- 工规/车规 LDO SCT71403F,替代TPS7B82-Q1 , TPS7B81-Q1,TPS7B69-Q1,MPQ2013, MPQ2013A
- cv曲线面积的意义_耳机的瀑布图真的有意义吗?关于耳机的瀑布图,你需要知道的。...
- java程序员工作中遇到的问题解决记录
- 开发一款桌面程序。文件转换器
- 摄影软文文案有哪些类型?
- 如何在HTML中引用jQuery函数库
- Ubuntu18.04安装Pycharm并将其添加至左侧收藏夹