当前位置:   article > 正文

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

ecc加密算法python

0x00 前言

之前做题的时候遇到一个ECC相关的题目,学习了好几篇大佬的文章ECC的剖析文章,学习之后也记录一下,写一遍加强自己的巩固。

此文章严格意义上来讲应该算是读书笔记,在总结过程中观摩了很多位前辈的帖子和书籍资料,一字一句的写下来最后也只是勉强理解了ECC,所以难免会有说的不严谨或是思考错误的地方,大佬们轻喷,也希望跟我一样刚开始学习的伙伴能够对ECC多一点点认识。

0x01 ECC介绍

椭圆曲线密码学(Elliptic curve cryptography),简称ECC,和RSA、ElGamel算法等类似,是一种公开秘钥加密的算法,也就是非对称加密。ECC被公认为在给定秘钥长度下最安全的加密算法。

0x02 数学引入

1. 平行线谈起

从初中数学开始,我们就知道两条平行线是永不相交的。不过到了近代这个结论也被质疑了,目前为止我们所见到的都是有限远的平行线,在有限远的距离内,平行线的确是永不相交的,可是在我们看不到的无穷远处呢,平行线会不会最终相交,这就变成一个问题。

所以平行线 a // b 永不相交是一个假设

所以也可以假设 a和b 最终会在一个无穷远处 P∞相交

根据这个假设做出下图:

假设平行线a和平行线b相交于无穷远处P∞

所以P∞就是平行线的交点,为了区别, 之后将平面上的点称为平常点。

根据上面的简单分析可以得到以下几个特点:

(1) 直线L上只有一个无穷远点P∞

(2) 平面上一组相互平行的直线有公共的无穷远点,比如图中的a和b,所以所有平行线都应该相交于同一个无穷远点P∞

(3) 平面上任何相交的直线L1 和 L2有不同的无穷远点。(无穷远点是平行线的交点,既然L1和L2相交与平面了,那么他们的无穷远点肯定是不同的)

(4) 平面上全体无穷远点会构成一条无穷远直线。

(5) 平面上全体无穷远点与全体平常点构成射影平面。

2. 射影平面

射影平面的概念是从普通直角坐标系引入的,也就是中学时候笛卡尔积坐标系。

我们都知道,笛卡尔积坐标系是没有设置无穷点的,所以为了表示无穷远点,就产生了一个叫做射影平面坐标系的东西,这个射影平面坐标系可以同时表示无穷远点和平常点。

接下来看具体是如何建立射影平面坐标系的。

这是普通的笛卡尔积坐标系:

坐标系上有一个点A,坐标为 A(4,3) x=4 y=3

现在令 x = x/z , y = y/z (z!=0),则可以将A点表示为A(x,y,z)

现在就在平面直角坐标系的基础上建立了一个新的坐标体系

代入运算一下:

这里 x/z = 4 y/z=3 (z!=0)

所以 x = 4z y = 3z

所以新的坐标系中A点坐标表示为A(4z,3z,z)

所以A(4,3,1)

B(8,6,2)

C(12,9,3)

...

等表示形式为(4z,3z,z)的点都是A点在新坐标系中的坐标表示。

3. 直线方程

中学的时候就知道,直线方程为:Ax + By +C = 0 (AB不同时为0)

根据上面的分析可以得到直线在新坐标系中的表示为: A(x/z) + B(y/z) + C = 0

左右乘以z可以得到新的直线方程为: Ax+ By + Cz = 0

现在假设有两条平行线:

L1: Ax + By + C1z = 0

L2: Ax + By + C2z = 0

C1 != C2 ,根据平行线的定义(斜率相同)可以得知L1 平行于L2

联立两条直线方程求解可以得知:

L1 : C1z = -(Ax + By)

L2 : C2 z = -(Ax + By)

所以C1z = C2z = -(Ax + By)

又因为C1 !=C2 所以 z = 0 所以-(Ax + By) = 0,也就是(Ax+By=0)

所以表达式为:Ax + By + C*0 = 0

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/612132
推荐阅读
相关标签
  

闽ICP备14008679号