首页
社区
课程
招聘
12
ECC椭圆曲线加密学习笔记
发表于: 2019-8-8 21:32 47731

ECC椭圆曲线加密学习笔记

2019-8-8 21:32
47731

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
所以无穷远直线表达式对应 z= 0
举个栗子:
假设现在有两条平行线:
L1 : x + 2y +3z =0
L2: x + 2y + z = 0
这里要求无穷远的交点,因为L1 // L2 所以可以得知z=0,所以x+2y=0
所以x = -2y
代入坐标点表示的话就是:
(注意无穷点处z=0)
(-2y:y:0)
所以
(-2:1:0)
(-4:2:0)
等形如(-2y:y:0) y !=0 的坐标表示就可以表示无穷点。
由此可见,新的坐标系可以表示平常点,也可以表示无穷远点。把这个可以表示平面上所有点的坐标系就称为射影平面坐标系。

4. 椭圆曲线

终于差不多讲到正题了, 之前花了比较长的篇幅讲射影平面坐标系,是因为椭圆曲线方程是建立在射影平面坐标系下的。
看看维基百科上对椭圆曲线是如何定义的:
图片描述

 

所以一条椭圆曲线在射影平面上满足Weierstrass方程的话表示为:
图片描述

 

对普通平面上点(x,y),令x=X/Z,y=Y/Z,Z≠0,得到如下方程:
图片描述

 

约掉一个Z^3
图片描述

 

最后会得到一个简化版的方程:
图片描述

 

其中有三点需要注意:
(1) 椭圆曲线方程是一个齐次方程
(2) 曲线上的每个点都必须是非奇异的(光滑的),所谓非奇异,是指曲线上任意一点的偏导数Fx(x,y,z),Fy(x,y,z),Fz(x,z,y)不能同时为0。简单来说就是满足方程的任意一个点都存在切线。
(3) 椭圆曲线并与椭圆没有关系

 

根据上面的式子:现在举例一个椭圆曲线方程:
y^2 z = x^3 + xz^2 + z^3
当z=1 时推导出下面的方程式
y^2 = x ^3 +x + 1
得到的椭圆曲线图片:
图片描述

 

或者一个比较经典的椭圆曲线:
y^2 = x^3 -x
图片描述

5. 椭圆曲线阿贝尔群

在数学中,群是一种代数结构,由一个集合以及一个二元运算组成,已知集合和
运算(G,)如果是群则必须满足如下要求:
a. 封闭性:∀a,b∈G,a
b ∈ G
b. 结合性: ∀a,b,c∈G ,有 (ab)c = a (bc)
c. 单位元:ョe∈G, ∀a ∈G,有ea = ae = a
d. ∀a ∈G ,ョb∈G 使得 ab = ba = e

 

如果是阿贝尔群的话还需要满足交换律公理: a b = b a
比如在整数内的加法运算就是一个阿贝尔群(Z,+)
a. 封闭性满足:a和b都 ∈ Z 那么 a+b一定也∈Z
b. 结合性满足:(a+b) + c = a+ (b +c )
c. 单位元满足: 0即为单位元,因为所有整数来说 a+0=0+a=a
d. 逆向满足:a的逆元为-a 因为a+(-a) = 0 就是单位元
所以整数Z的加法运算(Z,+)属于阿贝尔群

 

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2019-8-9 11:51 被jux1a编辑 ,原因:
收藏
免费 12
支持
分享
赞赏记录
参与人
雪币
留言
时间
Rye-X
为你点赞~
2022-9-27 18:43
PLEBFE
为你点赞~
2022-7-27 22:10
飘零丶
为你点赞~
2022-7-17 02:49
wusha
为你点赞~
2022-2-18 08:35
symengqh
为你点赞~
2021-11-17 11:15
东关之南
为你点赞~
2021-7-10 19:36
APT_华生
为你点赞~
2021-5-18 15:37
tcy027
为你点赞~
2020-9-30 18:36
王嘟嘟
为你点赞~
2019-11-11 17:04
天涯的你
为你点赞~
2019-9-30 15:12
jmpcall
为你点赞~
2019-8-9 13:20
orz1ruo
为你点赞~
2019-8-9 08:43
打赏 + 5.00雪花
打赏次数 1 雪花 + 5.00
收起 
赞赏  orz1ruo   +5.00 2019/08/09
最新回复 (17)
雪    币: 10846
活跃值: (1069)
能力值: (RANK:190 )
在线值:
发帖
回帖
粉丝
2
深入浅出,娓娓道来。入门好文!

