一. 椭圆曲线加密算法
简称ECC,是基于椭圆曲线数学理论实现的一种非对称加密算法。相比RSA,ECC优势是可以使用更短的密钥,来实现与RSA相当或更高的安全,RSA加密算法也是一种非对称加密算法,在公开密钥加密和电子商业中RSA被广泛使用。据研究,160位ECC加密安全性相当于1024位RSA加密,210位ECC加密安全性相当于2048位RSA加密(有待考证)
二. 什么是椭圆曲线
Wolfram MathWorld给出了个准确非凡的定义椭圆曲线。椭圆曲线可以暂时简单的理解为描述了特定点的集合的公式:

以下是a和b参数的变化对应的图形的示例:

b=1,a取值范围从2到-3

特殊曲线:左边参数是a=b=0,右边参数是a=-3,b=2.这两条都不是符合标准的曲线。
a和b的取值变化决定了曲线在坐标系上的不同形状。从图中可以看到,椭圆曲线是相对X轴对称。
另外定义一个无穷大的点(也可以成为理想点),以符号0,也就是零表示该点。
三. 阿贝尔群
椭圆曲线也可以有运算,像实数的加减乘除一样,这就需要使用到加群。19世纪挪威的尼尔斯·阿贝尔抽象出了加群(又叫阿贝尔群或交换群)。数学中的群是一个集合,我们为它定义了一个“加法”,并用符号+表示。假定群用 表示,则加法必须遵循以下四个特性:

封闭性:如果a和b都是 的成员,那么a+b也是 的成员;
结合律:(a + b) + c = a + (b + c);
单位元:a+0=0+a=a,0就是单位元;
逆元:对于任意值a必定存在b,使得a+b=0。

如果再增加一个条件,交换律:a + b = b + a,则称这个群为阿贝尔群,根据这个定义整数集是个阿贝尔群。

四. 椭圆的几何加法
因为椭圆曲线是阿贝尔群,所以公式P+Q+R=0 以及 P+Q=−R成立。在椭圆曲线上画出点P和点Q,连直线穿过P和Q,该直线会与椭圆曲线相较于第三个点,称之为R。根据R取得R的逆元-R,P+Q=-R。

运用几何学的方法很容易得到我们要的结果,但是我们需要再对一些更精确的解释。特别是有一些问题需要考虑:
• 如果P=0或者Q=0(0是无穷远点)呢?无法画出该直线,因为无穷远点无法体现在直角坐标系里。但是既然已经定义了无穷远点0,那么对于任意给定的P或者Q,P+0=P以及0+Q=Q都是成立的。
• 如果P=-Q呢?这种情况下该直线是与X轴是垂直的,并且不会与椭圆曲线相交于第三个点。 根据公理,P就是Q的逆元,P+Q=P+(-P)=0。
• 如果P=Q呢?这种情况下,存在无数条线穿过这个点。这里要用到极限的思维。假设线上有另外一个点Q1,让Q1不断靠近P, 随着Q1不断靠近P,最终Q1无限靠近P,产生了一条直线与椭圆曲线相切。那么可以得到 P+P=-R, 在这里R就是该直线与椭圆曲线的另外一个交点。

• 如果P≠Q,但是不存在第三个交点R呢?这种情况和上一个情况很类似。实际上,这种情况下该直线跟椭圆曲线是相切的关系。

假设P就是相切的点。在上一个情况里,有该等式P+P=-Q。而在这里变成了P+Q=-P。另一方面,如果Q是相切的点,那么P+Q=-Q。
五. 代数上的加法
要计算点的加法的话,我们必须把前面的几何学的讨论转到代数上的讨论,考虑非0,非对称的点P(x1,y1)和Q(x2,y2),R(x3,y3)为过P,Q与曲线相交点,则:
x3=k^2−x1−x2
y3=k(x1−x3)−y1
若P=Q,则k=(3x1^2+a)/2y1
若P≠Q,则k= (y2−y1)/ (x2−x1)

六. 标量乘法
同点加法,若有k个相同的点P相加,记作kP 。 P+P=2P

P+P+P=2P+P=3P

