椭圆曲线密码体制

  • 椭圆曲线的计算方式
    • 椭圆曲线的定义
    • 椭圆曲线上的群操作
  • 使用椭圆曲线构建离散对数问题
  • 基于椭圆曲线的Diffie-Hellman密钥交换

椭圆曲线的计算方式

椭圆曲线的定义

素域定义
  有限域最直观的例子就是阶为素数的域。域GF(p)GF(p)GF(p)的元素可以用整数0,1,...,p−10,1,...,p-10,1,...,p−1来表示。域的两种操作就是模整数加法和整数乘法模ppp;

  假设 ppp 是一个素数,整数环ZpZ_pZp​表示为GF(p)GF(p)GF(p),也称为是拥有素数个元素的素数域或伽罗瓦域。GF(p)GF(p)GF(p)中所有的非零元素都存在逆元,GF(p)GF(p)GF(p)内的算术运算都是模 ppp 实现的。

椭圆曲线定义

  Zp(p>3)Z_p(p>3)Zp​(p>3)上的椭圆曲线指满足以下条件的所有对(x,y)∈Zp(x,y) \in Z_p(x,y)∈Zp​的集合y2≡x3+a∗x+bmodpy^2 \equiv x^3 + a*x + bmodpy2≡x3+a∗x+bmodp  以及一个无穷大的虚数点σ\sigmaσ,其中a,b∈Zpa, b \in Z_pa,b∈Zp​  并且满足条件4⋅a3+27⋅b2≠0modp.4·a^3 + 27 · b^2 ≠ 0mod p.4⋅a3+27⋅b2=0modp.

  椭圆曲线的定义要求该曲线是非奇异的。从地理位置上说,这意味着该曲线的图不会自我相交或没有顶点;如果曲线的判别式−16(4a3+27b2)-16(4a^3 + 27b^2)−16(4a3+27b2)不等于0,就可以保止这一尽。

椭圆曲线上的群操作

  假设用加法符号“+”“+”“+”表示群操作(注意:将操作选择命名为“加法”完全是随意的,我们也可以将其称为乘法。)。“加”意味着给定两个点及其对应的坐标,比如P=(x1,y1)P = (x_1, y_1)P=(x1​,y1​)和Q=(x2,y2),Q = (x_2, y_2),Q=(x2​,y2​),我们需要计算第三个点RRR的坐标,使得:P+Q=RP + Q = RP+Q=R(x1,y1)+(x2,y2)=(x3,y3)(x_1, y_1) + (x_2, y_2) = (x_3, y_3)(x1​,y1​)+(x2​,y2​)=(x3​,y3​)
  必须区分两种情况: 两个不同点的加法(即相异点相加) 和 同一点与自身的加法(即相同点相加)。

  相异点相加P + Q :这个主要是针对计算 R=P+QR = P + QR=P+Q,且P≠QP ≠ QP=Q的情况。构建的方法为: 画一条经过РРР 和 QQQ的线,该线与椭圆曲线的交点就是第三个点。根据定义,将第三个点关于xxx轴映射,得到的映射点就是点RRR。图9-4显示了实数上椭圆曲线的相异点相加。

  相同点相加P + P: 这主要针对的是P+QP + QP+Q但P=QP = QP=Q的情况。因此,可以写作R=P+P=2PR = P+P = 2PR=P+P=2P。构建方法为:画一条经过РРР点的切线,即可得到此切线与椭圆曲线的第二个交点; 将此交点关于xxx轴映射,得到的对称点就是相同点相加的结果RRR。图9-5显示了实数上椭圆曲线的相同点相加。

  事实证明,如果椭圆曲线上的点采用这种方式进行相加,则点的集合也满足群所需的大多数条件,即闭合性、结合性、存在单位元和逆元