发现了个经典句:“椭圆曲线并与椭圆没有关系”

另外 请LZ斟酌这几个地方:
1)h是椭圆曲线上所有点的个数m与n相处的整数部分
2)为什么要 h<=4
3)讲述加密之前,建议先讲一下ECDH
4)有2个截图有些模糊,建议高分辨率截图
5)如果LZ方便,最好把ECDSA也介绍一下,好让大家对ecc有个较全面的认识
2019-8-8 22:38
0
雪    币: 968
活跃值: (6853)
能力值: (RANK:462 )
在线值:
发帖
回帖
粉丝
3
感谢版主大大的肯定!
也非常感谢您给的宝贵意见,我仔细思考了一下:
(1) 按道理来讲确定一个曲线的六个参数应该是p、a、b、x、y、n,其中(p a b)确定曲线方程,x和y确定基点G的坐标,n表示G点的阶。包括在后面的使用中的确没有用到所谓的h。我查阅了些许资料,发现几乎所有人都千篇一律说到:
" (p 、a 、b 用来确定一条椭圆曲线,G为基点,n为点G的阶,h 是椭圆曲线上所有点的个数m与n相除的整数部分)"
我之前学习到这里的时候,感觉应该是同 p 一般情况下是200位左右的取值一样是一个定理,目前一想,应该是确保基点G的取值取得足够大,保证传输的安全性。这个点我之前没有考虑清楚,之后会再查阅资料补充完整。
(2) 我会仔细检查措辞和图片,把还不明确的地方和模糊的图片补充完整。
(3) 感谢版主给的思路,之后我会利用空闲时间把ECDSA和ECDH详细介绍。
2019-8-8 23:43
0
雪    币: 15021
活跃值: (18236)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
4
mark,椭圆曲线之前的还能看懂,椭圆曲线之后就莫名其妙的多出来了好多东西,所以想问下高数要学到什么程度??
2019-8-9 11:36
0
雪    币: 968
活跃值: (6853)
能力值: (RANK:462 )
在线值:
发帖
回帖
粉丝
5
pureGavin mark,椭圆曲线之前的还能看懂,椭圆曲线之后就莫名其妙的多出来了好多东西,所以想问下高数要学到什么程度??
我刚开始找资料学的时候,大部分资料直接开始从射影平面讲起,也是看得我很莫名其妙,后来去找了一些数据资料发现Weierstrass方程之前的概念基本上都可以用中学数学解释,而Weierstrass方程的推广非常复杂,我大概看了一下就放弃了,转而接着看简化公式。关于我学习ECC的话,其实高数部分还好,后面的内容涉及到了一部分离散数学的知识点。
2019-8-9 11:48
0
雪    币: 15021
活跃值: (18236)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
6
顾何 [em_85]我刚开始找资料学的时候,大部分资料直接开始从射影平面讲起,也是看得我很莫名其妙,后来去找了一些数据资料发现Weierstrass方程之前的概念基本上都可以用中学数学解释,而Weierst ...
中学数学到底讲了啥??我中学全都在学代码了,数学没咋学啊。。。
2019-8-9 13:26
0
雪    币: 74
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
pureGavin mark,椭圆曲线之前的还能看懂,椭圆曲线之后就莫名其妙的多出来了好多东西,所以想问下高数要学到什么程度??
椭圆曲线涉及高数不多,主要是涉及代数和复分析。可以看一下《Elliptic Curves — Number Theory and Cryptography》这本书,现在应该是第二版,比较好懂
最后于 2019-9-11 15:01 被薛国兴编辑 ,原因:
2019-9-11 14:56
0
雪    币: 1686
活跃值: (183)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
椭圆曲线不是椭圆,之前我弄这个时懵逼了好久ヾ(≧O≦)〃
前段时间构建自己的密码库时,写了个可以内核用的ECC,实现上还有些注意的东西:
0.选个依赖小好用的大整数库
1加法要注意的情况:零元、坐标(x,y) y=0时的情况、逆元情况
2乘法实现一般是分解成二进制的位来计算,这样快很多....ECC暴力破解暴难度大也是在这里(目前没公开的其它捷径)
3明文编码到一个点,通常用概率编码, 代码层面要实现 勒让德符号  来计算 二次剩余。另外还要处理不能编码的小概率情况。
最后,关于密钥创建等还有一堆,比如大质数生成,涉及到的素性校验等等...