七. 有限域椭圆曲线
椭圆曲线是连续的,并不适合用于加密;所以,我们必须把椭圆曲线变成离散的点,我们要把椭圆曲线定义在有限域上。
我们给出一个有限域Fp
1.Fp中有p(p为质数)个元素0,1,2,…, p-2,p-1
2.Fp的加法是a + b ≡ c ( m o d p )
3.Fp的乘法是a × b ≡ c ( m o d p )
4.Fp的除法是a ÷ b ≡ c ( m o d p ) , 即 a × b ^− 1 ≡ c ( m o d p ) , b^ − 1 也 是 一 个 0 到 p − 1 之 间 的 整 数 , 但 满 足 b × b ^− 1 ≡ 1 ( m o d p )
5.Fp的单位元是1,零元是 0
6.Fp域内运算满足交换律、结合律、分配律
7.椭圆曲线Ep(a,b),p为质数,x,y∈[0,p-1]

选择两个满足下列约束条件的小于p的非负整数a、b :

有限域椭圆曲线点的阶, 如果椭圆曲线上一点P,存在最小的正整数n使得数乘n P = O∞,则将n称为P的阶,若n不存在,则P是无限阶的.

八. 椭圆曲线加密
考虑K=kG,其中K、G为椭圆曲线Ep(a,b)上的点,n为G的阶(n G = O∞ ),k为小于n的整数。则给定k和G,根据加法法则,计算K很容易但反过来,给定K和G,求k就非常困难。因为实际使用中的ECC原则上把p取得相当大,n也相当大,要把n个解点逐一算出来列成上表是不可能的。这就是椭圆曲线加密算法的数学依据 。

1.点G称为基点(base point)
2.k(k<n)为私有密钥(private key)
3.K为公开密钥(public key)

下面是利用椭圆曲线进行加密通信的过程(公钥加密私钥解密过程):
1、用户A选定一条椭圆曲线Ep(a,b),并取椭圆曲线上一点,作为基点G。
2、用户A选择一个私有密钥k,并生成公开密钥K=kG。
3、用户A将Ep(a,b)和点K,G传给用户B。
4、用户B接到信息后 ,将待传输的明文编码到Ep(a,b)上一点M(编码方法很多,这里不作讨论),并产生一个随机整数r(r<n)。
5、用户B计算点C 1 = M + r K和C 2 = r G。
6、用户B将C 1 、 C 2 传给用户A。
7、用户A接到信息后,计算C 1 − k C 2 ,结果就是点M。再对点M进行解码就可以得到明文。
因为C 1 − k C 2 = M + r K − k ( r G ) = M + r k G − k r G = M

九. 数字签名
数字签名是公钥密码学发展过程中最重要的概念之一,产生和使用数字签名过程的一般模型如图所示

十. 椭圆曲线数字签名算法(ECDSA)
ECDSA处理过程:
1.参与数字签名的所有通信方都使用相同的全局参数,用于定义椭圆曲线以及曲线上的基点
2.签名者首先生成一对公私钥。对于私钥,选择一个随机数或者伪随机数作为私钥,利用随机数和基点算出另一点,作为公钥
3.对消息计算Hash值,用私钥、全局参数和Hash值生成签名
4.验证者用签名者的公钥、全局参数等验证。
全局参数:

密钥生成:
每个签名者都要生成一对公私钥,假设是Bob

这里是定义在
上的椭圆曲线,椭圆曲线上的乘法运算就是多个点的累加运算,最后的结果还是椭圆曲线上的点,有了公钥之后,Bob对消息m生成320字节的数字签名:

第2步确保最后算出的公钥(椭圆曲线上的点)是落在曲线上。第5步,如果为O点也是不符合的,所以也要重新生成。
Alice在获得Bob的公钥和全局参数后,即可校验签名


该过程有效性证明如下,如果Alice收到的消息确实是Bob签署的,那么
s = (e+dr)k^-1 mod n
于是 k= (e+dr)s^-1 mod n
= (e s^-1 + dr s^-1) mod n
= (we +wdr) mod n
=(u1 + u2d) mod n
现在考虑u1G + u2Q = u1G + u2dG = (u1 + u2d)G = KG
在验证过程的步骤6中,有v = x1 mod n , 这里解点 X =(x1,y1) = u1G + u2Q。因为
R = x mod n 且x 是解点kG的x 坐标,又因为 我们已知 u1G + u2Q = KG,所以可得到 v = r。