椭圆曲线上的相同点相加与相异点相加
x3=s2−x1−x2modpx_3 = s^2 - x_1 - x_2 mod px3​=s2−x1​−x2​modpy3=s(x1−x3)−y1modpy_3 = s(x_1 - x_3) - y_1 mod py3​=s(x1​−x3​)−y1​modp  其中s={y2−y1x2−x1modp,当P≠Q(相异点相加)3x12+a2y1modp,当P=Q(相同点相加)s = \begin{cases} \frac{y_2 - y_1}{x_2 - x_1} mod p, & \text {当$P ≠ Q$(相异点相加)} \\ \frac{3x^2_1 + a}{2y_1}modp, & \text {当$P = Q$(相同点相加)} \end{cases} s={x2​−x1​y2​−y1​​modp,2y1​3x12​+a​modp,​当P=Q(相异点相加)当P=Q(相同点相加)​

注意: 在相异点加法中,参数sss指的是经过РРР和QQQ的直线的斜率;而在相同点加法中,参数sss指的是经过点PPP的切线的斜率。

那么现在问题来了:椭圆曲线上的所有点是否都满足P+σ=PP + \sigma = PP+σ=P的单位元(或中性元)σ\sigmaσ。事实证明,满足这个条件的点(x,y)(x,y)(x,y)是不存在的。所以,我们将一个无穷的抽象点定义为单位元σ\sigmaσ。这个无穷点可以看作是位于y轴正半轴的无穷远处,或y轴负半轴的无穷远处

  根据群的定义,现在可将任何群元素PPP的逆元−P-P−P定义为: P+(−P)=σ.P + (-P) = \sigma.P+(−P)=σ.

  那么我们如何找到−P-P−P? 如果使用 tangent-and-chord方法,则点P=(xp,yp)P=(x_p, y_p)P=(xp​,yp​)的逆元为点−P=(xp,−yp)-P=(x_p, -y_p)−P=(xp​,−yp​),即其逆元是该点关于xxx轴对称的点。下图显示了点РРР与其对应的逆元, 从图中可知,找到点P=(x,,y,)P=(x,,y,)P=(x,,y,)的逆元非常简单,只需得到其yyy坐标的负数即可。对素数域GF(p)GF(p)GF(p)上的椭圆曲线而言,实现起来非常容易,因为−yp≡p−ypmodp-y_p \equiv p - y_p mod p−yp​≡p−yp​modp,因此可以得到:−P=(x,p−yp)。-P =(x, p - y_p)。−P=(x,p−yp​)。

示例:考虑小型域Z17Z_{17}Z17​上的曲线:
E:y2≡x3+2x+2mod17E: y^2 \equiv x^3 + 2x + 2 mod 17E:y2≡x3+2x+2mod17点P=(5,1)P = (5,1)P=(5,1)的相同点加法为:2P=P+P=(5,1)+(5,1)=(x3,y3)2P = P + P = (5, 1) + (5, 1) = (x_3, y_3)2P=P+P=(5,1)+(5,1)=(x3​,y3​)s=3x12+a2y1=(2∗1)−1(3∗52+2)=2−1∗9≡9∗9≡13mod17s = \frac{3x^2_1 + a}{2y_1} = (2*1)^{-1}(3*5^2 + 2) = 2^{-1} * 9 \equiv 9 * 9 \equiv 13 mod 17s=2y1​3x12​+a​=(2∗1)−1(3∗52+2)=2−1∗9≡9∗9≡13mod17x3=s2−x1−x2=132−5−5=159≡6mod17x_3 = s^2 - x_1 - x_2 = 13^2 - 5 - 5 = 159 \equiv 6 mod 17x3​=s2−x1​−x2​=132−5−5=159≡6mod17y=s∗(x1−x3)−y1=13∗(5−6)−1=−14≡3mod17y =s*(x_1 - x_3) - y_1 = 13*(5 - 6) - 1= -14 \equiv 3 mod 17y=s∗(x1​−x3​)−y1​=13∗(5−6)−1=−14≡3mod172P=(5,1)+(5,1)=(6,3)2P = (5, 1) + (5, 1) = (6,3)2P=(5,1)+(5,1)=(6,3)

  检查结果2P=(6,3)2P=(6,3)2P=(6,3)是否真的是曲线上的一个点:
y2≡x3+2∗x+2mod17y^2 \equiv x^3 + 2*x + 2 mod 17y2≡x3+2∗x+2mod1732≡63+2∗6+2mod173^2 \equiv 6^3 + 2*6 + 2 mod 1732≡63+2∗6+2mod179=230≡9mod179 = 230 \equiv 9 mod 179=230≡9mod17

使用椭圆曲线构建离散对数问题

定理一: 曲线上的点与σ\sigmaσ一起构成了循环子群。在某些条件下,椭圆曲线上的所有点可以形成一个循环群。

示例:找到以下曲线上的所有点:E:y2≡x3+2x+2mod17E: y^2 \equiv x^3 + 2x + 2 mod 17E:y2≡x3+2x+2mod17  曲线上的所有点恰好形成了一个循环群,而且该群的阶为#E=19。

  从本原元P=(5,1)P=(5,1)P=(5,1)开始,计算PPP的所有幂值。更确切地讲,由于群操作为加法,所以需要计算P,2P,...,(#E)PP,2P,...,(\#E)PP,2P,...,(#E)P。以下是得到的元素的列表:

定理二(Hasse’s定理):给定一个椭圆曲线EEE模ppp,曲线上点的个数表示为#E\#E#E,并且在以下范围内:
p+1−2p≤#E≤p+1+2pp + 1 - 2\sqrt{p} ≤ \#E ≤ p + 1 + 2\sqrt{p}p+1−2p​≤#E≤p+1+2p​

  Hasse’s定理也称为Hasse’s边界,它说明了点的个数大概在素数p的范围内。这个结论具有非常大的实用性。例如,如果需要一个拥有21602^{160}2160个元素的椭圆曲线,我们必须使用一个长度大约为160160160位的素数。

注意: 在密码体制中, ddd 通常为整数, 也是私钥, 而公钥TTT是曲线上的一个点, 坐标为T=(xT,yT)T = (x_T, y_T)T=(xT​,yT​)。

椭圆曲线离散对数问题(ECDLP)

  给定一个椭圆曲线EEE,考虑本原元РРР和另一个元素TTT。则DLDLDL问题是找到整数(1≤d≤#E)(1 ≤ d ≤ \#E)(1≤d≤#E),满足:P+P+……+P⏟d次=dP=T.\ \underbrace{P+P+……+P}_{d次} = dP = T. d次P+P+……+P​​=dP=T.

基于椭圆曲线的Diffie-Hellman密钥交换

  可以实现基于椭圆曲线的密钥交换,这也称为椭圆曲线Diffie-Hellman密钥交换或ECDH。首先必须统一域参数,即实现所需要的合适的椭圆曲线以及此曲线上的一个本原元。

ECDH域参数

椭圆曲线 Diffie-Hellman 密钥交换(ECDH)

  证明此协议的正确性非常简单。

  证明:Alice 计算aB=a(bP)aB= a(bP)aB=a(bP)  而Bob计算bA=b(aP).bA = b(aP).bA=b(aP).
由于点加法具有结合性(提示:结合性是群的一个属性),双方计算得到的结果相同,即点TAB=abP.T_{AB}= abP.TAB​=abP.

  从协议中可以看出,Alice和 Bob分别选择了自己的私钥 aaa 和 bbb,这两个私钥都是非常大的整数。双方都使用各自的私钥计算出各自的公钥 AAA 和 BBB,而且这两个公钥都是曲线上的点。公钥是通过点乘法计算得到的,双方彼此交换公钥参数。然后,Alice和 Bob利用他们收到的公钥以及各自的私钥参数再次执行点乘计算,便可得到联合密钥TABT_{AB}TAB​。联合密钥TABT_{AB}TAB​可以用来得到会话密钥,比如作为AES算法的输入。注意: (xAB,yAB)(x_{AB}, y_{AB})(xAB​,yAB​)的两个坐标并不是独立的: 给定xABx_{AB}xAB​,将xxx的值代入到椭圆曲线方程中就可计算出另一个坐标。因此,会话密钥生成时可以只用其中一个坐标。

示例:对于拥有如下域参数的ECDH。椭圆曲线为y2=x3+2∗x+2mod17y^2 =x^3 + 2*x + 2 mod 17y2=x3+2∗x+2mod17 ,它构成了阶为#E=19\#E=19#E=19的循环群。基点为P=(5,1)P=(5,1)P=(5,1),该协议的工作方式如下:

参考资料:《深入浅出密码学》–Christof Paar,Jan Pelzl著

9 椭圆曲线密码体制相关推荐

  1. 椭圆曲线密码体制(ECC)

    2002年,美国SUN公司将其开发的椭圆加密技术赠送给开放源代码工程 公钥密码体制根据其所依据的难题一般分为三类:大整数分解问题类.离散对数问题类.椭圆曲线类.有时也把椭圆曲线类归为离散对数类. 椭圆 ...

  2. ElGamal公钥密码和椭圆曲线密码体制

    ElGamal公钥密码 基于有限域上离散对数问题的公钥密码体制,最著名的是ElGamal体制,是由T. ElGamal在1985年提出的 ElGamal有较好的安全性,同一明文在不同时刻会产生不同的密 ...

  3. 椭圆曲线公钥密码体制

    椭圆曲线公钥密码体制 1 背景介绍 1.1 密码体制的含义 1.2 椭圆曲线密码体制 2 算法过程 2.1 理论基础 2.2 基于离散对数上的难解问题 2.3 加解密过程 2.4 攻击 3 算法实现 ...

  4. c语言编程实现dsa算法,椭圆曲线加密算法的C语言实现.doc

    椭圆曲线加密算法的C语言实现 毕业设计(论文) 题目: 椭圆曲线加密算法的C语言实现 院(系) 信息科学与工程学院 专 业 电子信息工程 届 别 07级 学 号 0715212026 姓 名 王正辉 ...

  5. 【密码学-2】什么是椭圆曲线密码

    文章目录 前言 一.椭圆曲线是什么? 二.ECC加密算法 1.简化的加密过程 2.数学相关知识 总结 本文共2042字,阅读全文约需10分钟. 前言 上回书我们说到,在常见的三种公钥密码学算法中,椭圆 ...

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

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

  7. 【公钥密码】ECC椭圆密码体制 (实现Elgamal加密方法)

    CryptoAlgor 项目地址 (四个实验完整源码) 1. Github 项目地址         2. Gitee 项目地址 该项目的目录: 1.四个古典密码       /classcipher ...

  8. 【密码学Sage代码】椭圆曲线加密/解密(基于《密码编码学与网络安全——原理与实践(第七版)》)

    [密码学Sage代码]椭圆曲线加密/解密(基于<密码编码学与网络安全--原理与实践(第七版)>) 教材内容: 实践的Sage代码: #[静水流深Sage代码]使用椭圆曲线密码体制进行加密/ ...

  9. 【区块链技术工坊46期】PPIO蒋鑫:椭圆曲线密码学简介

    1. 活动基本信息 1)题目: [区块链技术工坊46期]椭圆曲线密码学简介 2)议题: 目前区块链项目如火如荼,几乎所有的区块链都会用到钱包,我们也经常听说椭圆曲线这个密码学术语,那么它们之间有没有什 ...

  10. 公钥密码体制之RSA

    记一次密码学上课所学的公钥密码体制学习.从一开始的古典密码到流密码再是分组密码,再是现在的公钥密码体制. 产生原因 公钥密码体制的产生主要是因为两个方面的原因:一是由于常规的密钥密码体制的密钥分配问题 ...

最新文章

  1. 《java编程思想》学习笔记——内部类五
  2. 固态铝电解电容与液态铝电解电容
  3. js控制网页滚动条往下滚动
  4. idea-单独运行main类
  5. 基于matlab实现的人脸检测
  6. MongoDB查询某个字段存在的语句
  7. jquery 1~6
  8. pytorch中lstm用法详解(二)
  9. 通过elasticsearch对日志进行搜索热词统计
  10. 一次简单的 JVM 调优,性能提升了15%
  11. 第13章 集成学习和随机森林 学习笔记上
  12. 关于Decorator模式
  13. php mysql社工库_社工库源码 PHP ASP,持续更新
  14. MySQL基础知识,入门必备
  15. 拼多多商家使用拼多多上传图片尺寸软件教程
  16. Zemax操作25--像差理论和修正(球差、慧差、像散)
  17. 电脑网络没有问题,就是电脑连不上网的解决办法
  18. AriaNG保存服务器信息,Aria2 AriaNg 安装配置教程
  19. 面试金典12(Python)—— 删除中间节点(简单)
  20. php微信端获取头像不显示不出来,解决微信转发到朋友圈没有获取页面头像以图标展示。...

热门文章

  1. Model of an Electric Arc for Circuit Analysis(翻译)
  2. 第九课堂:人人都可以当老师
  3. 微信公众号开发三 测试号申请
  4. [bzoj4540][莫队算法]序列
  5. 6.2排序式检索 词项频率
  6. EXEL表格读取 按键精灵
  7. [Android问答] 如何获得手机屏幕分辨率?
  8. cocos2dx《我叫MT》源码和资源破解下载
  9. 【FTP】apache FTP Server使用过程中遇到的问题
  10. 带省略号的比喻句_标点符号往往能引发人们的联想,例如:“省略号像一条漫长的人生道路,等着你去书写它留下的空白。”请以一种标点符号(省略号除外)为描述对象,写一个比喻句,形象地阐发某种生活道理。...