ECC英文全称"Ellipse Curve Cryptography"
$ r, [8 Y6 _& {6 e
与传统的基于大质数因子分解困难性的加密方法不同,ECC通过椭圆曲线方程式的性质产生密钥
ECC164位的密钥产生一个安全级,相当于RSA 1024位密钥提供的保密强度,而且计算量较小,处理速度更快,存储空间和传输带宽占用较少。目前我国居民二代身份证正在使用 256 位的椭圆曲线密码,虚拟货币比特币也选择ECC作为加密算法。
{( d- Q8 k/ r* b2 ]2 J
从射影平面讲起 y, A% w: L, s* K
+ u. O p/ q2 A/ F. k; T1 y
古希腊数学家欧几里得的《几何原本》提出了五条公设。; e( G. G) n t. j4 |0 z
% O& w: c8 E, g F
1.由任意一点到任意一点可作直线。
2.一条有限直线可以继续延长。
3.以任意点为心及任意的距离可以画圆。( V4 q( \' r/ p$ j9 S) K$ s0 p2 K9 M1 H
4.凡直角都相等。
9 o" J+ e& [1 n+ j% [: q% R
5.同一平面内一条直线a和另外两条直线b.c相交,若在a某一侧的两个内角的和小于两直角,则b.c两直线经无限延长后在该侧相交。
《几何原本》只有在第29个命题+ t6 c% n9 S( u; B
一条直线与两条平行直线相交,则所成的内错角相等,同位角相等,且同旁内角之和等于两直角
中才用到第五公设,即《几何原本》中可不依靠第五公设而推出前28命题。因此,一些数学家提出,第五公设能不能不作为公设,而作为定理?能不能依靠前四个公设来证明第五公设?这就是几何发展史上最著名的,争论了长达两千多年的关于“平行线理论”的讨论
7 c/ i$ M7 |3 o( w/ o5 W0 T( l
1820年代,俄国喀山大学罗巴切夫斯基用“至少可以找到两条相异的直线,且都通过P点,并不与直线R相交”代替第五公设,然后与欧氏几何的前四个公设结合成一个公理系统,他经过细致深入的推理过程中,得出了一个又一个在直觉上匪夷所思,但在逻辑上毫无矛盾的几何体系。 C6 x6 ?, Z+ g9 M$ t) s0 n i
( l2 G7 m( I$ l# J5 ]
这种几何学被称为罗巴切夫斯基几何,简称罗氏几何。从罗氏几何学中,可以得出这样一个结论:逻辑上不矛盾的一些公理都有可能提供一种几何学。现存非欧几何的类型可以概括如下:0 j) n+ e2 m6 _" ?
1.坚持第五公设,引出欧几里得几何。
2.“可以引最少两条平行线”为公设,罗氏几何(双曲几何)。8 P5 X' w7 L6 i6 r1 C2 @
5 d9 v7 }, E* o( l* w; w
3.“一条平行线也不能引”为公设,黎曼几何(椭圆几何)
左:双曲几何,即罗氏几何;中:欧几里德几何;右:椭圆几何,即黎曼几何
了解非欧式几何,就可以理解平行线的交点。9 P: z! p8 c2 i" t* w t+ J9 g% V
定义平行线相交于无穷远点P∞,使平面上所有直线都统一为有唯一的交点, _2 [* k1 l: T3 i' ~/ ^" R# D
; R0 z5 o# I- e
性质:
& I* [" t) @0 ^' U
1.一条直线只有一个无穷远点;一对平行线有公共的无穷远点
. ^- E6 x7 @4 e& f
2.任何两条不平行的直线有不同的无穷远点(否则会造成有两个交点)
3.平面上全体无穷远点构成一条无穷远直线7 v2 l! q3 R' b! {
3 x' r( B, j" q, a+ F# }
射影平面:平面上全体无穷远点与全体平常点构成射影平面
$ \8 B1 j3 y/ G6 y. ~
射影平面点的定义
/ f9 a: T9 _1 x6 q9 D$ ~) ]
对普通平面上点(x,y),令x=X/Z,y=Y/Z,Z≠0,则投影为射影平面上的点(X:Y:Z)
求点(1,2)在新的坐标体系下的坐标
v# F2 g5 N. ]9 X
∵X/Z=1 ,Y/Z=2(Z≠0)
6 |$ L% H: T! m7 C# R) `* t, Y
∴X=Z,Y=2Z ∴坐标为(Z:2Z:Z),Z≠0% v3 _9 ~, ^2 \9 ?. {
2 o* f: Q0 V4 u- e7 M& M* m& u
即(1:2:1)(2:4:2)(1.2:2.4:1.2)等形如(Z:2Z:Z),Z≠0的坐标都是(1,2)在新的坐标体系下的坐标
9 X4 J; f% G; K$ t+ u. ?9 h
(2) 求平行线L1:X+2Y+3Z=0 与L2:X+2Y+Z=0 相交的无穷远点8 ~. E5 s0 c |2 R) q
0 f' a1 t8 H/ S) |6 c
∵ L1∥L2 所以有Z=0, X+2Y=0/ c! U3 Z) S& F0 t5 S' N' F: {
- \# \; u3 `0 o
∴坐标为(-2Y:Y:0),Y≠0
即(-2:1:0)(-4:2:0)(-2.4:1.2:0)等形如(-2Y:Y:0),Y≠0
椭圆曲线
一条椭圆曲线是在射影平面上满足威尔斯特拉斯方程(Weierstrass)所有点的集合
0 `" N( ~& ?; H5 T- [$ F" W4 p
Y2Z+a1XYZ+a3YZ2=X3+a2X2Z+a4XZ2+a6Z34 P0 V! U0 g9 W m5 x# h. Y" h
( C3 ^. ?5 v1 W1 _& \! R
1椭圆曲线方程是一个齐次方程
2曲线上的每个点都必须是非奇异的(光滑的),偏导数FX(X,Y,Z)、FY(X,Y,Z)、FZ(X,Y,Z)不同为0
3圆曲线的形状,并不是椭圆的。只是因为椭圆曲线的描述方程,类似于计算一个椭圆周长的方程故得名. ?& H1 S( I, H$ H* ?
6 G7 F' q: f) z9 F
椭圆曲线示例9 K# _* r. T7 G/ N
3 D6 |" Q8 s/ L4 s! H2 A+ y
非椭圆曲线示例. D0 S" p9 O u. r% }* L
9 }: [3 |& n" L$ h
这两个方程都不是椭圆曲线,因为他们在(0:0:1)点处(即原点)没有切线,不满足椭圆曲线每个点都必须是非奇异的(光滑的),
" a; Q( b5 ], R% d. O) Y* V
椭圆曲线普通方程; Z2 G9 \, Q7 p) Z; C
6 ~6 y! k9 n- b3 c/ T
椭圆曲线普通方程:
无穷远点 (0, Y, 0)8 z' W- e% m0 F* Y% k& |
平常点(x,y)斜率k:- q9 [8 C0 U& ~, @, F3 \) O
椭圆曲线阿贝尔群# P$ X# `2 L; G& ^9 m8 ? [
我们已经看到了椭圆曲线的图象,但点与点之间好象没有什么联系。我们能不能建立一个类似于在实数轴上加法的运算法则呢?这就要定义椭圆曲线的加法群,这里需要用到近世代数中阿贝尔群。8 a! v' M3 |, @, E- b, G
在数学中,群是一种代数结构,由一个集合以及一个二元运算所组成。已知集合和运算(G,*)如果是群则必须满足如下要求; y1 ~( Y1 D9 F2 _
封闭性:?a,b∈G,a*b ∈ G. J; x; W' z3 C
4 Z9 H% S* w/ n- ~$ r
结合性: ?a,b,c∈G ,有 (ab)c = a* (b*c)
单位元:ョe∈G, ?a ∈G,有ea = ae = a7 C8 y0 [/ a* H; z% _
逆元: ?a ∈G ,ョb∈G 使得 ab = ba = e# o- i% Q* ^+ T8 X+ D4 m, y
& [' f) B. F" x/ o/ }- T9 l8 _! u' ]
阿贝尔群除了上面的性质还满足交换律公理a * b = b * a
" L9 @' k) a) M7 O, i3 X
同样在椭圆曲线也可以定义阿贝尔群。
任意取椭圆曲线上两点P、Q(若P、Q两点重合,则作P点的切线),作直线交于椭圆曲线的另一点R’,过R’做y轴的平行线交于R,定义P+Q=R。这样,加法的和也在椭圆曲线上,并同样具备加法的交换律、结合律9 b; p9 g, v; A X
2 E0 k0 S* `/ C$ J4 W
同点加法2 q- S; F& n, l) ?% @
. r V5 p+ \ J3 f% l8 R
若有k个相同的点P相加,记作kP1 ]& J* O& s% V' Q w" B
P+P+P=2P+P=3P8 c3 c% ^, U( ?
有限域椭圆曲线
椭圆曲线是连续的,并不适合用于加密;所以,我们必须把椭圆曲线变成离散的点,我们要把椭圆曲线定义在有限域上。
我们给出一个有限域Fp" y" ]1 Q k. c ~; z
2 T8 P& s5 }- J% A
Fp中有p(p为质数)个元素0,1,2,…, p-2,p-1
Fp的加法是a+b≡c(mod p)
+ [, E7 [- n0 v1 q; O, t# j
Fp的乘法是a×b≡c(mod p)
. g; R. V; u1 W# |
Fp的除法是a÷b≡c(mod p),即 a×b^(-1)≡c (mod p),b-1也是一个0到p-1之间的整数,但满足b×b-1≡1 (mod p)( T( p' ?8 J6 v2 V
Fp的单位元是1,零元是 0* J- A# d1 N3 h; B# m
+ p& b2 W2 f4 U8 F, y
Fp域内运算满足交换律、结合律、分配律
椭圆曲线Ep(a,b),p为质数,x,y∈[0,p-1]
( j' \7 h( p, ~0 V: a$ B
选择两个满足下列约束条件的小于p的非负整数a、b
]- P) T- O0 t: m! R& j( _
Fp上的椭圆曲线同样有加法7 Q& s% Q% q9 w6 ~! P+ V
1.无穷远点 O∞是零元,有O∞+ O∞= O∞,O∞+P=P, ~. a7 K% m: F; N
2 A$ {$ R6 I4 _4 b7 D C: S
2.P(x,y)的负元是 (x,-y mod p)= (x,p-y) ,有P+(-P)= O∞
3.P(x1,y1),Q(x2,y2)的和R(x3,y3) 有如下关系:: a' s; I9 }' f7 O; F1 F+ w
x3≡k2-x1-x2(mod p)3 |- j3 R8 S. z
y3≡k(x1-x3)-y1(mod p)5 u% o5 P- ~; V9 k( J9 p& d- k8 p+ C
若P=Q 则 k=(3x2+a)/2y1mod p
6 |* b# U- D4 [1 B
若P≠Q,则k=(y2-y1)/(x2-x1) mod p7 }9 j2 W2 H1 D
4 ^" v2 g! g6 R6 V" M4 w
例题椭圆曲线已知E23(1,1)上两点P(3,10),Q(9,7),求(1)-P,(2)P+Q,(3) 2P) D5 ]" t8 m7 |8 b
补充:3 `2 C* o: L r" u
. Q2 [6 V6 Q4 i
-2^(-1) mod 23 进行两部分计算' z- B' G8 ^+ c& u8 [ o
/ a- h% P1 k) [. b/ ^
(1) 先算 2^(-1) 对应的数A, 在这里2^(-1)不是2的-1次方,而是2的逆元
(2) 再算-A mod 23, E9 P3 S2 z2 e
7 N* U* w( Y% Y9 a" g
(1) 计算第一步
根据有限域除法规则 2 * 2^(-1) = 1 mod 23) _# i7 _# z7 Z, [
3 h; L3 n( O9 F: ~8 p' S- Y6 }
即 2A = 1 mod 23 ==> 2A = 23 + 1 == > A = 12, z/ ]: d6 }( S; D# B7 A
1 ]1 [4 g, L& U0 j- Z
(2) 计算第二步
7 T! L6 m+ j% V6 {1 L' ?
-A mod 23 ==> -12 mod 23 即 23 -12 = 11
所以有/ g% w& H5 H3 V B# T
# q- R" J c" @- l
-2^(-1) mod 23 = 11
+ M6 o' H+ o* p! g
有限域椭圆曲线点的阶/ z9 \: ~0 I. T* q3 R3 E' s2 t
如果椭圆曲线上一点P,存在最小的正整数n使得数乘nP=O∞ ,则将n称为P的阶
若n不存在,则P是无限阶的; }( I' K' X p( c& s; U/ u
& f6 l: c& ^$ a# g' Q" B7 ~$ D+ b3 ?
计算可得27P=-P=(3,13) `* c6 Y4 M3 t
所以28P=O ∞ P的阶为28
: |+ q- k, Y0 P, }9 C! e
这些点做成了一个循环阿贝尔群,其中生成元为P,阶数为29。显然点的分布与顺序都是杂乱无章
椭圆曲线加密6 S: {: d# e* M5 ?
考虑K=kG ,其中K、G为椭圆曲线Ep(a,b)上的点,n为G的阶(nG=O∞ ),k为小于n的整数。则给定k和G,根据加法法则,计算K很容易但反过来,给定K和G,求k就非常困难。因为实际使用中的ECC原则上把p取得相当大,n也相当大,要把n个解点逐一算出来列成上表是不可能的。这就是椭圆曲线加密算法的数学依据$ T- u V# o6 G/ a% F
点G称为基点(base point)
k(k
K为公开密钥(public key)
4 `7 w/ P. }: _9 B
ECC保密通信算法7 m6 Q1 n- w) k5 Y
& N5 T. g4 a/ E7 \0 q
1.Alice选定一条椭圆曲线E,并取椭圆曲线上一点作为基点G 假设选定E29(4,20),基点G(13,23) , 基点G的阶数n=375 a7 Z& a6 y$ M4 C0 B% |
% L/ z' V- G3 o5 U+ M& h) x% ?
2.Alice选择一个私有密钥k(k
3.Alice将E和点K、G传给Bob
, Z* Z9 F) H$ B0 N6 H' A
4.Bob收到信息后,将待传输的明文编码到上的一点M(编码方法略),并产生一个随机整数r(r" Y) M, [9 X/ T0 x6 N5 ?
7 [0 S/ H$ v6 c6 G. b2 T
5.Bob计算点C1=M+rK和C2=rG C1= M+6K= M+625G=M+2G=(3,28)+(27,27)=(6,12) C2=6G=(5,7)% A0 S+ N4 X0 y+ }, H- Y3 o8 J
6.Bob将C1、C2传给Alice* U# A% @7 N; Y
7.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)
& l ^3 c* e4 _# [
数学原来上能解密是因为:C1-kC2=M+rK-krG=M+rkG-krG-M
ECC技术要求; F; d; u% e. T( h
9 ^, x6 o- K$ A' }" [7 G
通常将Fp上的一条椭圆曲线描述为T=(p,a,b,G,n,h)p、a、b确定一条椭圆曲线(p为质数,(mod p)运算)G为基点,n为点G的阶,h是椭圆曲线上所有点的个数m与n相除的商的整数部分8 x9 Q: M5 Q' U
参量选择要求:
- W1 @3 p! w! K: i; P
p越大安全性越好,但会导致计算速度变慢200-bit左右可满足一般安全要求n应为质数h≤4;p≠n×h ;pt≠1(mod n) (1≤t<20)4a3+27b2≠0 (mod p)& O( I, C# Q5 f3 c# U
ECC的应用0 i: U7 V" b- Z
比特币系统选用的secp256k1中,参数为& D5 T2 W7 a4 i0 J6 E X: g
& S. k) l/ X0 ^& i! _! a' x
p = 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F= 2^256 ? 2^32 ? 2^9 ? 2^8 ? 2^7 ? 2^6 ? 2^4 ? 1
a = 0, b = 7
2 D+ m H/ V; ?( R/ E& ^- u
G=(0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798, 0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8)
n = 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
h = 01
& W2 s u% e9 a4 \1 F
ECC vs. RSA - 优缺点; y+ P3 l0 X x3 |% V8 L
& v6 X0 {- k Q; |3 s. u
优点
安全性能更高
8 k: r. i! K2 k2 g3 v5 ^
160位ECC与1024位RSA、DSA有相同的安全强度
处理速度更快
在私钥的处理速度上,ECC远 比RSA、DSA快得多% k+ H$ E! V Y6 t" Z4 h o
带宽要求更低
. M" v; x+ ]* [2 r
存储空间更小- Z( W& H1 [( x# z) _1 r# M4 S
ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多0 {/ V5 q8 Z( V, D; ^) f
缺点
设计困难,实现复杂0 T, ^. L; x/ q' l
+ a2 s' Y. y9 q2 Q" s4 \( d
如果序列号设计过短,那么安全性并没有想象中的完善# l7 a, t- F! F4 Z
* x. l" b* d, o" Z
成为第一个吐槽的人