椭圆曲线数字签名算法(ECDSA)相关推荐

  1. 高级数字签名之椭圆曲线数字签名算法(ECDSA)

    @TOC 1. 算法简述 该算法是微软操作系统及办公软件的序列号验证算法. ECDSA(Elliptic Curve Digital Signature Algorithm, 椭圆曲线数字签名算法) ...

  2. 区块链应用:椭圆曲线数字签名算法ECDSA

    1 椭圆曲线密码学 椭圆曲线密码学(Elliptic Curve Cryptography,缩写ECC),是基于椭圆曲线数学理论实现的一种非对称加密算法.椭圆曲线在密码学中的使用是在1985年有Nea ...

  3. go区块链培训怎么样?深度讲解椭圆曲线加密算法ECC和椭圆曲线数字签名算法ECDSA

    区块链培训怎么样?关键还是看其课程质量,下面是我写的一系列课程讲解,大家可以先学习一下!感兴趣的还可以找我要视频哈! 8.1.1 ECC数字签名(ECDSA)核心代码 下面通过一个案例验证数字签名,如 ...

  4. [以太坊源代码分析] IV. 椭圆曲线密码学和以太坊中的椭圆曲线数字签名算法应用

    数字签名算法在Ethereum中的应用不少,目前已知至少有两处:一是在生成每个交易(Transaction, tx)对象时,对整个tx对象进行数字签名:二是在共识算法的Clique算法实现中,在针对新 ...

  5. 算法2_非对称加密算法之ECDSA(椭圆曲线数字签名算法)

    ECDSA(椭圆曲线数字签名算法) AES(高级加密标准): =>对称加密 ​ 对业务数据进行加密,防止他人可以看见 ECDSA(椭圆曲线数字签名算法):=>非对称加密算法(公钥和私钥) ...

  6. Fabric 1.0源代码分析(46)ECDSA(椭圆曲线数字签名算法)

    # Fabric 1.0源代码笔记 之 ECDSA(椭圆曲线数字签名算法) ## 1.椭圆曲线算法概述 ### 1.1.无穷远点.无穷远直线.射影平面 * 平行线相交于无穷远点: * 直线上有且只有一 ...

  7. 数字签名算法ECDSA

    一 介绍 ECDSA:Elliptic Curv Digstal Signature Algorithm 椭圆曲线数字签名算法. 速度快.强度高.签名短 二 参数说明 三 代码实现 package c ...

  8. 【数字赛道命题二】椭圆曲线数字签名算法的高性能硬件实现

    一. 赛题简介 1985年,Victor Miller和Neal Koblitz分别提出了椭圆曲线密码体制(Elliptic Curve Cryptography,ECC).椭圆曲线密码算法以其特有的 ...

  9. ecdsa JAVA 私钥推导公钥_ECDSA(椭圆曲线数字签名算法)

    ECDSA(Elliptic Curve Digital Signature Algorithm) 一.学习背景--数字签名 在现实工作和生活中,我们使用签名的方式表达对一份文件的认可,其他人可以识别 ...

最新文章

  1. Android开发之sdcard读写数据(源代码分享)
  2. MySQL(一)SQL执行流程与MySQL架构
  3. 微信实现定位城市并获取城市编码
  4. php页面怎么去登录,php中登录后跳转回原来要访问的页面实例
  5. (安卓)一键锁屏 ---亲测!
  6. 【线性代数】1.6矩阵的特征值和特征向量
  7. 前端开发实习面经总结
  8. C++ 函数其实可以不用写返回值的声明!
  9. 目标检测经典论文详解
  10. mevan 的常用命令和参数解释
  11. 前端、数据库面试要点
  12. Chris Hadfield現身《ABS 2020》,各方菁英和THORBOT 雷神量化機器人一同進行深入探討
  13. 哈里森,史上最具空间价值的钟表匠
  14. mysql查询distinct_mysql中select distinct的用法
  15. Ambari添加快速链接Quick Links
  16. 数据库的“读现象”浅析
  17. java接口可以实例化吗?
  18. linux vsftpd上传文件权限,如何用vsftpd实现用户不同权限:只能下载,可上传,管理权限等...
  19. 鬼谷子《本经阴符七术》上:千古奇人奇文,以一人之力颠覆全世界
  20. 第二周 体验复杂度--汉诺塔

热门文章

  1. 安装MYSQL-8.0.30和MYSQL-5.7.28
  2. iphone4s拒接电话
  3. 利用OpencvSharp计算工件移动后,机器人旋转中心(抓取位置)
  4. 支付结算系统如何应对高并发、热点账户等问题
  5. 计算机中乘法是什么函数,excl中的乘法函数符号是什么
  6. Liunx系统格式化磁盘和挂载备份盘
  7. PyCharm取消下划线
  8. 计算机 博士 论文要求,计算机学院博士生发表论文要求.doc
  9. 嵌入式Linux系统的电子书阅读器项目1——Overview
  10. 距离会玩痛点的文案高手,你还差在哪