【密码学】数学基础-椭圆曲线

简介: 本文来里聊一聊密码学当中另一个用的比较广泛的数学知识,椭圆曲线,至于为什么叫椭圆曲线,在参考资料[1]当中, 给出了一个解释。

数学基础之椭圆曲线


ZPG}WSS](XR1FK6I1[){RLA.jpg椭圆曲线

本文来里聊一聊密码学当中另一个用的比较广泛的数学知识,椭圆曲线,至于为什么叫椭圆曲线,在参考资料[1]当中, 给出了一个解释。

当初人们享用微积分计算椭圆曲线的周长,通过一定的积分技巧,最终要求出以下类型的积分:

image.png

其中分母的函数项是, 如果平方以下,就得到了, 这个恰好是椭圆曲线的方程的一种形式,这种形式被称为Weierstrass型。本文也主要讨论这一种类型,当然其他类型的曲线在密码学中也有使用,由于个人水平有限,就先只讲一下Weierstrass型。

友情提示: 本文后面会用到之前聊过的有限域的相关知识,如果不熟悉的读者可以自行回顾一下我之前写的文章。


实数域上的椭圆曲线

先来看一下实数域上的椭圆曲线,这里推荐一个工具,cocalc, 具体链接可以再参考资料里面找,这个工具可以在线使用saga等工具,本文当中大部分图都是用这个工具绘制的,同样我也会给出绘制的代码,各位读者大佬们可以自己玩玩。

先来看几个例子:

E = EllipticCurve([-1, 0])
Ep = plot(E,-3,4,thickness=1)
show(Ep)

H83EF7_2TDH~`FO46FN0D$4.png

image.gif曲线一

上图表示的是, 这一条曲线的图。

E = EllipticCurve([-1, 1])
Ep = plot(E,-3,4,thickness=1)
show(Ep)

25EK[4QE])M]W(OUBW[}_50.png曲线二

上图表示的是, 这一条曲线。

其余对于a和b的改变曲线的形状,读者可以自行构建环境运行看看,这里我就不过多去截图了。

直观的看完椭圆曲线的形状,那么接下来我们来看一下有关椭圆曲线的运算,本文只是简单介绍一下运算的规则和性质,有关证明,我其实也不太熟悉,所以就不讲了,这次不给自己挖坑,证明这东西看着头大,哈哈。

考虑一个集合,满足椭圆曲线(这里的曲线目前指的是Weierstrass, 后文不做特殊说明,均为这种形式)表达式所有的点(x, y)构成的集合, 这里要加上一个无穷远点的概念,记做O, 我们记做集合E(a, b), 如果a和b不同,所对应的集合也就不同。

比如上面的图当中我绘制的两条曲线,实际体现在代码当中就是EllipticCurve([-1, 0])EllipticCurve([-1, 1]), 分别对应a和b的值。

有了集合,自然而然的要考虑在这个集合上可以定义什么运算,我们在这个集合上定义一个加法运算"+", 可以证明,如果a和b满足如下条件:

image.png

的话,在这个加法运算和E(a, b)下,构成一个群,具体证明我也不太清楚,本文的重点还是一些结论,对于证明什么的先放到一边去吧。

首先,给出无穷远点,也就是上文提到的O是怎么来的,从几何的角度来说,如果椭圆曲线上的三个点共线,则他们的和为O, 基于这个无穷远点的定义,我们给出椭圆曲线上面具体的加法运算:

  • O是加法的单位元,对于单位元的性质,具体参考有限域的的知识,这里不啰嗦了,下面假设椭圆曲线上有两个点P和Q, 其中, 并且 。
  • 点P的负元是和点P当中x相同y坐标相反的点,根据椭圆曲线关于y轴对称,很容易验证,这个负元是在椭圆曲线上的,举个例子,比如P = (x, y),那么 -P = (x, -y)。
  • 如果要计算P和Q两个点的和,这肯定是不能简单的相加的,不相信的可以自己试试,如果直接横纵坐标相加,这个点大概率的不在这条曲线上了,所以定义如下规则的加法运算,连接P, Q, 显然可以得到一条直线和椭圆曲线相交于另一点R, 这个焦点是存在且唯一的,为了构成一个群,定义如下加法运算: P + Q = -R
  • 考虑Q=-P的情况,这里定义 P + (-P) = O, 两点由一条垂线连接,可以假设他们相交于无穷远点O
  • 最后一种情况,也就是倍点运算,也就是Q+Q的情况,这里可以画一条切线,相交曲线与S, 这里 Q + Q = 2Q = -S

通过上面的定义,可以证明在上述的加法运算下构成一个交换群。

对,作为灵魂画手的我又来手绘了,下图演示了在椭圆曲线上的加法运算,依然不接收绘图的吐槽,哈哈。

~PV~ATS)([9(ON]{DC8U5(S.png

image.gif加法运算

上面是通过几何的方面对椭圆曲线上的加法运算进行了描述,但是这个几何看起来直观,但是要进行运算,还是需要给出代数描述,这里直接给出结论,对于推导过程,想了解的可以读者自行查阅相关资料。

假设P = (, ), Q = (, ), 连接它们曲线的斜率为, 这个实际上也就是两点间的斜率公式,假设P和Q的连线l与椭圆曲线相交于点R, 经过计算可得R = P + Q,即:

image.png

除此之外,P和Q重合的情况,也就是倍点运算,具体公式如下:

image.png

到这里,实数域上面的椭圆曲线就介绍完了,本文只是做了一个简单的介绍,涉及到详细的数学推导这里都没有展开,有兴趣的读者可以自行查阅相关资料,不过作为了解这个东西,只是了解一些结论方面的东西个人感觉也够用了,当然如果想在椭圆曲线上面做深入研究的话,这个还是需要更深一层的了解的。


有限域()上的椭圆曲线

对于密码学而言,定义在实数域上面的东西大概率是没法直接来用的,因为在计算机里面存在的大多不会是连续的值,都是离散的值,所以考虑一下在有限域上的椭圆曲线,这里本文只讨论下的有限域,对于GF()这个其实也相似,不过计算起来要麻烦点,毕竟多项式的运算没有数字运算简单,所以先不讨论了。

来看一下在下面的椭圆曲线的表现形式,其实也就是x和y都取整数,并且模p, 表达式如下:

image.png

同样的,这里面也是有无穷远点O的,和实数域上的椭圆曲线不同的是,这里多了一个参数p, 所以这个群记做, 同样的,要想构成一个群,也是需要满足一定条件的, 具体条件如下:

image.png

这里和实数域上的也类似,只不过多了取模的运算。

同样的,我们来看一个例子,依然用cocalc来进行绘图,假设曲线, 具体绘图代码如下:

E = EllipticCurve(GF(23),[1,1])
print(E)
graphics_array([plot(E.change_ring(GF(23)))])

_`A~Q}DAUVW4OW13`HN55L0.png

image.gifE_23(1, 1)

这里,实际上他就不是连续的了,而是一个个离散的点,并且是没有什么规律的,具体的加法运算和实数域上类似,只不过要注意的是这里是在下的运算。

不过这个就没有几何方面的直观显示了,直接给出代数定义吧, 对于曲线的两个点P和Q:

image.png

其中:

image.png

这里实际上和实数域上面也是类似的,公式来源于密码编码学域网络安全一书。


小结

本文主要是介绍了一些椭圆曲线的一些运算方法和结论,并没有涉及实质性的证明,对于椭圆曲线来说,这里面用到的数学知识实际上比Elgamal和RSA多了不少,本文公式和文字比较多,也比较枯燥,希望读者见谅。

相关文章
|
5月前
|
存储 安全 算法
|
算法 区块链 数据安全/隐私保护
[区块链] 密码学——椭圆曲线密码算法(ECC)
  今天在学椭圆曲线密码(Elliptic Curve Cryptography,ECC)算法,自己手里缺少介绍该算法的专业书籍,故在网上查了很多博文与书籍,但是大多数博客写的真的是。。。你懂的。。。真不愧是 ‘天下文章一大抄’ 啊! 雷同不说,关键是介绍的都不是很清楚,是我在阅读过程中、产生的很多...
2917 0
|
4月前
|
算法 安全 Java
深入解析ECC(椭圆曲线密码学)加解密算法
深入解析ECC(椭圆曲线密码学)加解密算法
深入解析ECC(椭圆曲线密码学)加解密算法
|
5月前
R语言非线性方程数值分析生物降解、植物生长数据:多项式、渐近回归、米氏方程、逻辑曲线、Gompertz、Weibull曲线(下)
R语言非线性方程数值分析生物降解、植物生长数据:多项式、渐近回归、米氏方程、逻辑曲线、Gompertz、Weibull曲线
|
5月前
|
算法
R语言非线性方程数值分析生物降解、植物生长数据:多项式、渐近回归、米氏方程、逻辑曲线、Gompertz、Weibull曲线(上)
R语言非线性方程数值分析生物降解、植物生长数据:多项式、渐近回归、米氏方程、逻辑曲线、Gompertz、Weibull曲线
线性代数(方程组的几何解释)
线性代数(方程组的几何解释)
65 0
|
算法 图形学
计算机图形学 之 DDA直线算法(数值微分法)
计算机图形学 之 DDA直线算法(数值微分法)
378 0
|
人工智能
|
数据可视化 JavaScript 前端开发
【数学篇】07 # 如何用向量和参数方程描述曲线?
【数学篇】07 # 如何用向量和参数方程描述曲线?
100 0
【数学篇】07 # 如何用向量和参数方程描述曲线?
|
前端开发 数据可视化 API
【数学篇】05 # 如何用向量和坐标系描述点和线段?
【数学篇】05 # 如何用向量和坐标系描述点和线段?
186 0
【数学篇】05 # 如何用向量和坐标系描述点和线段?