简述

椭圆曲线密码学,简称ECC。是一种建立公开加密的算法,也就是非对称加密。和RSA类似。被公认在给定密钥长度下最安全的加密算法。应用范围很广,主要的三个技术TLS、PGP、SSH都在使用它,特别是以BTC为代表的数字货币。

椭圆曲线

椭圆曲线并不是我们高中时学习的椭圆形状,其名字的由来是应为椭圆曲线的描述方程,类似于计算一个椭圆周长的方程。这里用来加密的 椭圆曲线的定义 是一个特殊情况。

椭圆曲线暂时可以简单的理解为:

其中:

a和b决定了曲线在坐标系的不同形状。举个例子:

当b=1,a的取值从2到-3时,曲线的形状如下:

特殊曲线:当a=b=0时(左),或a=-3,b=2时(右),这两条都不是符合标准的曲线。

阿贝尔群

数学上,群是指定义了二元操作运算并且用符号“+”表示的一个集合。则必须满足以下要求:

  • 封闭性:如果a和b都是群成员,那么a+b也是群成员。
  • 组合性:(a+b)+c=a+(b+c)
  • 单位元:存在确切的一个值可以保证 a+0=0+a=a成立,我们称之为单位元
  • 逆元:每个成员都有一个相反数:对于任意值a必定存在b使得a+b=0

这样的群我们称之为阿贝尔群。另外阿贝尔群还应该满足交换律a+b=b+a

我们所熟知的在整数范围内的加法运算(Z,+)就是阿贝尔群

  • 封闭性:a、b属于整数,a+b也属于整数
  • 组合性:(a+b)+c=a+(b+c)
  • 单位元:0值就是单位元
  • 逆元:a的逆元就是-a

所以(Z,+)是一个阿贝尔群。

椭圆曲线的加法

假设我们有这样一条椭圆曲线y^2=x^3-x,曲线上有两点P、Q,过P和Q做一条直线,交椭圆曲线于R'点,再过R'点做垂直于X轴的直线,交椭圆曲线于另一点R,我们定义P+Q=R。

当P=Q时候,则是过P点的切线交于椭圆曲线于R',此时R=2P,如图所示:

当有k个相同的点P相加时,记做kP,如:P+P+P=2P+P=3P,如图:

椭圆曲线密码利用上述“运算”中的“椭圆曲线上的离散多数问题”,就像RSA利用“大数质因数分解”一样。

椭圆曲线上的离散对数问题

离散对数问题:

已知:

  • 椭圆曲线E
  • 椭圆曲线E上的一点G(基点)
  • 椭圆曲线E上的一点xG(x倍的G)

求:

  • x

这里需要说明一下,若果椭圆曲线上的一点P,存在最小正整数n使得数乘nP=0(无限原点),则称n是P的阶,若n不存在,则P是无限阶的。

也就是当给定点P时,我们已知数x求xG是非常简单的,但反过来已知xG求x就非常困难了,利用离散度数就可以保证椭圆曲线密码的安全性。

有限域上的椭圆曲线

我们知道椭圆曲线是连续的,并不适合加密;所以我们需要把椭圆曲线定义在有限域上的,把它变成离散的点。

有限域Fp是指对于某个给定的质数P,由0,1,2,3.....P-1组成的P个元素所组成的整数集合中定义的加减乘除运算。

比如当椭圆曲线位于有限域F23上时,记做:

可以理解为左侧的值和右侧的值除以23的余数相等,此时的函数图像如图所示:

如果我们已知曲线上的一点P(3,10),依照加法运算的规则计算2P,3P....结果如图所示:

当我们已知P(3,10),Q(9,7),求-P,P+Q,2P时,计算过程如下所示:

椭圆曲线加密ECC

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

加密过程如下:

  • Alice选定一条椭圆曲线E,并取椭圆曲线上一点作为基点G 假设选定E29(4,20),基点G(13,23) , 基点G的阶数n=37
  • Alice选择一个私有密钥k(k<n),并生成公开密钥K=kG 比如25, K= kG = 25G = (14,6)
  • Alice将E和点K、G传给Bob
  • Bob收到信息后,将待传输的明文编码到上的一点M(编码方法略),并产生一个随机整数r(r<n,n为G的阶数) 假设r=6 要加密的信息为3,因为M也要在E29(4,20) 所以M=(3,28)
  • Bob计算点C1=M+rK和C2=rG C1= M+6K= M+6*25*G=M+2G=(3,28)+(27,27)=(6,12) C2=6G=(5,7)
  • Bob将C1、C2传给Alice
  • Alice收到信息后,计算C1-kC2,结果就应该是点M C1-kC2 =(6,12)-25C2 =(6,12)-25*6G =(6,12)-2G =(6,12)-(27,27) =(6,12)+(27,2) =(3,28)

参数要求:

  • p越大安全性越好,但会导致计算速度变慢,200bit左右可满足一般安全要求
  • n应为质数

ECC VS  RSA

优点:

  • 安全性能更高
  • 160位ECC与1024位RSA、DSA有相同的安全强度
  • 处理速度更快
  • 在私钥的处理速度上,ECC远 比RSA、DSA快得多
  • 带宽要求更低
  • 存储空间更小
  • ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多

缺点:

  • 设计困难,实现复杂
  • 如果序列号设计过短,那么安全性并没有想象中的完善

椭圆曲线签名算法

即是ECDSA。

这里我们依然假设私钥、公钥分别为k,K。其中K=kG,G为基点。

私钥签名:

  • Alice选择随机数r,计算点rG(x, y)。
  • Alice根据随机数r、消息M的哈希h、私钥k,计算s = (h + kx)/r。
  • Alice将消息M、和签名{rG, s}发给接收方。