系统学理论的,推荐参考书籍:
《密码学-加密演算法》,这个是大学教材
《密码编码学与网络安全 原理与实践 第x版》,这个是翻译国外的

最后于 2019-9-11 16:46 被GodSurvive编辑 ,原因:
2019-9-11 16:42
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9
Alice收到Bob的信息后,计算C1-kC2即可得到M
化解一下C1-kC2
C1 = M+rK
C2 = rG
所以C1 - C2 = M+rK - krG
根据乘法分配律 krG = r(kG)
根据第二条可以得知,K = kG
所以krG = rK
所以C1 - C2 实际上等于M + rK-rK = M
所以Alice只需要拿到这个C1和C2之后相减即可得到M,然后对M进行解码就可以得到明文。
LZ你好,对于这一段有个小问题,为什么C1 - C2 = M + rK - rK,C1 - kC2不是等于M吗? 
2019-10-14 21:21
0
雪    币: 10846
活跃值: (1069)
能力值: (RANK:190 )
在线值:
发帖
回帖
粉丝
10
我会唱小星星 Alice收到Bob的信息后,计算C1-kC2即可得到M 化解一下C1-kC2 C1 = M+rK C2 = rG 所以C1 - C2 = M+rK - krG 根据乘法分配律 krG = ...
楼上有一句话写掉了一个字:
所以C1 - C2 = M+rK - krG
这句话应该是:
所以C1 - kC2 = M+rK - krG

然后,,,
2019-10-15 00:22
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
楼主可以解释一下,离散对数问题中的 对数 从何而来
2019-10-16 19:51
0
雪    币: 1110
活跃值: (574)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
12
耐着性子终于看懂了一点。。。。
2019-11-11 17:04
0
雪    币: 331
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
13
完全基于自己的认识,说得不对请轻喷,我觉得椭圆曲线算法的发明主要是看到非对称加密的优势,于是就想利用这种特性,ecc应该也是利用了离散对数计算的难度来保证正向算会比较容易,而求f逆函数比较难。感谢楼主的分享,有机会持续发帖。
2019-11-22 08:00
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
为什么p,200位就安全了?有没有证明?比如像RSA困难性分解2048位的两个大素数目前是很困难的。这个有没有什么证明的吗?
2019-11-29 20:31
0
雪    币: 2090
活跃值: (3948)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
楼主你好,如果只知道G和xG,是否有简便算法可以求出x呢?最近在详细阅读密码学方面的资料,是否有可能有公式求解使得时间复杂度降低呢?
2021-7-9 20:50
0
雪    币: 7093
活跃值: (2006)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
16
竟然看懂了,好文
楼主还是把这段错误改一下吧,不看评论一直没把这个当成错误

C1 - C2 = M+rK - krG
2021-8-26 12:19
0
雪    币: 228
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
17
虽然没看懂,真心话是个数学渣渣,不过还是坚持看完,以后还要加油学习呀!!!
2021-11-17 11:17
1
雪    币: 733
活跃值: (3123)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
2021-11-17 14:45
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册