公钥验证签名:

  • Bob收到消息M、以及签名{rG=(x,y), s}。
  • Bob根据消息M,求哈希h。
  • 使用发送方公钥K计算:hG/s + xK/s,并与rG比较,如相等即验签成功。

验证原理

hG/s + xK/s = hG/s + x(kG)/s = (h+xk)G/s = r(h+xk)G / (h+kx) = rG

这里关键的一点是引入了随机数r,提高了签名的安全性,即使同一条消息,只要改变随机数r,所得到的签名也会随之改变。

椭圆曲线加密和签名算法相关推荐

  1. 椭圆曲线加密与NSA后门考古

    本文主要介绍椭圆曲线的基本原理以及基于椭圆曲线的密码学实现,包括ECC加密.ECDH秘钥交换以及ECDSA签名算法,并介绍其中潜在的一些安全问题.其中分析了两个ECC实现相关的真实案例,分别是索尼PS ...

  2. 对称加密与非对称加密、签名算法

    对称加密与非对称加密.签名算法 https://www.cnblogs.com/zfxJava/p/5295957.html 总结 (1)信息 + HASH = 摘要 摘要 + 私钥 = 数字签名(给 ...

  3. 【以太坊源码阅读】椭圆曲线加密和EIP155

    1.以太坊椭圆曲线加密r,s,v https://crypto.stackexchange.com/questions/59506/ecdsa-recover-on-arbitrary-values ...

  4. python椭圆曲线加密算法_ECC椭圆曲线加密学习笔记

    0x00 前言 之前做题的时候遇到一个ECC相关的题目,学习了好几篇大佬的文章ECC的剖析文章,学习之后也记录一下,写一遍加强自己的巩固. 此文章严格意义上来讲应该算是读书笔记,在总结过程中观摩了很多 ...

  5. 椭圆曲线加密中定义的加法运算

    设椭圆曲线为 (1)若椭圆曲线上两个点和相同,且,则                   (2)若椭圆曲线上两个点和不同,且,则                 编程实现的主要难点在于取模运算,而且会 ...

  6. 椭圆曲线加密(Elliptic Curve Cryptography, ECC)

    近年来,国内外的科研人员面向设备资源受到限制的多种场景提出了很多基于ECC的认证密钥协商协议.虽然各协议应用场景不尽相同,但解决的问题和最终的目标都较为类似,可以归纳为在性能开销尽可能小的前提下,安全 ...

  7. 转载:Openssl生成rsa和椭圆曲线加密公钥密钥创建根ca签名https服务器证书签名...

    转载:Openssl生成rsa和椭圆曲线加密公钥密钥创建根ca签名https服务器证书签名 Openssl生成rsa和椭圆曲线加密公钥密钥创建根ca签名https服务器证书签名 July 20, 20 ...

  8. 椭圆曲线加密(ECC)

    什么是椭圆曲线加密(ECC)? 比特币使用椭圆曲线算法生成公钥和私钥,选择的是secp256k1曲线.与RSA(Ron Rivest,Adi Shamir,Len Adleman三位天才的名字)一样, ...

  9. 离散对数和椭圆曲线加密原理

    为什么是椭圆曲线加密? 椭圆曲线加密(以下简称ECC)实际上已经应用到了各个网站的HTTPS连接中.你平常访问的网站,大部分都是基于椭圆曲线加密,比如你现在正在浏览的CSDN.如果你用的是chrome ...

最新文章

  1. 近期活动盘点:大咖云集,中国AI创新者论坛(3.21)
  2. python在windows下操作word的方法的代码
  3. 用于在公网环境下测试的Telnet/SSH服务器
  4. 数据挖掘之3种数据归一化方法及代码实现
  5. Scanner进阶详细讲解
  6. Frontpage网页制作软件,你们还记得吗?
  7. Reactive Extensions入门(4):Rx实战
  8. linux-系统资源查看-动态
  9. 机器人学习--移动机器人定位导航性能评估规范
  10. 八年级计算机考试试题奥运会,八年级信息技术考试试题及答案
  11. mysql hugepage_mysql启用hugepage-阿里云开发者社区
  12. 使用maya.cmds加载和卸载插件
  13. 智公网:公务员行测基础考点
  14. 在线会议中人脸面部轮廓图像提取(三)——Dlib库人脸面部轮廓图像特征提取
  15. Inline Hook 钩子编写技巧
  16. Java session write
  17. Vue element 自定义表单验证(验证联系方式、邮箱、邮政编码)
  18. 《操作系统真象还原》第十五章 ---- 实现系统交互 操作系统最终章 四十五天的不易与坚持终完结撒花 (下)(遗憾告终)
  19. python DES加解密实例(pyDes)
  20. 100个python算法超详细讲解:角谷猜想

热门文章

  1. 这个时代“寒门再难出贵子”
  2. MailKit和MimeKit 收发邮件
  3. idea项目不报错 启动时却提示一堆程序包找不到 的解决方法
  4. 公司挖来一个阿里Java大神,生产环境故障调优很溜
  5. 【北亚数据恢复】Hp DL380服务器raid磁盘故障导致数据库数据丢失的数据恢复案例
  6. 信息的安全传输(JAVA实现信息的安全传输工具)
  7. 4月10日服务器例行维护公告,4月10日服务器例行维护公告
  8. BZOJ 1193--马步距离
  9. Kubernetes学习笔记十:部署Mysql、Redis和Shardingshere
  10. 中国探月计算机考试时间,揭秘人类探月历程(组图)